{"version":3,"mappings":"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CACf,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,KACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,KACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,KACL,EAAK,KACL,IAAK,KACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,KACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,KACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,KACL,EAAK,KACL,EAAK,KACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,IAAK,KACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,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,oBACV,WAAY,eAEZ,SAAU,eACV,SAAU,mBACV,SAAU,oBACV,SAAU,kBACV,SAAU,oBACV,SAAU,sBACV,SAAU,mBACV,SAAU,kBACV,SAAU,iBACV,SAAU,oBACV,SAAU,kBACV,WAAY,iBACZ,SAAU,iBACV,SAAU,mBACV,SAAU,kBACV,SAAU,kBACV,SAAU,wBACV,WAAY,mBACZ,SAAU,mBACV,SAAU,kBACV,SAAU,iCACV,WAAY,qBACZ,SAAU,kBACV,SAAU,kBACV,QAAS,kBACT,QAAS,sBACT,MAAO,MACP,MAAO,gBACP,OAAQ,gBACR,OAAQ,eACR,SAAU,kBACV,QAAS,cACT,QAAS,sBACT,QAAS,eACT,QAAS,gBACT,QAAS,cACT,QAAS,aACT,QAAS,YACT,QAAS,aACT,QAAS,qBACT,QAAS,eACT,QAAS,eACT,QAAS,iBACT,QAAS,aACT,QAAS,YACT,QAAS,eACT,QAAS,mBACT,QAAS,eACT,QAAS,gBACT,QAAS,eACT,QAAS,kBACT,UAAW,kBACX,QAAS,eACT,QAAS,aACT,QAAS,mBACT,UAAW,qBACX,QAAS,qBACT,QAAS,mBACT,UAAW,mBACX,UAAW,sBACX,QAAS,iBACT,QAAS,iBACT,QAAS,kBACT,UAAW,mBACX,QAAS,iBACT,UAAW,kBACX,QAAS,oBACT,UAAW,eACX,QAAS,oBACjB,EACMA,EAAK,MAAM,UAAY,CACrB,MAAS,CACP,KACA,KACA,KACA,KACA,KACA,KACA,IACD,EACD,MAAS,CACP,CACE,KAAQ,eACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,CACE,EAAK,WACL,EAAK,SACN,CACF,CACF,EACD,CACE,KAAQ,oBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,OACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,uBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,SACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,oBACR,MAAS,CACP,CACE,EAAK,YACL,EAAK,WACN,EACD,CACE,EAAK,YACL,EAAK,WACN,EACD,CACE,EAAK,YACL,EAAK,WACN,EACD,CACE,EAAK,WACL,EAAK,WACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,iBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,sBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,uBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,SACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,oBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,aACR,MAAS,CACP,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,gBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,QACN,EACD,CACE,EAAK,SACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,aACR,MAAS,CACP,GACA,GACA,GACA,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,YACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,WACN,EACD,CACE,EAAK,UACL,EAAK,WACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,iBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,SACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,iBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,YACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,QACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,mBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,QACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,CACE,EAAK,UACL,EAAK,QACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,qBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,CACE,EAAK,UACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,sBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,SACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,kBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,kBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,gBACR,MAAS,CACP,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,GACA,GACA,GACA,EACD,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,GACA,GACA,GACA,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,eACR,MAAS,CACP,GACA,GACA,CACE,EAAK,WACL,EAAK,UACN,EACD,CACE,EAAK,WACL,EAAK,SACN,EACD,CACE,EAAK,UACL,EAAK,UACN,EACD,CACE,EAAK,SACL,EAAK,SACN,EACD,CACE,EAAK,WACL,EAAK,UACN,CACF,CACF,EACD,CACE,KAAQ,gBACR,MAAS,CACP,CACE,EAAK,WACL,EAA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC10TA,IAAI0b,GAAkB,cAAcpP,EAAS,CAO3C,YAAYxpB,EAAQ3/C,EAAM,CACxB,MAAM2/C,CAAM,EACZ,KAAK,KAAO3/C,EACZ,KAAK,eAAiBi6D,GAAuBta,EAAO,OAAO,IAAI,SAAS,CAAC,EACpE,sBAAmB,IAAI64B,GACvB,cAAS74B,EAAO,QAAQ,KAAM,uBAAwB,KAAK,2CAA2C,KAAK,IAAI,CAAC,CACvH,CAIA,IAAI,SAAU,CACZ,OAAO,KAAK,KAAK,OACnB,CAMA,KAAK84B,EAAoB,CACvB,MAAM94B,EAAS,KAAK,OACd3/C,EAAO,KAAK,KACZopE,EAAczpB,EAAO,QAAQ,KAC7B+4B,EAAW14E,EAAK,SAChB24E,EAAcvP,EAAY,SAAS,QAAQ,EACjDsP,EAAS,KAAOC,EAAY,SAC5B34E,EAAK,OAAO,EACZ,MAAM6qE,EAAkB6N,EAAS,QAC5B,wBAAmBA,EAAS,KAAM7N,CAAe,EACtD7qE,EAAK,SAAS,KAAK,WAAW,EAAE,GAAG,KAAK,YAAY,EACpDopE,EAAY,cAAcyB,CAAe,EACrC4N,GACF,KAAK,iBAAiB,QAAQA,EAAoB,KAAK,OAAO,EAEhE,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,6BAA6B,EAClC,KAAK,KAAK,OAAO,CACnB,CAIA,SAAU,CACR,MAAM,QAAQ,EACd,MAAMz4E,EAAO,KAAK,KACZopE,EAAc,KAAK,OAAO,QAAQ,KACxC,KAAK,iBAAiB,UACVA,EAAA,cAAcppE,EAAK,SAAS,IAAI,EAC5CA,EAAK,QAAQ,CACf,CAIA,cAAe,CACb,MAAMA,EAAO,KAAK,KAClBA,EAAK,YAAY,KAAK,UAAU,EAAE,GAAG,KAAK,aAAc,WAAW,EAC9DA,EAAA,YAAY,eAAiBA,EAAK,QACvCA,EAAK,YAAY,KAAK,mBAAmB,EAAE,GAAG,KAAM,iBAAkB,CAAC,CAAE,IAAAkQ,CAAA,IAAUA,GAAO,CAAC,EAC3FlQ,EAAK,QAAQ,eAAe,KAAK,eAAgB,KAAK,gBAAgB,EACjE,gBAAWA,EAAK,OAAO,CAC9B,CAIA,kBAAmB,CACjB,MAAM2/C,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KAC7Bg5B,EAAcvP,EAAY,SAAS,QAAQ,EAC3C/zD,EAAgBsqC,EAAO,cACzB,IAAAi5B,EACJ,MAAM18D,EAAcyjC,EAAO,OAAO,IAAI,aAAa,EAC/CzjC,IACgB08D,EAAA,OAAO18D,GAAgB,SAAWA,EAAcA,EAAY,KAAK,KAAK,SAAS,IAAI,GAEnG,CAAC08D,GAAmBvjE,GAAiBA,EAAc,QAAQ,gBAAkB,aAC7DujE,EAAAvjE,EAAc,aAAa,aAAa,GAExDujE,IACFD,EAAY,YAAcC,GAEVC,GAAA,CAChB,KAAMzP,EACN,QAASuP,EACT,aAAc,GACd,YAAa,GACd,CACH,CAWA,2CAA2CrqE,EAAKjW,EAAMygF,EAAc,CAC5D,MAAAC,EAAc,KAAK,KAAK,YAC9B,GAAIA,EAAY,SAAU,CACxB,MAAMC,EAAoB,IAAIvX,GAAKsX,EAAY,OAAO,EAAE,OACxD1gF,EAAK,eAAe,KAAO2gF,CAAA,KACtB,CACL,MAAMC,EAAqC,IAAM,CAC/C,KAAK,OAAO,QAAQ,KAAK,qBAAqBH,CAAY,GAEvD,cAASC,EAAa,kBAAmBE,CAAkC,EAChF,WAAW,IAAM,CACV,mBAAcF,EAAa,kBAAmBE,CAAkC,GACpF,EAAE,CACP,CACF,CAQA,8BAA+B,CAC7B,GAAI,CAAC,KAAK,OAAO,QAAQ,IAAI,QAAQ,EACnC,OAEI,MAAAF,EAAc,KAAK,KAAK,YACxBG,EAAe,KAAK,OAAO,QAAQ,IAAI,QAAQ,EACxCA,EAAA,GAAG,OAAQ,IAAM,CAC5B,MAAMC,EAAaD,EAAa,KAChCC,EAAW,GAAG,SAAU,CAAC7qE,EAAKjW,IAAS,CACrC,GAAI,CAAC0gF,EAAY,UAAYI,EAAW,SACtC,OAEF,MAAMC,EAAyB,IAAI3X,GAAKsX,EAAY,mBAAmB,EACnE1gF,EAAK,CAAC,EAAI+gF,EAAuB,OAAStV,GAAmB,gBAC/DzrE,EAAK,CAAC,EAAI+gF,EAAuB,OAAStV,GAAmB,cAC/D,EACC,CAAE,SAAU,OAAQ,GACtB,CAAE,SAAU,MAAO,CACxB,CACF,EAIIuV,GAAsB,cAAc3O,EAAkB,CAWxD,YAAY/R,EAAQyQ,EAAa1lF,EAAU,GAAI,CAC7C,MAAMi1E,CAAM,EACP,iBAAc,IAAI2T,GAAgB3T,CAAM,EACxC,aAAU,IAAIgG,GAAYhG,EAAQ,CACrC,oBAAqBj1E,EAAQ,2BAC9B,EACD,KAAK,SAAW,IAAIunF,GAAqBtS,EAAQyQ,CAAW,CAC9D,CAIA,QAAS,CACP,MAAM,OAAO,EACb,KAAK,YAAY,QAAQ,IAAI,KAAK,OAAO,EACpC,SAAI,IAAI,KAAK,WAAW,EACxB,UAAK,IAAI,KAAK,QAAQ,CAC7B,CACF,EAGIkQ,GAAW,KAAM,CAInB,YAAYloD,EAAQ,CAcd,GAbJ,KAAK,QAAU,GACf,KAAK,MAAQ,eACb,KAAK,KAAO,KAAK,IACjB,KAAK,QAAU,GACf,KAAK,kBAAoB,OAAOA,EAAO,kBAAqB,SAAWA,EAAO,iBAAmB,EACjG,KAAK,2BAA6B,OAAOA,EAAO,2BAA8B,SAAWA,EAAO,0BAA4B,IACvH,wBAAsB9iB,GAAQ,CACjC,MAAMtX,EAAQ,UAAWsX,EAAMA,EAAI,MAAQA,EAAI,OAC3CtX,aAAiB,OACd,kBAAaA,EAAOsX,CAAG,CAC9B,EAEF,KAAK,WAAa,GACd,CAAC,KAAK,SACF,UAAI,MAAM,gLAAgL,CAEpM,CAIA,SAAU,CACR,KAAK,mBAAmB,EACxB,KAAK,WAAa,EACpB,CAUA,GAAGmH,EAAWpyB,EAAU,CACjB,KAAK,WAAWoyB,CAAS,IACvB,gBAAWA,CAAS,EAAI,IAE/B,KAAK,WAAWA,CAAS,EAAE,KAAKpyB,CAAQ,CAC1C,CASA,IAAIoyB,EAAWpyB,EAAU,CAClB,gBAAWoyB,CAAS,EAAI,KAAK,WAAWA,CAAS,EAAE,OAAQx1B,GAAOA,IAAOoD,CAAQ,CACxF,CAMA,MAAMoyB,KAAcvnB,EAAM,CACxB,MAAMqrF,EAAY,KAAK,WAAW9jE,CAAS,GAAK,GAChD,UAAWpyB,KAAYk2F,EACrBl2F,EAAS,MAAM,KAAM,CAAC,KAAM,GAAG6K,CAAI,CAAC,CAExC,CAIA,qBAAsB,CACb,wBAAiB,QAAS,KAAK,kBAAkB,EACjD,wBAAiB,qBAAsB,KAAK,kBAAkB,CACvE,CAIA,oBAAqB,CACZ,2BAAoB,QAAS,KAAK,kBAAkB,EACpD,2BAAoB,qBAAsB,KAAK,kBAAkB,CAC1E,CASA,aAAa8I,EAAOsX,EAAK,CACnB,QAAK,oBAAoBtX,CAAK,EAAG,CACnC,KAAK,QAAQ,KAAK,CAChB,QAASA,EAAM,QACf,MAAOA,EAAM,MAEb,SAAUsX,aAAe,WAAaA,EAAI,SAAW,OACrD,OAAQA,aAAe,WAAaA,EAAI,OAAS,OACjD,MAAOA,aAAe,WAAaA,EAAI,MAAQ,OAC/C,KAAM,KAAK,KAAK,EACjB,EACK,MAAAkrE,EAAgB,KAAK,iBAC3B,KAAK,MAAQ,UACb,KAAK,MAAM,aAAa,EACxB,KAAK,MAAM,QAAS,CAAE,MAAAxiF,EAAO,cAAAwiF,CAAe,GACxCA,EACF,KAAK,SAAS,GAEd,KAAK,MAAQ,qBACb,KAAK,MAAM,aAAa,EAE5B,CACF,CAMA,oBAAoBxiF,EAAO,CACzB,OAAOA,EAAM,IAAMA,EAAM,GAAG,eAAe,GAAKA,EAAM,UAAY,QAElEA,EAAM,UAAY,MAClB,KAAK,QAAU,SAAW,KAAK,2BAA2BA,CAAK,CACjE,CAIA,gBAAiB,CACf,GAAI,KAAK,QAAQ,QAAU,KAAK,kBACvB,SAET,MAAMyiF,EAAgB,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,EAAE,KACtDC,EAA2B,KAAK,QAAQ,KAAK,QAAQ,OAAS,EAAI,KAAK,iBAAiB,EAAE,KAEhG,OADmCD,EAAgBC,GAA4B,KAAK,kBACjD,KAAK,0BAC1C,CACF,EAGA,SAASC,GAAYt7D,EAAMu7D,EAAqC,IAAI,IAAO,CACnE,MAAAj+E,EAAQ,CAAC0iB,CAAI,EACbw7D,MAA+B,IACrC,IAAIjsF,EAAY,EACT,KAAA+N,EAAM,OAAS/N,GAAW,CACzB,MAAApL,EAAOmZ,EAAM/N,GAAW,EAC1B,KAAAisF,EAAS,IAAIr3F,CAAI,GAAK,CAACs3F,GAAqBt3F,CAAI,GAAKo3F,EAAmB,IAAIp3F,CAAI,GAIhF,GADJq3F,EAAS,IAAIr3F,CAAI,EACb,OAAO,YAAYA,EACjB,IACF,UAAWgQ,KAAKhQ,EACdmZ,EAAM,KAAKnJ,CAAC,OAEF,CACd,KAEA,WAAW9S,KAAO8C,EACZ9C,IAAQ,gBAGNic,EAAA,KAAKnZ,EAAK9C,CAAG,CAAC,CAG1B,CACO,OAAAm6F,CACT,CACA,SAASC,GAAqBt3F,EAAM,CAClC,MAAMuC,EAAO,OAAO,UAAU,SAAS,KAAKvC,CAAI,EAC1Cu3F,EAAa,OAAOv3F,EAC1B,MAAO,EAAEu3F,IAAe,UAAYA,IAAe,WAAaA,IAAe,UAAYA,IAAe,UAAYA,IAAe,YAAch1F,IAAS,iBAAmBA,IAAS,mBAAqBA,IAAS,mBAAqBvC,IAAS,QAAUA,IAAS,MAIvQA,EAAK,mBACLA,aAAgB,aAAeA,aAAgB,MACjD,CAGA,SAASw3F,GAA8BC,EAASC,EAASC,EAAgC,IAAI,IAAO,CAClG,GAAIF,IAAYC,GAAWE,GAASH,CAAO,EAClC,SAEH,MAAAI,EAAYV,GAAYM,EAASE,CAAa,EAC9CG,EAAYX,GAAYO,EAASC,CAAa,EACpD,UAAW33F,KAAQ63F,EACb,GAAAC,EAAU,IAAI93F,CAAI,EACb,SAGJ,QACT,CACA,SAAS43F,GAAS1vE,EAAW,CACpB,cAAOA,GAAc,UAAYA,IAAc,IACxD,CAGA,IAAI6vE,GAAiB,cAAcjB,EAAS,CAK1C,YAAYkB,EAASC,EAAiB,GAAI,CACxC,MAAMA,CAAc,EACpB,KAAK,QAAU,KACf,KAAK,eAAiB,GACtB,KAAK,WAAa,GAClB,KAAK,eAAiBvT,GAAiB,KAAK,MAAM,KAAK,IAAI,EAAG,OAAOuT,EAAe,cAAiB,SAAWA,EAAe,aAAe,GAAG,EAC7ID,IACF,KAAK,SAAW,CAACE,EAAetpD,IAAWopD,EAAQ,OAAOE,EAAetpD,CAAM,GAEjF,KAAK,YAAeuuB,GAAWA,EAAO,QAAQ,CAChD,CAIA,IAAI,QAAS,CACX,OAAO,KAAK,OACd,CAIA,IAAI,OAAQ,CACV,OAAO,KAAK,OACd,CASA,WAAWg7B,EAAS,CAClB,KAAK,SAAWA,CAClB,CAkBA,cAAcC,EAAY,CACxB,KAAK,YAAcA,CACrB,CAOA,UAAW,CACT,OAAO,QAAQ,UAAU,KAAK,KAC5B,KAAK,MAAQ,eACb,KAAK,MAAM,aAAa,EACjB,KAAK,WACb,EAAE,MAAOC,GAAQ,CACR,cAAM,kDAAmDA,CAAG,EACrE,EAAE,KAAK,IAAM,CACZ,MAAMC,EAAgB,GAChBC,EAAY,GACZC,EAAqB,KAAK,QAAQ,iBAAmB,GACrDC,EAAkB,GACb,UAAC3R,EAAU4R,CAAQ,IAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,EAC5DA,EAAS,UACXJ,EAAcxR,CAAQ,EAAI,GAC1B2R,EAAgB3R,CAAQ,EAAI0R,EAAmB1R,CAAQ,GAAK,IAE5DyR,EAAU,KAAKzR,CAAQ,EAG3B,MAAM6R,EAAgB,CACpB,GAAG,KAAK,QACR,aAAc,KAAK,QAAQ,cAAgB,CAAC,EAC5C,UAAAJ,EACA,gBAAAE,EACA,qBAAsB,KAAK,OAI7B,OAFA,OAAOE,EAAc,YACPA,EAAA,aAAa,KAAKC,EAAwB,EACpD,KAAK,eACA,KAAK,OAAON,EAAeK,EAAeA,EAAc,OAAO,EAElEnW,GAAkB,KAAK,cAAc,EAChC,KAAK,OAAO,KAAK,eAAgBmW,EAAeA,EAAc,OAAO,EAErE,KAAK,OAAO,KAAK,WAAYA,EAAeA,EAAc,OAAO,CAE5E,CACD,EAAE,KAAK,IAAM,CACZ,KAAK,MAAM,SAAS,EACrB,CACH,CAQA,OAAOT,EAAgB,KAAK,eAAgBtpD,EAAS,KAAK,QAASnuC,EAAS,CAC1E,OAAO,QAAQ,UAAU,KAAK,KAC5B,MAAM,oBAAoB,EAC1B,KAAK,eAAiBy3F,EACtB,KAAK,eAAiB,OAAOA,GAAiB,UAAY,OAAO,KAAKA,CAAa,EAAE,OAAS,GAAK,OAAO,OAAO,OAAOA,CAAa,EAAE,CAAC,GAAK,SAC7I,KAAK,QAAU,KAAK,0BAA0BtpD,CAAM,GAAK,GACzD,KAAK,QAAQ,QAAUnuC,EAChB,KAAK,SAASy3F,EAAe,KAAK,OAAO,EACjD,EAAE,KAAM/6B,GAAW,CAClB,KAAK,QAAUA,EACfA,EAAO,MAAM,SAAS,GAAG,cAAe,KAAK,cAAc,EACtD,0BAAuBA,EAAO,MAAM,SAAS,QAC7C,WAAQ,KAAK,WACb,KAAK,iBACH,gBAAa,KAAK,iBAEzB,KAAK,MAAQ,QACb,KAAK,MAAM,aAAa,EACzB,CACH,CAMA,SAAU,CACR,OAAO,QAAQ,UAAU,KAAK,KAC5B,KAAK,MAAQ,YACb,KAAK,MAAM,aAAa,EACxB,MAAM,QAAQ,EACP,KAAK,WACb,CACH,CACA,UAAW,CACT,OAAO,QAAQ,UAAU,KAAK,IAAM,CAClC,KAAK,mBAAmB,EACxB,KAAK,eAAe,SACpB,MAAMA,EAAS,KAAK,QACpB,YAAK,QAAU,KACfA,EAAO,MAAM,SAAS,IAAI,cAAe,KAAK,cAAc,EACrD,KAAK,YAAYA,CAAM,EAC/B,CACH,CAKA,OAAQ,CACN,MAAM78D,EAAU,KAAK,QAAQ,MAAM,SAAS,QACxC,IACG,WAAQ,KAAK,WACb,KAAK,iBACH,gBAAa,KAAK,iBAEzB,KAAK,qBAAuBA,QACrB+3F,EAAK,CACJ,cAAMA,EAAK,yGAAyG,CAC9H,CACF,CAIA,uBAAuBh9E,EAAO,CAC5B,KAAK,eAAiBA,CACxB,CAIA,UAAW,CACT,MAAM8hD,EAAS,KAAK,QACd07B,EAAQ17B,EAAO,MAAM,SAAS,MAAM,OAAQvsD,GAASA,EAAK,WAAgB,GAAAA,EAAK,UAAY,YAAY,EACvG,CAAE,QAAAkoF,CAAY,EAAA37B,EACd47B,EAAqBD,EAAQ,IAAI,oBAAoB,GAAKA,EAAQ,IAAI,oBAAoB,EAC1FE,EAAeF,EAAQ,IAAI,cAAc,GAAKA,EAAQ,IAAI,cAAc,EACxEjjF,EAAO,CACX,MAAO,CAAC,EACR,QAAS,CAAC,EACV,eAAgB,KAAK,UAAU,EAAE,EACjC,YAAa,KAAK,UAAU,EAAE,GAE1BgjF,EAAA,QAASjoF,GAAS,CACjBiF,EAAA,MAAMjF,EAAK,QAAQ,EAAI,CAC1B,QAAS,KAAK,UAAU,MAAM,KAAKA,EAAK,aAAa,CAAC,EACtD,WAAY,KAAK,UAAU,MAAM,KAAKA,EAAK,eAAe,CAAC,EAC3D,SAAUA,EAAK,UACjB,CACD,EACU,UAAAqoF,KAAU97B,EAAO,MAAM,QAC3B87B,EAAO,eAGPpjF,EAAA,QAAQojF,EAAO,IAAI,EAAI,CAC1B,UAAWA,EAAO,SAAS,EAAE,OAAO,EACpC,eAAgBA,EAAO,wBACvB,YAAaA,EAAO,eAGxB,OAAIF,IACGljF,EAAA,eAAiB,KAAK,UAAUkjF,EAAmB,kBAAkB,CAAE,OAAQ,GAAM,gBAAiB,EAAK,CAAC,CAAC,GAEhHC,IACGnjF,EAAA,YAAc,KAAK,UAAUmjF,EAAa,eAAe,CAAE,OAAQ,GAAM,gBAAiB,EAAK,CAAC,CAAC,GAEjGnjF,CACT,CAIA,eAAgB,CACd,MAAMqjF,EAAY,GAClB,UAAWpS,KAAY,KAAK,OAAO,MAAM,SAAS,eAAgB,CAChE,MAAMoP,EAAW,KAAK,OAAO,GAAG,mBAAmBpP,CAAQ,EACvDoP,IACFgD,EAAUpS,CAAQ,EAAIoP,EAE1B,CACO,OAAAgD,CACT,CAOA,2BAA2B1kF,EAAO,CAChC,OAAOgjF,GAA8B,KAAK,QAAShjF,EAAM,QAAS,KAAK,cAAc,CACvF,CAIA,0BAA0Bo6B,EAAQ,CAChC,OAAO2mC,GAAsB3mC,EAAQ,CAACzxC,EAAOD,IAAQ,CAInD,GAHIslF,GAAkBrlF,CAAK,GAGvBD,IAAQ,UACH,OAAAC,CACT,CACD,CACH,CACF,EACIy7F,GAA2B,KAAM,CACnC,YAAYz7B,EAAQ,CAClB,KAAK,OAASA,EACd,KAAK,MAAQA,EAAO,OAAO,IAAI,sBAAsB,CACvD,CAIA,MAAO,CACL,KAAK,OAAO,KAAK,GAAG,OAASrxC,GAAQ,CACnCA,EAAI,KAAK,EACJ,YAAO,MAAM,cAAc,CAAE,WAAY,EAAM,EAAIm4C,GAAW,CACjE,KAAK,0BAA0B,EAC/B,KAAK,mBAAmBA,CAAM,EAC/B,EACI,YAAO,KAAK,KAAK,OAAO,CAC5B,GAAE,SAAU,GAAS,EAC1B,CAIA,YAAYA,EAAQk1B,EAAU,CAC5B,GAAI,SAAUA,EAAU,CACtB,MAAM5oE,EAAU0zC,EAAO,cAAck1B,EAAS,KAAMA,EAAS,UAAU,EACvE,GAAIA,EAAS,SACA,UAAAzkD,KAASykD,EAAS,SAC3B5oE,EAAQ,aAAa,KAAK,YAAY0zC,EAAQvvB,CAAK,CAAC,EAGjD,OAAAnkB,CAAA,KAEP,QAAO0zC,EAAO,WAAWk1B,EAAS,KAAMA,EAAS,UAAU,CAE/D,CAIA,mBAAmBl1B,EAAQ,CACzB,MAAM9G,EAAS,KAAK,OACpB,OAAO,QAAQ,KAAK,MAAM,KAAK,EAAE,QAAQ,CAAC,CAAC2pB,EAAU,CAAE,QAAAhrE,EAAS,WAAA9W,CAAY,KAAM,CAC1E,MAAAo0F,EAAc,KAAK,MAAMt9E,CAAO,EAChCu9E,EAAmB,KAAK,MAAMr0F,CAAU,EACxCs0F,EAAcn8B,EAAO,MAAM,SAAS,QAAQ2pB,CAAQ,EAC1D,SAAW,CAAC5pF,EAAKC,CAAK,IAAKk8F,EAClBp1B,EAAA,aAAa/mE,EAAKC,EAAOm8F,CAAW,EAE7C,UAAW5kD,KAAS0kD,EAAa,CAC/B,MAAMp5F,EAAO,KAAK,YAAYikE,EAAQvvB,CAAK,EACpCuvB,EAAA,OAAOjkE,EAAMs5F,EAAa,KAAK,CACxC,EACD,EACM,eAAQ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAACC,EAAYC,CAAa,IAAM,CACpE,MAAE,SAAA55F,CAAS,EAAIu9D,EAAO,MACtB,CAAE,UAAW,CAAE,MAAA9xD,EAAO,IAAAiW,GAAO,GAAGpgB,CAAY,EAAAs4F,EAC5C5oF,EAAOhR,EAAS,QAAQyL,EAAM,IAAI,EAClCouF,EAAgBx1B,EAAO,uBAAuBrzD,EAAMvF,EAAM,KAAMA,EAAM,UAAU,EAChFquF,EAAcz1B,EAAO,uBAAuBrzD,EAAM0Q,EAAI,KAAMA,EAAI,UAAU,EAC1EolC,EAAQud,EAAO,YAAYw1B,EAAeC,CAAW,EAC3Dz1B,EAAO,UAAUs1B,EAAY,CAC3B,MAAA7yC,EACA,GAAGxlD,CAAA,CACJ,EACF,CACH,CAIA,2BAA4B,CAC1B,MAAMy4F,EAAuB,KAAK,MAAM,KAAK,MAAM,cAAc,EAC3DC,EAAoB,KAAK,MAAM,KAAK,MAAM,WAAW,EACtCD,EAAA,QAASE,GAAsB,CAClD,MAAMC,EAAY,KAAK,OAAO,OAAO,IAAI,yBAAyB,EAC5Df,EAAqB,KAAK,OAAO,QAAQ,IAAI,oBAAoB,EACnEA,EAAmB,iBAAiBc,EAAkB,QAAQ,GAC1Cd,EAAmB,iBAAiBc,EAAkB,QAAQ,EACtE,OAAO,EAEvBd,EAAmB,iBAAiB,CAAE,UAAAe,EAAW,GAAGD,CAAmB,GACxE,EACiBD,EAAA,QAASG,GAAmB,CAC5C,MAAMC,EAAsB,KAAK,OAAO,QAAQ,IAAI,qBAAqB,EACzE,GAAIA,EAAoB,cAAcD,EAAe,EAAE,EAAG,CACxD,MAAME,EAAaD,EAAoB,cAAcD,EAAe,EAAE,EACtEE,EAAW,WAAaF,EAAe,gBAEvCC,EAAoB,kBAAkBD,CAAc,CACtD,CACD,CACH,CACF,EAGIG,GAAc,OAAO,aAAa,EAClCC,GAAkB,cAAcrD,EAAS,CAiB3C,YAAYsD,EAAUnC,EAAiB,GAAI,CACzC,MAAMA,CAAc,EACf,oBAAiC,IACtC,KAAK,SAAW,KACX,uBAAoC,IACpC,mBAAgB,IAAIoC,GACzB,KAAK,gBAAkBpC,EACvB,KAAK,SAAYqC,GAAkBF,EAAS,OAAOE,CAAa,EAChE,KAAK,YAAe75F,GAAYA,EAAQ,QAAQ,EAC3C,mBAAc,QAAQ,IAAM,CAC3B,KAAK,QAAU,iBACjB,KAAK,MAAQ,QACb,KAAK,MAAM,aAAa,EAC1B,CACD,CACH,CASA,WAAW03F,EAAS,CAClB,KAAK,SAAWA,CAClB,CAkBA,cAAcC,EAAY,CACxB,KAAK,YAAcA,CACrB,CAKA,IAAI,SAAU,CACZ,OAAO,KAAK,QACd,CAaA,OAAOkC,EAAgB,GAAI,CACzB,OAAO,KAAK,cAAc,QAAQJ,GAAa,KAC7C,KAAK,eAAiBI,EACf,KAAK,UACb,CACH,CAWA,QAAQC,EAAQ,CAEd,OADiB,KAAK,aAAaA,CAAM,EACzB,KAClB,CAWA,aAAaA,EAAQ,CAEnB,OADiB,KAAK,aAAaA,CAAM,EACzB,KAClB,CA6CA,IAAIC,EAAuC,CACnC,MAAAC,EAAqB/zD,GAAQ8zD,CAAqC,EACxE,OAAO,QAAQ,IAAIC,EAAmB,IAAK3mD,GAClC,KAAK,cAAc,QAAQA,EAAK,GAAI,IAAM,CAC3C,QAAK,QAAU,YACX,UAAI,MAAM,yCAAyC,EAEvD,IAAC,KAAK,SACF,UAAI,MAAM,2FAA2F,EAEzG,IAAA4mD,EACJ,GAAI,KAAK,WAAW,IAAI5mD,EAAK,EAAE,EAC7B,MAAM,IAAI,MAAM,6CAA6CA,EAAK,EAAE,IAAI,EAEtE,GAAAA,EAAK,OAAS,SAChB,OAAA4mD,EAAW,IAAI3C,GAAe,KAAM,KAAK,eAAe,EAC/C2C,EAAA,WAAW5mD,EAAK,OAAO,EACvB4mD,EAAA,uBAAuB,KAAK,aAAa,EAC9C5mD,EAAK,YACE4mD,EAAA,cAAc5mD,EAAK,UAAU,EAExC,KAAK,WAAW,IAAIA,EAAK,GAAI4mD,CAAQ,EACrCA,EAAS,GAAG,QAAS,CAAC5uE,EAAK,CAAE,MAAAtX,EAAO,cAAAwiF,KAAoB,CACtD,KAAK,MAAM,YAAa,CAAE,OAAQljD,EAAK,GAAI,MAAAt/B,EAAO,EAC7CwiF,GAGA,mBAAc,QAAQljD,EAAK,GAAI,IAAM,IAAI,QAAS6mD,GAAQ,CAC7D,MAAMC,EAA0B,IAAM,CAC3BF,EAAA,IAAI,UAAWE,CAAuB,EAC/C,KAAK,MAAM,cAAe,CAAE,OAAQ9mD,EAAK,GAAI,EACzC6mD,GAAA,EAEGD,EAAA,GAAG,UAAWE,CAAuB,CAC/C,EAAC,EACH,EACMF,EAAS,OAAO5mD,EAAK,oBAAqBA,EAAK,OAAQ,KAAK,QAAQ,EAE3E,MAAM,IAAI,MAAM,6BAA6BA,EAAK,IAAI,IAAI,CAC5D,CACD,CACF,CAAC,CACJ,CAgBA,OAAO+mD,EAAiB,CAChB,MAAAC,EAAUp0D,GAAQm0D,CAAe,EACvC,OAAO,QAAQ,IAAIC,EAAQ,IAAKP,GACvB,KAAK,cAAc,QAAQA,EAAQ,IAAM,CACxC,MAAAG,EAAW,KAAK,aAAaH,CAAM,EACpC,uBAAW,OAAOA,CAAM,EACtBG,EAAS,SAAQ,CACzB,CACF,CAAC,CACJ,CASA,SAAU,CACR,OAAO,KAAK,cAAc,QAAQR,GAAa,KAC7C,KAAK,MAAQ,YACb,KAAK,MAAM,aAAa,EACxB,MAAM,QAAQ,EACP,KAAK,WACb,CACH,CAIA,UAAW,CACT,OAAO,KAAK,cAAc,QAAQA,GAAa,KAC7C,KAAK,MAAQ,eACb,KAAK,MAAM,aAAa,EACjB,KAAK,WAAW,MAAO7B,GAAQ,CAC5B,cAAM,4DAA6DA,CAAG,CAC/E,GAAE,KAAK,IAAM,KAAK,QAAS,GAAE,KAAK,IAAM,KAAK,MAAM,SAAS,CAAC,EAC/D,CACH,CAIA,SAAU,CACR,OAAO,QAAQ,UAAU,KAAK,KAC5B,KAAK,oBAAoB,EAClB,KAAK,SAAS,KAAK,cAAc,EACzC,EAAE,KAAM53F,IACP,KAAK,SAAWA,EACX,mBAAgB02F,GAAY,KAAK,QAAQ,EACvC,QAAQ,IAAI,MAAM,KAAK,KAAK,WAAW,OAAQ,GAAE,IAAKuD,IAClDA,EAAA,uBAAuB,KAAK,aAAa,EAC3CA,EAAS,OAAO,OAAQ,OAAQ,KAAK,QAAQ,EACrD,CAAC,EACH,CACH,CAIA,UAAW,CACT,OAAO,QAAQ,UAAU,KAAK,IAAM,CAClC,KAAK,mBAAmB,EACxB,MAAMj6F,EAAU,KAAK,SACrB,YAAK,SAAW,KACX,uBAAoC,IAClC,QAAQ,IAAI,MAAM,KAAK,KAAK,WAAW,OAAQ,GAAE,IAAKi6F,GAAaA,EAAS,QAAS,EAAC,EAAE,KAAK,IAAM,KAAK,YAAYj6F,CAAO,CAAC,EACpI,CACH,CAMA,aAAa85F,EAAQ,CACnB,MAAMG,EAAW,KAAK,WAAW,IAAIH,CAAM,EAC3C,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,8CAA8CH,CAAM,GAAG,EAElE,OAAAG,CACT,CAMA,2BAA2BlmF,EAAO,CAChC,UAAWkmF,KAAY,KAAK,WAAW,SACjC,GAAAA,EAAS,2BAA2BlmF,CAAK,EACpC,SAGX,OAAOgjF,GAA8B,KAAK,SAAUhjF,EAAM,OAAO,CACnE,CACF,EACI6lF,GAAe,KAAM,CACvB,aAAc,CACZ,KAAK,kBAAoB,GACpB,iBAA8B,IACnC,KAAK,eAAiB,CACxB,CAMA,QAAQU,EAAiB,CAClB,uBAAkB,KAAKA,CAAe,CAC7C,CAOA,QAAQC,EAAS5pE,EAAQ,CACvB,MAAM6pE,EAAeD,IAAYd,GAC5B,sBACA,KAAK,QAAQ,IAAIc,CAAO,GAC3B,KAAK,QAAQ,IAAIA,EAAS,QAAQ,SAAS,EAGvC,MAAAE,GADiBD,EAAe,QAAQ,IAAI,KAAK,QAAQ,QAAQ,EAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAIf,EAAW,EAAG,KAAK,QAAQ,IAAIc,CAAO,CAAC,CAAC,GAC1G,KAAK5pE,CAAM,EAC5C+pE,EAAgBD,EAAgB,MAAM,IAAM,EACjD,EACI,oBAAQ,IAAIF,EAASG,CAAa,EAChCD,EAAgB,QAAQ,IAAM,CAC9B,sBACD,KAAK,QAAQ,IAAIF,CAAO,IAAMG,GAAiB,KAAK,iBAAmB,GACzE,KAAK,kBAAkB,QAAS19F,GAAOA,EAAI,EAC7C,CACD,CACH,CACF,EACA,SAASipC,GAAQ00D,EAAgB,CAC/B,OAAO,MAAM,QAAQA,CAAc,EAAIA,EAAiB,CAACA,CAAc,CACzE,CAGA,IAAIC,GAAgB,cAAcC,GAAaC,GAAgBC,EAAM,CAAC,CAAE,CAYtE,YAAYC,EAAqB7sD,EAAS,GAAI,CAC5C,GAAI,CAAC8sD,GAAUD,CAAmB,GAAK7sD,EAAO,cAAgB,OACtD,UAAIyjC,EAAc,6BAA8B,IAAI,EAE5D,MAAMzjC,CAAM,EACR,KAAK,OAAO,IAAI,aAAa,IAAM,QACrC,KAAK,OAAO,IAAI,cAAe+sD,GAAeF,CAAmB,CAAC,EAEhEC,GAAUD,CAAmB,IAC/B,KAAK,cAAgBA,GAElB,WAAM,SAAS,aACpB,MAAMG,EAA6B,CAAC,KAAK,OAAO,IAAI,gCAAgC,EAC9Ep+E,EAAO,IAAIq5E,GAAoB,KAAK,OAAQ,KAAK,QAAQ,KAAM,CACnE,2BAAA+E,CAAA,CACD,EACD,KAAK,GAAK,IAAI7F,GAAgB,KAAMv4E,CAAI,EACxCq+E,GAAa,IAAI,CACnB,CAQA,SAAU,CACR,OAAI,KAAK,eACP,KAAK,oBAAoB,EAE3B,KAAK,GAAG,UACD,MAAM,SACf,CAqGA,OAAO,OAAOJ,EAAqB7sD,EAAS,GAAI,CACvC,WAAI,QAASt8B,GAAY,CAC9B,MAAM6qD,EAAS,IAAI,KAAKs+B,EAAqB7sD,CAAM,EACnDt8B,EAAQ6qD,EAAO,YAAY,EAAE,KAAK,IAAMA,EAAO,GAAG,KAAKu+B,GAAUD,CAAmB,EAAIA,EAAsB,IAAI,CAAC,EAAE,KAAK,IAAMt+B,EAAO,KAAK,KAAKA,EAAO,OAAO,IAAI,aAAa,CAAC,CAAC,EAAE,KAAK,IAAMA,EAAO,KAAK,OAAO,CAAC,EAAE,KAAK,IAAMA,CAAM,CAAC,EACxO,CACH,CACF,EACAk+B,GAAc,QAAUt1B,GACxBs1B,GAAc,eAAiBtD,GAC/BsD,GAAc,gBAAkBlB,GAChC,IAAI2B,GAAwBT,GAC5B,SAASM,GAAeF,EAAqB,CAC3C,OAAOC,GAAUD,CAAmB,EAAIM,GAAmBN,CAAmB,EAAIA,CACpF,CACA,SAASC,GAAUv+F,EAAO,CACxB,OAAOqlF,GAAkBrlF,CAAK,CAChC,CAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC9uCA,IAAI6+F,GAAkB,CAAE,YAAa,IACjCC,GAAqC,KACrCC,GAAQ,MAAMC,WAAejmB,IAAkB,CAQjD,YAAYkmB,EAAwBl7F,EAAU,GAAI,CAEhD,GADA,QACI,CAACk7F,EACH,MAAM,IAAI/pB,EAAc,0BAA2B,IAAI,EAErDnxE,EAAQ,WACV,KAAK,oBAAoBA,EAAQ,SAAS,EAE5C,KAAK,IAAI,QAASA,EAAQ,SAAS,EAC/B,OAAOk7F,GAA2B,WACpC,KAAK,SAAWA,EAEhB,KAAK,SAAW,IAAMC,GAAoBD,CAAsB,EAElE,KAAK,SAAW,CAAE,GAAGJ,GAAiB,GAAG96F,CAAO,CACjD,CAID,MAAO,CACL,OAAO,IAAI,QAAQ,CAACoR,EAASC,IAAW,CACtC,GAAI,CAAC,KAAK,MAAO,CACf,KAAK,aAAY,EAAG,KAAKD,CAAO,EAAE,MAAMC,CAAM,EAC9C,MACD,CACG,KAAK,SAAS,aAChB,KAAK,6BAA4B,EAEnCD,EAAQ,IAAI,CAClB,CAAK,CACF,CAID,cAAe,CACb,OAAO,KAAK,SAAQ,EAAG,KAAMnV,IAC3B,KAAK,oBAAoBA,CAAK,EAC9B,KAAK,IAAI,QAASA,CAAK,EACnB,KAAK,SAAS,aAChB,KAAK,6BAA4B,EAE5B,KACR,CACF,CAID,SAAU,CACR,aAAa,KAAK,oBAAoB,CACvC,CAMD,oBAAoBm/F,EAAY,CAC9B,MAAMC,EAAW,OAAOD,GAAe,SACjCE,EAAgB,CAAC,SAAS,KAAKF,CAAU,EACzCG,EAAcF,GAAYD,EAAW,MAAM,GAAG,EAAE,SAAW,EACjE,GAAI,EAAEE,GAAiBC,GACrB,MAAM,IAAIpqB,EAAc,0BAA2B,IAAI,CAE1D,CAID,8BAA+B,CAC7B,MAAMqqB,EAA0B,KAAK,8BACrC,aAAa,KAAK,oBAAoB,EACtC,KAAK,qBAAuB,WAAW,IAAM,CAC3C,KAAK,aAAY,CAClB,EAAEA,CAAuB,CAC3B,CAMD,6BAA8B,CAC5B,GAAI,CACF,KAAM,EAAGC,CAAkB,EAAI,KAAK,MAAM,MAAM,GAAG,EAC7C,CAAE,IAAKC,GAAoB,KAAK,MAAM,KAAKD,CAAkB,CAAC,EACpE,OAAKC,EAG2B,KAAK,OAAOA,EAAkB,IAAM,KAAK,OAAS,CAAC,EAF1EX,EAIV,MAAa,CACZ,OAAOA,EACR,CACF,CAOD,OAAO,OAAOG,EAAwBl7F,EAAU,GAAI,CAElD,OADc,IAAIi7F,GAAOC,EAAwBl7F,CAAO,EAC3C,MACd,CACH,EACA,SAASm7F,GAAoBQ,EAAU,CACrC,OAAO,IAAI,QAAQ,CAACvqF,EAASC,IAAW,CACtC,MAAMsZ,EAAM,IAAI,eAChBA,EAAI,KAAK,MAAOgxE,CAAQ,EACxBhxE,EAAI,iBAAiB,OAAQ,IAAM,CACjC,MAAMhB,EAAagB,EAAI,OACjBixE,EAAcjxE,EAAI,SACxB,OAAIhB,EAAa,KAAOA,EAAa,IAC5BtY,EAAO,IAAI8/D,EAAc,kCAAmC,IAAI,CAAC,EAEnE//D,EAAQwqF,CAAW,CAChC,CAAK,EACDjxE,EAAI,iBAAiB,QAAS,IAAMtZ,EAAO,IAAI,MAAM,eAAe,CAAC,CAAC,EACtEsZ,EAAI,iBAAiB,QAAS,IAAMtZ,EAAO,IAAI,MAAM,OAAO,CAAC,CAAC,EAC9DsZ,EAAI,KAAI,CACZ,CAAG,CACH,CAGA,IAAIkxE,GAAwB,uBACxBC,GAAe,cAActqB,IAAe,CAQ9C,YAAYuqB,EAAY1tF,EAAO2tF,EAAY,CAEzC,GADA,QACI,CAACD,EACH,MAAM,IAAI5qB,EAAc,4BAA6B,IAAI,EAE3D,GAAI,CAAC9iE,EACH,MAAM,IAAI8iE,EAAc,6BAA8B,IAAI,EAE5D,GAAI,CAAC6qB,EACH,MAAM,IAAI7qB,EAAc,mCAAoC,IAAI,EAElE,KAAK,KAAO8qB,GAAUF,CAAU,EAAIG,GAAcH,CAAU,EAAIA,EAChE,KAAK,OAAS1tF,EACd,KAAK,YAAc2tF,CACpB,CAID,WAAWr8F,EAAU,CACnB,YAAK,GAAG,WAAY,CAACgZ,EAAOhE,IAAShV,EAASgV,CAAI,CAAC,EAC5C,IACR,CAID,QAAQhV,EAAU,CAChB,YAAK,KAAK,QAAS,CAACgZ,EAAOhE,IAAShV,EAASgV,CAAI,CAAC,EAC3C,IACR,CAID,OAAQ,CACN,KAAK,IAAI,OACV,CAID,MAAO,CACL,YAAK,gBAAe,EACpB,KAAK,oBAAmB,EACjB,KAAK,cACb,CAID,iBAAkB,CAChB,MAAMgW,EAAM,IAAI,eAChBA,EAAI,KAAK,OAAQ,KAAK,WAAW,EACjCA,EAAI,iBAAiB,gBAAiB,KAAK,OAAO,KAAK,EACvDA,EAAI,aAAe,OACnB,KAAK,IAAMA,CACZ,CAID,qBAAsB,CACpB,MAAMA,EAAM,KAAK,IACXwxE,EAAWjtE,GACR,IAAM,KAAK,KAAK,QAASA,CAAO,EAEzCvE,EAAI,iBAAiB,QAASwxE,EAAQ,eAAe,CAAC,EACtDxxE,EAAI,iBAAiB,QAASwxE,EAAQ,OAAO,CAAC,EAC1CxxE,EAAI,QACNA,EAAI,OAAO,iBAAiB,WAAahS,GAAU,CAC7CA,EAAM,kBACR,KAAK,KAAK,WAAY,CACpB,MAAOA,EAAM,MACb,SAAUA,EAAM,MAC5B,CAAW,CAEX,CAAO,EAEHgS,EAAI,iBAAiB,OAAQ,IAAM,CACjC,MAAMhB,EAAagB,EAAI,OACjBixE,EAAcjxE,EAAI,SACxB,GAAIhB,EAAa,KAAOA,EAAa,IACnC,OAAO,KAAK,KAAK,QAASiyE,EAAY,SAAWA,EAAY,KAAK,CAE1E,CAAK,CACF,CAID,cAAe,CACb,MAAMzlE,EAAW,IAAI,SACfxL,EAAM,KAAK,IACjB,OAAAwL,EAAS,OAAO,OAAQ,KAAK,IAAI,EAC1B,IAAI,QAAQ,CAAC/kB,EAASC,IAAW,CACtCsZ,EAAI,iBAAiB,OAAQ,IAAM,CACjC,MAAMhB,EAAagB,EAAI,OACjBixE,EAAcjxE,EAAI,SACxB,OAAIhB,EAAa,KAAOA,EAAa,IAC/BiyE,EAAY,QACPvqF,EAAO,IAAI8/D,EAAc,qCAAsC,KAAM,CAAE,QAASyqB,EAAY,OAAS,EAAC,EAExGvqF,EAAOuqF,EAAY,KAAK,EAE1BxqF,EAAQwqF,CAAW,CAClC,CAAO,EACDjxE,EAAI,iBAAiB,QAAS,IAAMtZ,EAAO,IAAI,MAAM,eAAe,CAAC,CAAC,EACtEsZ,EAAI,iBAAiB,QAAS,IAAMtZ,EAAO,IAAI,MAAM,OAAO,CAAC,CAAC,EAC9DsZ,EAAI,KAAKwL,CAAQ,CACvB,CAAK,CACF,CACH,EACA,SAAS+lE,GAAcE,EAAQC,EAAY,IAAK,CAC9C,GAAI,CACF,MAAMC,EAAcF,EAAO,MAAMP,EAAqB,EAAE,CAAC,EACnDU,EAAa,KAAKH,EAAO,QAAQP,GAAuB,EAAE,CAAC,EAC3DW,EAAa,GACnB,QAASlwE,EAAS,EAAGA,EAASiwE,EAAW,OAAQjwE,GAAU+vE,EAAW,CACpE,MAAMx+F,EAAQ0+F,EAAW,MAAMjwE,EAAQA,EAAS+vE,CAAS,EACnDI,EAAc,IAAI,MAAM5+F,EAAM,MAAM,EAC1C,QAASmB,EAAI,EAAGA,EAAInB,EAAM,OAAQmB,IAChCy9F,EAAYz9F,CAAC,EAAInB,EAAM,WAAWmB,CAAC,EAErCw9F,EAAW,KAAK,IAAI,WAAWC,CAAW,CAAC,CAC5C,CACD,OAAO,IAAI,KAAKD,EAAY,CAAE,KAAMF,CAAa,EAClD,MAAe,CACd,MAAM,IAAInrB,EAAc,yCAA0C,IAAI,CACvE,CACH,CACA,SAAS8qB,GAAU1nF,EAAQ,CACzB,GAAI,OAAOA,GAAW,SACpB,MAAO,GAET,MAAMxO,EAAQwO,EAAO,MAAMsnF,EAAqB,EAChD,MAAO,CAAC,EAAE91F,GAASA,EAAM,OAC3B,CAGA,IAAI22F,GAAgB,KAAM,CAOxB,YAAYruF,EAAO2tF,EAAY,CAC7B,GAAI,CAAC3tF,EACH,MAAM,IAAI8iE,EAAc,8BAA+B,IAAI,EAE7D,GAAI,CAAC6qB,EACH,MAAM,IAAI7qB,EAAc,oCAAqC,IAAI,EAEnE,KAAK,OAAS9iE,EACd,KAAK,YAAc2tF,CACpB,CAkBD,OAAOD,EAAY,CACjB,OAAO,IAAID,GAAaC,EAAY,KAAK,OAAQ,KAAK,WAAW,CAClE,CACH,EAGIY,GAAoB,cAAclV,EAAc,CAIlD,WAAW,YAAa,CACtB,MAAO,mBACR,CASD,YAAYyT,EAAwBl7F,EAAS,CAC3C,OAAO,IAAIg7F,GAAME,EAAwBl7F,CAAO,CACjD,CAOD,oBAAoBqO,EAAO2tF,EAAY,CACrC,OAAO,IAAIU,GAAcruF,EAAO2tF,CAAU,CAC3C,CACH,EAGIY,GAAgB,cAAcnV,EAAc,CAC9C,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,MAAQ,KACb,KAAK,QAA0B,IAAI,GACpC,CAID,WAAW,YAAa,CACtB,MAAO,eACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACkV,EAAiB,CAC1B,CAID,MAAM,MAAO,CAEX,MAAM38F,EADS,KAAK,QAAQ,OACL,IAAI,eAAe,GAAK,GAC/C,SAAW,CAAChE,EAAKC,CAAK,IAAK,OAAO,QAAQ+D,CAAO,EAC/C,KAAKhE,CAAG,EAAIC,EAEd,GAAI,CAAC,KAAK,SAAU,CAClB,KAAK,MAAQ,KACb,MACD,CACD,MAAM4gG,EAAoB,KAAK,QAAQ,QAAQ,IAAI,mBAAmB,EACtE,KAAK,MAAQ,MAAMA,EAAkB,YAAY,KAAK,QAAQ,EAAE,OAChE,KAAK,QAAQ,IAAI,KAAK,SAAU,KAAK,KAAK,CAC3C,CAOD,MAAM,iBAAiBlB,EAAU,CAC/B,GAAI,KAAK,QAAQ,IAAIA,CAAQ,EAC3B,OAAO,KAAK,YAAYA,CAAQ,EAGlC,MAAMttF,EAAQ,MADY,KAAK,QAAQ,QAAQ,IAAI,mBAAmB,EAChC,YAAYstF,CAAQ,EAAE,OAC5D,YAAK,QAAQ,IAAIA,EAAUttF,CAAK,EACzBA,CACR,CAMD,YAAYstF,EAAU,CACpB,MAAMttF,EAAQ,KAAK,QAAQ,IAAIstF,CAAQ,EACvC,GAAI,CAACttF,EACH,MAAM,IAAI8iE,EAAc,qCAAsC,IAAI,EAEpE,OAAO9iE,CACR,CAID,SAAU,CACR,MAAM,QAAO,EACb,UAAWA,KAAS,KAAK,QAAQ,OAAM,EACrCA,EAAM,QAAO,CAEhB,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECjaA,IAAIyuF,GAAc,cAAcC,EAAQ,CAItC,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,OAAS,GACd,KAAK,gBAAkC,IAAI,QAC3C,KAAK,QAAO,EACZ,KAAK,2BAA6B,GAClC,KAAK,SAASA,EAAO,KAAM,MAAO,CAACrxC,EAAKjW,IAAS,CAC/CA,EAAK,CAAC,EAAI,CAAE,GAAGA,EAAK,CAAC,CAAC,EACtB,MAAM3U,EAAU2U,EAAK,CAAC,EACjB3U,EAAQ,YACXA,EAAQ,UAAY,CAAE,WAAY,EAAK,EAE/C,EAAO,CAAE,SAAU,MAAM,CAAE,EACvB,KAAK,SAASi8D,EAAO,KAAM,MAAO,CAACrxC,EAAKjW,IAAS,CAC/BA,EAAK,CAAC,EACT,UAAU,YACrB,KAAK,WAAU,CAEvB,CAAK,CACF,CAID,SAAU,CACR,KAAK,UAAY,KAAK,OAAO,OAAS,CACvC,CAID,IAAI,gBAAiB,CACnB,OAAO,KAAK,eACb,CAOD,SAASqoF,EAAO,CACd,MAAMC,EAAe,KAAK,OAAO,MAAM,SAAS,UAC1CplF,EAAY,CAChB,OAAQolF,EAAa,YAAc,MAAM,KAAKA,EAAa,UAAW,GAAI,CAAE,EAC5E,WAAYA,EAAa,UAC/B,EACI,KAAK,OAAO,KAAK,CAAE,MAAAD,EAAO,UAAAnlF,CAAW,GACrC,KAAK,QAAO,CACb,CAID,YAAa,CACX,KAAK,OAAS,GACd,KAAK,QAAO,CACb,CAQD,kBAAkBqlF,EAAQC,EAAYC,EAAY,CAChD,MAAMpxB,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACjBqxB,EAAkB,GAClBC,EAAyBJ,EAAO,IAAK13C,GAAUA,EAAM,2BAA2B43C,CAAU,CAAC,EAC3FG,EAAYD,EAAuB,OACzC,UAAWE,KAAcF,EAAwB,CAC/C,MAAMG,EAAcD,EAAW,OAAQh4C,GAAUA,EAAM,MAAQ9mD,EAAS,SAAS,EAAE,OAAQ8mD,GAAU,CAACk4C,GAAgCl4C,EAAO+3C,CAAS,CAAC,EAClJE,EAAY,SAGjBE,GAAgBF,CAAW,EAC3BJ,EAAgB,KAAKI,EAAY,CAAC,CAAC,EACpC,CACGJ,EAAgB,QAClBrxB,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,aAAas6B,EAAiB,CAAE,SAAUF,CAAY,EACrE,CAAO,CAEJ,CAQD,MAAMS,EAAaC,EAAc,CAC/B,MAAM7xB,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACvB,KAAK,gBAAgB,IAAI6xB,CAAY,EACrC,MAAMC,EAAmBF,EAAY,WAAW,MAAK,EAAG,OAAQG,GAAcA,EAAU,mBAAmB,EAC3GD,EAAiB,QAAO,EACxB,UAAWE,KAAmBF,EAAkB,CAC9C,MAAMG,EAAkBD,EAAgB,YAAc,EAChDE,EAAoB,MAAM,KAAKx/F,EAAS,QAAQ,cAAcu/F,CAAe,CAAC,EAO9EE,EANkBC,GAAc,CAACJ,EAAgB,YAAW,CAAE,EAAGE,EAAmB,CACxF,aAAc,GACd,SAAU,KAAK,OAAO,MAAM,SAC5B,aAAc,GACd,gBAAiB,EACzB,CAAO,EAC0C,YAC3C,QAASH,KAAaI,EAAoB,CACxC,MAAME,EAAqBN,EAAU,mBACjCM,GAAsB,CAACryB,EAAM,UAAUqyB,CAAkB,IAC3DN,EAAY,IAAIO,GAAYP,EAAU,WAAW,GAEnDF,EAAa,aAAaE,CAAS,EACnC/xB,EAAM,eAAe+xB,CAAS,EAC9Br/F,EAAS,QAAQ,qBAAqBs/F,EAAiBD,CAAS,CACjE,CACF,CACF,CACH,EACA,SAASJ,GAAgBT,EAAQ,CAC/BA,EAAO,KAAK,CAAC9gG,EAAGC,IAAMD,EAAE,MAAM,SAASC,EAAE,KAAK,EAAI,GAAK,CAAC,EACxD,QAAS2C,EAAI,EAAGA,EAAIk+F,EAAO,OAAQl+F,IAAK,CAEtC,MAAMu/F,EADgBrB,EAAOl+F,EAAI,CAAC,EACA,UAAUk+F,EAAOl+F,CAAC,EAAG,EAAI,EACvDu/F,IACFv/F,IACAk+F,EAAO,OAAOl+F,EAAG,EAAGu/F,CAAW,EAElC,CACH,CACA,SAASb,GAAgCl4C,EAAO03C,EAAQ,CACtD,OAAOA,EAAO,KAAMsB,GAAeA,IAAeh5C,GAASg5C,EAAW,cAAch5C,EAAO,EAAI,CAAC,CAClG,CAGA,IAAIi5C,GAAc,cAAc3B,EAAY,CAU1C,QAAQE,EAAQ,KAAM,CACpB,MAAM0B,EAAa1B,EAAQ,KAAK,OAAO,UAAW5gG,GAAMA,EAAE,OAAS4gG,CAAK,EAAI,KAAK,OAAO,OAAS,EAC3FpqD,EAAO,KAAK,OAAO,OAAO8rD,EAAY,CAAC,EAAE,CAAC,EAC1Cb,EAAe,KAAK,OAAO,MAAM,YAAY,CAAE,OAAQ,EAAI,CAAE,EACnE,KAAK,OAAO,MAAM,cAAcA,EAAc,IAAM,CAClD,KAAK,MAAMjrD,EAAK,MAAOirD,CAAY,EACnC,MAAMT,EAAa,KAAK,OAAO,MAAM,SAAS,QAAQ,cAAcxqD,EAAK,MAAM,WAAW,EAC1F,KAAK,kBAAkBA,EAAK,UAAU,OAAQA,EAAK,UAAU,WAAYwqD,CAAU,CACzF,CAAK,EACD,KAAK,KAAK,SAAUxqD,EAAK,MAAOirD,CAAY,EAC5C,KAAK,QAAO,CACb,CACH,EAGIc,GAAc,cAAc7B,EAAY,CAS1C,SAAU,CACR,MAAMlqD,EAAO,KAAK,OAAO,IAAG,EACtBgsD,EAAe,KAAK,OAAO,MAAM,YAAY,CAAE,OAAQ,EAAI,CAAE,EACnE,KAAK,OAAO,MAAM,cAAcA,EAAc,IAAM,CAElD,MAAMX,EADgBrrD,EAAK,MAAM,WAAWA,EAAK,MAAM,WAAW,OAAS,CAAC,EACtC,YAAc,EAC9CwqD,EAAa,KAAK,OAAO,MAAM,SAAS,QAAQ,cAAca,CAAe,EACnF,KAAK,kBAAkBrrD,EAAK,UAAU,OAAQA,EAAK,UAAU,WAAYwqD,CAAU,EACnF,KAAK,MAAMxqD,EAAK,MAAOgsD,CAAY,CACzC,CAAK,EACD,KAAK,QAAO,CACb,CACH,EAGIC,GAAc,cAAc/W,EAAO,CACrC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,eAAiC,IAAI,OAC3C,CAID,WAAW,YAAa,CACtB,MAAO,aACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACpB,KAAK,aAAe,IAAIwiC,GAAYxiC,CAAM,EAC1C,KAAK,aAAe,IAAI0iC,GAAY1iC,CAAM,EAC1CA,EAAO,SAAS,IAAI,OAAQ,KAAK,YAAY,EAC7CA,EAAO,SAAS,IAAI,OAAQ,KAAK,YAAY,EAC7C,KAAK,SAASA,EAAO,MAAO,iBAAkB,CAACrxC,EAAKpgB,IAAS,CAC3D,MAAMuzF,EAAYvzF,EAAK,CAAC,EACxB,GAAI,CAACuzF,EAAU,oBACb,OAEF,MAAMf,EAAQe,EAAU,MAClBe,EAAc,KAAK,aAAa,eAAe,IAAI9B,CAAK,EACxD+B,EAAc,KAAK,aAAa,eAAe,IAAI/B,CAAK,EACzC,KAAK,eAAe,IAAIA,CAAK,IAIlD,KAAK,eAAe,IAAIA,CAAK,EACxBA,EAAM,aAGP8B,EACF,KAAK,aAAa,SAAS9B,CAAK,EACtB+B,IACV,KAAK,aAAa,SAAS/B,CAAK,EAChC,KAAK,aAAa,eAE1B,EAAO,CAAE,SAAU,SAAS,CAAE,EAC1B,KAAK,SAAS,KAAK,aAAc,SAAU,CAACpyE,EAAKo0E,EAAanB,IAAiB,CAC7E,KAAK,aAAa,SAASA,CAAY,CAC7C,CAAK,EACD5hC,EAAO,WAAW,IAAI,SAAU,MAAM,EACtCA,EAAO,WAAW,IAAI,SAAU,MAAM,EACtCA,EAAO,WAAW,IAAI,eAAgB,MAAM,CAC7C,CACH,EAGIgjC,GAAS,cAAcnX,EAAO,CAIhC,WAAW,YAAa,CACtB,MAAO,QACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACdgZ,EAAShZ,EAAO,OAChBljD,EAAIkjD,EAAO,EACXijC,EAAoBjqB,EAAO,qBAAuB,MAAQsH,GAAM,KAAOA,GAAM,KAC7E4iB,EAAoBlqB,EAAO,qBAAuB,MAAQsH,GAAM,KAAOA,GAAM,KACnF,KAAK,WAAW,OAAQxjE,EAAE,MAAM,EAAG,SAAUmmF,CAAiB,EAC9D,KAAK,WAAW,OAAQnmF,EAAE,MAAM,EAAG,SAAUomF,CAAiB,CAC/D,CASD,WAAWviG,EAAM02C,EAAO6iC,EAAWipB,EAAM,CACvC,MAAMnjC,EAAS,KAAK,OACpBA,EAAO,GAAG,iBAAiB,IAAIr/D,EAAOq4E,GAAW,CAC/C,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAIr/D,CAAI,EAClC0f,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,MAAAg3B,EACA,KAAM8rD,EACN,UAAAjpB,EACA,QAAS,EACjB,CAAO,EACD75D,EAAK,KAAK,WAAW,EAAE,GAAG+iF,EAAS,WAAW,EAC9C,KAAK,SAAS/iF,EAAM,UAAW,IAAM,CACnC2/C,EAAO,QAAQr/D,CAAI,EACnBq/D,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM3/C,CACb,CAAK,CACF,CACH,EAGIgjF,GAAO,cAAcxX,EAAO,CAI9B,WAAW,UAAW,CACpB,MAAO,CAAC+W,GAAaI,EAAM,CAC5B,CAID,WAAW,YAAa,CACtB,MAAO,MACR,CACH,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECnTA,SAAUM,GAAyB3/B,EAAQ4/B,EAAe,CACxD,UAAW59B,KAAa49B,EAClB59B,GAAahC,EAAO,uBAAuBgC,EAAU,CAAC,CAAC,EAAE,cAC3D,MAAMA,EAGZ,CAGA,IAAI69B,GAAe,cAAc1C,EAAQ,CAIvC,SAAU,CACR,KAAK,OAAO,MAAM,OAAQh6B,GAAW,CACnC,KAAK,WAAWA,CAAM,EACtB,KAAK,KAAK,eAAgB,CAAE,OAAAA,CAAQ,EAC1C,CAAK,CACF,CAuBD,WAAWA,EAAQ,CACjB,MAAMiJ,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3BpM,EAASoM,EAAM,OACf0zB,EAAmB7nF,EAAU,YAC7B2tC,EAAQ3tC,EAAU,gBAClB8nF,EAAen6C,EAAM,MAAM,OAC3Bo6C,EAAap6C,EAAM,IAAI,OAC7B,GAAIoa,EAAO,QAAQ+/B,CAAY,GAAK//B,EAAO,QAAQggC,CAAU,EAC3D,MAAI,CAACF,GAAoBC,GAAgBC,GACvC5zB,EAAM,cAAcn0D,CAAS,EAExB,GAET,GAAI6nF,EAAkB,CACpB,MAAMG,EAAmBN,GAAyBx8B,EAAO,MAAM,OAAQlrD,EAAU,cAAa,CAAE,EAChG,OAAAioF,GAAW/8B,EAAQvd,EAAM,KAAK,EAC9Bud,EAAO,sBAAsB88B,CAAgB,EACtC,EACb,KAAW,CACL,MAAME,EAAgB,EAAEv6C,EAAM,MAAM,WAAaA,EAAM,IAAI,SACrDw6C,EAA8BL,GAAgBC,EAEpD,GADA5zB,EAAM,cAAcn0D,EAAW,CAAE,cAAAkoF,CAAe,GAC5CA,EAAe,CACjB,GAAIC,EACF,OAAAF,GAAW/8B,EAAQlrD,EAAU,KAAK,EAC3B,GAEPkrD,EAAO,aAAa68B,EAAY,CAAC,CAEpC,CACF,CACD,MAAO,EACR,CACH,EACA,SAASE,GAAW/8B,EAAQk9B,EAAU,CACpCl9B,EAAO,MAAMk9B,CAAQ,EACrBl9B,EAAO,aAAak9B,EAAS,OAAO,YAAa,CAAC,CACpD,CAGA,IAAIC,GAAoB,CACtB,gBAAiB,CAAE,OAAQ,EAAO,EAClC,gBAAiB,CAAE,OAAQ,EAAM,CACnC,EACIC,GAAgB,cAAcC,EAAS,CAIzC,YAAY9jF,EAAM,CAChB,MAAMA,CAAI,EACV,MAAMvd,EAAM,KAAK,SACjB,IAAIshG,EAAe,GACnBthG,EAAI,GAAG,UAAW,CAAC6rB,EAAKjW,IAAS,CAC/B0rF,EAAe1rF,EAAK,QAC1B,CAAK,EACD5V,EAAI,GAAG,cAAe,CAAC6rB,EAAKjW,IAAS,CACnC,GAAI,CAAC,KAAK,UACR,OAEF,IAAI2rF,EAAY3rF,EAAK,UACjBohE,GAAY,UAAYsqB,GAAgBC,GAAa,oBACvDA,EAAY,mBAEd,MAAMC,EAAW5rF,EAAK,SAChB6rF,EAAiBN,GAAkBI,CAAS,EAClD,GAAI,CAACE,EACH,OAEF,MAAM7nF,EAAQ,IAAI8nF,GAAkB1hG,EAAK,QAAS4V,EAAK,aAAa,CAAC,CAAC,EACtE5V,EAAI,KAAK4Z,EAAO,IAAI+nF,GAAapkF,EAAMikF,EAAU,CAC/C,OAAQC,EAAe,MACxB,EAAC,EACE7nF,EAAM,KAAK,QACbiS,EAAI,KAAI,CAEhB,CAAK,CACF,CAID,SAAU,CACT,CAID,eAAgB,CACf,CACH,EAGI+1E,GAAQ,cAAc7Y,EAAO,CAI/B,WAAW,YAAa,CACtB,MAAO,OACR,CACD,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SAC1BA,EAAK,YAAY6jF,EAAa,EAC9BlkC,EAAO,SAAS,IAAI,QAAS,IAAIwjC,GAAaxjC,CAAM,CAAC,EACrD,KAAK,SAAS2kC,EAAc,QAAS,CAACh2E,EAAKjW,IAAS,CAC7CisF,EAAa,aAChBjsF,EAAK,eAAc,EAEjB,CAAAA,EAAK,SAGTsnD,EAAO,QAAQ,OAAO,EACtB3/C,EAAK,qBAAoB,EAC/B,EAAO,CAAE,SAAU,KAAK,CAAE,CACvB,CACH,EAGIukF,GAAoB,cAAc9D,EAAQ,CAI5C,SAAU,CACR,MAAM/wB,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SAClBA,EAAM,OAAQjJ,GAAW,CACvB+9B,GAAgB90B,EAAOjJ,EAAQhkE,EAAI,SAAS,EAC5C,KAAK,KAAK,eAAgB,CAAE,OAAAgkE,CAAQ,EAC1C,CAAK,CACF,CAID,SAAU,CACR,MAAMiJ,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SAClB,KAAK,UAAY+0B,GAAU/0B,EAAM,OAAQjtE,EAAI,SAAS,CACvD,CACH,EACA,SAASgiG,GAAUnhC,EAAQ/nD,EAAW,CACpC,GAAIA,EAAU,WAAa,EACzB,MAAO,GAET,MAAMmpF,EAAYnpF,EAAU,OAC5B,GAAI,CAACmpF,GAAa,CAACphC,EAAO,WAAWohC,EAAW,WAAW,EACzD,MAAO,GAET,MAAMx7C,EAAQ3tC,EAAU,gBAClB8nF,EAAen6C,EAAM,MAAM,OAC3Bo6C,EAAap6C,EAAM,IAAI,OAC7B,MAAK,GAAAy7C,GAAqBtB,EAAc//B,CAAM,GAAKqhC,GAAqBrB,EAAYhgC,CAAM,IAAM+/B,IAAiBC,EAInH,CACA,SAASkB,GAAgB90B,EAAOjJ,EAAQlrD,EAAW,CACjD,MAAM6nF,EAAmB7nF,EAAU,YAC7B2tC,EAAQ3tC,EAAU,gBAClB8nF,EAAen6C,EAAM,MAAM,OAC3Bo6C,EAAap6C,EAAM,IAAI,OACvBw6C,EAA8BL,GAAgBC,EACpD,GAAIF,EAAkB,CACpB,MAAMG,EAAmBN,GAAyBvzB,EAAM,OAAQn0D,EAAU,cAAa,CAAE,EACzFqpF,GAAYl1B,EAAOjJ,EAAQvd,EAAM,GAAG,EACpCud,EAAO,yBAAyBlrD,EAAU,iBAAkB,GAC5DkrD,EAAO,sBAAsB88B,CAAgB,CACjD,KAAS,CACL,MAAME,EAAgB,EAAEv6C,EAAM,MAAM,WAAaA,EAAM,IAAI,SAC3DwmB,EAAM,cAAcn0D,EAAW,CAAE,cAAAkoF,CAAe,GAC5CC,EACFkB,GAAYl1B,EAAOjJ,EAAQlrD,EAAU,KAAK,EAEtCkoF,GACFh9B,EAAO,aAAa68B,EAAY,CAAC,CAGtC,CACH,CACA,SAASsB,GAAYl1B,EAAOjJ,EAAQ92C,EAAU,CAC5C,MAAMk1E,EAAmBp+B,EAAO,cAAc,WAAW,EACzDiJ,EAAM,cAAcm1B,EAAkBl1E,CAAQ,EAC9C82C,EAAO,aAAao+B,EAAkB,OAAO,CAC/C,CACA,SAASF,GAAqB5xE,EAASuwC,EAAQ,CAC7C,OAAIvwC,EAAQ,GAAG,aAAa,EACnB,GAEFuwC,EAAO,QAAQvwC,CAAO,GAAK4xE,GAAqB5xE,EAAQ,OAAQuwC,CAAM,CAC/E,CAGA,IAAIwhC,GAAa,cAActZ,EAAO,CAIpC,WAAW,YAAa,CACtB,MAAO,YACR,CACD,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OACtB4T,EAAa5T,EAAO,WACpB3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SAC1BsjD,EAAO,SAAS,YAAa,CAC3B,WAAY,QACZ,SAAU,EAChB,CAAK,EACDiQ,EAAW,IAAI,QAAQ,EAAE,iBAAiB,CACxC,MAAO,YACP,KAAM,IACZ,CAAK,EACDA,EAAW,IAAI,UAAU,EAAE,iBAAiB,CAC1C,MAAO,YACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,CAAQ,IAAKA,EAAO,mBAAmB,IAAI,CACxE,CAAK,EACDzmD,EAAK,YAAY6jF,EAAa,EAC9BlkC,EAAO,SAAS,IAAI,aAAc,IAAI4kC,GAAkB5kC,CAAM,CAAC,EAC/D,KAAK,SAAS2kC,EAAc,QAAS,CAACh2E,EAAKjW,IAAS,CAC7CisF,EAAa,aAChBjsF,EAAK,eAAc,EAEhBA,EAAK,SAGVsnD,EAAO,QAAQ,YAAY,EAC3B3/C,EAAK,qBAAoB,EAC/B,EAAO,CAAE,SAAU,KAAK,CAAE,CACvB,CACH,EAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC3QA,IAAIglF,GAAe,KAAM,CAMvB,YAAYt1B,EAAOu1B,EAAQ,GAAI,CAC7B,KAAK,OAAS,KACd,KAAK,MAAQv1B,EACb,KAAK,MAAQ,EACb,KAAK,MAAQu1B,EACb,KAAK,UAAY,GACjB,KAAK,gBAAkB,CAAC32E,EAAKoyE,IAAU,CACjCA,EAAM,SAAWA,EAAM,YAAcA,IAAU,KAAK,QACtD,KAAK,OAAO,EAAI,CAExB,EACI,KAAK,yBAA2B,IAAM,CACpC,KAAK,OAAM,CACjB,EACI,KAAK,MAAM,SAAS,GAAG,SAAU,KAAK,eAAe,EACrD,KAAK,MAAM,SAAS,UAAU,GAAG,eAAgB,KAAK,wBAAwB,EAC9E,KAAK,MAAM,SAAS,UAAU,GAAG,mBAAoB,KAAK,wBAAwB,CACnF,CAKD,IAAI,OAAQ,CACV,OAAK,KAAK,SACR,KAAK,OAAS,KAAK,MAAM,YAAY,CAAE,SAAU,EAAI,CAAE,GAElD,KAAK,MACb,CAKD,IAAI,MAAO,CACT,OAAO,KAAK,KACb,CAOD,MAAMwE,EAAa,CACjB,KAAK,OAASA,EACV,KAAK,OAAS,KAAK,OACrB,KAAK,OAAO,EAAI,CAEnB,CAID,IAAI,UAAW,CACb,OAAO,KAAK,SACb,CAID,MAAO,CACL,KAAK,UAAY,EAClB,CAID,QAAS,CACP,KAAK,UAAY,EAClB,CAID,SAAU,CACR,KAAK,MAAM,SAAS,IAAI,SAAU,KAAK,eAAe,EACtD,KAAK,MAAM,SAAS,UAAU,IAAI,eAAgB,KAAK,wBAAwB,EAC/E,KAAK,MAAM,SAAS,UAAU,IAAI,mBAAoB,KAAK,wBAAwB,CACpF,CAMD,OAAOC,EAAa,GAAO,EACrB,CAAC,KAAK,UAAYA,KACpB,KAAK,OAAS,KACd,KAAK,MAAQ,EAEhB,CACH,EAGIC,GAAgB,cAAc3E,EAAQ,CAOxC,YAAY9gC,EAAQ+a,EAAW,CAC7B,MAAM/a,CAAM,EACZ,KAAK,UAAY+a,EACjB,KAAK,QAAU,IAAIsqB,GAAarlC,EAAO,MAAOA,EAAO,OAAO,IAAI,iBAAiB,CAAC,EAClF,KAAK,2BAA6B,EACnC,CAID,IAAI,QAAS,CACX,OAAO,KAAK,OACb,CAYD,QAAQj8D,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SAClBA,EAAM,cAAc,KAAK,QAAQ,MAAQjJ,GAAW,CAClD,KAAK,QAAQ,OACb,MAAMlrD,EAAYkrD,EAAO,gBAAgB/iE,EAAQ,WAAajB,EAAI,SAAS,EAC3E,GAAI,CAACitE,EAAM,UAAUn0D,CAAS,EAC5B,OAEF,MAAM8pF,EAAW3hG,EAAQ,UAAY,EAC/B4hG,EAA0B/pF,EAAU,YAQ1C,GAPIA,EAAU,aACZm0D,EAAM,gBAAgBn0D,EAAW,CAC/B,UAAW,KAAK,UAChB,KAAM7X,EAAQ,KACd,uBAAwB,EAClC,CAAS,EAEC,KAAK,4CAA4C2hG,CAAQ,EAAG,CAC9D,KAAK,mCAAmC5+B,CAAM,EAC9C,MACD,CACD,GAAI,KAAK,sCAAsClrD,EAAW8pF,CAAQ,EAAG,CACnE,KAAK,OAAO,QAAQ,YAAa,CAAE,UAAA9pF,CAAW,GAC9C,MACD,CACD,GAAIA,EAAU,YACZ,OAEF,IAAI2pF,EAAc,EAClB3pF,EAAU,cAAa,EAAG,qBAAsB,EAAC,QAAS2tC,GAAU,CAClEg8C,GAAehsF,GAAMgwC,EAAM,UAAU,CAAE,iBAAkB,GAAM,iBAAkB,GAAM,QAAS,EAAI,CAAE,CAAC,CAC/G,CAAO,EACDwmB,EAAM,cAAcn0D,EAAW,CAC7B,wBAAA+pF,EACA,UAAW,KAAK,SACxB,CAAO,EACD,KAAK,QAAQ,MAAMJ,CAAW,EAC9Bz+B,EAAO,aAAalrD,CAAS,EAC7B,KAAK,QAAQ,QACnB,CAAK,CACF,CAiBD,4CAA4C8pF,EAAU,CACpD,GAAIA,EAAW,EACb,MAAO,GAET,MAAM31B,EAAQ,KAAK,OAAO,MAEpBn0D,EADMm0D,EAAM,SACI,UAChB61B,EAAe71B,EAAM,OAAO,gBAAgBn0D,CAAS,EAK3D,GAHI,EADwBA,EAAU,aAAeA,EAAU,sBAAsBgqF,CAAY,IAI7F,CAAC71B,EAAM,OAAO,WAAW61B,EAAc,WAAW,EACpD,MAAO,GAET,MAAMC,EAAyBD,EAAa,SAAS,CAAC,EACtD,MAAI,EAAAC,GAA0BA,EAAuB,GAAG,UAAW,WAAW,EAI/E,CAMD,mCAAmC/+B,EAAQ,CACzC,MAAMiJ,EAAQ,KAAK,OAAO,MAEpBn0D,EADMm0D,EAAM,SACI,UAChB61B,EAAe71B,EAAM,OAAO,gBAAgBn0D,CAAS,EACrDkqF,EAAYh/B,EAAO,cAAc,WAAW,EAClDA,EAAO,OAAOA,EAAO,cAAc8+B,CAAY,CAAC,EAChD9+B,EAAO,OAAOg/B,EAAWF,CAAY,EACrC9+B,EAAO,aAAag/B,EAAW,CAAC,CACjC,CAQD,sCAAsClqF,EAAW8pF,EAAU,CACzD,MAAM31B,EAAQ,KAAK,OAAO,MAI1B,GAHI21B,EAAW,GAAK,KAAK,WAAa,YAGlC,CAAC9pF,EAAU,YACb,MAAO,GAET,MAAMoU,EAAWpU,EAAU,mBACrBgqF,EAAe71B,EAAM,OAAO,gBAAgB//C,CAAQ,EACpD61E,EAAyBD,EAAa,SAAS,CAAC,EAUtD,MATI,EAAA51E,EAAS,QAAU61E,GAGnB,CAACjqF,EAAU,sBAAsBiqF,CAAsB,GAGvD,CAAC91B,EAAM,OAAO,WAAW61B,EAAc,WAAW,GAGlDC,EAAuB,MAAQ,YAIpC,CACH,EAGIE,GAAmB,YACnBC,GAAc,OACdC,GAAoB,YACpBC,GAAmB,YACnBC,GAAkB,WAClBC,GAAiB,UACjBC,GAAqB,CAGvB,cAAe,CACb,KAAMH,GAGN,UAAWC,EACZ,EAED,sBAAuB,CAerB,KAAMF,GACN,UAAWE,EACZ,EAGD,mBAAoB,CAClB,KAAMH,GACN,UAAWG,EACZ,EAED,uBAAwB,CACtB,KAAMD,GACN,UAAWC,EACZ,EAED,uBAAwB,CACtB,KAAMD,GACN,UAAWC,EACZ,EAID,qBAAsB,CAUpB,KAAMJ,GACN,UAAWK,EACZ,EAED,kBAAmB,CACjB,KAAMJ,GACN,UAAWI,EACZ,EAID,sBAAuB,CACrB,KAAMF,GACN,UAAWE,EACZ,EAGD,sBAAuB,CACrB,KAAMF,GACN,UAAWE,EACZ,CACH,EACIE,GAAiB,cAAcnC,EAAS,CAI1C,YAAY9jF,EAAM,CAChB,MAAMA,CAAI,EACV,MAAM5d,EAAW4d,EAAK,SACtB,IAAIqlF,EAAW,EACfjjG,EAAS,GAAG,UAAW,IAAM,CAC3BijG,GACN,CAAK,EACDjjG,EAAS,GAAG,QAAS,IAAM,CACzBijG,EAAW,CACjB,CAAK,EACDjjG,EAAS,GAAG,cAAe,CAACksB,EAAKjW,IAAS,CACxC,GAAI,CAAC,KAAK,UACR,OAEF,KAAM,CAAE,aAAA6tF,EAAc,SAAAjC,EAAU,UAAAD,CAAS,EAAK3rF,EACxC8tF,EAAkBH,GAAmBhC,CAAS,EACpD,GAAI,CAACmC,EACH,OAEF,MAAMC,EAAa,CACjB,UAAWD,EAAgB,UAC3B,KAAMA,EAAgB,KACtB,SAAAd,CACR,EACUe,EAAW,MAAQP,KACrBO,EAAW,kBAAoBpmF,EAAK,gBAAgBkmF,EAAa,CAAC,CAAC,GAEjElC,IAAc,0BACZvqB,GAAY,YACd2sB,EAAW,SAAW,GAEpBC,GAAsBH,CAAY,IACpCE,EAAW,KAAOP,GAClBO,EAAW,kBAAoBpmF,EAAK,gBAAgBkmF,CAAY,IAGpE,MAAMI,EAAY,IAAInC,GAAkB/hG,EAAU,SAAU8jG,EAAa,CAAC,CAAC,EAC3E9jG,EAAS,KAAKkkG,EAAW,IAAIlC,GAAapkF,EAAMikF,EAAUmC,CAAU,CAAC,EACjEE,EAAU,KAAK,QACjBh4E,EAAI,KAAI,CAEhB,CAAK,EACGmrD,GAAY,SACd8sB,GAAuB,IAAI,CAE9B,CAID,SAAU,CACT,CAID,eAAgB,CACf,CACH,EACA,SAASA,GAAuBpkD,EAAU,CACxC,MAAMniC,EAAOmiC,EAAS,KAChB//C,EAAW4d,EAAK,SACtB,IAAIwmF,EAAiB,KACjBC,EAAsB,GAC1BrkG,EAAS,GAAG,UAAW,CAACksB,EAAK,CAAE,QAAAm5B,CAAO,IAAO,CAC3C++C,EAAiB/+C,EACjBg/C,EAAsB,EAC1B,CAAG,EACDrkG,EAAS,GAAG,QAAS,CAACksB,EAAK,CAAE,QAAAm5B,EAAS,SAAAw8C,KAAe,CACnD,MAAM1oF,EAAYnZ,EAAS,UACrBskG,EAAwBvkD,EAAS,WAAasF,GAAW++C,GAAkBG,EAAgBl/C,CAAO,GAAK,CAAClsC,EAAU,aAAe,CAACkrF,EAExI,GADAD,EAAiB,KACbE,EAAuB,CACzB,MAAME,EAAcrrF,EAAU,gBACxB+qF,EAAY,IAAInC,GAAkB/hG,EAAU,SAAUwkG,CAAW,EACjER,EAAa,CACjB,KAAMP,GACN,UAAWgB,EAAmBp/C,CAAO,EACrC,kBAAmBlsC,CAC3B,EACMnZ,EAAS,KAAKkkG,EAAW,IAAIlC,GAAapkF,EAAMikF,EAAUmC,CAAU,CAAC,CACtE,CACL,CAAG,EACDhkG,EAAS,GAAG,cAAe,CAACksB,EAAK,CAAE,UAAA01E,CAAS,IAAO,CACjD,MAAMmC,EAAkBH,GAAmBhC,CAAS,EACtB2C,EAAgBH,CAAc,GAAKL,GAAmBA,EAAgB,WAAaU,EAAmBL,CAAc,IAEhJC,EAAsB,GAE5B,EAAK,CAAE,SAAU,MAAM,CAAE,EACvBrkG,EAAS,GAAG,cAAe,CAACksB,EAAK,CAAE,UAAA01E,EAAW,KAAA3rF,KAAW,CACvBmuF,GAAkBM,GAAS,QAAU9C,GAAa,cAAgB3rF,GAAQ,KAExGiW,EAAI,KAAI,CAEd,EAAK,CAAE,SAAU,MAAM,CAAE,EACvB,SAASq4E,EAAgBl/C,EAAS,CAChC,OAAOA,GAAWq/C,GAAS,WAAar/C,GAAWq/C,GAAS,MAC7D,CACD,SAASD,EAAmBp/C,EAAS,CACnC,OAAOA,GAAWq/C,GAAS,UAAYhB,GAAkBC,EAC1D,CACH,CACA,SAASM,GAAsBH,EAAc,CAC3C,GAAIA,EAAa,QAAU,GAAKA,EAAa,CAAC,EAAE,YAC9C,MAAO,GAET,MAAMa,EAASb,EAAa,CAAC,EAAE,UAAU,CACvC,UAAW,WACX,iBAAkB,GAClB,iBAAkB,EACtB,CAAG,EACD,IAAIc,EAAS,EACb,SAAW,CAAE,aAAAC,CAAc,IAAIF,EAAQ,CACrC,GAAI,CAACE,EAAa,OAAO,GAAG,OAAO,EACjCD,QACK,CACL,MAAM3uF,EAAO4uF,EAAa,OAAO,KAC3Bj3E,EAASi3E,EAAa,OAC5B,GAAIC,GAAsB7uF,EAAM2X,CAAM,GAAKm3E,GAAuB9uF,EAAM2X,CAAM,GAAKo3E,GAAsB/uF,EAAM2X,CAAM,EACnH,SAEFg3E,GACD,CACD,GAAIA,EAAS,EACX,MAAO,EAEV,CACD,MAAO,EACT,CAGA,IAAIK,GAAS,cAAc7b,EAAO,CAIhC,WAAW,YAAa,CACtB,MAAO,QACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SACpBsnF,EAAgB3nC,EAAO,MAAM,SACnC3/C,EAAK,YAAYimF,EAAc,EAC/B,KAAK,iBAAmB,GACxB,MAAMsB,EAAuB,IAAInC,GAAczlC,EAAQ,SAAS,EAChEA,EAAO,SAAS,IAAI,gBAAiB4nC,CAAoB,EACzD5nC,EAAO,SAAS,IAAI,gBAAiB4nC,CAAoB,EACzD5nC,EAAO,SAAS,IAAI,SAAU,IAAIylC,GAAczlC,EAAQ,UAAU,CAAC,EACnE,KAAK,SAAS2kC,EAAc,SAAU,CAACh2E,EAAKjW,IAAS,CAC9CisF,EAAa,aAChBjsF,EAAK,eAAc,EAErB,KAAM,CAAE,UAAAqiE,EAAW,SAAA2qB,EAAU,kBAAAmC,EAAmB,KAAArtF,CAAI,EAAK9B,EACnDovF,EAAc/sB,IAAc,UAAY,gBAAkB,SAC1DgtB,EAAc,CAAE,SAAArC,GACtB,GAAIlrF,GAAQ,YAAa,CACvB,MAAMwtF,EAAc,MAAM,KAAKH,EAAkB,WAAW,EAAE,IAAKI,GAC1DjoC,EAAO,QAAQ,OAAO,aAAaioC,CAAS,CACpD,EACDF,EAAY,UAAY/nC,EAAO,MAAM,gBAAgBgoC,CAAW,CACxE,MACQD,EAAY,KAAOvtF,EAErBwlD,EAAO,QAAQ8nC,EAAaC,CAAW,EACvC1nF,EAAK,qBAAoB,CAC/B,EAAO,CAAE,SAAU,KAAK,CAAE,EAClB,KAAK,OAAO,QAAQ,IAAI,aAAa,IACvC,KAAK,SAASskF,EAAc,SAAU,CAACh2E,EAAKjW,IAAS,CAC/C,KAAK,kBAAoBA,EAAK,WAAa,YAAcA,EAAK,UAAY,GAAKA,EAAK,MAAQ,cAC9F,KAAK,iBAAmB,GACxBsnD,EAAO,QAAQ,MAAM,EACrBtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,EAElB,EAAS,CAAE,QAAS,UAAU,CAAE,EAC1B,KAAK,SAASg5E,EAAe,SAAU,IAAM,CAC3C,KAAK,iBAAmB,EAChC,CAAO,EAEJ,CAMD,wBAAyB,CACnB,KAAK,OAAO,QAAQ,IAAI,aAAa,IACvC,KAAK,iBAAmB,GAE3B,CACH,EAGIO,GAAoB,cAAcpH,EAAQ,CAO5C,YAAY9gC,EAAQmoC,EAAc,CAChC,MAAMnoC,CAAM,EACZ,KAAK,QAAU,IAAIqlC,GAAarlC,EAAO,MAAOmoC,CAAY,EAC1D,KAAK,2BAA6B,EACnC,CAID,IAAI,QAAS,CACX,OAAO,KAAK,OACb,CAID,SAAU,CACR,MAAM,QAAO,EACb,KAAK,QAAQ,SACd,CASD,QAAQpkG,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SACZnhE,EAAO7K,EAAQ,MAAQ,GACvBqkG,EAAiBx5F,EAAK,OAC5B,IAAIgN,EAAY9Y,EAAI,UAMpB,GALIiB,EAAQ,UACV6X,EAAY7X,EAAQ,UACXA,EAAQ,QACjB6X,EAAYm0D,EAAM,gBAAgBhsE,EAAQ,KAAK,GAE7C,CAACgsE,EAAM,UAAUn0D,CAAS,EAC5B,OAEF,MAAMysF,EAActkG,EAAQ,YAC5BgsE,EAAM,cAAc,KAAK,QAAQ,MAAQjJ,GAAW,CAClD,KAAK,QAAQ,OACb,MAAMwhC,EAAsB,MAAM,KAAKxlG,EAAI,UAAU,cAAa,CAAE,EACpEitE,EAAM,cAAcn0D,CAAS,EACzBhN,GACFmhE,EAAM,cAAcjJ,EAAO,WAAWl4D,EAAM05F,CAAmB,EAAG1sF,CAAS,EAEzEysF,EACFvhC,EAAO,aAAauhC,CAAW,EACrBzsF,EAAU,GAAG,mBAAmB,GAC1CkrD,EAAO,aAAalrD,CAAS,EAE/B,KAAK,QAAQ,SACb,KAAK,QAAQ,MAAMwsF,CAAc,CACvC,CAAK,CACF,CACH,EAGIG,GAAqB,CAOvB,aAGA,uBACF,EACIC,GAAqB,cAAcrE,EAAS,CAI9C,YAAY9jF,EAAM,CAChB,MAAMA,CAAI,EACV,KAAK,cAAgBA,EAAK,YAAYooF,EAAa,EAC/C3uB,GAAY,WACdyuB,GAAmB,KAAK,uBAAuB,EAEjD,MAAM5D,EAAetkF,EAAK,SAC1BskF,EAAa,GAAG,cAAe,CAACh2E,EAAKjW,IAAS,CAC5C,GAAI,CAAC,KAAK,UACR,OAEF,KAAM,CAAE,KAAM9J,EAAM,aAAA23F,EAAc,UAAAlC,EAAW,SAAAC,CAAU,EAAG5rF,EAC1D,GAAI,CAAC6vF,GAAmB,SAASlE,CAAS,EACxC,OAEF,KAAK,cAAc,QACnB,MAAMsC,EAAY,IAAI+B,GAAU/D,EAAc,YAAY,EAC1DA,EAAa,KAAKgC,EAAW,IAAIlC,GAAapkF,EAAMikF,EAAU,CAC5D,KAAA11F,EACA,UAAWyR,EAAK,gBAAgBkmF,CAAY,CAC7C,EAAC,EACEI,EAAU,KAAK,QACjBh4E,EAAI,KAAI,CAEhB,CAAK,EACDg2E,EAAa,GAAG,iBAAkB,CAACh2E,EAAK,CAAE,KAAAjW,EAAM,SAAA4rF,KAAe,CACzD,CAAC,KAAK,WAAaxqB,GAAY,WAG9BphE,GAGLisF,EAAa,KAAK,aAAc,IAAIF,GAAapkF,EAAMikF,EAAU,CAC/D,KAAM5rF,EACN,UAAWisF,EAAa,SACzB,EAAC,CACR,EAAO,CAAE,SAAU,QAAQ,CAAE,CAC1B,CAID,SAAU,CACT,CAID,eAAgB,CACf,CACH,EAGIgE,GAAQ,cAAc9c,EAAO,CAI/B,WAAW,YAAa,CACtB,MAAO,OACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf3/C,EAAO2/C,EAAO,QAAQ,KACtB4oC,EAAiB74B,EAAM,SAAS,UACtC1vD,EAAK,YAAYmoF,EAAkB,EACnC,MAAMK,EAAoB,IAAIX,GAAkBloC,EAAQA,EAAO,OAAO,IAAI,iBAAiB,GAAK,EAAE,EAClGA,EAAO,SAAS,IAAI,aAAc6oC,CAAiB,EACnD7oC,EAAO,SAAS,IAAI,QAAS6oC,CAAiB,EAC9C,KAAK,SAASxoF,EAAK,SAAU,aAAc,CAACsO,EAAKjW,IAAS,CACnD2H,EAAK,SAAS,aACjB3H,EAAK,eAAc,EAErB,KAAM,CAAE,KAAA9J,EAAM,UAAWk6F,EAAe,YAAaC,CAAiB,EAAGrwF,EACnEsvF,EAAc,MAAM,KAAKc,EAAc,WAAW,EAAE,IAAKb,GACtDjoC,EAAO,QAAQ,OAAO,aAAaioC,CAAS,CACpD,EACD,IAAIe,EAAap6F,EACjB,GAAIkrE,GAAY,UAAW,CACzB,MAAMmvB,EAAe,MAAM,KAAKjB,EAAY,CAAC,EAAE,SAAQ,CAAE,EAAE,OAAO,CAACkB,EAAWrmG,IACrEqmG,GAAarmG,EAAK,GAAG,YAAY,EAAIA,EAAK,KAAO,IACvD,EAAE,EACDomG,IACEA,EAAa,QAAUD,EAAW,OAChCA,EAAW,WAAWC,CAAY,IACpCD,EAAaA,EAAW,UAAUC,EAAa,MAAM,EACrDjB,EAAY,CAAC,EAAE,MAAQA,EAAY,CAAC,EAAE,MAAM,aAAaiB,EAAa,MAAM,GAG1EA,EAAa,WAAWD,CAAU,IACpChB,EAAY,CAAC,EAAE,MAAQA,EAAY,CAAC,EAAE,MAAM,aAAagB,EAAW,MAAM,EAC1EA,EAAa,IAIpB,CACD,MAAMG,EAAwB,CAC5B,KAAMH,EACN,UAAWj5B,EAAM,gBAAgBi4B,CAAW,CACpD,EACUe,IACFI,EAAsB,YAAcnpC,EAAO,QAAQ,OAAO,aAAa+oC,CAAe,GAExF/oC,EAAO,QAAQ,aAAcmpC,CAAqB,EAClD9oF,EAAK,qBAAoB,CAC/B,CAAK,EACGy5D,GAAY,UACd,KAAK,SAASz5D,EAAK,SAAU,UAAW,CAACsO,EAAKjW,IAAS,CACjDkwF,EAAe,aAAelwF,EAAK,SAAW,KAAO,CAAC2H,EAAK,SAAS,aAGxE+oF,GAAuBr5B,EAAO84B,CAAiB,CACvD,CAAO,EAED,KAAK,SAASxoF,EAAK,SAAU,mBAAoB,IAAM,CACjDuoF,EAAe,aAGnBQ,GAAuBr5B,EAAO84B,CAAiB,CACvD,CAAO,CAEJ,CACH,EACA,SAASO,GAAuBr5B,EAAO84B,EAAmB,CACxD,GAAI,CAACA,EAAkB,UACrB,OAEF,MAAMQ,EAASR,EAAkB,OACjCQ,EAAO,KAAI,EACXt5B,EAAM,cAAcs5B,EAAO,MAAO,IAAM,CACtCt5B,EAAM,cAAcA,EAAM,SAAS,SAAS,CAChD,CAAG,EACDs5B,EAAO,OAAM,CACf,CAGA,IAAIC,GAAS,cAAczd,EAAO,CAChC,WAAW,UAAW,CACpB,MAAO,CAAC8c,GAAOjB,EAAM,CACtB,CAID,WAAW,YAAa,CACtB,MAAO,QACR,CACH,EAGA,SAAS6B,GAAgBhgD,EAAOwmB,EAAO,CACrC,IAAI7hE,EAAQq7C,EAAM,MAQlB,MAAO,CAAE,KAPI,MAAM,KAAKA,EAAM,UAAU,CAAE,iBAAkB,EAAO,EAAC,EAAE,OAAO,CAAC2/C,EAAW,CAAE,KAAAvyD,CAAI,IACvFA,EAAK,GAAG,OAAO,GAAKA,EAAK,GAAG,YAAY,EAIvCuyD,EAAYvyD,EAAK,MAHtBzoC,EAAQ6hE,EAAM,oBAAoBp5B,CAAI,EAC/B,IAGR,EAAE,EACU,MAAOo5B,EAAM,YAAY7hE,EAAOq7C,EAAM,GAAG,EAC1D,CAGA,IAAIigD,GAAc,cAAczwB,IAAkB,CAMhD,YAAYhJ,EAAO05B,EAAc,CAC/B,QACA,KAAK,MAAQ15B,EACb,KAAK,aAAe05B,EACpB,KAAK,UAAY,GACjB,KAAK,IAAI,YAAa,EAAI,EAC1B,KAAK,GAAG,mBAAoB,IAAM,CAC5B,KAAK,UACP,KAAK,gBAAe,GAEpB,KAAK,cAAc15B,EAAM,SAAS,SAAS,EAC3C,KAAK,cAAcA,EAAM,QAAQ,EAEzC,CAAK,EACD,KAAK,gBAAe,CACrB,CAID,IAAI,UAAW,CACb,OAAO,KAAK,SACb,CAID,iBAAkB,CAEhB,MAAMttE,EADQ,KAAK,MACI,SACvB,KAAK,SAASA,EAAS,UAAW,eAAgB,CAACksB,EAAK,CAAE,aAAA+6E,KAAmB,CAC3E,GAAKA,EAGL,IAAI,CAACjnG,EAAS,UAAU,YAAa,CAC/B,KAAK,WACP,KAAK,KAAK,WAAW,EACrB,KAAK,UAAY,IAEnB,MACD,CACD,KAAK,6BAA6B,WAAW,EACnD,CAAK,EACD,KAAK,SAASA,EAAU,cAAe,CAACksB,EAAKoyE,IAAU,CACjDA,EAAM,QAAU,CAACA,EAAM,SAG3B,KAAK,6BAA6B,OAAQ,CAAE,MAAAA,CAAO,EACzD,CAAK,CACF,CAWD,6BAA6Bj9E,EAAQpL,EAAO,GAAI,CAC9C,MAAMq3D,EAAQ,KAAK,MAEbn0D,EADWm0D,EAAM,SACI,UACrB45B,EAAuB55B,EAAM,YAAYA,EAAM,iBAAiBn0D,EAAU,MAAM,OAAQ,CAAC,EAAGA,EAAU,KAAK,EAC3G,CAAE,KAAAhN,EAAM,MAAA26C,CAAK,EAAKggD,GAAgBI,EAAsB55B,CAAK,EAC7D65B,EAAa,KAAK,aAAah7F,CAAI,EAKzC,GAJI,CAACg7F,GAAc,KAAK,UACtB,KAAK,KAAK,WAAW,EAEvB,KAAK,UAAY,CAAC,CAACA,EACfA,EAAY,CACd,MAAMC,EAAY,OAAO,OAAOnxF,EAAM,CAAE,KAAA9J,EAAM,MAAA26C,CAAK,CAAE,EACjD,OAAOqgD,GAAc,UACvB,OAAO,OAAOC,EAAWD,CAAU,EAErC,KAAK,KAAK,WAAW9lF,CAAM,GAAI+lF,CAAS,CACzC,CACF,CACH,EAGIC,GAAuB,cAAcje,EAAO,CAI9C,WAAW,YAAa,CACtB,MAAO,sBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,iCAAmC,GACxC,KAAK,WAA6B,IAAI,IACtC,KAAK,aAAe,IACrB,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf3/C,EAAO2/C,EAAO,QAAQ,KACtBgZ,EAAShZ,EAAO,OAChB4oC,EAAiB74B,EAAM,SAAS,UACtC,KAAK,SAAS1vD,EAAK,SAAU,WAAY,CAACsO,EAAKjW,IAAS,CAItD,GAHI,CAACkwF,EAAe,aAGhBlwF,EAAK,UAAYA,EAAK,QAAUA,EAAK,QACvC,OAEF,MAAMqxF,EAAoBrxF,EAAK,SAAWyuF,GAAS,WAC7C6C,EAAmBtxF,EAAK,SAAWyuF,GAAS,UAClD,GAAI,CAAC4C,GAAqB,CAACC,EACzB,OAEF,MAAMC,EAAmBjxB,EAAO,yBAChC,IAAIkxB,EAAoB,GACpBD,IAAqB,OAASF,GAAqBE,IAAqB,OAASD,EACnFE,EAAoB,KAAK,uBAAuBxxF,CAAI,EAEpDwxF,EAAoB,KAAK,wBAAwBxxF,CAAI,EAEnDwxF,IAAsB,IACxBv7E,EAAI,KAAI,CAEX,EAAE,CAAE,QAAS,QAAS,SAAU,SAAW,GAC5C,KAAK,SAASi6E,EAAgB,eAAgB,CAACj6E,EAAKjW,IAAS,CAC3D,GAAI,KAAK,iCAAkC,CACzC,KAAK,iCAAmC,GACxC,MACD,CACI,KAAK,uBAGN,CAACA,EAAK,cAAgByxF,GAA6BvB,EAAe,iBAAkB,EAAE,KAAK,UAAU,GAGzG,KAAK,gBAAe,EAC1B,CAAK,EACD,KAAK,yBAAwB,EAC7B,KAAK,6CAA4C,EACjD,KAAK,8BAA6B,CACnC,CAMD,kBAAkBjjC,EAAW,CAC3B,KAAK,WAAW,IAAIA,CAAS,CAC9B,CAQD,uBAAuBjtD,EAAM,CAC3B,MAAM7Q,EAAa,KAAK,WAClBkoE,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3B//C,EAAWpU,EAAU,mBAI3B,OAHI,KAAK,sBAGLoU,EAAS,WAAao6E,GAAgBxuF,EAAW/T,CAAU,EACtD,GAELsiG,GAA6Bn6E,EAAUnoB,CAAU,GACnDwiG,GAAqB3xF,CAAI,EACrB0xF,GAAgBxuF,EAAW/T,CAAU,GAAKsiG,GAA6Bn6E,EAAUnoB,EAAY,EAAI,EACnGyiG,GAAyBv6B,EAAOloE,CAAU,EAE1C,KAAK,iBAAgB,EAEhB,IAEF,EACR,CAQD,wBAAwB6Q,EAAM,CAC5B,MAAM7Q,EAAa,KAAK,WAClBkoE,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3B//C,EAAWpU,EAAU,mBAC3B,OAAI,KAAK,sBACPyuF,GAAqB3xF,CAAI,EACzB,KAAK,gBAAe,EAChByxF,GAA6Bn6E,EAAUnoB,EAAY,EAAI,EACzDyiG,GAAyBv6B,EAAOloE,CAAU,EAE1C0iG,GAAwCx6B,EAAOloE,EAAYmoB,CAAQ,EAE9D,IAEHA,EAAS,UACPo6E,GAAgBxuF,EAAW/T,CAAU,GACvCwiG,GAAqB3xF,CAAI,EACzB6xF,GAAwCx6B,EAAOloE,EAAYmoB,CAAQ,EAC5D,IAEF,GAEL,CAACo6E,GAAgBxuF,EAAW/T,CAAU,GAAKsiG,GAA6Bn6E,EAAUnoB,EAAY,EAAI,GACpGwiG,GAAqB3xF,CAAI,EACzB6xF,GAAwCx6B,EAAOloE,EAAYmoB,CAAQ,EAC5D,IAELw6E,GAAgCx6E,EAAUnoB,CAAU,EAClDmoB,EAAS,SAAW,CAACo6E,GAAgBxuF,EAAW/T,CAAU,GAAKsiG,GAA6Bn6E,EAAUnoB,CAAU,GAClHwiG,GAAqB3xF,CAAI,EACzB6xF,GAAwCx6B,EAAOloE,EAAYmoB,CAAQ,EAC5D,KAET,KAAK,iCAAmC,GACxC,KAAK,iBAAgB,EACd,IAGJ,EACR,CAUD,0BAA2B,CACzB,MAAMgwC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UAC3BttE,EAAWu9D,EAAO,QAAQ,KAAK,SACrCA,EAAO,QAAQ,KAAK,YAAYyqC,EAAa,EAC7C,IAAIC,EAAU,GACd,KAAK,SAASjoG,EAAU,YAAa,IAAM,CACzCioG,EAAU,EAChB,CAAK,EACD,KAAK,SAASjoG,EAAU,kBAAmB,IAAM,CAC/C,MAAMoF,EAAa,KAAK,WAQxB,GAPI,CAAC6iG,IAGLA,EAAU,GACN,CAAC9uF,EAAU,cAGX,CAACwuF,GAAgBxuF,EAAW/T,CAAU,EACxC,OAEF,MAAMmoB,EAAWpU,EAAU,mBACtBuuF,GAA6Bn6E,EAAUnoB,CAAU,IAGlDmoB,EAAS,WAAam6E,GAA6Bn6E,EAAUnoB,EAAY,EAAI,EAC/EyiG,GAAyBv6B,EAAOloE,CAAU,EAChC,KAAK,sBACf,KAAK,iBAAgB,EAE7B,CAAK,CACF,CAUD,8CAA+C,CAE7C,MAAMkoE,EADS,KAAK,OACC,MACfn0D,EAAYm0D,EAAM,SAAS,UAC3BloE,EAAa,KAAK,WACxB,KAAK,SAASkoE,EAAO,gBAAiB,IAAM,CAC1C,MAAM//C,EAAWpU,EAAU,mBACvBwuF,GAAgBxuF,EAAW/T,CAAU,GAAKsiG,GAA6Bn6E,EAAUnoB,CAAU,GAC7FyiG,GAAyBv6B,EAAOloE,CAAU,CAElD,EAAO,CAAE,SAAU,KAAK,CAAE,CACvB,CAaD,+BAAgC,CAC9B,MAAMm4D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UAC3B1vD,EAAO2/C,EAAO,QAAQ,KAC5B,IAAI2qC,EAAc,GACdC,EAA2B,GAC/B,KAAK,SAASvqF,EAAK,SAAU,SAAU,CAACsO,EAAKjW,IAAS,CACpDiyF,EAAcjyF,EAAK,YAAc,UACvC,EAAO,CAAE,SAAU,MAAM,CAAE,EACvB,KAAK,SAASq3D,EAAO,gBAAiB,IAAM,CAC1C,GAAI,CAAC46B,EACH,OAEF,MAAM36E,EAAWpU,EAAU,mBAC3BgvF,EAA2BR,GAAgBxuF,EAAW,KAAK,UAAU,GAAK,CAAC4uF,GAAgCx6E,EAAU,KAAK,UAAU,CAC1I,EAAO,CAAE,SAAU,MAAM,CAAE,EACvB,KAAK,SAAS+/C,EAAO,gBAAiB,IAAM,CACrC46B,IAGLA,EAAc,GACV,CAAAC,GAGJ5qC,EAAO,MAAM,cAAc,IAAM,CAC/B,MAAMhwC,EAAWpU,EAAU,mBACvBwuF,GAAgBxuF,EAAW,KAAK,UAAU,GAAKuuF,GAA6Bn6E,EAAU,KAAK,UAAU,IACnGA,EAAS,WAAam6E,GAA6Bn6E,EAAU,KAAK,WAAY,EAAI,EACpFs6E,GAAyBv6B,EAAO,KAAK,UAAU,EACrC,KAAK,sBACf,KAAK,iBAAgB,EAGjC,CAAO,EACP,EAAO,CAAE,SAAU,KAAK,CAAE,CACvB,CAID,IAAI,sBAAuB,CACzB,MAAO,CAAC,CAAC,KAAK,YACf,CAOD,kBAAmB,CACjB,KAAK,aAAe,KAAK,OAAO,MAAM,OAAQjJ,GACrCA,EAAO,0BACf,CACF,CAMD,iBAAkB,CAChB,KAAK,OAAO,MAAM,OAAQA,GAAW,CACnCA,EAAO,wBAAwB,KAAK,YAAY,EAChD,KAAK,aAAe,IAC1B,CAAK,CACF,CACH,EACA,SAASsjC,GAAgBxuF,EAAW/T,EAAY,CAC9C,UAAWgjG,KAAqBhjG,EAC9B,GAAI+T,EAAU,aAAaivF,CAAiB,EAC1C,MAAO,GAGX,MAAO,EACT,CACA,SAASN,GAAwCx6B,EAAOloE,EAAYmoB,EAAU,CAC5E,MAAM86E,EAAa96E,EAAS,WAC5B+/C,EAAM,OAAQjJ,GAAW,CACvB,GAAIgkC,EAAY,CACd,MAAMC,EAAc,GACdC,EAAiBj7B,EAAM,OAAO,SAAS+6B,CAAU,GAAK/6B,EAAM,OAAO,SAAS+6B,CAAU,EAC5F,SAAW,CAAC/qG,EAAKC,CAAK,IAAK8qG,EAAW,cAAa,EAC7C/6B,EAAM,OAAO,eAAe,QAAShwE,CAAG,IAAM,CAACirG,GAAkBj7B,EAAM,OAAO,uBAAuBhwE,CAAG,EAAE,iBAAmB,KAC/HgrG,EAAY,KAAK,CAAChrG,EAAKC,CAAK,CAAC,EAGjC8mE,EAAO,sBAAsBikC,CAAW,CAC9C,MACMjkC,EAAO,yBAAyBj/D,CAAU,CAEhD,CAAG,CACH,CACA,SAASyiG,GAAyBv6B,EAAOloE,EAAY,CACnDkoE,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,yBAAyBj/D,CAAU,CAC9C,CAAG,CACH,CACA,SAASwiG,GAAqB3xF,EAAM,CAClCA,EAAK,eAAc,CACrB,CACA,SAAS8xF,GAAgCx6E,EAAUnoB,EAAY,CAC7D,MAAMojG,EAAiBj7E,EAAS,aAAa,EAAE,EAC/C,OAAOm6E,GAA6Bc,EAAgBpjG,CAAU,CAChE,CACA,SAASsiG,GAA6Bn6E,EAAUnoB,EAAYqjG,EAAW,GAAO,CAC5E,KAAM,CAAE,WAAAJ,EAAY,UAAAK,CAAW,EAAGn7E,EAClC,UAAW66E,KAAqBhjG,EAAY,CAC1C,MAAMujG,EAAaN,EAAaA,EAAW,aAAaD,CAAiB,EAAI,OACvEQ,EAAYF,EAAYA,EAAU,aAAaN,CAAiB,EAAI,OAC1E,GAAI,EAAAK,IAAaE,IAAe,QAAUC,IAAc,UAGpDA,IAAcD,EAChB,MAAO,EAEV,CACD,MAAO,EACT,CAuCA,SAASE,GAAmBt7E,EAAU6G,EAAe72B,EAAO+vE,EAAO,CACjE,OAAOA,EAAM,YAAYw7B,GAAwBv7E,EAAU6G,EAAe72B,EAAO,GAAM+vE,CAAK,EAAGw7B,GAAwBv7E,EAAU6G,EAAe72B,EAAO,GAAO+vE,CAAK,CAAC,CACtK,CACA,SAASw7B,GAAwBv7E,EAAU6G,EAAe72B,EAAOwrG,EAAUz7B,EAAO,CAChF,IAAIltE,EAAOmtB,EAAS,WAAaw7E,EAAWx7E,EAAS,WAAaA,EAAS,WACvEg6B,EAAW,KACf,KAAOnnD,GAAQA,EAAK,aAAag0B,CAAa,GAAK72B,GACjDgqD,EAAWnnD,EACXA,EAAO2oG,EAAW3oG,EAAK,gBAAkBA,EAAK,YAEhD,OAAOmnD,EAAW+lB,EAAM,iBAAiB/lB,EAAUwhD,EAAW,SAAW,OAAO,EAAIx7E,CACtF,CAGA,SAASy7E,GAAgBzrC,EAAQnpC,EAAe2H,EAASryB,EAAW,CAClE,MAAMkU,EAAO2/C,EAAO,QAAQ,KACtB0rC,EAAsC,IAAI,IAChDrrF,EAAK,SAAS,kBAAmBymD,GAAW,CAC1C,MAAMlrD,EAAYokD,EAAO,MAAM,SAAS,UACxC,IAAIrd,EAAU,GACd,GAAI/mC,EAAU,aAAaib,CAAa,EAAG,CACzC,MAAM80E,EAAaL,GAAmB1vF,EAAU,iBAAgB,EAAIib,EAAejb,EAAU,aAAaib,CAAa,EAAGmpC,EAAO,KAAK,EAChIioC,EAAYjoC,EAAO,QAAQ,OAAO,YAAY2rC,CAAU,EAC9D,UAAWh1D,KAAQsxD,EAAU,WACvBtxD,EAAK,GAAG,UAAWnY,CAAO,GAAK,CAACmY,EAAK,SAASxqC,CAAS,IACzD26D,EAAO,SAAS36D,EAAWwqC,CAAI,EAC/B+0D,EAAoB,IAAI/0D,CAAI,EAC5BgM,EAAU,GAGf,CACD,OAAOA,CACX,CAAG,EACDqd,EAAO,WAAW,IAAI,iBAAiB,EAAE,IAAK4rC,GAAe,CAC3DA,EAAW,GAAG,SAAUC,EAAiB,CAAE,SAAU,SAAS,CAAE,EAChED,EAAW,GAAG,SAAUC,EAAiB,CAAE,SAAU,SAAS,CAAE,EAChED,EAAW,GAAG,YAAaC,EAAiB,CAAE,SAAU,SAAS,CAAE,EACnED,EAAW,GAAG,YAAaC,EAAiB,CAAE,SAAU,SAAS,CAAE,EACnE,SAASA,GAAkB,CACzBxrF,EAAK,OAAQymD,GAAW,CACtB,UAAWnwB,KAAQ+0D,EAAoB,SACrC5kC,EAAO,YAAY36D,EAAWwqC,CAAI,EAClC+0D,EAAoB,OAAO/0D,CAAI,CAEzC,CAAO,CACF,CACL,CAAG,CACH,CAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6jBC5wCA,IAAIm1D,GAAiB,cAAcv2B,IAAe,CAChD,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,OAAS,EAChB,CAMA,IAAI7R,EAAYoD,EAAQ,CACtB,MAAMxvD,EAAQ,KAAK,OACby0F,EAASz0F,EAAM,CAAC,EACtB,KAAK,kBAAkBosD,CAAU,EAC3B,MAAAsoC,EAAS10F,EAAM,CAAC,EAClBy0F,IAAWC,GAAU,CAACC,GAAmBF,EAAQC,CAAM,GACzD,KAAK,KAAK,aAAc,CACtB,cAAeD,EACf,cAAeC,EACf,OAAAllC,CAAA,CACD,CAEL,CAOA,OAAOh7D,EAAIg7D,EAAQ,CACjB,MAAMxvD,EAAQ,KAAK,OACby0F,EAASz0F,EAAM,CAAC,EACtB,KAAK,kBAAkBxL,CAAE,EACnB,MAAAkgG,EAAS10F,EAAM,CAAC,EAClBy0F,IAAWC,GAAU,CAACC,GAAmBF,EAAQC,CAAM,GACzD,KAAK,KAAK,aAAc,CACtB,cAAeD,EACf,cAAeC,EACf,OAAAllC,CAAA,CACD,CAEL,CAKA,kBAAkBpD,EAAY,CAC5B,MAAMpsD,EAAQ,KAAK,OACbzC,EAAQyC,EAAM,UAAWq/B,GAASA,EAAK,KAAO+sB,EAAW,EAAE,EACjE,GAAIuoC,GAAmBvoC,EAAYpsD,EAAMzC,CAAK,CAAC,EAC7C,OAEEA,EAAQ,IACJyC,EAAA,OAAOzC,EAAO,CAAC,EAEvB,IAAI9R,EAAI,EACD,KAAAuU,EAAMvU,CAAC,GAAKmpG,GAAiB50F,EAAMvU,CAAC,EAAG2gE,CAAU,GACtD3gE,IAEIuU,EAAA,OAAOvU,EAAG,EAAG2gE,CAAU,CAC/B,CAMA,kBAAkB53D,EAAI,CACpB,MAAMwL,EAAQ,KAAK,OACbzC,EAAQyC,EAAM,UAAWq/B,GAASA,EAAK,KAAO7qC,CAAE,EAClD+I,EAAQ,IACJyC,EAAA,OAAOzC,EAAO,CAAC,CAEzB,CACF,EACA,SAASo3F,GAAmB9rG,EAAGC,EAAG,CAChC,OAAOD,GAAKC,GAAKD,EAAE,UAAYC,EAAE,UAAY+rG,GAAgBhsG,EAAE,OAAO,GAAKgsG,GAAgB/rG,EAAE,OAAO,CACtG,CACA,SAAS8rG,GAAiB/rG,EAAGC,EAAG,CAC1B,OAAAD,EAAE,SAAWC,EAAE,SACV,GACED,EAAE,SAAWC,EAAE,SACjB,GAEF+rG,GAAgBhsG,EAAE,OAAO,EAAIgsG,GAAgB/rG,EAAE,OAAO,CAC/D,CACA,SAAS+rG,GAAgBjkF,EAAS,CACzB,aAAM,QAAQA,CAAO,EAAIA,EAAQ,KAAK,EAAE,KAAK,GAAG,EAAIA,CAC7D,CAIA,IAAIkkF,GAAoB,YACpBC,GAA6B,qBACjC,SAASC,GAASzpG,EAAM,CACtB,OAAKA,EAAK,GAAG,SAAS,EAGf,CAAC,CAACA,EAAK,kBAAkB,QAAQ,EAF/B,EAGX,CACA,SAAS0pG,GAASn5E,EAAS0zC,EAAQ/iE,EAAU,GAAI,CAC/C,GAAI,CAACqvB,EAAQ,GAAG,kBAAkB,EAChC,MAAM,IAAI8hD,EAAc,sCAAuC,KAAM,CAAE,QAAA9hD,CAAS,GAE3E,OAAA0zC,EAAA,aAAa,kBAAmB,QAAS1zC,CAAO,EAChD0zC,EAAA,SAASslC,GAAmBh5E,CAAO,EACnC0zC,EAAA,kBAAkB,SAAU,GAAM1zC,CAAO,EAChDA,EAAQ,gBAAkBo5E,GAC1B1lC,EAAO,kBAAkB,cAAe,CAAC,EAAG1zC,CAAO,EAC/CrvB,EAAQ,OACD0oG,GAAAr5E,EAASrvB,EAAQ,KAAK,EAE7BA,EAAQ,oBACV2oG,GAAmBt5E,EAAS0zC,CAAM,EAEpC6lC,GAAqBv5E,EAAS0zC,CAAM,EAC7B1zC,CACT,CACA,SAASw5E,GAAax5E,EAASswC,EAAYoD,EAAQ,CAIjD,GAHIpD,EAAW,SACboD,EAAO,SAASv9B,GAAQm6B,EAAW,OAAO,EAAGtwC,CAAO,EAElDswC,EAAW,WACF,UAAA3jE,KAAO2jE,EAAW,WAC3BoD,EAAO,aAAa/mE,EAAK2jE,EAAW,WAAW3jE,CAAG,EAAGqzB,CAAO,CAGlE,CACA,SAASy4E,GAAgBz4E,EAASswC,EAAYoD,EAAQ,CAIpD,GAHIpD,EAAW,SACboD,EAAO,YAAYv9B,GAAQm6B,EAAW,OAAO,EAAGtwC,CAAO,EAErDswC,EAAW,WACF,UAAA3jE,KAAO2jE,EAAW,WACpBoD,EAAA,gBAAgB/mE,EAAKqzB,CAAO,CAGzC,CACA,SAASu5E,GAAqBv5E,EAAS0zC,EAAQlyD,EAAMg4F,GAAcntF,EAASosF,GAAiB,CACrF,MAAAv0F,EAAQ,IAAIw0F,GAClBx0F,EAAM,GAAG,aAAc,CAACqX,EAAKjW,IAAS,CAChCA,EAAK,eACP+G,EAAO2T,EAAS1a,EAAK,cAAeA,EAAK,MAAM,EAE7CA,EAAK,eACP9D,EAAIwe,EAAS1a,EAAK,cAAeA,EAAK,MAAM,CAC9C,CACD,EACK,MAAAm0F,EAAuB,CAAC/nE,EAAU4+B,EAAYopC,IAAYx1F,EAAM,IAAIosD,EAAYopC,CAAO,EACvFC,EAA0B,CAACjoE,EAAUh5B,EAAIghG,IAAYx1F,EAAM,OAAOxL,EAAIghG,CAAO,EAC5EhmC,EAAA,kBAAkB,eAAgB+lC,EAAsBz5E,CAAO,EAC/D0zC,EAAA,kBAAkB,kBAAmBimC,EAAyB35E,CAAO,CAC9E,CACA,SAASq5E,GAASr5E,EAAS45E,EAAgB,CACrB55E,EAAQ,kBAAkB,aAAa,EAC/C,KAAK45E,CAAc,CACjC,CACA,SAASC,GAAS75E,EAAS,CAEzB,OADoBA,EAAQ,kBAAkB,aAAa,EACxC,OAAO,CAAC1G,EAAMF,IAC3B,OAAOA,GAAY,WACdE,EAAOA,EAAO,KAAOF,IAAYA,EAAQ,EAEzCE,EAAOA,EAAO,KAAOF,EAAUA,EAEvC,EAAE,CACP,CACA,SAAS0gF,GAAiBnU,EAAUjyB,EAAQ/iE,EAAU,GAAI,CACxD,OAAA+iE,EAAO,SAAS,CAAC,sBAAuB,4BAA4B,EAAGiyB,CAAQ,EACxEjyB,EAAA,aAAa,OAAQ,UAAWiyB,CAAQ,EAC3Ch1F,EAAQ,OACV+iE,EAAO,aAAa,aAAc/iE,EAAQ,MAAOg1F,CAAQ,EAE3DjyB,EAAO,aAAa,kBAAmBiyB,EAAS,WAAa,QAAU,OAAQA,CAAQ,EACvFA,EAAS,GAAG,oBAAqB,CAACpqE,EAAK40C,EAAU4pC,IAAO,CACtDrmC,EAAO,aAAa,kBAAmBqmC,EAAK,QAAU,OAAQpU,CAAQ,EACvE,EACDA,EAAS,GAAG,mBAAoB,CAACpqE,EAAK40C,EAAU4pC,IAAO,CACjDA,EACKrmC,EAAA,SAAS,qCAAsCiyB,CAAQ,EAEvDjyB,EAAA,YAAY,qCAAsCiyB,CAAQ,CACnE,CACD,EACD4T,GAAqB5T,EAAUjyB,CAAM,EAC9BiyB,CACT,CACA,SAASqU,GAA0BxxF,EAAWm0D,EAAO,CAC7C,MAAAs9B,EAAkBzxF,EAAU,qBAClC,GAAIyxF,EAAiB,CACb,MAAAC,EAA8BC,GAA+B3xF,CAAS,EAC5E,GAAI0xF,EACF,OAAOv9B,EAAM,YAAYA,EAAM,iBAAiBs9B,EAAiBC,CAA2B,CAAC,CAEjG,CACO,OAAAv9B,EAAM,OAAO,0BAA0Bn0D,CAAS,CACzD,CACA,SAAS4wF,IAAkB,CAClB,WACT,CACA,SAASE,GAAmBc,EAAe1mC,EAAQ,CAC3C,MAAA2mC,EAAkB3mC,EAAO,gBAAgB,MAAO,CAAE,MAAO,kCAAoC,SAAS4mC,EAAa,CACjH,MAAAhkB,EAAa,KAAK,aAAagkB,CAAW,EAC1CrsB,EAAO,IAAI7H,GACZ,OAAA6H,EAAA,IAAI,UAAWssB,EAAc,EAClCtsB,EAAK,OAAO,EACDqI,EAAA,YAAYrI,EAAK,OAAO,EAC5BqI,CAAA,CACR,EACD5iB,EAAO,OAAOA,EAAO,iBAAiB0mC,EAAe,CAAC,EAAGC,CAAe,EACxE3mC,EAAO,SAAS,CAAC,iCAAiC,EAAG0mC,CAAa,CACpE,CAGA,IAAII,GAAkC,qBACtC,SAASC,GAAmBC,EAAa1I,EAAczhC,EAAQ,CACtD,OAAC,CAACmqC,GAAexB,GAASwB,CAAW,GAAK,CAACnqC,EAAO,SAASyhC,CAAY,CAChF,CACA,SAAS2I,GAA8BrkB,EAAY,CAC1C,OAAAA,EAAW,QAAQ,iCAAiC,CAC7D,CACA,SAASskB,GAA4BtkB,EAAY,CAC/C,OAAOA,EAAW,UAAU,SAAS,uCAAuC,EAAI,SAAW,OAC7F,CACA,SAASukB,GAA4BvkB,EAAYwkB,EAAc,CACvD,MAAAC,EAAmBzkB,EAAW,QAAQ,YAAY,EACjD,OAAAwkB,EAAa,aAAaC,CAAgB,CACnD,CACA,SAASZ,GAA+B3xF,EAAW,CAC1C,OAAAA,EAAU,aAAagyF,EAA+B,CAC/D,CAKA,IAAIQ,GAA+B,CAAC,SAAU,OAAO,EACjDC,GAA4B,IAAI,YAAY,gBAAgBC,GAAY,eAAe,EAAE,WACzFC,GAAqC,kCACrCC,GAAmB,cAAc3iB,EAAO,CAC1C,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,8BAAgC,IACvC,CAIA,WAAW,YAAa,CACf,wBACT,CAIA,WAAW,UAAW,CACb,OAAC6Y,GAAOgD,EAAM,CACvB,CAIA,MAAO,CACL,MAAM1nC,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KACnC,KAAK,GAAG,mBAAoB,CAACrxC,EAAKjW,EAAMosF,IAAc,CACxCrb,EAAA,OAAQ3iB,GAAW,CAClB,UAAArzD,KAAQg2E,EAAY,SAAS,MAClCqb,EACKh+B,EAAA,YAAYynC,GAAoC96F,CAAI,EAEpDqzD,EAAA,SAASynC,GAAoC96F,CAAI,CAE5D,CACD,EACIqxF,GACI9kC,EAAA,MAAM,OAAQ8G,GAAW,CAC9BA,EAAO,yBAAyB8mC,EAA+B,EAChE,CACH,CACD,EACD,KAAK,6BAA6B,EAClC,KAAK,wCAAwC,EAC7C,KAAK,0CAA0C,EAC/C,KAAK,4CAA4C,EACjD,KAAK,wDAAwD,EAC7D,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,gCAAgC,CACvC,CAIA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,8BAAgC,IACvC,CAUA,iBAAiBa,EAAoBz+E,EAAU,CAC7C,MAAMgwC,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KAC7B4jC,EAAmB5jC,EAAO,MAAM,OAAO,0BAA0ByuC,EAAoB,gBAAiB,EAAI,EAChHzuC,EAAO,QAAQ,kBAAmB,CAChC,SAAUA,EAAO,MAAM,iBAAiByuC,EAAoBz+E,CAAQ,EACpE,WAAY4zE,CAAA,CACb,EACDna,EAAY,MAAM,EAClBA,EAAY,qBAAqB,CACnC,CAYA,mBAAmBpV,EAAS33D,EAAOhZ,EAAUK,EAAS,CACpD,KAAK,SAASswE,EAAS33D,EAAO,IAAInO,IAAS,CACrC,KAAK,WACP7K,EAAS,GAAG6K,CAAI,GAEjBxK,CAAO,CACZ,CAYA,8CAA+C,CAGvC,MAAA6kG,EAFS,KAAK,OACC,MACQ,SAAS,UAChC0E,EAA8BC,GAA+B3E,CAAc,EACjF,GAAI,CAAC0E,EACI,SAEH,MAAAoB,EAAuB9F,EAAe,qBACvC,6BAAiB8F,EAAsBpB,CAA2B,EAChE,EACT,CAQA,8BAA+B,CAC7B,MAAMttC,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OACtBljD,EAAIkjD,EAAO,OAAO,EAClB2uC,EAAe,CACnB,OAAQ7xF,EAAE,+BAA+B,EACzC,MAAOA,EAAE,8BAA8B,GAEzCkjD,EAAO,QAAQ,mBAAmB,GAAG,SAAU,CAACrxC,EAAKjW,EAAMk2F,IAAkB,CAC3E,MAAMd,EAAcc,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EAC3Do1F,GAGDD,GAAmBC,EAAap1F,EAAK,KAAMirD,CAAM,IAChCkrC,GAAAD,EAAc,OAAQD,EAAcb,CAAW,EAC9CA,EAAY,kBAAkB,aAAa,EACnD,KAAK,IACR,KAAK,UAAYhxF,EAAE,4EAA4E,EAAI,EAC3G,EACH,EACC,CAAE,SAAU,MAAO,CACxB,CA0BA,yDAA0D,CACxD,MAAMkjD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf4oC,EAAiB74B,EAAM,SAAS,UAChCpM,EAASoM,EAAM,OACf0Z,EAAczpB,EAAO,QAAQ,KACnC,KAAK,mBAAmBypB,EAAY,SAAU,WAAY,CAAC96D,EAAKmgF,IAAiB,CAC1E,0BAAqBngF,EAAKmgF,CAAY,GAC1C,CAAE,QAAS,CAACxC,GAAU,OAAO,EAAG,SAAU,OAAQ,EACrD,KAAK,mBAAmB1D,EAAgB,eAAgB,CAACj6E,EAAKjW,IAAS,CAChEA,EAAK,cAGHsnD,EAAA,MAAM,OAAQ8G,GAAW,CAC9BA,EAAO,yBAAyB8mC,EAA+B,EAChE,EACF,EACD,KAAK,mBAAmB79B,EAAM,SAAU,cAAe,IAAM,CACrD,MAAA2+B,EAAuB9F,EAAe,qBAC5C,GAAI8F,EAAsB,CACxB,MAAMK,EAAsB/uC,EAAO,QAAQ,OAAO,cAAc0uC,CAAoB,EACpF,GAAIb,GAAmBkB,EAAqBL,EAAsB/qC,CAAM,EACtE,MAEJ,CACO3D,EAAA,MAAM,OAAQ8G,GAAW,CAC9BA,EAAO,yBAAyB8mC,EAA+B,EAChE,EACF,EACI,wBAAmB5tC,EAAO,QAAQ,mBAAoB,YAAa,CAACrxC,EAAKjW,EAAMk2F,IAAkB,CACpG,MAAM9nC,EAAS8nC,EAAc,OAC7B,GAAI,KAAK,8BAA+B,CACtC,MAAMI,EAAuBJ,EAAc,OAAO,cAAc,KAAK,6BAA6B,EAC9FI,IACFloC,EAAO,YAAYsnC,GAA6B,IAAIa,CAAwB,EAAGD,CAAoB,EACnG,KAAK,8BAAgC,KAEzC,CACM,MAAAN,EAAuBh2F,EAAK,UAAU,mBAAmB,EAC/D,GAAI,CAACg2F,EACH,OAEF,MAAMK,EAAsBH,EAAc,OAAO,cAAcF,CAAoB,EACnF,GAAI,CAACb,GAAmBkB,EAAqBL,EAAsB/qC,CAAM,EACvE,OAEI,MAAA2pC,EAA8BC,GAA+B70F,EAAK,SAAS,EAC5E40F,IAGLxmC,EAAO,SAASmoC,EAAyB3B,CAA2B,EAAGyB,CAAmB,EAC1F,KAAK,8BAAgCL,EAAA,CACtC,EACI,wBAAmB1uC,EAAO,GAAG,aAAc,mBAAoB,CAACrxC,EAAKhuB,EAAMq/E,IAAc,CACvFA,GACIhgB,EAAA,MAAM,OAAQ8G,GAAW,CAC9BA,EAAO,yBAAyB8mC,EAA+B,EAChE,CACH,CACD,EACD,SAASqB,EAAyBj/E,EAAU,CAC1C,MAAO,yCAAyCA,CAAQ,EAC1D,CACF,CAaA,qBAAqBrB,EAAKmgF,EAAc,CACtC,MAAM9uC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf4oC,EAAiB74B,EAAM,SAAS,UAChCpM,EAASoM,EAAM,OACf0Z,EAAczpB,EAAO,QAAQ,KAC7BlY,EAAUgnD,EAAa,QACvBI,EAAYC,GAAsBrnD,EAASkY,EAAO,OAAO,wBAAwB,EACjF+uC,EAAsBtlB,EAAY,SAAS,UAAU,mBAAmB,EACxEilB,EAAuB1uC,EAAO,QAAQ,OAAO,eAAe+uC,CAAmB,EACjF,IAAAK,EACAvB,GAAmBkB,EAAqBL,EAAsB/qC,CAAM,EACxCyrC,EAAA,KAAK,qCAAqCF,CAAS,EACxEtG,EAAe,YACMwG,EAAA,KAAK,+CAA+CF,CAAS,EACjFJ,EAAa,WACOM,EAAA,KAAK,8CAA8CF,CAAS,GAExFE,IACFN,EAAa,eAAe,EAC5BngF,EAAI,KAAK,EAEb,CAWA,qCAAqCugF,EAAW,CAE9C,MAAMn/B,EADS,KAAK,OACC,MACf64B,EAAiB74B,EAAM,SAAS,UAChCu9B,EAA8BC,GAA+B3E,CAAc,EAC1E,OAAA74B,EAAM,OAAQjJ,GAAW,CAC9B,GAAIwmC,GAEF,GAAI,EADoBA,KAAiC4B,EAAY,QAAU,WAE7E,OAAApoC,EAAO,yBAAyB8mC,EAA+B,EACxD,OAGT,QAAA9mC,EAAO,sBAAsB8mC,GAAiCsB,EAAY,QAAU,QAAQ,EACrF,GAEF,SACR,CACH,CAeA,+CAA+CA,EAAW,CACxD,MAAMlvC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf2D,EAASoM,EAAM,OACfs/B,EAAervC,EAAO,QAAQ,IAAI,QAAQ,EAC1CsvC,EAA8BD,EAAa,iCAAiCH,CAAS,EACrFK,EAA6BvvC,EAAO,QAAQ,OAAO,cAAcsvC,CAA2B,EAClG,OAAIzB,GAAmB0B,EAA4BD,EAA6B3rC,CAAM,GAC9EoM,EAAA,OAAQjJ,GAAW,CACvBuoC,EAAa,yBAAyBC,CAA2B,EACjExoC,EAAO,sBAAsB8mC,GAAiCsB,EAAY,SAAW,OAAO,EAC7F,EACM,IAEF,EACT,CAUA,8CAA8CA,EAAW,CACvD,MAAMlvC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf2D,EAASoM,EAAM,OACfy/B,EAASxvC,EAAO,QAAQ,OACxB4oC,EAAiB74B,EAAM,SAAS,UAChC0/B,EAAoBP,EAAYtG,EAAe,kBAAkB,WAAaA,EAAe,iBAAmB,YAChH8G,EAAmBF,EAAO,cAAcC,CAAiB,EAC/D,OAAI5B,GAAmB6B,EAAkBD,EAAmB9rC,CAAM,GAC1DoM,EAAA,OAAQjJ,GAAW,CAChBA,EAAA,aAAa2oC,EAAmB,IAAI,EAC3C3oC,EAAO,sBAAsB8mC,GAAiCsB,EAAY,QAAU,QAAQ,EAC7F,EACM,IAEF,EACT,CAMA,yCAA0C,CACxC,MAAMlvC,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KACnC,KAAK,mBAAmBypB,EAAY,SAAU,YAAa,CAAC96D,EAAKmgF,IAAiB,CAC1E,MAAAzjE,EAAS0iE,GAA8Be,EAAa,SAAS,EACnE,GAAI,CAACzjE,EACH,OAEI,MAAAskE,EAAiB3B,GAA4B3iE,CAAM,EACnDukE,EAAoB3B,GAA4B5iE,EAAQo+C,EAAY,YAAY,EAChFglB,EAAqBzuC,EAAO,QAAQ,OAAO,eAAe4vC,CAAiB,EAC5E,sBAAiBnB,EAAoBkB,CAAc,EACxDb,EAAa,eAAe,EAC5BngF,EAAI,KAAK,EACV,CACH,CAcA,2CAA4C,CAC1C,MAAMqxC,EAAS,KAAK,OACdpkD,EAAYokD,EAAO,MAAM,SAAS,UAClCypB,EAAczpB,EAAO,QAAQ,KACnC,KAAK,mBAAmBypB,EAAY,SAAU,QAAS,CAAC96D,EAAKmgF,IAAiB,CACxE,GAAAngF,EAAI,YAAc,WACpB,OAEI,MAAA+/E,EAAuB9yF,EAAU,qBACjCmzF,EAAsB/uC,EAAO,QAAQ,OAAO,cAAc0uC,CAAoB,EAC9E/qC,EAAS3D,EAAO,MAAM,OACxB,IAAA6vC,EACA,KAAK,+CACMA,EAAA,GACJhC,GAAmBkB,EAAqBL,EAAsB/qC,CAAM,IAC7E,KAAK,iBAAiB+qC,EAAsBI,EAAa,OAAS,SAAW,OAAO,EACvEe,EAAA,IAEXA,IACFf,EAAa,eAAe,EAC5BngF,EAAI,KAAK,EACX,EACC,CAAE,QAAS29E,EAAA,CAAU,CAC1B,CAcA,6CAA8C,CAEtC,MAAA3H,EADS,KAAK,OACQ,QAAQ,KAAK,SACzC,KAAK,mBAAmBA,EAAc,aAAc,CAACh2E,EAAKjW,IAAS,CAC7D,KAAK,iDACPA,EAAK,UAAYisF,EAAa,UAChC,EACC,CAAE,SAAU,OAAQ,EACnB7qB,GAAY,UACd,KAAK,mBAAmB6qB,EAAc,UAAW,CAACh2E,EAAKjW,IAAS,CAC1DA,EAAK,SAAW,KAClB,KAAK,6CAA6C,CACpD,CACD,EAEI,wBAAmBisF,EAAc,mBAAoB,IAAM,CAC9D,KAAK,6CAA6C,GACjD,CAAE,SAAU,OAAQ,CAE3B,CASA,0BAA2B,CACzB,MAAM3kC,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KAC7B+P,EAAQ/P,EAAO,MACf2D,EAASoM,EAAM,OACrB,KAAK,mBAAmB0Z,EAAY,SAAU,SAAU,CAAC96D,EAAKmgF,IAAiB,CACzE,GAAAngF,EAAI,YAAc,WACpB,OAEF,MAAM2+E,EAA8BC,GAA+Bx9B,EAAM,SAAS,SAAS,EAC3F,GAAI,CAACu9B,EACH,OAEF,MAAMvyB,EAAY+zB,EAAa,UACzBgB,EAAsB//B,EAAM,SAAS,UAAU,mBAAmB,EAClEggC,EAAoBzC,IAAgC,SACpD0C,EAAkBj1B,GAAa,UAErC,GADiCg1B,IAAsBC,EAErDhwC,EAAO,QAAQ,SAAU,CACvB,UAAW+P,EAAM,gBAAgB+/B,EAAqB,IAAI,EAC3D,MACI,CACC,MAAAvmD,EAAQoa,EAAO,yBAAyBoM,EAAM,iBAAiB+/B,EAAqBxC,CAA2B,EAAGvyB,CAAS,EACjI,GAAIxxB,EACE,IAACA,EAAM,YACHwmB,EAAA,OAAQjJ,GAAW,CACvBA,EAAO,aAAavd,CAAK,EAClByW,EAAA,QAAQgwC,EAAkB,gBAAkB,QAAQ,EAC5D,MACI,CACL,MAAMC,EAAQlgC,EAAM,gBAAgBxmB,EAAM,KAAK,EAE/C,GADAwmB,EAAM,gBAAgBkgC,EAAO,CAAE,UAAAl1B,CAAW,GACtC,CAACk1B,EAAM,MAAM,QAAQ1mD,EAAM,KAAK,EAC5BwmB,EAAA,OAAQjJ,GAAW,CACvBA,EAAO,aAAavd,CAAK,EAClByW,EAAA,QAAQgwC,EAAkB,gBAAkB,QAAQ,EAC5D,MACI,CACL,MAAME,EAA4BC,GAA+BxsC,EAAQpa,EAAM,MAAM,MAAM,EAC3FwmB,EAAM,cAAcA,EAAM,gBAAgBmgC,EAA2B,IAAI,EAAG,CAC1E,mBAAoB,GACrB,CACH,CACF,CAEJ,CACApB,EAAa,eAAe,EAC5BngF,EAAI,KAAK,GACR,CAAE,QAAS29E,EAAA,CAAU,CAC1B,CAOA,iCAAkC,CAChC,MAAMtsC,EAAS,KAAK,OACd+P,EAAQ,KAAK,OAAO,MACpBqgC,EAAoBrgC,EAAM,SAAS,UACpC,wBAAmB/P,EAAO,MAAO,gBAAiB,CAACrxC,EAAK,CAAChQ,EAAS0xF,CAAU,IAAM,CACrF,GAAIA,GAAc,CAACA,EAAW,GAAG,mBAAmB,EAClD,OAEI,MAAA/C,EAA8BC,GAA+B6C,CAAiB,EACpF,GAAK9C,EAGL,OAAA3+E,EAAI,KAAK,EACFohD,EAAM,OAAQjJ,GAAW,CACxB,MAAAumC,EAAkB+C,EAAkB,qBACpCpgF,EAAW+/C,EAAM,iBAAiBs9B,EAAiBC,CAA2B,EAC9E1xF,EAAYkrD,EAAO,gBAAgB92C,CAAQ,EAC3C1iB,EAASyiE,EAAM,cAAcpxD,EAAS/C,CAAS,EACrD,OAAAkrD,EAAO,aAAalrD,CAAS,EACtBtO,CAAA,CACR,GACA,CAAE,SAAU,OAAQ,CACzB,CAQA,gCAAiC,CAC/B,MAAM0yD,EAAS,KAAK,OAEdowC,EADQ,KAAK,OAAO,MACM,SAAS,UACzC,KAAK,mBAAmBpwC,EAAO,MAAO,eAAgB,CAACrxC,EAAKpgB,IAAS,CACnE,KAAM,CAAG,CAAA8hG,EAAYtsG,EAAU,CAAE,GAAIwK,EACrC,GAAI8hG,GAAc,CAACA,EAAW,GAAG,mBAAmB,EAClD,OAEI,MAAA/C,EAA8BC,GAA+B6C,CAAiB,EAC/E9C,IAGLvpG,EAAQ,oBAAsBupG,EAC9B/+F,EAAK,CAAC,EAAIxK,EAAA,EACT,CAAE,SAAU,OAAQ,CACzB,CASA,iCAAkC,CAChC,MAAMi8D,EAAS,KAAK,OAEdowC,EADQ,KAAK,OAAO,MACM,SAAS,UACpC,wBAAmBpwC,EAAO,MAAO,gBAAiB,CAACrxC,EAAK,CAAC/S,CAAS,IAAM,CAC3E,GAAIA,GAAa,CAACA,EAAU,GAAG,mBAAmB,EAChD,OAEkC2xF,GAA+B6C,CAAiB,GAElFzhF,EAAI,KAAK,CACX,EACC,CAAE,SAAU,OAAQ,CACzB,CACF,EACA,SAASkgF,GAAmByB,EAAY3B,EAAciB,EAAmB,CACjE,MAAAW,EAAoBD,EAAW,gBAAgB,MAAO,CAC1D,MAAO,wCACT,EAAG,SAAS5C,EAAa,CACjB,MAAA8C,EAAoB,KAAK,aAAa9C,CAAW,EACvD,OAAA+C,GAAcD,EAAmB7B,CAAY,EAC7C+B,GAAgBF,CAAiB,EAC1BA,CAAA,CACR,EACDF,EAAW,OAAOA,EAAW,iBAAiBV,EAAmB,KAAK,EAAGW,CAAiB,CAC5F,CACA,SAASE,GAAcD,EAAmB7B,EAAc,CACtD,UAAW3+E,KAAYo+E,GAA8B,CAC7C,MAAAuC,EAAiB,IAAIr7B,GAAS,CAClC,IAAK,MACL,WAAY,CACV,MAAO,CACL,KACA,iCACA,kCAAkCtlD,CAAQ,EAC5C,EACA,MAAO2+E,EAAa3+E,CAAQ,EAC5B,cAAe,MACjB,EACA,SAAU,CACRwgF,EAAkB,cAAc,WAAWnC,GAA2B,EAAI,CAC5E,EACD,EACiBmC,EAAA,YAAYG,EAAe,OAAQ,EACvD,CACF,CACA,SAASD,GAAgBF,EAAmB,CACpC,MAAAI,EAAgB,IAAIt7B,GAAS,CACjC,IAAK,MACL,WAAY,CACV,MAAO,CACL,KACA,oCACF,CACF,EACD,EACiBk7B,EAAA,YAAYI,EAAc,OAAQ,EACtD,CACA,SAAST,GAA+BxsC,EAAQvwC,EAAS,CACvD,IAAIy9E,EAAuBz9E,EAC3B,UAAW09E,KAAY19E,EAAQ,aAAa,CAAE,YAAa,GAAM,EAAG,CAClE,GAAI09E,EAAS,WAAa,GAAKntC,EAAO,QAAQmtC,CAAQ,EACpD,MAEqBD,EAAAC,CACzB,CACO,OAAAD,CACT,CAGA,SAASE,GAA0BC,EAAS,CAC1C,MAAMjhC,EAAQihC,EAAQ,MACf,OAACriF,EAAKjW,IAAS,CACd,MAAAu4F,EAAiBv4F,EAAK,SAAWyuF,GAAS,QAC1C+J,EAAmBx4F,EAAK,SAAWyuF,GAAS,UAC5CgK,EAAkBz4F,EAAK,SACvBkD,EAAYm0D,EAAM,SAAS,UAC7B,IAACkhC,GAAkB,CAACC,EACtB,OAEF,MAAMhC,EAAYgC,EAClB,GAAIC,GAAmBC,GAAoBx1F,EAAWszF,CAAS,EAC7D,OAEF,MAAM3lD,EAAQ8nD,GAA2BL,EAASp1F,EAAWszF,CAAS,EACtE,GAAK3lD,EAGL,IAAIA,EAAM,YAAa,CACrB,GAAI3tC,EAAU,YACZ,UACSu1F,EACT,MAEJ,EACI5nD,EAAM,aAAe+nD,GAAkBN,EAASznD,EAAO2lD,CAAS,KAC5Dn/B,EAAA,OAAQjJ,GAAW,CACvB,MAAMyqC,EAAcrC,EAAY3lD,EAAM,IAAMA,EAAM,MAClD,GAAI4nD,EAAiB,CACnB,MAAMK,EAAezhC,EAAM,gBAAgBn0D,EAAU,MAAM,EAC3D41F,EAAa,SAASD,CAAW,EACjCzqC,EAAO,aAAa0qC,CAAY,OAEhC1qC,EAAO,aAAayqC,CAAW,CACjC,CACD,EACD5iF,EAAI,KAAK,EACTjW,EAAK,eAAe,EACpBA,EAAK,gBAAgB,GACvB,CAEJ,CACA,SAAS24F,GAA2BL,EAASp1F,EAAWszF,EAAW,CACjE,MAAMn/B,EAAQihC,EAAQ,MACtB,GAAI9B,EAAW,CACb,MAAM5S,EAAgB1gF,EAAU,YAAcA,EAAU,MAAQA,EAAU,kBACpE2gF,EAAckV,GAAyB1hC,EAAOusB,EAAe,SAAS,EAC5E,GAAI,CAACC,EACI,YAET,MAAMhzC,EAAQwmB,EAAM,YAAYusB,EAAeC,CAAW,EACpDmV,EAAoBC,GAAuB5hC,EAAM,OAAQxmB,EAAO,UAAU,EAChF,OAAImoD,EACK3hC,EAAM,YAAYusB,EAAeoV,CAAiB,EAEpD,SACF,CACL,MAAMnV,EAAc3gF,EAAU,YAAcA,EAAU,MAAQA,EAAU,mBAClE0gF,EAAgBmV,GAAyB1hC,EAAOwsB,EAAa,UAAU,EAC7E,GAAI,CAACD,EACI,YAET,MAAM/yC,EAAQwmB,EAAM,YAAYusB,EAAeC,CAAW,EACpDqV,EAAqBD,GAAuB5hC,EAAM,OAAQxmB,EAAO,SAAS,EAChF,OAAIqoD,EACK7hC,EAAM,YAAY6hC,EAAoBrV,CAAW,EAEnD,IACT,CACF,CACA,SAASkV,GAAyB1hC,EAAOusB,EAAevhB,EAAW,CACjE,MAAMpX,EAASoM,EAAM,OACfxmB,EAAQwmB,EAAM,cAAcusB,EAAc,IAAI,EAC9CuV,EAAkB92B,GAAa,UAAY,eAAiB,aACvD,UAAE,iBAAA+2B,EAAkB,KAAAn7D,EAAM,KAAAvxC,CAAK,IAAKmkD,EAAM,UAAU,CAAE,cAAA+yC,EAAe,UAAAvhB,CAAU,CAAC,EAAG,CACxF,GAAApX,EAAO,QAAQhtB,CAAI,GAAK,CAACgtB,EAAO,SAAShtB,CAAI,EACxC,OAAAm7D,EAET,GAAI1sG,GAAQysG,GAAmBluC,EAAO,QAAQhtB,CAAI,EACzC,WAEX,CACO,WACT,CACA,SAASg7D,GAAuBhuC,EAAQpa,EAAOwxB,EAAW,CACxD,MAAM/qD,EAAW+qD,GAAa,WAAaxxB,EAAM,IAAMA,EAAM,MAC7D,GAAIoa,EAAO,WAAW3zC,EAAU,OAAO,EAC9B,OAAAA,EAEE,UAAE,aAAAs3E,KAAkB/9C,EAAM,UAAU,CAAE,UAAAwxB,CAAA,CAAW,EAC1D,GAAIpX,EAAO,WAAW2jC,EAAc,OAAO,EAClC,OAAAA,EAGJ,WACT,CACA,SAASgK,GAAkBN,EAASrF,EAAYuD,EAAW,CACzD,MAAMn/B,EAAQihC,EAAQ,MAChB9C,EAAe8C,EAAQ,KAAK,aAClC,GAAI9B,EAAW,CACb,MAAMe,EAAQlgC,EAAM,gBAAgB47B,EAAW,KAAK,EACpD57B,EAAM,gBAAgBkgC,CAAK,EACvB,CAACA,EAAM,MAAM,SAAW,CAACtE,EAAW,MAAM,QAAQsE,EAAM,KAAK,IAC/DtE,EAAa57B,EAAM,YAAYkgC,EAAM,MAAOtE,EAAW,GAAG,EAE9D,CACA,MAAM1D,EAAY+I,EAAQ,OAAO,YAAYrF,CAAU,EACjDoG,EAAW7D,EAAa,eAAejG,CAAS,EAChD+J,EAAQlwB,GAAK,iBAAiBiwB,CAAQ,EACxC,IAAAE,EACJ,UAAW/hF,KAAQ8hF,EAAO,CACxB,GAAIC,IAA6B,OAAQ,CACZA,EAAA,KAAK,MAAM/hF,EAAK,MAAM,EACjD,QACF,CACA,GAAI,KAAK,MAAMA,EAAK,GAAG,GAAK+hF,EACnB,SAETA,EAA2B,KAAK,IAAIA,EAA0B,KAAK,MAAM/hF,EAAK,MAAM,CAAC,CACvF,CACO,QACT,CACA,SAASkhF,GAAoBx1F,EAAWszF,EAAW,CACjD,MAAO,CAACtzF,EAAU,aAAeA,EAAU,YAAcszF,CAC3D,CAIA,IAAIgD,GAAS,cAAcrmB,EAAO,CAChC,aAAc,CACZ,MAAM,GAAG,SAAS,EACb,6BAA0C,GACjD,CAIA,WAAW,YAAa,CACf,cACT,CAIA,WAAW,UAAW,CACb,OAAC2iB,GAAkB9G,EAAM,CAClC,CAIA,MAAO,CACL,MAAM1nC,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SACrB,YAAO,QAAQ,mBAAmB,GAAG,YAAa,CAACsO,EAAKjW,EAAMk2F,IAAkB,CACnF,MAAM0B,EAAa1B,EAAc,OAC3BhG,EAAiBlwF,EAAK,UAC5B,GAAIkwF,EAAe,YACjB,OAEI,MAAA8F,EAAuB9F,EAAe,qBAC5C,GAAI,CAAC8F,EACH,OAEF,MAAMK,EAAsB/uC,EAAO,QAAQ,OAAO,cAAc0uC,CAAoB,EAC/EpC,GAASyC,CAAmB,GAG5BH,EAAc,WAAW,QAAQhG,EAAgB,WAAW,GAGjE0H,EAAW,aAAaA,EAAW,cAAcvB,CAAmB,EAAG,CACrE,KAAM,GACN,MAAO9B,GAAS8B,CAAmB,EACpC,EACF,EACI,YAAO,QAAQ,mBAAmB,GAAG,YAAa,CAACpgF,EAAKjW,EAAMk2F,IAAkB,CAC9E,qCAAgCA,EAAc,MAAM,EACzD,MAAM0B,EAAa1B,EAAc,OAC3B9F,EAAgBwH,EAAW,SAAS,UAC1C,IAAI6B,EAAa,KACN,UAAA5oD,KAASu/C,EAAc,YAChC,UAAW9oG,KAASupD,EAAO,CACzB,MAAM1mD,EAAO7C,EAAM,KACfssG,GAASzpG,CAAI,GAAK,CAACuvG,GAAQvvG,EAAMsvG,CAAU,IAClC7B,EAAA,SAASjE,GAA4BxpG,CAAI,EAC/C,yBAAoB,IAAIA,CAAI,EACpBsvG,EAAAtvG,EAEjB,CACF,EACC,CAAE,SAAU,MAAO,EACtBwd,EAAK,YAAYoqF,EAAa,EACzB,cAAS9F,EAAc,YAAa,IAAIp2F,IAAS,KAAK,aAAa,GAAGA,CAAI,CAAC,EAChF,KAAK,SAASo2F,EAAc,WAAY,IAAIp2F,IAAS,CAC9C,2CAAsC,GAAGA,CAAI,GACjD,CAAE,QAAS,CAAC+9F,GAAU,OAAO,CAAG,GACnC,KAAK,SAAS3H,EAAc,WAAY,IAAIp2F,IAAS,CAC9C,oCAA+B,GAAGA,CAAI,GAC1C,CAAE,QAAS,QAAS,EAClB,cAASo2F,EAAc,WAAYoM,GAA0B,KAAK,OAAO,OAAO,EAAG,CAAE,QAAS,OAAS,GAC5G,KAAK,SAASpM,EAAc,SAAU,CAACh2E,EAAKjW,IAAS,CAC/C,KAAK,cAAcA,EAAK,WAAa,SAAS,IAChDA,EAAK,eAAe,EACpBiW,EAAI,KAAK,EACX,EACC,CAAE,QAAS,QAAS,CACzB,CAIA,aAAag4E,EAAWmI,EAAc,CACpC,MAAM9uC,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SAC1B,IAAI+S,EAAU07E,EAAa,OACvB,GAAAA,EAAa,SAAS,QAAU,EAAG,CACjC,KAAK,oBAAoB17E,CAAO,GAClC07E,EAAa,eAAe,EAE9B,MACF,CAII,GAHAuD,GAAuBj/E,CAAO,GAG9B,CAACk5E,GAASl5E,CAAO,IACTA,IAAQ,aAAak5E,EAAQ,EACnC,CAACl5E,GACH,OAGA0mD,GAAY,WACdg1B,EAAa,eAAe,EAEzBnK,EAAa,WAChBtkF,EAAK,MAAM,EAEb,MAAM+kF,EAAeplC,EAAO,QAAQ,OAAO,eAAe5sC,CAAO,EACjE,KAAK,yBAAyBgyE,CAAY,CAC5C,CAIA,oBAAoBhyE,EAAS,CAC3B,MAAM4sC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfwvC,EAASxvC,EAAO,QAAQ,OACxB2D,EAASoM,EAAM,OACf+9B,EAAc0B,EAAO,uBAAuB,KAAK,OAAO,QAAQ,KAAK,iBAAiBp8E,EAAS,CAAC,CAAC,EACjGgyE,EAAekN,GAAsB9C,EAAO,eAAe1B,CAAW,EAAG/9B,EAAM,MAAM,EAC3F,OAAKq1B,GAGCr1B,EAAA,OAAQjJ,GAAW,CACvB,MAAMyrC,EAAiB5uC,EAAO,QAAQyhC,CAAY,EAA0E,KAAtEoN,GAAkB1rC,EAAO,oBAAoBs+B,CAAY,EAAGzhC,CAAM,EAClHz1D,EAAQ44D,EAAO,iBAAiBs+B,EAAc,CAAC,EAC/CjhF,EAAMouF,EAAgBzrC,EAAO,iBAAiByrC,EAAe,CAAC,EAAIzrC,EAAO,iBAAiBs+B,EAAc,KAAK,EACnHt+B,EAAO,aAAaA,EAAO,YAAY54D,EAAOiW,CAAG,CAAC,EACnD,EACM,IARE,EASX,CAUA,sCAAsCwiF,EAAWmI,EAAc,CAC7D,MAAMhnD,EAAUgnD,EAAa,QACvB/+B,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACf64B,EAAiB74B,EAAM,SAAS,UAChC0iC,EAAgB7J,EAAe,qBAC/B7tB,EAAY23B,GAAkC5qD,EAAS,KAAK,OAAO,OAAO,wBAAwB,EAClGonD,EAAYn0B,GAAa,QAAUA,GAAa,QAChD43B,EAAuB53B,GAAa,MAAQA,GAAa,OAC/D,GAAI03B,GAAiB9uC,EAAO,SAAS8uC,CAAa,EAAG,CACnD,MAAMziF,EAAWk/E,EAAYtG,EAAe,gBAAgB,EAAIA,EAAe,mBACzEgK,EAAWjvC,EAAO,yBAAyB3zC,EAAUk/E,EAAY,UAAY,UAAU,EACzF0D,IACI7iC,EAAA,OAAQjJ,GAAW,CACvBA,EAAO,aAAa8rC,CAAQ,EAC7B,EACD9D,EAAa,eAAe,EAC5BnI,EAAU,KAAK,GAEjB,MACF,CACA,GAAI,CAACiC,EAAe,aAAe,CAACkG,EAAa,SAAU,CACnD,MAAA+D,EAAgBjK,EAAe,mBAC/BkK,EAAelK,EAAe,kBAC9BmK,EAAoBF,EAAc,UAClCG,EAAmBF,EAAa,YAClCC,GAAqBpvC,EAAO,SAASovC,CAAiB,GAAKC,GAAoBrvC,EAAO,SAASqvC,CAAgB,KAC3GjjC,EAAA,OAAQjJ,GAAW,CAChBA,EAAA,aAAaooC,EAAY4D,EAAeD,CAAa,EAC7D,EACD/D,EAAa,eAAe,EAC5BnI,EAAU,KAAK,GAEjB,MACF,CACI,IAACiC,EAAe,YAClB,OAEI,MAAAqK,EAA+B,KAAK,iCAAiC/D,CAAS,EACpF,GAAI+D,GAAgCtvC,EAAO,SAASsvC,CAA4B,EAAG,CACjF,GAAItvC,EAAO,SAASsvC,CAA4B,GAAKN,EACnD,OAEF,KAAK,yBAAyBM,CAA4B,EAC1DnE,EAAa,eAAe,EAC5BnI,EAAU,KAAK,CACjB,CACF,CAQA,+BAA+BA,EAAWmI,EAAc,CAChD,MAAA/+B,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACf0iC,EAAgB1iC,EAAM,SAAS,UAAU,mBAAmB,EAC9D0iC,GAAiB9uC,EAAO,SAAS8uC,CAAa,IAChD3D,EAAa,eAAe,EAC5BnI,EAAU,KAAK,EAEnB,CAOA,cAAcuI,EAAW,CAEvB,MAAMtG,EADgB,KAAK,OAAO,MAAM,SACH,UAIjC,GAHA,CAAC,KAAK,OAAO,MAAM,UAAUA,CAAc,GAG3C,CAACA,EAAe,YAClB,OAEI,MAAA6J,EAAgB,KAAK,iCAAiCvD,CAAS,EACrE,GAAIuD,EACF,YAAK,OAAO,MAAM,OAAQ3rC,GAAW,CAC/B,IAAAosC,EAAetK,EAAe,OAAO,OACzC,KAAOsK,EAAa,SAAS,CAC3B,MAAMC,EAAeD,EACrBA,EAAeC,EAAa,OAC5BrsC,EAAO,OAAOqsC,CAAY,CAC5B,CACA,KAAK,yBAAyBV,CAAa,EAC5C,EACM,EAEX,CAMA,yBAAyBr/E,EAAS,CAChC,KAAK,OAAO,MAAM,OAAQ0zC,GAAW,CACnCA,EAAO,aAAaA,EAAO,cAAc1zC,CAAO,CAAC,EAClD,CACH,CASA,iCAAiCzlB,EAAS,CAClC,MAAAoiE,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACf64B,EAAiB74B,EAAM,SAAS,UAChCkgC,EAAQlgC,EAAM,gBAAgB64B,CAAc,EAE9C,GADJ74B,EAAM,gBAAgBkgC,EAAO,CAAE,UAAWtiG,EAAU,UAAY,WAAY,EACxEsiG,EAAM,QAAQrH,CAAc,EACvB,YAET,MAAM6J,EAAgB9kG,EAAUsiG,EAAM,MAAM,WAAaA,EAAM,MAAM,UACrE,OAAMwC,GAAiB9uC,EAAO,SAAS8uC,CAAa,EAC3CA,EAEF,IACT,CAIA,gCAAgC3rC,EAAQ,CAC3B,UAAAssC,KAAU,KAAK,oBACjBtsC,EAAA,YAAYulC,GAA4B+G,CAAM,EAEvD,KAAK,oBAAoB,OAC3B,CACF,EACA,SAASf,GAAuBj/E,EAAS,CACvC,IAAI2J,EAAiB3J,EACrB,KAAO2J,GAAgB,CACjB,GAAAA,EAAe,GAAG,iBAAiB,GAAK,CAACA,EAAe,GAAG,aAAa,EACnE,SAEL,GAAAuvE,GAASvvE,CAAc,EAClB,SAETA,EAAiBA,EAAe,MAClC,CACO,QACT,CACA,SAASq1E,GAAQh/E,EAAShlB,EAAQ,CAChC,OAAKA,EAGE,MAAM,KAAKglB,EAAQ,cAAc,EAAE,SAAShlB,CAAM,EAFhD,EAGX,CACA,SAASkkG,GAAsBlN,EAAczhC,EAAQ,CACxC,UAAAvwC,KAAWgyE,EAAa,aAAa,CAAE,YAAa,GAAM,YAAa,EAAK,CAAC,EAAG,CACzF,GAAIzhC,EAAO,WAAWvwC,EAAS,OAAO,EAC7B,OAAAA,EAEL,GAAAuwC,EAAO,QAAQvwC,CAAO,GAAK,CAACuwC,EAAO,SAASvwC,CAAO,EACrD,KAEJ,CACO,WACT,CACA,SAASo/E,GAAkBxiF,EAAU2zC,EAAQ,CAC3C,MAAM0vC,EAAa,IAAIC,GAAW,CAAE,cAAetjF,CAAU,GAClD,UAAE,KAAA2mB,CAAK,IAAK08D,EAAY,CAC7B,GAAA1vC,EAAO,QAAQhtB,CAAI,GAAK,CAACA,EAAK,GAAG,SAAS,EACrC,YAET,GAAIgtB,EAAO,WAAWhtB,EAAM,OAAO,EAC1B,OAAAA,CAEX,CACO,WACT,CAGA,IAAI48D,GAA0B,cAAc1nB,EAAO,CACjD,aAAc,CACZ,MAAM,GAAG,SAAS,EACb,6BAA0C,GACjD,CAIA,WAAW,UAAW,CACpB,MAAO,CAACD,EAAiB,CAC3B,CAIA,WAAW,YAAa,CACf,+BACT,CAIA,MAAO,CACL,MAAM5rB,EAAS,KAAK,OACpB,GAAIA,EAAO,QAAQ,IAAI,gBAAgB,EAAG,CACxC,MAAMwzC,EAAiBxzC,EAAO,QAAQ,IAAI,gBAAgB,EAC1D,KAAK,SAASwzC,EAAgB,OAAS7kF,GAAQ,CACzC8kF,GAAiBzzC,EAAO,QAAQ,KAAK,SAAS,SAAS,GACzDrxC,EAAI,KAAK,CACX,EACC,CAAE,SAAU,OAAQ,CACzB,CACA,KAAK,SAAW,KAAK,OAAO,QAAQ,IAAI,mBAAmB,EACtD,QAAG,mBAAoB,IAAM,CAChC,KAAK,0BAA0B,EAChC,EACD,KAAK,SAASqxC,EAAO,GAAI,SAAU,IAAM,CACvC,KAAK,0BAA0B,EAChC,EACD,KAAK,SAASA,EAAO,GAAG,aAAc,mBAAoB,IAAM,CAC9D,KAAK,0BAA0B,GAC9B,CAAE,SAAU,MAAO,CACxB,CACA,SAAU,CACR,MAAM,QAAQ,EACd,UAAW0zC,KAAiB,KAAK,oBAAoB,SACnDA,EAAc,KAAK,SAEvB,CAeA,SAASC,EAAW,CAAE,UAAAC,EAAW,MAAA5kD,EAAO,kBAAA6kD,EAAmB,iBAAAtnB,EAAmB,wBAA0B,CAClG,IAACv9B,EAAM,OAAQ,CACN2sB,GAAA,0BAA2B,CAAE,UAAAg4B,CAAA,CAAW,EACnD,MACF,CACA,MAAM3zC,EAAS,KAAK,OACdljD,EAAIkjD,EAAO,EACX+e,EAAc,IAAIC,GAAYhf,EAAO,MAAM,EAEjD,GADY+e,EAAA,UAAY60B,GAAa92F,EAAE,gBAAgB,EACnD,KAAK,oBAAoB,IAAI62F,CAAS,EACxC,MAAM,IAAIz+B,EAAc,4BAA6B,KAAM,CAAE,UAAAy+B,CAAW,GAE1E,MAAMG,EAAoB,CACxB,KAAM/0B,EACN,kBAAA80B,EACA,iBAAAtnB,EACA,YAAav9B,EACb,YAAa,IAERgR,EAAA,GAAG,WAAW+e,EAAa,CAChC,aAAc,GACd,YAAa,IAAM,CACjB,MAAMg1B,EAAiBF,EAAkB7zC,EAAO,QAAQ,KAAK,SAAS,SAAS,EAC3E+zC,GACG,kBAAaD,EAAmBC,CAAc,CAEvD,EACA,UAAW,IAAM,CACf,KAAK,aAAaD,CAAiB,CACrC,EACD,EACI,yBAAoB,IAAIH,EAAWG,CAAiB,CAC3D,CAIA,2BAA4B,CAC1B,IAAIE,EAAyB,EACzBC,EAAwB,KACxBC,EAA2B,KAC/B,UAAWjsC,KAAc,KAAK,oBAAoB,SAAU,CACpD,MAAA8rC,EAAiB9rC,EAAW,kBAAkB,KAAK,OAAO,QAAQ,KAAK,SAAS,SAAS,EAC/F,GAAI,CAAC,KAAK,WAAa,CAAC8rC,EAClB,KAAK,oBAAoB9rC,CAAU,GACrC,KAAK,aAAaA,CAAU,UAErB,CAAC,KAAK,OAAO,GAAG,aAAa,UAClC,KAAK,kBAAkBA,CAAU,GACnC,KAAK,aAAaA,CAAU,MAEzB,CACC,MAAAksC,EAAsBJ,EAAe,eAAe,OACtDI,EAAsBH,IACCA,EAAAG,EACDF,EAAAF,EACGG,EAAAjsC,EAE/B,CACF,CACIisC,GACG,kBAAaA,EAA0BD,CAAqB,CAErE,CAIA,aAAaH,EAAmB,CACzB,cAAS,OAAOA,EAAkB,IAAI,EACtC,mBAAc,KAAK,SAAU,oBAAoB,CACxD,CAQA,aAAaA,EAAmBC,EAAgB,CAC1C,KAAK,kBAAkBD,CAAiB,EACdM,GAAA,KAAK,OAAQL,CAAc,EAC7C,KAAK,oBAAoBD,CAAiB,IAC/CA,EAAkB,cACrBA,EAAkB,YAAc,GAChCA,EAAkB,KAAK,eAAeA,EAAkB,YAAa,KAAK,OAAO,GAAG,gBAAgB,GAEtG,KAAK,SAAS,IAAI,CAChB,KAAMA,EAAkB,KACxB,SAAUO,GAAuB,KAAK,OAAQN,CAAc,EAC5D,iBAAkBD,EAAkB,iBACrC,EACD,KAAK,SAAS,KAAK,SAAU,qBAAsB,IAAM,CACvD,UAAW7rC,KAAc,KAAK,oBAAoB,SAC5C,QAAK,kBAAkBA,CAAU,EAAG,CAChC,MAAAqsC,EAAkBrsC,EAAW,kBAAkB,KAAK,OAAO,QAAQ,KAAK,SAAS,SAAS,EACpEmsC,GAAA,KAAK,OAAQE,CAAe,CAC1D,CACF,CACD,EAEL,CACA,kBAAkBC,EAAS,CAClB,YAAK,SAAS,cAAgBA,EAAQ,IAC/C,CACA,oBAAoBA,EAAS,CAC3B,OAAO,KAAK,SAAS,QAAQA,EAAQ,IAAI,CAC3C,CACF,EACA,SAASH,GAA4Bp0C,EAAQ+zC,EAAgB,CAC3D,MAAMvsB,EAAUxnB,EAAO,QAAQ,IAAI,mBAAmB,EAChDhwC,EAAWqkF,GAAuBr0C,EAAQ+zC,CAAc,EAC9DvsB,EAAQ,eAAex3D,CAAQ,CACjC,CACA,SAASqkF,GAAuBr0C,EAAQ+zC,EAAgB,CAChD,MAAAtqB,EAAczpB,EAAO,QAAQ,KAC7B0kB,EAAmBU,GAAyB,iBAC3C,OACL,OAAQqE,EAAY,aAAa,aAAasqB,CAAc,EAC5D,UAAW,CACTrvB,EAAiB,gBACjBA,EAAiB,oBACjBA,EAAiB,oBACjBA,EAAiB,gBACjBA,EAAiB,oBACjBA,EAAiB,oBACjBA,EAAiB,mBACnB,EAEJ,CACA,SAAS+uB,GAAiB73F,EAAW,CAC7B,MAAAkyF,EAAclyF,EAAU,qBAC9B,MAAO,CAAC,EAAEkyF,GAAexB,GAASwB,CAAW,EAC/C,CAGA,IAAI0G,GAAc,cAAcz7B,IAAkB,CAIhD,YAAYh1E,EAAS,CACb,QACD,SAAI,uBAAwB,IAAI,EAChC,SAAI,wBAAyB,IAAI,EACjC,SAAI,gBAAiB,IAAI,EACzB,SAAI,iBAAkB,IAAI,EAC1B,SAAI,0BAA2B,IAAI,EACnC,SAAI,2BAA4B,IAAI,EACzC,KAAK,SAAWA,EAChB,KAAK,sBAAwB,IAC/B,CAIA,IAAI,eAAgB,CAClB,OAAO,KAAK,cACd,CAIA,IAAI,gBAAiB,CACnB,OAAO,KAAK,eACd,CAIA,IAAI,uBAAwB,CAC1B,OAAO,KAAK,sBACd,CAIA,IAAI,aAAc,CAChB,OAAO,KAAK,YACd,CAKA,MAAM0wG,EAAiBC,EAAeC,EAAe,CAC7C,MAAAjoD,EAAa,IAAIo1B,GAAK4yB,CAAa,EACpC,0BAAuBE,GAAkBH,CAAe,EAC7D,KAAK,sBAAwBI,GAAyBH,EAAeI,GAAoB,KAAK,oBAAoB,CAAC,EACnH,KAAK,eAAiBpoD,EAAW,MACjC,KAAK,gBAAkBA,EAAW,OAC7B,kBAAeA,EAAW,MAAQA,EAAW,OAC5C,MAAAqoD,EAAaJ,EAAc,MAAM,MACnCI,GAAcA,EAAW,MAAM,gBAAgB,EAC5C,4BAAyB,WAAWA,CAAU,EAE9C,4BAAyBC,GAA6BL,EAAejoD,CAAU,CAExF,CACA,OAAOuoD,EAAS,CACd,KAAK,cAAgBA,EAAQ,MAC7B,KAAK,eAAiBA,EAAQ,OAC9B,KAAK,sBAAwBA,EAAQ,cACrC,KAAK,wBAA0BA,EAAQ,gBACvC,KAAK,yBAA2BA,EAAQ,gBAC1C,CACF,EACA,SAASD,GAA6BL,EAAeO,EAAgB,CACnE,MAAMC,EAAsBR,EAAc,cACtC,IAAAS,EAAc,WAAWD,EAAoB,cAAc,YAAY,iBAAiBA,CAAmB,EAAE,KAAK,EACtH,MAAME,EAAqB,EAC3B,IAAIC,EAAe,EACfC,EAAiBJ,EACd,WAAMC,CAAW,GAAG,CAErB,GADJG,EAAiBA,EAAe,cAC5B,EAAED,EAAeD,EACZ,SAETD,EAAc,WAAWD,EAAoB,cAAc,YAAY,iBAAiBI,CAAc,EAAE,KAAK,CAC/G,CACO,OAAAL,EAAe,MAAQE,EAAc,GAC9C,CACA,SAASP,GAAyBzhF,EAASoiF,EAAiB,CACpD,MAAAC,EAAc,IAAI3zB,GAAK1uD,CAAO,EAC9BsiF,EAAgBF,EAAgB,MAAM,GAAG,EACzC/xG,EAAM,CACV,EAAGiyG,EAAc,CAAC,GAAK,QAAUD,EAAY,MAAQA,EAAY,KACjE,EAAGC,EAAc,CAAC,GAAK,SAAWD,EAAY,OAASA,EAAY,KAEjE,OAAAhyG,EAAA,GAAK2vB,EAAQ,cAAc,YAAY,QACvC3vB,EAAA,GAAK2vB,EAAQ,cAAc,YAAY,QACpC3vB,CACT,CACA,SAASkyG,GAAsBH,EAAiB,CAC9C,MAAO,8BAA8BA,CAAe,EACtD,CACA,SAASZ,GAAkBgB,EAAW,CACpC,MAAMC,EAAmB,CAAC,WAAY,YAAa,eAAgB,aAAa,EAChF,UAAW7lF,KAAY6lF,EACrB,GAAID,EAAU,UAAU,SAASD,GAAsB3lF,CAAQ,CAAC,EACvD,OAAAA,CAGb,CACA,SAAS8kF,GAAoB9kF,EAAU,CAC/B,MAAAhM,EAAQgM,EAAS,MAAM,GAAG,EAC1B8lF,EAAe,CACnB,IAAK,SACL,OAAQ,MACR,KAAM,QACN,MAAO,QAEF,SAAGA,EAAa9xF,EAAM,CAAC,CAAC,CAAC,IAAI8xF,EAAa9xF,EAAM,CAAC,CAAC,CAAC,EAC5D,CAGA,IAAI+xF,GAAW,cAAc56E,EAAK,CAChC,aAAc,CACN,QACN,MAAMk+C,EAAO,KAAK,aAClB,KAAK,YAAY,CACf,IAAK,MACL,WAAY,CACV,MAAO,CACL,KACA,eACAA,EAAK,GAAG,gBAAkBr5E,GAAUA,EAAQ,kBAAkBA,CAAK,GAAK,EAAE,CAC5E,EACA,MAAO,CACL,QAASq5E,EAAK,GAAG,aAAc,OAAS28B,GAAY,CAACA,CAAO,CAC9D,CACF,EACA,SAAU,CAAC,CACT,KAAM38B,EAAK,GAAG,QAAQ,EACvB,EACF,CACH,CAQA,aAAat1E,EAASkyG,EAAa,CACjC,KAAK,KAAK,YAAY,EAAE,GAAGA,EAAa,gBAAiBA,EAAa,iBAAkB,CAACv0F,EAAO+mC,IAAW/mC,IAAU,MAAQ+mC,IAAW,IAAI,EAC5I,KAAK,KAAK,QAAQ,EAAE,GAAGwtD,EAAa,0BAA2BA,EAAa,2BAA4BA,EAAa,wBAAyB,CAACv0F,EAAO+mC,EAAQytD,IACxJnyG,EAAQ,OAAS,KACZ,GAAG2d,CAAK,IAAI+mC,CAAM,GAElB,GAAGytD,CAAa,GAE1B,EACI,UAAK,eAAe,EAAE,GACzBD,EACA,uBACAA,EACA,0BACAA,EACA,2BAEA,CAACjmF,EAAUtO,EAAO+mC,IAAW/mC,EAAQ,IAAM+mC,EAAS,GAAK,eAAiBz4B,CAAA,CAE9E,CAMA,UAAW,CACT,KAAK,OAAO,EACZ,KAAK,WAAa,EACpB,CACF,EAGImmF,GAAU,cAAcp9B,IAAkB,CAI5C,YAAYh1E,EAAS,CACb,QACN,KAAK,oBAAsB,KAC3B,KAAK,SAAWA,EACX,SAAI,YAAa,EAAI,EACrB,SAAI,aAAc,EAAK,EAC5B,KAAK,KAAK,WAAW,EAAE,GAAG,KAAM,YAAa,KAAM,aAAc,CAAC+gG,EAAWsR,IAAetR,GAAasR,CAAU,EACnH,KAAK,SAAS,OAAO,EACrB,KAAK,SAAS,QAAQ,EACtB,KAAK,SAAS,QAAQ,EACtB,KAAK,SAAS,YAAY,EACrB,QAAG,SAAW15F,GAAU,CACvB,CAAC,KAAK,MAAM,eAAiB,CAAC,KAAK,MAAM,wBAC3C,KAAK,SAAS,EACdA,EAAM,KAAK,EACb,EACC,CAAE,SAAU,OAAQ,CACzB,CAMA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CAIA,MAAO,CACe,KAAK,SAAS,OAAO,QAAQ,KACrC,OAAQoqD,GAAW,CACtBA,EAAA,YAAY,YAAa,KAAK,mBAAmB,EACzD,CACH,CAIA,MAAO,CACe,KAAK,SAAS,OAAO,QAAQ,KACrC,OAAQA,GAAW,CACtBA,EAAA,SAAS,YAAa,KAAK,mBAAmB,EACtD,CACH,CAIA,QAAS,CACP,MAAMtwD,EAAO,KACPg3F,EAAgB,KAAK,SAAS,YAChB,KAAK,SAAS,OAAO,QAAQ,KACrC,OAAQ1mC,GAAW,CACvB,MAAAuvC,EAAqBvvC,EAAO,gBAAgB,MAAO,CACvD,MAAO,oCACT,EAAG,SAAS4mC,EAAa,CACjB,MAAAhkB,EAAa,KAAK,aAAagkB,CAAW,EAChD,OAAAl3F,EAAK,eAAekzE,CAAU,EAC9BlzE,EAAK,cAAckzE,CAAU,EACtBA,CAAA,CACR,EACD5iB,EAAO,OAAOA,EAAO,iBAAiB0mC,EAAe,KAAK,EAAG6I,CAAkB,EACxEvvC,EAAA,SAAS,yBAA0B0mC,CAAa,EACvD,KAAK,oBAAsB6I,EACtB,KAAK,WACR,KAAK,KAAK,CACZ,CACD,EACI,QAAG,mBAAoB,IAAM,CAC5B,KAAK,WACP,KAAK,KAAK,EACV,KAAK,OAAO,GAEZ,KAAK,KAAK,CACZ,CACD,CACH,CASA,MAAM5B,EAAiB,CACrB,KAAK,OAAS,IAAID,GAAY,KAAK,QAAQ,EAC3C,KAAK,UAAU,aAAa,KAAK,SAAU,KAAK,KAAK,EACrD,KAAK,kBAAoB,KAAK,SAAS,YAAY,SAAS,OAAO,EAC9D,WAAM,MAAMC,EAAiB,KAAK,iBAAkB,KAAK,gBAAgB,CAChF,CAMA,WAAW3F,EAAc,CACjB,MAAAmG,EAAU,KAAK,gBAAgBnG,CAAY,EAC7B,KAAK,SAAS,OAAO,QAAQ,KACrC,OAAQhoC,GAAW,CACvB,MAAAtsD,EAAO,KAAK,SAAS,MAAQ,IAC7B87F,GAAY97F,IAAS,IAAMy6F,EAAQ,cAAgBA,EAAQ,OAASz6F,EAC1EssD,EAAO,SAAS,QAASwvC,EAAU,KAAK,SAAS,WAAW,EAC7D,EACK,MAAA5B,EAAgB,KAAK,iBACrB6B,EAAoB,IAAIz0B,GAAK4yB,CAAa,EAC1C8B,EAAkB,KAAK,MAAMD,EAAkB,KAAK,EACpDE,EAAmB,KAAK,MAAMF,EAAkB,MAAM,EACtDG,EAAoB,IAAI50B,GAAK4yB,CAAa,EAChDO,EAAQ,MAAQ,KAAK,MAAMyB,EAAkB,KAAK,EAClDzB,EAAQ,OAAS,KAAK,MAAMyB,EAAkB,MAAM,EACpD,KAAK,OAAOH,CAAiB,EAC7B,KAAK,MAAM,OAAO,CAChB,GAAGtB,EACH,gBAAAuB,EACA,iBAAAC,CAAA,CACD,CACH,CAMA,QAAS,CACD,MAAAj8F,EAAO,KAAK,SAAS,MAAQ,IAC7Bg6E,GAAYh6E,IAAS,IAAM,KAAK,MAAM,sBAAwB,KAAK,MAAM,eAAiBA,EAChG,KAAK,SAAS,OAAO,QAAQ,KAAK,OAAO,IAAM,CAC7C,KAAK,SAAS,EACT,cAAS,SAASg6E,CAAQ,EAChC,CACH,CAMA,QAAS,CACP,KAAK,SAAS,CAChB,CAIA,SAAU,CACR,KAAK,OAAO,CACd,CAMA,OAAOmiB,EAAgB,CACrB,MAAMC,EAAa,KAAK,mBACpB,IAACC,GAAYD,CAAU,EACzB,OAEF,MAAME,EAAgBF,EAAW,cAC3BG,EAAa,KAAK,iBAClBC,EAAiB,KAAK,oBACtBC,EAAoB,CACxBD,EAAe,SAAS,OAAO,EAC/BA,EAAe,SAAS,QAAQ,EAChCA,EAAe,SAAS,MAAM,EAC9BA,EAAe,SAAS,KAAK,GAE3B,IAAAE,EACA,GAAAJ,EAAc,WAAWC,CAAU,EAAG,CACxC,MAAMrqD,EAAaiqD,GAAkB,IAAI70B,GAAKi1B,CAAU,EACxCG,EAAA,CACdxqD,EAAW,MAAQ,KACnBA,EAAW,OAAS,KACpB,OACA,OACF,MAEgBwqD,EAAA,CACdH,EAAW,YAAc,KACzBA,EAAW,aAAe,KAC1BA,EAAW,WAAa,KACxBA,EAAW,UAAY,MAGvBI,GAAcF,EAAmBC,CAAa,IAAM,QACtD,KAAK,SAAS,OAAO,QAAQ,KAAK,OAAQpwC,GAAW,CACnDA,EAAO,SAAS,CACd,MAAOowC,EAAc,CAAC,EACtB,OAAQA,EAAc,CAAC,EACvB,KAAMA,EAAc,CAAC,EACrB,IAAKA,EAAc,CAAC,GACnBF,CAAc,EAClB,CAEL,CACA,eAAettB,EAAY,CAClB,YAAK,mBAAmB,SAASA,CAAU,CACpD,CACA,OAAO,eAAeA,EAAY,CACzB,OAAAA,EAAW,UAAU,SAAS,4BAA4B,CACnE,CAIA,UAAW,CACT,KAAK,UAAU,WACK,KAAK,SAAS,OAAO,QAAQ,KACrC,OAAQ5iB,GAAW,CAC7BA,EAAO,SAAS,QAAS,KAAK,kBAAmB,KAAK,SAAS,WAAW,EAC3E,CACH,CAMA,gBAAgBgoC,EAAc,CAC5B,MAAMp5F,EAAQ,KAAK,MACb0hG,EAAqBC,GAAmBvI,CAAY,EACpDwI,EAAa,KAAK,SAAS,WAAa,KAAK,SAAS,WAAW,IAAI,EAAI,GACzEC,EAAc,CAClB,EAAG7hG,EAAM,sBAAsB,GAAK0hG,EAAmB,EAAI1hG,EAAM,eACjE,EAAG0hG,EAAmB,EAAI1hG,EAAM,eAAiBA,EAAM,sBAAsB,GAE3E4hG,GAAc5hG,EAAM,qBAAqB,SAAS,QAAQ,IAC5D6hG,EAAY,EAAIH,EAAmB,GAAK1hG,EAAM,sBAAsB,EAAIA,EAAM,gBAE5E4hG,IACFC,EAAY,GAAK,GAEnB,IAAI71F,EAAQ,KAAK,IAAIhM,EAAM,cAAgB6hG,EAAY,CAAC,EACpD9uD,EAAS,KAAK,IAAI/yC,EAAM,eAAiB6hG,EAAY,CAAC,EAE1D,OADiB71F,EAAQhM,EAAM,YAAc+yC,EAAS,QAAU,WAChD,QACdA,EAAS/mC,EAAQhM,EAAM,YAEvBgM,EAAQ+mC,EAAS/yC,EAAM,YAElB,CACL,MAAO,KAAK,MAAMgM,CAAK,EACvB,OAAQ,KAAK,MAAM+mC,CAAM,EACzB,cAAe,KAAK,IAAI,KAAK,MAAM/yC,EAAM,sBAAwBA,EAAM,cAAgBgM,EAAQ,GAAG,EAAI,IAAK,GAAG,EAElH,CAMA,gBAAiB,CACT,MAAAo1F,EAAgB,KAAK,mBAAmB,cACvC,YAAK,SAAS,cAAcA,CAAa,CAClD,CASA,gBAAiB,CACT,MAAAA,EAAgB,KAAK,mBAAmB,cACvC,YAAK,SAAS,cAAcA,CAAa,CAClD,CAOA,IAAI,oBAAqB,CAChB,YAAK,SAAS,OAAO,QAAQ,KAAK,aAAa,aAAa,KAAK,mBAAmB,CAC7F,CAMA,eAAeptB,EAAY,CACzB,MAAMmsB,EAAmB,CAAC,WAAY,YAAa,eAAgB,aAAa,EAChF,UAAW2B,KAAmB3B,EACjBnsB,EAAA,YAAY,IAAIpU,GAAS,CAClC,IAAK,MACL,WAAY,CACV,MAAO,8BAA8BmiC,GAAgBD,CAAe,CAAC,EACvE,EACD,EAAE,QAAQ,CAEf,CAIA,cAAc9tB,EAAY,CACnB,eAAY,IAAIqsB,GACrB,KAAK,UAAU,SACJrsB,EAAA,YAAY,KAAK,UAAU,OAAO,CAC/C,CACF,EACA,SAAS+tB,GAAgBjC,EAAiB,CACxC,MAAO,8BAA8BA,CAAe,EACtD,CACA,SAAS6B,GAAmB36F,EAAO,CAC1B,OACL,EAAGA,EAAM,MACT,EAAGA,EAAM,MAEb,CACA,SAASm6F,GAAYzjF,EAAS,CAC5B,OAAOA,GAAWA,EAAQ,eAAiBA,EAAQ,cAAc,SAASA,CAAO,CACnF,CAIA,IAAIskF,GAAe,cAAc7rB,EAAO,CACtC,aAAc,CACZ,MAAM,GAAG,SAAS,EACb,mBAAgC,GACvC,CAIA,WAAW,YAAa,CACf,oBACT,CAIA,MAAO,CACC,MAAAmlB,EAAU,KAAK,OAAO,QACtBtD,EAAcztB,GAAe,OAAO,SACrC,SAAI,kBAAmB,IAAI,EAC3B,SAAI,iBAAkB,IAAI,EACvB+wB,EAAA,KAAK,YAAYvG,EAAa,EACjC,eAAY,IAAK3xB,GAAA,GACtB,KAAK,SAASk4B,EAAQ,KAAK,SAAU,YAAa,KAAK,mBAAmB,KAAK,IAAI,EAAG,CAAE,SAAU,MAAQ,GACrG,eAAU,SAAStD,EAAa,YAAa,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC/E,eAAU,SAASA,EAAa,UAAW,KAAK,iBAAiB,KAAK,IAAI,CAAC,EAChF,KAAK,gCAAkCnmB,GAAiB,IAAM,KAAK,wBAAyB,GAAG,EAC/F,KAAK,OAAO,GAAG,GAAG,SAAU,KAAK,+BAA+B,EAChE,KAAK,OAAO,MAAM,SAAS,GAAG,SAAU,IAAM,CAC5C,SAAW,CAACumB,EAAa6J,CAAO,IAAK,KAAK,UACnC7J,EAAY,eACV,eAAU,OAAOA,CAAW,EACjC6J,EAAQ,QAAQ,EAEpB,EACC,CAAE,SAAU,SAAU,EACzB,KAAK,UAAU,SAAS13B,GAAe,OAAQ,SAAU,KAAK,+BAA+B,EAC7F,MAAM6oB,EAAgB,KAAK,OAAO,QAAQ,KAAK,SAAS,UAC1CA,EAAA,GAAG,SAAU,IAAM,CACzB,MAAAuE,EAAkBvE,EAAc,qBAChC6O,EAAU,KAAK,wBAAwBtK,CAAe,GAAK,KAC7DsK,EACF,KAAK,OAAOA,CAAO,EAEnB,KAAK,SAAS,CAChB,CACD,CACH,CAIA,uBAAwB,CAClB,KAAK,iBAAmB,KAAK,gBAAgB,WAC/C,KAAK,gBAAgB,QAEzB,CAIA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,UAAU,gBACf,UAAWA,KAAW,KAAK,UAAU,SACnCA,EAAQ,QAAQ,EAElB,KAAK,gCAAgC,QACvC,CAIA,OAAOA,EAAS,CACd,KAAK,SAAS,EACd,KAAK,gBAAkBA,EACvB,KAAK,gBAAgB,WAAa,EACpC,CAIA,UAAW,CACL,KAAK,kBACP,KAAK,gBAAgB,WAAa,IAEpC,KAAK,gBAAkB,IACzB,CAIA,SAAS5zG,EAAS,CACV,MAAA4zG,EAAU,IAAIxB,GAAQpyG,CAAO,EAC7B43F,EAAU,KAAK,OAAO,QAExB,GADJgc,EAAQ,OAAO,EACXhc,EAAQ,IAAI,yBAAyB,EAAG,CACpC,MAAAic,EAA0Bjc,EAAQ,IAAI,yBAAyB,EAC7Dgc,EAAA,GAAG,QAAS,IAAM,CACxBC,EAAwB,cAAc,QAAQ,GAC7C,CAAE,SAAU,SAAU,EACjBD,EAAA,GAAG,SAAU,IAAM,CACzBC,EAAwB,mBAAmB,QAAQ,GAClD,CAAE,SAAU,UAAW,EAClBD,EAAA,GAAG,SAAU,IAAM,CACzBC,EAAwB,mBAAmB,QAAQ,GAClD,CAAE,SAAU,UAAW,CAC5B,CACA,KAAK,UAAU,IAAI7zG,EAAQ,YAAa4zG,CAAO,EAEzC,MAAAtK,EADgB,KAAK,OAAO,QAAQ,KAAK,SAAS,UAClB,qBACtC,OAAI,KAAK,wBAAwBA,CAAe,GAAKsK,GACnD,KAAK,OAAOA,CAAO,EAEdA,CACT,CAMA,wBAAwB7J,EAAa,CAC5B,YAAK,UAAU,IAAIA,CAAW,CACvC,CAIA,oBAAoB2G,EAAiB,CACnC,UAAWkD,KAAW,KAAK,UAAU,SAC/B,GAAAA,EAAQ,eAAelD,CAAe,EACjC,OAAAkD,CAGb,CAIA,mBAAmBj7F,EAAOoyF,EAAc,CACtC,MAAM+I,EAAe/I,EAAa,UAC7BqH,GAAQ,eAAe0B,CAAY,IAGxC,KAAK,eAAiB,KAAK,oBAAoBA,CAAY,GAAK,KAC5D,KAAK,iBACF,oBAAe,MAAMA,CAAY,EACtCn7F,EAAM,KAAK,EACXoyF,EAAa,eAAe,GAEhC,CAIA,mBAAmBpyF,EAAOoyF,EAAc,CAClC,KAAK,gBACF,oBAAe,WAAWA,CAAY,CAE/C,CACA,kBAAmB,CACb,KAAK,iBACP,KAAK,eAAe,SACpB,KAAK,eAAiB,KAE1B,CACF,EAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECnoEA,IAAIgJ,GAAoB,cAAcC,EAAiB,CACrD,YAAY13F,EAAM,CAChB,MAAMA,CAAI,EACV,KAAK,aAAe,CAClB,QACA,OACA,MACA,OACA,WACA,YACA,UACA,YACA,aAEF,MAAMskF,EAAe,KAAK,SACrB,cAASA,EAAc,QAASqT,EAAY,gBAAgB,EAAG,CAAE,SAAU,MAAO,EAClF,cAASrT,EAAc,OAAQqT,EAAY,gBAAgB,EAAG,CAAE,SAAU,MAAO,EACjF,cAASrT,EAAc,WAAYqT,EAAY,UAAU,EAAG,CAAE,SAAU,MAAO,EACpF,SAASA,EAAY5yG,EAAM,CAClB,OAACupB,EAAKjW,IAAS,CACpBA,EAAK,eAAe,EACpB,MAAM6tF,EAAe7tF,EAAK,UAAY,CAACA,EAAK,SAAS,EAAI,KACnDiuF,EAAY,IAAI+B,GAAU/D,EAAcv/F,CAAI,EAClDu/F,EAAa,KAAKgC,EAAW,CAC3B,aAAcjuF,EAAK,aACnB,OAAQiW,EAAI,KACZ,aAAA43E,EACA,OAAQ7tF,EAAK,OACb,SAAUA,EAAK,SAChB,EACGiuF,EAAU,KAAK,QACjBjuF,EAAK,gBAAgB,CACvB,CAEJ,CACF,CACA,WAAW4rF,EAAU,CACnB,MAAM2T,EAAqB,kBAAmB3T,EAAWA,EAAS,cAAgBA,EAAS,aACrF4T,EAAa5T,EAAS,MAAQ,QAAUA,EAAS,MAAQ,QACzD6T,EAAU,CACd,aAAc,IAAIC,GAAaH,EAAoB,CAAE,WAAAC,EAAY,IAE/D5T,EAAS,MAAQ,QAAUA,EAAS,MAAQ,cAC9C6T,EAAQ,UAAYE,GAAiB,KAAK,KAAM/T,CAAQ,GAE1D,KAAK,KAAKA,EAAS,KAAMA,EAAU6T,CAAO,CAC5C,CACF,EACA,SAASE,GAAiBh4F,EAAMikF,EAAU,CAClC,MAAAgU,EAAShU,EAAS,OAAO,cACzBpkG,EAAIokG,EAAS,QACblpE,EAAIkpE,EAAS,QACf,IAAAyN,EAQJ,OAPIuG,EAAO,qBAAuBA,EAAO,oBAAoBp4G,EAAGk7B,CAAC,EACpD22E,EAAAuG,EAAO,oBAAoBp4G,EAAGk7B,CAAC,EACjCkpE,EAAS,cAClByN,EAAWuG,EAAO,cAClBvG,EAAS,SAASzN,EAAS,YAAaA,EAAS,WAAW,EAC5DyN,EAAS,SAAS,EAAI,GAEpBA,EACK1xF,EAAK,aAAa,eAAe0xF,CAAQ,EAE3C,IACT,CAGA,SAASwG,GAAgB3pG,EAAM,CAC7B,OAAAA,EAAOA,EAAK,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,cAAe,SAAS,EAAE,QAAQ,SAAU,MAAM,EAAE,QAAQ,MAAO,0BAA0B,EAAE,QAAQ,MAAO,QAAQ,EAAE,QAAQ,MAAO,QAAQ,EAAE,QAAQ,QAAS,SAAS,GAC9PA,EAAK,SAAS,SAAS,GAAKA,EAAK,SAAS,MAAM,KAClDA,EAAO,MAAMA,CAAI,QAEZA,CACT,CAGA,SAAS4pG,GAAuB9/F,EAAM,CACpC,OAAOA,EAAK,QAAQ,0DAA2D,CAAC+/F,EAAWC,IACrFA,EAAO,QAAU,EACZ,IAEFA,CACR,EAAE,QAAQ,mBAAoB,EAAE,CACnC,CAGA,IAAIC,GAAuB,CAAC,aAAc,IAAI,EAC1CC,GAAe,CAAC,KAAM,IAAI,EAC9B,SAASC,GAAgBC,EAAU,CACjC,GAAIA,EAAS,GAAG,OAAO,GAAKA,EAAS,GAAG,YAAY,EAClD,OAAOA,EAAS,KAEd,GAAAA,EAAS,GAAG,UAAW,KAAK,GAAKA,EAAS,aAAa,KAAK,EACvD,OAAAA,EAAS,aAAa,KAAK,EAEpC,GAAIA,EAAS,GAAG,UAAW,IAAI,EACtB;AAAA,EAET,IAAIlqG,EAAO,GACP8d,EAAO,KACA,UAAA6qB,KAASuhE,EAAS,cAC3BlqG,GAAQmqG,GAAexhE,EAAO7qB,CAAI,EAAImsF,GAAgBthE,CAAK,EACpD7qB,EAAA6qB,EAEF,OAAA3oC,CACT,CACA,SAASmqG,GAAe3lF,EAAS0nD,EAAU,CACzC,OAAKA,EAGD1nD,EAAQ,GAAG,UAAW,IAAI,GAAK,CAACA,EAAQ,SAAWA,EAAQ,SAAS,CAAC,EAAE,GAAG,kBAAkB,GAG5FwlF,GAAa,SAASxlF,EAAQ,IAAI,GAAKwlF,GAAa,SAAS99B,EAAS,IAAI,EACrE;AAAA;AAAA,EAEL,CAAC1nD,EAAQ,GAAG,kBAAkB,GAAK,CAAC0nD,EAAS,GAAG,kBAAkB,EAC7D,GAEL69B,GAAqB,SAASvlF,EAAQ,IAAI,GAAKulF,GAAqB,SAAS79B,EAAS,IAAI,EACrF;AAAA,EAEF;AAAA;AAAA,EAdE,EAeX,CAGA,IAAIk+B,GAAoB,cAAcntB,EAAO,CAI3C,WAAW,YAAa,CACf,yBACT,CAIA,MAAO,CACU,KAAK,OACA,QAAQ,KACvB,YAAYisB,EAAiB,EAClC,KAAK,gBAAgB,EACrB,KAAK,cAAc,CACrB,CAMA,+BAA+BmB,EAAcr9F,EAAWtG,EAAQ,CAC9D,MAAMqJ,EAAU,KAAK,OAAO,MAAM,mBAAmB/C,CAAS,EAC9D,KAAK,KAAK,uBAAwB,CAChC,aAAAq9F,EACA,QAAAt6F,EACA,OAAArJ,CAAA,CACD,CACH,CAIA,iBAAkB,CAChB,MAAM0qD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SAC1B,KAAK,SAASskF,EAAc,iBAAkB,CAACh2E,EAAKjW,IAAS,CACvDA,EAAK,QAAU,SAAW,CAACsnD,EAAO,MAAM,UAAUA,EAAO,MAAM,SAAS,SAAS,GACnFrxC,EAAI,KAAK,CACX,EACC,CAAE,SAAU,UAAW,EAC1B,KAAK,SAASg2E,EAAc,iBAAkB,CAACh2E,EAAKjW,IAAS,CAC3D,MAAMugG,EAAevgG,EAAK,aACtB,IAAAiG,EACJ,GAAIjG,EAAK,QACPiG,EAAUjG,EAAK,YACV,CACL,IAAIwgG,EAAc,GACdD,EAAa,QAAQ,WAAW,EAClCC,EAAcV,GAAuBS,EAAa,QAAQ,WAAW,CAAC,EAC7DA,EAAa,QAAQ,YAAY,IAC1CC,EAAcX,GAAgBU,EAAa,QAAQ,YAAY,CAAC,GAElEt6F,EAAU,KAAK,OAAO,KAAK,cAAc,OAAOu6F,CAAW,CAC7D,CACA,MAAMvS,EAAY,IAAI+B,GAAU,KAAM,qBAAqB,EAC3D,KAAK,KAAK/B,EAAW,CACnB,QAAAhoF,EACA,aAAAs6F,EACA,aAAcvgG,EAAK,aACnB,OAAQA,EAAK,OACd,EACGiuF,EAAU,KAAK,QACjBh4E,EAAI,KAAK,EAEXtO,EAAK,qBAAqB,GACzB,CAAE,SAAU,MAAO,EACtB,KAAK,SAAS,KAAM,sBAAuB,CAACsO,EAAKjW,IAAS,CACpD,GAAAA,EAAK,QAAQ,QACf,OAGF,MAAMygG,EADiB,KAAK,OAAO,KACE,QAAQzgG,EAAK,QAAS,kBAAkB,EACzEygG,EAAc,YAAc,IAGhCxqF,EAAI,KAAK,EACTohD,EAAM,OAAO,IAAM,CACjB,KAAK,KAAK,mBAAoB,CAC5B,QAASopC,EACT,OAAQzgG,EAAK,OACb,aAAcA,EAAK,aACnB,aAAcA,EAAK,aACpB,EACF,IACA,CAAE,SAAU,MAAO,EACtB,KAAK,SAAS,KAAM,mBAAoB,CAACiW,EAAKjW,IAAS,CACrDA,EAAK,YAAcq3D,EAAM,cAAcr3D,EAAK,OAAO,GAClD,CAAE,SAAU,MAAO,CACxB,CAIA,eAAgB,CACd,MAAMsnD,EAAS,KAAK,OACd2nC,EAAgB3nC,EAAO,MAAM,SAE7B2kC,EADO3kC,EAAO,QAAQ,KACF,SACpBo5C,EAAY,CAACzqF,EAAKjW,IAAS,CAC/B,MAAMugG,EAAevgG,EAAK,aAC1BA,EAAK,eAAe,EACpB,KAAK,+BAA+BugG,EAActR,EAAc,UAAWh5E,EAAI,IAAI,GAErF,KAAK,SAASg2E,EAAc,OAAQyU,EAAW,CAAE,SAAU,MAAO,EAClE,KAAK,SAASzU,EAAc,MAAO,CAACh2E,EAAKjW,IAAS,CAC3CsnD,EAAO,MAAM,UAAUA,EAAO,MAAM,SAAS,SAAS,EAGzDo5C,EAAUzqF,EAAKjW,CAAI,EAFnBA,EAAK,eAAe,CAGtB,EACC,CAAE,SAAU,MAAO,EACtB,KAAK,SAAS,KAAM,uBAAwB,CAACiW,EAAKjW,IAAS,CACzD,MAAMiG,EAAUqhD,EAAO,KAAK,OAAOtnD,EAAK,OAAO,EAC/CisF,EAAa,KAAK,kBAAmB,CACnC,aAAcjsF,EAAK,aACnB,QAAAiG,EACA,OAAQjG,EAAK,OACd,GACA,CAAE,SAAU,MAAO,EACtB,KAAK,SAASisF,EAAc,kBAAmB,CAACh2E,EAAKjW,IAAS,CACvDA,EAAK,QAAQ,UACXA,EAAA,aAAa,QAAQ,YAAa,KAAK,OAAO,KAAK,cAAc,OAAOA,EAAK,OAAO,CAAC,EAC1FA,EAAK,aAAa,QAAQ,aAAcmgG,GAAgBngG,EAAK,OAAO,CAAC,GAEnEA,EAAK,QAAU,OACVsnD,EAAA,MAAM,cAAc2nC,EAAc,SAAS,CACpD,EACC,CAAE,SAAU,MAAO,CACxB,CACF,EAGI/kB,GAAOC,GAAO,IAAI,EAClBw2B,GAAW,cAAcl+E,EAAK,CAIhC,aAAc,CACN,QACN,MAAMk+C,EAAO,KAAK,aAClB,KAAK,IAAI,CACP,UAAW,GACX,KAAM,KACN,IAAK,KACL,MAAO,KACR,EACD,KAAK,YAAY,CACf,IAAK,MACL,WAAY,CACV,MAAO,CACL,KACA,gCACAA,EAAK,GAAG,YAAa,YAAcr5E,GAAU,CAACA,CAAK,CACrD,EACA,MAAO,CACL,KAAMq5E,EAAK,GAAG,OAAStkD,GAAS6tD,GAAK7tD,CAAI,CAAC,EAC1C,IAAKskD,EAAK,GAAG,MAAQ9oD,GAAQqyD,GAAKryD,CAAG,CAAC,EACtC,MAAO8oD,EAAK,GAAG,QAAU33D,GAAUkhE,GAAKlhE,CAAK,CAAC,CAChD,CACF,EACD,CACH,CACF,EAGI43F,GAAiB,cAAcztB,EAAO,CACxC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,wBAA0BnoD,GAAM,IAAM,KAAK,mBAAoB,EAAE,EACjE,gCAA6B6jD,GAAkB0f,GAAgB,KAAK,kBAAkBA,CAAW,EAAG,EAAE,EACtG,+BAA4B1f,GAAiB,IAAM,CAClD,KAAK,OAAO,MAAM,QAAQ,IAAI,aAAa,GACxC,YAAO,QAAQ,gBAAgB,aAAa,GAElD,CAAC,EACC,yBAAsB,IAAI8xB,GAC1B,iBAAc,IAAKvgC,GAAA,GACnB,sBAAmC,GAC1C,CAIA,WAAW,YAAa,CACf,sBACT,CAIA,MAAO,CACL,KAAK,iBAAiB,CACxB,CAIA,SAAU,CACR,KAAK,YAAY,gBACjB,SAAW,CAAE,eAAAygC,CAAe,IAAK,KAAK,aAAa,SACjDA,EAAe,QAAQ,EAEzB,YAAK,2BAA2B,SAChC,KAAK,wBAAwB,SAC7B,KAAK,0BAA0B,SACxB,MAAM,SACf,CAMA,iBAAiBC,EAAmBC,EAAkBC,EAASC,EAASC,EAAWC,EAAc,CAC/F,KAAK,wBAAwB,SACvB,MAAA5S,EAAc6S,GAAoB,KAAK,OAAQN,EAAmBC,EAAkBC,EAASC,EAASC,EAAWC,CAAY,EACnI,GAAK5S,EAGL,IAAI4S,GAAgBA,EAAa,cAAc5S,CAAW,EACxD,OAAO,KAAK,mBAEd,KAAK,2BAA2BA,CAAW,EAC7C,CAMA,kBAAkBuS,EAAmBC,EAAkBC,EAASC,EAASC,EAAWC,EAAc,CAC1F,MAAA5S,EAAc6S,GAAoB,KAAK,OAAQN,EAAmBC,EAAkBC,EAASC,EAASC,EAAWC,CAAY,EACnI,YAAK,iBAAiB,EACf5S,CACT,CAMA,kBAAmB,CACX,MAAAl3B,EAAQ,KAAK,OAAO,MAC1B,KAAK,wBAAwB,SAC7B,KAAK,2BAA2B,SAChC,KAAK,oBAAoB,UAAY,GACjCA,EAAM,QAAQ,IAAI,aAAa,GAC3BA,EAAA,OAAQjJ,GAAW,CACvBA,EAAO,aAAa,aAAa,EAClC,CAEL,CAIA,kBAAmB,CACjB,MAAM9G,EAAS,KAAK,OACpBA,EAAO,GAAG,KAAK,KAAK,IAAI,KAAK,mBAAmB,EAChDA,EAAO,WAAW,IAAI,iBAAiB,EAAE,kBAAkB,CACzD,MAAO,cACP,KAAM,CACJ,QAAS,CAAC,gCAAgC,CAC5C,EACD,EACDA,EAAO,WAAW,IAAI,iBAAiB,EAAE,gBAAgB,CACvD,MAAO,cACP,KAAM,CAACtnD,EAAM,CAAE,OAAAouD,KAAa,CACtB,GAAA9G,EAAO,MAAM,OAAO,WAAWtnD,EAAK,YAAY,MAAO,OAAO,EAChE,YAAK,oBAAoB,UAAY,GAC9B,KAAK,0BAA0BouD,CAAM,EAExCpuD,EAAK,YAAY,YACd,2BAAsBA,EAAK,WAAW,EAE3C,KAAK,oBAAoB,UAAY,EAG3C,EACD,CACH,CAMA,kBAAkBuuF,EAAa,CAC7B,MAAMjnC,EAAS,KAAK,OACd+5C,EAAU/5C,EAAO,MAAM,QACtBA,EAAA,MAAM,OAAQ8G,GAAW,CAC1BizC,EAAQ,IAAI,aAAa,EACtBA,EAAQ,IAAI,aAAa,EAAE,WAAW,QAAQ9S,CAAW,GAC5DngC,EAAO,aAAa,cAAe,CAAE,MAAOmgC,CAAa,GAG3DngC,EAAO,UAAU,cAAe,CAC9B,MAAOmgC,EACP,eAAgB,GAChB,YAAa,GACd,CACH,CACD,CACH,CAIA,0BAA0BngC,EAAQ,CACzB,OAAAA,EAAO,gBAAgB,OAAQ,CAAE,MAAO,sCAAuC,EAAG,SAAS4mC,EAAa,CACvG,MAAAhkB,EAAa,KAAK,aAAagkB,CAAW,EAChD,OAAAhkB,EAAW,OAAO,IAAKgkB,EAAY,cAAc,MAAM,EAAG,GAAG,EACtDhkB,CAAA,CACR,CACH,CAIA,sBAAsBngC,EAAO,CACrB,MAAAynD,EAAU,KAAK,OAAO,QACtBlG,EAAavhD,EAAM,MAAM,WACzB4hD,EAAY5hD,EAAM,MAAM,UACxBywD,EAAazwD,EAAM,MAAM,OACzB0wD,EAAoBnP,EAAakG,EAAQ,OAAO,cAAclG,CAAU,EAAI,KAC5EoP,EAAmBD,EAAoBjJ,EAAQ,KAAK,aAAa,aAAaiJ,CAAiB,EAAI,KACnGE,EAAmBhP,EAAY6F,EAAQ,OAAO,cAAc7F,CAAS,EAAI,KACzEiP,EAAkBD,EAAmBnJ,EAAQ,KAAK,aAAa,aAAamJ,CAAgB,EAAI,KAChGE,EAAoBrJ,EAAQ,OAAO,cAAcgJ,CAAU,EACjE,GAAI,CAACK,EACH,OAEF,MAAMC,EAAmBtJ,EAAQ,KAAK,aAAa,aAAaqJ,CAAiB,EAC3EE,EAAoB,KAAK,mBAAmBF,CAAiB,EAC7D,CAAE,QAAAG,EAAS,QAAAC,GAAYx6B,GAAe,OACtCy6B,EAAaR,EAAmB,IAAIp4B,GAAKo4B,CAAgB,EAAI,KAC7DS,EAAYP,EAAkB,IAAIt4B,GAAKs4B,CAAe,EAAI,KAC1DQ,EAAa,IAAI94B,GAAKw4B,CAAgB,EAAE,4BAA4B,EACpEO,EAAQH,EAAaA,EAAW,OAASE,EAAW,IACpDE,EAAQH,EAAYA,EAAU,IAAMC,EAAW,OAC/CG,EAAc96B,GAAe,OAAO,iBAAiBq6B,CAAgB,EACrE/pF,EAAMsqF,GAASC,GAASD,EAAQC,GAAS,EAAIA,EACnD,GAAIP,EAAkB,IAAMhqF,GAAOA,EAAMgqF,EAAkB,OAAQ,CACjE,MAAMxlF,EAAO6lF,EAAW,KAAO,WAAWG,EAAY,WAAW,EAC3D/lF,EAAQ4lF,EAAW,MAAQ,WAAWG,EAAY,YAAY,EAC9DC,EAAc,KAAK,IAAIjmF,EAAOylF,EAASD,EAAkB,IAAI,EAC7DU,EAAe,KAAK,IAAIjmF,EAAQwlF,EAASD,EAAkB,KAAK,EACtE,KAAK,oBAAoB,IAAI,CAC3B,UAAW,GACX,KAAMS,EACN,IAAKzqF,EAAMkqF,EACX,MAAOQ,EAAeD,CAAA,CACvB,OAED,KAAK,oBAAoB,UAAY,EAEzC,CAIA,mBAAmBlN,EAAa,CACxB,MAAAnkB,EAAWmkB,EAAY,KAAK,SAC9B,IAAAoN,EACJ,GAAI,KAAK,aAAa,IAAIvxB,CAAQ,EAChCuxB,EAAgB,KAAK,aAAa,IAAIvxB,CAAQ,EAAE,eAC3C,CACL,MAAMD,EAAa,KAAK,OAAO,QAAQ,KAAK,aAAa,aAAaokB,CAAW,EACjFoN,EAAgBC,GAAsBzxB,CAAU,EAC3C,iBAAY,SAASwxB,EAAe,SAAU,KAAK,0BAA2B,CAAE,WAAY,GAAM,EACvG,MAAM3B,EAAiB,IAAIr3B,GAAuBg5B,EAAe,KAAK,yBAAyB,EAC1F,kBAAa,IAAIvxB,EAAU,CAC9B,WAAYuxB,EACZ,eAAA3B,CAAA,CACD,CACH,CACA,OAAO,IAAIz3B,GAAKo5B,CAAa,EAAE,4BAA4B,CAC7D,CACF,EACA,SAASpB,GAAoB95C,EAAQw5C,EAAmBC,EAAkBC,EAASC,EAASC,EAAWC,EAAc,CACnH,MAAM9pC,EAAQ/P,EAAO,MACfwvC,EAASxvC,EAAO,QAAQ,OAE9B,IAAIolC,EADuBgW,GAA6Bp7C,EAAQw5C,CAAiB,EAEjF,KAAOpU,GAAc,CACnB,GAAI,CAACwU,GACH,GAAI7pC,EAAM,OAAO,WAAWq1B,EAAc,OAAO,GAC/C,GAAIqU,EAAkB,CACd,MAAA4B,EAAqB5B,EAAiB,CAAC,EAAE,MACzC6B,EAAsB9L,EAAO,gBAAgB6L,CAAkB,EAErE,GAD0B,CAACxB,GAAgB,MAAM,KAAKA,EAAa,UAAU,EAAE,MAAOljE,GAASo5B,EAAM,OAAO,WAAWurC,EAAqB3kE,CAAI,CAAC,EAC1H,CACrB,GAAIo5B,EAAM,OAAO,WAAWurC,EAAqB,OAAO,EAC/C,OAAAvrC,EAAM,YAAYurC,CAAmB,KACnCD,EACF,OAAAE,GAA8Bv7C,EAAQo7C,GAA6Bp7C,EAAQq7C,EAAmB,MAAM,EAAG3B,EAASC,CAAO,CAElI,CACF,UACS5pC,EAAM,OAAO,SAASq1B,CAAY,EAC3C,OAAOmW,GAA8Bv7C,EAAQolC,EAAcsU,EAASC,CAAO,EAG/E,GAAI5pC,EAAM,OAAO,QAAQq1B,CAAY,EACnC,OAAOmW,GAA8Bv7C,EAAQolC,EAAcsU,EAASC,CAAO,KAClE5pC,EAAM,OAAO,WAAWq1B,EAAc,QAAQ,EAAG,CAC1D,MAAMoW,EAAa,MAAM,KAAKpW,EAAa,YAAY,CAAC,EAAE,OAAQviG,GAASA,EAAK,GAAG,SAAS,GAAK,CAAC44G,GAAoBz7C,EAAQn9D,CAAI,CAAC,EACnI,IAAI64G,EAAa,EACbC,EAAWH,EAAW,OAC1B,GAAIG,GAAY,EACd,OAAO5rC,EAAM,YAAYA,EAAM,iBAAiBq1B,EAAc,KAAK,CAAC,EAE/D,KAAAsW,EAAaC,EAAW,GAAG,CAChC,MAAMC,EAAc,KAAK,OAAOF,EAAaC,GAAY,CAAC,EAC7CE,GAAgB77C,EAAQw7C,EAAWI,CAAW,EAAGlC,EAASC,CAAO,GAClE,SACCgC,EAAAC,EAEEF,EAAAE,CAEjB,CACA,OAAOL,GAA8Bv7C,EAAQw7C,EAAWE,CAAU,EAAGhC,EAASC,CAAO,CACvF,CACAvU,EAAeA,EAAa,MAC9B,CACO,WACT,CACA,SAASqW,GAAoBz7C,EAAQolC,EAAc,CAC3C,MAAAoK,EAASxvC,EAAO,QAAQ,OACxBkuC,EAAeluC,EAAO,QAAQ,KAAK,aACnC8tC,EAAc0B,EAAO,cAAcpK,CAAY,EACrD,GAAI,CAAC0I,EACI,SAEH,MAAApkB,EAAawkB,EAAa,aAAaJ,CAAW,EACxD,OAAO7tB,GAAe,OAAO,iBAAiByJ,CAAU,EAAE,OAAS,MACrE,CACA,SAAS6xB,GAA8Bv7C,EAAQolC,EAAcsU,EAASC,EAAS,CAC7E,MAAM5pC,EAAQ/P,EAAO,MACd,OAAA+P,EAAM,YAAYA,EAAM,iBAAiBq1B,EAAcyW,GAAgB77C,EAAQolC,EAAcsU,EAASC,CAAO,CAAC,CAAC,CACxH,CACA,SAASkC,GAAgB77C,EAAQolC,EAAcsU,EAASC,EAAS,CACzD,MAAAnK,EAASxvC,EAAO,QAAQ,OACxBkuC,EAAeluC,EAAO,QAAQ,KAAK,aACnC8tC,EAAc0B,EAAO,cAAcpK,CAAY,EAC/C1b,EAAawkB,EAAa,aAAaJ,CAAW,EAClD59E,EAAO,IAAI4xD,GAAK4H,CAAU,EAChC,OAAI1pB,EAAO,MAAM,OAAO,SAASolC,CAAY,EACpCsU,GAAWxpF,EAAK,KAAOA,EAAK,OAAS,EAAI,SAAW,QAEpDypF,GAAWzpF,EAAK,IAAMA,EAAK,QAAU,EAAI,SAAW,OAE/D,CACA,SAASkrF,GAA6Bp7C,EAAQ5sC,EAAS,CAC/C,MAAAo8E,EAASxvC,EAAO,QAAQ,OACxB3/C,EAAO2/C,EAAO,QAAQ,KACtB87C,EAAqBtM,EAAO,eAAep8E,CAAO,EACxD,GAAI0oF,EACK,OAAAA,EAEH,MAAAC,EAAe17F,EAAK,qBAAqB+S,CAAO,EAChD06E,EAAc0B,EAAO,uBAAuBuM,CAAY,EACvD,OAAAvM,EAAO,eAAe1B,CAAW,CAC1C,CACA,SAASqN,GAAsBa,EAAS,CACtC,IAAItyB,EAAasyB,EACd,GACDtyB,EAAaA,EAAW,cACxB,MAAMuyB,EAAWh8B,GAAe,OAAO,iBAAiByJ,CAAU,EAAE,UAChE,GAAAuyB,GAAY,QAAUA,GAAY,SACpC,KACF,OACOvyB,EAAW,SAAW,QACxB,OAAAA,CACT,CAGA,IAAIwyB,GAAuB,cAAcrwB,EAAO,CAC9C,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,iBAAmB,GACnB,iBAAc,IAAK/S,GAAA,EAC1B,CAIA,WAAW,YAAa,CACf,4BACT,CAIA,MAAO,CACL,MAAM9Y,EAAS,KAAK,OAYpB,GAXA,KAAK,SAASA,EAAQ,oBAAqB,CAACrxC,EAAKhuB,EAAMw7G,IAAe,CAChEA,GACF,KAAK,cAAc,cAAc,EACjC,KAAK,iBAAmB,IAExB,KAAK,mBAAmB,cAAc,CACxC,CACD,EACGriC,GAAY,WACd,KAAK,cAAc,kBAAkB,EAEnC9Z,EAAO,QAAQ,IAAI,cAAc,EAAG,CAEhC,MAAA5sC,EADe4sC,EAAO,QAAQ,IAAI,cAAc,EACzB,WAAW,QACnC,iBAAY,SAAS5sC,EAAS,YAAa,CAACzE,EAAKjW,IAAS,KAAK,sBAAsBA,CAAI,CAAC,EAC1F,iBAAY,SAASunE,GAAe,SAAU,WAAY,CAACtxD,EAAKjW,IAAS,KAAK,qBAAqBA,CAAI,CAAC,EACxG,iBAAY,SAASunE,GAAe,SAAU,OAAQ,CAACtxD,EAAKjW,IAAS,KAAK,qBAAqBA,CAAI,CAAC,EACzG,KAAK,YAAY,SAASunE,GAAe,SAAU,UAAW,IAAM,KAAK,sBAAuB,CAAE,WAAY,EAAM,GAChH,KAAK,WACC7sD,EAAA,aAAa,YAAa,MAAM,EAE1C,KAAK,GAAG,mBAAoB,CAACzE,EAAKhuB,EAAMmkG,IAAc,CACpD1xE,EAAQ,aAAa,YAAa0xE,EAAY,OAAS,OAAO,EAC/D,CACH,CACF,CAIA,SAAU,CACR,YAAK,YAAY,gBACV,MAAM,SACf,CAIA,sBAAsBR,EAAU,CAC1B,IAAC,KAAK,UACR,OAEI,MAAAv0B,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3B1vD,EAAO,KAAK,OAAO,QAAQ,KAC3B+7F,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACjDi+F,EAAe9pC,EAAM,YAAYA,EAAM,qBAAqBqsC,EAAO,CAAC,CAAC,EAAGrsC,EAAM,oBAAoBqsC,EAAOA,EAAO,OAAS,CAAC,CAAC,CAAC,EAClIrsC,EAAM,OAAQjJ,GAAWA,EAAO,aAAa+yC,CAAY,CAAC,EAC1D,KAAK,iBAAmB,GACxBx5F,EAAK,MAAM,EACXA,EAAK,YAAYy3F,EAAiB,EAAE,WAAWxT,CAAQ,CACzD,CAIA,qBAAqBA,EAAU,CAC7B,GAAI,CAAC,KAAK,WAAa,CAAC,KAAK,iBAC3B,OAEI,MAAAoV,EAAUpV,EAAS,SAAW,KAAK,OAAO,OAAO,0BAA4B,MAAQ,IAAM,MAC3FqV,EAAUrV,EAAS,QACnB7jG,EAAS,SAAS,iBAAiBi5G,EAASC,CAAO,EACnDt5F,EAAO,KAAK,OAAO,QAAQ,KAC7B,CAAC5f,GAAU,CAACA,EAAO,QAAQ,sBAAsB,GAGhD4f,EAAA,YAAYy3F,EAAiB,EAAE,WAAW,CAC7C,GAAGxT,EACH,KAAMA,EAAS,KACf,aAAcA,EAAS,aACvB,OAAA7jG,EACA,QAAAi5G,EACA,QAAAC,EACA,eAAgB,IAAMrV,EAAS,eAAe,EAC9C,gBAAiB,IAAMA,EAAS,gBAAgB,EACjD,CACH,CAIA,qBAAsB,CACpB,KAAK,iBAAmB,EAC1B,CACF,EAII+X,GAAW,cAAcxwB,EAAO,CAClC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,iCAAmCnoD,GAAM,IAAM,KAAK,4BAA6B,EAAE,EACxF,KAAK,WAAa,GACb,iBAAc,IAAKo1C,GAAA,EAC1B,CAIA,WAAW,YAAa,CACf,gBACT,CAIA,WAAW,UAAW,CACpB,MAAO,CAACkgC,GAAmB9G,GAAQoH,GAAgB4C,EAAoB,CACzE,CAIA,MAAO,CACL,MAAMl8C,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KAC5B,KAAK,cAAgB,KACrB,KAAK,aAAe,GACpB,KAAK,kBAAoB,KACzB3/C,EAAK,YAAYy3F,EAAiB,EAClCz3F,EAAK,YAAYoqF,EAAa,EAC9B,KAAK,eAAe,EACpB,KAAK,kCAAkC,EACvC,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,SAASzqC,EAAQ,oBAAqB,CAACrxC,EAAKhuB,EAAMw7G,IAAe,CAChEA,EACF,KAAK,cAAc,cAAc,EAEjC,KAAK,mBAAmB,cAAc,CACxC,CACD,EACD,KAAK,GAAG,mBAAoB,CAACxtF,EAAKhuB,EAAMmkG,IAAc,CAC/CA,GACH,KAAK,kBAAkB,EAAK,CAC9B,CACD,EACGhrB,GAAY,WACd,KAAK,cAAc,kBAAkB,CAEzC,CAIA,SAAU,CACR,OAAI,KAAK,gBACP,KAAK,cAAc,SACnB,KAAK,cAAgB,MAEnB,KAAK,mBACP,KAAK,kBAAkB,SAEzB,KAAK,YAAY,gBACjB,KAAK,iCAAiC,SAC/B,MAAM,SACf,CAIA,gBAAiB,CACf,MAAM9Z,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SACpBi8F,EAAiBt8C,EAAO,QAAQ,IAAIs5C,EAAc,EACxD,KAAK,SAAS3U,EAAc,YAAa,CAACh2E,EAAKjW,IAAS,CACtD,GAAIA,EAAK,QAAUA,EAAK,OAAO,GAAG,iBAAiB,EAAG,CACpDA,EAAK,eAAe,EACpB,MACF,CAEI,GADC,0BAAqBA,EAAK,MAAM,EACjC,CAAC,KAAK,cAAe,CACvBA,EAAK,eAAe,EACpB,MACF,CACA,KAAK,aAAemhE,KACpBnhE,EAAK,aAAa,cAAgB,KAAK,UAAY,WAAa,OAChEA,EAAK,aAAa,QAAQ,qCAAsC,KAAK,YAAY,EACjF,MAAM6jG,EAAmBxsC,EAAM,gBAAgB,KAAK,cAAc,SAAS,EACjD,KAAK,OAAO,QAAQ,IAAI,mBAAmB,EACnD,+BAA+Br3D,EAAK,aAAc6jG,EAAkB,WAAW,EACjG,KAAM,CAAE,aAAAtD,EAAc,UAAAuD,EAAW,SAAAlY,CAAA,EAAa5rF,EACxC,CAAE,QAAAghG,CAAY,EAAApV,EACpB,KAAK,eAAe,CAAE,aAAA2U,EAAc,UAAAuD,EAAW,QAAA9C,CAAS,GACxDhhG,EAAK,gBAAgB,EAChB,KAAK,YACR,KAAK,cAAc,SACnB,KAAK,cAAgB,KACrB,KAAK,aAAe,GACtB,EACC,CAAE,SAAU,MAAO,EACtB,KAAK,SAASisF,EAAc,UAAW,CAACh2E,EAAKjW,IAAS,CAC/C,uBAAkB,CAACA,EAAK,aAAa,YAAcA,EAAK,aAAa,YAAc,MAAM,GAC7F,CAAE,SAAU,MAAO,EACtB,KAAK,YAAY,SAASunE,GAAe,SAAU,UAAW,IAAM,CAClE,KAAK,WAAa,IACjB,CAAE,WAAY,GAAM,EAClB,cAAS0kB,EAAc,YAAa,IAAM,CACxC,KAAK,WAGVtkF,EAAK,MAAM,EACZ,EACI,cAASskF,EAAc,YAAa,IAAM,CAC7C2X,EAAe,wBAAwB,EACxC,EACD,KAAK,SAAS3X,EAAc,WAAY,CAACh2E,EAAKjW,IAAS,CACjD,IAAC,KAAK,UAAW,CACnBA,EAAK,aAAa,WAAa,OAC/B,MACF,CACA,KAAM,CAAE,QAAAghG,EAAS,QAAAC,GAAYjhG,EAAK,SACnB4jG,EAAA,iBAAiB5jG,EAAK,OAAQA,EAAK,aAAcghG,EAASC,EAAS,KAAK,WAAY,KAAK,aAAa,EAChH,KAAK,gBACRjhG,EAAK,aAAa,WAAa,QAE5BohE,GAAY,UACXphE,EAAK,aAAa,eAAiB,OACrCA,EAAK,aAAa,WAAa,OACtB,CAAC,MAAO,UAAU,EAAE,SAASA,EAAK,aAAa,aAAa,IACrEA,EAAK,aAAa,WAAa,SAGnCiW,EAAI,KAAK,GACR,CAAE,SAAU,MAAO,CACxB,CAIA,iCAAkC,CAChC,MAAMqxC,EAAS,KAAK,OAEd2kC,EADO3kC,EAAO,QAAQ,KACF,SACpBs8C,EAAiBt8C,EAAO,QAAQ,IAAIs5C,EAAc,EACxD,KAAK,SAAS3U,EAAc,iBAAkB,CAACh2E,EAAKjW,IAAS,CACvD,GAAAA,EAAK,QAAU,OACjB,OAEF,KAAM,CAAE,QAAAghG,EAAS,QAAAC,GAAYjhG,EAAK,SAC5BuuF,EAAcqV,EAAe,kBAAkB5jG,EAAK,OAAQA,EAAK,aAAcghG,EAASC,EAAS,KAAK,WAAY,KAAK,aAAa,EAC1I,GAAI,CAAC1S,EAAa,CAChB,KAAK,kBAAkB,EAAK,EAC5Bt4E,EAAI,KAAK,EACT,MACF,CAOI,GANA,KAAK,eAAiB,KAAK,cAAgBjW,EAAK,aAAa,QAAQ,oCAAoC,IAC3G,KAAK,cAAc,SACnB,KAAK,cAAgB,KACrB,KAAK,aAAe,IAEP+jG,GAAmB/jG,EAAK,YAAY,GAAK,QAC1C,KAAK,eAAiB,KAAK,cAAc,cAAcuuF,EAAa,EAAI,EAAG,CACvF,KAAK,kBAAkB,EAAK,EAC5Bt4E,EAAI,KAAK,EACT,MACF,CACAjW,EAAK,aAAe,CAACsnD,EAAO,QAAQ,OAAO,YAAYinC,CAAW,CAAC,GAClE,CAAE,SAAU,OAAQ,CACzB,CAIA,mCAAoC,CAClC,MAAMyV,EAAoB,KAAK,OAAO,QAAQ,IAAI1D,EAAiB,EACnE0D,EAAkB,GAAG,mBAAoB,CAAC/tF,EAAKjW,IAAS,CACtD,GAAI,CAAC,KAAK,WAAaA,EAAK,SAAW,OACrC,OAEF,MAAMuoF,EAASvoF,EAAK,aAAa,IAAKuvF,GAAc,KAAK,OAAO,QAAQ,OAAO,aAAaA,CAAS,CAAC,EACjG,YAAO,MAAM,OAAQnhC,GAAWA,EAAO,aAAam6B,CAAM,CAAC,GAC/D,CAAE,SAAU,OAAQ,EACvByb,EAAkB,GAAG,mBAAoB,CAAC/tF,EAAKjW,IAAS,CACtD,GAAI,CAAC,KAAK,WAAaA,EAAK,SAAW,OACrC,OAEF,MAAMikG,EAASF,GAAmB/jG,EAAK,YAAY,GAAK,OAClD4T,EAAY,CAAC5T,EAAK,aAAe,CAACA,EAAK,YAAY,YACpD,uBAAkB4T,GAAaqwF,CAAM,GACzC,CAAE,SAAU,SAAU,CAC3B,CAIA,kCAAmC,CACjC,MAAM38C,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SAC1B,KAAK,SAASskF,EAAc,YAAa,CAACh2E,EAAKjW,IAAS,CAClD,GAAAohE,GAAY,WAAa,CAACphE,EAC5B,OAEF,KAAK,iCAAiC,SAClC,IAAAkkG,EAAmBC,GAAoBnkG,EAAK,MAAM,EAClD,GAAAohE,GAAY,SAAW,CAAC9Z,EAAO,YAAc,CAAC48C,GAAoB,CAACjY,EAAa,UAAU,YAAa,CACnG,MAAA0I,EAAkB1I,EAAa,UAAU,mBAAmB,GAC9D,CAAC0I,GAAmB,CAACf,GAASe,CAAe,KAC/CuP,EAAmBjY,EAAa,UAAU,gBAE9C,CACIiY,IACGv8F,EAAA,OAAQymD,GAAW,CACfA,EAAA,aAAa,YAAa,OAAQ81C,CAAgB,EAC1D,EACD,KAAK,kBAAoB58C,EAAO,QAAQ,OAAO,eAAe48C,CAAgB,EAChF,CACD,EACI,cAASjY,EAAc,UAAW,IAAM,CACtC7qB,GAAY,WACf,KAAK,iCAAiC,CACxC,CACD,CACH,CAIA,2BAA4B,CACpB,MAAAk3B,EAAU,KAAK,OAAO,QACpBA,EAAA,KAAK,OAAQlqC,GAAW,CAC1B,KAAK,mBAAqB,KAAK,kBAAkB,KAAK,UAAY,cACpEA,EAAO,gBAAgB,YAAakqC,EAAQ,OAAO,cAAc,KAAK,iBAAiB,CAAC,EAE1F,KAAK,kBAAoB,KAC1B,CACH,CAMA,kBAAkB8L,EAAO,CACvB,MAAM98C,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACEA,EAAO,QAAQ,IAAIs5C,EAAc,EACzC,iBAAiB,EAChC,KAAK,0BAA0B,EAC3Bt5C,EAAO,QAAQ,IAAI,yBAAyB,GACdA,EAAO,QAAQ,IAAI,yBAAyB,EACpD,mBAAmB,UAAU,EAEvD,KAAK,aAAe,GAChB,KAAK,oBACP,KAAK,kBAAkB,SACvB,KAAK,kBAAoB,QAEtB,KAAK,gBAGN88C,GAAS,KAAK,WACV/sC,EAAA,OAAQjJ,GAAW,CACvB,MAAMlrD,EAAYm0D,EAAM,gBAAgB,KAAK,aAAa,EAC1DA,EAAM,cAAcn0D,EAAW,CAAE,mBAAoB,EAAM,GACrD,MAAAmhG,EAAkBnhG,EAAU,mBAAmB,OACjDmhG,EAAgB,SAAW,CAAChtC,EAAM,OAAO,WAAWgtC,EAAiB,OAAO,GAAKhtC,EAAM,OAAO,WAAWgtC,EAAiB,WAAW,GAChIj2C,EAAA,cAAc,YAAai2C,EAAiB,CAAC,CACtD,CACD,EAEH,KAAK,cAAc,SACnB,KAAK,cAAgB,KACvB,CAIA,qBAAqBt8G,EAAQ,CAC3B,MAAMu/D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UAC3BitC,EAAkBv8G,EAASo8G,GAAoBp8G,CAAM,EAAI,KAC/D,GAAIu8G,EAAiB,CACnB,MAAM5X,EAAeplC,EAAO,QAAQ,OAAO,eAAeg9C,CAAe,EACzE,KAAK,cAAgBC,GAAU,UAAUltC,EAAM,cAAcq1B,CAAY,CAAC,EAC1E,KAAK,WAAar1B,EAAM,OAAO,QAAQq1B,CAAY,EAC/CplC,EAAO,QAAQ,IAAI,yBAAyB,GACdA,EAAO,QAAQ,IAAI,yBAAyB,EACpD,cAAc,UAAU,EAElD,MACF,CACA,GAAIpkD,EAAU,aAAe,CAACA,EAAU,iBAAiB,EAAE,OAAO,QAChE,OAEF,MAAMwgG,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACjDi+F,EAAej+F,EAAU,gBAC3B,GAAAwgG,EAAO,QAAU,EAAG,CACjB,mBAAgBa,GAAU,UAAUpD,CAAY,EACrD,MACF,CACM,MAAAqD,EAAaC,GAAsCptC,EAAOqsC,CAAM,EAClE,GAAAA,EAAO,OAAS,EACb,mBAAgBa,GAAU,UAAUC,CAAU,EACnD,KAAK,WAAa,WACTd,EAAO,QAAU,EAAG,CACvB,MAAAgB,EAAoBvD,EAAa,MAAM,WAAWqD,EAAW,KAAK,GAAKrD,EAAa,IAAI,WAAWqD,EAAW,GAAG,EACvH,KAAK,cAAgBD,GAAU,UAAUG,EAAoBF,EAAarD,CAAY,EACtF,KAAK,WAAauD,CACpB,CACMrtC,EAAA,OAAQjJ,GAAWA,EAAO,aAAa,KAAK,cAAc,QAAS,EAAC,CAC5E,CAIA,eAAe,CAAE,aAAAmyC,EAAc,UAAAuD,EAAW,QAAA9C,GAAW,CAC7C,MAAAr5F,EAAO,KAAK,OAAO,QAAQ,KAC3B04E,EAAW14E,EAAK,SAAS,UAAU,gBACnCg9F,EAAch9F,EAAK,aAAa,aAAa04E,CAAQ,EACrDx2C,EAAgB09B,GAAe,OAAO,iBAAiBo9B,CAAW,EACnE,KAAK,kBAKC,KAAK,kBAAkB,mBAChC,KAAK,kBAAkB,YAAY,KAAK,kBAAkB,iBAAiB,GAL3E,KAAK,kBAAoBxyB,GAAc5K,GAAe,SAAU,MAAO,CACrE,MAAO,oCACR,EACDA,GAAe,SAAS,KAAK,YAAY,KAAK,iBAAiB,GAI3D,MAAAq9B,EAAU,IAAIx7B,GAAKu7B,CAAW,EAChC,GAAAA,EAAY,SAASb,CAAS,EAChC,OAEI,MAAAe,EAAyB,WAAWh7D,EAAc,WAAW,EAC7Di7D,EAAU3yB,GAAc5K,GAAe,SAAU,KAAK,EAC5Du9B,EAAQ,UAAY,gBACZA,EAAA,MAAM,MAAQj7D,EAAc,MACpCi7D,EAAQ,MAAM,YAAc,GAAGF,EAAQ,KAAO5D,EAAU6D,CAAsB,KAC1EzjC,GAAY,QACd0jC,EAAQ,MAAM,gBAAkB,SAE1BA,EAAA,UAAYvE,EAAa,QAAQ,WAAW,EACvCA,EAAA,aAAauE,EAAS,EAAG,CAAC,EAClC,uBAAkB,YAAYA,CAAO,CAC5C,CACF,EACA,SAASf,GAAmBxD,EAAc,CACxC,OAAIn/B,GAAY,QACPm/B,EAAa,WAEf,CAAC,MAAO,UAAU,EAAE,SAASA,EAAa,aAAa,EAAI,OAAS,MAC7E,CACA,SAAS4D,GAAoBp8G,EAAQ,CAC/B,GAAAA,EAAO,GAAG,iBAAiB,EACtB,YAEL,GAAAA,EAAO,SAAS,6BAA6B,EACxC,OAAAA,EAAO,aAAa6rG,EAAQ,EAEjC,GAAAA,GAAS7rG,CAAM,EACV,OAAAA,EAEH,MAAAqwG,EAAWrwG,EAAO,aAAcoC,GAASypG,GAASzpG,CAAI,GAAKA,EAAK,GAAG,iBAAiB,CAAC,EACvF,OAAAypG,GAASwE,CAAQ,EACZA,EAEF,IACT,CACA,SAASqM,GAAsCptC,EAAOnjE,EAAU,CACxD,MAAA6wG,EAAe7wG,EAAS,CAAC,EACzBuc,EAAcvc,EAASA,EAAS,OAAS,CAAC,EAC1CwB,EAASqvG,EAAa,kBAAkBt0F,CAAW,EACnDmzE,EAAgBvsB,EAAM,qBAAqB0tC,CAAY,EACvDlhB,EAAcxsB,EAAM,oBAAoB5mD,CAAW,EACrD,GAAA/a,GAAUA,EAAO,GAAG,SAAS,GAAK,CAAC2hE,EAAM,OAAO,QAAQ3hE,CAAM,EAAG,CAC7D,MAAAsvG,EAAc3tC,EAAM,cAAc3hE,CAAM,EACxCuvG,EAAerhB,EAAc,WAAWohB,EAAY,KAAK,EACzDE,EAAarhB,EAAY,WAAWmhB,EAAY,GAAG,EACzD,GAAIC,GAAgBC,EAClB,OAAOT,GAAsCptC,EAAO,CAAC3hE,CAAM,CAAC,CAEhE,CACO,OAAA2hE,EAAM,YAAYusB,EAAeC,CAAW,CACrD,CAGA,IAAIshB,GAAiB,cAAchyB,EAAO,CAIxC,WAAW,YAAa,CACf,sBACT,CAIA,WAAW,UAAW,CACpB,MAAO,CAACmtB,EAAiB,CAC3B,CAIA,MAAO,CACL,MAAMh5C,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf3/C,EAAO2/C,EAAO,QAAQ,KACtB2kC,EAAetkF,EAAK,SACpBzE,EAAYm0D,EAAM,SAAS,UACjC,IAAIq0B,EAAe,GACnB/jF,EAAK,YAAYy3F,EAAiB,EAClC,KAAK,SAASnT,EAAc,UAAW,CAACh2E,EAAKjW,IAAS,CACpD0rF,EAAe1rF,EAAK,SACrB,EACMsnD,EAAA,QAAQ,IAAIg5C,EAAiB,EAAE,GAAG,mBAAoB,CAACrqF,EAAKjW,IAAS,CACtE,CAAC0rF,GAAgB,CAAC0Z,GAAoBplG,EAAK,QAASq3D,EAAM,MAAM,GAG9DA,EAAA,OAAQjJ,GAAW,CACvB,MAAMi3C,EAAiB,MAAM,KAAKniG,EAAU,cAAe,GAAE,OAAO,CAAC,CAAC7b,CAAG,IAAMgwE,EAAM,OAAO,uBAAuBhwE,CAAG,EAAE,YAAY,EAC/H6b,EAAU,aACbm0D,EAAM,cAAcn0D,EAAW,CAAE,mBAAoB,EAAM,GAE7DmiG,EAAe,KAAK,GAAGniG,EAAU,cAAe,GAChD,MAAM2tC,EAAQud,EAAO,cAAcpuD,EAAK,OAAO,EACpC,UAAAi+B,KAAQ4S,EAAM,WACnB5S,EAAK,GAAG,YAAY,GACfmwB,EAAA,cAAci3C,EAAgBpnE,CAAI,CAE7C,CACD,EACF,CACH,CACF,EACA,SAASmnE,GAAoBE,EAAkBr6C,EAAQ,CACjD,GAAAq6C,EAAiB,WAAa,EACzB,SAEH,MAAAzmE,EAAQymE,EAAiB,SAAS,CAAC,EACrC,OAAAr6C,EAAO,SAASpsB,CAAK,EAChB,GAEF,MAAM,KAAKA,EAAM,iBAAiB,CAAC,EAAE,QAAU,CACxD,CAGA,IAAI0mE,GAAY,cAAcpyB,EAAO,CAInC,WAAW,YAAa,CACf,iBACT,CAIA,WAAW,UAAW,CACb,OAACmtB,GAAmBqD,GAAUwB,EAAc,CACrD,CACF,EAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wkDChoCA,IAAIK,GAAmB,cAAcpd,EAAQ,CAI3C,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,YAAc,EACpB,CAID,SAAU,CACR,MAAM+P,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UACjC,IAAIouC,EAAepuC,EAAM,OAAO,gBAAgBn0D,CAAS,EACzD,GAAIA,EAAU,sBAAsBuiG,CAAY,GAAK,CAACC,GAAiBruC,EAAM,OAAQouC,CAAY,EAC/F,EAEE,IADAA,EAAeA,EAAa,OACxB,CAACA,EACH,aAEK,CAACC,GAAiBruC,EAAM,OAAQouC,CAAY,GAEvDpuC,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,aAAaq3C,EAAc,IAAI,CAC5C,CAAK,CACF,CACH,EACA,SAASC,GAAiBz6C,EAAQvwC,EAAS,CACzC,OAAOuwC,EAAO,QAAQvwC,CAAO,IAAMuwC,EAAO,WAAWvwC,EAAS,OAAO,GAAKuwC,EAAO,WAAWvwC,EAAS,WAAW,EAClH,CAGA,IAAIirF,GAAuBC,GAAe,QAAQ,EAC9CC,GAAmB,cAAc1yB,EAAO,CAI1C,WAAW,YAAa,CACtB,MAAO,kBACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OAEd2kC,EADO3kC,EAAO,QAAQ,KACF,SAC1BA,EAAO,SAAS,IAAI,YAAa,IAAIk+C,GAAiBl+C,CAAM,CAAC,EAC7D,KAAK,SAAS2kC,EAAc,UAAW,CAACgC,EAAWmI,IAAiB,CAC9D0P,GAAQ1P,CAAY,IAAMuP,KAC5Br+C,EAAO,QAAQ,WAAW,EAC1B8uC,EAAa,eAAc,EAEnC,CAAK,CACF,CACH,EAII2P,GAAc,cAAc5yB,EAAO,CAIrC,WAAW,YAAa,CACtB,MAAO,aACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACpBA,EAAO,GAAG,iBAAiB,IAAI,YAAcgZ,GAAW,CACtD,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,WAAW,EACzC3/C,EAAO,IAAIq5D,GAAWV,CAAM,EAC5Bl8D,EAAIk8D,EAAO,EACjB,OAAA34D,EAAK,IAAI,CACP,MAAOvD,EAAE,YAAY,EACrB,KAAM4hG,GACN,UAAW,SACX,QAAS,EACjB,CAAO,EACDr+F,EAAK,KAAK,WAAW,EAAE,GAAG+iF,EAAS,WAAW,EAC9C,KAAK,SAAS/iF,EAAM,UAAW,IAAM,CACnC2/C,EAAO,QAAQ,WAAW,EAC1BA,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM3/C,CACb,CAAK,CACF,CACH,EAGIs+F,GAAY,cAAc9yB,EAAO,CAInC,WAAW,UAAW,CACpB,MAAO,CAAC0yB,GAAkBE,EAAW,CACtC,CAID,WAAW,YAAa,CACtB,MAAO,WACR,CACH,EAGIG,GAAa,cAAc/yB,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAACoyB,GAAWvZ,GAAOia,GAAWxZ,GAAYmE,GAAQjG,EAAI,CAC9D,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC5IA,IAAIwb,GAAa,cAAc9lC,IAAkB,CAI/C,aAAc,CACZ,QACA,MAAM+lC,EAAS,IAAI,OAAO,WAC1B,KAAK,QAAUA,EACf,KAAK,MAAQ,OACb,KAAK,IAAI,SAAU,CAAC,EACpBA,EAAO,WAAcnwF,GAAQ,CAC3B,KAAK,OAASA,EAAI,MACxB,CACG,CAID,IAAI,OAAQ,CACV,OAAO,KAAK,QAAQ,KACrB,CAKD,IAAI,MAAO,CACT,OAAO,KAAK,KACb,CAQD,KAAKqf,EAAM,CACT,MAAM8wE,EAAS,KAAK,QACpB,YAAK,MAAQ9wE,EAAK,KACX,IAAI,QAAQ,CAAC74B,EAASC,IAAW,CACtC0pG,EAAO,OAAS,IAAM,CACpB,MAAMxxG,EAASwxG,EAAO,OACtB,KAAK,MAAQxxG,EACb6H,EAAQ7H,CAAM,CACtB,EACMwxG,EAAO,QAAU,IAAM,CACrB1pG,EAAO,OAAO,CACtB,EACM0pG,EAAO,QAAU,IAAM,CACrB1pG,EAAO,SAAS,CACxB,EACM,KAAK,QAAQ,cAAc44B,CAAI,CACrC,CAAK,CACF,CAID,OAAQ,CACN,KAAK,QAAQ,OACd,CACH,EAGI+wE,GAAiB,cAAclzB,EAAO,CACxC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,QAAU,IAAI/W,GACnB,KAAK,YAA8B,IAAI,IACvC,KAAK,eAAiB,IACvB,CAID,WAAW,YAAa,CACtB,MAAO,gBACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACkqC,EAAc,CACvB,CAID,MAAO,CACL,KAAK,QAAQ,GAAG,SAAU,IAAM,KAAK,qBAAoB,CAAE,EAC3D,KAAK,IAAI,WAAY,CAAC,EACtB,KAAK,IAAI,cAAe,IAAI,EAC5B,KAAK,KAAK,iBAAiB,EAAE,GAAG,KAAM,WAAY,KAAM,cAAe,CAACC,EAAUC,IACzEA,EAAQD,EAAWC,EAAQ,IAAM,CACzC,CACF,CAQD,UAAUC,EAAe,CACvB,OAAO,KAAK,YAAY,IAAIA,CAAa,GAAK,IAC/C,CAQD,aAAaA,EAAe,CAC1B,GAAI,CAAC,KAAK,oBACR,OAAAxjC,GAAW,kCAAkC,EACtC,KAET,MAAMyjC,EAAS,IAAIC,GAAW,QAAQ,QAAQF,CAAa,EAAG,KAAK,mBAAmB,EACtF,YAAK,QAAQ,IAAIC,CAAM,EACvB,KAAK,YAAY,IAAID,EAAeC,CAAM,EACtCD,aAAyB,SAC3BC,EAAO,KAAK,KAAMpxE,GAAS,CACzB,KAAK,YAAY,IAAIA,EAAMoxE,CAAM,CACzC,CAAO,EAAE,MAAM,IAAM,CACrB,CAAO,EAEHA,EAAO,GAAG,kBAAmB,IAAM,CACjC,IAAIE,EAAqB,EACzB,UAAWC,KAAW,KAAK,QACzBD,GAAsBC,EAAQ,SAEhC,KAAK,SAAWD,CACtB,CAAK,EACDF,EAAO,GAAG,qBAAsB,IAAM,CACpC,IAAII,EAAkB,EACtB,UAAWD,KAAW,KAAK,QACrBA,EAAQ,cACVC,GAAmBD,EAAQ,aAG/B,KAAK,YAAcC,CACzB,CAAK,EACMJ,CACR,CAMD,cAAcK,EAAuB,CACnC,MAAML,EAASK,aAAiCJ,GAAaI,EAAwB,KAAK,UAAUA,CAAqB,EACzHL,EAAO,SAAQ,EACf,KAAK,QAAQ,OAAOA,CAAM,EAC1B,KAAK,YAAY,QAAQ,CAACp/G,EAAOD,IAAQ,CACnCC,IAAUo/G,GACZ,KAAK,YAAY,OAAOr/G,CAAG,CAEnC,CAAK,CACF,CAID,sBAAuB,CACrB,MAAM2/G,EAAiB,KAAK,OAAO,QAAQ,IAAIV,EAAc,EAC7D,GAAI,KAAK,QAAQ,QACf,GAAI,CAAC,KAAK,eAAgB,CACxB,MAAM,EAAI,KAAK,OAAO,EAChBW,EAAc3/G,GAAU,GAAG,EAAE,oBAAoB,CAAC,IAAI,SAASA,CAAK,CAAC,KAC3E,KAAK,eAAiB0/G,EAAe,IAAIC,EAAW,KAAK,eAAe,CAAC,EACzE,KAAK,eAAe,KAAK,SAAS,EAAE,GAAG,KAAM,kBAAmBA,CAAU,CAC3E,OAEDD,EAAe,OAAO,KAAK,cAAc,EACzC,KAAK,eAAiB,IAEzB,CACH,EACIL,GAAa,cAActmC,IAAkB,CAO/C,YAAY6mC,EAAaC,EAAsB,CAC7C,QACA,KAAK,GAAKhmC,KACV,KAAK,oBAAsB,KAAK,0BAA0B+lC,CAAW,EACrE,KAAK,SAAWC,EAAqB,IAAI,EACzC,KAAK,QAAU,IAAIhB,GACnB,KAAK,IAAI,SAAU,MAAM,EACzB,KAAK,IAAI,WAAY,CAAC,EACtB,KAAK,IAAI,cAAe,IAAI,EAC5B,KAAK,KAAK,iBAAiB,EAAE,GAAG,KAAM,WAAY,KAAM,cAAe,CAACI,EAAUC,IACzEA,EAAQD,EAAWC,EAAQ,IAAM,CACzC,EACD,KAAK,IAAI,iBAAkB,IAAI,CAChC,CAID,IAAI,MAAO,CACT,OAAK,KAAK,oBAGD,KAAK,oBAAoB,QAAQ,KAAMlxE,GAAS,KAAK,oBAAsBA,EAAO,IAAI,EAFtF,QAAQ,QAAQ,IAAI,CAI9B,CAKD,IAAI,MAAO,CACT,OAAO,KAAK,QAAQ,IACrB,CAwBD,MAAO,CACL,GAAI,KAAK,QAAU,OACjB,MAAM,IAAIknC,EAAc,mCAAoC,IAAI,EAElE,YAAK,OAAS,UACP,KAAK,KAAK,KAAMlnC,GAAS,KAAK,QAAQ,KAAKA,CAAI,CAAC,EAAE,KAAMt1B,GAAS,CACtE,GAAI,KAAK,SAAW,UAClB,MAAM,KAAK,OAEb,YAAK,OAAS,OACPA,CACb,CAAK,EAAE,MAAOwiF,GAAQ,CAChB,MAAIA,IAAQ,WACV,KAAK,OAAS,UACR,YAER,KAAK,OAAS,QACR,KAAK,QAAQ,MAAQ,KAAK,QAAQ,MAAQA,EACtD,CAAK,CACF,CAuBD,QAAS,CACP,GAAI,KAAK,QAAU,OACjB,MAAM,IAAIhmB,EAAc,qCAAsC,IAAI,EAEpE,YAAK,OAAS,YACP,KAAK,KAAK,KAAK,IAAM,KAAK,SAAS,QAAQ,EAAE,KAAMx8D,IACxD,KAAK,eAAiBA,EACtB,KAAK,OAAS,OACPA,EACR,EAAE,MAAOwiF,GAAQ,CAChB,MAAI,KAAK,SAAW,UACZ,WAER,KAAK,OAAS,QACRA,EACZ,CAAK,CACF,CAID,OAAQ,CACN,MAAMltE,EAAS,KAAK,OACpB,KAAK,OAAS,UACT,KAAK,oBAAoB,YAInBA,GAAU,UACnB,KAAK,QAAQ,QACJA,GAAU,aAAe,KAAK,SAAS,OAChD,KAAK,SAAS,SANd,KAAK,oBAAoB,QAAQ,MAAM,IAAM,CACnD,CAAO,EACD,KAAK,oBAAoB,SAAS,SAAS,GAM7C,KAAK,SAAQ,CACd,CAMD,UAAW,CACT,KAAK,oBAAsB,OAC3B,KAAK,QAAU,OACf,KAAK,SAAW,OAChB,KAAK,eAAiB,MACvB,CAOD,0BAA0B4xF,EAAa,CACrC,MAAMpjE,EAAU,GAChB,OAAAA,EAAQ,QAAU,IAAI,QAAQ,CAACrnC,EAASC,IAAW,CACjDonC,EAAQ,SAAWpnC,EACnBonC,EAAQ,YAAc,GACtBojE,EAAY,KAAM5xE,GAAS,CACzBwO,EAAQ,YAAc,GACtBrnC,EAAQ64B,CAAI,CACpB,CAAO,EAAE,MAAOktD,GAAQ,CAChB1+C,EAAQ,YAAc,GACtBpnC,EAAO8lF,CAAG,CAClB,CAAO,CACP,CAAK,EACM1+C,CACR,CACH,EAGIsjE,GAAuB,cAAcpmC,EAAW,CAIlD,YAAYV,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,WAAa,KAClB,KAAK,eAAiB,IAAI+mC,GAAc/mC,CAAM,EAC9C,KAAK,eAAe,KAAK,cAAc,EAAE,GAAG,IAAI,EAChD,KAAK,eAAe,KAAK,oBAAoB,EAAE,GAAG,IAAI,EACtD,KAAK,eAAe,SAAS,MAAM,EAAE,GAAG,IAAI,EAC5C,KAAK,GAAG,UAAW,IAAM,CACvB,KAAK,eAAe,MAC1B,CAAK,EACD,KAAK,eAAe,CAClB,WAAY,CACV,MAAO,uBACR,CACP,CAAK,CACF,CAID,QAAS,CACP,MAAM,OAAM,EACZ,KAAK,SAAS,IAAI,KAAK,cAAc,CACtC,CACH,EACI+mC,GAAgB,cAAc5kF,EAAK,CAIrC,YAAY69C,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,IAAI,eAAgB,MAAM,EAC/B,KAAK,IAAI,qBAAsB,EAAK,EACpC,MAAMK,EAAO,KAAK,aAClB,KAAK,YAAY,CACf,IAAK,QACL,WAAY,CACV,MAAO,CACL,WACD,EACD,KAAM,OACN,SAAU,KACV,OAAQA,EAAK,GAAG,cAAc,EAC9B,SAAUA,EAAK,GAAG,oBAAoB,CACvC,EACD,GAAI,CAEF,OAAQA,EAAK,GAEX,IAAM,CACA,KAAK,SAAW,KAAK,QAAQ,OAAS,KAAK,QAAQ,MAAM,QAC3D,KAAK,KAAK,OAAQ,KAAK,QAAQ,KAAK,EAEtC,KAAK,QAAQ,MAAQ,EACtB,CACF,CACF,CACP,CAAK,CACF,CAID,MAAO,CACL,KAAK,QAAQ,OACd,CACH,EAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECvaA,IAAI2mC,GAAoB,cACpBC,GAAe,GACfC,GAAe,uCACnB,SAASC,IAAe,CACtB,IAAI/tG,EAAQguG,GAAUJ,EAAiB,EACvC,OAAI,CAAC5tG,GAASA,EAAM,QAAU6tG,MAC5B7tG,EAAQiuG,GAAcJ,EAAY,EAClCK,GAAUN,GAAmB5tG,CAAK,GAE7BA,CACT,CACA,SAASguG,GAAUz/G,EAAM,CACvBA,EAAOA,EAAK,cACZ,MAAMqjB,EAAQ,SAAS,OAAO,MAAM,GAAG,EACvC,UAAWwuB,KAAQxuB,EAAO,CACxB,MAAMu8F,EAAO/tE,EAAK,MAAM,GAAG,EAE3B,GADY,mBAAmB+tE,EAAK,CAAC,EAAE,KAAM,EAAC,YAAW,CAAE,IAC/C5/G,EACV,OAAO,mBAAmB4/G,EAAK,CAAC,CAAC,CAEpC,CACD,OAAO,IACT,CACA,SAASD,GAAU3/G,EAAMX,EAAO,CAC9B,SAAS,OAAS,mBAAmBW,CAAI,EAAI,IAAM,mBAAmBX,CAAK,EAAI,SACjF,CACA,SAASqgH,GAAcj8G,EAAQ,CAC7B,IAAIkJ,EAAS,GACb,MAAMkzG,EAAa,IAAI,WAAWp8G,CAAM,EACxC,OAAO,OAAO,gBAAgBo8G,CAAU,EACxC,QAAS18G,EAAI,EAAGA,EAAI08G,EAAW,OAAQ18G,IAAK,CAC1C,MAAM28G,EAAYP,GAAa,OAAOM,EAAW18G,CAAC,EAAIo8G,GAAa,MAAM,EACzE5yG,GAAU,KAAK,OAAQ,EAAG,GAAMmzG,EAAU,YAAa,EAAGA,CAC3D,CACD,OAAOnzG,CACT,CAGA,IAAIozG,GAAwB,cAAc70B,EAAO,CAI/C,WAAW,UAAW,CACpB,MAAO,CAACkzB,EAAc,CACvB,CAID,WAAW,YAAa,CACtB,MAAO,uBACR,CAID,MAAO,CACL,MAAMlyF,EAAM,KAAK,OAAO,OAAO,IAAI,oBAAoB,EAClDA,IAGL,KAAK,OAAO,QAAQ,IAAIkyF,EAAc,EAAE,oBAAuBK,GAAW,IAAIuB,GAAcvB,EAAQvyF,EAAK,KAAK,OAAO,CAAC,EACvH,CACH,EACI8zF,GAAgB,KAAM,CAIxB,YAAYvB,EAAQvyF,EAAK/P,EAAG,CAC1B,KAAK,OAASsiG,EACd,KAAK,IAAMvyF,EACX,KAAK,EAAI/P,CACV,CAMD,QAAS,CACP,OAAO,KAAK,OAAO,KAAK,KAAMkxB,GACrB,IAAI,QAAQ,CAAC74B,EAASC,IAAW,CACtC,KAAK,aAAY,EACjB,KAAK,eAAeD,EAASC,EAAQ44B,CAAI,EACzC,KAAK,aAAaA,CAAI,CAC9B,CAAO,CACF,CACF,CAMD,OAAQ,CACF,KAAK,KACP,KAAK,IAAI,OAEZ,CAID,cAAe,CACb,MAAMtf,EAAM,KAAK,IAAM,IAAI,eAC3BA,EAAI,KAAK,OAAQ,KAAK,IAAK,EAAI,EAC/BA,EAAI,aAAe,MACpB,CAQD,eAAevZ,EAASC,EAAQ44B,EAAM,CACpC,MAAMtf,EAAM,KAAK,IACX0wF,EAAS,KAAK,OACdtiG,EAAI,KAAK,EACT8jG,EAAe9jG,EAAE,qBAAqB,EAAI,IAAIkxB,EAAK,IAAI,IAC7Dtf,EAAI,iBAAiB,QAAS,IAAMtZ,EAAOwrG,CAAY,CAAC,EACxDlyF,EAAI,iBAAiB,QAAS,IAAMtZ,EAAQ,GAC5CsZ,EAAI,iBAAiB,OAAQ,IAAM,CACjC,MAAMrC,EAAWqC,EAAI,SACrB,GAAI,CAACrC,GAAY,CAACA,EAAS,SACzB,OAAOjX,EAAOiX,GAAYA,EAAS,OAASA,EAAS,MAAM,QAAUA,EAAS,MAAM,QAAUu0F,CAAY,EAE5GzrG,EAAQ,CACN,QAASkX,EAAS,GAC1B,CAAO,CACP,CAAK,EACGqC,EAAI,QACNA,EAAI,OAAO,iBAAiB,WAAaC,GAAQ,CAC3CA,EAAI,mBACNywF,EAAO,YAAczwF,EAAI,MACzBywF,EAAO,SAAWzwF,EAAI,OAEhC,CAAO,CAEJ,CAMD,aAAaqf,EAAM,CACjB,MAAMt1B,EAAO,IAAI,SACjBA,EAAK,OAAO,SAAUs1B,CAAI,EAC1Bt1B,EAAK,OAAO,cAAeynG,GAAc,GACzC,KAAK,IAAI,KAAKznG,CAAI,CACnB,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EClJA,SAASmoG,GAAuB7gD,EAAQ1sB,EAAQnmC,EAAS2zG,EAAmB,CAC1E,IAAIp9G,EACA0/F,EAAU,KACV,OAAO0d,GAAqB,WAC9Bp9G,EAAWo9G,GAEX1d,EAAUpjC,EAAO,SAAS,IAAI8gD,CAAiB,EAC/Cp9G,EAAW,IAAM,CACfs8D,EAAO,QAAQ8gD,CAAiB,CACtC,GAEE9gD,EAAO,MAAM,SAAS,GAAG,cAAe,CAACrxC,EAAKoyE,IAAU,CACtD,GAAIqC,GAAW,CAACA,EAAQ,WAAa,CAAC9vD,EAAO,UAC3C,OAEF,MAAMiW,EAAQ3kD,GAAMo7D,EAAO,MAAM,SAAS,UAAU,UAAS,CAAE,EAI/D,GAHI,CAACzW,EAAM,aAGPw3C,EAAM,QAAU,CAACA,EAAM,QACzB,OAEF,MAAMggB,EAAU,MAAM,KAAK/gD,EAAO,MAAM,SAAS,OAAO,WAAU,CAAE,EAC9DmiB,EAAQ4+B,EAAQ,CAAC,EACvB,GAAIA,EAAQ,QAAU,GAAK5+B,EAAM,OAAS,UAAYA,EAAM,MAAQ,SAAWA,EAAM,QAAU,EAC7F,OAEF,MAAM6+B,EAAgB7+B,EAAM,SAAS,OAOrC,GANI6+B,EAAc,GAAG,UAAW,WAAW,GAGvCA,EAAc,GAAG,UAAW,UAAU,GAAK,OAAOF,GAAsB,YAAc,CAAC,CAAC,eAAgB,eAAgB,UAAU,EAAE,SAASA,CAAiB,GAG9J1d,GAAWA,EAAQ,QAAU,GAC/B,OAEF,MAAM6d,EAAYD,EAAc,SAAS,CAAC,EACpCE,EAAiBlhD,EAAO,MAAM,cAAcihD,CAAS,EAC3D,GAAI,CAACC,EAAe,cAAc33D,CAAK,GAAK,CAACA,EAAM,IAAI,QAAQ23D,EAAe,GAAG,EAC/E,OAEF,MAAMp3G,EAAQqD,EAAQ,KAAK8zG,EAAU,KAAK,OAAO,EAAG13D,EAAM,IAAI,MAAM,CAAC,EAChEz/C,GAGLk2D,EAAO,MAAM,cAAe8G,GAAW,CACrC,MAAM54D,EAAQ44D,EAAO,iBAAiBk6C,EAAe,CAAC,EAChD78F,EAAM2iD,EAAO,iBAAiBk6C,EAAel3G,EAAM,CAAC,EAAE,MAAM,EAC5Dq3G,EAAS,IAAIlE,GAAU/uG,EAAOiW,CAAG,EAEvC,GADmBzgB,EAAS,CAAE,MAAAoG,CAAO,KAClB,GAAO,CACxBg9D,EAAO,OAAOq6C,CAAM,EACpB,MAAMC,EAAiBphD,EAAO,MAAM,SAAS,UAAU,gBACjDk9C,EAAap2C,EAAO,cAAck6C,CAAa,EACjDA,EAAc,SAAW,CAAC9D,EAAW,QAAQkE,CAAc,GAAK,CAAClE,EAAW,cAAckE,EAAgB,EAAI,GAChHt6C,EAAO,OAAOk6C,CAAa,CAE9B,CACDG,EAAO,OAAM,EACbnhD,EAAO,MAAM,cAAc,IAAM,CACVA,EAAO,QAAQ,IAAI,QAAQ,EACnC,uBAAsB,CAC3C,CAAO,CACP,CAAK,CACL,CAAG,CACH,CAGA,SAASqhD,GAAwBrhD,EAAQ1sB,EAAQguE,EAAsBC,EAAgB,CACrF,IAAI7pB,EACA+R,EACA6X,aAAgC,OAClC5pB,EAAS4pB,EAET7X,EAAe6X,EAEjB7X,EAAeA,IAAkB76F,GAAS,CACxC,IAAItB,EACJ,MAAMmS,EAAS,GACTykC,EAAS,GACf,MAAQ52C,EAASoqF,EAAO,KAAK9oF,CAAI,KAAO,MAClC,EAAAtB,GAAUA,EAAO,OAAS,IADc,CAI5C,GAAI,CAAE,MAAAuH,EAAO,IAAK2sG,EAAS,IAAK7iG,EAAS,IAAK8iG,CAAU,EAAGn0G,EAC3D,MAAMo0G,EAAQF,EAAU7iG,EAAU8iG,EAClC5sG,GAASvH,EAAO,CAAC,EAAE,OAASo0G,EAAM,OAClC,MAAMC,EAAW,CACf9sG,EACAA,EAAQ2sG,EAAQ,MACxB,EACYI,EAAS,CACb/sG,EAAQ2sG,EAAQ,OAAS7iG,EAAQ,OACjC9J,EAAQ2sG,EAAQ,OAAS7iG,EAAQ,OAAS8iG,EAAS,MAC3D,EACMhiG,EAAO,KAAKkiG,CAAQ,EACpBliG,EAAO,KAAKmiG,CAAM,EAClB19D,EAAO,KAAK,CAACrvC,EAAQ2sG,EAAQ,OAAQ3sG,EAAQ2sG,EAAQ,OAAS7iG,EAAQ,MAAM,CAAC,CAC9E,CACD,MAAO,CACL,OAAAc,EACA,OAAAykC,CACN,CACA,GACE8b,EAAO,MAAM,SAAS,GAAG,cAAe,CAACrxC,EAAKoyE,IAAU,CACtD,GAAIA,EAAM,QAAU,CAACA,EAAM,SAAW,CAACztD,EAAO,UAC5C,OAEF,MAAMy8B,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UACjC,GAAI,CAACn0D,EAAU,YACb,OAEF,MAAMmlG,EAAU,MAAM,KAAKhxC,EAAM,SAAS,OAAO,WAAU,CAAE,EACvDoS,EAAQ4+B,EAAQ,CAAC,EACvB,GAAIA,EAAQ,QAAU,GAAK5+B,EAAM,OAAS,UAAYA,EAAM,MAAQ,SAAWA,EAAM,QAAU,EAC7F,OAEF,MAAM0/B,EAAQjmG,EAAU,MAClBwhB,EAAQykF,EAAM,OACd,CAAE,KAAAjzG,EAAM,MAAA26C,CAAO,EAAGu4D,GAAiB/xC,EAAM,YAAYA,EAAM,iBAAiB3yC,EAAO,CAAC,EAAGykF,CAAK,EAAG9xC,CAAK,EACpGgyC,EAAatY,EAAa76F,CAAI,EAC9BozG,EAAiBC,GAAmB14D,EAAM,MAAOw4D,EAAW,OAAQhyC,CAAK,EACzEmyC,EAAiBD,GAAmB14D,EAAM,MAAOw4D,EAAW,OAAQhyC,CAAK,EACzEiyC,EAAe,QAAUE,EAAe,QAG9CnyC,EAAM,cAAejJ,GAAW,CAE9B,GADmBy6C,EAAez6C,EAAQk7C,CAAc,IACrC,GAGnB,WAAWb,KAAUe,EAAe,UAClCp7C,EAAO,OAAOq6C,CAAM,EAEtBpxC,EAAM,cAAc,IAAM,CACH/P,EAAO,QAAQ,IAAI,QAAQ,EACnC,uBAAsB,CAC3C,CAAO,EACP,CAAK,CACL,CAAG,CACH,CACA,SAASiiD,GAAmB/zG,EAAOi0G,EAAQpyC,EAAO,CAChD,OAAOoyC,EAAO,OAAQrgH,GAAUA,EAAM,CAAC,IAAM,QAAUA,EAAM,CAAC,IAAM,MAAM,EAAE,IAAKA,GACxEiuE,EAAM,YAAY7hE,EAAM,aAAapM,EAAM,CAAC,CAAC,EAAGoM,EAAM,aAAapM,EAAM,CAAC,CAAC,CAAC,CACpF,CACH,CACA,SAASggH,GAAiBv4D,EAAOwmB,EAAO,CACtC,IAAI7hE,EAAQq7C,EAAM,MAQlB,MAAO,CAAE,KAPI,MAAM,KAAKA,EAAM,SAAU,GAAE,OAAO,CAAC2/C,EAAWrmG,IACvD,EAAEA,EAAK,GAAG,OAAO,GAAKA,EAAK,GAAG,YAAY,IAAMA,EAAK,aAAa,MAAM,GAC1EqL,EAAQ6hE,EAAM,oBAAoBltE,CAAI,EAC/B,IAEFqmG,EAAYrmG,EAAK,KACvB,EAAE,EACU,MAAOktE,EAAM,YAAY7hE,EAAOq7C,EAAM,GAAG,EAC1D,CAGA,IAAI64D,GAAa,cAAcv2B,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAAC6b,EAAM,CACf,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CAID,WAAY,CACV,KAAK,oBAAmB,EACxB,KAAK,2BAA0B,EAC/B,KAAK,uBAAsB,EAC3B,KAAK,0BAAyB,EAC9B,KAAK,yBAAwB,EAC7B,KAAK,8BAA6B,CACnC,CAUD,qBAAsB,CACpB,MAAM2a,EAAW,KAAK,OAAO,SACzBA,EAAS,IAAI,cAAc,GAC7BxB,GAAuB,KAAK,OAAQ,KAAM,WAAY,cAAc,EAElEwB,EAAS,IAAI,cAAc,GAC7BxB,GAAuB,KAAK,OAAQ,KAAM,aAAc,cAAc,EAEpEwB,EAAS,IAAI,UAAU,GACzBxB,GAAuB,KAAK,OAAQ,KAAM,cAAe,UAAU,EAEjEwB,EAAS,IAAI,eAAe,GAC9BxB,GAAuB,KAAK,OAAQ,KAAM,kBAAmB,IAAM,CACjE,KAAK,OAAO,QAAQ,UAAU,EAC9B,KAAK,OAAO,QAAQ,eAAe,CAC3C,CAAO,CAEJ,CAcD,4BAA6B,CAC3B,MAAMwB,EAAW,KAAK,OAAO,SAC7B,GAAIA,EAAS,IAAI,MAAM,EAAG,CACxB,MAAMC,EAAeC,GAAuC,KAAK,OAAQ,MAAM,EAC/ElB,GAAwB,KAAK,OAAQ,KAAM,gCAAiCiB,CAAY,EACxFjB,GAAwB,KAAK,OAAQ,KAAM,4BAA6BiB,CAAY,CACrF,CACD,GAAID,EAAS,IAAI,QAAQ,EAAG,CAC1B,MAAMG,EAAiBD,GAAuC,KAAK,OAAQ,QAAQ,EACnFlB,GAAwB,KAAK,OAAQ,KAAM,6BAA8BmB,CAAc,EACvFnB,GAAwB,KAAK,OAAQ,KAAM,0BAA2BmB,CAAc,CACrF,CACD,GAAIH,EAAS,IAAI,MAAM,EAAG,CACxB,MAAMI,EAAeF,GAAuC,KAAK,OAAQ,MAAM,EAC/ElB,GAAwB,KAAK,OAAQ,KAAM,kBAAmBoB,CAAY,CAC3E,CACD,GAAIJ,EAAS,IAAI,eAAe,EAAG,CACjC,MAAMK,EAAwBH,GAAuC,KAAK,OAAQ,eAAe,EACjGlB,GAAwB,KAAK,OAAQ,KAAM,oBAAqBqB,CAAqB,CACtF,CACF,CAUD,wBAAyB,CACvB,MAAMtf,EAAU,KAAK,OAAO,SAAS,IAAI,SAAS,EAC9CA,GACFA,EAAQ,cAAc,OAAQziG,GAASA,EAAK,MAAM,gBAAgB,CAAC,EAAE,QAASgiH,GAAc,CAC1F,MAAMC,EAAQD,EAAU,CAAC,EACnBx1G,EAAU,IAAI,OAAO,OAAOy1G,CAAK,QAAQ,EAC/C/B,GAAuB,KAAK,OAAQ,KAAM1zG,EAAS,IAAM,CACvD,GAAI,CAACi2F,EAAQ,WAAaA,EAAQ,QAAUuf,EAC1C,MAAO,GAET,KAAK,OAAO,QAAQ,UAAW,CAAE,MAAOA,CAAS,CAAE,CAC7D,CAAS,CACT,CAAO,CAEJ,CAOD,2BAA4B,CACtB,KAAK,OAAO,SAAS,IAAI,YAAY,GACvC9B,GAAuB,KAAK,OAAQ,KAAM,QAAS,YAAY,CAElE,CAOD,0BAA2B,CACzB,MAAM7gD,EAAS,KAAK,OACdpkD,EAAYokD,EAAO,MAAM,SAAS,UACpCA,EAAO,SAAS,IAAI,WAAW,GACjC6gD,GAAuB7gD,EAAQ,KAAM,QAAS,IAAM,CAClD,GAAIpkD,EAAU,mBAAmB,OAAO,GAAG,UAAW,UAAU,EAC9D,MAAO,GAET,KAAK,OAAO,QAAQ,YAAa,CAC/B,0BAA2B,EACrC,CAAS,CACT,CAAO,CAEJ,CAOD,+BAAgC,CAC1B,KAAK,OAAO,SAAS,IAAI,gBAAgB,GAC3CilG,GAAuB,KAAK,OAAQ,KAAM,QAAS,gBAAgB,CAEtE,CACH,EACA,SAAS0B,GAAuCviD,EAAQ6iD,EAAc,CACpE,MAAO,CAAC/7C,EAAQk7C,IAAmB,CAEjC,GAAI,CADYhiD,EAAO,SAAS,IAAI6iD,CAAY,EACnC,UACX,MAAO,GAET,MAAMC,EAAc9iD,EAAO,MAAM,OAAO,eAAegiD,EAAgBa,CAAY,EACnF,UAAWt5D,KAASu5D,EAClBh8C,EAAO,aAAa+7C,EAAc,GAAMt5D,CAAK,EAE/Cud,EAAO,yBAAyB+7C,CAAY,CAChD,CACA,CAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECnVA,IAAIE,GAAmB,cAAcjiB,EAAQ,CAI3C,YAAY9gC,EAAQ6iD,EAAc,CAChC,MAAM7iD,CAAM,EACZ,KAAK,aAAe6iD,CACrB,CAID,SAAU,CACR,MAAM9yC,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SAClB,KAAK,MAAQ,KAAK,gCAClB,KAAK,UAAYA,EAAM,OAAO,0BAA0BjtE,EAAI,UAAW,KAAK,YAAY,CACzF,CAqBD,QAAQiB,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MAEpBn0D,EADMm0D,EAAM,SACI,UAChB/vE,EAAQ+D,EAAQ,aAAe,OAAS,CAAC,KAAK,MAAQA,EAAQ,WACpEgsE,EAAM,OAAQjJ,GAAW,CACvB,GAAIlrD,EAAU,YACR5b,EACF8mE,EAAO,sBAAsB,KAAK,aAAc,EAAI,EAEpDA,EAAO,yBAAyB,KAAK,YAAY,MAE9C,CACL,MAAMm6B,EAASlxB,EAAM,OAAO,eAAen0D,EAAU,UAAW,EAAE,KAAK,YAAY,EACnF,UAAW2tC,KAAS03C,EACdjhG,EACF8mE,EAAO,aAAa,KAAK,aAAc9mE,EAAOupD,CAAK,EAEnDud,EAAO,gBAAgB,KAAK,aAAcvd,CAAK,CAGpD,CACP,CAAK,CACF,CAOD,+BAAgC,CAC9B,MAAMwmB,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACfn0D,EAAYm0D,EAAM,SAAS,UACjC,GAAIn0D,EAAU,YACZ,OAAOA,EAAU,aAAa,KAAK,YAAY,EAEjD,UAAW2tC,KAAS3tC,EAAU,YAC5B,UAAW+6B,KAAQ4S,EAAM,WACvB,GAAIoa,EAAO,eAAehtB,EAAM,KAAK,YAAY,EAC/C,OAAOA,EAAK,aAAa,KAAK,YAAY,EAIhD,MAAO,EACR,CACH,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC9EA,IAAIqsE,GAAO,OACPC,GAAc,cAAcp3B,EAAO,CAIrC,WAAW,YAAa,CACtB,MAAO,aACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACpBA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiBgjD,EAAI,CAAE,EAC7DhjD,EAAO,MAAM,OAAO,uBAAuBgjD,GAAM,CAC/C,aAAc,GACd,YAAa,EACnB,CAAK,EACDhjD,EAAO,WAAW,mBAAmB,CACnC,MAAOgjD,GACP,KAAM,SACN,WAAY,CACV,IACClV,GAAgB,CACf,MAAMoV,EAAapV,EAAY,SAAS,aAAa,EACrD,OAAKoV,IAGDA,GAAc,QAAU,OAAOA,CAAU,GAAK,KACzC,CACL,KAAM,GACN,OAAQ,CAAC,aAAa,CACpC,EANmB,IASV,CACF,CACP,CAAK,EACDljD,EAAO,SAAS,IAAIgjD,GAAM,IAAID,GAAiB/iD,EAAQgjD,EAAI,CAAC,EAC5DhjD,EAAO,WAAW,IAAI,SAAUgjD,EAAI,CACrC,CACH,EAGIG,GAAQ,OACRC,GAAS,cAAcv3B,EAAO,CAIhC,WAAW,YAAa,CACtB,MAAO,QACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAImjD,GAAQnqC,GAAW,CAChD,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAImjD,EAAK,EACnC9iG,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,MAAO,EAAE,MAAM,EACf,KAAMigE,GAAM,KACZ,UAAW,SACX,QAAS,GACT,aAAc,EACtB,CAAO,EACDjgE,EAAK,KAAK,OAAQ,WAAW,EAAE,GAAG+iF,EAAS,QAAS,WAAW,EAC/D,KAAK,SAAS/iF,EAAM,UAAW,IAAM,CACnC2/C,EAAO,QAAQmjD,EAAK,EACpBnjD,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM3/C,CACb,CAAK,CACF,CACH,EAGIgjG,GAAO,cAAcx3B,EAAO,CAI9B,WAAW,UAAW,CACpB,MAAO,CAACo3B,GAAaG,EAAM,CAC5B,CAID,WAAW,YAAa,CACtB,MAAO,MACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ocCjGA,IAAIE,GAAS,SACTC,GAAgB,cAAc13B,EAAO,CAIvC,WAAW,YAAa,CACtB,MAAO,eACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACpBA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiBsjD,EAAM,CAAE,EAC/DtjD,EAAO,MAAM,OAAO,uBAAuBsjD,GAAQ,CACjD,aAAc,GACd,YAAa,EACnB,CAAK,EACDtjD,EAAO,WAAW,mBAAmB,CACnC,MAAOsjD,GACP,KAAM,IACN,WAAY,CACV,KACA,CACE,OAAQ,CACN,aAAc,QACf,CACF,CACF,CACP,CAAK,EACDtjD,EAAO,SAAS,IAAIsjD,GAAQ,IAAIP,GAAiB/iD,EAAQsjD,EAAM,CAAC,EAChEtjD,EAAO,WAAW,IAAI,SAAUsjD,EAAM,CACvC,CACH,EAIIE,GAAU,SACVC,GAAW,cAAc53B,EAAO,CAIlC,WAAW,YAAa,CACtB,MAAO,UACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAIwjD,GAAUxqC,GAAW,CAClD,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAIwjD,EAAO,EACrCnjG,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,MAAO,EAAE,QAAQ,EACjB,KAAMqjG,GACN,UAAW,SACX,QAAS,GACT,aAAc,EACtB,CAAO,EACDrjG,EAAK,KAAK,OAAQ,WAAW,EAAE,GAAG+iF,EAAS,QAAS,WAAW,EAC/D,KAAK,SAAS/iF,EAAM,UAAW,IAAM,CACnC2/C,EAAO,QAAQwjD,EAAO,EACtBxjD,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM3/C,CACb,CAAK,CACF,CACH,EAGIsjG,GAAS,cAAc93B,EAAO,CAIhC,WAAW,UAAW,CACpB,MAAO,CAAC03B,GAAeE,EAAQ,CAChC,CAID,WAAW,YAAa,CACtB,MAAO,QACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EChFA,IAAIG,GAAoB,cAAc9iB,EAAQ,CAI5C,SAAU,CACR,KAAK,MAAQ,KAAK,YAClB,KAAK,UAAY,KAAK,eACvB,CAWD,QAAQ/8F,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACfn0D,EAAYm0D,EAAM,SAAS,UAC3BqsC,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACjD5b,EAAQ+D,EAAQ,aAAe,OAAS,CAAC,KAAK,MAAQA,EAAQ,WACpEgsE,EAAM,OAAQjJ,GAAW,CACvB,GAAI,CAAC9mE,EACH,KAAK,aAAa8mE,EAAQs1C,EAAO,OAAOyH,EAAS,CAAC,MAC7C,CACL,MAAMC,EAAgB1H,EAAO,OAAQh/E,GAC5BymF,GAAUzmF,CAAK,GAAK2mF,GAAiBpgD,EAAQvmC,CAAK,CAC1D,EACD,KAAK,YAAY0pC,EAAQg9C,CAAa,CACvC,CACP,CAAK,CACF,CAID,WAAY,CACV,MAAMloG,EAAY,KAAK,OAAO,MAAM,SAAS,UACvCooG,EAAap/G,GAAMgX,EAAU,kBAAmB,GACtD,MAAO,CAAC,EAAEooG,GAAcH,GAAUG,CAAU,EAC7C,CAMD,eAAgB,CACd,GAAI,KAAK,MACP,MAAO,GAET,MAAMpoG,EAAY,KAAK,OAAO,MAAM,SAAS,UACvC+nD,EAAS,KAAK,OAAO,MAAM,OAC3BqgD,EAAap/G,GAAMgX,EAAU,kBAAmB,GACtD,OAAKooG,EAGED,GAAiBpgD,EAAQqgD,CAAU,EAFjC,EAGV,CAQD,aAAal9C,EAAQs1C,EAAQ,CAC3B6H,GAAuBn9C,EAAQs1C,CAAM,EAAE,QAAO,EAAG,QAAS8H,GAAe,CACvE,GAAIA,EAAW,MAAM,WAAaA,EAAW,IAAI,QAAS,CACxDp9C,EAAO,OAAOo9C,EAAW,MAAM,MAAM,EACrC,MACD,CACD,GAAIA,EAAW,MAAM,UAAW,CAC9B,MAAMjZ,EAAiBnkC,EAAO,qBAAqBo9C,EAAW,MAAM,MAAM,EAC1Ep9C,EAAO,KAAKo9C,EAAYjZ,CAAc,EACtC,MACD,CACIiZ,EAAW,IAAI,SAClBp9C,EAAO,MAAMo9C,EAAW,GAAG,EAE7B,MAAMC,EAAgBr9C,EAAO,oBAAoBo9C,EAAW,IAAI,MAAM,EACtEp9C,EAAO,KAAKo9C,EAAYC,CAAa,CAC3C,CAAK,CACF,CAID,YAAYr9C,EAAQs1C,EAAQ,CAC1B,MAAMgI,EAAgB,GACtBH,GAAuBn9C,EAAQs1C,CAAM,EAAE,QAAO,EAAG,QAAS8H,GAAe,CACvE,IAAIG,EAAQR,GAAUK,EAAW,KAAK,EACjCG,IACHA,EAAQv9C,EAAO,cAAc,YAAY,EACzCA,EAAO,KAAKo9C,EAAYG,CAAK,GAE/BD,EAAc,KAAKC,CAAK,CAC9B,CAAK,EACDD,EAAc,QAAS,EAAC,OAAO,CAACE,EAAcC,IACxCD,EAAa,aAAeC,GAC9Bz9C,EAAO,MAAMA,EAAO,oBAAoBw9C,CAAY,CAAC,EAC9CA,GAEFC,CACR,CACF,CACH,EACA,SAASV,GAAUW,EAAmB,CACpC,OAAOA,EAAkB,OAAO,MAAQ,aAAeA,EAAkB,OAAS,IACpF,CACA,SAASP,GAAuBn9C,EAAQs1C,EAAQ,CAC9C,IAAI9f,EACAv5F,EAAI,EACR,MAAMk+F,EAAS,GACf,KAAOl+F,EAAIq5G,EAAO,QAAQ,CACxB,MAAMh/E,EAAQg/E,EAAOr5G,CAAC,EAChB0hH,EAAYrI,EAAOr5G,EAAI,CAAC,EACzBu5F,IACHA,EAAgBx1B,EAAO,qBAAqB1pC,CAAK,IAE/C,CAACqnF,GAAarnF,EAAM,aAAeqnF,KACrCxjB,EAAO,KAAKn6B,EAAO,YAAYw1B,EAAex1B,EAAO,oBAAoB1pC,CAAK,CAAC,CAAC,EAChFk/D,EAAgB,MAElBv5F,GACD,CACD,OAAOk+F,CACT,CACA,SAAS8iB,GAAiBpgD,EAAQvmC,EAAO,CACvC,MAAMsnF,EAAc/gD,EAAO,WAAWvmC,EAAM,OAAQ,YAAY,EAC1DunF,EAAqBhhD,EAAO,WAAW,CAAC,QAAS,YAAY,EAAGvmC,CAAK,EAC3E,OAAOsnF,GAAeC,CACxB,CAGA,IAAIC,GAAoB,cAAc/4B,EAAO,CAI3C,WAAW,YAAa,CACtB,MAAO,mBACR,CAID,WAAW,UAAW,CACpB,MAAO,CAAC6Y,GAAOgD,EAAM,CACtB,CAID,MAAO,CACL,MAAM1nC,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OAC5BA,EAAO,SAAS,IAAI,aAAc,IAAI4jD,GAAkB5jD,CAAM,CAAC,EAC/D2D,EAAO,SAAS,aAAc,CAC5B,eAAgB,YACtB,CAAK,EACD3D,EAAO,WAAW,iBAAiB,CAAE,MAAO,aAAc,KAAM,YAAY,CAAE,EAC9EA,EAAO,MAAM,SAAS,kBAAmB8G,GAAW,CAClD,MAAMi6C,EAAU/gD,EAAO,MAAM,SAAS,OAAO,aAC7C,UAAWmiB,KAAS4+B,EAClB,GAAI5+B,EAAM,MAAQ,SAAU,CAC1B,MAAM/uD,EAAU+uD,EAAM,SAAS,UAC/B,GAAI,CAAC/uD,EACH,SAEF,GAAIA,EAAQ,GAAG,UAAW,YAAY,GAAKA,EAAQ,QACjD,OAAA0zC,EAAO,OAAO1zC,CAAO,EACd,GACF,GAAIA,EAAQ,GAAG,UAAW,YAAY,GAAK,CAACuwC,EAAO,WAAWwe,EAAM,SAAU/uD,CAAO,EAC1F,OAAA0zC,EAAO,OAAO1zC,CAAO,EACd,GACF,GAAIA,EAAQ,GAAG,SAAS,EAAG,CAChC,MAAMm2B,EAAQud,EAAO,cAAc1zC,CAAO,EAC1C,UAAWmkB,KAASgS,EAAM,WACxB,GAAIhS,EAAM,GAAG,UAAW,YAAY,GAAK,CAACosB,EAAO,WAAWmD,EAAO,qBAAqBvvB,CAAK,EAAGA,CAAK,EACnG,OAAAuvB,EAAO,OAAOvvB,CAAK,EACZ,EAGZ,CACX,SAAmB4qC,EAAM,MAAQ,SAAU,CACjC,MAAM/zE,EAAS+zE,EAAM,SAAS,OAC9B,GAAI/zE,EAAO,GAAG,UAAW,YAAY,GAAKA,EAAO,QAC/C,OAAA04D,EAAO,OAAO14D,CAAM,EACb,EAEV,CAEH,MAAO,EACb,CAAK,EACD,MAAMu2F,EAAe,KAAK,OAAO,QAAQ,KAAK,SACxC/oF,EAAYokD,EAAO,MAAM,SAAS,UAClC6kD,EAAoB7kD,EAAO,SAAS,IAAI,YAAY,EAC1D,KAAK,SAAS2kC,EAAc,QAAS,CAACh2E,EAAKjW,IAAS,CAClD,GAAI,CAACkD,EAAU,aAAe,CAACipG,EAAkB,MAC/C,OAEqBjpG,EAAU,gBAAe,EAAG,OAChC,UACjBokD,EAAO,QAAQ,YAAY,EAC3BA,EAAO,QAAQ,KAAK,uBACpBtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,EAEhB,EAAO,CAAE,QAAS,YAAY,CAAE,EAC5B,KAAK,SAASg2E,EAAc,SAAU,CAACh2E,EAAKjW,IAAS,CACnD,GAAIA,EAAK,WAAa,YAAc,CAACkD,EAAU,aAAe,CAACipG,EAAkB,MAC/E,OAEF,MAAMC,EAAiBlpG,EAAU,gBAAe,EAAG,OAC/CkpG,EAAe,SAAW,CAACA,EAAe,kBAC5C9kD,EAAO,QAAQ,YAAY,EAC3BA,EAAO,QAAQ,KAAK,uBACpBtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,EAEhB,EAAO,CAAE,QAAS,YAAY,CAAE,CAC7B,CACH,EAIIo2F,GAAe,cAAcl5B,EAAO,CAItC,WAAW,YAAa,CACtB,MAAO,cACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAI,aAAegZ,GAAW,CACvD,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,YAAY,EAC1C+b,EAAa,IAAIrC,GAAWV,CAAM,EACxC,OAAA+C,EAAW,IAAI,CACb,MAAO,EAAE,aAAa,EACtB,KAAMuE,GAAM,MACZ,QAAS,GACT,aAAc,EACtB,CAAO,EACDvE,EAAW,KAAK,OAAQ,WAAW,EAAE,GAAGqnB,EAAS,QAAS,WAAW,EACrE,KAAK,SAASrnB,EAAY,UAAW,IAAM,CACzC/b,EAAO,QAAQ,YAAY,EAC3BA,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM+b,CACb,CAAK,CACF,CACH,EAGIipC,GAAa,cAAcn5B,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAAC+4B,GAAmBG,EAAY,CACxC,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC5RA,IAAIE,GAA6B,cAAcp5B,EAAO,CAIpD,WAAW,YAAa,CACtB,MAAO,4BACR,CAID,WAAW,UAAW,CACpB,MAAO,CAAC,gBAAiBkzB,EAAc,CACxC,CAID,MAAO,CACL,MAAM/+C,EAAS,KAAK,OACdklD,EAAgBllD,EAAO,QAAQ,IAAI,eAAe,EAClD5tD,EAAQ8yG,EAAc,MACtBC,EAAYD,EAAc,UAChC,GAAI,CAAC9yG,EACH,OAEF,MAAMwuF,EAAoB5gC,EAAO,QAAQ,IAAI,mBAAmB,EAChE,KAAK,eAAiB4gC,EAAkB,oBAAoBxuF,EAAO+yG,CAAS,EAC5EnlD,EAAO,QAAQ,IAAI++C,EAAc,EAAE,oBAAuBK,GACjD,IAAIgG,GAAQ,KAAK,eAAgBhG,CAAM,CAEjD,CACH,EACIgG,GAAU,KAAM,CAClB,YAAYC,EAAejG,EAAQ,CACjC,KAAK,cAAgBiG,EACrB,KAAK,OAASjG,CACf,CACD,QAAS,CACP,OAAO,KAAK,OAAO,KAAK,KAAMpxE,IAC5B,KAAK,aAAe,KAAK,cAAc,OAAOA,CAAI,EAClD,KAAK,aAAa,GAAG,WAAY,CAACrf,EAAKjW,IAAS,CAC9C,KAAK,OAAO,YAAcA,EAAK,MAC/B,KAAK,OAAO,SAAWA,EAAK,QACpC,CAAO,EACM,KAAK,aAAa,OAC1B,CACF,CACD,OAAQ,CACN,KAAK,aAAa,OACnB,CACH,EAGI4sG,GAAY,cAAcz5B,EAAO,CAInC,WAAW,YAAa,CACtB,MAAO,WACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACo5B,GAA4B,aAAa,CAClD,CAID,MAAO,CACL,MAAMjlD,EAAS,KAAK,OAChB,CAACA,EAAO,QAAQ,IAAI,mBAAmB,GAAK,CAACA,EAAO,QAAQ,IAAI,oBAAoB,GACtF2b,GAAW,mCAAoC3b,CAAM,CAExD,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECpFA,IAAIulD,GAAmB,cAAczkB,EAAQ,CAC3C,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,2BAA6B,EACnC,CAID,SAAU,CACR,MAAM+P,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACjB3yC,EAAQx4B,GAAMnC,EAAS,UAAU,kBAAmB,GAC1D,KAAK,MAAQ,CAAC,CAAC26B,GAASA,EAAM,GAAG,UAAW,WAAW,EACvD,KAAK,UAAY,CAAC,CAACA,GAASooF,GAAwBpoF,EAAO2yC,EAAM,MAAM,CACxE,CAUD,QAAQhsE,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACjBn0D,EAAY7X,EAAQ,WAAatB,EAAS,UAC3CstE,EAAM,UAAUn0D,CAAS,GAG9Bm0D,EAAM,OAAQjJ,GAAW,CACvB,MAAMs1C,EAASxgG,EAAU,oBACzB,UAAWwhB,KAASg/E,EACd,CAACh/E,EAAM,GAAG,UAAW,WAAW,GAAKooF,GAAwBpoF,EAAO2yC,EAAM,MAAM,GAClFjJ,EAAO,OAAO1pC,EAAO,WAAW,CAG1C,CAAK,CACF,CACH,EACA,SAASooF,GAAwBpoF,EAAOumC,EAAQ,CAC9C,OAAOA,EAAO,WAAWvmC,EAAM,OAAQ,WAAW,GAAK,CAACumC,EAAO,SAASvmC,CAAK,CAC/E,CAGA,IAAIqoF,GAAyB,cAAc3kB,EAAQ,CACjD,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,2BAA6B,EACnC,CASD,QAAQj8D,EAAS,CACf,MAAMgsE,EAAQ,KAAK,OAAO,MACpBloE,EAAa9D,EAAQ,WAC3B,IAAIisB,EAAWjsB,EAAQ,SAClBgsE,EAAM,UAAU//C,CAAQ,GAG7B+/C,EAAM,OAAQjJ,GAAW,CAEvB,GADA92C,EAAW,KAAK,+BAA+BA,EAAU82C,CAAM,EAC3D,CAAC92C,EACH,OAEF,MAAM81E,EAAYh/B,EAAO,cAAc,WAAW,EAC9Cj/D,GACFkoE,EAAM,OAAO,qBAAqB+1B,EAAWj+F,EAAYi/D,CAAM,EAEjEiJ,EAAM,cAAc+1B,EAAW91E,CAAQ,EACvC82C,EAAO,aAAag/B,EAAW,IAAI,CACzC,CAAK,CACF,CAID,+BAA+B91E,EAAU82C,EAAQ,CAC/C,MAAMiJ,EAAQ,KAAK,OAAO,MAC1B,GAAIA,EAAM,OAAO,WAAW//C,EAAU,WAAW,EAC/C,OAAOA,EAET,MAAM01F,EAAgB31C,EAAM,OAAO,kBAAkB//C,EAAU,WAAW,EAC1E,GAAI,CAAC01F,EACH,OAAO,KAET,MAAMZ,EAAiB90F,EAAS,OAC1B21F,EAAgB51C,EAAM,OAAO,WAAW+0C,EAAgB,OAAO,EACrE,OAAIA,EAAe,SAAWa,GAAiB31F,EAAS,QAC/C+/C,EAAM,oBAAoB+0C,CAAc,EAE7C,CAACA,EAAe,SAAWa,GAAiB31F,EAAS,UAChD+/C,EAAM,qBAAqB+0C,CAAc,EAE3Ch+C,EAAO,MAAM92C,EAAU01F,CAAa,EAAE,QAC9C,CACH,EAGIE,GAAY,MAAMC,WAAmBh6B,EAAO,CAI9C,WAAW,YAAa,CACtB,MAAO,WACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACrBA,EAAO,SAAS,IAAI,YAAa,IAAIulD,GAAiBvlD,CAAM,CAAC,EAC7DA,EAAO,SAAS,IAAI,kBAAmB,IAAIylD,GAAuBzlD,CAAM,CAAC,EACzE+P,EAAM,OAAO,SAAS,YAAa,CAAE,eAAgB,QAAQ,CAAE,EAC/D/P,EAAO,WAAW,iBAAiB,CAAE,MAAO,YAAa,KAAM,GAAG,CAAE,EACpEA,EAAO,WAAW,IAAI,QAAQ,EAAE,iBAAiB,CAC/C,MAAO,CAAC8tC,EAAa,CAAE,OAAAhnC,KACjB,CAAC++C,GAAW,sBAAsB,IAAI/X,EAAY,IAAI,GAGtDA,EAAY,QACP,KAEFhnC,EAAO,cAAc,WAAW,EAEzC,KAAM,KACN,kBAAmB,KACzB,CAAK,CACF,CACH,EACA8+C,GAAU,sBAAwC,IAAI,IAAI,CACxD,aACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,IACF,CAAC,EACD,IAAIE,GAAoBF,GAKxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC3IA,IAAIG,GAAiB,cAAcjlB,EAAQ,CAOzC,YAAY9gC,EAAQgmD,EAAe,CACjC,MAAMhmD,CAAM,EACZ,KAAK,cAAgBgmD,CACtB,CAID,SAAU,CACR,MAAM5oF,EAAQx4B,GAAM,KAAK,OAAO,MAAM,SAAS,UAAU,kBAAiB,CAAE,EAC5E,KAAK,MAAQ,CAAC,CAACw4B,GAAS,KAAK,cAAc,SAASA,EAAM,IAAI,GAAKA,EAAM,KACzE,KAAK,UAAY,CAAC,CAACA,GAAS,KAAK,cAAc,KAAM6oF,GAAYC,GAAsB9oF,EAAO6oF,EAAS,KAAK,OAAO,MAAM,MAAM,CAAC,CACjI,CAQD,QAAQliH,EAAS,CACf,MAAMgsE,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACjBq1B,EAAerhG,EAAQ,MAC7BgsE,EAAM,OAAQjJ,GAAW,CACvB,MAAMs1C,EAAS,MAAM,KAAK35G,EAAS,UAAU,mBAAmB,EAAE,OAAQ26B,GACjE8oF,GAAsB9oF,EAAOgoE,EAAcr1B,EAAM,MAAM,CAC/D,EACD,UAAW3yC,KAASg/E,EACbh/E,EAAM,GAAG,UAAWgoE,CAAY,GACnCt+B,EAAO,OAAO1pC,EAAOgoE,CAAY,CAG3C,CAAK,CACF,CACH,EACA,SAAS8gB,GAAsB9oF,EAAO6oF,EAAStiD,EAAQ,CACrD,OAAOA,EAAO,WAAWvmC,EAAM,OAAQ6oF,CAAO,GAAK,CAACtiD,EAAO,SAASvmC,CAAK,CAC3E,CAGA,IAAI+oF,GAAsB,YACtBC,GAAiB,cAAcv6B,EAAO,CAIxC,WAAW,YAAa,CACtB,MAAO,gBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAO,UAAW,CAC9B,QAAS,CACP,CAAE,MAAO,YAAa,MAAO,YAAa,MAAO,sBAAwB,EACzE,CAAE,MAAO,WAAY,KAAM,KAAM,MAAO,YAAa,MAAO,qBAAuB,EACnF,CAAE,MAAO,WAAY,KAAM,KAAM,MAAO,YAAa,MAAO,qBAAuB,EACnF,CAAE,MAAO,WAAY,KAAM,KAAM,MAAO,YAAa,MAAO,qBAAuB,CACpF,CACP,CAAK,CACF,CAID,WAAW,UAAW,CACpB,MAAO,CAAC8lD,EAAiB,CAC1B,CAID,MAAO,CACL,MAAM9lD,EAAS,KAAK,OACdj8D,EAAUi8D,EAAO,OAAO,IAAI,iBAAiB,EAC7CgmD,EAAgB,GACtB,UAAWr9F,KAAU5kB,EACf4kB,EAAO,QAAU,cAGrBq3C,EAAO,MAAM,OAAO,SAASr3C,EAAO,MAAO,CACzC,eAAgB,QACxB,CAAO,EACDq3C,EAAO,WAAW,iBAAiBr3C,CAAM,EACzCq9F,EAAc,KAAKr9F,EAAO,KAAK,GAEjC,KAAK,wBAAwBq3C,CAAM,EACnCA,EAAO,SAAS,IAAI,UAAW,IAAI+lD,GAAe/lD,EAAQgmD,CAAa,CAAC,CACzE,CAID,WAAY,CACV,MAAMhmD,EAAS,KAAK,OACdqmD,EAAermD,EAAO,SAAS,IAAI,OAAO,EAC1Cj8D,EAAUi8D,EAAO,OAAO,IAAI,iBAAiB,EAC/CqmD,GACF,KAAK,SAASA,EAAc,eAAgB,CAAC13F,EAAKjW,IAAS,CACzD,MAAMosG,EAAiB9kD,EAAO,MAAM,SAAS,UAAU,iBAAkB,EAAC,OACxDj8D,EAAQ,KAAM4kB,GAAWm8F,EAAe,GAAG,UAAWn8F,EAAO,KAAK,CAAC,GACpE,CAACm8F,EAAe,GAAG,UAAWqB,EAAmB,GAAKrB,EAAe,aAAe,GACnGpsG,EAAK,OAAO,OAAOosG,EAAgBqB,EAAmB,CAEhE,CAAO,CAEJ,CAMD,wBAAwBnmD,EAAQ,CAC9BA,EAAO,WAAW,IAAI,QAAQ,EAAE,iBAAiB,CAC/C,MAAO,WACP,KAAM,KAGN,kBAAmByf,GAAmB,IAAM,CAClD,CAAK,CACF,CACH,EAGA,SAAS6mC,GAAoBtmD,EAAQ,CACnC,MAAM,EAAIA,EAAO,EACXumD,EAAkB,CACtB,UAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,EAC1B,YAAa,EAAE,WAAW,CAC9B,EACE,OAAOvmD,EAAO,OAAO,IAAI,iBAAiB,EAAE,IAAKr3C,GAAW,CAC1D,MAAMwwB,EAAQotE,EAAgB59F,EAAO,KAAK,EAC1C,OAAIwwB,GAASA,GAASxwB,EAAO,QAC3BA,EAAO,MAAQwwB,GAEVxwB,CACX,CAAG,CACH,CAIA,IAAI69F,GAAY,cAAc36B,EAAO,CAInC,WAAW,YAAa,CACtB,MAAO,WACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACXj8D,EAAUuiH,GAAoBtmD,CAAM,EACpCymD,EAAe,EAAE,gBAAgB,EACjCC,EAAkB,EAAE,SAAS,EACnC1mD,EAAO,GAAG,iBAAiB,IAAI,UAAYgZ,GAAW,CACpD,MAAM2tC,EAAS,GACTC,EAAkB,IAAI9xC,GACtB+xC,EAAiB7mD,EAAO,SAAS,IAAI,SAAS,EAC9C8mD,EAAmB9mD,EAAO,SAAS,IAAI,WAAW,EAClDqiD,EAAW,CAACwE,CAAc,EAChC,UAAWl+F,KAAU5kB,EAAS,CAC5B,MAAMyxE,EAAM,CACV,KAAM,SACN,MAAO,IAAIiW,GAAM,CACf,MAAO9iE,EAAO,MACd,MAAOA,EAAO,MACd,KAAM,gBACN,SAAU,EACtB,CAAW,CACX,EACYA,EAAO,QAAU,aACnB6sD,EAAI,MAAM,KAAK,MAAM,EAAE,GAAGsxC,EAAkB,OAAO,EACnDtxC,EAAI,MAAM,IAAI,cAAe,WAAW,EACxC6sC,EAAS,KAAKyE,CAAgB,IAE9BtxC,EAAI,MAAM,KAAK,MAAM,EAAE,GAAGqxC,EAAgB,QAAU7mH,GAAUA,IAAU2oB,EAAO,KAAK,EACpF6sD,EAAI,MAAM,IAAI,CACZ,YAAa,UACb,aAAc7sD,EAAO,KACjC,CAAW,GAEHi+F,EAAgB,IAAIpxC,CAAG,EACvBmxC,EAAOh+F,EAAO,KAAK,EAAIA,EAAO,KAC/B,CACD,MAAM81D,EAAeF,GAAevF,CAAM,EAC1C,OAAAkG,GAAkBT,EAAcmoC,EAAiB,CAC/C,UAAWF,EACX,KAAM,MACd,CAAO,EACDjoC,EAAa,WAAW,IAAI,CAC1B,UAAWioC,EACX,eAAgB,OAChB,KAAM,GACN,SAAU,GACV,QAASA,CACjB,CAAO,EACDjoC,EAAa,eAAe,CAC1B,WAAY,CACV,MAAO,CACL,qBACD,CACF,CACT,CAAO,EACDA,EAAa,KAAK,WAAW,EAAE,OAAO4jC,EAAU,YAAa,IAAI0E,IACxDA,EAAW,KAAMjiB,GAAcA,CAAS,CAChD,EACDrmB,EAAa,WAAW,KAAK,OAAO,EAAE,GAAGooC,EAAgB,QAASC,EAAkB,QAAS,CAAC9mH,EAAOgnH,IAAS,CAC5G,MAAMC,EAAajnH,GAASgnH,GAAQ,YAIpC,OAHI,OAAOC,GAAe,WAGtB,CAACN,EAAOM,CAAU,EACbR,EAEFE,EAAOM,CAAU,CAChC,CAAO,EACD,KAAK,SAASxoC,EAAc,UAAY9vD,GAAQ,CAC9C,KAAM,CAAE,YAAAm5E,EAAa,aAAAof,GAAiBv4F,EAAI,OAC1CqxC,EAAO,QAAQ8nC,EAAaof,EAAe,CAAE,MAAOA,CAAY,EAAK,MAAM,EAC3ElnD,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACMye,CACb,CAAK,CACF,CACH,EAII0oC,GAAU,cAAct7B,EAAO,CAIjC,WAAW,UAAW,CACpB,MAAO,CAACu6B,GAAgBI,EAAS,CAClC,CAID,WAAW,YAAa,CACtB,MAAO,SACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECtRA,IAAIY,GAAoB,cAAcjjB,EAAS,CAI7C,QAAQkjB,EAAS,CACf,KAAK,SAASA,EAAS,OAAQ,CAAC3qG,EAAO4nF,IAAa,CAClD,MAAM5a,EAAa4a,EAAS,OACxB,KAAK,iCAAiC5a,CAAU,GAGhDA,EAAW,SAAW,OACxB,KAAK,YAAY4a,CAAQ,CAEjC,EAAO,CAAE,WAAY,EAAI,CAAE,CACxB,CAID,cAAc+iB,EAAS,CACrB,KAAK,cAAcA,CAAO,CAC3B,CAQD,YAAY/iB,EAAU,CAChB,KAAK,YACP,KAAK,SAAS,KAAK,eAAe,EAClC,KAAK,SAAS,KAAK,cAAeA,CAAQ,EAE7C,CACH,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC/BA,SAASgjB,GAA6BxgD,EAAQ,CACrC,OAAAA,EAAO,uBAAuB,OAAQ,CAAE,MAAO,cAAkB,EAAAA,EAAO,mBAAmB,KAAK,CAAC,CAC1G,CACA,SAASygD,GAA4BzgD,EAAQ,CAC3C,OAAOA,EAAO,uBAAuB,SAAU,CAAE,MAAO,SAAW,CACjEA,EAAO,mBAAmB,KAAK,EAC/BA,EAAO,WAAW,UAAU,EAC7B,CACH,CACA,SAAS0gD,GAAyBxnD,EAAQynD,EAAgB,CACxD,MAAMC,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C2nD,EAA4B3nD,EAAO,QAAQ,IAAI,oBAAoB,GAAKA,EAAO,QAAQ,IAAI,mBAAmB,EACpH,OAAQ5sC,GACDs0F,EAAW,kBAAkBt0F,CAAO,EAGpCu0F,IAGav0F,EAAQ,SAAS,SAAS,GAAK,SAAWA,EAAQ,aAAas0F,EAAW,gBAAgB,EAAI,aAAe,iBAC7GD,EACT,KAJAG,EAAwBx0F,CAAO,EAH/B,KAWX,SAASw0F,EAAwBx0F,EAAS,CACxC,MAAMjmB,EAAU,CACd,KAAM,IAEJ,OAAAimB,EAAQ,aAAa,KAAK,IACpBjmB,EAAA,WAAa,CAAC,KAAK,GAEtBA,CACT,CACF,CACA,SAAS06G,GAA0ClkD,EAAQ/nD,EAAW,CACpE,MAAMooG,EAAap/G,GAAMgX,EAAU,kBAAmB,GAItD,MAHI,CAACooG,GAAcrgD,EAAO,SAASqgD,CAAU,GAGzCA,EAAW,SAAWA,EAAW,MAAQ,WACpC,aAEF,aACT,CACA,SAAS8D,GAAmB1kF,EAAM,CAChC,OAAIA,GAAQA,EAAK,SAAS,IAAI,EACrB,SAASA,CAAI,EAEf,IACT,CACA,SAAS2kF,GAA+Bja,EAAa,CACnD,MAAMiH,EAAa+S,GAAmBha,EAAY,SAAS,OAAO,CAAC,EAC7Dka,EAAcF,GAAmBha,EAAY,SAAS,QAAQ,CAAC,EAC9D,OAAC,EAAEiH,GAAciT,EAC1B,CAGA,IAAIC,GAAqC,yBACrCC,GAAa,cAAcr8B,EAAO,CACpC,aAAc,CACZ,MAAM,GAAG,SAAS,EACb,iBAAc,IAAK/S,GAAA,EAC1B,CAIA,WAAW,YAAa,CACf,kBACT,CAIA,QAAQssB,EAAc,CACpB,OAAO,KAAK,cAAcA,CAAY,GAAK,KAAK,aAAaA,CAAY,CAC3E,CAMA,kBAAkBhyE,EAAS,CACzB,MAAO,CAAC,CAACA,GAAWA,EAAQ,GAAG,UAAW,KAAK,CACjD,CAMA,iBAAiBA,EAAS,CACjB,OAAC,CAACA,GAAWA,EAAQ,GAAG,UAAW,QAAQ,GAAKA,EAAQ,SAAS,OAAO,CACjF,CA0BA,YAAYvrB,EAAa,GAAIwoG,EAAa,KAAM8X,EAAY,KAAMpkH,EAAU,GAAI,CAC9E,MAAMi8D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UAC3Bq4C,EAAsBC,GAA+BroD,EAAQqwC,GAAcz0F,EAAWusG,CAAS,EACxFtgH,EAAA,CACX,GAAG,OAAO,YAAY+T,EAAU,eAAe,EAC/C,GAAG/T,CAAA,EAEL,UAAWgvB,KAAiBhvB,EACrBkoE,EAAM,OAAO,eAAeq4C,EAAqBvxF,CAAa,GACjE,OAAOhvB,EAAWgvB,CAAa,EAG5B,OAAAk5C,EAAM,OAAQjJ,GAAW,CACxB,MAAE,cAAAwhD,EAAgB,EAAS,EAAAvkH,EAC3BwkH,EAAezhD,EAAO,cAAcshD,EAAqBvgH,CAAU,EAOzE,OANMkoE,EAAA,aAAaw4C,EAAclY,EAAY,KAAM,CACjD,aAAc,KAGd,oBAAqB,CAACA,GAAc+X,GAAuB,cAAgB,OAAS,OACrF,EACGG,EAAa,QACXD,GACF,KAAK,8BAA8BC,CAAY,EAE1CA,GAEF,KACR,CACH,CAOA,8BAA8BA,EAAc,CACpC,MAAAvkH,EAAMukH,EAAa,aAAa,KAAK,EACtCvkH,IAGDukH,EAAa,aAAa,OAAO,GAAKA,EAAa,aAAa,QAAQ,GAG5E,KAAK,OAAO,MAAM,OAAQzhD,GAAW,CACnC,MAAM0hD,EAAM,IAAIvoC,GAAe,OAAO,MACtC,KAAK,YAAY,SAASuoC,EAAK,OAAQ,IAAM,CACvC,CAACD,EAAa,aAAa,OAAO,GAAK,CAACA,EAAa,aAAa,QAAQ,GAC5E,KAAK,OAAO,MAAM,cAAczhD,EAAO,MAAQgmC,GAAY,CACzDA,EAAQ,aAAa,QAAS0b,EAAI,aAAcD,CAAY,EAC5Dzb,EAAQ,aAAa,SAAU0b,EAAI,cAAeD,CAAY,EAC/D,EAEE,iBAAY,cAAcC,EAAK,MAAM,EAC3C,EACDA,EAAI,IAAMxkH,CAAA,CACX,EACH,CAIA,8BAA8B4X,EAAW,CACjC,MAAA6sG,EAAoB7sG,EAAU,mBACpC,GAAI,CAAC6sG,EACI,YAEH,MAAA3a,EAAclyF,EAAU,qBAC9B,GAAIkyF,GAAe,KAAK,cAAcA,CAAW,EACxC,OAAAA,EAET,IAAI1/F,EAASq6G,EAAkB,OAC/B,KAAOr6G,GAAQ,CACb,GAAIA,EAAO,GAAG,SAAS,GAAK,KAAK,cAAcA,CAAM,EAC5C,OAAAA,EAETA,EAASA,EAAO,MAClB,CACO,WACT,CAIA,+BAA+BwN,EAAW,CAClC,MAAAyxF,EAAkBzxF,EAAU,qBAC3B,YAAK,QAAQyxF,CAAe,EAAIA,EAAkBzxF,EAAU,iBAAmB,eAAa,YAAY,CACjH,CAIA,4BAA4B8sG,EAAW,CACrC,OAAOA,EAAU,aAAa,CAAE,QAAST,EAAoC,EAC/E,CAMA,gBAAiB,CAET,MAAArsG,EADQ,KAAK,OAAO,MACF,SAAS,UACjC,OAAO+sG,GAAuB,KAAK,OAAQ/sG,CAAS,GAAKgtG,GAAiBhtG,CAAS,CACrF,CAUA,cAAckyF,EAAahnC,EAAQzvB,EAAO,CACjC,OAAAyvB,EAAA,kBAAkB,QAAS,GAAMgnC,CAAW,EAM5CvB,GAASuB,EAAahnC,EAAQ,CAAE,MALlB,IAAM,CAEnB,MAAA+hD,EADa,KAAK,mBAAmB/a,CAAW,EAC3B,aAAa,KAAK,EAC7C,OAAO+a,EAAU,GAAGA,CAAO,IAAIxxE,CAAK,GAAKA,CAAA,EAEiB,CAC9D,CAIA,cAAcy2D,EAAa,CACzB,MAAO,CAAC,CAACA,EAAY,kBAAkB,OAAO,GAAKxB,GAASwB,CAAW,CACzE,CAIA,aAAa1I,EAAc,CACzB,MAAO,CAAC,CAACA,GAAgBA,EAAa,GAAG,UAAW,YAAY,CAClE,CAIA,cAAcA,EAAc,CAC1B,MAAO,CAAC,CAACA,GAAgBA,EAAa,GAAG,UAAW,aAAa,CACnE,CAMA,mBAAmB0jB,EAAY,CACzB,QAAK,kBAAkBA,CAAU,EAC5B,OAAAA,EAEH,MAAAr/B,EAAc,KAAK,OAAO,QAAQ,KACxC,SAAW,CAAE,KAAA9yC,CAAK,IAAK8yC,EAAY,cAAcq/B,CAAU,EACrD,QAAK,kBAAkBnyE,CAAI,EACtB,OAAAA,CAGb,CAIA,SAAU,CACR,YAAK,YAAY,gBACV,MAAM,SACf,CACF,EACA,SAASgyE,GAAuB3oD,EAAQpkD,EAAW,CAEjD,GADkBysG,GAA+BroD,EAAQpkD,EAAW,IAAI,GACvD,aAAc,CAC7B,MAAMxN,EAAS26G,GAAqBntG,EAAWokD,EAAO,KAAK,EAC3D,GAAIA,EAAO,MAAM,OAAO,WAAW5xD,EAAQ,YAAY,EAC9C,QACT,SACS4xD,EAAO,MAAM,OAAO,WAAWpkD,EAAU,MAAO,aAAa,EAC/D,SAEF,QACT,CACA,SAASgtG,GAAiBhtG,EAAW,CACnC,MAAO,CAAC,GAAGA,EAAU,MAAM,cAAc,EAAE,MAAOk1F,GAAa,CAACA,EAAS,GAAG,UAAW,YAAY,CAAC,CACtG,CACA,SAASiY,GAAqBntG,EAAWm0D,EAAO,CAExC,MAAA3hE,EADiBg/F,GAA0BxxF,EAAWm0D,CAAK,EACnC,MAAM,OACpC,OAAI3hE,EAAO,SAAW,CAACA,EAAO,GAAG,UAAW,OAAO,EAC1CA,EAAO,OAETA,CACT,CACA,SAASi6G,GAA+BroD,EAAQqwC,EAAY8X,EAAW,CAC/D,MAAAxkD,EAAS3D,EAAO,MAAM,OACtBgpD,EAAwBhpD,EAAO,OAAO,IAAI,mBAAmB,EACnE,OAAKA,EAAO,QAAQ,IAAI,mBAAmB,EAGtCA,EAAO,QAAQ,IAAI,oBAAoB,EAGxCmoD,IAGAa,IAA0B,SACrB,cAELA,IAA0B,OACrB,aAEL3Y,EAAW,GAAG,WAAW,EACpBwX,GAA0ClkD,EAAQ0sC,CAAU,EAE9D1sC,EAAO,WAAW0sC,EAAY,aAAa,EAAI,cAAgB,cAd7D,aAHA,aAkBX,CAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECtUA,SAAS4Y,GAAkBvB,EAAY,CACrC,MAAMwB,EAAY,CAACv6F,EAAKjW,EAAMk2F,IAAkB,CAC9C,GAAI,CAACA,EAAc,WAAW,KAAKl2F,EAAK,SAAU,CAAE,KAAM,GAAM,QAAS,OAAS,GAChF,OAEF,MAAMywG,EAAYzB,EAAW,mBAAmBhvG,EAAK,QAAQ,EAC7D,GAAI,CAACywG,GAAa,CAACva,EAAc,WAAW,KAAKua,EAAW,CAAE,KAAM,EAAI,CAAE,EACxE,OAEFva,EAAc,WAAW,QAAQl2F,EAAK,SAAU,CAAE,KAAM,GAAM,QAAS,OAAO,CAAE,EAChF,MAAM0wG,EAAmBxa,EAAc,YAAYua,EAAWzwG,EAAK,WAAW,EACxE2wG,EAAazkH,GAAMwkH,EAAiB,WAAW,SAAU,GAC/D,GAAI,CAACC,EAAY,CACfza,EAAc,WAAW,OAAOl2F,EAAK,SAAU,CAAE,KAAM,GAAM,QAAS,OAAO,CAAE,EAC/E,MACD,CACDk2F,EAAc,gBAAgBl2F,EAAK,SAAU2wG,CAAU,EACvDza,EAAc,uBAAuBya,EAAY3wG,CAAI,CACzD,EACE,OAAQkzF,GAAe,CACrBA,EAAW,GAAG,iBAAkBsd,CAAS,CAC7C,CACA,CACA,SAASI,GAAwB5B,EAAYS,EAAW,CACtD,MAAMe,EAAY,CAACv6F,EAAKjW,EAAMk2F,IAAkB,CAC9C,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAMm4C,EAAS8nC,EAAc,OACvBx7E,EAAUw7E,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACtD8vG,EAAMd,EAAW,mBAAmBt0F,CAAO,EAC7C1a,EAAK,oBAAsB,MAC7BouD,EAAO,gBAAgB,SAAU0hD,CAAG,EACpC1hD,EAAO,gBAAgB,QAAS0hD,CAAG,GAE/B9vG,EAAK,oBACPouD,EAAO,aAAa,SAAUpuD,EAAK,kBAAmB8vG,CAAG,EACzD1hD,EAAO,aAAa,QAAS,QAAS0hD,CAAG,EAGjD,EACE,OAAQ5c,GAAe,CACrBA,EAAW,GAAG,oBAAoBuc,CAAS,GAAIe,CAAS,CAC5D,CACA,CACA,SAASK,GAAuB7B,EAAYS,EAAWtF,EAAc,CACnE,MAAMqG,EAAY,CAACv6F,EAAKjW,EAAMk2F,IAAkB,CAC9C,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM2hF,EAAa1B,EAAc,OAC3Bx7E,EAAUw7E,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACtD8vG,EAAMd,EAAW,mBAAmBt0F,CAAO,EACjDk9E,EAAW,aAAa53F,EAAK,aAAcA,EAAK,mBAAqB,GAAI8vG,CAAG,CAChF,EACE,OAAQ5c,GAAe,CACrBA,EAAW,GAAG,aAAaiX,CAAY,IAAIsF,CAAS,GAAIe,CAAS,CACrE,CACA,CAGA,IAAIM,GAAqB,cAAc1oB,EAAQ,CAI7C,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,MAAMgpD,EAAwBhpD,EAAO,OAAO,IAAI,mBAAmB,EAC9DA,EAAO,QAAQ,IAAI,mBAAmB,GACrCgpD,IAA0B,SAC5BrtC,GAAW,6BAA6B,EAGvC3b,EAAO,QAAQ,IAAI,oBAAoB,GACtCgpD,IAA0B,UAC5BrtC,GAAW,8BAA8B,CAG9C,CAID,SAAU,CACR,MAAM+rC,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACvD,KAAK,UAAYA,EAAW,gBAC7B,CASD,QAAQ3jH,EAAS,CACf,MAAM0lH,EAAoBlgF,GAAQxlC,EAAQ,MAAM,EAC1C6X,EAAY,KAAK,OAAO,MAAM,SAAS,UACvC8rG,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACjDpf,EAAsB,OAAO,YAAY1sF,EAAU,cAAe,GACxE6tG,EAAkB,QAAQ,CAACC,EAAkB70G,IAAU,CACrD,MAAMw4F,EAAkBzxF,EAAU,qBAIlC,GAHI,OAAO8tG,GAAqB,WAC9BA,EAAmB,CAAE,IAAKA,IAExB70G,GAASw4F,GAAmBqa,EAAW,QAAQra,CAAe,EAAG,CACnE,MAAMr9E,EAAW,KAAK,OAAO,MAAM,oBAAoBq9E,CAAe,EACtEqa,EAAW,YAAY,CAAE,GAAGgC,EAAkB,GAAGphB,CAAmB,EAAIt4E,CAAQ,CACxF,MACQ03F,EAAW,YAAY,CAAE,GAAGgC,EAAkB,GAAGphB,CAAqB,EAE9E,CAAK,CACF,CACH,EAGIqhB,GAA4B,cAAc7oB,EAAQ,CACpD,YAAY9gC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,SAAS,cAAc,CAC7B,CAID,SAAU,CAER,MAAM0nD,EADS,KAAK,OACM,QAAQ,IAAI,YAAY,EAC5Ct0F,EAAU,KAAK,OAAO,MAAM,SAAS,UAAU,qBACrD,KAAK,UAAYs0F,EAAW,QAAQt0F,CAAO,EAC3C,KAAK,MAAQ,KAAK,UAAYA,EAAQ,aAAa,KAAK,EAAI,IAC7D,CAQD,QAAQrvB,EAAS,CACf,MAAM6lH,EAAQ,KAAK,OAAO,MAAM,SAAS,UAAU,qBAC7ClC,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACvD,KAAK,OAAO,MAAM,OAAQ5gD,GAAW,CACnCA,EAAO,aAAa,MAAO/iE,EAAQ,OAAQ6lH,CAAK,EAChD,KAAK,aAAa9iD,EAAQ8iD,CAAK,EAC/BlC,EAAW,8BAA8BkC,CAAK,CACpD,CAAK,CACF,CAeD,aAAa9iD,EAAQ8iD,EAAO,CAC1B9iD,EAAO,gBAAgB,SAAU8iD,CAAK,EACtC9iD,EAAO,gBAAgB,QAAS8iD,CAAK,EACrC9iD,EAAO,gBAAgB,UAAW8iD,CAAK,EACvC9iD,EAAO,gBAAgB,QAAS8iD,CAAK,EACrC9iD,EAAO,gBAAgB,SAAU8iD,CAAK,EACtC9iD,EAAO,gBAAgB,MAAO8iD,CAAK,CACpC,CACH,EAGIC,GAAe,cAAch+B,EAAO,CAItC,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,WAAW,YAAa,CACtB,MAAO,cACR,CAID,MAAO,CACL,MAAMloD,EAAS,KAAK,OACd4T,EAAa5T,EAAO,WAC1BA,EAAO,QAAQ,KAAK,YAAYonD,EAAiB,EACjDxzC,EAAW,IAAI,QAAQ,EAAE,qBAAqB,CAC5C,KAAM,CACJ,KAAM,MACN,IAAK,KACN,EACD,MAAO,KACR,GAAE,qBAAqB,CACtB,KAAM,CACJ,KAAM,MACN,IAAK,QACN,EACD,MAAO,QACb,CAAK,EACD,MAAMk2C,EAAqB,IAAIN,GAAmBxpD,CAAM,EAClD+pD,EAA4B,IAAIJ,GAA0B3pD,CAAM,EACtEA,EAAO,SAAS,IAAI,cAAe8pD,CAAkB,EACrD9pD,EAAO,SAAS,IAAI,qBAAsB+pD,CAAyB,EACnE/pD,EAAO,SAAS,IAAI,cAAe8pD,CAAkB,CACtD,CACH,EAGIE,GAAsB,cAAcn+B,EAAO,CAI7C,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,WAAW,YAAa,CACtB,MAAO,qBACR,CAID,WAAY,CACV,KAAK,gBAAe,EACpB,KAAK,oBAAoB,YAAY,EACrC,KAAK,oBAAoB,aAAa,CACvC,CAID,iBAAkB,CACZ,KAAK,OAAO,QAAQ,IAAI,mBAAmB,GAC7C,KAAK,OAAO,MAAM,OAAO,OAAO,aAAc,CAAE,gBAAiB,CAAC,QAAS,QAAQ,CAAG,GAEpF,KAAK,OAAO,QAAQ,IAAI,oBAAoB,GAC9C,KAAK,OAAO,MAAM,OAAO,OAAO,cAAe,CAAE,gBAAiB,CAAC,QAAS,QAAQ,CAAG,EAE1F,CAID,oBAAoBC,EAAW,CAC7B,MAAMnoD,EAAS,KAAK,OACd0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5CiqD,EAAkB9B,IAAc,aAAe,SAAW,MAChEnoD,EAAO,WAAW,IAAI,QAAQ,EAAE,qBAAqB,CACnD,KAAM,CACJ,KAAMiqD,EACN,OAAQ,CACN,MAAO,IACR,CACF,EACD,MAAO,CACL,IAAK,QACL,MAAQnc,GACFia,GAA+Bja,CAAW,EACrCga,GAAmBha,EAAY,SAAS,OAAO,CAAC,EAElD,IAEV,CACF,GAAE,qBAAqB,CACtB,KAAM,CACJ,KAAMmc,EACN,IAAK,OACN,EACD,MAAO,OACR,GAAE,qBAAqB,CACtB,KAAM,CACJ,KAAMA,EACN,OAAQ,CACN,OAAQ,IACT,CACF,EACD,MAAO,CACL,IAAK,SACL,MAAQnc,GACFia,GAA+Bja,CAAW,EACrCga,GAAmBha,EAAY,SAAS,QAAQ,CAAC,EAEnD,IAEV,CACF,GAAE,qBAAqB,CACtB,KAAM,CACJ,KAAMmc,EACN,IAAK,QACN,EACD,MAAO,QACb,CAAK,EACDjqD,EAAO,WAAW,IAAI,iBAAiB,EAAE,IAAK4rC,GAAe,CAC3Dse,EAAwBte,EAAY,QAAS,QAAS,EAAI,EAC1Dse,EAAwBte,EAAY,SAAU,SAAU,EAAI,CAClE,CAAK,EACD5rC,EAAO,WAAW,IAAI,cAAc,EAAE,IAAK4rC,GAAe,CACxDse,EAAwBte,EAAY,QAAS,QAAS,EAAK,EAC3Dse,EAAwBte,EAAY,SAAU,SAAU,EAAK,CACnE,CAAK,EACD,SAASse,EAAwBte,EAAYue,EAAoBC,EAAmBC,EAAwB,CAC1Gze,EAAW,GAAG,aAAaue,CAAkB,IAAIhC,CAAS,GAAI,CAACx5F,EAAKjW,EAAMk2F,IAAkB,CAC1F,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM2hF,EAAa1B,EAAc,OAC3Bd,EAAcc,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EAC1D8vG,EAAMd,EAAW,mBAAmB5Z,CAAW,EAMrD,GALIp1F,EAAK,oBAAsB,KAC7B43F,EAAW,aAAa8Z,EAAmB1xG,EAAK,kBAAmB8vG,CAAG,EAEtElY,EAAW,gBAAgB8Z,EAAmB5B,CAAG,EAE/C9vG,EAAK,KAAK,aAAa,SAAS,EAClC,OAEF,MAAM4xG,EAAY5xG,EAAK,KAAK,aAAa,cAAc,EACvD,GAAIyvG,IAAc,eAAiB,CAACmC,GAAa,CAACD,EAChD,OAEF,MAAM3oG,EAAQhJ,EAAK,KAAK,aAAa,OAAO,EACtC+vC,EAAS/vC,EAAK,KAAK,aAAa,QAAQ,EAC1CgJ,GAAS+mC,GACX6nD,EAAW,SAAS,eAAgB,GAAG5uF,CAAK,IAAI+mC,CAAM,GAAI+/D,CAAG,CAEvE,CAAO,CACF,CACF,CACH,EAGI+B,GAAmB,cAAczpB,EAAQ,CAM3C,YAAY9gC,EAAQwqD,EAAkB,CACpC,MAAMxqD,CAAM,EACZ,KAAK,kBAAoBwqD,CAC1B,CAID,SAAU,CAER,MAAM9C,EADS,KAAK,OACM,QAAQ,IAAI,YAAY,EAC5Ct0F,EAAUs0F,EAAW,+BAA+B,KAAK,OAAO,MAAM,SAAS,SAAS,EAC1F,KAAK,oBAAsB,aAC7B,KAAK,UAAYA,EAAW,cAAct0F,CAAO,EAEjD,KAAK,UAAYs0F,EAAW,aAAat0F,CAAO,CAEnD,CAWD,QAAQrvB,EAAU,GAAI,CACpB,MAAMi8D,EAAS,KAAK,OACd+P,EAAQ,KAAK,OAAO,MACpB23C,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5CyqD,EAAa/C,EAAW,+BAA+B33C,EAAM,SAAS,SAAS,EAC/EloE,EAAa,OAAO,YAAY4iH,EAAW,cAAe,GAChE,MAAI,CAAC5iH,EAAW,KAAO,CAACA,EAAW,SAC1B,KAEFkoE,EAAM,OAAQjJ,GAAW,CAC9B,KAAM,CAAE,cAAAwhD,EAAgB,EAAM,EAAGvkH,EAC3Bg2G,EAAU,MAAM,KAAKhqC,EAAM,OAAO,EAAE,OAAQ+rB,GAAWA,EAAO,SAAQ,EAAG,aAAa2uB,CAAU,CAAC,EACjGztF,EAAa0qF,EAAW,YAAY7/G,EAAYkoE,EAAM,gBAAgB06C,EAAY,IAAI,EAAG,KAAK,kBAAmB,CAAE,cAAAnC,CAAe,GACxI,GAAI,CAACtrF,EACH,OAAO,KAET,MAAM0tF,EAAkB5jD,EAAO,cAAc9pC,CAAU,EACvD,UAAW8+D,KAAUie,EAAS,CAC5B,MAAM4Q,EAAc7uB,EAAO,WACrBvyC,EAAQohE,EAAY,KAAK,UAAY,aAAeA,EAAY,UAAUD,EAAiB,EAAI,EAAIA,EACzG5jD,EAAO,aAAag1B,EAAQ,CAAE,MAAAvyC,CAAO,EACtC,CACD,MAAO,CACL,WAAAkhE,EACA,WAAAztF,CACR,CACA,CAAK,CACF,CACH,EAII4tF,GAAmB,cAAc/+B,EAAO,CAI1C,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,WAAW,YAAa,CACtB,MAAO,kBACR,CAID,WAAY,CACV,KAAK,aAAY,EACjB,KAAK,iBAAgB,EACrB,KAAK,mBAAkB,CACxB,CAID,cAAe,CACb,MAAMvkD,EAAS,KAAK,OAAO,MAAM,OAC7BA,EAAO,aAAa,YAAY,GAClCA,EAAO,OAAO,aAAc,CAC1B,gBAAiB,CAAC,aAAa,CACvC,CAAO,EAECA,EAAO,aAAa,aAAa,GACnCA,EAAO,OAAO,cAAe,CAC3B,gBAAiB,CAAC,aAAa,CACvC,CAAO,CAEJ,CAID,kBAAmB,CACjB,MAAM3D,EAAS,KAAK,OACd4T,EAAa5T,EAAO,WACpB0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD4T,EAAW,IAAI,iBAAiB,EAAE,IAAKg4B,GAAe,CACpDA,EAAW,GAAG,wBAAyB,CAACj9E,EAAKjW,EAAMk2F,IAAkB,CAInE,GAHI,CAACA,EAAc,WAAW,KAAKl2F,EAAK,KAAMiW,EAAI,IAAI,GAGlD,CAACjW,EAAK,KAAK,GAAG,UAAW,YAAY,GAAK,CAACA,EAAK,KAAK,GAAG,UAAW,aAAa,EAClF,OAEFk2F,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACpD,MAAM2hF,EAAa1B,EAAc,OAC3Bx7E,EAAUw7E,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACtD8vG,EAAMd,EAAW,mBAAmBt0F,CAAO,EAC7C1a,EAAK,mBACP43F,EAAW,SAAS,oBAAqBkY,CAAG,EAC5ClY,EAAW,SAAS,mBAAoB,OAAO53F,EAAK,iBAAiB,IAAK8vG,CAAG,EAC7ElY,EAAW,kBAAkB,iCAAkC,GAAMkY,CAAG,IAExElY,EAAW,YAAY,oBAAqBkY,CAAG,EAC/ClY,EAAW,YAAY,mBAAoBkY,CAAG,EAExD,CAAO,CACP,CAAK,CACF,CAID,oBAAqB,CACnB,MAAMxoD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfgxC,EAAUhxC,EAAO,QACjBypB,EAAcunB,EAAQ,KACtB0W,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClDypB,EAAY,YAAY29B,EAAiB,EACzC,KAAK,SAAS39B,EAAY,SAAU,cAAe,CAAC96D,EAAK21E,IAAa,CACpE,MAAMumB,EAAiBphC,EAAY,aAAa,aAAa6a,EAAS,MAAM,EAC5E,GAAI,CAACumB,EACH,OAEF,MAAM/c,EAAc4Z,EAAW,4BAA4BmD,CAAc,EACzE,GAAI,CAAC/c,EACH,OAEF,MAAM1I,EAAe4L,EAAQ,OAAO,eAAelD,CAAW,EAC1D,CAAC1I,GAAgB,CAACA,EAAa,aAAa,aAAa,GAG7Dr1B,EAAM,cAAc,CAAE,WAAY,EAAO,EAAGjJ,GAAW,CACrDA,EAAO,gBAAgB,cAAes+B,CAAY,CAC1D,CAAO,CACP,CAAK,CACF,CACH,EAGI0lB,GAAoB,cAAcj/B,EAAO,CAI3C,WAAW,UAAW,CACpB,MAAO,CAACg+B,GAAcG,GAAqB9B,GAAY0C,GAAkB5R,EAAiB,CAC3F,CAID,WAAW,YAAa,CACtB,MAAO,mBACR,CAID,MAAO,CACL,MAAMh5C,EAAS,KAAK,OACLA,EAAO,MAAM,OACrB,SAAS,aAAc,CAC5B,eAAgB,eAChB,gBAAiB,CAAC,MAAO,MAAO,QAAQ,CAC9C,CAAK,EACD,KAAK,iBAAgB,EACjBA,EAAO,QAAQ,IAAI,oBAAoB,IACzCA,EAAO,SAAS,IAAI,iBAAkB,IAAIuqD,GAAiB,KAAK,OAAQ,YAAY,CAAC,EACrF,KAAK,2BAA0B,EAElC,CAKD,kBAAmB,CACjB,MAAMvqD,EAAS,KAAK,OACd,EAAIA,EAAO,EACX4T,EAAa5T,EAAO,WACpB0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD4T,EAAW,IAAI,cAAc,EAAE,mBAAmB,CAChD,MAAO,aACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,CAAM,IAAOygD,GAA4BzgD,CAAM,CAC5E,CAAK,EACD8M,EAAW,IAAI,iBAAiB,EAAE,mBAAmB,CACnD,MAAO,aACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,CAAM,IAAO4gD,EAAW,cAAcH,GAA4BzgD,CAAM,EAAGA,EAAQ,EAAE,cAAc,CAAC,CACjI,CAAK,EACD8M,EAAW,IAAI,UAAU,EAAE,IAAI21C,GAAuB7B,EAAY,aAAc,KAAK,CAAC,EAAE,IAAI6B,GAAuB7B,EAAY,aAAc,KAAK,CAAC,EAAE,IAAI4B,GAAwB5B,EAAY,YAAY,CAAC,EAC1M9zC,EAAW,IAAI,QAAQ,EAAE,iBAAiB,CACxC,KAAM4zC,GAAyBxnD,EAAQ,YAAY,EACnD,MAAO,CAACmpD,EAAW,CAAE,OAAAriD,CAAQ,IAAKA,EAAO,cAAc,aAAcqiD,EAAU,aAAa,KAAK,EAAI,CAAE,IAAKA,EAAU,aAAa,KAAK,CAAC,EAAK,MAAM,CACrJ,GAAE,IAAIF,GAAkBvB,CAAU,CAAC,CACrC,CAiBD,4BAA6B,CAC3B,MAAM1nD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfypB,EAAczpB,EAAO,QAAQ,KAC7B0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C08C,EAAoB18C,EAAO,QAAQ,IAAI,mBAAmB,EAChE,KAAK,SAAS08C,EAAmB,sBAAuB,CAAC/tF,EAAKjW,IAAS,CACrE,MAAMqyG,EAAsB,MAAM,KAAKryG,EAAK,QAAQ,YAAW,CAAE,EACjE,IAAIizF,EACJ,GAAI,CAACof,EAAoB,MAAMrD,EAAW,iBAAiB,EACzD,OAEEhvG,EAAK,aACPizF,EAAa3rC,EAAO,QAAQ,OAAO,aAAatnD,EAAK,aAAa,CAAC,CAAC,EAEpEizF,EAAa57B,EAAM,SAAS,UAAU,cAAa,EAErD,MAAMn0D,EAAYm0D,EAAM,gBAAgB47B,CAAU,EAClD,GAAIkc,GAA0C93C,EAAM,OAAQn0D,CAAS,IAAM,aAAc,CACvF,MAAMkrD,EAAS,IAAIkkD,GAAavhC,EAAY,QAAQ,EAC9CwhC,EAAkBF,EAAoB,IAAKG,GAAoBpkD,EAAO,cAAc,SAAU,CAAE,MAAO,OAAO,EAAIokD,CAAe,CAAC,EACxIxyG,EAAK,QAAUouD,EAAO,uBAAuBmkD,CAAe,CAC7D,CACP,CAAK,EACD,KAAK,SAASvO,EAAmB,mBAAoB,CAAC/tF,EAAKjW,IAAS,CAC9DA,EAAK,SAAW,SAGpBq3D,EAAM,OAAQjJ,GAAW,CACvB,MAAMvd,EAAQud,EAAO,cAAcpuD,EAAK,OAAO,EAC/C,UAAWi+B,KAAQ4S,EAAM,WACnB5S,EAAK,GAAG,UAAW,YAAY,GACjC+wE,EAAW,8BAA8B/wE,CAAI,CAGzD,CAAO,CACP,CAAK,CACF,CACH,EAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECvkBA,IAAIw0E,GAA8B,cAAcrqB,EAAQ,CAItD,SAAU,CAGR,MAAM1tE,EAFS,KAAK,OACM,QAAQ,IAAI,YAAY,EACvB,+BAA+B,KAAK,OAAO,MAAM,SAAS,SAAS,EAC9F,KAAK,UAAY,CAAC,CAACA,EACf,KAAK,WAAaA,EAAQ,aAAa,KAAK,EAC9C,KAAK,MAAQA,EAAQ,aAAa,KAAK,EAEvC,KAAK,MAAQ,EAEhB,CAQD,QAAQrvB,EAAS,CACf,MAAMi8D,EAAS,KAAK,OACd0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C+P,EAAQ/P,EAAO,MACfuoD,EAAeb,EAAW,+BAA+B33C,EAAM,SAAS,SAAS,EACvFA,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,aAAa,MAAO/iE,EAAQ,SAAUwkH,CAAY,CAC/D,CAAK,CACF,CACH,EAGI6C,GAA8B,cAAcv/B,EAAO,CAIrD,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,WAAW,YAAa,CACtB,MAAO,6BACR,CAID,MAAO,CACL,KAAK,OAAO,SAAS,IAAI,uBAAwB,IAAIiD,GAA4B,KAAK,MAAM,CAAC,CAC9F,CACH,EAKIE,GAA0B,cAAclwF,EAAK,CAI/C,YAAY69C,EAAQ,CAClB,MAAMA,CAAM,EACZ,MAAM,EAAI,KAAK,OAAO,EACtB,KAAK,aAAe,IAAIkD,GACxB,KAAK,WAAa,IAAID,GACtB,KAAK,aAAe,KAAK,0BACzB,KAAK,eAAiB,KAAK,cAAc,EAAE,MAAM,EAAGqE,GAAM,MAAO,gBAAgB,EACjF,KAAK,eAAe,KAAO,SAC3B,KAAK,iBAAmB,KAAK,cAAc,EAAE,QAAQ,EAAGA,GAAM,OAAQ,mBAAoB,QAAQ,EAClG,KAAK,YAAc,IAAIzL,GACvB,KAAK,aAAe,IAAI2F,GAAY,CAClC,WAAY,KAAK,YACjB,aAAc,KAAK,aACnB,iBAAkB,KAAK,WACvB,QAAS,CAEP,cAAe,cAEf,UAAW,KACZ,CACP,CAAK,EACD,KAAK,YAAY,CACf,IAAK,OACL,WAAY,CACV,MAAO,CACL,KACA,2BACA,oBACD,EAED,SAAU,IACX,EACD,SAAU,CACR,KAAK,aACL,KAAK,eACL,KAAK,gBACN,CACP,CAAK,CACF,CAID,QAAS,CACP,MAAM,OAAM,EACZ,KAAK,WAAW,SAAS,KAAK,OAAO,EACrC0S,GAAc,CAAE,KAAM,IAAI,CAAE,EAC5B,CAAC,KAAK,aAAc,KAAK,eAAgB,KAAK,gBAAgB,EAAE,QAASn4E,GAAM,CAC7E,KAAK,YAAY,IAAIA,CAAC,EACtB,KAAK,aAAa,IAAIA,EAAE,OAAO,CACrC,CAAK,CACF,CAID,SAAU,CACR,MAAM,QAAO,EACb,KAAK,aAAa,UAClB,KAAK,WAAW,SACjB,CAUD,cAAcsiC,EAAOgqC,EAAMl1E,EAAW2pB,EAAW,CAC/C,MAAMuV,EAAS,IAAIquC,GAAW,KAAK,MAAM,EACzC,OAAAruC,EAAO,IAAI,CACT,MAAAgM,EACA,KAAAgqC,EACA,QAAS,EACf,CAAK,EACDh2C,EAAO,eAAe,CACpB,WAAY,CACV,MAAOl/B,CACR,CACP,CAAK,EACG2pB,GACFuV,EAAO,SAAS,SAAS,EAAE,GAAG,KAAMvV,CAAS,EAExCuV,CACR,CAMD,yBAA0B,CACxB,MAAMvuB,EAAI,KAAK,OAAO,EAChBm4E,EAAe,IAAI1E,GAAiB,KAAK,OAAQW,EAAsB,EAC7E,OAAA+D,EAAa,MAAQn4E,EAAE,kBAAkB,EAClCm4E,CACR,CACH,EAGA,SAASmf,GAA4Bp0C,EAAQ,CAC3C,MAAMwnB,EAAUxnB,EAAO,QAAQ,IAAI,mBAAmB,EAEtD,GADmBA,EAAO,QAAQ,IAAI,YAAY,EACnC,8BAA8BA,EAAO,QAAQ,KAAK,SAAS,SAAS,EAAG,CACpF,MAAMhwC,EAAWqkF,GAAuBr0C,CAAM,EAC9CwnB,EAAQ,eAAex3D,CAAQ,CAChC,CACH,CACA,SAASqkF,GAAuBr0C,EAAQ,CACtC,MAAMypB,EAAczpB,EAAO,QAAQ,KAC7B0kB,EAAmBU,GAAyB,iBAC5CsiC,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD,MAAO,CACL,OAAQypB,EAAY,aAAa,aAAai+B,EAAW,8BAA8Bj+B,EAAY,SAAS,SAAS,CAAC,EACtH,UAAW,CACT/E,EAAiB,gBACjBA,EAAiB,oBACjBA,EAAiB,oBACjBA,EAAiB,gBACjBA,EAAiB,oBACjBA,EAAiB,oBACjBA,EAAiB,mBAClB,CACL,CACA,CAGA,IAAI4mC,GAAyB,cAAcz/B,EAAO,CAIhD,WAAW,UAAW,CACpB,MAAO,CAACD,EAAiB,CAC1B,CAID,WAAW,YAAa,CACtB,MAAO,wBACR,CAID,MAAO,CACL,KAAK,cAAa,CACnB,CAID,SAAU,CACR,MAAM,QAAO,EACT,KAAK,OACP,KAAK,MAAM,SAEd,CAKD,eAAgB,CACd,MAAM5rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAI,uBAAyBgZ,GAAW,CACjE,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,sBAAsB,EACpD3/C,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,MAAO,EAAE,+BAA+B,EACxC,KAAMigE,GAAM,gBACZ,QAAS,EACjB,CAAO,EACDjgE,EAAK,KAAK,WAAW,EAAE,GAAG+iF,EAAS,WAAW,EAC9C/iF,EAAK,KAAK,MAAM,EAAE,GAAG+iF,EAAS,QAAUpjG,GAAU,CAAC,CAACA,CAAK,EACzD,KAAK,SAASqgB,EAAM,UAAW,IAAM,CACnC,KAAK,UAAS,CACtB,CAAO,EACMA,CACb,CAAK,CACF,CAKD,aAAc,CACZ,MAAM2/C,EAAS,KAAK,OAEd2kC,EADO3kC,EAAO,QAAQ,KACF,SACpB0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD,KAAK,SAAW,KAAK,OAAO,QAAQ,IAAI,mBAAmB,EAC3D,KAAK,MAAQ,IAAK2U,GAA2B02C,EAAuB,GAAGrrD,EAAO,MAAM,EACpF,KAAK,MAAM,SACX,KAAK,SAAS,KAAK,MAAO,SAAU,IAAM,CACxCA,EAAO,QAAQ,uBAAwB,CACrC,SAAU,KAAK,MAAM,aAAa,UAAU,QAAQ,KAC5D,CAAO,EACD,KAAK,UAAU,EAAI,CACzB,CAAK,EACD,KAAK,SAAS,KAAK,MAAO,SAAU,IAAM,CACxC,KAAK,UAAU,EAAI,CACzB,CAAK,EACD,KAAK,MAAM,WAAW,IAAI,MAAO,CAACtnD,EAAMgiE,IAAW,CACjD,KAAK,UAAU,EAAI,EACnBA,GACN,CAAK,EACD,KAAK,SAAS1a,EAAO,GAAI,SAAU,IAAM,CAClC0nD,EAAW,8BAA8B/iB,EAAa,SAAS,EAEzD,KAAK,YACdyP,GAA4Bp0C,CAAM,EAFlC,KAAK,UAAU,EAAI,CAI3B,CAAK,EACDoU,GAAoB,CAClB,QAAS,KAAK,MACd,UAAW,IAAM,KAAK,WACtB,gBAAiB,IAAM,CAAC,KAAK,SAAS,KAAK,OAAO,EAClD,SAAU,IAAM,KAAK,UAAW,CACtC,CAAK,CACF,CAID,WAAY,CACV,GAAI,KAAK,WACP,OAEG,KAAK,OACR,KAAK,YAAW,EAElB,MAAMpU,EAAS,KAAK,OACdojC,EAAUpjC,EAAO,SAAS,IAAI,sBAAsB,EACpDi1B,EAAe,KAAK,MAAM,aAChC,KAAK,MAAM,wBACN,KAAK,cACR,KAAK,SAAS,IAAI,CAChB,KAAM,KAAK,MACX,SAAUof,GAAuBr0C,CAAM,CAC/C,CAAO,EAEHi1B,EAAa,UAAU,MAAQA,EAAa,UAAU,QAAQ,MAAQmO,EAAQ,OAAS,GACvF,KAAK,MAAM,aAAa,UAAU,OAAM,EACxC,KAAK,MAAM,sBACZ,CAMD,UAAUmoB,EAAgB,GAAO,CAC1B,KAAK,eAGN,KAAK,MAAM,aAAa,WAC1B,KAAK,MAAM,eAAe,QAE5B,KAAK,SAAS,OAAO,KAAK,KAAK,EAC3BA,GACF,KAAK,OAAO,QAAQ,KAAK,MAAK,EAEjC,CAID,IAAI,YAAa,CACf,MAAO,CAAC,CAAC,KAAK,UAAY,KAAK,SAAS,cAAgB,KAAK,KAC9D,CAID,IAAI,cAAe,CACjB,MAAO,CAAC,CAAC,KAAK,UAAY,KAAK,SAAS,QAAQ,KAAK,KAAK,CAC3D,CACH,EAGIC,GAAuB,cAAc3/B,EAAO,CAI9C,WAAW,UAAW,CACpB,MAAO,CAACu/B,GAA6BE,EAAsB,CAC5D,CAID,WAAW,YAAa,CACtB,MAAO,sBACR,CACH,EAIIG,GAAsB,cAActwF,EAAK,CAO3C,YAAY69C,EAAQ0yC,EAAe,GAAI,CACrC,MAAM1yC,CAAM,EACZ,KAAK,aAAe,IAAIkD,GACxB,KAAK,WAAa,IAAID,GACtB,KAAK,YAAc,IAAIpH,GACvB,KAAK,SAAW,KAAK,mBACrB,KAAK,aAAe,IAAI2F,GAAY,CAClC,WAAY,KAAK,YACjB,aAAc,KAAK,aACnB,iBAAkB,KAAK,WACvB,QAAS,CAEP,cAAe,cAEf,UAAW,KACZ,CACP,CAAK,EACD,UAAWn6D,KAAQqrG,EACjB,KAAK,SAAS,IAAIrrG,CAAI,EACtB,KAAK,YAAY,IAAIA,CAAI,EACrBA,aAAgB4tE,IAClB,KAAK,YAAY,QAAQ5tE,EAAK,QAAQ,EAG1C,GAAI,KAAK,YAAY,OAAS,EAC5B,UAAWA,KAAQ,KAAK,YAClBi7D,GAAsBj7D,CAAI,IAC5BA,EAAK,YAAY,GAAG,eAAiBsO,GAAQ,CAC3C,KAAK,aAAa,YAClBA,EAAI,KAAI,CACpB,CAAW,EACDtO,EAAK,YAAY,GAAG,gBAAkBsO,GAAQ,CAC5C,KAAK,aAAa,gBAClBA,EAAI,KAAI,CACpB,CAAW,GAIP,KAAK,YAAY,CACf,IAAK,OACL,WAAY,CACV,MAAO,CACL,KACA,sBACD,EACD,SAAU,EACX,EACD,SAAU,KAAK,QACrB,CAAK,CACF,CAID,QAAS,CACP,MAAM,OAAM,EACZu+D,GAAc,CACZ,KAAM,IACZ,CAAK,EACD,UAAW7sE,KAAQ,KAAK,YACtB,KAAK,aAAa,IAAIA,EAAK,OAAO,EAEpC,KAAK,WAAW,SAAS,KAAK,OAAO,EACrC,MAAMw2E,EAAmBn+E,GAASA,EAAK,gBAAe,EACtD,KAAK,WAAW,IAAI,aAAcm+E,CAAe,EACjD,KAAK,WAAW,IAAI,YAAaA,CAAe,EAChD,KAAK,WAAW,IAAI,UAAWA,CAAe,EAC9C,KAAK,WAAW,IAAI,YAAaA,CAAe,CACjD,CAID,SAAU,CACR,MAAM,QAAO,EACb,KAAK,aAAa,UAClB,KAAK,WAAW,SACjB,CAID,OAAQ,CACN,KAAK,aAAa,YACnB,CACH,EACA,SAASvb,GAAsBj7D,EAAM,CACnC,MAAO,gBAAiBA,CAC1B,CAGA,IAAIsrG,GAAgB,cAAc9/B,EAAO,CAIvC,WAAW,YAAa,CACtB,MAAO,eACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,YAAYloD,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,cAAgC,IAAI,IACzCA,EAAO,OAAO,OAAO,4BAA6B,CAChD,SACA,eACA,KACN,CAAK,CACF,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACdpkD,EAAYokD,EAAO,MAAM,SAAS,UAClC0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD,KAAK,IAAI,kBAAmB,EAAK,EACjC,KAAK,SAASA,EAAO,MAAM,SAAU,SAAU,IAAM,CACnD,KAAK,gBAAkB0nD,EAAW,QAAQ9rG,EAAU,mBAAkB,CAAE,CAC9E,CAAK,EACD,MAAMgwG,EAAoB5yC,GAAW,KAAK,wBAAwBA,CAAM,EACxEhZ,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,EAC9D5rD,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,CAC/D,CAID,oBAAoB,CAAE,KAAAjrH,EAAM,WAAAk1E,EAAY,kBAAAg2C,EAAmB,gBAAAC,EAAiB,aAAAC,GAAgB,CACtF,KAAK,cAAc,IAAIprH,CAAI,GAC7Bg7E,GAAW,kCAAmC,CAAE,KAAAh7E,CAAI,CAAE,EAExD,KAAK,cAAc,IAAIA,EAAM,CAC3B,WAAAk1E,EACA,kBAAAg2C,EACA,gBAAAC,EACA,aAAc,CAAC,CAACC,CACtB,CAAK,CACF,CAID,wBAAwB/yC,EAAQ,CAC9B,MAAMhZ,EAAS,KAAK,OACdljD,EAAIk8D,EAAO,EACX0yC,EAAe,KAAK,uBAC1B,GAAI,CAACA,EAAa,OAChB,OAAO,KAET,IAAIM,EACJ,MAAMC,EAAmBP,EAAa,CAAC,EACvC,GAAIA,EAAa,QAAU,EAAG,CAC5B,GAAI,CAACO,EAAiB,aACpB,OAAOA,EAAiB,kBAAkB,EAAI,EAEhDD,EAAiBC,EAAiB,kBAAkB,EAAI,CAC9D,KAAW,CACL,MAAM/tC,EAAe+tC,EAAiB,kBAAkB,EAAK,EAC7DD,EAAiB,IAAI/tC,GAAgBjF,EAAQkF,CAAY,EACzD8tC,EAAe,QAAU,GACzBA,EAAe,KAAK,OAAO,EAAE,GAAG,KAAM,kBAAoBE,GAAsCpvG,EAAlBovG,EAAoB,gBAAqB,cAAN,CAAqB,CACvI,CACD,MAAMztC,EAAe,KAAK,aAAeF,GAAevF,EAAQgzC,CAAc,EACxEG,EAAcT,EAAa,IAAI,CAAC,CAAE,WAAA71C,CAAU,IAAOA,CAAU,EACnE,OAAA4I,EAAa,KAAK,WAAW,EAAE,OAAO0tC,EAAa,YAAa,IAAIrnB,IAAcA,EAAU,KAAMsnB,GAAeA,CAAU,CAAC,EAC5H3tC,EAAa,KAAK,gBAAiB,IAAM,CACvC,MAAM4tC,EAAmBX,EAAa,IAAI,CAAC,CAAE,gBAAAI,KAAsBA,EAAgBJ,EAAa,QAAU,CAAC,CAAC,EACtGY,EAAsB,IAAIb,GAAoBzrD,EAAO,OAAQqsD,CAAgB,EACnF5tC,EAAa,UAAU,SAAS,IAAI6tC,CAAmB,CAC7D,CAAK,EACM7tC,CACR,CAID,sBAAuB,CAErB,MAAMzvB,EADS,KAAK,OACC,OAAO,IAAI,2BAA2B,EACrD1hD,EAAS,GACf,GAAI,CAAC0hD,EAAM,OACT,OAAA2sB,GAAW,yCAAyC,EAC7CruE,EAET,UAAWqpC,KAAQqY,EAAO,CACxB,GAAI,CAAC,KAAK,cAAc,IAAIrY,CAAI,EAAG,CAC5B,CAAC,SAAU,eAAgB,KAAK,EAAE,SAASA,CAAI,GAClDglC,GAAW,mCAAoC,CAAE,KAAAhlC,CAAI,CAAE,EAEzD,QACD,CACDrpC,EAAO,KAAK,KAAK,cAAc,IAAIqpC,CAAI,CAAC,CACzC,CACD,OAAKrpC,EAAO,QACVquE,GAAW,0CAA0C,EAEhDruE,CACR,CACH,EAIIi/G,GAAa,cAAc1gC,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAACi/B,GAAmB5Y,GAAQsZ,GAAsBG,EAAa,CACvE,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CACH,EAGIa,GAAqB,cAAc3gC,EAAO,CAI5C,WAAW,UAAW,CACpB,MAAO,CAACg+B,GAAcG,GAAqB9B,GAAY0C,GAAkB5R,EAAiB,CAC3F,CAID,WAAW,YAAa,CACtB,MAAO,oBACR,CAID,MAAO,CACL,MAAMh5C,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OAC5B2D,EAAO,SAAS,cAAe,CAC7B,eAAgB,gBAChB,gBAAiB,CAAC,MAAO,MAAO,QAAQ,CAC9C,CAAK,EACDA,EAAO,cAAc,CAACrgE,EAASmpH,IAAoB,CACjD,GAAInpH,EAAQ,SAAS,SAAS,GAAKmpH,EAAgB,OAAS,cAC1D,MAAO,EAEf,CAAK,EACD,KAAK,iBAAgB,EACjBzsD,EAAO,QAAQ,IAAI,mBAAmB,IACxCA,EAAO,SAAS,IAAI,kBAAmB,IAAIuqD,GAAiB,KAAK,OAAQ,aAAa,CAAC,EACvF,KAAK,2BAA0B,EAElC,CAKD,kBAAmB,CACjB,MAAMvqD,EAAS,KAAK,OACd,EAAIA,EAAO,EACX4T,EAAa5T,EAAO,WACpB0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD4T,EAAW,IAAI,cAAc,EAAE,iBAAiB,CAC9C,MAAO,cACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,CAAQ,IAAKA,EAAO,mBAAmB,KAAK,CACzE,CAAK,EACD8M,EAAW,IAAI,iBAAiB,EAAE,mBAAmB,CACnD,MAAO,cACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,CAAM,IAAO4gD,EAAW,cAAcJ,GAA6BxgD,CAAM,EAAGA,EAAQ,EAAE,cAAc,CAAC,CAClI,CAAK,EACD8M,EAAW,IAAI,UAAU,EAAE,IAAI21C,GAAuB7B,EAAY,cAAe,KAAK,CAAC,EAAE,IAAI6B,GAAuB7B,EAAY,cAAe,KAAK,CAAC,EAAE,IAAI4B,GAAwB5B,EAAY,aAAa,CAAC,EAC7M9zC,EAAW,IAAI,QAAQ,EAAE,iBAAiB,CACxC,KAAM4zC,GAAyBxnD,EAAQ,aAAa,EACpD,MAAO,CAACmpD,EAAW,CAAE,OAAAriD,CAAQ,IAAKA,EAAO,cAAc,cAAeqiD,EAAU,aAAa,KAAK,EAAI,CAAE,IAAKA,EAAU,aAAa,KAAK,CAAC,EAAK,MAAM,CAC3J,CAAK,CACF,CAkBD,4BAA6B,CAC3B,MAAMnpD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfypB,EAAczpB,EAAO,QAAQ,KAC7B0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C08C,EAAoB18C,EAAO,QAAQ,IAAI,mBAAmB,EAChE,KAAK,SAAS08C,EAAmB,sBAAuB,CAAC/tF,EAAKjW,IAAS,CACrE,MAAMqyG,EAAsB,MAAM,KAAKryG,EAAK,QAAQ,YAAW,CAAE,EACjE,IAAIizF,EACJ,GAAI,CAACof,EAAoB,MAAMrD,EAAW,gBAAgB,EACxD,OAEEhvG,EAAK,aACPizF,EAAa3rC,EAAO,QAAQ,OAAO,aAAatnD,EAAK,aAAa,CAAC,CAAC,EAEpEizF,EAAa57B,EAAM,SAAS,UAAU,cAAa,EAErD,MAAMn0D,EAAYm0D,EAAM,gBAAgB47B,CAAU,EAClD,GAAIkc,GAA0C93C,EAAM,OAAQn0D,CAAS,IAAM,cAAe,CACxF,MAAMkrD,EAAS,IAAIkkD,GAAavhC,EAAY,QAAQ,EAC9CijC,EAAmB3B,EAAoB,IAAK4B,GAC5CA,EAAe,aAAe,GAChC,MAAM,KAAKA,EAAe,cAAa,CAAE,EAAE,QAAShnD,GAAcmB,EAAO,aAAa,GAAGnB,EAAW+hD,EAAW,mBAAmBiF,CAAc,CAAC,CAAC,EAC3IA,EAAe,SAAS,CAAC,GAEzBA,CAEV,EACDj0G,EAAK,QAAUouD,EAAO,uBAAuB4lD,CAAgB,CAC9D,CACP,CAAK,EACD,KAAK,SAAShQ,EAAmB,mBAAoB,CAAC/tF,EAAKjW,IAAS,CAC9DA,EAAK,SAAW,SAGpBq3D,EAAM,OAAQjJ,GAAW,CACvB,MAAMvd,EAAQud,EAAO,cAAcpuD,EAAK,OAAO,EAC/C,UAAWi+B,KAAQ4S,EAAM,WACnB5S,EAAK,GAAG,UAAW,aAAa,GAClC+wE,EAAW,8BAA8B/wE,CAAI,CAGzD,CAAO,CACP,CAAK,CACF,CACH,EAIIi2E,GAAc,cAAc/gC,EAAO,CAIrC,WAAW,UAAW,CACpB,MAAO,CAAC2gC,GAAoBta,GAAQsZ,GAAsBG,EAAa,CACxE,CAID,WAAW,YAAa,CACtB,MAAO,aACR,CACH,EAIIkB,GAAQ,cAAchhC,EAAO,CAI/B,WAAW,UAAW,CACpB,MAAO,CAAC0gC,GAAYK,EAAW,CAChC,CAID,WAAW,YAAa,CACtB,MAAO,OACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECzvBA,IAAIE,GAA4B,cAAchsB,EAAQ,CAIpD,SAAU,CACR,MAAM9gC,EAAS,KAAK,OACd+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAC1D0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD,GAAI,CAACA,EAAO,QAAQ,IAAI8qD,EAAiB,EAAG,CAC1C,KAAK,UAAY,GACjB,KAAK,MAAQ,GACb,MACD,CACD,MAAMlvG,EAAYokD,EAAO,MAAM,SAAS,UAClCqtC,EAAkBzxF,EAAU,qBAClC,GAAI,CAACyxF,EAAiB,CACpB,MAAM2f,EAAyBD,EAAkB,6BAA6BnxG,CAAS,EACvF,KAAK,UAAY,CAAC,CAACoxG,EACnB,KAAK,MAAQ,CAAC,CAACA,EACf,MACD,CACD,KAAK,UAAYtF,EAAW,QAAQra,CAAe,EAC9C,KAAK,UAGR,KAAK,MAAQ,CAAC,CAAC0f,EAAkB,gCAAgC1f,CAAe,EAFhF,KAAK,MAAQ,EAIhB,CAYD,QAAQtpG,EAAU,GAAI,CACpB,KAAM,CAAE,mBAAAkpH,CAAoB,EAAGlpH,EAC/B,KAAK,OAAO,MAAM,OAAQ+iE,GAAW,CAC/B,KAAK,MACP,KAAK,kBAAkBA,CAAM,EAE7B,KAAK,kBAAkBA,EAAQmmD,CAAkB,CAEzD,CAAK,CACF,CAQD,kBAAkBnmD,EAAQmmD,EAAoB,CAE5C,MAAMrxG,EADQ,KAAK,OAAO,MACF,SAAS,UAC3BsxG,EAAsB,KAAK,OAAO,QAAQ,IAAI,qBAAqB,EACnExF,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACvD,IAAIyF,EAAgBvxG,EAAU,qBAC9B,MAAMwxG,EAAeF,EAAoB,iBAAiBC,CAAa,EACnEzF,EAAW,cAAcyF,CAAa,IACxC,KAAK,OAAO,QAAQ,gBAAgB,EACpCA,EAAgBvxG,EAAU,sBAE5B,MAAMyxG,EAAoBD,GAAgBtmD,EAAO,cAAc,SAAS,EACxEA,EAAO,OAAOumD,EAAmBF,CAAa,EAC1CF,GACFnmD,EAAO,aAAaumD,EAAmB,IAAI,CAE9C,CAOD,kBAAkBvmD,EAAQ,CACxB,MAAM9G,EAAS,KAAK,OACdpkD,EAAYokD,EAAO,MAAM,SAAS,UAClCktD,EAAsBltD,EAAO,QAAQ,IAAI,qBAAqB,EAC9D+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAChE,IAAImtD,EAAgBvxG,EAAU,qBAC1B0xG,EACAH,EACFG,EAAiBP,EAAkB,gCAAgCI,CAAa,GAEhFG,EAAiBP,EAAkB,6BAA6BnxG,CAAS,EACzEuxG,EAAgBG,EAAe,QAEjCJ,EAAoB,aAAaC,EAAeG,CAAc,EAC9DxmD,EAAO,aAAaqmD,EAAe,IAAI,EACvCrmD,EAAO,OAAOwmD,CAAc,CAC7B,CACH,EAGIC,GAAoB,cAAc1hC,EAAO,CAI3C,WAAW,YAAa,CACtB,MAAO,mBACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,gCAAgCsF,EAAmB,CACjD,UAAW3qH,KAAQ2qH,EAAkB,cACnC,GAAM3qH,GAAQA,EAAK,GAAG,UAAW,SAAS,EACxC,OAAOA,EAGX,OAAO,IACR,CAID,6BAA6B+Y,EAAW,CACtC,MAAM8rG,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACjD4F,EAAiB1xG,EAAU,iBAAkB,EAAC,aAAa,SAAS,EAC1E,OAAK0xG,GAGD5F,EAAW,aAAa4F,EAAe,MAAM,EACxCA,EAHA,IAMV,CAOD,6BAA6Bl6F,EAAS,CACpC,MAAMs0F,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACvD,OAAIt0F,EAAQ,MAAQ,cAAgBs0F,EAAW,iBAAiBt0F,EAAQ,MAAM,EACrE,CAAE,KAAM,IAEV,IACR,CACH,EAGIq6F,GAAsB,cAAc5hC,EAAO,CAI7C,WAAW,UAAW,CACpB,MAAO,CAACq8B,GAAYqF,EAAiB,CACtC,CAID,WAAW,YAAa,CACtB,MAAO,qBACR,CAID,YAAYvtD,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,kBAAoC,IAAI,OAC9C,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OACvB2D,EAAO,aAAa,SAAS,EAOhCA,EAAO,OAAO,UAAW,CACvB,QAAS,YACjB,CAAO,EARDA,EAAO,SAAS,UAAW,CACzB,QAAS,aACT,eAAgB,SAChB,QAAS,EACjB,CAAO,EAMH3D,EAAO,SAAS,IAAI,qBAAsB,IAAI8sD,GAA0B,KAAK,MAAM,CAAC,EACpF,KAAK,iBAAgB,EACrB,KAAK,mCAAkC,EACvC,KAAK,6BAA4B,CAClC,CAKD,kBAAmB,CACjB,MAAM9sD,EAAS,KAAK,OACd3/C,EAAO2/C,EAAO,QAAQ,KACtB0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAC1DljD,EAAIkjD,EAAO,EACjBA,EAAO,WAAW,IAAI,QAAQ,EAAE,iBAAiB,CAC/C,KAAO5sC,GAAY25F,EAAkB,6BAA6B35F,CAAO,EACzE,MAAO,SACb,CAAK,EACD4sC,EAAO,WAAW,IAAI,cAAc,EAAE,iBAAiB,CACrD,MAAO,UACP,KAAM,CAAColC,EAAc,CAAE,OAAAt+B,KAChB4gD,EAAW,aAAatiB,EAAa,MAAM,EAGzCt+B,EAAO,uBAAuB,YAAY,EAFxC,IAIjB,CAAK,EACD9G,EAAO,WAAW,IAAI,iBAAiB,EAAE,iBAAiB,CACxD,MAAO,UACP,KAAM,CAAColC,EAAc,CAAE,OAAAt+B,KAAa,CAClC,GAAI,CAAC4gD,EAAW,aAAatiB,EAAa,MAAM,EAC9C,OAAO,KAET,MAAMsoB,EAAoB5mD,EAAO,sBAAsB,YAAY,EACnEA,EAAO,kBAAkB,eAAgB,GAAM4mD,CAAiB,EAChEA,EAAkB,YAAc5wG,EAAE,qBAAqB,EACvDo8E,GAAkB,CAChB,KAAA74E,EACA,QAASqtG,EACT,YAAa,EACvB,CAAS,EACD,MAAMC,EAAWvoB,EAAa,OAAO,aAAa,KAAK,EACjD/tD,EAAQs2E,EAAW7wG,EAAE,wBAAyB,CAAC6wG,CAAQ,CAAC,EAAI7wG,EAAE,uBAAuB,EAC3F,OAAOowF,GAAiBwgB,EAAmB5mD,EAAQ,CAAE,MAAAzvB,CAAO,EAC7D,CACP,CAAK,CACF,CAMD,oCAAqC,CACnC,MAAM2oB,EAAS,KAAK,OACd0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAC1D4tD,EAAyB5tD,EAAO,SAAS,IAAI,iBAAiB,EAC9D6tD,EAAwB7tD,EAAO,SAAS,IAAI,gBAAgB,EAC5D8tD,EAAyBn/F,GAAQ,CACrC,GAAI,CAACA,EAAI,OACP,OAEF,KAAM,CAAE,WAAA87F,EAAY,WAAAztF,GAAerO,EAAI,OACvC,GAAI,CAAC87F,EACH,OAEF,GAAI/C,EAAW,aAAa+C,CAAU,EAAG,CACvC,MAAMsD,EAAoBhB,EAAkB,gCAAgCtC,CAAU,EACtF,GAAIsD,EAAmB,CACrB,KAAK,aAAa/wF,EAAY+wF,CAAiB,EAC/C,MACD,CACF,CACD,MAAMC,EAAyB,KAAK,iBAAiBvD,CAAU,EAC3DuD,GACF,KAAK,aAAahxF,EAAYgxF,CAAsB,CAE5D,EACQJ,GACF,KAAK,SAASA,EAAwB,UAAWE,EAAuB,CAAE,SAAU,KAAK,CAAE,EAEzFD,GACF,KAAK,SAASA,EAAuB,UAAWC,EAAuB,CAAE,SAAU,KAAK,CAAE,CAE7F,CAWD,iBAAiBN,EAAmB,CAClC,MAAMS,EAAa,KAAK,kBAAkB,IAAIT,CAAiB,EAC/D,OAAOS,EAAaC,GAAQ,SAASD,CAAU,EAAI,IACpD,CAmBD,aAAaT,EAAmBW,EAAS,CACvC,KAAK,kBAAkB,IAAIX,EAAmBW,EAAQ,OAAM,CAAE,CAC/D,CAKD,8BAA+B,CAC7B,MAAMnuD,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAChE+P,EAAM,SAAS,GAAG,cAAe,IAAM,CACrC,MAAMgxC,EAAUhxC,EAAM,SAAS,OAAO,WAAU,EAChD,UAAWq+C,KAAUrN,EAAS,CAC5B,GAAIqN,EAAO,eAAiB,MAC1B,SAEF,MAAMxE,EAAQwE,EAAO,MAAM,MAAM,UACjC,GAAI1G,EAAW,aAAakC,CAAK,EAAG,CAClC,MAAMuE,EAAUpB,EAAkB,gCAAgCnD,CAAK,EACvE,GAAI,CAACuE,EACH,OAEFnuD,EAAO,QAAQ,cAAcmuD,CAAO,CACrC,CACF,CACP,CAAK,CACF,CACH,EAGIE,GAAiB,cAAcxiC,EAAO,CAIxC,WAAW,UAAW,CACpB,MAAO,CAAC0hC,EAAiB,CAC1B,CAID,WAAW,YAAa,CACtB,MAAO,gBACR,CAID,MAAO,CACL,MAAMvtD,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KAC7B+sD,EAAoB/sD,EAAO,QAAQ,IAAI,mBAAmB,EAC1DljD,EAAIkjD,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAI,qBAAuBgZ,GAAW,CAC/D,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,oBAAoB,EAClD3/C,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,KAAMigE,GAAM,QACZ,QAAS,GACT,aAAc,EACtB,CAAO,EACDjgE,EAAK,KAAK,OAAQ,WAAW,EAAE,GAAG+iF,EAAS,QAAS,WAAW,EAC/D/iF,EAAK,KAAK,OAAO,EAAE,GAAG+iF,EAAS,QAAUpjG,GAAkB8c,EAAR9c,EAAU,qBAA0B,mBAAN,CAA0B,EAC3G,KAAK,SAASqgB,EAAM,UAAW,IAAM,CACnC2/C,EAAO,QAAQ,qBAAsB,CAAE,mBAAoB,EAAM,GACjE,MAAMsuD,EAAsBvB,EAAkB,6BAA6B/sD,EAAO,MAAM,SAAS,SAAS,EAC1G,GAAIsuD,EAAqB,CACvB,MAAMZ,EAAoB1tD,EAAO,QAAQ,OAAO,cAAcsuD,CAAmB,EACjF7kC,EAAY,qBAAoB,EAChCA,EAAY,OAAQ3iB,GAAW,CAC7BA,EAAO,SAAS,6BAA8B4mD,CAAiB,CAC3E,CAAW,CACF,CACD1tD,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM3/C,CACb,CAAK,CACF,CACH,EAIIkuG,GAAe,cAAc1iC,EAAO,CAItC,WAAW,UAAW,CACpB,MAAO,CAAC4hC,GAAqBY,EAAc,CAC5C,CAID,WAAW,YAAa,CACtB,MAAO,cACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC1ZA,IAAIG,GAAoB,cAAc1tB,EAAQ,CAQ5C,YAAY9gC,EAAQ98C,EAAQ,CAC1B,MAAM88C,CAAM,EACZ,KAAK,eAAiB,CACpB,WAAY,GACZ,YAAa,EACnB,EACI,KAAK,QAAU,IAAI,IAAI98C,EAAO,IAAKrB,GAAU,CAC3C,GAAIA,EAAM,UACR,UAAW2oG,KAAoB3oG,EAAM,cACnC,KAAK,eAAe2oG,CAAgB,EAAI3oG,EAAM,KAGlD,MAAO,CAACA,EAAM,KAAMA,CAAK,CAC1B,EAAC,CACH,CAID,SAAU,CAGR,MAAMuR,EAFS,KAAK,OACM,QAAQ,IAAI,YAAY,EACvB,+BAA+B,KAAK,OAAO,MAAM,SAAS,SAAS,EAC9F,KAAK,UAAY,CAAC,CAACA,EACd,KAAK,UAECA,EAAQ,aAAa,YAAY,EAC1C,KAAK,MAAQA,EAAQ,aAAa,YAAY,EAE9C,KAAK,MAAQ,KAAK,eAAeA,EAAQ,IAAI,EAJ7C,KAAK,MAAQ,EAMhB,CAiBD,QAAQrvB,EAAU,GAAI,CACpB,MAAMi8D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD+P,EAAM,OAAQjJ,GAAW,CACvB,MAAM2nD,EAAiB1qH,EAAQ,MACzB,CAAE,cAAAukH,EAAgB,EAAM,EAAGvkH,EACjC,IAAIwkH,EAAeb,EAAW,+BAA+B33C,EAAM,SAAS,SAAS,EACjF0+C,GAAkB,KAAK,uBAAuBA,EAAgBlG,CAAY,IAC5E,KAAK,OAAO,QAAQb,EAAW,aAAaa,CAAY,EAAI,kBAAoB,iBAAkB,CAAE,cAAAD,CAAe,GACnHC,EAAeb,EAAW,+BAA+B33C,EAAM,SAAS,SAAS,GAE/E,CAAC0+C,GAAkB,KAAK,QAAQ,IAAIA,CAAc,EAAE,UACtD3nD,EAAO,gBAAgB,aAAcyhD,CAAY,EAEjDzhD,EAAO,aAAa,aAAc2nD,EAAgBlG,CAAY,EAE5DD,GACFZ,EAAW,8BAA8Ba,CAAY,CAE7D,CAAK,CACF,CAOD,uBAAuBkG,EAAgBlG,EAAc,CAEnD,MAAO,CADgB,KAAK,QAAQ,IAAIkG,CAAc,EAAE,cACjC,SAASlG,EAAa,IAAI,CAClD,CACH,EAGI,CAAE,gBAAAmG,GAAiB,aAAAC,GAAc,WAAAC,GAAY,YAAAC,GAAa,aAAAC,GAAc,gBAAAC,GAAiB,iBAAAC,EAAkB,EAAG1uC,GAC9Gue,GAAkB,CAEpB,IAAI,QAAS,CACX,MAAO,CACL,KAAM,SACN,MAAO,UACP,KAAM8vB,GACN,cAAe,CAAC,aAAa,EAC7B,UAAW,EACjB,CACG,EAED,IAAI,WAAY,CACd,MAAO,CACL,KAAM,YACN,MAAO,qBACP,KAAMC,GACN,cAAe,CAAC,aAAc,aAAa,EAC3C,UAAW,wBACjB,CACG,EAED,IAAI,gBAAiB,CACnB,MAAO,CACL,KAAM,iBACN,MAAO,qBACP,KAAMG,GACN,cAAe,CAAC,YAAY,EAC5B,UAAW,8BACjB,CACG,EAED,IAAI,aAAc,CAChB,MAAO,CACL,KAAM,cACN,MAAO,iBACP,KAAMD,GACN,cAAe,CAAC,YAAY,EAC5B,UAAW,0BACjB,CACG,EAED,IAAI,YAAa,CACf,MAAO,CACL,KAAM,aACN,MAAO,sBACP,KAAMD,GACN,cAAe,CAAC,aAAc,aAAa,EAC3C,UAAW,yBACjB,CACG,EAED,IAAI,iBAAkB,CACpB,MAAO,CACL,KAAM,kBACN,MAAO,sBACP,KAAMG,GACN,cAAe,CAAC,YAAY,EAC5B,UAAW,+BACjB,CACG,EAED,IAAI,OAAQ,CACV,MAAO,CACL,KAAM,QACN,MAAO,iBACP,KAAMF,GACN,cAAe,CAAC,YAAY,EAC5B,UAAW,EACjB,CACG,EAED,IAAI,MAAO,CACT,MAAO,CACL,KAAM,OACN,MAAO,aACP,KAAMD,GACN,cAAe,CAAC,YAAY,EAC5B,UAAW,kBACjB,CACG,CACH,EACII,GAAgB,CAClB,KAAMP,GACN,KAAMK,GACN,MAAOC,GACP,OAAQF,GACR,WAAYF,GACZ,YAAaC,GACb,OAAQF,EACV,EACIO,GAA+B,CAAC,CAClC,KAAM,sBACN,MAAO,YACP,YAAa,uBACb,MAAO,CAAC,uBAAwB,uBAAuB,CACzD,EAAG,CACD,KAAM,uBACN,MAAO,aACP,YAAa,mBACb,MAAO,CAAC,4BAA6B,mBAAoB,4BAA4B,CACvF,CAAC,EACD,SAASC,GAAgB19E,EAAQ,CAG/B,OAFyBA,EAAO,iBAAiB,SAAW,IAC5B,IAAK29E,GAAgBC,GAAoBD,CAAW,CAAC,EAAE,OAAQA,GAAgBE,GAAcF,EAAa39E,CAAM,CAAC,CAEnJ,CACA,SAAS89E,GAA8BC,EAAqBC,EAAsB,CAChF,OAAID,GAAuBC,EAClB,CACL,QAAS,CACP,SACA,YACA,aACA,cACA,iBACA,kBACA,QACA,MACD,CACP,EACaD,EACF,CACL,QAAS,CAAC,QAAS,MAAM,CAC/B,EACaC,EACF,CACL,QAAS,CAAC,SAAU,YAAa,YAAY,CACnD,EAES,EACT,CACA,SAASC,GAA8BC,EAAkB,CACvD,OAAIA,EAAiB,IAAI,mBAAmB,GAAKA,EAAiB,IAAI,oBAAoB,EACjF,CAAC,GAAGT,EAA4B,EAEhC,EAEX,CACA,SAASG,GAAoBpnD,EAAY,CACvC,OAAI,OAAOA,GAAe,SACnB42B,GAAgB52B,CAAU,EAG7BA,EAAa,CAAE,GAAG42B,GAAgB52B,CAAU,CAAC,EAF7CA,EAAa,CAAE,KAAMA,GAKvBA,EAAa2nD,GAAY/wB,GAAgB52B,EAAW,IAAI,EAAGA,CAAU,EAEnE,OAAOA,EAAW,MAAS,WAC7BA,EAAW,KAAOgnD,GAAchnD,EAAW,IAAI,GAAKA,EAAW,MAE1DA,CACT,CACA,SAASqnD,GAAc3mG,EAAQ,CAAE,oBAAA6mG,EAAqB,qBAAAC,CAAoB,EAAI,CAC5E,KAAM,CAAE,cAAAzJ,EAAe,KAAArlH,CAAM,EAAGgoB,EAChC,GAAI,CAACq9F,GAAiB,CAACA,EAAc,QAAU,CAACrlH,EAC9C,OAAAkvH,GAAiB,CAAE,MAAOlnG,CAAM,CAAE,EAC3B,GACF,CACL,MAAMmnG,EAAoB,CAACN,EAAsB,aAAe,KAAMC,EAAuB,cAAgB,IAAI,EACjH,GAAI,CAACzJ,EAAc,KAAM+J,GAAgBD,EAAkB,SAASC,CAAW,CAAC,EAC9E,OAAAp0C,GAAW,iCAAkC,CAC3C,MAAOhzD,EACP,eAAgBq9F,EAAc,IAAK/hG,GAAUA,IAAU,aAAe,oBAAsB,oBAAoB,CACxH,CAAO,EACM,EAEV,CACD,MAAO,EACT,CACA,SAAS2rG,GAAY7wF,EAAQld,EAAO,CAClC,MAAMmuG,EAAgB,CAAE,GAAGnuG,GAC3B,UAAWlJ,KAAQomB,EACZ,OAAO,UAAU,eAAe,KAAKld,EAAOlJ,CAAI,IACnDq3G,EAAcr3G,CAAI,EAAIomB,EAAOpmB,CAAI,GAGrC,OAAOq3G,CACT,CACA,SAASH,GAAiB3nE,EAAM,CAC9ByzB,GAAW,+CAAgDzzB,CAAI,CACjE,CACA,IAAI+nE,GAAgB,CAClB,gBAAAd,GACA,8BAAAI,GACA,8BAAAG,GACA,iBAAAG,GACF,gBAAEhxB,GACA,cAAAowB,GACA,6BAAAC,EACF,EAGA,SAASgB,GAA0BhtG,EAAQ,CACzC,MAAO,CAACyL,EAAKjW,EAAMk2F,IAAkB,CACnC,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAMwhG,EAAWC,GAAyB13G,EAAK,kBAAmBwK,CAAM,EAClEmtG,EAAWD,GAAyB13G,EAAK,kBAAmBwK,CAAM,EAClE4qF,EAAcc,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EAC1D43F,EAAa1B,EAAc,OAC7ByhB,GACF/f,EAAW,YAAY+f,EAAS,UAAWviB,CAAW,EAEpDqiB,GACF7f,EAAW,SAAS6f,EAAS,UAAWriB,CAAW,CAEzD,CACA,CACA,SAASwiB,GAA0BptG,EAAQ,CACzC,MAAMqtG,EAAmB,CACvB,YAAartG,EAAO,OAAQrB,GAAU,CAACA,EAAM,WAAaA,EAAM,cAAc,SAAS,aAAa,CAAC,EACrG,WAAYqB,EAAO,OAAQrB,GAAU,CAACA,EAAM,WAAaA,EAAM,cAAc,SAAS,YAAY,CAAC,CACvG,EACE,MAAO,CAAC8M,EAAKjW,EAAMk2F,IAAkB,CACnC,GAAI,CAACl2F,EAAK,WACR,OAEF,MAAMo1F,EAAcp1F,EAAK,SACnB83G,EAAoB5rH,GAAM8T,EAAK,WAAW,SAAU,GAC1D,GAAK83G,GAGA5hB,EAAc,OAAO,eAAe4hB,EAAmB,YAAY,EAGxE,UAAW3uG,KAAS0uG,EAAiBC,EAAkB,IAAI,EACrD5hB,EAAc,WAAW,QAAQd,EAAa,CAAE,QAASjsF,EAAM,SAAS,CAAE,GAC5E+sF,EAAc,OAAO,aAAa,aAAc/sF,EAAM,KAAM2uG,CAAiB,CAGrF,CACA,CACA,SAASJ,GAAyBzvH,EAAMuiB,EAAQ,CAC9C,UAAWrB,KAASqB,EAClB,GAAIrB,EAAM,OAASlhB,EACjB,OAAOkhB,CAGb,CAGA,IAAI4uG,GAAoB,cAAc5kC,EAAO,CAI3C,WAAW,YAAa,CACtB,MAAO,mBACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,MAAO,CACL,KAAM,CAAE,gBAAiBwI,EAAkB,8BAA+BC,CAA8B,EAAKV,GACvGjwD,EAAS,KAAK,OACdwvD,EAAsBxvD,EAAO,QAAQ,IAAI,mBAAmB,EAC5DyvD,EAAuBzvD,EAAO,QAAQ,IAAI,oBAAoB,EACpEA,EAAO,OAAO,OAAO,eAAgB2wD,EAA+BnB,EAAqBC,CAAoB,CAAC,EAC9G,KAAK,iBAAmBiB,EAAiB,CACvC,iBAAkB1wD,EAAO,OAAO,IAAI,cAAc,EAClD,oBAAAwvD,EACA,qBAAAC,CACN,CAAK,EACD,KAAK,iBAAiBD,EAAqBC,CAAoB,EAC/D,KAAK,gBAAe,EACpBzvD,EAAO,SAAS,IAAI,aAAc,IAAIwuD,GAAkBxuD,EAAQ,KAAK,gBAAgB,CAAC,CACvF,CAMD,iBAAiBwvD,EAAqBC,EAAsB,CAC1D,MAAMzvD,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OACtB4wD,EAAuBV,GAA0B,KAAK,gBAAgB,EACtEW,EAAuBP,GAA0B,KAAK,gBAAgB,EAC5EtwD,EAAO,QAAQ,mBAAmB,GAAG,uBAAwB4wD,CAAoB,EACjF5wD,EAAO,KAAK,mBAAmB,GAAG,uBAAwB4wD,CAAoB,EAC1EpB,IACF7rD,EAAO,OAAO,aAAc,CAAE,gBAAiB,YAAc,GAC7D3D,EAAO,KAAK,iBAAiB,GAAG,iBAAkB6wD,EAAsB,CAAE,SAAU,KAAK,CAAE,GAEzFpB,IACF9rD,EAAO,OAAO,cAAe,CAAE,gBAAiB,YAAc,GAC9D3D,EAAO,KAAK,iBAAiB,GAAG,cAAe6wD,EAAsB,CAAE,SAAU,KAAK,CAAE,EAE3F,CAID,iBAAkB,CAChB,MAAM7wD,EAAS,KAAK,OACdv9D,EAAWu9D,EAAO,MAAM,SACxB0nD,EAAa1nD,EAAO,QAAQ,IAAIkoD,EAAU,EAC1C4I,EAAY,IAAI,IAAI,KAAK,iBAAiB,IAAKjvG,GAAU,CAACA,EAAM,KAAMA,CAAK,CAAC,CAAC,EACnFpf,EAAS,kBAAmBqkE,GAAW,CACrC,IAAInkB,EAAU,GACd,UAAWyrE,KAAU3rH,EAAS,OAAO,WAAU,EAC7C,GAAI2rH,EAAO,MAAQ,UAAYA,EAAO,MAAQ,aAAeA,EAAO,cAAgB,aAAc,CAChG,IAAIh7F,EAAUg7F,EAAO,MAAQ,SAAWA,EAAO,SAAS,UAAYA,EAAO,MAAM,MAAM,UAIvF,GAHIh7F,GAAWA,EAAQ,GAAG,UAAW,WAAW,GAAKA,EAAQ,WAAa,IACxEA,EAAUA,EAAQ,SAAS,CAAC,GAE1B,CAACs0F,EAAW,QAAQt0F,CAAO,EAC7B,SAEF,MAAM29F,EAAa39F,EAAQ,aAAa,YAAY,EACpD,GAAI,CAAC29F,EACH,SAEF,MAAMC,EAAuBF,EAAU,IAAIC,CAAU,GACjD,CAACC,GAAwB,CAACA,EAAqB,cAAc,SAAS59F,EAAQ,IAAI,KACpF0zC,EAAO,gBAAgB,aAAc1zC,CAAO,EAC5CuvB,EAAU,GAEb,CAEH,OAAOA,CACb,CAAK,CACF,CACH,EAIIsuE,GAAe,cAAcplC,EAAO,CAItC,WAAW,UAAW,CACpB,MAAO,CAAC4kC,EAAiB,CAC1B,CAID,WAAW,YAAa,CACtB,MAAO,cACR,CAgBD,IAAI,8BAA+B,CACjC,MAAM3zG,EAAI,KAAK,OAAO,EACtB,MAAO,CACL,YAAaA,EAAE,WAAW,EAC1B,aAAcA,EAAE,YAAY,EAC5B,UAAWA,EAAE,SAAS,EACtB,kBAAmBA,EAAE,iBAAiB,EACtC,aAAcA,EAAE,YAAY,EAC5B,qBAAsBA,EAAE,oBAAoB,EAC5C,iBAAkBA,EAAE,gBAAgB,EACpC,sBAAuBA,EAAE,qBAAqB,CACpD,CACG,CAID,MAAO,CACL,MAAM6+E,EAAU,KAAK,OAAO,QACtB+X,EAAgB,KAAK,OAAO,OAAO,IAAI,eAAe,GAAK,GAC3Dwd,EAAoBv1B,EAAQ,IAAI,mBAAmB,EACnDw1B,EAAgBC,GAAgBF,EAAkB,iBAAkB,KAAK,4BAA4B,EAC3G,UAAWG,KAAeF,EACxB,KAAK,cAAcE,CAAW,EAEhC,MAAMC,EAAmBF,GAAgB,CACvC,GAAG1d,EAAc,OAAO76B,EAAgB,EACxC,GAAGo3C,GAAc,8BAA8Bt0B,CAAO,CAC5D,EAAO,KAAK,4BAA4B,EACpC,UAAW41B,KAAkBD,EAC3B,KAAK,gBAAgBC,EAAgBJ,CAAa,CAErD,CAID,gBAAgBI,EAAgBJ,EAAe,CAC7C,MAAM7vH,EAAU,KAAK,OAAO,GAAG,iBAC/BA,EAAQ,IAAIiwH,EAAe,KAAOv4C,GAAW,CAC3C,IAAIw4C,EACJ,KAAM,CAAE,YAAAC,EAAa,MAAAziE,EAAO,MAAA7V,CAAK,EAAKo4E,EAChCG,EAAc1iE,EAAM,OAAQ2iE,GAAaR,EAAc,KAAK,CAAC,CAAE,KAAAxwH,CAAI,IAAOixH,GAAmBjxH,CAAI,IAAMgxH,CAAQ,CAAC,EAAE,IAAKE,GAAe,CAC1I,MAAMxmF,EAAS/pC,EAAQ,OAAOuwH,CAAU,EACxC,OAAIA,IAAeJ,IACjBD,EAAgBnmF,GAEXA,CACf,CAAO,EACG2jB,EAAM,SAAW0iE,EAAY,QAC/BzB,GAAc,iBAAiB,CAAE,SAAUsB,CAAgB,GAE7D,MAAM9yC,EAAeF,GAAevF,EAAQiF,EAAe,EACrD6zC,EAAkBrzC,EAAa,WAC/BszC,EAAuBD,EAAgB,UAC7C,OAAAnzC,GAAqBF,EAAcizC,EAAa,CAAE,oCAAqC,EAAM,GAC7FI,EAAgB,IAAI,CAClB,MAAOE,GAAuB74E,EAAOq4E,EAAc,KAAK,EACxD,MAAO,KACP,QAAS,EACjB,CAAO,EACDO,EAAqB,OAAO,OAAO,EACnCA,EAAqB,IAAI,CACvB,MAAO54E,CACf,CAAO,EACD24E,EAAgB,KAAK,MAAM,EAAE,OAAOJ,EAAa,OAAQ,IAAIO,IAAU,CACrE,MAAMp9G,EAAQo9G,EAAM,UAAUC,EAAgB,EAC9C,OAAOr9G,EAAQ,EAAI28G,EAAc,KAAOE,EAAY78G,CAAK,EAAE,IACnE,CAAO,EACDi9G,EAAgB,KAAK,OAAO,EAAE,OAAOJ,EAAa,OAAQ,IAAIO,IAAU,CACtE,MAAMp9G,EAAQo9G,EAAM,UAAUC,EAAgB,EAC9C,OAAOF,GAAuB74E,EAAOtkC,EAAQ,EAAI28G,EAAc,MAAQE,EAAY78G,CAAK,EAAE,KAAK,CACvG,CAAO,EACDi9G,EAAgB,KAAK,MAAM,EAAE,OAAOJ,EAAa,OAAQ,IAAIO,IAAUA,EAAM,KAAKC,EAAgB,CAAC,EACnGJ,EAAgB,KAAK,OAAO,EAAE,OAAOJ,EAAa,OAAQ,IAAIO,IAAUA,EAAM,KAAKC,EAAgB,EAAI,yBAA2B,MAAM,EACxIJ,EAAgB,GAAG,UAAW,IAAM,CAC7BJ,EAAY,KAAK,CAAC,CAAE,KAAAS,CAAI,IAAOA,CAAI,EAGtC1zC,EAAa,OAAS,CAACA,EAAa,OAFpC+yC,EAAc,KAAK,SAAS,CAItC,CAAO,EACD/yC,EAAa,KAAK,WAAW,EAAE,OAAOizC,EAAa,YAAa,IAAI3K,IAAeA,EAAW,KAAKmL,EAAgB,CAAC,EACpH,KAAK,SAASzzC,EAAc,UAAW,IAAM,CAC3C,KAAK,OAAO,QAAQ,KAAK,MAAK,CACtC,CAAO,EACMA,CACb,CAAK,CACF,CAID,cAAc2zC,EAAc,CAC1B,MAAMP,EAAaO,EAAa,KAChC,KAAK,OAAO,GAAG,iBAAiB,IAAIR,GAAmBC,CAAU,EAAI74C,GAAW,CAC9E,MAAMoqB,EAAU,KAAK,OAAO,SAAS,IAAI,YAAY,EAC/C/iF,EAAO,IAAIq5D,GAAWV,CAAM,EAClC,OAAA34D,EAAK,IAAI,CACP,MAAO+xG,EAAa,MACpB,KAAMA,EAAa,KACnB,QAAS,GACT,aAAc,EACtB,CAAO,EACD/xG,EAAK,KAAK,WAAW,EAAE,GAAG+iF,EAAS,WAAW,EAC9C/iF,EAAK,KAAK,MAAM,EAAE,GAAG+iF,EAAS,QAAUpjG,GAAUA,IAAU6xH,CAAU,EACtExxG,EAAK,GAAG,UAAW,KAAK,gBAAgB,KAAK,KAAMwxG,CAAU,CAAC,EACvDxxG,CACb,CAAK,CACF,CACD,gBAAgB1f,EAAM,CACpB,KAAK,OAAO,QAAQ,aAAc,CAAE,MAAOA,CAAI,CAAE,EACjD,KAAK,OAAO,QAAQ,KAAK,MAAK,CAC/B,CACH,EACA,SAASywH,GAAgBluG,EAAQyjG,EAAQ,CACvC,UAAW9kG,KAASqB,EACdyjG,EAAO9kG,EAAM,KAAK,IACpBA,EAAM,MAAQ8kG,EAAO9kG,EAAM,KAAK,GAGpC,OAAOqB,CACT,CACA,SAAS0uG,GAAmBjxH,EAAM,CAChC,MAAO,cAAcA,CAAI,EAC3B,CACA,SAASqxH,GAAuBK,EAAeC,EAAa,CAC1D,OAAQD,EAAgBA,EAAgB,KAAO,IAAMC,CACvD,CAGA,IAAIC,GAAa,cAAc1mC,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAAC4kC,GAAmBQ,EAAY,CACxC,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC9lBA,IAAIuB,GAAe,cAAc3mC,EAAO,CAItC,WAAW,UAAW,CACpB,MAAO,CAAC0nB,GAAyB2U,EAAU,CAC5C,CAID,WAAW,YAAa,CACtB,MAAO,cACR,CAID,WAAY,CACV,MAAMloD,EAAS,KAAK,OACd,EAAIA,EAAO,EACX43C,EAA0B53C,EAAO,QAAQ,IAAIuzC,EAAuB,EACpEmU,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClD43C,EAAwB,SAAS,QAAS,CACxC,UAAW,EAAE,eAAe,EAC5B,MAAO6a,GAA2BzyD,EAAO,OAAO,IAAI,eAAe,GAAK,EAAE,EAC1E,kBAAoBpkD,GAAc8rG,EAAW,8BAA8B9rG,CAAS,CAC1F,CAAK,CACF,CACH,EACA,SAAS62G,GAA2BhhF,EAAQ,CAC1C,OAAOA,EAAO,IAAKkF,GAASkiC,GAAiBliC,CAAI,EAAIA,EAAK,KAAOA,CAAI,CACvE,CAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECpBA,SAAS+7E,GAAsBn2G,EAAO,CAC9B,MAAAo2G,EAAkBp2G,EAAM,IAAKnX,GAASA,EAAK,QAAQ,IAAK,KAAK,CAAC,EACpE,OAAO,IAAI,OAAO,aAAautH,EAAgB,KAAK,GAAG,CAAC,IAAI,CAC9D,CACA,SAASC,GAAgBhJ,EAAO,CAC9B,OAAO,IAAI,QAAQ,CAACz0G,EAASC,IAAW,CAChC,MAAAy9G,EAAWjJ,EAAM,aAAa,KAAK,EACnC,MAAAiJ,CAAQ,EAAE,KAAMC,GAAaA,EAAS,MAAM,EAAE,KAAM7jF,GAAS,CAC3D,MAAA/W,EAAW66F,GAAiB9jF,EAAM4jF,CAAQ,EAE1ClzD,EAAW,SADLznC,EAAS,QAAQ,SAAU,EAAE,CACZ,GACvB8V,EAAO,IAAI,KAAK,CAACiB,CAAI,EAAG0wB,EAAU,CAAE,KAAMznC,CAAA,CAAU,EAC1D/iB,EAAQ64B,CAAI,EACb,EAAE,MAAOktD,GACDA,GAAOA,EAAI,OAAS,YAAc83B,GAA0BH,CAAQ,EAAE,KAAK19G,CAAO,EAAE,MAAMC,CAAM,EAAIA,EAAO8lF,CAAG,CACtH,EACF,CACH,CACA,SAAS+3B,GAAavL,EAAY7kH,EAAM,CAClC,OAAC6kH,EAAW,kBAAkB7kH,CAAI,GAAK,CAACA,EAAK,aAAa,KAAK,EAC1D,GAEF,CAAC,CAACA,EAAK,aAAa,KAAK,EAAE,MAAM,2BAA2B,GAAK,CAAC,CAACA,EAAK,aAAa,KAAK,EAAE,MAAM,SAAS,CACpH,CACA,SAASkwH,GAAiB9jF,EAAMjrC,EAAK,CACnC,OAAIirC,EAAK,KACAA,EAAK,KACHjrC,EAAI,MAAM,0BAA0B,EACtCA,EAAI,MAAM,0BAA0B,EAAE,CAAC,EAAE,cAEzC,YAEX,CACA,SAASgvH,GAA0BH,EAAU,CAC3C,OAAOK,GAAkBL,CAAQ,EAAE,KAAM5jF,GAAS,CAC1C,MAAA/W,EAAW66F,GAAiB9jF,EAAM4jF,CAAQ,EAE1ClzD,EAAW,SADLznC,EAAS,QAAQ,SAAU,EAAE,CACZ,GACtB,WAAI,KAAK,CAAC+W,CAAI,EAAG0wB,EAAU,CAAE,KAAMznC,CAAA,CAAU,EACrD,CACH,CACA,SAASg7F,GAAkBL,EAAU,CACnC,OAAO,IAAI,QAAQ,CAAC19G,EAASC,IAAW,CACtC,MAAMw0G,EAAQ3pC,GAAe,SAAS,cAAc,KAAK,EACnD2pC,EAAA,iBAAiB,OAAQ,IAAM,CACnC,MAAMuJ,EAASlzC,GAAe,SAAS,cAAc,QAAQ,EAC7DkzC,EAAO,MAAQvJ,EAAM,MACrBuJ,EAAO,OAASvJ,EAAM,OACVuJ,EAAO,WAAW,IAAI,EAC9B,UAAUvJ,EAAO,EAAG,CAAC,EAClBuJ,EAAA,OAAQlkF,GAASA,EAAO95B,EAAQ85B,CAAI,EAAI75B,GAAQ,EACxD,EACDw0G,EAAM,iBAAiB,QAAS,IAAMx0G,EAAQ,GAC9Cw0G,EAAM,IAAMiJ,CAAA,CACb,CACH,CAGA,IAAIO,GAAgB,cAAcvnC,EAAO,CAIvC,WAAW,YAAa,CACf,qBACT,CAIA,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACX4rD,EAAoB5yC,GAAW,CAC7B,MAAA34D,EAAO,IAAIy/F,GAAqB9mC,CAAM,EACtCoqB,EAAUpjC,EAAO,SAAS,IAAI,aAAa,EAC3CqzD,EAAarzD,EAAO,OAAO,IAAI,oBAAoB,EACnDszD,EAAmBZ,GAAsBW,CAAU,EACzD,OAAAhzG,EAAK,IAAI,CACP,aAAcgzG,EAAW,IAAKjuH,GAAS,SAASA,CAAI,EAAE,EAAE,KAAK,GAAG,EAChE,mBAAoB,GACpB,MAAO,EAAE,4BAA4B,EACrC,KAAMk7E,GAAM,YACZ,QAAS,GACV,EACDjgE,EAAK,KAAK,WAAW,EAAE,GAAG+iF,CAAO,EACjC/iF,EAAK,GAAG,OAAQ,CAACsO,EAAK4kG,IAAU,CAC9B,MAAMC,EAAiB,MAAM,KAAKD,CAAK,EAAE,OAAQvlF,GAASslF,EAAiB,KAAKtlF,EAAK,IAAI,CAAC,EACtFwlF,EAAe,SACjBxzD,EAAO,QAAQ,cAAe,CAAE,KAAMwzD,CAAgB,GAC/CxzD,EAAA,QAAQ,KAAK,QACtB,CACD,EACM3/C,CAAA,EAIT,GAFA2/C,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,EAC9D5rD,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,EAC1D5rD,EAAO,QAAQ,IAAI,eAAe,EAAG,CACvC,MAAMyzD,EAAgBzzD,EAAO,QAAQ,IAAI,eAAe,EAClDojC,EAAUpjC,EAAO,SAAS,IAAI,aAAa,EACjDyzD,EAAc,oBAAoB,CAChC,KAAM,SACN,WAAYrwB,EACZ,kBAAmB,IAAM,CACvB,MAAMswB,EAAoB1zD,EAAO,GAAG,iBAAiB,OAAO,aAAa,EACzE,OAAA0zD,EAAkB,KAAK,OAAO,EAAE,GAAGD,EAAe,kBAAoBvH,GAAsC,EAAlBA,EAAoB,8BAAmC,4BAAN,CAAmC,EACvKwH,CACT,EACA,gBAAiB,IAAM,CACrB,MAAMA,EAAoB1zD,EAAO,GAAG,iBAAiB,OAAO,aAAa,EACzE,OAAA0zD,EAAkB,SAAW,GAC7BA,EAAkB,KAAK,OAAO,EAAE,GAAGD,EAAe,kBAAoBvH,GAAsC,EAAlBA,EAAoB,wBAA6B,sBAAN,CAA6B,EAChJwH,EAAA,GAAG,UAAW,IAAM,CACpCD,EAAc,aAAa,OAAS,GACrC,EACMC,CACT,EACD,CACH,CACF,CACF,EAMIC,GAAsB,cAAc9nC,EAAO,CAI7C,WAAW,YAAa,CACf,2BACT,CAIA,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,mBAAqB,CAACrxC,EAAKjW,EAAMk2F,IAAkB,CACtD,MAAMglB,EAAU,KAAK,OACfvK,EAAa3wG,EAAK,KAClBm7G,EAAWxK,EAAW,aAAa,UAAU,EAC/C,IAACza,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM+4F,EAAakM,EAAQ,QAAQ,IAAI,YAAY,EAC7CE,EAAiBF,EAAQ,QAAQ,IAAI7U,EAAc,EACnD/wF,EAAS6lG,EAAWn7G,EAAK,kBAAoB,KAC7C6jB,EAAc,KAAK,YACnBw3F,EAAaH,EAAQ,QAAQ,OAAO,cAAcvK,CAAU,EAC5D/Y,EAAa1B,EAAc,OACjC,GAAI5gF,GAAU,UAAW,CACvBgmG,GAAmBD,EAAYzjB,CAAU,EACxB2jB,GAAAvM,EAAYnrF,EAAaw3F,EAAYzjB,CAAU,EAChE,MACF,CACA,GAAItiF,GAAU,YAAa,CACzB,MAAMoxF,EAAS0U,EAAe,QAAQ,IAAID,CAAQ,EAClDG,GAAmBD,EAAYzjB,CAAU,EACpC8O,GAGH8U,GAAiBH,EAAYzjB,CAAU,EACvC6jB,GAAiBJ,EAAYzjB,EAAY8O,EAAQwU,EAAQ,QAAQ,IAAI,EAClDQ,GAAA1M,EAAYqM,EAAYzjB,EAAY8O,CAAM,GAJ5C6U,GAAAvM,EAAYnrF,EAAaw3F,EAAYzjB,CAAU,EAMlE,MACF,CACItiF,GAAU,YAAc8lG,EAAe,QAAQ,IAAID,CAAQ,GAC7DQ,GAAkBN,EAAYzjB,EAAYsjB,EAAQ,QAAQ,IAAI,EAEhEU,GAAiBP,EAAYzjB,CAAU,EACvC4jB,GAAiBH,EAAYzjB,CAAU,EACvCikB,GAAkBR,EAAYzjB,CAAU,GAE1C,KAAK,YAAc,4EACrB,CAIA,MAAO,CACL,MAAMtwC,EAAS,KAAK,OAChBA,EAAO,QAAQ,IAAI,mBAAmB,GACxCA,EAAO,QAAQ,mBAAmB,GAAG,oCAAqC,KAAK,kBAAkB,EAE/FA,EAAO,QAAQ,IAAI,oBAAoB,GACzCA,EAAO,QAAQ,mBAAmB,GAAG,qCAAsC,KAAK,kBAAkB,CAEtG,CACF,EACA,SAASg0D,GAAmBD,EAAYjtD,EAAQ,CACzCitD,EAAW,SAAS,WAAW,GAC3BjtD,EAAA,SAAS,YAAaitD,CAAU,CAE3C,CACA,SAASQ,GAAkBR,EAAYjtD,EAAQ,CACtCA,EAAA,YAAY,YAAaitD,CAAU,CAC5C,CACA,SAASE,GAAiBvM,EAAYnrF,EAAaw3F,EAAYjtD,EAAQ,CAChEitD,EAAW,SAAS,6BAA6B,GAC7CjtD,EAAA,SAAS,8BAA+BitD,CAAU,EAErD,MAAAS,EAAU9M,EAAW,mBAAmBqM,CAAU,EACpDS,EAAQ,aAAa,KAAK,IAAMj4F,GAC3BuqC,EAAA,aAAa,MAAOvqC,EAAai4F,CAAO,EAE5CC,GAAcV,EAAY,aAAa,GAC1CjtD,EAAO,OAAOA,EAAO,oBAAoB0tD,CAAO,EAAGE,GAAmB5tD,CAAM,CAAC,CAEjF,CACA,SAASotD,GAAiBH,EAAYjtD,EAAQ,CACxCitD,EAAW,SAAS,6BAA6B,GAC5CjtD,EAAA,YAAY,8BAA+BitD,CAAU,EAE7CY,GAAAZ,EAAYjtD,EAAQ,aAAa,CACpD,CACA,SAASqtD,GAAiBJ,EAAYjtD,EAAQs4C,EAAQ/+F,EAAM,CACpD,MAAAu0G,EAAcC,GAAmB/tD,CAAM,EAC7CA,EAAO,OAAOA,EAAO,iBAAiBitD,EAAY,KAAK,EAAGa,CAAW,EACrExV,EAAO,GAAG,yBAA0B,CAACzwF,EAAKhuB,EAAMX,IAAU,CACnDqgB,EAAA,OAAQysF,GAAY,CACvBA,EAAQ,SAAS,QAAS9sG,EAAQ,IAAK40H,CAAW,EACnD,EACF,CACH,CACA,SAASN,GAAiBP,EAAYjtD,EAAQ,CAC3B6tD,GAAAZ,EAAYjtD,EAAQ,aAAa,CACpD,CACA,SAASutD,GAAkBN,EAAYjtD,EAAQzmD,EAAM,CACnD,MAAMy0G,EAAehuD,EAAO,gBAAgB,MAAO,CAAE,MAAO,gCAAiC,EAC7FA,EAAO,OAAOA,EAAO,iBAAiBitD,EAAY,KAAK,EAAGe,CAAY,EACtE,WAAW,IAAM,CACVz0G,EAAA,OAAQysF,GAAYA,EAAQ,OAAOA,EAAQ,cAAcgoB,CAAY,CAAC,CAAC,GAC3E,GAAG,CACR,CACA,SAASD,GAAmB/tD,EAAQ,CAClC,MAAM8tD,EAAc9tD,EAAO,gBAAgB,MAAO,CAAE,MAAO,kBAAmB,EACvE,OAAAA,EAAA,kBAAkB,cAAe,GAAM8tD,CAAW,EAClDA,CACT,CACA,SAASF,GAAmB5tD,EAAQ,CAClC,MAAMvqC,EAAcuqC,EAAO,gBAAgB,MAAO,CAAE,MAAO,+BAAgC,EACpF,OAAAA,EAAA,kBAAkB,cAAe,GAAMvqC,CAAW,EAClDA,CACT,CACA,SAASk4F,GAAcM,EAAaC,EAAgB,CACvC,UAAAz9E,KAASw9E,EAAY,cAC1B,GAAAx9E,EAAM,kBAAkBy9E,CAAc,EACjC,OAAAz9E,CAGb,CACA,SAASo9E,GAAiBZ,EAAYjtD,EAAQkuD,EAAgB,CACtD,MAAA5hG,EAAUqhG,GAAcV,EAAYiB,CAAc,EACpD5hG,GACF0zC,EAAO,OAAOA,EAAO,cAAc1zC,CAAO,CAAC,CAE/C,CACA,SAASghG,GAAmB1M,EAAYqM,EAAYjtD,EAAQs4C,EAAQ,CAClE,GAAIA,EAAO,KAAM,CACT,MAAAoV,EAAU9M,EAAW,mBAAmBqM,CAAU,EACxDjtD,EAAO,aAAa,MAAOs4C,EAAO,KAAMoV,CAAO,CACjD,CACF,CAGA,IAAIS,GAAqB,cAAcn0B,EAAQ,CAI7C,SAAU,CACR,MAAM9gC,EAAS,KAAK,OACd0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5CqtC,EAAkBrtC,EAAO,MAAM,SAAS,UAAU,qBACxD,KAAK,UAAY0nD,EAAW,eAAoB,GAAAA,EAAW,QAAQra,CAAe,CACpF,CAQA,QAAQtpG,EAAS,CACT,MAAAwvH,EAAQhqF,GAAQxlC,EAAQ,IAAI,EAC5B6X,EAAY,KAAK,OAAO,MAAM,SAAS,UACvC8rG,EAAa,KAAK,OAAO,QAAQ,IAAI,YAAY,EACjDpf,EAAsB,OAAO,YAAY1sF,EAAU,cAAe,GAClE23G,EAAA,QAAQ,CAACvlF,EAAMn5B,IAAU,CACvB,MAAAw4F,EAAkBzxF,EAAU,qBAClC,GAAI/G,GAASw4F,GAAmBqa,EAAW,QAAQra,CAAe,EAAG,CACnE,MAAMr9E,EAAW,KAAK,OAAO,MAAM,oBAAoBq9E,CAAe,EACjE,kBAAar/D,EAAMs6D,EAAqBt4E,CAAQ,OAEhD,kBAAage,EAAMs6D,CAAmB,CAC7C,CACD,CACH,CAIA,aAAat6D,EAAMnmC,EAAYmoB,EAAU,CACvC,MAAMgwC,EAAS,KAAK,OAEdo/C,EADiBp/C,EAAO,QAAQ,IAAI++C,EAAc,EAC1B,aAAa/wE,CAAI,EACzC05E,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC7Co/C,GAGMsI,EAAA,YAAY,CAAE,GAAG7/G,EAAY,SAAUu3G,EAAO,IAAMpvF,CAAQ,CACzE,CACF,EAGIklG,GAAqB,cAAcrpC,EAAO,CAI5C,WAAW,UAAW,CACpB,MAAO,CAACkzB,GAAgBxzB,GAAcytB,GAAmBkP,EAAU,CACrE,CACA,WAAW,YAAa,CACf,0BACT,CAIA,YAAYloD,EAAQ,CAClB,MAAMA,CAAM,EACLA,EAAA,OAAO,OAAO,QAAS,CAC5B,OAAQ,CACN,MAAO,CAAC,OAAQ,MAAO,MAAO,MAAO,OAAQ,MAAM,CACrD,EACD,EACI,8BAA2C,GAClD,CAIA,MAAO,CACL,MAAMA,EAAS,KAAK,OACdl9D,EAAMk9D,EAAO,MAAM,SACnB4T,EAAa5T,EAAO,WACpB8zD,EAAiB9zD,EAAO,QAAQ,IAAI++C,EAAc,EAClD2I,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C08C,EAAoB18C,EAAO,QAAQ,IAAI,mBAAmB,EAC1DqzD,EAAaX,GAAsB1yD,EAAO,OAAO,IAAI,oBAAoB,CAAC,EAC1Em1D,EAAqB,IAAIF,GAAmBj1D,CAAM,EACjDA,EAAA,SAAS,IAAI,cAAem1D,CAAkB,EAC9Cn1D,EAAA,SAAS,IAAI,cAAem1D,CAAkB,EAC1CvhD,EAAA,IAAI,QAAQ,EAAE,qBAAqB,CAC5C,KAAM,CACJ,KAAM,MACN,IAAK,UACP,EACA,MAAO,WACR,EACI,cAAS5T,EAAO,QAAQ,KAAK,SAAU,iBAAkB,CAACrxC,EAAKjW,IAAS,CACvE,GAAA08G,GAAe18G,EAAK,YAAY,EAClC,OAEI,MAAA28G,EAAS,MAAM,KAAK38G,EAAK,aAAa,KAAK,EAAE,OAAQs1B,GACpDA,EAGEqlF,EAAW,KAAKrlF,EAAK,IAAI,EAFvB,EAGV,EACIqnF,EAAO,SAGZ1mG,EAAI,KAAK,EACFqxC,EAAA,MAAM,OAAQ8G,GAAW,CAC1BpuD,EAAK,cACPouD,EAAO,aAAapuD,EAAK,aAAa,IAAKuvF,GAAcjoC,EAAO,QAAQ,OAAO,aAAaioC,CAAS,CAAC,CAAC,EAEzGjoC,EAAO,QAAQ,cAAe,CAAE,KAAMq1D,CAAQ,GAC/C,GACF,EACD,KAAK,SAAS3Y,EAAmB,sBAAuB,CAAC/tF,EAAKjW,IAAS,CACrE,MAAM48G,EAAkB,MAAM,KAAKt1D,EAAO,QAAQ,KAAK,cAActnD,EAAK,OAAO,CAAC,EAAE,IAAK1Y,GAAUA,EAAM,IAAI,EAAE,OAAQ8tG,GAAgBmlB,GAAavL,EAAY5Z,CAAW,GAAK,CAACA,EAAY,aAAa,iBAAiB,CAAC,EAAE,IAAKA,IAC1N,CAAE,QAAS8kB,GAAgB9kB,CAAW,EAAG,aAAcA,GAC/D,EACG,IAACwnB,EAAgB,OACnB,OAEF,MAAMxuD,EAAS,IAAIkkD,GAAahrD,EAAO,QAAQ,KAAK,QAAQ,EAC5D,UAAWu1D,KAAkBD,EAAiB,CAC5CxuD,EAAO,aAAa,kBAAmB,GAAMyuD,EAAe,YAAY,EACxE,MAAMnW,EAAS0U,EAAe,aAAayB,EAAe,OAAO,EAC7DnW,IACFt4C,EAAO,aAAa,MAAO,GAAIyuD,EAAe,YAAY,EAC1DzuD,EAAO,aAAa,WAAYs4C,EAAO,GAAImW,EAAe,YAAY,EAE1E,EACD,EACDv1D,EAAO,QAAQ,KAAK,SAAS,GAAG,WAAY,CAACrxC,EAAKjW,IAAS,CACzDA,EAAK,eAAe,EACrB,EACG5V,EAAA,GAAG,SAAU,IAAM,CACf,MAAAi+G,EAAUj+G,EAAI,OAAO,WAAW,CAAE,0BAA2B,GAAM,EAAE,UACrE0yH,MAAwC,IAC9C,UAAWrzC,KAAS4+B,EAClB,GAAI5+B,EAAM,MAAQ,UAAYA,EAAM,MAAQ,QAAS,CAC7C,MAAAxrC,EAAOwrC,EAAM,SAAS,UACtBszC,EAAwBtzC,EAAM,SAAS,KAAK,UAAY,aAC9D,UAAWomC,KAAgBmN,GAAwB11D,EAAQrpB,CAAI,EAAG,CAC1D,MAAAk9E,EAAWtL,EAAa,aAAa,UAAU,EACrD,GAAI,CAACsL,EACH,SAEF,MAAMzU,EAAS0U,EAAe,QAAQ,IAAID,CAAQ,EAC7CzU,IAGDqW,EACGD,EAAkB,IAAI3B,CAAQ,GACjCzU,EAAO,MAAM,GAGfoW,EAAkB,IAAI3B,CAAQ,EACzB,0BAAqB,IAAIA,EAAUtL,CAAY,EAChDnJ,EAAO,QAAU,QACnB,KAAK,eAAeA,CAAM,GAGhC,CACF,CACF,CACD,EACD,KAAK,GAAG,iBAAkB,CAACzwF,EAAK,CAAE,aAAA45F,EAAc,KAAA7vG,KAAW,CACzD,MAAMi9G,EAAOj9G,EAAK,KAAOA,EAAK,KAAOA,EACrC,KAAK,OAAO,MAAM,OAAQouD,GAAW,CACnCA,EAAO,aAAa,MAAO6uD,EAAK,QAASpN,CAAY,EAChD,wCAAmCoN,EAAMpN,EAAczhD,CAAM,EAClE4gD,EAAW,8BAA8Ba,CAAY,EACtD,GACA,CAAE,SAAU,MAAO,CACxB,CAIA,WAAY,CACJ,MAAA5kD,EAAS,KAAK,OAAO,MAAM,OAC7B,KAAK,OAAO,QAAQ,IAAI,mBAAmB,GAC7CA,EAAO,OAAO,aAAc,CAC1B,gBAAiB,CAAC,WAAY,cAAc,EAC7C,EAEC,KAAK,OAAO,QAAQ,IAAI,oBAAoB,GAC9CA,EAAO,OAAO,cAAe,CAC3B,gBAAiB,CAAC,WAAY,cAAc,EAC7C,CAEL,CAQA,eAAey7C,EAAQ,CACrB,MAAMp/C,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfljD,EAAIkjD,EAAO,OAAO,EAClB8zD,EAAiB9zD,EAAO,QAAQ,IAAI++C,EAAc,EAClD6W,EAAe51D,EAAO,QAAQ,IAAIurB,EAAY,EAC9Cm8B,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5C61D,EAAsB,KAAK,qBACjC,OAAA9lD,EAAM,cAAc,CAAE,WAAY,EAAM,EAAIjJ,GAAW,CACrDA,EAAO,aAAa,eAAgB,UAAW+uD,EAAoB,IAAIzW,EAAO,EAAE,CAAC,EAClF,EACMA,EAAO,OAAO,KAAK,IAAM,CACxB,MAAAzpG,EAAUypG,EAAO,SACjBmJ,EAAesN,EAAoB,IAAIzW,EAAO,EAAE,EACtD,GAAItlC,GAAY,SAAU,CACxB,MAAMi6C,EAAa/zD,EAAO,QAAQ,OAAO,cAAcuoD,CAAY,EAC7DiM,EAAU9M,EAAW,mBAAmBqM,CAAU,EACxD/zD,EAAO,QAAQ,KAAK,KAAK,SAAU,IAAM,CACnC,IAACw0D,EAAQ,OACX,OAEF,MAAMsB,EAAY91D,EAAO,QAAQ,KAAK,aAAa,aAAaw0D,EAAQ,MAAM,EAC9E,GAAI,CAACsB,EACH,OAEI,MAAAC,EAAkBD,EAAU,MAAM,QACxCA,EAAU,MAAM,QAAU,OAC1BA,EAAU,QAAUA,EAAU,aAC9BA,EAAU,MAAM,QAAUC,CAAA,CAC3B,CACH,CACA,OAAAhmD,EAAM,cAAc,CAAE,WAAY,EAAM,EAAIjJ,GAAW,CAC9CA,EAAA,aAAa,eAAgB,YAAayhD,CAAY,EAC9D,EACM5yG,CAAA,CACR,EAAE,KAAM+C,GAAS,CAChBq3D,EAAM,cAAc,CAAE,WAAY,EAAM,EAAIjJ,GAAW,CACrD,MAAMyhD,EAAesN,EAAoB,IAAIzW,EAAO,EAAE,EAC/Ct4C,EAAA,aAAa,eAAgB,WAAYyhD,CAAY,EAC5D,KAAK,KAAK,iBAAkB,CAAE,KAAA7vG,EAAM,aAAA6vG,CAAc,GACnD,EACKyN,GAAA,CACP,EAAE,MAAO3+G,GAAU,CAClB,GAAI+nG,EAAO,SAAW,SAAWA,EAAO,SAAW,UAC3C,MAAA/nG,EAEJ+nG,EAAO,QAAU,SAAW/nG,GAC9Bu+G,EAAa,YAAYv+G,EAAO,CAC9B,MAAOyF,EAAE,eAAe,EACxB,UAAW,SACZ,EAEHizD,EAAM,cAAc,CAAE,WAAY,EAAM,EAAIjJ,GAAW,CACrDA,EAAO,OAAO+uD,EAAoB,IAAIzW,EAAO,EAAE,CAAC,EACjD,EACK4W,GAAA,CACP,EACD,SAASA,GAAQ,CACfjmD,EAAM,cAAc,CAAE,WAAY,EAAM,EAAIjJ,GAAW,CACrD,MAAMyhD,EAAesN,EAAoB,IAAIzW,EAAO,EAAE,EAC/Ct4C,EAAA,gBAAgB,WAAYyhD,CAAY,EACxCzhD,EAAA,gBAAgB,eAAgByhD,CAAY,EAC/BsN,EAAA,OAAOzW,EAAO,EAAE,EACrC,EACD0U,EAAe,cAAc1U,CAAM,CACrC,CACF,CAOA,mCAAmC1mG,EAAMkxG,EAAO9iD,EAAQ,CACtD,IAAIllD,EAAW,EACf,MAAMq0G,EAAkB,OAAO,KAAKv9G,CAAI,EAAE,OAAQ3Y,GAAQ,CAClD,MAAA2hB,EAAQ,SAAS3hB,EAAK,EAAE,EAC1B,IAAC,MAAM2hB,CAAK,EACH,OAAAE,EAAA,KAAK,IAAIA,EAAUF,CAAK,EAC5B,EAEV,GAAE,IAAK3hB,GAAQ,GAAG2Y,EAAK3Y,CAAG,CAAC,IAAIA,CAAG,GAAG,EAAE,KAAK,IAAI,EACjD,GAAIk2H,GAAmB,GAAI,CACzB,MAAMpuH,EAAa,CACjB,OAAQouH,CAAA,EAEN,CAACrM,EAAM,aAAa,OAAO,GAAK,CAACA,EAAM,aAAa,QAAQ,IAC9D/hH,EAAW,MAAQ+Z,GAEdklD,EAAA,cAAcj/D,EAAY+hH,CAAK,CACxC,CACF,CACF,EACA,SAASwL,GAAenc,EAAc,CAC7B,aAAM,KAAKA,EAAa,KAAK,EAAE,SAAS,WAAW,GAAKA,EAAa,QAAQ,WAAW,IAAM,EACvG,CACA,SAASyc,GAAwB11D,EAAQrpB,EAAM,CAC7C,MAAM+wE,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC3C,aAAM,KAAKA,EAAO,MAAM,cAAcrpB,CAAI,CAAC,EAAE,OAAQ32C,GAAU0nH,EAAW,QAAQ1nH,EAAM,IAAI,CAAC,EAAE,IAAKA,GAAUA,EAAM,IAAI,CACjI,CAGA,IAAIk2H,GAAc,cAAcrqC,EAAO,CAIrC,WAAW,YAAa,CACf,mBACT,CAIA,WAAW,UAAW,CACb,OAACqpC,GAAoB9B,GAAeO,EAAmB,CAChE,CACF,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECjkBA,IAAIwC,GAAqB,cAAcr1B,EAAQ,CAI7C,SAAU,CACR,MAAM9gC,EAAS,KAAK,OAEd5sC,EADa4sC,EAAO,QAAQ,IAAI,YAAY,EACvB,+BAA+BA,EAAO,MAAM,SAAS,SAAS,EACzF,KAAK,UAAY,CAAC,CAAC5sC,EACf,CAACA,GAAW,CAACA,EAAQ,aAAa,cAAc,EAClD,KAAK,MAAQ,KAEb,KAAK,MAAQ,CACX,MAAOA,EAAQ,aAAa,cAAc,EAC1C,OAAQ,IAChB,CAEG,CAgBD,QAAQrvB,EAAS,CACf,MAAMi8D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAC5CuoD,EAAeb,EAAW,+BAA+B33C,EAAM,SAAS,SAAS,EACvF,KAAK,MAAQ,CACX,MAAOhsE,EAAQ,MACf,OAAQ,IACd,EACQwkH,GACFx4C,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,aAAa,eAAgB/iE,EAAQ,MAAOwkH,CAAY,EAC/DzhD,EAAO,gBAAgB,gBAAiByhD,CAAY,EACpDb,EAAW,8BAA8Ba,CAAY,CAC7D,CAAO,CAEJ,CACH,EAGI6N,GAAqB,cAAcvqC,EAAO,CAI5C,WAAW,UAAW,CACpB,MAAO,CAACq8B,EAAU,CACnB,CAID,WAAW,YAAa,CACtB,MAAO,oBACR,CAID,YAAYloD,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAO,QAAS,CAC5B,WAAY,IACZ,cAAe,CACb,CACE,KAAM,uBACN,MAAO,KACP,KAAM,UACP,EACD,CACE,KAAM,iBACN,MAAO,KACP,KAAM,OACP,EACD,CACE,KAAM,iBACN,MAAO,KACP,KAAM,QACP,EACD,CACE,KAAM,iBACN,MAAO,KACP,KAAM,OACP,CACF,CACP,CAAK,CACF,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACdq2D,EAAqB,IAAIF,GAAmBn2D,CAAM,EACxD,KAAK,gBAAe,EACpB,KAAK,oBAAoB,YAAY,EACrC,KAAK,oBAAoB,aAAa,EACtCA,EAAO,SAAS,IAAI,cAAeq2D,CAAkB,EACrDr2D,EAAO,SAAS,IAAI,cAAeq2D,CAAkB,CACtD,CACD,iBAAkB,CACZ,KAAK,OAAO,QAAQ,IAAI,mBAAmB,GAC7C,KAAK,OAAO,MAAM,OAAO,OAAO,aAAc,CAAE,gBAAiB,CAAC,eAAgB,eAAe,CAAG,GAElG,KAAK,OAAO,QAAQ,IAAI,oBAAoB,GAC9C,KAAK,OAAO,MAAM,OAAO,OAAO,cAAe,CAAE,gBAAiB,CAAC,eAAgB,eAAe,CAAG,EAExG,CAMD,oBAAoBlO,EAAW,CAC7B,MAAMnoD,EAAS,KAAK,OACd0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClDA,EAAO,WAAW,IAAI,UAAU,EAAE,IAAK4rC,GAAeA,EAAW,GAAG,0BAA0Buc,CAAS,GAAI,CAACx5F,EAAKjW,EAAMk2F,IAAkB,CACvI,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM2hF,EAAa1B,EAAc,OAC3B4lB,EAAU5lB,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACxDA,EAAK,oBAAsB,MAC7B43F,EAAW,SAAS,QAAS53F,EAAK,kBAAmB87G,CAAO,EAC5DlkB,EAAW,SAAS,gBAAiBkkB,CAAO,IAE5ClkB,EAAW,YAAY,QAASkkB,CAAO,EACvClkB,EAAW,YAAY,gBAAiBkkB,CAAO,EAElD,EAAC,EACFx0D,EAAO,WAAW,IAAI,cAAc,EAAE,qBAAqB,CACzD,MAAO,CACL,KAAMmoD,EACN,IAAK,eACN,EACD,KAAOmO,IAAyB,CAC9B,IAAK,QACL,MAAO,CACL,OAAUA,CACX,CACT,EACA,CAAK,EACDt2D,EAAO,WAAW,IAAI,iBAAiB,EAAE,IAAK4rC,GAAeA,EAAW,GAAG,2BAA2Buc,CAAS,GAAI,CAACx5F,EAAKjW,EAAMk2F,IAAkB,CAC/I,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM2hF,EAAa1B,EAAc,OAC3B4lB,EAAU5lB,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACtDjY,EAAS0nH,IAAc,cAAgBT,EAAW,mBAAmB8M,CAAO,EAAIA,EAClF97G,EAAK,oBAAsB,KAC7B43F,EAAW,SAAS,SAAU53F,EAAK,kBAAmBjY,CAAM,EAE5D6vG,EAAW,YAAY,SAAU7vG,CAAM,CAE1C,EAAC,EACFu/D,EAAO,WAAW,IAAI,QAAQ,EAAE,qBAAqB,CACnD,KAAM,CACJ,KAAMmoD,IAAc,aAAe,SAAW,MAC9C,OAAQ,CACN,MAAO,IACR,CACF,EACD,MAAO,CACL,IAAK,eACL,MAAQra,GACFia,GAA+Bja,CAAW,EACrC,KAEFA,EAAY,SAAS,OAAO,CAEtC,CACP,CAAK,EACD9tC,EAAO,WAAW,IAAI,QAAQ,EAAE,qBAAqB,CACnD,KAAM,CACJ,KAAMmoD,IAAc,aAAe,SAAW,MAC9C,OAAQ,CACN,OAAQ,IACT,CACF,EACD,MAAO,CACL,IAAK,gBACL,MAAQra,GACFia,GAA+Bja,CAAW,EACrC,KAEFA,EAAY,SAAS,QAAQ,CAEvC,CACP,CAAK,CACF,CACH,EAGIyoB,GAAe,CACjB,MAAOj2C,GAAM,gBACb,OAAQA,GAAM,iBACd,MAAOA,GAAM,gBACb,SAAUA,GAAM,cAClB,EACIk2C,GAAqB,cAAc3qC,EAAO,CAI5C,WAAW,UAAW,CACpB,MAAO,CAACuqC,EAAkB,CAC3B,CAID,WAAW,YAAa,CACtB,MAAO,oBACR,CAID,YAAYp2D,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,YAAcA,EAAO,OAAO,IAAI,kBAAkB,CACxD,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACdj8D,EAAUi8D,EAAO,OAAO,IAAI,qBAAqB,EACjDojC,EAAUpjC,EAAO,SAAS,IAAI,aAAa,EACjD,KAAK,KAAK,WAAW,EAAE,GAAGojC,CAAO,EACjC,UAAWz6E,KAAU5kB,EACnB,KAAK,2BAA2B4kB,CAAM,EAExC,KAAK,6BAA6B5kB,CAAO,CAC1C,CAMD,2BAA2B4kB,EAAQ,CACjC,MAAMq3C,EAAS,KAAK,OACd,CAAE,KAAAr/D,EAAM,MAAAX,EAAO,KAAAqhF,CAAI,EAAK14D,EACxB8tG,EAAsBz2H,EAAQA,EAAQ,KAAK,YAAc,KAC/DggE,EAAO,GAAG,iBAAiB,IAAIr/D,EAAOq4E,GAAW,CAC/C,MAAM3tC,EAAS,IAAIquC,GAAWV,CAAM,EAC9BoqB,EAAUpjC,EAAO,SAAS,IAAI,aAAa,EAC3C02D,EAAY,KAAK,qBAAqB/tG,EAAQ,EAAI,EACxD,GAAI,CAAC4tG,GAAal1C,CAAI,EACpB,MAAM,IAAInM,EAAc,kCAAmClV,EAAQr3C,CAAM,EAE3E,OAAA0iB,EAAO,IAAI,CAET,MAAOqrF,EACP,KAAMH,GAAal1C,CAAI,EACvB,QAASq1C,EACT,aAAc,EACtB,CAAO,EACDrrF,EAAO,KAAK,WAAW,EAAE,GAAG,IAAI,EAChCA,EAAO,KAAK,MAAM,EAAE,GAAG+3D,EAAS,QAASuzB,GAAsBF,CAAmB,CAAC,EACnF,KAAK,SAASprF,EAAQ,UAAW,IAAM,CACrC20B,EAAO,QAAQ,cAAe,CAAE,MAAOy2D,CAAqB,EACpE,CAAO,EACMprF,CACb,CAAK,CACF,CAOD,6BAA6BtnC,EAAS,CACpC,MAAMi8D,EAAS,KAAK,OACdljD,EAAIkjD,EAAO,EACX42D,EAAqB7yH,EAAQ,KAAM4kB,GAAW,CAACA,EAAO,KAAK,EAC3DijG,EAAoB5yC,GAAW,CACnC,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,aAAa,EAC3Cye,EAAeF,GAAevF,EAAQmB,EAAkB,EACxD6xC,EAAiBvtC,EAAa,WAC9BioC,EAAkB5pG,EAAE,cAAc,EACxC,OAAAkvG,EAAe,IAAI,CACjB,QAAStF,EACT,aAAckQ,EAAmB,MACjC,KAAML,GAAa,OACnB,aAAc,GACd,MAAO,KAAK,qBAAqBK,CAAkB,EACnD,SAAU,GACV,MAAO,yBACP,UAAWlQ,EACX,eAAgB,MACxB,CAAO,EACDsF,EAAe,KAAK,OAAO,EAAE,GAAG5oB,EAAS,QAAU8jB,GAC7CA,GAAgBA,EAAa,MACxBA,EAAa,MAEb,KAAK,qBAAqB0P,CAAkB,CAEtD,EACDn4C,EAAa,KAAK,WAAW,EAAE,GAAG,IAAI,EACtCS,GAAkBT,EAAc,IAAM,KAAK,sCAAsC16E,EAASq/F,CAAO,EAAG,CAClG,UAAWtmF,EAAE,mBAAmB,EAChC,KAAM,MACd,CAAO,EACD,KAAK,SAAS2hE,EAAc,UAAY9vD,GAAQ,CAC9CqxC,EAAO,QAAQrxC,EAAI,OAAO,YAAa,CAAE,MAAOA,EAAI,OAAO,YAAY,CAAE,EACzEqxC,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACMye,CACb,EACIze,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,EAC9D5rD,EAAO,GAAG,iBAAiB,IAAI,cAAe4rD,CAAgB,CAC/D,CASD,qBAAqBjjG,EAAQkuG,EAAa,GAAO,CAC/C,MAAM/5G,EAAI,KAAK,OAAO,EACtB,OAAI6L,EAAO,MACFA,EAAO,MACLkuG,EACLluG,EAAO,MACF7L,EAAE,qBAAsB6L,EAAO,MAAQ,KAAK,WAAW,EAEvD7L,EAAE,mCAAmC,EAG1C6L,EAAO,MACFA,EAAO,MAAQ,KAAK,YAEpB7L,EAAE,UAAU,CAGxB,CAQD,sCAAsC/Y,EAASq/F,EAAS,CACtD,MAAMwjB,EAAkB,IAAI9xC,GAC5B,OAAA/wE,EAAQ,IAAK4kB,GAAW,CACtB,MAAM8tG,EAAsB9tG,EAAO,MAAQA,EAAO,MAAQ,KAAK,YAAc,KACvEs/C,EAAa,CACjB,KAAM,SACN,MAAO,IAAIwjB,GAAM,CACf,YAAa,cACb,aAAcgrC,EACd,MAAO,KAAK,qBAAqB9tG,CAAM,EACvC,KAAM,gBACN,SAAU,GACV,KAAM,IAChB,CAAS,CACT,EACMs/C,EAAW,MAAM,KAAK,MAAM,EAAE,GAAGm7B,EAAS,QAASuzB,GAAsBF,CAAmB,CAAC,EAC7F7P,EAAgB,IAAI3+C,CAAU,CACpC,CAAK,EACM2+C,CACR,CACH,EACA,SAAS+P,GAAsB32H,EAAO,CACpC,OAAQknH,GAAiB,CACvB,MAAM4P,EAAqB5P,EAC3B,OAAIlnH,IAAU,MAAQ82H,IAAuB92H,EACpC,GAEF82H,IAAuB,MAAQA,EAAmB,QAAU92H,CACvE,CACA,CAGA,IAAI+2H,GAAgC,gOAChCC,GAAsB,gBACtBC,GAAqB,cAAcprC,EAAO,CAI5C,WAAW,UAAW,CACpB,MAAO,CAAC6rB,GAAcwQ,EAAU,CACjC,CAID,WAAW,YAAa,CACtB,MAAO,oBACR,CAID,MAAO,CACL,MAAM9kB,EAAU,KAAK,OAAO,SAAS,IAAI,aAAa,EACtD,KAAK,KAAK,WAAW,EAAE,GAAGA,CAAO,EACjC,KAAK,qBAAoB,CAC1B,CAID,sBAAuB,CACrB,MAAMpjC,EAAS,KAAK,OACdypB,EAAczpB,EAAO,QAAQ,KAC7B0nD,EAAa1nD,EAAO,QAAQ,IAAI,YAAY,EAClDypB,EAAY,YAAY29B,EAAiB,EACzC,KAAK,SAAS39B,EAAY,SAAU,cAAe,CAAC96D,EAAK21E,IAAa,CACpE,GAAI,CAACA,EAAS,OAAO,QAAQyyB,EAA6B,EACxD,OAEF,MAAM7oB,EAAeluC,EAAO,QAAQ,KAAK,aACnC0oD,EAAYxa,EAAa,UAAU5J,EAAS,MAAM,EAClD4yB,EAAaxP,EAAW,4BAA4BgB,CAAS,EACnE,IAAI/Q,EAAU,KAAK,OAAO,QAAQ,IAAID,EAAY,EAAE,wBAAwBwf,CAAU,EACtF,GAAIvf,EAAS,CACXA,EAAQ,OAAM,EACd,MACD,CACD,MAAMnI,EAASxvC,EAAO,QAAQ,OACxBm3D,EAAa3nB,EAAO,eAAe0nB,CAAU,EACnDvf,EAAU33C,EAAO,QAAQ,IAAI03C,EAAY,EAAE,SAAS,CAClD,KAAM13C,EAAO,OAAO,IAAI,kBAAkB,EAC1C,aAAcm3D,EACd,YAAaD,EACb,OAAAl3D,EACA,cAAco3D,EAAkB,CAC9B,OAAOA,EAAiB,cAAc,KAAK,CAC5C,EACD,eAAgB,CACd,OAAOlpB,EAAa,aAAasB,EAAO,cAAc2nB,EAAW,MAAM,CAAC,CACzE,EAED,YAAa,CACX,MAAMpG,EAAaoG,EAAW,aAAa,YAAY,EACvD,MAAO,CAACpG,GAAcA,GAAc,SAAWA,GAAc,aAC9D,EACD,SAASv8B,EAAU,CACjB/K,EAAY,OAAQ3iB,GAAW,CAC7BA,EAAO,YAAYkwD,GAAqBE,CAAU,CAC9D,CAAW,EACDl3D,EAAO,QAAQ,cAAe,CAAE,MAAOw0B,CAAU,EAClD,CACT,CAAO,EACDmjB,EAAQ,GAAG,aAAc,IAAM,CACxBuf,EAAW,SAASF,EAAmB,GAC1CvtC,EAAY,OAAQ3iB,GAAW,CAC7BA,EAAO,SAASkwD,GAAqBE,CAAU,CAC3D,CAAW,EAEH,MAAMz2H,EAAS02H,EAAW,OAAS,cAAgBzO,EAAYwO,EAC3Dz2H,EAAO,SAAS,QAAQ,GAC1BgpF,EAAY,OAAQ3iB,GAAW,CAC7BA,EAAO,YAAY,SAAUrmE,CAAM,CAC/C,CAAW,CAEX,CAAO,EACDk3G,EAAQ,KAAK,WAAW,EAAE,GAAG,IAAI,CACvC,CAAK,CACF,CACH,EAII0f,GAAc,cAAcxrC,EAAO,CAIrC,WAAW,UAAW,CACpB,MAAO,CAACuqC,GAAoBa,GAAoBT,EAAkB,CACnE,CAID,WAAW,YAAa,CACtB,MAAO,aACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,67CCtdA,IAAIc,GAAsB,KAAM,CAC9B,aAAc,CACZ,KAAK,aAA+B,IAAI,GACzC,CAKD,IAAI,QAAS,CACX,OAAO,KAAK,aAAa,IAC1B,CAMD,IAAI3gF,EAAM,CACJ,MAAM,QAAQA,CAAI,EACpBA,EAAK,QAASiF,GAAU,KAAK,aAAa,IAAIA,CAAK,CAAC,EAEpD,KAAK,aAAa,IAAIjF,CAAI,CAE7B,CAMD,eAAgB,CACd,OAAQi1D,GAAe,CACrBA,EAAW,GAAG,qBAAsB,CAACj9E,EAAKjW,EAAMk2F,IAAkB,CAIhE,GAHI,CAACA,EAAc,WAAW,KAAKl2F,EAAK,KAAM,oBAAoB,GAG9D,EAAEA,EAAK,KAAK,GAAG,WAAW,GAAKk2F,EAAc,OAAO,SAASl2F,EAAK,IAAI,GACxE,OAEF,MAAM43F,EAAa1B,EAAc,OAC3B9F,EAAgBwH,EAAW,SAAS,UAC1C,UAAW35D,KAAQ,KAAK,aAAc,CACpC,MAAMm3D,EAAcwC,EAAW,uBAAuB,IAAK35D,EAAK,WAAY,CAC1E,SAAU,CACtB,CAAW,EACGA,EAAK,SACP25D,EAAW,SAAS35D,EAAK,QAASm3D,CAAW,EAE/C,UAAW/tG,KAAO42C,EAAK,OACrB25D,EAAW,SAASvwG,EAAK42C,EAAK,OAAO52C,CAAG,EAAG+tG,CAAW,EAExDwC,EAAW,kBAAkB,OAAQ,GAAMxC,CAAW,EAClDn3D,EAAK,SAASj+B,EAAK,iBAAiB,EAClCA,EAAK,KAAK,GAAG,WAAW,EAC1B43F,EAAW,KAAKxH,EAAc,cAAe,EAAEgF,CAAW,EAE1DwC,EAAW,KAAK1B,EAAc,OAAO,YAAYl2F,EAAK,KAAK,EAAGo1F,CAAW,EAG3EwC,EAAW,OAAO1B,EAAc,OAAO,YAAYl2F,EAAK,KAAK,EAAGo1F,CAAW,CAE9E,CACT,EAAS,CAAE,SAAU,MAAM,CAAE,CAC7B,CACG,CAOD,6BAA8B,CAC5B,OAAQlC,GAAe,CACrBA,EAAW,GAAG,gCAAiC,CAACj9E,EAAKjW,EAAM,CAAE,OAAAouD,EAAQ,OAAA0oC,KAAa,CAChF,MAAMukB,EAAavkB,EAAO,cAAc92F,EAAK,IAAI,EAC3C6+G,EAAc,MAAM,KAAKxD,EAAW,YAAW,CAAE,EAAE,KAAMx8E,GAAUA,EAAM,GAAG,UAAW,GAAG,CAAC,EACjG,UAAWZ,KAAQ,KAAK,aAAc,CACpC,MAAM9uC,EAAa2vH,GAAM7gF,EAAK,UAAU,EACxC,GAAIA,EAAK,SAASj+B,EAAK,iBAAiB,EAAG,CACzC,SAAW,CAAC3Y,EAAKiD,CAAG,IAAK6E,EACnB9H,IAAQ,QACV+mE,EAAO,SAAS9jE,EAAKu0H,CAAW,EAEhCzwD,EAAO,aAAa/mE,EAAKiD,EAAKu0H,CAAW,EAGzC5gF,EAAK,SACPmwB,EAAO,SAASnwB,EAAK,QAAS4gF,CAAW,EAE3C,UAAWx3H,KAAO42C,EAAK,OACrBmwB,EAAO,SAAS/mE,EAAK42C,EAAK,OAAO52C,CAAG,EAAGw3H,CAAW,CAEhE,KAAiB,CACL,SAAW,CAACx3H,EAAKiD,CAAG,IAAK6E,EACnB9H,IAAQ,QACV+mE,EAAO,YAAY9jE,EAAKu0H,CAAW,EAEnCzwD,EAAO,gBAAgB/mE,EAAKw3H,CAAW,EAGvC5gF,EAAK,SACPmwB,EAAO,YAAYnwB,EAAK,QAAS4gF,CAAW,EAE9C,UAAWx3H,KAAO42C,EAAK,OACrBmwB,EAAO,YAAY/mE,EAAKw3H,CAAW,CAEtC,CACF,CACT,CAAO,CACP,CACG,CACH,EAGIE,GAAwB,8DACxBC,GAAW,kEACXC,GAAgB,oFAChBC,GAAmB,2BACnBC,GAAiB,SACrB,SAASC,GAAcj1H,EAAM,CAC3B,OAAOA,EAAK,GAAG,kBAAkB,GAAK,CAAC,CAACA,EAAK,kBAAkB,MAAM,CACvE,CACA,SAASk1H,GAAkB9uF,EAAM,CAAE,OAAA69B,GAAU,CAC3C,MAAMkxD,EAAclxD,EAAO,uBAAuB,IAAK,CAAE,KAAA79B,CAAI,EAAI,CAAE,SAAU,CAAC,CAAE,EAChF,OAAA69B,EAAO,kBAAkB,OAAQ,GAAMkxD,CAAW,EAC3CA,CACT,CACA,SAASC,GAAcprG,EAAK,CAC1B,MAAMqrG,EAAY,OAAOrrG,CAAG,EAC5B,OAAOsrG,GAAUD,CAAS,EAAIA,EAAY,GAC5C,CACA,SAASC,GAAUtrG,EAAK,CAEtB,MAAO,CAAC,CADcA,EAAI,QAAQ4qG,GAAuB,EAAE,EACpC,MAAMC,EAAQ,CACvC,CACA,SAASU,GAAuBt7G,EAAGu7G,EAAY,CAC7C,MAAMC,EAA4B,CAChC,oBAAqBx7G,EAAE,mBAAmB,EAC1C,aAAgBA,EAAE,cAAc,CACpC,EACE,OAAAu7G,EAAW,QAASE,IACd,UAAWA,GAAaD,EAA0BC,EAAU,KAAK,IACnEA,EAAU,MAAQD,EAA0BC,EAAU,KAAK,GAEtDA,EACR,EACMF,CACT,CACA,SAASG,GAAoBH,EAAY,CACvC,MAAMI,EAAW,GACjB,GAAIJ,EACF,SAAW,CAACt4H,EAAKC,CAAK,IAAK,OAAO,QAAQq4H,CAAU,EAAG,CACrD,MAAME,EAAY,OAAO,OAAO,GAAIv4H,EAAO,CAAE,GAAI,OAAO04H,GAAmB34H,CAAG,CAAC,EAAI,GACnF04H,EAAS,KAAKF,CAAS,CACxB,CAEH,OAAOE,CACT,CACA,SAASE,GAAkBvlG,EAASuwC,EAAQ,CAC1C,OAAKvwC,EAGEuwC,EAAO,eAAevwC,EAAQ,KAAM,UAAU,EAF5C,EAGX,CACA,SAASwlG,GAAQ54H,EAAO,CACtB,OAAO23H,GAAc,KAAK33H,CAAK,CACjC,CACA,SAAS64H,GAA4B/8F,EAAMg9F,EAAiB,CAC1D,MAAMC,EAAWH,GAAQ98F,CAAI,EAAI,UAAYg9F,EACvCE,EAAmB,CAAC,CAACD,GAAY,CAACE,GAAgBn9F,CAAI,EAC5D,OAAOA,GAAQk9F,EAAmBD,EAAWj9F,EAAOA,CACtD,CACA,SAASm9F,GAAgBn9F,EAAM,CAC7B,OAAO87F,GAAiB,KAAK97F,CAAI,CACnC,CACA,SAASo9F,GAASp9F,EAAM,CACtB,OAAO,KAAKA,EAAM,SAAU,UAAU,CACxC,CAGA,IAAIq9F,GAAc,cAAcr4B,EAAQ,CACtC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,iBAAmB,IAAIhsB,GAC5B,KAAK,oBAAsB,IAAIwiD,EAChC,CAID,8BAA+B,CAC7B,UAAW8B,KAAmB,KAAK,iBACjCA,EAAgB,MAAQ,KAAK,4BAA4BA,EAAgB,EAAE,CAE9E,CAID,SAAU,CACR,MAAMrpD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3Bs9B,EAAkBzxF,EAAU,mBAAkB,GAAMhX,GAAMgX,EAAU,kBAAiB,CAAE,EACzF+8G,GAAkBtrB,EAAiBt9B,EAAM,MAAM,GACjD,KAAK,MAAQs9B,EAAgB,aAAa,UAAU,EACpD,KAAK,UAAYt9B,EAAM,OAAO,eAAes9B,EAAiB,UAAU,IAExE,KAAK,MAAQzxF,EAAU,aAAa,UAAU,EAC9C,KAAK,UAAYm0D,EAAM,OAAO,0BAA0Bn0D,EAAW,UAAU,GAE/E,UAAWw9G,KAAmB,KAAK,iBACjCA,EAAgB,MAAQ,KAAK,4BAA4BA,EAAgB,EAAE,CAE9E,CAkED,QAAQnwF,EAAMowF,EAAqB,GAAI,CACrC,MAAMtpD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3BupD,EAAyB,GACzBC,EAAwB,GAC9B,UAAW54H,KAAQ04H,EACbA,EAAmB14H,CAAI,EACzB24H,EAAuB,KAAK34H,CAAI,EAEhC44H,EAAsB,KAAK54H,CAAI,EAGnCovE,EAAM,OAAQjJ,GAAW,CACvB,GAAIlrD,EAAU,YAAa,CACzB,MAAMoU,EAAWpU,EAAU,mBAC3B,GAAIA,EAAU,aAAa,UAAU,EAAG,CACtC,MAAM49G,EAAWC,GAAyB79G,CAAS,EACnD,IAAI89G,EAAYpuB,GAAmBt7E,EAAU,WAAYpU,EAAU,aAAa,UAAU,EAAGm0D,CAAK,EAC9Fn0D,EAAU,aAAa,UAAU,IAAM49G,IACzCE,EAAY,KAAK,mBAAmB3pD,EAAOjJ,EAAQ4yD,EAAWzwF,CAAI,GAEpE69B,EAAO,aAAa,WAAY79B,EAAMywF,CAAS,EAC/CJ,EAAuB,QAAS3iF,GAAS,CACvCmwB,EAAO,aAAanwB,EAAM,GAAM+iF,CAAS,CACrD,CAAW,EACDH,EAAsB,QAAS5iF,GAAS,CACtCmwB,EAAO,gBAAgBnwB,EAAM+iF,CAAS,CAClD,CAAW,EACD5yD,EAAO,aAAaA,EAAO,oBAAoB4yD,EAAU,IAAI,UAAU,CAAC,CAClF,SAAmBzwF,IAAS,GAAI,CACtB,MAAMphC,EAAa2vH,GAAM57G,EAAU,cAAe,GAClD/T,EAAW,IAAI,WAAYohC,CAAI,EAC/BqwF,EAAuB,QAAS3iF,GAAS,CACvC9uC,EAAW,IAAI8uC,EAAM,EAAI,CACrC,CAAW,EACD,KAAM,CAAE,IAAKwtE,CAAe,EAAGp0C,EAAM,cAAcjJ,EAAO,WAAW79B,EAAMphC,CAAU,EAAGmoB,CAAQ,EAChG82C,EAAO,aAAaq9C,CAAa,CAClC,CACD,CAAC,WAAY,GAAGmV,EAAwB,GAAGC,CAAqB,EAAE,QAAS5iF,GAAS,CAClFmwB,EAAO,yBAAyBnwB,CAAI,CAC9C,CAAS,CACT,KAAa,CACL,MAAMsqD,EAASlxB,EAAM,OAAO,eAAen0D,EAAU,UAAS,EAAI,UAAU,EACtE+9G,EAAgB,GACtB,UAAWvmG,KAAWxX,EAAU,oBAC1Bm0D,EAAM,OAAO,eAAe38C,EAAS,UAAU,GACjDumG,EAAc,KAAK7yD,EAAO,cAAc1zC,CAAO,CAAC,EAGpD,MAAMwmG,EAAiBD,EAAc,QACrC,UAAWpwE,KAAS03C,EACd,KAAK,iBAAiB13C,EAAOowE,CAAa,GAC5CC,EAAe,KAAKrwE,CAAK,EAG7B,UAAWA,KAASqwE,EAAgB,CAClC,IAAIF,EAAYnwE,EAChB,GAAIqwE,EAAe,SAAW,EAAG,CAC/B,MAAMJ,EAAWC,GAAyB79G,CAAS,EAC/CA,EAAU,aAAa,UAAU,IAAM49G,IACzCE,EAAY,KAAK,mBAAmB3pD,EAAOjJ,EAAQvd,EAAOtgB,CAAI,EAC9D69B,EAAO,aAAaA,EAAO,gBAAgB4yD,CAAS,CAAC,EAExD,CACD5yD,EAAO,aAAa,WAAY79B,EAAMywF,CAAS,EAC/CJ,EAAuB,QAAS3iF,GAAS,CACvCmwB,EAAO,aAAanwB,EAAM,GAAM+iF,CAAS,CACrD,CAAW,EACDH,EAAsB,QAAS5iF,GAAS,CACtCmwB,EAAO,gBAAgBnwB,EAAM+iF,CAAS,CAClD,CAAW,CACF,CACF,CACP,CAAK,CACF,CAOD,4BAA4BG,EAAe,CACzC,MAAM9pD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3Bs9B,EAAkBzxF,EAAU,qBAClC,OAAI+8G,GAAkBtrB,EAAiBt9B,EAAM,MAAM,EAC1Cs9B,EAAgB,aAAawsB,CAAa,EAE5Cj+G,EAAU,aAAai+G,CAAa,CAC5C,CAOD,iBAAiBtwE,EAAOowE,EAAe,CACrC,UAAWG,KAAgBH,EACzB,GAAIG,EAAa,cAAcvwE,CAAK,EAClC,MAAO,GAGX,MAAO,EACR,CASD,mBAAmBwmB,EAAOjJ,EAAQvd,EAAOtgB,EAAM,CAC7C,MAAMr6B,EAAOk4D,EAAO,WAAW79B,EAAM,CAAE,SAAUA,CAAI,CAAE,EACvD,OAAO8mC,EAAM,cAAcnhE,EAAM26C,CAAK,CACvC,CACH,EACA,SAASkwE,GAAyB79G,EAAW,CAC3C,GAAIA,EAAU,YAAa,CACzB,MAAMi3F,EAAgBj3F,EAAU,mBAChC,OAAOi3F,EAAc,UAAYA,EAAc,SAAS,IAC5D,KAAS,CACL,MAAMknB,EAAa,MAAM,KAAKn+G,EAAU,cAAe,EAAC,SAAQ,CAAE,EAClE,GAAIm+G,EAAW,OAAS,EACtB,OAAO,KAET,MAAM9Y,EAAY8Y,EAAW,CAAC,EAC9B,OAAI9Y,EAAU,GAAG,OAAO,GAAKA,EAAU,GAAG,YAAY,EAC7CA,EAAU,KAEZ,IACR,CACH,CAGA,IAAI+Y,GAAgB,cAAcl5B,EAAQ,CAIxC,SAAU,CACR,MAAM/wB,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3Bs9B,EAAkBzxF,EAAU,qBAC9B+8G,GAAkBtrB,EAAiBt9B,EAAM,MAAM,EACjD,KAAK,UAAYA,EAAM,OAAO,eAAes9B,EAAiB,UAAU,EAExE,KAAK,UAAYt9B,EAAM,OAAO,0BAA0Bn0D,EAAW,UAAU,CAEhF,CAcD,SAAU,CACR,MAAMokD,EAAS,KAAK,OACd+P,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3BkqD,EAAcj6D,EAAO,SAAS,IAAI,MAAM,EAC9C+P,EAAM,OAAQjJ,GAAW,CACvB,MAAMozD,EAAiBt+G,EAAU,YAAc,CAAC0vF,GAAmB1vF,EAAU,iBAAgB,EAAI,WAAYA,EAAU,aAAa,UAAU,EAAGm0D,CAAK,CAAC,EAAIA,EAAM,OAAO,eAAen0D,EAAU,YAAa,UAAU,EACxN,UAAW2tC,KAAS2wE,EAElB,GADApzD,EAAO,gBAAgB,WAAYvd,CAAK,EACpC0wE,EACF,UAAWb,KAAmBa,EAAY,iBACxCnzD,EAAO,gBAAgBsyD,EAAgB,GAAI7vE,CAAK,CAI5D,CAAK,CACF,CACH,EAGI4wE,GAAkB,cAAcphD,IAAkB,CAWpD,YAAY,CAAE,GAAAjtE,EAAI,MAAAurC,EAAO,WAAAxvC,EAAY,QAAAqgB,EAAS,OAAAhF,EAAQ,aAAAua,GAAgB,CACpE,QACA,KAAK,GAAK3xB,EACV,KAAK,IAAI,QAAS,MAAM,EACxB,KAAK,aAAe2xB,EACpB,KAAK,MAAQ4Z,EACb,KAAK,WAAaxvC,EAClB,KAAK,QAAUqgB,EACf,KAAK,OAAShF,CACf,CAMD,gBAAiB,CACf,MAAO,CACL,WAAY,KAAK,WACjB,QAAS,KAAK,QACd,OAAQ,KAAK,MACnB,CACG,CACH,EAIIk3G,GAAkB,mBAClBC,GAAsB,YACtBC,GAAmB,SACnBC,GAAwB,kBACxBC,GAAc,cAAc3uC,EAAO,CAIrC,WAAW,YAAa,CACtB,MAAO,aACR,CAID,WAAW,UAAW,CACpB,MAAO,CAACie,GAAsBnB,GAAOqQ,EAAiB,CACvD,CAID,YAAYh5C,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAO,OAAQ,CAC3B,wBAAyB,GACzB,yBAA0B,EAChC,CAAK,CACF,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACpBA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiB,UAAU,CAAE,EACnEA,EAAO,WAAW,IAAI,cAAc,EAAE,mBAAmB,CAAE,MAAO,WAAY,KAAM+3D,EAAmB,GACvG/3D,EAAO,WAAW,IAAI,iBAAiB,EAAE,mBAAmB,CAAE,MAAO,WAAY,KAAM,CAAC/2B,EAAM2lE,IACrFmpB,GAAkBE,GAAchvF,CAAI,EAAG2lE,CAAa,CAC5D,CAAE,EACH5uC,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,IACN,WAAY,CACV,KAAM,EACP,CACF,EACD,MAAO,CACL,IAAK,WACL,MAAQ8tC,GAAgBA,EAAY,aAAa,MAAM,CACxD,CACP,CAAK,EACD9tC,EAAO,SAAS,IAAI,OAAQ,IAAIm5D,GAAYn5D,CAAM,CAAC,EACnDA,EAAO,SAAS,IAAI,SAAU,IAAIg6D,GAAch6D,CAAM,CAAC,EACvD,MAAMy6D,EAAiBrC,GAAuBp4D,EAAO,EAAGw4D,GAAoBx4D,EAAO,OAAO,IAAI,iBAAiB,CAAC,CAAC,EACjH,KAAK,2BAA2By6D,EAAe,OAAQ9jF,GAASA,EAAK,OAAS0jF,EAAmB,CAAC,EAClG,KAAK,wBAAwBI,EAAe,OAAQ9jF,GAASA,EAAK,OAAS2jF,EAAgB,CAAC,EACzDt6D,EAAO,QAAQ,IAAI8pC,EAAoB,EAC/C,kBAAkB,UAAU,EACvD2B,GAAgBzrC,EAAQ,WAAY,IAAKo6D,EAAe,EACxD,KAAK,gBAAe,EACpB,KAAK,gCAA+B,EACpC,KAAK,4BAA2B,CACjC,CAUD,2BAA2BM,EAA+B,CACxD,MAAM16D,EAAS,KAAK,OAEd26D,EADU36D,EAAO,SAAS,IAAI,MAAM,EACN,oBAChCA,EAAO,OAAO,IAAI,+BAA+B,GACnD26D,EAAoB,IAAI,CACtB,GAAI,iBACJ,KAAMN,GACN,SAAWxtG,GAAQ,CAAC,CAACA,GAAO0tG,GAAsB,KAAK1tG,CAAG,EAC1D,WAAY,CACV,OAAQ,SACR,IAAK,qBACN,CACT,CAAO,EAEH8tG,EAAoB,IAAID,CAA6B,EACjDC,EAAoB,QACtB36D,EAAO,WAAW,IAAI,UAAU,EAAE,IAAI26D,EAAoB,cAAa,CAAE,CAE5E,CAUD,wBAAwBC,EAA4B,CAClD,GAAI,CAACA,EAA2B,OAC9B,OAEF,MAAM56D,EAAS,KAAK,OAEd66D,EADU76D,EAAO,SAAS,IAAI,MAAM,EACT,iBACjC46D,EAA2B,QAASE,GAAwB,CAC1D96D,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiB86D,EAAoB,EAAE,CAAE,EAC/E,MAAMvC,EAAY,IAAI4B,GAAgBW,CAAmB,EACzDD,EAAiB,IAAItC,CAAS,EAC9Bv4D,EAAO,WAAW,IAAI,UAAU,EAAE,mBAAmB,CACnD,MAAOu4D,EAAU,GACjB,KAAM,CAACwC,EAAsB,CAAE,OAAAj0D,EAAQ,OAAAnD,CAAQ,EAAE,CAAE,KAAAhtB,KAAW,CAC5D,IAAMA,EAAK,GAAG,WAAW,GAAKgtB,EAAO,SAAShtB,CAAI,IAG9CokF,EAAsB,CACxB,MAAM3nG,EAAU0zC,EAAO,uBAAuB,IAAKyxD,EAAU,WAAY,CAAE,SAAU,CAAC,CAAE,EACpFA,EAAU,SACZzxD,EAAO,SAASyxD,EAAU,QAASnlG,CAAO,EAE5C,UAAWrzB,KAAOw4H,EAAU,OAC1BzxD,EAAO,SAAS/mE,EAAKw4H,EAAU,OAAOx4H,CAAG,EAAGqzB,CAAO,EAErD,OAAA0zC,EAAO,kBAAkB,OAAQ,GAAM1zC,CAAO,EACvCA,CACR,CACF,CACT,CAAO,EACD4sC,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,IACN,GAAGu4D,EAAU,eAAgB,CAC9B,EACD,MAAO,CACL,IAAKA,EAAU,EAChB,CACT,CAAO,CACP,CAAK,CACF,CAKD,iBAAkB,CAChB,MAAMv4D,EAAS,KAAK,OAEd2kC,EADO3kC,EAAO,QAAQ,KACF,SAC1B,KAAK,SAAS2kC,EAAc,QAAS,CAACh2E,EAAKjW,IAAS,CAElD,GAAI,EADeohE,GAAY,MAAQphE,EAAK,SAAS,QAAUA,EAAK,SAAS,SAE3E,OAEF,IAAIsiH,EAAiBtiH,EAAK,UAI1B,GAHIsiH,EAAe,QAAQ,YAAW,GAAM,MAC1CA,EAAiBA,EAAe,QAAQ,GAAG,GAEzC,CAACA,EACH,OAEF,MAAMnuG,EAAMmuG,EAAe,aAAa,MAAM,EACzCnuG,IAGL8B,EAAI,KAAI,EACRjW,EAAK,eAAc,EACnBwgH,GAASrsG,CAAG,EAClB,EAAO,CAAE,QAAS,UAAU,CAAE,EAC1B,KAAK,SAAS83E,EAAc,UAAW,CAACh2E,EAAKjW,IAAS,CAEpD,MAAMmU,EADcmzC,EAAO,SAAS,IAAI,MAAM,EACtB,MACHnzC,GAAOnU,EAAK,UAAYyuF,GAAS,OAASzuF,EAAK,SAIpEiW,EAAI,KAAI,EACRuqG,GAASrsG,CAAG,EAClB,CAAK,CACF,CAMD,iCAAkC,CAEhC,MAAMkjD,EADS,KAAK,OACC,MACfn0D,EAAYm0D,EAAM,SAAS,UACjC,KAAK,SAASn0D,EAAW,mBAAoB,CAAC+S,EAAK,CAAE,cAAAssG,KAAoB,CACnE,CAACA,EAAc,SAAS,UAAU,GAAKr/G,EAAU,aAAa,UAAU,GAG5Em0D,EAAM,OAAQjJ,GAAW,CACvBo0D,GAAkCp0D,EAAQq0D,GAA+BprD,EAAM,MAAM,CAAC,CAC9F,CAAO,CACP,CAAK,CACF,CAID,6BAA8B,CAC5B,MAAM/P,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf84D,EAAkB,KAAK,OAAO,OAAO,IAAI,sBAAsB,EAChEA,GAGL,KAAK,SAAS94D,EAAO,QAAQ,IAAI,mBAAmB,EAAG,mBAAoB,CAACrxC,EAAKjW,IAAS,CACxFq3D,EAAM,OAAQjJ,GAAW,CACvB,MAAMvd,EAAQud,EAAO,cAAcpuD,EAAK,OAAO,EAC/C,UAAWi+B,KAAQ4S,EAAM,WACvB,GAAI5S,EAAK,aAAa,UAAU,EAAG,CACjC,MAAMykF,EAAUvC,GAA4BliF,EAAK,aAAa,UAAU,EAAGmiF,CAAe,EAC1FhyD,EAAO,aAAa,WAAYs0D,EAASzkF,CAAI,CAC9C,CAEX,CAAO,CACP,CAAK,CACF,CACH,EACA,SAASukF,GAAkCp0D,EAAQu0D,EAAgB,CACjEv0D,EAAO,yBAAyB,UAAU,EAC1C,UAAWnB,KAAa01D,EACtBv0D,EAAO,yBAAyBnB,CAAS,CAE7C,CACA,SAASw1D,GAA+Bx3D,EAAQ,CAE9C,OADuBA,EAAO,cAAc,OAAO,EAAE,gBAC/B,OAAQgC,GAAcA,EAAU,WAAW,MAAM,CAAC,CAC1E,CAKA,IAAI21D,GAAe,cAAcngG,EAAK,CASpC,YAAY69C,EAAQihD,EAAa,CAC/B,MAAMjhD,CAAM,EACZ,KAAK,aAAe,IAAIkD,GACxB,KAAK,WAAa,IAAID,GACtB,KAAK,YAAc,IAAIpH,GACvB,MAAM/3D,EAAIk8D,EAAO,EACjB,KAAK,aAAe,KAAK,kBACzB,KAAK,eAAiB,KAAK,cAAcl8D,EAAE,MAAM,EAAGwjE,GAAM,MAAO,gBAAgB,EACjF,KAAK,eAAe,KAAO,SAC3B,KAAK,iBAAmB,KAAK,cAAcxjE,EAAE,QAAQ,EAAGwjE,GAAM,OAAQ,mBAAoB,QAAQ,EAClG,KAAK,yBAA2B,KAAK,+BAA+B25C,CAAW,EAC/E,KAAK,SAAW,KAAK,oBAAoBA,EAAY,gBAAgB,EACrE,KAAK,aAAe,IAAIz/C,GAAY,CAClC,WAAY,KAAK,YACjB,aAAc,KAAK,aACnB,iBAAkB,KAAK,WACvB,QAAS,CAEP,cAAe,cAEf,UAAW,KACZ,CACP,CAAK,EACD,MAAM+gD,EAAY,CAAC,KAAM,eAAgB,oBAAoB,EACzDtB,EAAY,iBAAiB,QAC/BsB,EAAU,KAAK,+BAAgC,kBAAkB,EAEnE,KAAK,YAAY,CACf,IAAK,OACL,WAAY,CACV,MAAOA,EAEP,SAAU,IACX,EACD,SAAU,KAAK,QACrB,CAAK,CACF,CAQD,2BAA4B,CAC1B,OAAO,MAAM,KAAK,KAAK,wBAAwB,EAAE,OAAO,CAACC,EAAaC,KACpED,EAAYC,EAAa,IAAI,EAAIA,EAAa,KACvCD,GACN,CAAE,EACN,CAID,QAAS,CACP,MAAM,OAAM,EACZtuC,GAAc,CACZ,KAAM,IACZ,CAAK,EACkB,CACjB,KAAK,aACL,GAAG,KAAK,yBACR,KAAK,eACL,KAAK,gBACX,EACe,QAASn4E,GAAM,CACxB,KAAK,YAAY,IAAIA,CAAC,EACtB,KAAK,aAAa,IAAIA,EAAE,OAAO,CACrC,CAAK,EACD,KAAK,WAAW,SAAS,KAAK,OAAO,CACtC,CAID,SAAU,CACR,MAAM,QAAO,EACb,KAAK,aAAa,UAClB,KAAK,WAAW,SACjB,CAID,OAAQ,CACN,KAAK,aAAa,YACnB,CAMD,iBAAkB,CAChB,MAAM+H,EAAI,KAAK,OAAO,EAChBm4E,EAAe,IAAI1E,GAAiB,KAAK,OAAQW,EAAsB,EAC7E,OAAA+D,EAAa,MAAQn4E,EAAE,UAAU,EAC1Bm4E,CACR,CAUD,cAAc59C,EAAOgqC,EAAMl1E,EAAW2pB,EAAW,CAC/C,MAAMuV,EAAS,IAAIquC,GAAW,KAAK,MAAM,EACzC,OAAAruC,EAAO,IAAI,CACT,MAAAgM,EACA,KAAAgqC,EACA,QAAS,EACf,CAAK,EACDh2C,EAAO,eAAe,CACpB,WAAY,CACV,MAAOl/B,CACR,CACP,CAAK,EACG2pB,GACFuV,EAAO,SAAS,SAAS,EAAE,GAAG,KAAMvV,CAAS,EAExCuV,CACR,CAQD,+BAA+B4uF,EAAa,CAC1C,MAAMyB,EAAW,KAAK,mBACtB,UAAWtC,KAAmBa,EAAY,iBAAkB,CAC1D,MAAMwB,EAAe,IAAIp9C,GAAiB,KAAK,MAAM,EACrDo9C,EAAa,IAAI,CACf,KAAMrC,EAAgB,GACtB,MAAOA,EAAgB,MACvB,SAAU,EAClB,CAAO,EACDqC,EAAa,KAAK,MAAM,EAAE,OAAO,CAACrC,EAAiBa,CAAW,EAAG,QAAS,CAAC0B,EAAgBzU,IAClFA,IAAiB,QAAUyU,IAAmB,OAAS,CAAC,CAACvC,EAAgB,aAAe,CAAC,CAACuC,CAClG,EACDF,EAAa,GAAG,UAAW,IAAM,CAC/BrC,EAAgB,IAAI,QAAS,CAACqC,EAAa,IAAI,CACvD,CAAO,EACDC,EAAS,IAAID,CAAY,CAC1B,CACD,OAAOC,CACR,CAYD,oBAAoBb,EAAkB,CACpC,MAAMx/E,EAAW,KAAK,mBAEtB,GADAA,EAAS,IAAI,KAAK,YAAY,EAC1Bw/E,EAAiB,OAAQ,CAC3B,MAAMe,EAAwB,IAAIzgG,GAClCygG,EAAsB,YAAY,CAChC,IAAK,KACL,SAAU,KAAK,yBAAyB,IAAKH,IAAkB,CAC7D,IAAK,KACL,SAAU,CAACA,CAAY,EACvB,WAAY,CACV,MAAO,CACL,KACA,eACD,CACF,CACX,EAAU,EACF,WAAY,CACV,MAAO,CACL,KACA,WACA,SACD,CACF,CACT,CAAO,EACDpgF,EAAS,IAAIugF,CAAqB,CACnC,CACD,OAAAvgF,EAAS,IAAI,KAAK,cAAc,EAChCA,EAAS,IAAI,KAAK,gBAAgB,EAC3BA,CACR,CACH,EAMIwgF,GAAkB,cAAc1gG,EAAK,CAIvC,YAAY69C,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,aAAe,IAAIkD,GACxB,KAAK,WAAa,IAAID,GACtB,KAAK,YAAc,IAAIpH,GACvB,MAAM,EAAImE,EAAO,EACjB,KAAK,kBAAoB,KAAK,uBAC9B,KAAK,iBAAmB,KAAK,cAAc,EAAE,QAAQ,EAAG8iD,GAAY,QAAQ,EAC5E,KAAK,eAAiB,KAAK,cAAc,EAAE,WAAW,EAAGx7C,GAAM,OAAQ,MAAM,EAC7E,KAAK,IAAI,OAAQ,MAAM,EACvB,KAAK,aAAe,IAAI9F,GAAY,CAClC,WAAY,KAAK,YACjB,aAAc,KAAK,aACnB,iBAAkB,KAAK,WACvB,QAAS,CAEP,cAAe,cAEf,UAAW,KACZ,CACP,CAAK,EACD,KAAK,YAAY,CACf,IAAK,MACL,WAAY,CACV,MAAO,CACL,KACA,kBACA,oBACD,EAED,SAAU,IACX,EACD,SAAU,CACR,KAAK,kBACL,KAAK,eACL,KAAK,gBACN,CACP,CAAK,CACF,CAID,QAAS,CACP,MAAM,OAAM,EACO,CACjB,KAAK,kBACL,KAAK,eACL,KAAK,gBACX,EACe,QAASzlE,GAAM,CACxB,KAAK,YAAY,IAAIA,CAAC,EACtB,KAAK,aAAa,IAAIA,EAAE,OAAO,CACrC,CAAK,EACD,KAAK,WAAW,SAAS,KAAK,OAAO,CACtC,CAID,SAAU,CACR,MAAM,QAAO,EACb,KAAK,aAAa,UAClB,KAAK,WAAW,SACjB,CAID,OAAQ,CACN,KAAK,aAAa,YACnB,CASD,cAAcsiC,EAAOgqC,EAAMvrD,EAAW,CACpC,MAAMuV,EAAS,IAAIquC,GAAW,KAAK,MAAM,EACzC,OAAAruC,EAAO,IAAI,CACT,MAAAgM,EACA,KAAAgqC,EACA,QAAS,EACf,CAAK,EACDh2C,EAAO,SAAS,SAAS,EAAE,GAAG,KAAMvV,CAAS,EACtCuV,CACR,CAMD,sBAAuB,CACrB,MAAMA,EAAS,IAAIquC,GAAW,KAAK,MAAM,EACnCL,EAAO,KAAK,aACZv8D,EAAI,KAAK,EACf,OAAAuuB,EAAO,IAAI,CACT,SAAU,GACV,QAASvuB,EAAE,sBAAsB,CACvC,CAAK,EACDuuB,EAAO,eAAe,CACpB,WAAY,CACV,MAAO,CACL,KACA,0BACD,EACD,KAAMguC,EAAK,GAAG,OAASpwC,GAASA,GAAQgvF,GAAchvF,CAAI,CAAC,EAC3D,OAAQ,SACR,IAAK,qBACN,CACP,CAAK,EACDoC,EAAO,KAAK,OAAO,EAAE,GAAG,KAAM,OAASpC,GAC9BA,GAAQnsB,EAAE,sBAAsB,CACxC,EACDuuB,EAAO,KAAK,WAAW,EAAE,GAAG,KAAM,OAASpC,GAAS,CAAC,CAACA,CAAI,EAC1DoC,EAAO,SAAS,IAAM,IACtBA,EAAO,SAAS,eAAiB,GAC1BA,CACR,CACH,EAII0wF,GAA+B,UAC/BC,GAAS,cAAcnwC,EAAO,CAChC,aAAc,CACZ,MAAM,GAAG,SAAS,EAClB,KAAK,YAAc,KACnB,KAAK,SAAW,IACjB,CAID,WAAW,UAAW,CACpB,MAAO,CAACD,EAAiB,CAC1B,CAID,WAAW,YAAa,CACtB,MAAO,QACR,CAID,MAAO,CACL,MAAM5rB,EAAS,KAAK,OACpBA,EAAO,QAAQ,KAAK,YAAYi8D,EAAa,EAC7C,KAAK,SAAWj8D,EAAO,QAAQ,IAAI4rB,EAAiB,EACpD,KAAK,yBAAwB,EAC7B,KAAK,yBAAwB,EAC7B5rB,EAAO,WAAW,IAAI,iBAAiB,EAAE,kBAAkB,CACzD,MAAO+7D,GACP,KAAM,CACJ,QAAS,CAAC,wBAAwB,CACnC,CACP,CAAK,EACD/7D,EAAO,WAAW,IAAI,iBAAiB,EAAE,gBAAgB,CACvD,MAAO+7D,GACP,KAAM,CACJ,KAAM,OACN,QAAS,CAAC,yBAA0B,kCAAkC,CACvE,CACP,CAAK,CACF,CAID,SAAU,CACR,MAAM,QAAO,EACT,KAAK,UACP,KAAK,SAAS,UAEZ,KAAK,aACP,KAAK,YAAY,SAEpB,CAID,cAAe,CACb,KAAK,YAAc,KAAK,qBACxB,KAAK,SAAW,KAAK,kBACrB,KAAK,+BAA8B,CACpC,CAID,oBAAqB,CACnB,MAAM/7D,EAAS,KAAK,OACdk8D,EAAc,IAAIL,GAAgB77D,EAAO,MAAM,EAC/Ci6D,EAAcj6D,EAAO,SAAS,IAAI,MAAM,EACxCm8D,EAAgBn8D,EAAO,SAAS,IAAI,QAAQ,EAClD,OAAAk8D,EAAY,KAAK,MAAM,EAAE,GAAGjC,EAAa,OAAO,EAChDiC,EAAY,eAAe,KAAK,WAAW,EAAE,GAAGjC,CAAW,EAC3DiC,EAAY,iBAAiB,KAAK,WAAW,EAAE,GAAGC,CAAa,EAC/D,KAAK,SAASD,EAAa,OAAQ,IAAM,CACvC,KAAK,aAAY,CACvB,CAAK,EACD,KAAK,SAASA,EAAa,SAAU,IAAM,CACzCl8D,EAAO,QAAQ,QAAQ,EACvB,KAAK,QAAO,CAClB,CAAK,EACDk8D,EAAY,WAAW,IAAI,MAAO,CAACxjH,EAAMgiE,IAAW,CAClD,KAAK,QAAO,EACZA,GACN,CAAK,EACDwhD,EAAY,WAAW,IAAIrE,GAAgB,CAACn/G,EAAMgiE,IAAW,CAC3D,KAAK,aAAY,EACjBA,GACN,CAAK,EACMwhD,CACR,CAID,iBAAkB,CAChB,MAAMl8D,EAAS,KAAK,OACdi6D,EAAcj6D,EAAO,SAAS,IAAI,MAAM,EACxC84D,EAAkB94D,EAAO,OAAO,IAAI,sBAAsB,EAC1Do8D,EAA0Bp8D,EAAO,OAAO,IAAI,8BAA8B,EAC1Eq8D,EAAW,IAAK1nD,GAA2B2mD,EAAY,GAAGt7D,EAAO,OAAQi6D,CAAW,EAC1F,OAAAoC,EAAS,aAAa,UAAU,KAAK,OAAO,EAAE,GAAGpC,EAAa,OAAO,EACrEoC,EAAS,aAAa,KAAK,WAAW,EAAE,GAAGpC,EAAa,WAAW,EACnEoC,EAAS,eAAe,KAAK,WAAW,EAAE,GAAGpC,EAAa,YAAaoC,EAAS,aAAc,UAAW,CAACC,EAAkBC,IAAiBD,IAAqBF,GAA2B,CAACG,EAAa,EAC3M,KAAK,SAASF,EAAU,SAAU,IAAM,CACtC,KAAM,CAAE,MAAAr8H,CAAK,EAAKq8H,EAAS,aAAa,UAAU,QAC5CG,EAAY3D,GAA4B74H,EAAO84H,CAAe,EACpE94D,EAAO,QAAQ,OAAQw8D,EAAWH,EAAS,0BAAyB,CAAE,EACtE,KAAK,eAAc,CACzB,CAAK,EACD,KAAK,SAASA,EAAU,SAAU,IAAM,CACtC,KAAK,eAAc,CACzB,CAAK,EACDA,EAAS,WAAW,IAAI,MAAO,CAAC3jH,EAAMgiE,IAAW,CAC/C,KAAK,eAAc,EACnBA,GACN,CAAK,EACM2hD,CACR,CAKD,0BAA2B,CACzB,MAAMr8D,EAAS,KAAK,OACdi6D,EAAcj6D,EAAO,SAAS,IAAI,MAAM,EACxCljD,EAAIkjD,EAAO,EACjBA,EAAO,GAAG,iBAAiB,IAAI,OAASgZ,GAAW,CACjD,MAAM3tC,EAAS,IAAIquC,GAAWV,CAAM,EACpC,OAAA3tC,EAAO,UAAY,GACnBA,EAAO,MAAQvuB,EAAE,MAAM,EACvBuuB,EAAO,KAAOoxF,GACdpxF,EAAO,UAAYwsF,GACnBxsF,EAAO,QAAU,GACjBA,EAAO,aAAe,GACtBA,EAAO,KAAK,WAAW,EAAE,GAAG4uF,EAAa,WAAW,EACpD5uF,EAAO,KAAK,MAAM,EAAE,GAAG4uF,EAAa,QAAUj6H,GAAU,CAAC,CAACA,CAAK,EAC/D,KAAK,SAASqrC,EAAQ,UAAW,IAAM,KAAK,QAAQ,EAAI,CAAC,EAClDA,CACb,CAAK,CACF,CAKD,0BAA2B,CACzB,MAAM20B,EAAS,KAAK,OACd2kC,EAAe3kC,EAAO,QAAQ,KAAK,SACzC,KAAK,SAAS2kC,EAAc,QAAS,IAAM,CACtB,KAAK,2BAEtB,KAAK,QAAO,CAEpB,CAAK,EACD3kC,EAAO,WAAW,IAAI63D,GAAgB,CAAC6E,EAAYhiD,IAAW,CAC5DA,IACI1a,EAAO,SAAS,IAAI,MAAM,EAAE,WAC9B,KAAK,QAAQ,EAAI,CAEzB,CAAK,CACF,CAKD,gCAAiC,CAC/B,KAAK,OAAO,WAAW,IAAI,MAAO,CAACtnD,EAAMgiE,IAAW,CAC9C,KAAK,oBAAsB,CAAC,KAAK,YAAY,aAAa,YAC5D,KAAK,YAAY,QACjBA,IAER,EAAO,CAID,SAAU,MAChB,CAAK,EACD,KAAK,OAAO,WAAW,IAAI,MAAO,CAAChiE,EAAMgiE,IAAW,CAC9C,KAAK,eACP,KAAK,QAAO,EACZA,IAER,CAAK,EACDtG,GAAoB,CAClB,QAAS,KAAK,SACd,UAAW,IAAM,KAAK,aACtB,gBAAiB,IAAM,CAAC,KAAK,SAAS,KAAK,OAAO,EAClD,SAAU,IAAM,KAAK,QAAS,CACpC,CAAK,CACF,CAMD,iBAAkB,CACX,KAAK,aACR,KAAK,aAAY,EAEf,MAAK,oBAGT,KAAK,SAAS,IAAI,CAChB,KAAM,KAAK,YACX,SAAU,KAAK,wBAAyB,CAC9C,CAAK,CACF,CAID,cAAe,CAIb,GAHK,KAAK,UACR,KAAK,aAAY,EAEf,KAAK,eACP,OAGF,MAAM6lD,EADS,KAAK,OACO,SAAS,IAAI,MAAM,EAC9C,KAAK,SAAS,wBACd,KAAK,SAAS,IAAI,CAChB,KAAM,KAAK,SACX,SAAU,KAAK,wBAAyB,CAC9C,CAAK,EACD,KAAK,SAAS,aAAa,UAAU,MAAQA,EAAY,OAAS,GAC9D,KAAK,SAAS,cAAgB,KAAK,UACrC,KAAK,SAAS,aAAa,UAAU,OAAM,EAE7C,KAAK,SAAS,sBACf,CAQD,gBAAiB,CACf,MAAMA,EAAc,KAAK,OAAO,SAAS,IAAI,MAAM,EACnDA,EAAY,6BAA4B,EACpCA,EAAY,QAAU,OACxB,KAAK,gBAAe,EAEpB,KAAK,QAAO,CAEf,CAID,iBAAkB,CACZ,KAAK,iBACP,KAAK,SAAS,eAAe,QAC7B,KAAK,SAAS,aAAa,UAAU,MAAK,EAC1C,KAAK,SAAS,OAAO,KAAK,QAAQ,EAClC,KAAK,OAAO,QAAQ,KAAK,MAAK,EAC9B,KAAK,yBAAwB,EAEhC,CAMD,QAAQ0C,EAAe,GAAO,CACvB,KAAK,UACR,KAAK,aAAY,EAEd,KAAK,2BAQJ,KAAK,mBACP,KAAK,aAAY,EAEjB,KAAK,gBAAe,EAElBA,GACF,KAAK,SAAS,UAAU,MAAM,IAbhC,KAAK,yBAAwB,EAC7B,KAAK,gBAAe,EAChBA,GACF,KAAK,SAAS,UAAU,MAAM,EAEhC,KAAK,aAAY,GAWnB,KAAK,iBAAgB,CACtB,CAMD,SAAU,CACR,GAAI,CAAC,KAAK,aACR,OAEF,MAAM38D,EAAS,KAAK,OACpB,KAAK,cAAcA,EAAO,GAAI,QAAQ,EACtC,KAAK,cAAc,KAAK,SAAU,oBAAoB,EACtDA,EAAO,QAAQ,KAAK,QACpB,KAAK,gBAAe,EACpB,KAAK,SAAS,OAAO,KAAK,WAAW,EACrC,KAAK,yBAAwB,CAC9B,CAOD,kBAAmB,CACjB,MAAMA,EAAS,KAAK,OACd2kC,EAAe3kC,EAAO,QAAQ,KAAK,SACzC,IAAI48D,EAAmB,KAAK,0BACxBC,EAAsBC,IAC1B,MAAM1xC,EAAS,IAAM,CACnB,MAAM2xC,EAAe,KAAK,0BACpBhgB,EAAkB+f,IACpBF,GAAoB,CAACG,GAAgB,CAACH,GAAoB7f,IAAoB8f,EAChF,KAAK,QAAO,EACH,KAAK,cACd,KAAK,SAAS,eAAe,KAAK,wBAAyB,GAE7DD,EAAmBG,EACnBF,EAAsB9f,CAC5B,EACI,SAAS+f,GAAqB,CAC5B,OAAOn4B,EAAa,UAAU,MAAM,aAAc,EAAC,QAAO,EAAG,KAAM9hG,GAASA,EAAK,GAAG,SAAS,CAAC,CAC/F,CACD,KAAK,SAASm9D,EAAO,GAAI,SAAUorB,CAAM,EACzC,KAAK,SAAS,KAAK,SAAU,qBAAsBA,CAAM,CAC1D,CAID,IAAI,gBAAiB,CACnB,MAAO,CAAC,CAAC,KAAK,UAAY,KAAK,SAAS,QAAQ,KAAK,QAAQ,CAC9D,CAID,IAAI,oBAAqB,CACvB,MAAO,CAAC,CAAC,KAAK,aAAe,KAAK,SAAS,QAAQ,KAAK,WAAW,CACpE,CAKD,IAAI,oBAAqB,CACvB,MAAO,CAAC,CAAC,KAAK,aAAe,KAAK,SAAS,cAAgB,KAAK,WACjE,CAID,IAAI,cAAe,CACjB,OAAO,KAAK,gBAAkB,KAAK,kBACpC,CAKD,IAAI,cAAe,CACjB,MAAMe,EAAc,KAAK,SAAS,YAClC,MAAO,CAAC,CAAC,KAAK,UAAYA,GAAe,KAAK,UAAY,KAAK,kBAChE,CAQD,yBAA0B,CACxB,MAAM9rE,EAAO,KAAK,OAAO,QAAQ,KAC3B0vD,EAAQ,KAAK,OAAO,MACpB40B,EAAetkF,EAAK,SAC1B,IAAI5f,EACJ,GAAIsvE,EAAM,QAAQ,IAAIgsD,EAA4B,EAAG,CACnD,MAAMiB,EAAqB,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,qBAAqBjB,EAA4B,CAAC,EAC7GnpB,EAAWvyF,EAAK,YAAYA,EAAK,qBAAqB28G,EAAmB,CAAC,CAAC,EAAG38G,EAAK,oBAAoB28G,EAAmBA,EAAmB,OAAS,CAAC,CAAC,CAAC,EAC/Jv8H,EAAS4f,EAAK,aAAa,eAAeuyF,CAAQ,CACxD,MACMnyG,EAAS,IAAM,CACb,MAAMw8H,EAAa,KAAK,0BACxB,OAAOA,EAEL58G,EAAK,aAAa,aAAa48G,CAAU,EAGzC58G,EAAK,aAAa,eAAeskF,EAAa,UAAU,cAAa,CAAE,CAEjF,EAEI,MAAO,CAAE,OAAAlkG,CAAM,CAChB,CAUD,yBAA0B,CACxB,MAAM4f,EAAO,KAAK,OAAO,QAAQ,KAC3BzE,EAAYyE,EAAK,SAAS,UAC1BgtF,EAAkBzxF,EAAU,qBAClC,GAAIA,EAAU,aAAeyxF,GAAmBf,GAASe,CAAe,EACtE,OAAO6vB,GAAwBthH,EAAU,iBAAgB,CAAE,EACtD,CACL,MAAM2tC,EAAQ3tC,EAAU,cAAe,EAAC,WAAU,EAC5CuhH,EAAYD,GAAwB3zE,EAAM,KAAK,EAC/C6zE,EAAUF,GAAwB3zE,EAAM,GAAG,EACjD,MAAI,CAAC4zE,GAAaA,GAAaC,EACtB,KAEL/8G,EAAK,cAAc88G,CAAS,EAAE,aAAa,QAAQ5zE,CAAK,EACnD4zE,EAEA,IAEV,CACF,CAMD,0BAA2B,CACzB,MAAMptD,EAAQ,KAAK,OAAO,MAC1BA,EAAM,OAAQjJ,GAAW,CACvB,MAAMvd,EAAQwmB,EAAM,SAAS,UAAU,cAAa,EACpD,GAAIA,EAAM,QAAQ,IAAIgsD,EAA4B,EAChDj1D,EAAO,aAAai1D,GAA8B,CAAE,MAAAxyE,CAAO,WAEvDA,EAAM,MAAM,QAAS,CACvB,MAAM+yC,EAAgB/yC,EAAM,MAAM,wBAAwB,CAAC,CAAE,KAAA5S,KAAW,CAACo5B,EAAM,OAAO,UAAUp5B,CAAI,EAAG,CAAE,WAAY4S,CAAK,CAAE,EAC5Hud,EAAO,UAAUi1D,GAA8B,CAC7C,eAAgB,GAChB,YAAa,GACb,MAAOj1D,EAAO,YAAYw1B,EAAe/yC,EAAM,GAAG,CAC9D,CAAW,CACX,MACUud,EAAO,UAAUi1D,GAA8B,CAC7C,eAAgB,GAChB,YAAa,GACb,MAAAxyE,CACZ,CAAW,CAGX,CAAK,CACF,CAID,0BAA2B,CACzB,MAAMwmB,EAAQ,KAAK,OAAO,MACtBA,EAAM,QAAQ,IAAIgsD,EAA4B,GAChDhsD,EAAM,OAAQjJ,GAAW,CACvBA,EAAO,aAAai1D,EAA4B,CACxD,CAAO,CAEJ,CACH,EACA,SAASmB,GAAwBltG,EAAU,CACzC,OAAOA,EAAS,aAAc,EAAC,KAAM8gF,GAAagnB,GAAchnB,CAAQ,CAAC,GAAK,IAChF,CAGA,IAAIusB,GAAoC,EACpCC,GAAc,IAAI,OAEpB,oaACA,GACF,EACIC,GAAqB,EACrBC,GAAW,cAAc3xC,EAAO,CAIlC,WAAW,UAAW,CACpB,MAAO,CAAC6b,GAAQ8yB,EAAW,CAC5B,CAID,WAAW,YAAa,CACtB,MAAO,UACR,CAID,MAAO,CAEL,MAAM5+G,EADS,KAAK,OACK,MAAM,SAAS,UACxCA,EAAU,GAAG,eAAgB,IAAM,CACjC,KAAK,UAAY,CAACA,EAAU,OAAO,OAAO,GAAG,UAAW,WAAW,CACzE,CAAK,EACD,KAAK,sBAAqB,CAC3B,CAID,WAAY,CACV,KAAK,qBAAoB,EACzB,KAAK,0BAAyB,EAC9B,KAAK,oBAAmB,CACzB,CAMD,iBAAiBm0D,EAAO//C,EAAU,CAChC,OAAIA,EAAS,UAAYA,EAAS,SAAS,aAAa,UAAU,EACzDs7E,GAAmBt7E,EAAU,WAAYA,EAAS,SAAS,aAAa,UAAU,EAAG+/C,CAAK,EAE1F,IAEV,CAID,mBAAmBjJ,EAAQ22D,EAAe,CAExC,MAAM1tD,EADS,KAAK,OACC,MACfn0D,EAAYm0D,EAAM,SAAS,UAC3B2tD,EAAW9hH,EAAU,mBACrB+hH,EAAS/hH,EAAU,kBACzB,IAAIgiH,EAAmBH,EAAc,UAAU,KAAK,iBAAiB1tD,EAAO2tD,CAAQ,GAAKD,CAAa,EAClGG,IACFA,EAAmBA,EAAiB,UAAU,KAAK,iBAAiB7tD,EAAO4tD,CAAM,GAAKF,CAAa,GAEjGG,IAAqBA,EAAiB,MAAM,SAASF,CAAQ,GAAKE,EAAiB,IAAI,QAAQD,CAAM,IACvG72D,EAAO,aAAa82D,CAAgB,CAEvC,CAID,qBAAsB,CACpB,MAAM59D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfpkD,EAAYm0D,EAAM,SAAS,UAC3B2sC,EAAoB18C,EAAO,QAAQ,IAAI,mBAAmB,EAC1Di6D,EAAcj6D,EAAO,SAAS,IAAI,MAAM,EAC9C08C,EAAkB,GAAG,sBAAuB,CAAC/tF,EAAKjW,IAAS,CAIzD,GAHI,CAAC,KAAK,WAAa,CAACuhH,EAAY,WAAar+G,EAAU,aAGvDA,EAAU,WAAa,EACzB,OAEF,MAAM6hH,EAAgB7hH,EAAU,gBAC1Bw/G,EAAU1iH,EAAK,aAAa,QAAQ,YAAY,EACtD,GAAI,CAAC0iH,EACH,OAEF,MAAMp2H,EAAUo2H,EAAQ,MAAMkC,EAAW,EACrCt4H,GAAWA,EAAQ,CAAC,IAAMo2H,IAC5BrrD,EAAM,OAAQjJ,GAAW,CACvB,KAAK,mBAAmBA,EAAQ22D,CAAa,EAC7CxD,EAAY,QAAQmB,CAAO,CACrC,CAAS,EACDzsG,EAAI,KAAI,EAEhB,EAAO,CAAE,SAAU,MAAM,CAAE,CACxB,CAID,uBAAwB,CACtB,MAAMqxC,EAAS,KAAK,OACd69D,EAAU,IAAIr0B,GAAYxpC,EAAO,MAAQpxD,GAAS,CACtD,GAAI,CAACkvH,GAAsBlvH,CAAI,EAC7B,OAEF,MAAMie,EAAMkxG,GAAgBnvH,EAAK,OAAO,EAAGA,EAAK,OAAS,CAAC,CAAC,EAC3D,GAAIie,EACF,MAAO,CAAE,IAAAA,CAAG,CAEpB,CAAK,EACDgxG,EAAQ,GAAG,eAAgB,CAAClvG,EAAKjW,IAAS,CACxC,KAAM,CAAE,MAAAqoF,EAAO,MAAAx3C,EAAO,IAAA18B,CAAG,EAAKnU,EAC9B,GAAI,CAACqoF,EAAM,SACT,OAEF,MAAMi9B,EAAUz0E,EAAM,IAAI,aAAa,EAAE,EACnC00E,EAAYD,EAAQ,aAAa,CAACnxG,EAAI,MAAM,EAC5C6sG,EAAY15D,EAAO,MAAM,YAAYi+D,EAAWD,CAAO,EAC7D,KAAK,eAAenxG,EAAK6sG,CAAS,CACxC,CAAK,EACDmE,EAAQ,KAAK,WAAW,EAAE,GAAG,IAAI,CAClC,CAID,sBAAuB,CACrB,MAAM79D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfqmD,EAAermD,EAAO,SAAS,IAAI,OAAO,EAC3CqmD,GAGLA,EAAa,GAAG,UAAW,IAAM,CAC/B,MAAMr2F,EAAW+/C,EAAM,SAAS,UAAU,iBAAgB,EAC1D,GAAI,CAAC//C,EAAS,OAAO,gBACnB,OAEF,MAAMkuG,EAAenuD,EAAM,cAAc//C,EAAS,OAAO,eAAe,EACxE,KAAK,8BAA8BkuG,CAAY,CACrD,CAAK,CACF,CAID,2BAA4B,CAC1B,MAAMl+D,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfm+D,EAAoBn+D,EAAO,SAAS,IAAI,YAAY,EACrDm+D,GAGLA,EAAkB,GAAG,UAAW,IAAM,CACpC,MAAMnuG,EAAW+/C,EAAM,SAAS,UAAU,iBAAgB,EACpDmuD,EAAenuD,EAAM,YAAYA,EAAM,iBAAiB//C,EAAS,OAAQ,CAAC,EAAGA,EAAS,aAAa,EAAE,CAAC,EAC5G,KAAK,8BAA8BkuG,CAAY,CACrD,CAAK,CACF,CAID,8BAA8BA,EAAc,CAC1C,MAAMnuD,EAAQ,KAAK,OAAO,MACpB,CAAE,KAAAnhE,EAAM,MAAA26C,CAAK,EAAKggD,GAAgB20B,EAAcnuD,CAAK,EACrDljD,EAAMkxG,GAAgBnvH,CAAI,EAChC,GAAIie,EAAK,CACP,MAAM6sG,EAAY3pD,EAAM,YAAYxmB,EAAM,IAAI,aAAa,CAAC18B,EAAI,MAAM,EAAG08B,EAAM,GAAG,EAClF,KAAK,eAAe18B,EAAK6sG,CAAS,CACnC,CACF,CAOD,eAAe7sG,EAAK08B,EAAO,CACzB,MAAMwmB,EAAQ,KAAK,OAAO,MACpB+oD,EAAkB,KAAK,OAAO,OAAO,IAAI,sBAAsB,EAC/DsF,EAAUvF,GAA4BhsG,EAAKisG,CAAe,EAC5D,CAAC,KAAK,WAAa,CAACuF,GAAqB90E,EAAOwmB,CAAK,GAAK,CAACkpD,GAAgBmF,CAAO,GAAKE,GAAiB/0E,CAAK,GAGjH,KAAK,iBAAiB60E,EAAS70E,CAAK,CACrC,CAOD,iBAAiB18B,EAAK08B,EAAO,CAC3B,MAAMwmB,EAAQ,KAAK,OAAO,MACpBwuD,EAAe,KAAK,OAAO,QAAQ,IAAI,QAAQ,EACrDxuD,EAAM,cAAejJ,GAAW,CAC9BA,EAAO,aAAa,WAAYj6C,EAAK08B,CAAK,EAC1CwmB,EAAM,cAAc,IAAM,CACxBwuD,EAAa,uBAAsB,CAC3C,CAAO,CACP,CAAK,CACF,CACH,EACA,SAAST,GAAsBlvH,EAAM,CACnC,OAAOA,EAAK,OAASyuH,IAAqCzuH,EAAKA,EAAK,OAAS,CAAC,IAAM,KAAOA,EAAKA,EAAK,OAAS,CAAC,IAAM,GACvH,CACA,SAASmvH,GAAgBnvH,EAAM,CAC7B,MAAM9E,EAAQwzH,GAAY,KAAK1uH,CAAI,EACnC,OAAO9E,EAAQA,EAAMyzH,EAAkB,EAAI,IAC7C,CACA,SAASc,GAAqB90E,EAAOwmB,EAAO,CAC1C,OAAOA,EAAM,OAAO,0BAA0BA,EAAM,gBAAgBxmB,CAAK,EAAG,UAAU,CACxF,CACA,SAAS+0E,GAAiB/0E,EAAO,CAC/B,MAAM5S,EAAO4S,EAAM,MAAM,UACzB,MAAO,CAAC,CAAC5S,GAAQA,EAAK,aAAa,UAAU,CAC/C,CAGA,IAAI6nF,GAAO,cAAc3yC,EAAO,CAI9B,WAAW,UAAW,CACpB,MAAO,CAAC2uC,GAAawB,GAAQwB,EAAQ,CACtC,CAID,WAAW,YAAa,CACtB,MAAO,MACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECxvDA,IAAIiB,GAAa,KAAM,CAerB,YAAY/6B,EAAc3/F,EAAS,CACjC,KAAK,cAAgB2/F,EACrB,KAAK,iBAAmBA,EAAa,aAAa,YAAY,EAC9D,KAAK,WAAa3/F,EAAQ,WAAa,UACvC,KAAK,aAAe,CAAC,CAACA,EAAQ,YAC9B,KAAK,gBAAkBwlC,GAAQxlC,EAAQ,gBAAkB,CAAE,GAC3D,KAAK,YAAc,CAAC,CAACA,EAAQ,WAC7B,KAAK,aAAe,CAAC,CAACA,EAAQ,YAC9B,KAAK,cAAgB,CAAC,CAACA,EAAQ,YAChC,CAeD,OAAO,MAAM2/F,EAAc3/F,EAAS,CAElC,MAAMihD,EADS,IAAI,KAAK0+C,EAAc3/F,CAAO,EACrB,OAAO,QAAQ,EAAC,EACxC,OAAOa,GAAMogD,CAAQ,CACtB,CAID,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM05E,EAAc,GACpB,SAAW,CAAE,KAAA77H,KAAU87H,GAAyB,KAAK,cAAe,EAAE,KAAK,WAAa,UAAY,UAAU,EAAG,CAC/G,MAAMloG,EAAS5zB,EAAK,aAAa,YAAY,EAC7C,GAAI4zB,EAAS,KAAK,iBAAkB,CAClC,GAAI,CAAC,KAAK,aACR,MAEF,KAAK,iBAAmBA,CAChC,SAAiBA,EAAS,KAAK,iBAAkB,CACzC,GAAI,CAAC,KAAK,cACR,SAEF,GAAI,CAAC,KAAK,WAAY,CACpBioG,EAAY,KAAK77H,CAAI,EACrB,QACD,CACT,KAAa,CACL,GAAI,CAAC,KAAK,YAAa,CACrB,GAAI,KAAK,cAAe,CAClB67H,EAAY,SACd,MAAOA,EACPA,EAAY,OAAS,GAEvB,KACD,CACD,QACD,CACD,GAAI,KAAK,gBAAgB,KAAM1vH,GAASnM,EAAK,aAAamM,CAAI,IAAM,KAAK,cAAc,aAAaA,CAAI,CAAC,EACvG,KAEH,CACG0vH,EAAY,SACd,MAAOA,EACPA,EAAY,OAAS,GAEvB,MAAM77H,CACP,CACF,CAID,eAAgB,CACd,OAAI,KAAK,aACA,KAAK,cAEP,KAAK,WAAa,KAAK,cAAc,YAAc,KAAK,cAAc,eAC9E,CACH,EACA,SAAU87H,GAAyB97H,EAAMk4E,EAAY,UAAW,CAC9D,MAAMm0B,EAAYn0B,GAAa,UACzB6jD,EAAwB,GAC9B,IAAI9jD,EAAW,KACf,KAAO+jD,GAAgBh8H,CAAI,GAAG,CAC5B,IAAIi8H,EAAqB,KACzB,GAAIhkD,EAAU,CACZ,MAAMikD,EAAal8H,EAAK,aAAa,YAAY,EAC3Cm8H,EAAqBlkD,EAAS,aAAa,YAAY,EACzDikD,EAAaC,EACfJ,EAAsBI,CAAkB,EAAIlkD,EACnCikD,EAAaC,GACtBF,EAAqBF,EAAsBG,CAAU,EACrDH,EAAsB,OAASG,GAE/BD,EAAqBhkD,CAExB,CACD,KAAM,CAAE,KAAAj4E,EAAM,SAAAi4E,EAAU,mBAAAgkD,GACxBhkD,EAAWj4E,EACXA,EAAOqsG,EAAYrsG,EAAK,YAAcA,EAAK,eAC5C,CACH,CACA,IAAIo8H,GAAqB,KAAM,CAI7B,YAAYC,EAAU,CACpB,KAAK,UAAYA,CAClB,CAMD,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAOP,GAAyB,KAAK,UAAW,SAAS,CAC1D,CACH,EAGIQ,GAAc,KAAM,CAOtB,OAAO,MAAO,CACZ,OAAOtlD,GAAG,CACX,CACH,EACA,SAASglD,GAAgBh8H,EAAM,CAC7B,MAAO,CAAC,CAACA,GAAQA,EAAK,GAAG,SAAS,GAAKA,EAAK,aAAa,YAAY,CACvE,CACA,SAASu8H,GAAqBC,EAAUt7H,EAAU,GAAI,CACpD,MAAO,CACL,GAAGu7H,GAAkBD,EAAU,CAAE,GAAGt7H,EAAS,UAAW,WAAY,EACpE,GAAGu7H,GAAkBD,EAAU,CAAE,GAAGt7H,EAAS,UAAW,UAAW,CACvE,CACA,CACA,SAASu7H,GAAkBD,EAAUt7H,EAAU,GAAI,CACjD,MAAMmrG,EAAYnrG,EAAQ,WAAa,UACjCirD,EAAQ,MAAM,KAAK,IAAIyvE,GAAWY,EAAU,CAChD,GAAGt7H,EACH,YAAamrG,EACb,WAAY,GACZ,eAAgB,YACjB,EAAC,EACF,OAAOA,EAAYlgD,EAAQA,EAAM,QAAO,CAC1C,CACA,SAASuwE,GAAoBF,EAAU,CACrC,OAAO,MAAM,KAAK,IAAIZ,GAAWY,EAAU,CACzC,UAAW,UACX,aAAc,EACf,EAAC,CACJ,CACA,SAASG,GAAaH,EAAU,CAC9B,MAAMI,EAAiB,IAAIhB,GAAWY,EAAU,CAC9C,WAAY,GACZ,eAAgB,UACpB,CAAG,EACKK,EAAgB,IAAIjB,GAAWY,EAAU,CAC7C,WAAY,GACZ,eAAgB,WAChB,YAAa,GACb,UAAW,SACf,CAAG,EACD,MAAO,CACL,GAAG,MAAM,KAAKI,CAAc,EAAE,QAAS,EACvC,GAAGC,CACP,CACA,CACA,SAASC,GAAuBC,EAAW,CAKzC,MAJwB,CAAAnB,GAAW,MAAMmB,EAAW,CAClD,WAAY,GACZ,eAAgB,YACpB,CAAG,CAKH,CACA,SAASC,GAAsBD,EAAW,CAMxC,MALoB,CAAAnB,GAAW,MAAMmB,EAAW,CAC9C,UAAW,UACX,WAAY,GACZ,eAAgB,YACpB,CAAG,CAKH,CACA,SAASE,GAAgC1jB,EAAQr4G,EAAU,GAAI,CAC7Dq4G,EAAS7yE,GAAQ6yE,CAAM,EACvB,MAAM2jB,EAAeh8H,EAAQ,aAAe,GACtCi8H,EAA4B,IAAI,IACtC,UAAW5iG,KAASg/E,EAClB,UAAW6jB,KAAab,GAAqBhiG,EAAO,CAAE,aAAA2iG,CAAc,GAClEC,EAAU,IAAIC,CAAS,EAG3B,OAAOC,GAAWF,CAAS,CAC7B,CACA,SAASG,GAA+B/jB,EAAQ,CAC9CA,EAAS7yE,GAAQ6yE,CAAM,EACvB,MAAM4jB,EAA4B,IAAI,IACtC,UAAW5iG,KAASg/E,EAClB,UAAW6jB,KAAaT,GAAapiG,CAAK,EACxC4iG,EAAU,IAAIC,CAAS,EAG3B,OAAOC,GAAWF,CAAS,CAC7B,CACA,SAASI,GAAoBR,EAAW94D,EAAQ,CAC9C,MAAMs1C,EAASkjB,GAAkBM,EAAW,CAAE,UAAW,SAAS,CAAE,EAC9D9zH,EAAKqzH,GAAY,OACvB,UAAW/hG,KAASg/E,EAClBt1C,EAAO,aAAa,aAAch7D,EAAIsxB,CAAK,EAE7C,OAAOg/E,CACT,CACA,SAASikB,GAAoBT,EAAWU,EAAax5D,EAAQ,CAC3D,MAAMj/D,EAAa,GACnB,SAAW,CAAC9H,EAAKC,CAAK,IAAKsgI,EAAY,cAAa,EAC9CvgI,EAAI,WAAW,MAAM,IACvB8H,EAAW9H,CAAG,EAAIC,GAGtB,MAAMo8G,EAASkjB,GAAkBM,EAAW,CAAE,UAAW,SAAS,CAAE,EACpE,UAAWxiG,KAASg/E,EAClBt1C,EAAO,cAAcj/D,EAAYu1B,CAAK,EAExC,OAAOg/E,CACT,CACA,SAASmkB,GAAankB,EAAQt1C,EAAQ,CAAE,OAAA05D,EAAQ,SAAAC,EAAW,CAAG,EAAG,GAAI,CACnErkB,EAAS7yE,GAAQ6yE,CAAM,EACvB,MAAM4jB,EAAYQ,EAASV,GAAgC1jB,CAAM,EAAIA,EACrE,UAAWh/E,KAAS4iG,EAAW,CAC7B,MAAMU,EAActjG,EAAM,aAAa,YAAY,EAAIqjG,EACnDC,EAAc,EAChBC,GAAqBvjG,EAAO0pC,CAAM,EAElCA,EAAO,aAAa,aAAc45D,EAAatjG,CAAK,CAEvD,CACD,OAAO4iG,CACT,CACA,SAASY,GAAuBxkB,EAAQt1C,EAAQ,CAC9Cs1C,EAAS7yE,GAAQ6yE,CAAM,EACvB,MAAM4jB,EAAYF,GAAgC1jB,CAAM,EAClDykB,EAA0B,IAAI,IAC9BC,EAAkB,KAAK,IAAI,GAAGd,EAAU,IAAK5iG,GAAUA,EAAM,aAAa,YAAY,CAAC,CAAC,EACxF2jG,EAA+B,IAAI,IACzC,UAAW3jG,KAAS4iG,EAClBe,EAAa,IAAI3jG,EAAOqhG,GAAW,MAAMrhG,EAAO,CAAE,YAAa,EAAM,EAAC,EAExE,UAAWA,KAAS4iG,EAAW,CAC7B,GAAIa,EAAQ,IAAIzjG,CAAK,EACnB,SAEFyjG,EAAQ,IAAIzjG,CAAK,EACjB,MAAMsjG,EAActjG,EAAM,aAAa,YAAY,EAAI,EACvD,GAAIsjG,EAAc,EAAG,CACnBC,GAAqBvjG,EAAO0pC,CAAM,EAClC,QACD,CACD,GAAI1pC,EAAM,aAAa,YAAY,GAAK0jG,EAAiB,CACvD,MAAME,EAAeC,GAAuB7jG,EAAO2jG,EAAa,IAAI3jG,CAAK,EAAG0pC,CAAM,EAClF,UAAWo6D,KAAeF,EACxBH,EAAQ,IAAIK,CAAW,EAEzB,GAAIF,EAAa,OACf,QAEH,CACDl6D,EAAO,aAAa,aAAc45D,EAAatjG,CAAK,CACrD,CACD,OAAO8iG,GAAWW,CAAO,CAC3B,CACA,SAASF,GAAqBvkB,EAAQt1C,EAAQ,CAC5Cs1C,EAAS7yE,GAAQ6yE,CAAM,EACvB,UAAWh/E,KAASg/E,EACdh/E,EAAM,GAAG,UAAW,UAAU,GAChC0pC,EAAO,OAAO1pC,EAAO,WAAW,EAGpC,UAAWA,KAASg/E,EAClB,UAAWyG,KAAgBzlF,EAAM,mBAC3BylF,EAAa,WAAW,MAAM,GAChC/7C,EAAO,gBAAgB+7C,EAAczlF,CAAK,EAIhD,OAAOg/E,CACT,CACA,SAAS+kB,GAAiB/kB,EAAQ,CAChC,GAAI,CAACA,EAAO,OACV,MAAO,GAET,MAAMglB,EAAchlB,EAAO,CAAC,EAAE,aAAa,YAAY,EACvD,OAAKglB,EAGE,CAAChlB,EAAO,KAAMzlE,GAASA,EAAK,aAAa,YAAY,GAAKyqF,CAAW,EAFnE,EAGX,CACA,SAASC,GAAsBC,EAAWx6D,EAAQ,CAChD,MAAMy6D,EAAgB,GACtB,IAAIC,EAAgB,OAAO,kBAC3B,SAAW,CAAE,KAAA3+H,KAAU87H,GAAyB2C,EAAU,YAAa,SAAS,EAAG,CACjF,MAAM7qG,EAAS5zB,EAAK,aAAa,YAAY,EAC7C,GAAI4zB,GAAU,EACZ,MAEEA,EAAS+qG,IACXA,EAAgB/qG,GAElB,MAAMgrG,EAAYhrG,EAAS+qG,EAC3B16D,EAAO,aAAa,aAAc26D,EAAW5+H,CAAI,EACjD0+H,EAAc,KAAK1+H,CAAI,CACxB,CACD,OAAO0+H,CACT,CACA,SAASrB,GAAW9jB,EAAQ,CAC1B,OAAO,MAAM,KAAKA,CAAM,EAAE,OAAQh/E,GAAUA,EAAM,KAAK,WAAa,YAAY,EAAE,KAAK,CAACj9B,EAAGC,IAAMD,EAAE,MAAQC,EAAE,KAAK,CACpH,CACA,SAASshI,GAAuB3xD,EAAO,CACrC,MAAMs9B,EAAkBt9B,EAAM,SAAS,UAAU,mBAAkB,EACnE,OAAKs9B,GAGDt9B,EAAM,OAAO,SAASs9B,CAAe,GAAKt9B,EAAM,OAAO,QAAQs9B,CAAe,EACzEA,EAHA,IAMX,CACA,SAASs0B,GAAwBvkG,EAAOumC,EAAQ,CAC9C,OAAOA,EAAO,WAAWvmC,EAAM,OAAQ,UAAU,GAAKumC,EAAO,WAAWvmC,EAAO,OAAO,GAAK,CAACumC,EAAO,SAASvmC,CAAK,CACnH,CACA,SAAS6jG,GAAuB7jG,EAAOkjG,EAAax5D,EAAQ,CAE1D,OADyBw4D,GAAkBgB,EAAa,CAAE,UAAW,SAAS,CAAE,EAC3D,IAAG,EAAG,MAAQljG,EAAM,MAChCijG,GAAoBjjG,EAAOkjG,EAAax5D,CAAM,EAEhD,EACT,CAGA,IAAI86D,GAAoB,cAAc9gC,EAAQ,CAQ5C,YAAY9gC,EAAQ6hE,EAAiB,CACnC,MAAM7hE,CAAM,EACZ,KAAK,WAAa6hE,CACnB,CAID,SAAU,CACR,KAAK,UAAY,KAAK,eACvB,CAOD,SAAU,CACR,MAAM9xD,EAAQ,KAAK,OAAO,MACpBqsC,EAAS0lB,GAAsB/xD,EAAM,SAAS,SAAS,EAC7DA,EAAM,OAAQjJ,GAAW,CACvB,MAAMy6D,EAAgB,GAClBJ,GAAiB/kB,CAAM,GAAK,CAACujB,GAAuBvjB,EAAO,CAAC,CAAC,GAC3D,KAAK,YAAc,WACrBmlB,EAAc,KAAK,GAAGhB,GAAankB,EAAQt1C,CAAM,CAAC,EAEpDy6D,EAAc,KAAK,GAAGnB,GAAoBhkB,EAAO,CAAC,EAAGt1C,CAAM,CAAC,GAExD,KAAK,YAAc,UACrBy6D,EAAc,KAAK,GAAGhB,GAAankB,EAAQt1C,EAAQ,CAAE,OAAQ,EAAM,EAAC,EAEpEy6D,EAAc,KAAK,GAAGX,GAAuBxkB,EAAQt1C,CAAM,CAAC,EAGhE,UAAW1pC,KAASmkG,EAAe,CACjC,GAAI,CAACnkG,EAAM,aAAa,UAAU,EAChC,SAEF,MAAM2kG,EAAoBtD,GAAW,MAAMrhG,EAAO,CAAE,WAAY,EAAI,CAAE,EAClE2kG,GACFj7D,EAAO,aAAa,WAAYi7D,EAAkB,aAAa,UAAU,EAAG3kG,CAAK,CAEpF,CACD,KAAK,kBAAkBmkG,CAAa,CAC1C,CAAK,CACF,CAMD,kBAAkBA,EAAe,CAC/B,KAAK,KAAK,eAAgBrB,GAAW,IAAI,IAAIqB,CAAa,CAAC,CAAC,CAC7D,CAMD,eAAgB,CACd,IAAInlB,EAAS0lB,GAAsB,KAAK,OAAO,MAAM,SAAS,SAAS,EACnE9d,EAAa5H,EAAO,CAAC,EACzB,GAAI,CAAC4H,EACH,MAAO,GAKT,GAHI,KAAK,YAAc,YAGnBmd,GAAiB/kB,CAAM,GAAK,CAACujB,GAAuBvjB,EAAO,CAAC,CAAC,EAC/D,MAAO,GAETA,EAAS0jB,GAAgC1jB,CAAM,EAC/C4H,EAAa5H,EAAO,CAAC,EACrB,MAAM4lB,EAAcvD,GAAW,MAAMza,EAAY,CAAE,WAAY,EAAI,CAAE,EACrE,OAAKge,EAGDA,EAAY,aAAa,UAAU,GAAKhe,EAAW,aAAa,UAAU,EAFrE,EAMV,CACH,EACA,SAAS8d,GAAsBlmH,EAAW,CACxC,MAAMwgG,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACjDqmH,EAAyB7lB,EAAO,UAAWh/E,GAAU,CAACyhG,GAAgBzhG,CAAK,CAAC,EAClF,OAAI6kG,GAA0B,KAC5B7lB,EAAO,OAAS6lB,GAEX7lB,CACT,CAGA,IAAI8lB,GAAc,cAAcphC,EAAQ,CAOtC,YAAY9gC,EAAQ56D,EAAM,CACxB,MAAM46D,CAAM,EACZ,KAAK,KAAO56D,CACb,CAID,SAAU,CACR,KAAK,MAAQ,KAAK,YAClB,KAAK,UAAY,KAAK,eACvB,CAWD,QAAQrB,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MACpBttE,EAAWstE,EAAM,SACjBoyD,EAAsBT,GAAuB3xD,CAAK,EAClDqsC,EAAS,MAAM,KAAK35G,EAAS,UAAU,kBAAmB,GAAE,OAAQ26B,GAAU2yC,EAAM,OAAO,eAAe3yC,EAAO,UAAU,GAAKukG,GAAwBvkG,EAAO2yC,EAAM,MAAM,CAAC,EAC5KqyD,EAAUr+H,EAAQ,aAAe,OAAS,CAACA,EAAQ,WAAa,KAAK,MAC3EgsE,EAAM,OAAQjJ,GAAW,CACvB,GAAIs7D,EAAS,CACX,MAAMd,EAAYllB,EAAOA,EAAO,OAAS,CAAC,EACpCimB,EAAa/C,GAAkBgC,EAAW,CAAE,UAAW,SAAS,CAAE,EAClEC,EAAgB,GAClBc,EAAW,OAAS,GACtBd,EAAc,KAAK,GAAGnB,GAAoBiC,EAAW,CAAC,EAAGv7D,CAAM,CAAC,EAElEy6D,EAAc,KAAK,GAAGZ,GAAqBvkB,EAAQt1C,CAAM,CAAC,EAC1Dy6D,EAAc,KAAK,GAAGF,GAAsBC,EAAWx6D,CAAM,CAAC,EAC9D,KAAK,kBAAkBy6D,CAAa,CAC5C,UAAkBY,GAAuB1/H,EAAS,UAAU,cAAgBo8H,GAAgBziB,EAAO,CAAC,CAAC,EAAG,CAChG,MAAMmlB,EAAgB/B,GAAa2C,GAAuB/lB,EAAO,CAAC,CAAC,EACnE,UAAWh/E,KAASmkG,EAClBz6D,EAAO,aAAa,WAAY,KAAK,KAAM1pC,CAAK,EAElD,KAAK,kBAAkBmkG,CAAa,CAC5C,KAAa,CACL,MAAMA,EAAgB,GACtB,UAAWnkG,KAASg/E,EAClB,GAAI,CAACh/E,EAAM,aAAa,UAAU,EAC5B,CAACA,EAAM,GAAG,UAAW,UAAU,GAAKukG,GAAwBvkG,EAAO2yC,EAAM,MAAM,GACjFjJ,EAAO,OAAO1pC,EAAO,UAAU,EAEjC0pC,EAAO,cAAc,CACnB,WAAY,EACZ,WAAYq4D,GAAY,KAAM,EAC9B,SAAU,KAAK,IAChB,EAAE/hG,CAAK,EACRmkG,EAAc,KAAKnkG,CAAK,MAExB,WAAWv6B,KAAQi9H,GAAgC1iG,EAAO,CAAE,WAAY,EAAK,CAAE,EACzEv6B,EAAK,aAAa,UAAU,GAAK,KAAK,OACxCikE,EAAO,aAAa,WAAY,KAAK,KAAMjkE,CAAI,EAC/C0+H,EAAc,KAAK1+H,CAAI,GAK/B,KAAK,kBAAkB0+H,CAAa,CACrC,CACP,CAAK,CACF,CAMD,kBAAkBA,EAAe,CAC/B,KAAK,KAAK,eAAgBrB,GAAW,IAAI,IAAIqB,CAAa,CAAC,CAAC,CAC7D,CAMD,WAAY,CACV,MAAM3lH,EAAY,KAAK,OAAO,MAAM,SAAS,UACvCwgG,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACvD,GAAI,CAACwgG,EAAO,OACV,MAAO,GAET,UAAWh/E,KAASg/E,EAClB,GAAIh/E,EAAM,aAAa,UAAU,GAAK,KAAK,KACzC,MAAO,GAGX,MAAO,EACR,CAMD,eAAgB,CACd,MAAM2yC,EAAQ,KAAK,OAAO,MACpBpM,EAASoM,EAAM,OACfn0D,EAAYm0D,EAAM,SAAS,UAC3BqsC,EAAS,MAAM,KAAKxgG,EAAU,kBAAmB,GACvD,GAAI,CAACwgG,EAAO,OACV,MAAO,GAET,GAAI,KAAK,MACP,MAAO,GAET,UAAWh/E,KAASg/E,EAClB,GAAIz4C,EAAO,eAAevmC,EAAO,UAAU,GAAKukG,GAAwBvkG,EAAOumC,CAAM,EACnF,MAAO,GAGX,MAAO,EACR,CACH,EAGI2+D,GAAmB,cAAcxhC,EAAQ,CAO3C,YAAY9gC,EAAQ+a,EAAW,CAC7B,MAAM/a,CAAM,EACZ,KAAK,WAAa+a,CACnB,CAID,SAAU,CACR,KAAK,UAAY,KAAK,eACvB,CAWD,QAAQ,CAAE,gCAAiCwnD,EAAmC,EAAK,EAAK,GAAI,CAC1F,MAAMxyD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3BwxD,EAAgB,GACtBxxD,EAAM,OAAQjJ,GAAW,CACvB,KAAM,CAAE,aAAA22C,EAAc,YAAAt0F,CAAa,EAAG,KAAK,yBAAyBvN,EAAW2mH,CAAgC,EACzGC,EAAc/kB,EAAa,aAAa,YAAY,GAAK,EACzDglB,EAAat5G,EAAY,aAAa,YAAY,EAClDu5G,EAAgBv5G,EAAY,aAAa,YAAY,EAC3D,GAAIq5G,GAAeC,EAAY,CAC7B,MAAME,EAA0BpD,GAAoBp2G,CAAW,EAC/Do4G,EAAc,KAAK,GAAGhB,GAAa,CAACp3G,EAAa,GAAGw5G,CAAuB,EAAG77D,EAAQ,CACpF,SAAU07D,EAAcC,EAExB,OAAQD,EAAcC,CACvB,EAAC,CACH,CACD,GAAIF,EAAkC,CACpC,IAAI11H,EAAM+O,EACNA,EAAU,cACZ/O,EAAMi6D,EAAO,gBAAgBA,EAAO,YAAYA,EAAO,iBAAiB22C,EAAc,KAAK,EAAG32C,EAAO,iBAAiB39C,EAAa,CAAC,CAAC,CAAC,GAExI4mD,EAAM,cAAcljE,EAAK,CAAE,wBAAyB+O,EAAU,WAAW,CAAE,EAC3E,MAAMgnH,EAAyB/1H,EAAI,gBAAe,EAAG,OAC/Cg2H,EAAcD,EAAuB,YAC3CrB,EAAc,KAAKqB,CAAsB,EACrCC,GAAeA,IAAgB15G,GAAe05G,EAAY,aAAa,YAAY,GAAKH,GAC1FnB,EAAc,KAAK,GAAGlB,GAAoBwC,EAAaD,EAAwB97D,CAAM,CAAC,CAEhG,MACQy6D,EAAc,KAAK,GAAGlB,GAAoBl3G,EAAas0F,EAAc32C,CAAM,CAAC,EAE9E,KAAK,kBAAkBy6D,CAAa,CAC1C,CAAK,CACF,CAMD,kBAAkBA,EAAe,CAC/B,KAAK,KAAK,eAAgBrB,GAAW,IAAI,IAAIqB,CAAa,CAAC,CAAC,CAC7D,CAMD,eAAgB,CACd,MAAMxxD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3BoyD,EAAsBT,GAAuB3xD,CAAK,EACxD,GAAIn0D,EAAU,aAAeumH,EAAqB,CAChD,MAAMrd,EAAiBqd,GAAuBvmH,EAAU,iBAAgB,EAAG,OAC3E,GAAI,CAACijH,GAAgB/Z,CAAc,EACjC,MAAO,GAET,MAAMge,EAAc,KAAK,YAAc,WAAahe,EAAe,gBAAkBA,EAAe,YAIpG,GAHI,CAACge,GAGD3B,GAAiB,CAACrc,EAAgBge,CAAW,CAAC,EAChD,MAAO,EAEf,KAAW,CACL,MAAMhwB,EAAel3F,EAAU,kBACzBi3F,EAAgBj3F,EAAU,mBAIhC,GAHIk3F,EAAa,SAAWD,EAAc,QAGtC,CAACgsB,GAAgB/rB,EAAa,MAAM,EACtC,MAAO,EAEV,CACD,MAAO,EACR,CASD,yBAAyBl3F,EAAW2mH,EAAkC,CACpE,MAAMxyD,EAAQ,KAAK,OAAO,MACpBoyD,EAAsBT,GAAuB3xD,CAAK,EACxD,IAAI0tC,EAAct0F,EAClB,GAAIvN,EAAU,aAAeumH,EAAqB,CAChD,MAAMrd,EAAiBqd,GAAuBvmH,EAAU,iBAAgB,EAAG,OACrEmnH,EAAepD,GAAuB7a,CAAc,EACtD,KAAK,YAAc,YACrB37F,EAAc27F,EACVie,GAAgB,CAACR,EACnB9kB,EAAeghB,GAAW,MAAM3Z,EAAgB,CAAE,WAAY,GAAM,YAAa,EAAI,CAAE,EAEvFrH,EAAeqH,EAAe,kBAGhCrH,EAAeqH,EACf37F,EAAc27F,EAAe,YAErC,MACMrH,EAAe7hG,EAAU,iBAAkB,EAAC,OAC5CuN,EAAcvN,EAAU,gBAAiB,EAAC,OAE5C,MAAO,CACL,aAAA6hG,EACA,YAAAt0F,CACN,CACG,CACH,EAGI65G,GAAmB,cAAcliC,EAAQ,CAO3C,YAAY9gC,EAAQ+a,EAAW,CAC7B,MAAM/a,CAAM,EACZ,KAAK,WAAa+a,CACnB,CAID,SAAU,CACR,KAAK,UAAY,KAAK,eACvB,CAOD,SAAU,CACO,KAAK,OACb,MAAM,OAAQjU,GAAW,CAC9B,MAAMy6D,EAAgBnB,GAAoB,KAAK,eAAgB,EAAEt5D,CAAM,EACvE,KAAK,kBAAkBy6D,CAAa,CAC1C,CAAK,CACF,CAMD,kBAAkBA,EAAe,CAC/B,KAAK,KAAK,eAAgBrB,GAAW,IAAI,IAAIqB,CAAa,CAAC,CAAC,CAC7D,CAMD,eAAgB,CACd,MAAM3lH,EAAY,KAAK,OAAO,MAAM,SAAS,UACvCwhB,EAAQ,KAAK,iBACnB,OAAOxhB,EAAU,aAAeijH,GAAgBzhG,CAAK,GAAK,CAACuiG,GAAuBviG,CAAK,CACxF,CAID,gBAAiB,CAEf,MAAM0nF,EADM,KAAK,OAAO,MAAM,SACH,UAAU,iBAAgB,EAAG,OACxD,OAAO,KAAK,YAAc,SAAWA,EAAiBA,EAAe,WACtE,CACH,EAGIme,GAAY,cAAcp3C,EAAO,CAInC,WAAW,YAAa,CACtB,MAAO,WACR,CAMD,+BAA+BuwB,EAAQ,CACrC,OAAO+jB,GAA+B/jB,CAAM,CAC7C,CAMD,uBAAuBwjB,EAAW,CAChC,OAAOD,GAAuBC,CAAS,CACxC,CAMD,gBAAgB/8H,EAAM,CACpB,OAAOg8H,GAAgBh8H,CAAI,CAC5B,CAOD,gCAAgCu5G,EAAQr4G,EAAU,GAAI,CACpD,OAAO+7H,GAAgC1jB,EAAQr4G,CAAO,CACvD,CACH,EAGA,SAASm/H,GAAWp1B,EAAa,CAC/B,OAAOA,EAAY,GAAG,UAAW,IAAI,GAAKA,EAAY,GAAG,UAAW,IAAI,CAC1E,CACA,SAASq1B,GAAer1B,EAAa,CACnC,OAAOA,EAAY,GAAG,UAAW,IAAI,CACvC,CACA,SAASs1B,GAAU/D,EAAU,CAC3B,IAAI5oG,EAAS,EACTroB,EAASixH,EAAS,OACtB,KAAOjxH,GAAQ,CACb,GAAI+0H,GAAe/0H,CAAM,EACvBqoB,QACK,CACL,MAAM4sG,EAAkBj1H,EAAO,gBAC3Bi1H,GAAmBF,GAAeE,CAAe,GACnD5sG,GAEH,CACDroB,EAASA,EAAO,MACjB,CACD,OAAOqoB,CACT,CACA,SAAS6sG,GAAkBx8D,EAAQrwC,EAAQrxB,EAAM0G,EAAKy3H,GAA4Bn+H,EAAMqxB,CAAM,EAAG,CAC/F,OAAOqwC,EAAO,uBAAuB08D,GAA8Bp+H,CAAI,EAAG,KAAM,CAC9E,SAAU,EAAIqxB,EAAS,IAAM,IAC7B,GAAA3qB,CACJ,CAAG,CACH,CACA,SAAS23H,GAAsB38D,EAAQrwC,EAAQ3qB,EAAI,CACjD,OAAOg7D,EAAO,uBAAuB,KAAM,KAAM,CAC/C,UAAW,EAAIrwC,EAAS,GAAK,IAAM,IACnC,GAAA3qB,CACJ,CAAG,CACH,CACA,SAAS03H,GAA8Bp+H,EAAM,CAC3C,OAAOA,GAAQ,WAAa,KAAO,IACrC,CACA,SAASm+H,GAA4Bn+H,EAAMqxB,EAAQ,CACjD,MAAO,QAAQrxB,CAAI,IAAIqxB,CAAM,EAC/B,CAGA,SAASitG,GAAwB1zG,EAAU2zG,EAAgB,CACzD,MAAMzwB,EAAeljF,EAAS,WAC9B,GAAK6uG,GAAgB3rB,CAAY,EAK1B,CACL,IAAIgsB,EAAWhsB,EACf,SAAW,CAAE,KAAArwG,CAAM,IAAI87H,GAAyBO,EAAU,UAAU,EAElE,GADAA,EAAWr8H,EACP8gI,EAAe,IAAIzE,CAAQ,EAC7B,OAGJyE,EAAe,IAAIzwB,EAAcgsB,CAAQ,CAC1C,KAdmC,CAClC,MAAMvoF,EAAO3mB,EAAS,UAClB6uG,GAAgBloF,CAAI,GACtBgtF,EAAe,IAAIhtF,EAAMA,CAAI,CAEnC,CAUA,CACA,SAASitF,GAAeC,EAAW/8D,EAAQ,CACzC,IAAIg9D,EAAY,EACZC,EAAa,GACbC,EAAQ,KACRC,EAAU,GACd,SAAW,CAAE,KAAAphI,CAAM,IAAIghI,EAAW,CAChC,MAAMK,EAAarhI,EAAK,aAAa,YAAY,EACjD,GAAIqhI,EAAaJ,EAAW,CAC1B,IAAIrC,EACAuC,IAAU,MACZA,EAAQE,EAAaJ,EACrBrC,EAAYqC,IAERE,EAAQE,IACVF,EAAQE,GAEVzC,EAAYyC,EAAaF,GAEvBvC,EAAYsC,EAAa,IAC3BtC,EAAYsC,EAAa,GAE3Bj9D,EAAO,aAAa,aAAc26D,EAAW5+H,CAAI,EACjDohI,EAAU,GACVF,EAAatC,CACnB,MACMuC,EAAQ,KACRF,EAAYI,EAAa,EACzBH,EAAaG,CAEhB,CACD,OAAOD,CACT,CACA,SAASE,GAAeN,EAAWO,EAASt9D,EAAQ,CAClD,MAAM+5D,EAA0B,IAAI,IACpC,IAAIoD,EAAU,GACd,SAAW,CAAE,KAAAphI,CAAM,IAAIghI,EAAW,CAChC,GAAIhD,EAAQ,IAAIh+H,CAAI,EAClB,SAEF,IAAIwhI,EAAWxhI,EAAK,aAAa,UAAU,EACvCyhI,EAAazhI,EAAK,aAAa,YAAY,EAK/C,GAJIuhI,EAAQ,IAAIE,CAAU,IACxBA,EAAanF,GAAY,QAE3BiF,EAAQ,IAAIE,CAAU,EAClBzhI,EAAK,GAAG,UAAW,UAAU,EAAG,CAC9BA,EAAK,aAAa,YAAY,GAAKyhI,IACrCx9D,EAAO,aAAa,aAAcw9D,EAAYzhI,CAAI,EAClDohI,EAAU,IAEZ,QACD,CACD,UAAW7mG,KAASkiG,GAAkBz8H,EAAM,CAAE,UAAW,SAAS,CAAE,EAClEg+H,EAAQ,IAAIzjG,CAAK,EACbA,EAAM,aAAa,UAAU,GAAKinG,IACpCC,EAAanF,GAAY,OACzBkF,EAAWjnG,EAAM,aAAa,UAAU,GAEtCA,EAAM,aAAa,YAAY,GAAKknG,IACtCx9D,EAAO,aAAa,aAAcw9D,EAAYlnG,CAAK,EACnD6mG,EAAU,GAGf,CACD,OAAOA,CACT,CAGA,SAASM,IAA0B,CACjC,MAAO,CAAC51G,EAAKjW,EAAMk2F,IAAkB,CACnC,KAAM,CAAE,OAAA9nC,EAAQ,OAAAnD,CAAQ,EAAGirC,EAC3B,GAAI,CAACl2F,EAAK,WACR,OAEF,MAAMs2C,EAAQ,MAAM,KAAKt2C,EAAK,WAAW,SAAS,CAAE,QAAS,EAAM,EAAC,EAAE,OAAQi+B,GAASgtB,EAAO,eAAehtB,EAAM,YAAY,CAAC,EAChI,GAAI,CAACqY,EAAM,OACT,OAEF,MAAMs1E,EAAanF,GAAY,OACzBqF,EAAapB,GAAU1qH,EAAK,QAAQ,EAC1C,IAAI2rH,EAAW3rH,EAAK,SAAS,QAAUA,EAAK,SAAS,OAAO,GAAG,UAAW,IAAI,EAAI,WAAa,WAC/F,MAAM+rH,EAAoBz1E,EAAM,CAAC,EAAE,aAAa,UAAU,EACtDy1E,IACFJ,EAAWI,GAEb,MAAM58H,EAAa,CACjB,WAAAy8H,EACA,WAAAE,EACA,SAAAH,CACN,EACI,UAAW1tF,KAAQqY,EACZrY,EAAK,aAAa,YAAY,GACjCmwB,EAAO,cAAcj/D,EAAY8uC,CAAI,EAGrCqY,EAAM,OAAS,GACbA,EAAM,CAAC,EAAE,aAAa,YAAY,GAAKnnD,EAAW,YACpD+mG,EAAc,iBAAiB5/C,EAAM,CAAC,CAAC,CAG/C,CACA,CACA,SAAS01E,IAAsB,CAC7B,MAAO,CAAC/1G,EAAKjW,EAAMk2F,IAAkB,CACnC,GAAI,CAACA,EAAc,WAAW,KAAKl2F,EAAK,SAAU,CAAE,KAAM,EAAI,CAAE,EAC9D,OAEF,MAAM43F,EAAa,IAAI0a,GAAatyG,EAAK,SAAS,QAAQ,EAC1D,UAAW6+B,KAAS,MAAM,KAAK7+B,EAAK,SAAS,YAAW,CAAE,EACpD,CAACyqH,GAAe5rF,CAAK,GAAK,CAAC2rF,GAAW3rF,CAAK,GAC7C+4D,EAAW,OAAO/4D,CAAK,CAG/B,CACA,CACA,SAASotF,GAA2B50D,EAAOihC,EAAS4zB,EAAgBC,EAAa,CAC/E,MAAO,IAAM,CACX,MAAM9jB,EAAUhxC,EAAM,SAAS,OAAO,WAAU,EAC1C+0D,EAAiB,GACjBnB,EAAiC,IAAI,IACrCoB,EAA+B,IAAI,IACzC,UAAW5iD,KAAS4+B,EAClB,GAAI5+B,EAAM,MAAQ,UAAYA,EAAM,MAAQ,QAC1CuhD,GAAwBvhD,EAAM,SAAUwhD,CAAc,EACjDxhD,EAAM,WAAW,IAAI,YAAY,EAGpC4iD,EAAa,IAAI5iD,EAAM,SAAS,SAAS,EAFzCuhD,GAAwBvhD,EAAM,SAAS,aAAaA,EAAM,MAAM,EAAGwhD,CAAc,UAI1ExhD,EAAM,MAAQ,UAAYA,EAAM,WAAW,IAAI,YAAY,EACpEuhD,GAAwBvhD,EAAM,SAAUwhD,CAAc,UAC7CxhD,EAAM,MAAQ,YAAa,CACpC,MAAMxrC,EAAOwrC,EAAM,MAAM,MAAM,UAC3ByiD,EAAe,SAASziD,EAAM,YAAY,GAC5CuhD,GAAwBvhD,EAAM,MAAM,MAAOwhD,CAAc,EACrDxhD,EAAM,oBAAsB,MAC9BuhD,GAAwBvhD,EAAM,MAAM,MAAM,aAAa,CAAC,EAAGwhD,CAAc,EACrEqB,EAA6BruF,CAAI,GACnCmuF,EAAe,KAAKnuF,CAAI,GAG1BouF,EAAa,IAAIpuF,CAAI,GAEdkoF,GAAgBloF,CAAI,GACzBquF,EAA6BruF,CAAI,GACnCmuF,EAAe,KAAKnuF,CAAI,CAG7B,CAEH,UAAWuoF,KAAYyE,EAAe,SACpCmB,EAAe,KAAK,GAAGG,EAA0B/F,EAAU6F,CAAY,CAAC,EAE1E,UAAWpuF,KAAQ,IAAI,IAAImuF,CAAc,EACvC9zB,EAAQ,cAAcr6D,CAAI,CAEhC,EACE,SAASsuF,EAA0B/F,EAAU6F,EAAc,CACzD,MAAMD,EAAiB,GACjBjE,EAA0B,IAAI,IAC9BvpH,EAAQ,GACd,SAAW,CAAE,KAAAzU,EAAM,SAAAi4E,CAAQ,IAAM6jD,GAAyBO,EAAU,SAAS,EAAG,CAC9E,GAAI2B,EAAQ,IAAIh+H,CAAI,EAClB,SAEF,MAAMqhI,EAAarhI,EAAK,aAAa,YAAY,EAC7Ci4E,GAAYopD,EAAappD,EAAS,aAAa,YAAY,IAC7DxjE,EAAM,OAAS4sH,EAAa,GAE9B5sH,EAAM4sH,CAAU,EAAI,OAAO,YAAY,MAAM,KAAKrhI,EAAK,cAAa,CAAE,EAAE,OAAO,CAAC,CAAC9C,CAAG,IAAM6kI,EAAe,SAAS7kI,CAAG,CAAC,CAAC,EACvH,MAAMq8G,EAASkjB,GAAkBz8H,EAAM,CAAE,UAAW,SAAS,CAAE,EAC/D,UAAWu6B,KAASg/E,EAClBykB,EAAQ,IAAIzjG,CAAK,GACb4nG,EAA6B5nG,EAAOg/E,CAAM,GAEnC8oB,EAAgC9nG,EAAO9lB,EAAOytH,CAAY,IACnED,EAAe,KAAK1nG,CAAK,CAG9B,CACD,OAAO0nG,CACR,CACD,SAASE,EAA6BruF,EAAMylE,EAAQ,CAClD,MAAMtO,EAAckD,EAAQ,OAAO,cAAcr6D,CAAI,EACrD,GAAI,CAACm3D,EACH,MAAO,GAMT,GAJqB+2B,EAAY,KAAK,eAAgB,CACpD,aAAcluF,EACd,YAAAm3D,CACN,CAAK,EAEC,MAAO,GAET,GAAI,CAACn3D,EAAK,GAAG,UAAW,WAAW,GAAK,CAACA,EAAK,GAAG,UAAW,UAAU,EACpE,MAAO,GAET,MAAMwuF,EAAWC,GAAwBzuF,EAAMiuF,EAAgBxoB,CAAM,EACrE,OAAI+oB,GAAYr3B,EAAY,GAAG,UAAW,GAAG,EACpC,GACE,IAACq3B,GAAYr3B,EAAY,GAAG,UAAW,MAAM,EAIzD,CACD,SAASo3B,EAAgCvuF,EAAMr/B,EAAOytH,EAAc,CAClE,GAAIA,EAAa,IAAIpuF,CAAI,EACvB,MAAO,GAET,MAAMm3D,EAAckD,EAAQ,OAAO,cAAcr6D,CAAI,EACrD,IAAIlgB,EAASnf,EAAM,OAAS,EAC5B,QAAS8b,EAAU06E,EAAY,OAAQ,CAAC16E,EAAQ,GAAG,iBAAiB,EAAGA,EAAUA,EAAQ,OAAQ,CAC/F,MAAMiyG,EAAoBlC,GAAe/vG,CAAO,EAC1CkyG,EAAgBpC,GAAW9vG,CAAO,EACxC,GAAI,CAACkyG,GAAiB,CAACD,EACrB,SAEF,MAAMvvG,EAAY,mBAAmBuvG,EAAoB,OAAS,MAAM,GAKxE,GAJqBR,EAAY,KAAK/uG,EAAW,CAC/C,YAAa1C,EACb,gBAAiB9b,EAAMmf,CAAM,CACrC,CAAO,EAEC,MAEF,GAAI6uG,IACF7uG,IACIA,EAAS,GACX,MAAO,EAGZ,CACD,MAAO,EACR,CACH,CACA,SAAS8uG,GAA0BX,EAAgBY,EAAYz1D,EAAO,CAAE,aAAA01D,CAAc,EAAG,GAAI,CAC3F,MAAMt/F,EAAWu/F,GAAyBd,CAAc,EACxD,MAAO,CAACj2G,EAAKjW,EAAMk2F,IAAkB,CACnC,KAAM,CAAE,OAAA9nC,EAAQ,OAAA0oC,EAAQ,WAAAm2B,CAAU,EAAK/2B,EACjCywB,EAAW3mH,EAAK,KAItB,GAHI,CAACksH,EAAe,SAASlsH,EAAK,YAAY,GAG1C,CAACytB,EAASk5F,EAAUsG,CAAU,EAChC,OAEF,MAAM73B,EAAc83B,GAAsBvG,EAAU7vB,EAAQz/B,CAAK,EACjE81D,GAA2B/3B,EAAahnC,EAAQ0oC,CAAM,EACtDs2B,GAAoBh4B,EAAahnC,CAAM,EACvC,MAAMmhC,EAAY89B,GAA2B1G,EAAUvxB,EAAa03B,EAAY1+D,EAAQ,CAAE,aAAA2+D,CAAY,CAAE,EACxGO,GAAkB3G,EAAUp3B,EAAWu9B,EAAY1+D,CAAM,CAC7D,CACA,CACA,SAASm/D,GAAsBrB,EAAgB,CAAE,aAAAa,CAAY,EAAK,GAAI,CACpE,MAAO,CAACrgC,EAAc,CAAE,OAAAt+B,KAAa,CACnC,GAAI,CAACs+D,GAAwBhgC,EAAcw/B,CAAc,EACvD,OAAO,KAET,GAAI,CAACa,EACH,OAAO3+D,EAAO,uBAAuB,OAAQ,CAAE,MAAO,yBAAyB,CAAE,EAEnF,MAAMgnC,EAAchnC,EAAO,uBAAuB,GAAG,EACrD,OAAAA,EAAO,kBAAkB,oCAAqC,GAAMgnC,CAAW,EACxEA,CACX,CACA,CACA,SAAS83B,GAAsBxyG,EAASo8E,EAAQz/B,EAAO,CACrD,MAAM47B,EAAa57B,EAAM,cAAc38C,CAAO,EAE9C,OADkBo8E,EAAO,YAAY7D,CAAU,EAAE,WAAU,EAC1C,IAAI,UACvB,CACA,SAASk6B,GAA2B/3B,EAAawC,EAAYd,EAAQ,CACnE,KAAO1B,EAAY,OAAO,GAAG,kBAAkB,GAAKA,EAAY,OAAO,kBAAkB,iBAAiB,GACxGwC,EAAW,OAAOA,EAAW,cAAcxC,EAAY,MAAM,EAAGA,EAAY,MAAM,EAEpF,MAAMo4B,EAAa51B,EAAW,qBAAqBxC,CAAW,EAAE,UAAU,CAAE,UAAW,UAAU,CAAE,EAC7Fq4B,EAAkB,GACxB,SAAW,CAAE,KAAAxvF,CAAM,IAAIuvF,EAAY,CACjC,GAAIvvF,EAAK,GAAG,SAAS,GAAK64D,EAAO,eAAe74D,CAAI,EAClD,MAEEA,EAAK,GAAG,SAAS,GAAKA,EAAK,kBAAkB,gBAAgB,GAC/DwvF,EAAgB,KAAKxvF,CAAI,CAE5B,CACD,UAAWmlD,KAAUqqC,EACnB71B,EAAW,OAAOxU,CAAM,CAE5B,CACA,SAASiqC,GAA2B1G,EAAUvxB,EAAa03B,EAAY1+D,EAAQ,CAAE,aAAA2+D,GAAgB,CAC/F,IAAIx9B,EAAYnhC,EAAO,cAAcgnC,CAAW,EAChD,GAAI,CAAC6xB,GAAuBN,CAAQ,EAClC,OAAOp3B,EAET,UAAWm+B,KAAYZ,EAAY,CACjC,GAAIY,EAAS,OAAS,aACpB,SAEF,MAAMC,EAAgBD,EAAS,cAAct/D,EAAQu4D,EAAU,CAAE,aAAAoG,CAAY,CAAE,EAO/E,GANI,CAACY,IAGLv/D,EAAO,kBAAkB,iBAAkB,GAAMu/D,CAAa,EAC9Dv/D,EAAO,OAAOmhC,EAAU,MAAOo+B,CAAa,EAC5Cp+B,EAAYnhC,EAAO,YAAYA,EAAO,qBAAqBu/D,CAAa,EAAGv/D,EAAO,oBAAoBgnC,CAAW,CAAC,EAC9G,CAACs4B,EAAS,sBAAwB,CAACA,EAAS,gBAC9C,SAEF,MAAM5pF,EAAU4pF,EAAS,qBAAqBt/D,EAAQu4D,EAAU,CAAE,aAAAoG,CAAY,CAAE,EAChF3+D,EAAO,kBAAkB,kBAAmB,GAAMtqB,CAAO,EACrD4pF,EAAS,eAAe/G,CAAQ,EAClCp3B,EAAYnhC,EAAO,KAAKmhC,EAAWzrD,CAAO,GAE1CyrD,EAAYnhC,EAAO,KAAKA,EAAO,cAAcu/D,CAAa,EAAG7pF,CAAO,EACpEyrD,EAAYnhC,EAAO,YAAYmhC,EAAU,MAAOnhC,EAAO,oBAAoBgnC,CAAW,CAAC,EAE1F,CACD,OAAO7F,CACT,CACA,SAAS69B,GAAoBh4B,EAAawC,EAAY,CACpD,IAAIg2B,EAAmBx4B,EAAY,OACnC,KAAOw4B,EAAiB,GAAG,kBAAkB,GAAK,CAAC,KAAM,KAAM,IAAI,EAAE,SAASA,EAAiB,IAAI,GAAG,CACpG,MAAMC,EAAgBD,EAAiB,OACvCh2B,EAAW,OAAOA,EAAW,cAAcxC,CAAW,EAAGw4B,CAAgB,EACzEA,EAAmBC,CACpB,CACH,CACA,SAASP,GAAkB3G,EAAUp3B,EAAWu9B,EAAY1+D,EAAQ,CAClE,GAAI,CAACu4D,EAAS,aAAa,YAAY,EACrC,OAEF,MAAMmH,EAAiBnH,EAAS,aAAa,YAAY,EACzD,IAAIoH,EAAkBpH,EACtB,QAAS5oG,EAAS+vG,EAAgB/vG,GAAU,EAAGA,IAAU,CACvD,MAAMiwG,EAAsBjD,GAAsB38D,EAAQrwC,EAAQgwG,EAAgB,aAAa,YAAY,CAAC,EACtGE,EAAkBrD,GAAkBx8D,EAAQrwC,EAAQgwG,EAAgB,aAAa,UAAU,CAAC,EAClG,UAAWL,KAAYZ,GAChBY,EAAS,OAAS,QAAUA,EAAS,OAAS,SAAWK,EAAgB,aAAaL,EAAS,aAAa,GAC/GA,EAAS,uBAAuBt/D,EAAQ2/D,EAAgB,aAAaL,EAAS,aAAa,EAAGA,EAAS,OAAS,OAASO,EAAkBD,CAAmB,EASlK,GANAz+B,EAAYnhC,EAAO,KAAKmhC,EAAWy+B,CAAmB,EACtDz+B,EAAYnhC,EAAO,KAAKmhC,EAAW0+B,CAAe,EAC9ClwG,GAAU,IAGdgwG,EAAkBhI,GAAW,MAAMgI,EAAiB,CAAE,YAAa,EAAI,CAAE,EACrE,CAACA,GACH,KAEH,CACH,CACA,SAASf,GAAyBd,EAAgB,CAChD,MAAO,CAAC/hI,EAAM8iI,IAAe,CAC3B,MAAM9oH,EAAS,GACf,UAAWga,KAAiB+tG,EACtB/hI,EAAK,aAAag0B,CAAa,GACjCha,EAAO,KAAK,aAAaga,CAAa,EAAE,EAG5C,OAAKha,EAAO,MAAOH,GAAUipH,EAAW,KAAK9iI,EAAM6Z,CAAK,IAAM,EAAK,GAGnEG,EAAO,QAASH,GAAUipH,EAAW,QAAQ9iI,EAAM6Z,CAAK,CAAC,EAClD,IAHE,EAIb,CACA,CACA,SAAS0oH,GAAwBzuF,EAAMiuF,EAAgBxoB,EAASgjB,GAAqBzoF,CAAI,EAAG,CAC1F,GAAI,CAACkoF,GAAgBloF,CAAI,EACvB,MAAO,GAET,UAAWksE,KAAgBlsE,EAAK,mBAC9B,GAAI,CAAAksE,EAAa,WAAW,YAAY,GAGpC,CAAC+hB,EAAe,SAAS/hB,CAAY,EACvC,MAAO,GAGX,OAAOzG,EAAO,OAAS,CACzB,CAKA,IAAIwqB,GAAuB,CAAC,WAAY,aAAc,YAAY,EAC9DC,GAAc,cAAch7C,EAAO,CAIrC,WAAW,YAAa,CACtB,MAAO,aACR,CAID,WAAW,UAAW,CACpB,MAAO,CAAC6Y,GAAOgD,GAAQu7B,GAAWjqB,EAAiB,CACpD,CAID,YAAYh5C,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,oBAAsB,GAC3BA,EAAO,OAAO,OAAO,kBAAmB,EAAI,CAC7C,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf8mE,EAAa9mE,EAAO,OAAO,IAAI,iBAAiB,EACtD,GAAIA,EAAO,QAAQ,IAAI,mBAAmB,EACxC,MAAM,IAAIkV,EAAc,wBAAyB,KAAM,CAAE,eAAgB,mBAAmB,CAAE,EAEhGnF,EAAM,OAAO,SAAS,YAAa,CAAE,gBAAiB62D,EAAoB,CAAE,EACxEE,GACF/2D,EAAM,OAAO,OAAO,aAAc,CAAE,kBAAmB,WAAW,CAAE,EACpEA,EAAM,OAAO,OAAO,SAAU,CAAE,kBAAmB,WAAW,CAAE,EAChEA,EAAM,OAAO,OAAO,eAAgB,CAAE,kBAAmB,WAAW,CAAE,GAEtEA,EAAM,OAAO,SAAS,WAAY,CAChC,eAAgB,SAChB,kBAAmB,WAC3B,CAAO,EAEH,UAAWpK,KAAaihE,GACtB72D,EAAM,OAAO,uBAAuBpK,EAAW,CAC7C,cAAe,EACvB,CAAO,EAEH3F,EAAO,SAAS,IAAI,eAAgB,IAAIkiE,GAAYliE,EAAQ,UAAU,CAAC,EACvEA,EAAO,SAAS,IAAI,eAAgB,IAAIkiE,GAAYliE,EAAQ,UAAU,CAAC,EACvEA,EAAO,SAAS,IAAI,aAAc,IAAI4hE,GAAkB5hE,EAAQ,SAAS,CAAC,EAC1EA,EAAO,SAAS,IAAI,cAAe,IAAI4hE,GAAkB5hE,EAAQ,UAAU,CAAC,EAC5EA,EAAO,SAAS,IAAI,sBAAuB,IAAIgjE,GAAiBhjE,EAAQ,QAAQ,CAAC,EACjFA,EAAO,SAAS,IAAI,qBAAsB,IAAIgjE,GAAiBhjE,EAAQ,OAAO,CAAC,EAC3E8mE,IACF9mE,EAAO,SAAS,IAAI,wBAAyB,IAAIsiE,GAAiBtiE,EAAQ,UAAU,CAAC,EACrFA,EAAO,SAAS,IAAI,uBAAwB,IAAIsiE,GAAiBtiE,EAAQ,SAAS,CAAC,GAErF,KAAK,wBAAuB,EAC5B,KAAK,uBAAsB,EAC3B,KAAK,qBAAoB,EACzB,KAAK,2BAA0B,CAChC,CAID,WAAY,CAEV,MAAMqiD,EADS,KAAK,OACI,SAClB5rF,EAAS4rF,EAAS,IAAI,QAAQ,EAC9B0kB,EAAU1kB,EAAS,IAAI,SAAS,EAClC5rF,GACFA,EAAO,qBAAqB4rF,EAAS,IAAI,YAAY,EAAG,CAAE,SAAU,MAAM,CAAE,EAE1E0kB,GACFA,EAAQ,qBAAqB1kB,EAAS,IAAI,aAAa,EAAG,CAAE,SAAU,QAAQ,CAAE,EAElF,KAAK,sBAAqB,EAC1B,KAAK,iBAAgB,CACtB,CASD,yBAAyB+jB,EAAU,CACjC,KAAK,oBAAoB,KAAKA,CAAQ,CACvC,CAID,uBAAwB,CACtB,MAAO,CACL,GAAGQ,GACH,GAAG,KAAK,oBAAoB,IAAKR,GAAaA,EAAS,aAAa,CAC1E,CACG,CAKD,yBAA0B,CACxB,MAAMpmE,EAAS,KAAK,OACdgnE,EAAuBhnE,EAAO,SAAS,IAAI,uBAAuB,EAClEinE,EAAsBjnE,EAAO,SAAS,IAAI,sBAAsB,EACtE,KAAK,SAASA,EAAO,QAAQ,KAAK,SAAU,SAAU,CAACrxC,EAAKjW,IAAS,CACnE,MAAMkD,EAAYokD,EAAO,MAAM,SAAS,UACpC0hE,GAAuB1hE,EAAO,KAAK,GAGvCA,EAAO,MAAM,OAAO,IAAM,CACxB,MAAM6yC,EAAgBj3F,EAAU,mBAChC,GAAIA,EAAU,aAAelD,EAAK,WAAa,WAAY,CACzD,GAAI,CAACm6F,EAAc,UACjB,OAEF,MAAMiS,EAAiBjS,EAAc,OACrC,GAAI,CAACgsB,GAAgB/Z,CAAc,EACjC,OAMF,GAAI,CAJkB2Z,GAAW,MAAM3Z,EAAgB,CACrD,eAAgB,WAChB,WAAY,EACxB,CAAW,GACqBA,EAAe,aAAa,YAAY,IAAM,EAC7D+a,GAAsB/a,CAAc,GACvC9kD,EAAO,QAAQ,oBAAoB,EAErCA,EAAO,QAAQ,aAAa,MACvB,CACL,GAAI,CAACgnE,GAAwB,CAACA,EAAqB,UACjD,OAEFA,EAAqB,QAAQ,CAC3B,gCAAiCE,GAAgClnE,EAAO,MAAO,UAAU,CACvG,CAAa,CACF,CACDtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,CAClB,KAAe,CAIL,GAHI/S,EAAU,aAAe,CAACA,EAAU,gBAAe,EAAG,SAGtD,CAACqrH,GAAuB,CAACA,EAAoB,UAC/C,OAEFA,EAAoB,QAAQ,CAC1B,gCAAiCC,GAAgClnE,EAAO,MAAO,SAAS,CACpG,CAAW,EACDtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,CACT,CACT,CAAO,CACP,EAAO,CAAE,QAAS,IAAI,CAAE,CACrB,CAKD,wBAAyB,CACvB,MAAMqxC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACfqiD,EAAWriD,EAAO,SAClBqmD,EAAehE,EAAS,IAAI,OAAO,EACzC,KAAK,SAASriD,EAAO,QAAQ,KAAK,SAAU,QAAS,CAACrxC,EAAKjW,IAAS,CAClE,MAAM5V,EAAMitE,EAAM,SACZ+0C,EAAiBhiH,EAAI,UAAU,iBAAgB,EAAG,OACxD,GAAIA,EAAI,UAAU,aAAe+7H,GAAgB/Z,CAAc,GAAKA,EAAe,SAAW,CAACpsG,EAAK,OAAQ,CAC1G,MAAMqqH,EAAepD,GAAuB7a,CAAc,EACpDqiB,EAActH,GAAsB/a,CAAc,EACpDie,GAAgBoE,GAClBnnE,EAAO,QAAQ,aAAa,EAC5BtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,GACCo0G,GAAgB,CAACoE,GAC1BnnE,EAAO,QAAQ,oBAAoB,EACnCtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,GACCw4G,IACTnnE,EAAO,QAAQ,qBAAqB,EACpCtnD,EAAK,eAAc,EACnBiW,EAAI,KAAI,EAEX,CACP,EAAO,CAAE,QAAS,IAAI,CAAE,EACpB,KAAK,SAAS03F,EAAc,eAAgB,IAAM,CAChD,MAAM+gB,EAAe/kB,EAAS,IAAI,qBAAqB,EAEvD,GADA+kB,EAAa,QAAO,EAChB,CAACA,EAAa,UAChB,OAGF,MAAMtiB,EADM9kD,EAAO,MAAM,SACE,UAAU,gBAAe,EAAG,OAChCo/D,GAAqBta,CAAc,EACvC,SAAW,GAC5BsiB,EAAa,QAAO,CAE5B,CAAK,CACF,CAKD,sBAAuB,CACrB,MAAMpnE,EAAS,KAAK,OACpB,KAAK,SAASA,EAAO,QAAQ,KAAK,SAAU,MAAO,CAACrxC,EAAKjW,IAAS,CAChE,MAAMovF,EAAcpvF,EAAK,SAAW,cAAgB,aACpC,KAAK,OAAO,SAAS,IAAIovF,CAAW,EACxC,YACV9nC,EAAO,QAAQ8nC,CAAW,EAC1BpvF,EAAK,gBAAe,EACpBA,EAAK,eAAc,EACnBiW,EAAI,KAAI,EAEhB,EAAO,CAAE,QAAS,IAAI,CAAE,CACrB,CAID,kBAAmB,CACjB,MAAMqxC,EAAS,KAAK,OACd+P,EAAQ/P,EAAO,MACf4kE,EAAiB,KAAK,wBACtBkC,EAAa9mE,EAAO,OAAO,IAAI,iBAAiB,EAChD+vD,EAAc+W,EAAa,YAAc,WAC/C9mE,EAAO,WAAW,IAAI,QAAQ,EAAE,iBAAiB,CAC/C,KAAM,KACN,MAAO,CAAC8tC,EAAa,CAAE,OAAAhnC,KAAaA,EAAO,cAAcipD,EAAa,CAAE,SAAU,GAAI,CACvF,GAAE,iBAAiB,CAClB,KAAM,IACN,MAAO,CAACjiB,EAAa,CAAE,OAAAhnC,KACjBgnC,EAAY,QAAUA,EAAY,OAAO,GAAG,UAAW,IAAI,EACtDhnC,EAAO,cAAcipD,EAAa,CAAE,SAAU,EAAE,CAAE,EAEpD,KAET,kBAAmB,MACzB,CAAK,EAAE,IAAKnkB,GAAe,CACrBA,EAAW,GAAG,aAAc24B,GAAyB,GACrD34B,EAAW,GAAG,aAAc84B,GAAqB,EAAE,CAAE,SAAU,MAAM,CAAE,EACvE94B,EAAW,GAAG,aAAc84B,GAAqB,EAAE,CAAE,SAAU,MAAM,CAAE,CAC7E,CAAK,EACIoC,GACH9mE,EAAO,WAAW,IAAI,UAAU,EAAE,iBAAiB,CACjD,MAAO,WACP,KAAM,GACd,CAAO,EAEHA,EAAO,WAAW,IAAI,iBAAiB,EAAE,iBAAiB,CACxD,MAAO+vD,EACP,KAAMkW,GAAsBrB,CAAc,EAC1C,kBAAmB,MACzB,CAAK,EAAE,IAAKh5B,GAAe,CACrBA,EAAW,GAAG,YAAa25B,GAA0BX,EAAgB,KAAK,oBAAqB70D,CAAK,CAAC,CAC3G,CAAK,EACD/P,EAAO,WAAW,IAAI,cAAc,EAAE,iBAAiB,CACrD,MAAO+vD,EACP,KAAMkW,GAAsBrB,EAAgB,CAAE,aAAc,EAAI,CAAE,EAClE,kBAAmB,MACzB,CAAK,EAAE,IAAKh5B,GAAe,CACrBA,EAAW,GAAG,YAAa25B,GAA0BX,EAAgB,KAAK,oBAAqB70D,EAAO,CAAE,aAAc,EAAI,CAAE,CAAC,CACnI,CAAK,EACD,KAAK,SAASA,EAAM,SAAU,cAAe40D,GAA2B50D,EAAO/P,EAAO,QAAS4kE,EAAgB,IAAI,EAAG,CAAE,SAAU,MAAM,CAAE,EAC1I,KAAK,GAAG,uBAAwB,CAACj2G,EAAK,CAAE,YAAAm/E,EAAa,gBAAAu5B,KAAsB,CACrEv5B,EAAY,IAAMu5B,EAAgB,aACpC14G,EAAI,OAAS,GACbA,EAAI,KAAI,EAEhB,CAAK,EACD,KAAK,GAAG,uBAAwB,CAACA,EAAK,CAAE,YAAAm/E,EAAa,gBAAAu5B,KAAsB,EACrEv5B,EAAY,MAAQ01B,GAA8B6D,EAAgB,QAAQ,GAAKv5B,EAAY,IAAMy1B,GAA4B8D,EAAgB,SAAUA,EAAgB,UAAU,KACnL14G,EAAI,OAAS,GACbA,EAAI,KAAI,EAEhB,CAAK,CACF,CAID,uBAAwB,CACtB,MAAMohD,EAAQ,KAAK,OAAO,MACpB60D,EAAiB,KAAK,wBAC5B70D,EAAM,SAAS,kBAAmBjJ,GAAWwgE,GAAqBv3D,EAAOjJ,EAAQ89D,EAAgB,IAAI,CAAC,EACtG,KAAK,GAAG,YAAa,CAACj2G,EAAK,CAAE,UAAAk1G,EAAW,OAAA/8D,KAAa,CACnDn4C,EAAI,OAASi1G,GAAeC,EAAW/8D,CAAM,GAAKn4C,EAAI,MAC5D,EAAO,CAAE,SAAU,MAAM,CAAE,EACvB,KAAK,GAAG,YAAa,CAACA,EAAK,CAAE,UAAAk1G,EAAW,OAAA/8D,EAAQ,QAAAs9D,KAAc,CAC5Dz1G,EAAI,OAASw1G,GAAeN,EAAWO,EAASt9D,CAAM,GAAKn4C,EAAI,MACrE,EAAO,CAAE,SAAU,MAAM,CAAE,CACxB,CAKD,4BAA6B,CAC3B,MAAMohD,EAAQ,KAAK,OAAO,MACpB2sC,EAAoB,KAAK,OAAO,QAAQ,IAAI,mBAAmB,EACrE,KAAK,SAAS3sC,EAAO,gBAAiBw3D,GAA4Bx3D,CAAK,EAAG,CAAE,SAAU,MAAM,CAAE,EAC9F,KAAK,SAAS2sC,EAAmB,uBAAwB,CAAC/tF,EAAKjW,IAAS,CACtEq3D,EAAM,OAAQjJ,GAAW,CACvB,MAAM0gE,EAAqB,MAAM,KAAK9uH,EAAK,QAAQ,YAAW,CAAE,EAC1D+uH,EAAWD,EAAmBA,EAAmB,OAAS,CAAC,EAOjE,GANIA,EAAmB,OAAS,GAAKC,EAAS,GAAG,SAAS,GAAKA,EAAS,SAChCD,EAAmB,MAAM,EAAG,EAAE,EAClC,MAAM3I,EAAe,GACrD/3D,EAAO,OAAO2gE,CAAQ,EAGtB/uH,EAAK,QAAU,QAAUA,EAAK,QAAU,MAAO,CACjD,MAAMgvH,EAAc,MAAM,KAAKhvH,EAAK,QAAQ,YAAW,CAAE,EACxByoH,GAAiBuG,CAAW,GAE3D/G,GAAqB+G,EAAa5gE,CAAM,CAE3C,CACT,CAAO,CACP,CAAK,CACF,CACH,EACA,SAASwgE,GAAqBv3D,EAAOjJ,EAAQ89D,EAAgBC,EAAa,CACxE,MAAM9jB,EAAUhxC,EAAM,SAAS,OAAO,WAAU,EAC1C4zD,EAAiC,IAAI,IACrCmD,EAAajC,EAAY,OAAO,OAAO,IAAI,iBAAiB,EAClE,IAAIZ,EAAU,GACd,UAAW9hD,KAAS4+B,EAAS,CAC3B,GAAI5+B,EAAM,MAAQ,UAAYA,EAAM,MAAQ,QAAS,CACnD,MAAMxrC,EAAOwrC,EAAM,SAAS,UAC5B,GAAI,CAACpS,EAAM,OAAO,eAAep5B,EAAM,YAAY,EACjD,UAAW9f,KAAiB,MAAM,KAAK8f,EAAK,iBAAgB,CAAE,EACxDiuF,EAAe,SAAS/tG,CAAa,IACvCiwC,EAAO,gBAAgBjwC,EAAe8f,CAAI,EAC1CstF,EAAU,IAIhBP,GAAwBvhD,EAAM,SAAUwhD,CAAc,EACjDxhD,EAAM,WAAW,IAAI,YAAY,GACpCuhD,GAAwBvhD,EAAM,SAAS,aAAaA,EAAM,MAAM,EAAGwhD,CAAc,EAEnF,SAAW,CAAE,KAAMgE,EAAW,iBAAA71B,CAAkB,IAAI/hC,EAAM,cAAcp5B,CAAI,EACtEkoF,GAAgB8I,CAAS,GAC3BjE,GAAwB5xB,EAAkB6xB,CAAc,CAGlE,MAAexhD,EAAM,MAAQ,SACvBuhD,GAAwBvhD,EAAM,SAAUwhD,CAAc,EAC7CxhD,EAAM,MAAQ,aAAeyiD,EAAe,SAASziD,EAAM,YAAY,IAChFuhD,GAAwBvhD,EAAM,MAAM,MAAOwhD,CAAc,EACrDxhD,EAAM,oBAAsB,MAC9BuhD,GAAwBvhD,EAAM,MAAM,MAAM,aAAa,CAAC,EAAGwhD,CAAc,GAG7E,GAAI,CAACmD,GAAc3kD,EAAM,MAAQ,aAAeykD,GAAqB,SAASzkD,EAAM,YAAY,EAAG,CACjG,MAAM/uD,EAAU+uD,EAAM,MAAM,MAAM,UAC9BA,EAAM,oBAAsB,MAAQ/uD,GAAWA,EAAQ,GAAG,UAAW,UAAU,GACjF0zC,EAAO,OAAO1zC,EAAS,WAAW,EAClC6wG,EAAU,IACD9hD,EAAM,oBAAsB,MAAQ/uD,GAAWA,EAAQ,GAAG,SAAS,GAAKA,EAAQ,MAAQ,aACjG0zC,EAAO,OAAO1zC,EAAS,UAAU,EACjC6wG,EAAU,GAEb,CACF,CACD,MAAMG,EAA0B,IAAI,IACpC,UAAWlF,KAAYyE,EAAe,SACpCM,EAAUY,EAAY,KAAK,YAAa,CACtC,UAAW,IAAI5F,GAAmBC,CAAQ,EAC1C,SAAAA,EACA,OAAAp4D,EACA,QAAAs9D,CACD,IAAKH,EAER,OAAOA,CACT,CACA,SAASsD,GAA4Bx3D,EAAO,CAC1C,MAAO,CAACphD,EAAK,CAAChQ,EAAS0xF,CAAU,IAAM,CACrC,MAAMrhD,EAAQrwC,EAAQ,GAAG,kBAAkB,EAAI,MAAM,KAAKA,EAAQ,YAAW,CAAE,EAAI,CAACA,CAAO,EAC3F,GAAI,CAACqwC,EAAM,OACT,OAGF,MAAMh/B,GADYqgF,EAAatgC,EAAM,gBAAgBsgC,CAAU,EAAItgC,EAAM,SAAS,WACvD,mBAC3B,IAAI63D,EACJ,GAAI/I,GAAgB7uG,EAAS,MAAM,EACjC43G,EAAU53G,EAAS,eACV6uG,GAAgB7uG,EAAS,UAAU,EAC5C43G,EAAU53G,EAAS,eAEnB,QAEF+/C,EAAM,OAAQjJ,GAAW,CACvB,MAAM+gE,EAAUD,EAAQ,aAAa,UAAU,EACzCE,EAAYF,EAAQ,aAAa,YAAY,EAC7CG,EAAqB/4E,EAAM,CAAC,EAAE,aAAa,YAAY,GAAK,EAC5Dg5E,EAAa,KAAK,IAAIF,EAAYC,EAAoB,CAAC,EAC7D,UAAWpxF,KAAQqY,EAAO,CACxB,MAAMi5E,EAAapJ,GAAgBloF,CAAI,EACnCixF,EAAQ,GAAG,UAAW,UAAU,GAAKjxF,EAAK,GAAG,UAAW,WAAW,GACrEmwB,EAAO,OAAOnwB,EAAM,UAAU,EAEhCmwB,EAAO,cAAc,CACnB,YAAamhE,EAAatxF,EAAK,aAAa,YAAY,EAAI,GAAKqxF,EACjE,WAAYC,EAAatxF,EAAK,aAAa,YAAY,EAAIwoF,GAAY,KAAM,EAC7E,SAAU0I,CACX,EAAElxF,CAAI,CACR,CACP,CAAK,CACL,CACA,CACA,SAASuwF,GAAgCn3D,EAAOgL,EAAW,CACzD,MAAMn/D,EAAYm0D,EAAM,SAAS,UACjC,GAAI,CAACn0D,EAAU,YACb,MAAO,CAAC8lH,GAAuB3xD,CAAK,EAEtC,GAAIgL,IAAc,UAChB,MAAO,GAGT,MAAM+pC,EADgBlpG,EAAU,mBACK,OAC/BynH,EAAkBve,EAAe,gBACvC,OAAI/0C,EAAM,OAAO,SAASszD,CAAe,EAChC,GAELA,EAAgB,QACX,GAEFlC,GAAiB,CAACrc,EAAgBue,CAAe,CAAC,CAC3D,CAGA,SAAS6E,GAAkBloE,EAAQ8nC,EAAazwD,EAAOgqC,EAAM,CAC3DrhB,EAAO,GAAG,iBAAiB,IAAI8nC,EAAc9uB,GAAW,CACtD,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI8nC,CAAW,EACzC/rB,EAAa,IAAIrC,GAAWV,CAAM,EACxC,OAAA+C,EAAW,IAAI,CACb,MAAA1kC,EACA,KAAAgqC,EACA,QAAS,GACT,aAAc,EACpB,CAAK,EACDtF,EAAW,KAAK,OAAQ,WAAW,EAAE,GAAGqnB,EAAS,QAAS,WAAW,EACrErnB,EAAW,GAAG,UAAW,IAAM,CAC7B/b,EAAO,QAAQ8nC,CAAW,EAC1B9nC,EAAO,QAAQ,KAAK,OAC1B,CAAK,EACM+b,CACX,CAAG,CACH,CAGA,IAAIosD,GAAS,cAAct8C,EAAO,CAIhC,WAAW,YAAa,CACtB,MAAO,QACR,CAID,MAAO,CACL,MAAM/uE,EAAI,KAAK,OAAO,EACtBorH,GAAkB,KAAK,OAAQ,eAAgBprH,EAAE,eAAe,EAAGwjE,GAAM,YAAY,EACrF4nD,GAAkB,KAAK,OAAQ,eAAgBprH,EAAE,eAAe,EAAGwjE,GAAM,YAAY,CACtF,CACH,EAGI8nD,GAAO,cAAcv8C,EAAO,CAI9B,WAAW,UAAW,CACpB,MAAO,CAACg7C,GAAasB,EAAM,CAC5B,CAID,WAAW,YAAa,CACtB,MAAO,MACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6rCCjvDA,IAAIE,GAAc,cAAcvnC,EAAQ,CAOtC,YAAY9gC,EAAQ6iD,EAAc,CAChC,MAAM7iD,CAAM,EACZ,KAAK,aAAe6iD,CACrB,CAID,SAAU,CACR,MAAM9yC,EAAQ,KAAK,OAAO,MACpBjtE,EAAMitE,EAAM,SAClB,KAAK,MAAQjtE,EAAI,UAAU,aAAa,KAAK,YAAY,EACzD,KAAK,UAAYitE,EAAM,OAAO,0BAA0BjtE,EAAI,UAAW,KAAK,YAAY,CACzF,CASD,QAAQiB,EAAU,GAAI,CACpB,MAAMgsE,EAAQ,KAAK,OAAO,MAEpBn0D,EADWm0D,EAAM,SACI,UACrB/vE,EAAQ+D,EAAQ,MAChBg9F,EAAQh9F,EAAQ,MAChBukI,EAAmBxhE,GAAW,CAClC,GAAIlrD,EAAU,YACR5b,EACF8mE,EAAO,sBAAsB,KAAK,aAAc9mE,CAAK,EAErD8mE,EAAO,yBAAyB,KAAK,YAAY,MAE9C,CACL,MAAMm6B,EAASlxB,EAAM,OAAO,eAAen0D,EAAU,UAAW,EAAE,KAAK,YAAY,EACnF,UAAW2tC,KAAS03C,EACdjhG,EACF8mE,EAAO,aAAa,KAAK,aAAc9mE,EAAOupD,CAAK,EAEnDud,EAAO,gBAAgB,KAAK,aAAcvd,CAAK,CAGpD,CACP,EACQw3C,EACFhxB,EAAM,cAAcgxB,EAAQj6B,GAAW,CACrCwhE,EAAgBxhE,CAAM,CAC9B,CAAO,EAEDiJ,EAAM,OAAQjJ,GAAW,CACvBwhE,EAAgBxhE,CAAM,CAC9B,CAAO,CAEJ,CACH,EAGIyhE,GAAY,WACZC,GAAc,aACdC,GAAa,YACbC,GAAwB,sBAC5B,SAASC,GAAgBC,EAAmB7kI,EAAS,CACnD,MAAMkkE,EAAa,CACjB,MAAO,CACL,IAAK2gE,EACL,OAAQ,CAAE,CACX,EACD,KAAM,CAAE,EACR,WAAY,CAAE,CAClB,EACE,UAAWjgH,KAAU5kB,EACnBkkE,EAAW,MAAM,OAAO,KAAKt/C,EAAO,KAAK,EACzCs/C,EAAW,KAAKt/C,EAAO,KAAK,EAAIA,EAAO,KACnCA,EAAO,aACTs/C,EAAW,WAAWt/C,EAAO,KAAK,EAAIA,EAAO,YAGjD,OAAOs/C,CACT,CACA,SAAS4gE,GAAsBC,EAAW,CACxC,OAAQh7B,GAAgBi7B,GAAmBj7B,EAAY,SAASg7B,CAAS,CAAC,CAC5E,CACA,SAASE,GAAsBF,EAAW,CACxC,MAAO,CAACxS,EAAqB,CAAE,OAAAxvD,CAAQ,IAAKA,EAAO,uBAAuB,OAAQ,CAChF,MAAO,GAAGgiE,CAAS,IAAIxS,CAAmB,EAC9C,EAAK,CAAE,SAAU,CAAC,CAAE,CACpB,CACA,SAAS2S,GAA2B,CAAE,aAAAxqD,EAAc,OAAAkX,EAAQ,QAAAC,EAAS,kBAAAC,EAAmB,iBAAAG,EAAkB,oBAAAF,EAAqB,oBAAAC,EAAqB,sBAAAU,GAAyB,CAC3K,MAAMzd,EAASyF,EAAa,OACtByqD,EAAoB,IAAInyC,GAAkB/d,EAAQ,CACtD,OAAA2c,EACA,QAAAC,EACA,kBAAAC,EACA,iBAAAG,EACA,oBAAAF,EACA,oBAAAC,EACA,sBAAAU,CACJ,CAAG,EACD,OAAAhY,EAAa,kBAAoByqD,EACjCzqD,EAAa,UAAU,SAAS,IAAIyqD,CAAiB,EAC9CA,CACT,CACA,SAASH,GAAmB/oI,EAAO,CACjC,OAAOA,EAAM,QAAQ,MAAO,EAAE,CAChC,CAGA,IAAImpI,GAAoB,cAAcd,EAAY,CAIhD,YAAYroE,EAAQ,CAClB,MAAMA,EAAQwoE,EAAW,CAC1B,CACH,EAGA,SAASY,GAAiBC,EAAmB,CAC3C,OAAOA,EAAkB,IAAIC,EAAmB,EAAE,OAAQ3gH,GAAWA,IAAW,MAAM,CACxF,CACA,SAAS2gH,GAAoB3gH,EAAQ,CACnC,GAAI,OAAOA,GAAW,SACpB,OAAOA,EAET,GAAIA,IAAW,UACb,MAAO,CACL,MAAO,UACP,MAAO,MACb,EAEE,GAAI,OAAOA,GAAW,SAGtB,OAAO4gH,GAAmB5gH,CAAM,CAClC,CACA,SAAS4gH,GAAmBC,EAAgB,CAC1C,MAAMC,EAAYD,EAAe,QAAQ,OAAQ,EAAE,EAAE,MAAM,GAAG,EACxDE,EAAgBD,EAAU,CAAC,EAC3BE,EAAeF,EAAU,IAAIG,EAAuB,EAAE,KAAK,IAAI,EACrE,MAAO,CACL,MAAOF,EACP,MAAOC,EACP,KAAM,CACJ,KAAM,OACN,OAAQ,CACN,cAAeA,CAChB,EACD,SAAU,CACX,CACL,CACA,CACA,SAASC,GAAwBC,EAAU,CACzC,OAAAA,EAAWA,EAAS,OAChBA,EAAS,QAAQ,GAAG,EAAI,IAC1BA,EAAW,IAAIA,CAAQ,KAElBA,CACT,CAGA,IAAIC,GAAoB,cAAcj+C,EAAO,CAI3C,WAAW,YAAa,CACtB,MAAO,mBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAOwoE,GAAa,CAChC,QAAS,CACP,UACA,+BACA,kCACA,iBACA,iDACA,6BACA,gCACA,sCACA,6BACD,EACD,iBAAkB,EACxB,CAAK,CACF,CAID,MAAO,CACL,MAAMxoE,EAAS,KAAK,OACpBA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiBwoE,EAAW,CAAE,EACpExoE,EAAO,MAAM,OAAO,uBAAuBwoE,GAAa,CACtD,aAAc,GACd,YAAa,EACnB,CAAK,EACD,MAAMzkI,EAAUqlI,GAAiBppE,EAAO,OAAO,IAAI,oBAAoB,CAAC,EAAE,OAAQrpB,GAASA,EAAK,KAAK,EAC/FsxB,EAAa0gE,GAAgBH,GAAazkI,CAAO,EACnDi8D,EAAO,OAAO,IAAI,6BAA6B,GACjD,KAAK,2BAA0B,EAC/B,KAAK,+BAA8B,GAEnCA,EAAO,WAAW,mBAAmBiI,CAAU,EAEjDjI,EAAO,SAAS,IAAIwoE,GAAa,IAAIW,GAAkBnpE,CAAM,CAAC,CAC/D,CAKD,4BAA6B,CAC3B,MAAMA,EAAS,KAAK,OACpBA,EAAO,WAAW,IAAI,UAAU,EAAE,mBAAmB,CACnD,MAAOwoE,GACP,KAAM,CAACuB,EAAgB,CAAE,OAAAjjE,KAChBA,EAAO,uBAAuB,OAAQ,CAAE,MAAO,eAAiBijE,GAAkB,CAAE,SAAU,CAAG,EAEhH,CAAK,EACD/pE,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,MAAO,CACL,IAAKwoE,GACL,MAAQ16B,GAAgBA,EAAY,SAAS,aAAa,CAC3D,EACD,KAAM,CACJ,KAAM,OACN,OAAQ,CACN,cAAe,IAChB,CACF,CACP,CAAK,CACF,CAID,gCAAiC,CAChB,KAAK,OACb,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,OACN,WAAY,CACV,KAAQ,IACT,CACF,EACD,MAAO,CACL,IAAK06B,GACL,MAAQ16B,GAAgBA,EAAY,aAAa,MAAM,CACxD,CACP,CAAK,CACF,CACH,EAIIk8B,GAAe,cAAcn+C,EAAO,CAItC,WAAW,YAAa,CACtB,MAAO,cACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACXj8D,EAAU,KAAK,uBACfq/F,EAAUpjC,EAAO,SAAS,IAAIwoE,EAAW,EACzC9hB,EAAkB,EAAE,aAAa,EACvC1mD,EAAO,GAAG,iBAAiB,IAAIwoE,GAAcxvD,GAAW,CACtD,MAAMyF,EAAeF,GAAevF,CAAM,EAC1C,OAAAkG,GAAkBT,EAAc,IAAMwrD,GAAoBlmI,EAASq/F,CAAO,EAAG,CAC3E,KAAM,OACN,UAAWsjB,CACnB,CAAO,EACDjoC,EAAa,WAAW,IAAI,CAC1B,MAAOioC,EACP,KAAMwjB,GACN,QAAS,EACjB,CAAO,EACDzrD,EAAa,eAAe,CAC1B,WAAY,CACV,MAAO,yBACR,CACT,CAAO,EACDA,EAAa,KAAK,WAAW,EAAE,GAAG2kB,CAAO,EACzC,KAAK,SAAS3kB,EAAc,UAAY9vD,GAAQ,CAC9CqxC,EAAO,QAAQrxC,EAAI,OAAO,YAAa,CAAE,MAAOA,EAAI,OAAO,YAAY,CAAE,EACzEqxC,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACMye,CACb,CAAK,CACF,CASD,sBAAuB,CACrB,MAAMze,EAAS,KAAK,OACd,EAAIA,EAAO,EAEjB,OADgBopE,GAAiBppE,EAAO,OAAO,IAAIwoE,EAAW,EAAE,OAAO,EACxD,IAAK7/G,IACdA,EAAO,QAAU,YACnBA,EAAO,MAAQ,EAAE,SAAS,GAErBA,EACR,CACF,CACH,EACA,SAASshH,GAAoBlmI,EAASq/F,EAAS,CAC7C,MAAMwjB,EAAkB,IAAI9xC,GAC5B,UAAWnsD,KAAU5kB,EAAS,CAC5B,MAAMyxE,EAAM,CACV,KAAM,SACN,MAAO,IAAIiW,GAAM,CACf,YAAa+8C,GACb,aAAc7/G,EAAO,MACrB,MAAOA,EAAO,MACd,KAAM,gBACN,SAAU,EAClB,CAAO,CACP,EACI6sD,EAAI,MAAM,KAAK,MAAM,EAAE,GAAG4tB,EAAS,QAAUpjG,GACvCA,IAAU2oB,EAAO,MACZ,GAEL,CAAC3oB,GAAS,CAAC2oB,EAAO,MACb,GAEF3oB,EAAM,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,KAAM,EAAE,EAAE,YAAa,IAAK2oB,EAAO,MAAM,YAAW,CACxF,EACGA,EAAO,MAAQ,OAAOA,EAAO,MAAS,UAAYA,EAAO,KAAK,QAChE6sD,EAAI,MAAM,IAAI,aAAc,gBAAgB7sD,EAAO,KAAK,OAAO,aAAa,CAAC,EAAE,EAEjFi+F,EAAgB,IAAIpxC,CAAG,CACxB,CACD,OAAOoxC,CACT,CAGA,IAAIujB,GAAa,cAAct+C,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAACi+C,GAAmBE,EAAY,CACxC,CAID,WAAW,YAAa,CACtB,MAAO,YACR,CACH,EAGII,GAAkB,cAAc/B,EAAY,CAI9C,YAAYroE,EAAQ,CAClB,MAAMA,EAAQuoE,EAAS,CACxB,CACH,EAGA,SAAS8B,GAAkBhB,EAAmB,CAC5C,OAAOA,EAAkB,IAAK1yF,GAAS2zF,GAAqB3zF,CAAI,CAAC,EAAE,OAAQhuB,GAAWA,IAAW,MAAM,CACzG,CACA,IAAI4hH,GAAe,CACjB,IAAI,MAAO,CACT,MAAO,CACL,MAAO,OACP,MAAO,OACP,KAAM,CACJ,KAAM,OACN,QAAS,YACT,SAAU,CACX,CACP,CACG,EACD,IAAI,OAAQ,CACV,MAAO,CACL,MAAO,QACP,MAAO,QACP,KAAM,CACJ,KAAM,OACN,QAAS,aACT,SAAU,CACX,CACP,CACG,EACD,IAAI,KAAM,CACR,MAAO,CACL,MAAO,MACP,MAAO,MACP,KAAM,CACJ,KAAM,OACN,QAAS,WACT,SAAU,CACX,CACP,CACG,EACD,IAAI,MAAO,CACT,MAAO,CACL,MAAO,OACP,MAAO,OACP,KAAM,CACJ,KAAM,OACN,QAAS,YACT,SAAU,CACX,CACP,CACG,CACH,EACA,SAASD,GAAqB3hH,EAAQ,CAIpC,GAHI,OAAOA,GAAW,WACpBA,EAAS,OAAOA,CAAM,GAEpB,OAAOA,GAAW,UAAY6hH,GAAqB7hH,CAAM,EAC3D,OAAO8hH,GAAe9hH,CAAM,EAE9B,MAAM+hH,EAASC,GAAWhiH,CAAM,EAChC,GAAI+hH,EACF,OAAOD,GAAeC,CAAM,EAE9B,GAAI/hH,IAAW,UACb,MAAO,CACL,MAAO,OACP,MAAO,SACb,EAEE,GAAI,CAAAiiH,GAAsBjiH,CAAM,EAGhC,OAAOkiH,GAAoBliH,CAAM,CACnC,CACA,SAASkiH,GAAoB5iE,EAAY,CACvC,OAAI,OAAOA,GAAe,WACxBA,EAAa,CACX,MAAOA,EACP,MAAO,GAAG,WAAWA,CAAU,CAAC,IACtC,GAEEA,EAAW,KAAO,CAChB,KAAM,OACN,OAAQ,CACN,YAAaA,EAAW,KACzB,CACL,EACSwiE,GAAexiE,CAAU,CAClC,CACA,SAASwiE,GAAexiE,EAAY,CAClC,OAAIA,EAAW,MAAQ,OAAOA,EAAW,MAAS,UAAY,CAACA,EAAW,KAAK,WAC7EA,EAAW,KAAK,SAAW,GAEtBA,CACT,CACA,SAAS0iE,GAAW1iE,EAAY,CAC9B,OAAO,OAAOA,GAAe,SAAWsiE,GAAatiE,CAAU,EAAIsiE,GAAatiE,EAAW,KAAK,CAClG,CACA,SAASuiE,GAAqBviE,EAAY,CACxC,OAAOA,EAAW,OAASA,EAAW,OAASA,EAAW,IAC5D,CACA,SAAS2iE,GAAsB3iE,EAAY,CACzC,IAAI6iE,EACJ,GAAI,OAAO7iE,GAAe,SACxB,GAAKA,EAAW,MAGd6iE,EAAc,WAAW7iE,EAAW,KAAK,MAFzC,OAAM,IAAIiN,EAAc,+BAAgC,KAAMjN,CAAU,OAK1E6iE,EAAc,WAAW7iE,CAAU,EAErC,OAAO,MAAM6iE,CAAW,CAC1B,CAGA,IAAIC,GAAgB,CAClB,UACA,UACA,QACA,SACA,QACA,UACA,WACA,WACF,EACIC,IAAkB,cAAcn/C,EAAO,CAIzC,WAAW,YAAa,CACtB,MAAO,iBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAOuoE,GAAW,CAC9B,QAAS,CACP,OACA,QACA,UACA,MACA,MACD,EACD,iBAAkB,EACxB,CAAK,CACF,CAID,MAAO,CACL,MAAMvoE,EAAS,KAAK,OACpBA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiBuoE,EAAS,CAAE,EAClEvoE,EAAO,MAAM,OAAO,uBAAuBuoE,GAAW,CACpD,aAAc,GACd,YAAa,EACnB,CAAK,EACD,MAAM0C,EAAmBjrE,EAAO,OAAO,IAAI,2BAA2B,EAChEj8D,EAAUsmI,GAAkB,KAAK,OAAO,OAAO,IAAI,kBAAkB,CAAC,EAAE,OAAQ1zF,GAASA,EAAK,KAAK,EACnGsxB,EAAa0gE,GAAgBJ,GAAWxkI,CAAO,EACjDknI,GACF,KAAK,2BAA2BhjE,CAAU,EAC1C,KAAK,+BAA8B,GAEnCjI,EAAO,WAAW,mBAAmBiI,CAAU,EAEjDjI,EAAO,SAAS,IAAIuoE,GAAW,IAAI6B,GAAgBpqE,CAAM,CAAC,CAC3D,CAOD,2BAA2BiI,EAAY,CACrC,MAAMjI,EAAS,KAAK,OACdkrE,EAAUjjE,EAAW,MAAM,OAAO,OAAQjoE,GACvC,CAACmrI,GAAS,OAAOnrI,CAAK,CAAC,GAAK,CAACorI,GAAa,OAAOprI,CAAK,CAAC,CAC/D,EACD,GAAIkrI,EAAQ,OACV,MAAM,IAAIh2D,EAAc,yCAA0C,KAAM,CAAE,QAAAg2D,CAAS,GAErFlrE,EAAO,WAAW,IAAI,UAAU,EAAE,mBAAmB,CACnD,MAAOuoE,GACP,KAAM,CAACwB,EAAgB,CAAE,OAAAjjE,KAAa,CACpC,GAAKijE,EAGL,OAAOjjE,EAAO,uBAAuB,OAAQ,CAAE,MAAO,aAAeijE,GAAkB,CAAE,SAAU,CAAG,EACvG,CACP,CAAK,EACD/pE,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,MAAO,CACL,IAAKuoE,GACL,MAAQz6B,GAAgBA,EAAY,SAAS,WAAW,CACzD,EACD,KAAM,CACJ,KAAM,OACN,OAAQ,CACN,YAAa,IACd,CACF,CACP,CAAK,CACF,CAID,gCAAiC,CAChB,KAAK,OACb,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,OACN,WAAY,CAIV,KAAQ,gBACT,CACF,EACD,MAAO,CACL,IAAKy6B,GACL,MAAQz6B,GAAgB,CACtB,MAAM9tG,EAAQ8tG,EAAY,aAAa,MAAM,EACvCu9B,EAAarrI,EAAM,CAAC,IAAM,KAAOA,EAAM,CAAC,IAAM,IACpD,IAAIojC,EAAO,SAASpjC,EAAO,EAAE,EACzBqrI,IACFjoG,EAAO,EAAIA,GAEb,MAAMkoG,EAAUP,GAAc,OAAS,EACjCQ,EAAc,KAAK,IAAI,KAAK,IAAInoG,EAAM,CAAC,EAAGkoG,CAAO,EACvD,OAAOP,GAAcQ,CAAW,CACjC,CACF,CACP,CAAK,CACF,CACH,EAKIC,IAAa,cAAc3/C,EAAO,CAIpC,WAAW,YAAa,CACtB,MAAO,YACR,CAID,MAAO,CACL,MAAM7rB,EAAS,KAAK,OACd,EAAIA,EAAO,EACXj8D,EAAU,KAAK,uBACfq/F,EAAUpjC,EAAO,SAAS,IAAIuoE,EAAS,EACvC7hB,EAAkB,EAAE,WAAW,EACrC1mD,EAAO,GAAG,iBAAiB,IAAIuoE,GAAYvvD,GAAW,CACpD,MAAMyF,EAAeF,GAAevF,CAAM,EAC1C,OAAAkG,GAAkBT,EAAc,IAAMgtD,IAAqB1nI,EAASq/F,CAAO,EAAG,CAC5E,KAAM,OACN,UAAWsjB,CACnB,CAAO,EACDjoC,EAAa,WAAW,IAAI,CAC1B,MAAOioC,EACP,KAAMglB,GACN,QAAS,EACjB,CAAO,EACDjtD,EAAa,eAAe,CAC1B,WAAY,CACV,MAAO,CACL,uBACD,CACF,CACT,CAAO,EACDA,EAAa,KAAK,WAAW,EAAE,GAAG2kB,CAAO,EACzC,KAAK,SAAS3kB,EAAc,UAAY9vD,GAAQ,CAC9CqxC,EAAO,QAAQrxC,EAAI,OAAO,YAAa,CAAE,MAAOA,EAAI,OAAO,YAAY,CAAE,EACzEqxC,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACMye,CACb,CAAK,CACF,CASD,sBAAuB,CACrB,MAAMze,EAAS,KAAK,OACd,EAAIA,EAAO,EACXumD,EAAkB,CACtB,QAAS,EAAE,SAAS,EACpB,KAAM,EAAE,MAAM,EACd,MAAO,EAAE,OAAO,EAChB,IAAK,EAAE,KAAK,EACZ,KAAM,EAAE,MAAM,CACpB,EAEI,OADgB8jB,GAAkBrqE,EAAO,OAAO,IAAIuoE,EAAS,EAAE,OAAO,EACvD,IAAK5/G,GAAW,CAC7B,MAAMwwB,EAAQotE,EAAgB59F,EAAO,KAAK,EAC1C,OAAIwwB,GAASA,GAASxwB,EAAO,QAC3BA,EAAS,OAAO,OAAO,GAAIA,EAAQ,CAAE,MAAAwwB,CAAK,CAAE,GAEvCxwB,CACb,CAAK,CACF,CACH,EACA,SAAS8iH,IAAqB1nI,EAASq/F,EAAS,CAC9C,MAAMwjB,EAAkB,IAAI9xC,GAC5B,UAAWnsD,KAAU5kB,EAAS,CAC5B,MAAMyxE,EAAM,CACV,KAAM,SACN,MAAO,IAAIiW,GAAM,CACf,YAAa88C,GACb,aAAc5/G,EAAO,MACrB,MAAOA,EAAO,MACd,MAAO,qBACP,KAAM,gBACN,SAAU,EAClB,CAAO,CACP,EACQA,EAAO,MAAQ,OAAOA,EAAO,MAAS,WACpCA,EAAO,KAAK,QACd6sD,EAAI,MAAM,IAAI,aAAc,aAAa7sD,EAAO,KAAK,OAAO,WAAW,CAAC,EAAE,EAExEA,EAAO,KAAK,SACd6sD,EAAI,MAAM,IAAI,QAAS,GAAGA,EAAI,MAAM,KAAK,IAAI7sD,EAAO,KAAK,OAAO,EAAE,GAGtE6sD,EAAI,MAAM,KAAK,MAAM,EAAE,GAAG4tB,EAAS,QAAUpjG,GAAUA,IAAU2oB,EAAO,KAAK,EAC7Ei+F,EAAgB,IAAIpxC,CAAG,CACxB,CACD,OAAOoxC,CACT,CAGA,IAAI+kB,IAAW,cAAc9/C,EAAO,CAIlC,WAAW,UAAW,CACpB,MAAO,CAACm/C,IAAiBQ,GAAU,CACpC,CAID,WAAW,YAAa,CACtB,MAAO,UACR,CAOD,qBAAqBznI,EAAS,CAC5B,OAAOsmI,GAAkBtmI,CAAO,CACjC,CACH,EAGI6nI,IAAmB,cAAcvD,EAAY,CAI/C,YAAYroE,EAAQ,CAClB,MAAMA,EAAQyoE,EAAU,CACzB,CACH,EAGIoD,IAAmB,cAAchgD,EAAO,CAI1C,WAAW,YAAa,CACtB,MAAO,kBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAOyoE,GAAY,CAC/B,OAAQ,CACN,CACE,MAAO,iBACP,MAAO,OACR,EACD,CACE,MAAO,kBACP,MAAO,UACR,EACD,CACE,MAAO,kBACP,MAAO,MACR,EACD,CACE,MAAO,kBACP,MAAO,YACR,EACD,CACE,MAAO,mBACP,MAAO,QACP,UAAW,EACZ,EACD,CACE,MAAO,mBACP,MAAO,KACR,EACD,CACE,MAAO,oBACP,MAAO,QACR,EACD,CACE,MAAO,oBACP,MAAO,QACR,EACD,CACE,MAAO,oBACP,MAAO,aACR,EACD,CACE,MAAO,qBACP,MAAO,OACR,EACD,CACE,MAAO,qBACP,MAAO,YACR,EACD,CACE,MAAO,qBACP,MAAO,WACR,EACD,CACE,MAAO,qBACP,MAAO,YACR,EACD,CACE,MAAO,qBACP,MAAO,MACR,EACD,CACE,MAAO,qBACP,MAAO,QACR,CACF,EACD,QAAS,CACf,CAAK,EACDzoE,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,OACN,OAAQ,CACN,MAAS,SACV,CACF,EACD,MAAO,CACL,IAAKyoE,GACL,MAAOI,GAAsB,OAAO,CACrC,CACP,CAAK,EACD7oE,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,OACN,WAAY,CACV,MAAS,SACV,CACF,EACD,MAAO,CACL,IAAKyoE,GACL,MAAQ36B,GAAgBA,EAAY,aAAa,OAAO,CACzD,CACP,CAAK,EACD9tC,EAAO,WAAW,IAAI,UAAU,EAAE,mBAAmB,CACnD,MAAOyoE,GACP,KAAMO,GAAsB,OAAO,CACzC,CAAK,EACDhpE,EAAO,SAAS,IAAIyoE,GAAY,IAAImD,IAAiB5rE,CAAM,CAAC,EAC5DA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiByoE,EAAU,CAAE,EACnEzoE,EAAO,MAAM,OAAO,uBAAuByoE,GAAY,CACrD,aAAc,GACd,YAAa,EACnB,CAAK,CACF,CACH,EAGIqD,GAAU,cAAcjgD,EAAO,CAYjC,YAAY7rB,EAAQ,CAAE,YAAA8nC,EAAa,cAAAikC,EAAe,KAAA1qD,EAAM,cAAA2qD,GAAiB,CACvE,MAAMhsE,CAAM,EACZ,KAAK,YAAc8nC,EACnB,KAAK,cAAgBikC,EACrB,KAAK,KAAO1qD,EACZ,KAAK,cAAgB2qD,EACrB,KAAK,QAAUhsE,EAAO,OAAO,IAAI,GAAG,KAAK,aAAa,UAAU,EAChE,KAAK,kBAAoB,MAC1B,CAID,MAAO,CACL,MAAMA,EAAS,KAAK,OACdgZ,EAAShZ,EAAO,OAChBljD,EAAIk8D,EAAO,EACXoqB,EAAUpjC,EAAO,SAAS,IAAI,KAAK,WAAW,EAC9CisE,EAAkBjsE,EAAO,OAAO,IAAI,KAAK,aAAa,EACtDksE,EAAe19C,GAAsBy9C,EAAgB,MAAM,EAC3DE,EAAkB99C,GAAyBrV,EAAQkzD,CAAY,EAC/Dn2C,EAAsBk2C,EAAgB,eACtCG,EAAiBH,EAAgB,cAAgB,GACvDjsE,EAAO,GAAG,iBAAiB,IAAI,KAAK,cAAgBqsE,GAAY,CAC9D,MAAM5tD,EAAeF,GAAe8tD,CAAO,EAC3C,IAAIC,EAA0B,GAC9B,YAAK,kBAAoBrD,GAA2B,CAClD,aAAAxqD,EACA,OAAQ0tD,EAAgB,IAAKxjH,IAAY,CACvC,MAAOA,EAAO,MACd,MAAOA,EAAO,MACd,QAAS,CACP,UAAWA,EAAO,SACnB,CACX,EAAU,EACF,QAAS,KAAK,QACd,kBAAmB7L,EAAE,cAAc,EACnC,iBAAkBA,EAAE,cAAc,EAClC,oBAAqBi5E,IAAwB,EAAIj5E,EAAE,iBAAiB,EAAI,GACxE,oBAAqBi5E,IAAwB,OAAS,KAAK,QAAUA,EACrE,sBAAuBq2C,EAAiBH,EAAgB,aAAe,CAAE,EAAG,EACpF,CAAO,EACD,KAAK,kBAAkB,KAAK,eAAe,EAAE,GAAG7oC,EAAS,OAAO,EAChE3kB,EAAa,WAAW,IAAI,CAC1B,MAAO,KAAK,cACZ,KAAM,KAAK,KACX,QAAS,EACjB,CAAO,EACDA,EAAa,eAAe,CAC1B,WAAY,CACV,MAAO,sBACR,CACT,CAAO,EACDA,EAAa,KAAK,WAAW,EAAE,GAAG2kB,CAAO,EACzC,KAAK,kBAAkB,GAAG,UAAW,CAACz0E,EAAKjW,IAAS,CAC9C+lE,EAAa,QACfze,EAAO,QAAQ,KAAK,YAAa,CAC/B,MAAOtnD,EAAK,MACZ,MAAO,KAAK,cACxB,CAAW,EAECA,EAAK,SAAW,eAClBsnD,EAAO,QAAQ,KAAK,QAElBtnD,EAAK,SAAW,0BAClB+lE,EAAa,OAAS,GAEhC,CAAO,EACD,KAAK,kBAAkB,GAAG,mBAAoB,IAAM,CAClD,KAAK,eAAiBze,EAAO,MAAM,YAAW,CACtD,CAAO,EACD,KAAK,kBAAkB,GAAG,qBAAsB,IAAM,CAChD,KAAK,eAAe,WAAW,SACjCye,EAAa,OAAS,GACtBze,EAAO,QAAQ,OAAQ,KAAK,cAAc,GAE5CA,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACDye,EAAa,GAAG,gBAAiB,CAAC9vD,EAAKhuB,EAAM06E,IAAc,CACpDixD,IACHA,EAA0B,GAC1B7tD,EAAa,kBAAkB,YAE7BpD,IACE0a,IAAwB,GAC1B,KAAK,kBAAkB,qBAAqB/1B,EAAO,MAAO,KAAK,aAAa,EAE9E,KAAK,kBAAkB,uBACvB,KAAK,kBAAkB,yBAEjC,CAAO,EACD8e,GAAyBL,EAAc,IAAMA,EAAa,kBAAkB,uBAAuB,iBAAiB,MAAM,KAAM9nC,GAASA,EAAK,IAAI,CAAC,EAC5I8nC,CACb,CAAK,CACF,CACH,EAII8tD,IAAc,cAAcT,EAAQ,CAItC,YAAY9rE,EAAQ,CAClB,MAAM,EAAIA,EAAO,OAAO,EACxB,MAAMA,EAAQ,CACZ,YAAayoE,GACb,cAAeA,GACf,KAAM+D,GACN,cAAe,EAAE,YAAY,CACnC,CAAK,CACF,CAID,WAAW,YAAa,CACtB,MAAO,aACR,CACH,EAGIC,IAAY,cAAc5gD,EAAO,CAInC,WAAW,UAAW,CACpB,MAAO,CAACggD,IAAkBU,GAAW,CACtC,CAID,WAAW,YAAa,CACtB,MAAO,WACR,CACH,EAGIG,IAA6B,cAAcrE,EAAY,CAIzD,YAAYroE,EAAQ,CAClB,MAAMA,EAAQ0oE,EAAqB,CACpC,CACH,EAGIiE,IAA6B,cAAc9gD,EAAO,CAIpD,WAAW,YAAa,CACtB,MAAO,4BACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAO0oE,GAAuB,CAC1C,OAAQ,CACN,CACE,MAAO,iBACP,MAAO,OACR,EACD,CACE,MAAO,kBACP,MAAO,UACR,EACD,CACE,MAAO,kBACP,MAAO,MACR,EACD,CACE,MAAO,kBACP,MAAO,YACR,EACD,CACE,MAAO,mBACP,MAAO,QACP,UAAW,EACZ,EACD,CACE,MAAO,mBACP,MAAO,KACR,EACD,CACE,MAAO,oBACP,MAAO,QACR,EACD,CACE,MAAO,oBACP,MAAO,QACR,EACD,CACE,MAAO,oBACP,MAAO,aACR,EACD,CACE,MAAO,qBACP,MAAO,OACR,EACD,CACE,MAAO,qBACP,MAAO,YACR,EACD,CACE,MAAO,qBACP,MAAO,WACR,EACD,CACE,MAAO,qBACP,MAAO,YACR,EACD,CACE,MAAO,qBACP,MAAO,MACR,EACD,CACE,MAAO,qBACP,MAAO,QACR,CACF,EACD,QAAS,CACf,CAAK,EACD1oE,EAAO,KAAK,uBAAuB4sE,EAAkB,EACrD5sE,EAAO,WAAW,IAAI,QAAQ,EAAE,mBAAmB,CACjD,KAAM,CACJ,KAAM,OACN,OAAQ,CACN,mBAAoB,SACrB,CACF,EACD,MAAO,CACL,IAAK0oE,GACL,MAAOG,GAAsB,kBAAkB,CAChD,CACP,CAAK,EACD7oE,EAAO,WAAW,IAAI,UAAU,EAAE,mBAAmB,CACnD,MAAO0oE,GACP,KAAMM,GAAsB,kBAAkB,CACpD,CAAK,EACDhpE,EAAO,SAAS,IAAI0oE,GAAuB,IAAIgE,IAA2B1sE,CAAM,CAAC,EACjFA,EAAO,MAAM,OAAO,OAAO,QAAS,CAAE,gBAAiB0oE,EAAqB,CAAE,EAC9E1oE,EAAO,MAAM,OAAO,uBAAuB0oE,GAAuB,CAChE,aAAc,GACd,YAAa,EACnB,CAAK,CACF,CACH,EAIImE,IAAwB,cAAcf,EAAQ,CAIhD,YAAY9rE,EAAQ,CAClB,MAAM,EAAIA,EAAO,OAAO,EACxB,MAAMA,EAAQ,CACZ,YAAa0oE,GACb,cAAeA,GACf,KAAMoE,GACN,cAAe,EAAE,uBAAuB,CAC9C,CAAK,CACF,CAID,WAAW,YAAa,CACtB,MAAO,uBACR,CACH,EAGIC,IAAsB,cAAclhD,EAAO,CAI7C,WAAW,UAAW,CACpB,MAAO,CAAC8gD,IAA4BE,GAAqB,CAC1D,CAID,WAAW,YAAa,CACtB,MAAO,qBACR,CACH,EAGIG,IAAO,cAAcnhD,EAAO,CAI9B,WAAW,UAAW,CACpB,MAAO,CAACs+C,GAAYwB,IAAUc,IAAWM,GAAmB,CAC7D,CAID,WAAW,YAAa,CACtB,MAAO,MACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gkEC1oCA,SAASE,GAAiCC,EAAUnpI,EAAS,CAC3D,MAAMmlH,EAAY,CAACv6F,EAAKjW,EAAMk2F,IAAkB,CAC1C,IAACA,EAAc,WAAW,QAAQl2F,EAAK,KAAMiW,EAAI,IAAI,EACvD,OAEF,MAAM9B,EAAMnU,EAAK,kBACX43F,EAAa1B,EAAc,OAC3Bu+B,EAASv+B,EAAc,OAAO,cAAcl2F,EAAK,IAAI,EACrD00H,EAAsB,CAAC,GAAGD,EAAO,YAAY,CAAC,EAAE,KAAM51F,GAAUA,EAAM,kBAAkB,eAAe,CAAC,EAC9G+4D,EAAW,OAAO88B,CAAmB,EACrC,MAAMC,EAAmBH,EAAS,oBAAoB58B,EAAYzjF,EAAK9oB,CAAO,EAC9EusG,EAAW,OAAOA,EAAW,iBAAiB68B,EAAQ,CAAC,EAAGE,CAAgB,GAE5E,OAAQzhC,GAAe,CACVA,EAAA,GAAG,sBAAuBsd,CAAS,EAElD,CAGA,SAASokB,IAAcx/B,EAAahnC,EAAQzvB,EAAO,CAC1C,OAAAyvB,EAAA,kBAAkB,QAAS,GAAMgnC,CAAW,EAC5CvB,GAASuB,EAAahnC,EAAQ,CAAE,MAAAzvB,CAAO,EAChD,CACA,SAASk2F,GAAyBzmE,EAAQomE,EAAUrgH,EAAK9oB,EAAS,CAChE,OAAO+iE,EAAO,uBAAuB,SAAU,CAAE,MAAO,SAAW,CACjEomE,EAAS,oBAAoBpmE,EAAQj6C,EAAK9oB,CAAO,EACjD+iE,EAAO,WAAW,EACnB,CACH,CACA,SAAS0mE,GAA4B5xH,EAAW,CACxC,MAAAyxF,EAAkBzxF,EAAU,qBAClC,OAAIyxF,GAAmBA,EAAgB,GAAG,UAAW,OAAO,EACnDA,EAEF,IACT,CACA,SAASogC,GAAY19D,EAAOljD,EAAKwjF,EAAYq9B,EAAqB,CAC1D39D,EAAA,OAAQjJ,GAAW,CACvB,MAAM6mE,EAAe7mE,EAAO,cAAc,QAAS,CAAE,IAAAj6C,EAAK,EACpDkjD,EAAA,aAAa49D,EAAct9B,EAAY,KAAM,CACjD,aAAc,KACd,oBAAqBq9B,EAAsB,OAAS,OACrD,EACF,CACH,CAGA,IAAIE,IAAoB,cAAc9sC,EAAQ,CAI5C,SAAU,CACF,MAAA/wB,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3B89D,EAAgBL,GAA4B5xH,CAAS,EAC3D,KAAK,MAAQiyH,EAAgBA,EAAc,aAAa,KAAK,EAAI,OACjE,KAAK,UAAYC,IAAgBlyH,CAAS,GAAKmyH,IAAkBnyH,EAAWm0D,CAAK,CACnF,CAUA,QAAQljD,EAAK,CACL,MAAAkjD,EAAQ,KAAK,OAAO,MACpBn0D,EAAYm0D,EAAM,SAAS,UAC3B89D,EAAgBL,GAA4B5xH,CAAS,EACvDiyH,EACI99D,EAAA,OAAQjJ,GAAW,CAChBA,EAAA,aAAa,MAAOj6C,EAAKghH,CAAa,EAC9C,EAEWJ,GAAA19D,EAAOljD,EAAKjR,EAAW,EAAI,CAE3C,CACF,EACA,SAASmyH,IAAkBnyH,EAAWm0D,EAAO,CAEvC,IAAA3hE,EADmBg/F,GAA0BxxF,EAAWm0D,CAAK,EACrC,MAAM,OAClC,OAAI3hE,EAAO,SAAW,CAAC2hE,EAAM,OAAO,QAAQ3hE,CAAM,IAChDA,EAASA,EAAO,QAEX2hE,EAAM,OAAO,WAAW3hE,EAAQ,OAAO,CAChD,CACA,SAAS0/H,IAAgBlyH,EAAW,CAC5B,MAAAwX,EAAUxX,EAAU,qBAC1B,MAAO,CAAC,CAACwX,GAAWA,EAAQ,OAAS,OACvC,CAIA,IAAI46G,IAA8B,YAC9BC,IAAgB,KAAM,CAOxB,YAAYj1D,EAAQvnC,EAAQ,CAC1B,MAAMy8F,EAAYz8F,EAAO,UACnB08F,EAAiB18F,EAAO,gBAAkB,GAC1C28F,EAAmB,IAAI,IAAI38F,EAAO,eAAe,EACjD48F,EAAsBH,EAAU,OAAOC,CAAc,EAAE,OAAQG,GAAa,CAChF,MAAM3tI,EAAO2tI,EAAS,KACtB,OAAK3tI,EAIE,CAACytI,EAAiB,IAAIztI,CAAI,GAHpBg7E,GAAA,+BAAgC,CAAE,SAAA2yD,CAAA,CAAU,EAChD,GAEwB,CAClC,EACD,KAAK,OAASt1D,EACd,KAAK,oBAAsBq1D,CAC7B,CAMA,SAASxhH,EAAK,CACZ,MAAO,CAAC,CAAC,KAAK,UAAUA,CAAG,CAC7B,CAUA,oBAAoBi6C,EAAQj6C,EAAK9oB,EAAS,CACxC,OAAO,KAAK,UAAU8oB,CAAG,EAAE,eAAei6C,EAAQ/iE,CAAO,CAC3D,CAOA,UAAU8oB,EAAK,CACb,GAAI,CAACA,EACI,WAAI0hH,GAAM,KAAK,MAAM,EAE9B1hH,EAAMA,EAAI,OACC,UAAAo7C,KAAc,KAAK,oBAAqB,CACjD,MAAMumE,EAAkBvmE,EAAW,KAC7B96D,EAAUo8B,GAAQ0+B,EAAW,GAAG,EACtC,UAAWwmE,KAActhI,EAAS,CAChC,MAAMrD,EAAQ,KAAK,eAAe+iB,EAAK4hH,CAAU,EACjD,GAAI3kI,EACF,OAAO,IAAIykI,GAAM,KAAK,OAAQ1hH,EAAK/iB,EAAO0kI,CAAe,CAE7D,CACF,CACO,WACT,CAOA,eAAe3hH,EAAK1f,EAAS,CACvB,IAAArD,EAAQ+iB,EAAI,MAAM1f,CAAO,EAC7B,GAAIrD,EACK,OAAAA,EAET,IAAI4kI,EAAS7hH,EAAI,QAAQ,eAAgB,EAAE,EAO3C,OANQ/iB,EAAA4kI,EAAO,MAAMvhI,CAAO,EACxBrD,IAGK4kI,IAAO,QAAQ,SAAU,EAAE,EAC5B5kI,EAAA4kI,EAAO,MAAMvhI,CAAO,EACxBrD,GACKA,EAEF,IACT,CACF,EACIykI,GAAQ,KAAM,CAChB,YAAYv1D,EAAQnsD,EAAK/iB,EAAO0kI,EAAiB,CAC1C,SAAM,KAAK,aAAa3hH,CAAG,EAChC,KAAK,QAAUmsD,EACf,KAAK,OAASlvE,EACd,KAAK,iBAAmB0kI,CAC1B,CAMA,eAAe1nE,EAAQ/iE,EAAS,CAC9B,MAAM8D,EAAa,GACf,IAAAimG,EACJ,GAAI/pG,EAAQ,sBAAwBA,EAAQ,oBAAsB,KAAK,KAAO,KAAK,iBAAkB,CAC/F,KAAK,MACI8D,EAAA,iBAAiB,EAAI,KAAK,KAEnC9D,EAAQ,uBACV8D,EAAW,MAAQ,qBAEf,MAAA8mI,EAAY,KAAK,gBAAgB5qI,CAAO,EAC9C+pG,EAAchnC,EAAO,iBAAiB,MAAOj/D,EAAY,CAAC6hF,EAAYwkB,IAAiB,CACxEA,EAAA,aAAaxkB,EAAYilD,CAAS,EAChD,OAEG,KAAK,MACP9mI,EAAW,IAAM,KAAK,KAExBimG,EAAchnC,EAAO,mBAAmB/iE,EAAQ,YAAa8D,CAAU,EAElE,OAAAi/D,EAAA,kBAAkB,gBAAiB,GAAMgnC,CAAW,EACpDA,CACT,CAIA,gBAAgB/pG,EAAS,CACvB,OAAI,KAAK,iBACA,KAAK,iBAAiB,KAAK,MAAM,EAEpC,KAAK,KAAOA,EAAQ,qBACf,KAAK,sBAEP,EAEX,CAIA,qBAAsB,CACd,MAAAs9E,EAAO,IAAI7H,GACX,EAAI,KAAK,QAAQ,EACvB,OAAA6H,EAAK,QAAUutD,IACfvtD,EAAK,QAAU2sD,IACK,IAAI14D,GAAS,CAC/B,IAAK,MACL,WAAY,CACV,MAAO,uCACT,EACA,SAAU,CACR,CACE,IAAK,MACL,WAAY,CACV,MAAO,6BACT,EACA,SAAU,CAAC+L,CAAI,CACjB,EACA,CACE,IAAK,IACL,WAAY,CACV,MAAO,6BACP,OAAQ,SACR,IAAK,sBACL,KAAM,KAAK,IACX,wBAAyB,EAAE,uBAAuB,CACpD,EACA,SAAU,CACR,CACE,IAAK,OACL,WAAY,CACV,MAAO,kCACT,EACA,SAAU,CAAC,KAAK,GAAG,CACrB,CACF,CACF,CACF,EACD,EAAE,OAAO,EACS,SACrB,CAMA,aAAax0D,EAAK,CAChB,OAAKA,EAGDA,EAAI,MAAM,SAAS,EACdA,EAEF,WAAaA,EALX,IAMX,CACF,EAIIgiH,GAAoB,cAAchjD,EAAO,CAI3C,WAAW,YAAa,CACf,yBACT,CAIA,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACLA,EAAA,OAAO,OAAO,aAAc,CACjC,YAAa,SACb,UAAW,CACT,CACE,KAAM,cACN,IAAK,CACH,kCACA,gBACF,EACA,KAAOl2D,GAEE,2HADIA,EAAM,CAAC,CACkH,qKAExI,EACA,CACE,KAAM,UACN,IAAK,CACH,qCACA,oCACA,mCACF,EACA,KAAOA,GAEE,uIADIA,EAAM,CAAC,CAC8H,4JAEpJ,EACA,CACE,KAAM,UACN,IAAK,CACH,wDACA,mDACA,mDACA,oCACF,EACA,KAAOA,GAAU,CACT,MAAAgC,EAAKhC,EAAM,CAAC,EACZsd,EAAOtd,EAAM,CAAC,EACpB,MAAO,0IAA0IgC,CAAE,GAAGsb,EAAO,UAAUA,CAAI,GAAK,EAAE,6JACpL,CACF,EACA,CACE,KAAM,QACN,IAAK,CACH,qBACA,0CACA,0CACA,sCACA,4CACA,sCACA,mCACF,EACA,KAAOtd,GAEE,2IADIA,EAAM,CAAC,CACkI,oKAExJ,EACA,CACE,KAAM,YACN,IAAK,2BACP,EACA,CACE,KAAM,UACN,IAAK,eACP,EACA,CACE,KAAM,aACN,IAAK,CACH,qBACA,iBACA,qBACA,qBACF,CACF,EACA,CACE,KAAM,SACN,IAAK,cACP,EACA,CACE,KAAM,WACN,IAAK,gBACP,CACF,EACD,EACI,cAAW,IAAImkI,IAAcjuE,EAAO,OAAQA,EAAO,OAAO,IAAI,YAAY,CAAC,CAClF,CAIA,MAAO,CACL,MAAMA,EAAS,KAAK,OACd2D,EAAS3D,EAAO,MAAM,OACtBljD,EAAIkjD,EAAO,EACX4T,EAAa5T,EAAO,WACpB8uE,EAAqB9uE,EAAO,OAAO,IAAI,2BAA2B,EAClE+vD,EAAc/vD,EAAO,OAAO,IAAI,wBAAwB,EACxDktE,EAAW,KAAK,SACtBltE,EAAO,SAAS,IAAI,aAAc,IAAI4tE,IAAkB5tE,CAAM,CAAC,EAC/D2D,EAAO,SAAS,QAAS,CACvB,eAAgB,eAChB,gBAAiB,CAAC,KAAK,EACxB,EACUiQ,EAAA,IAAI,cAAc,EAAE,mBAAmB,CAChD,MAAO,QACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,KAAa,CAC5B,MAAAj6C,EAAMu4E,EAAa,aAAa,KAAK,EACpC,OAAAmoC,GAAyBzmE,EAAQomE,EAAUrgH,EAAK,CACrD,YAAAkjG,EACA,mBAAoB,CAAC,CAACljG,GAAOiiH,CAAA,CAC9B,CACH,EACD,EACDl7D,EAAW,IAAI,cAAc,EAAE,IAAIq5D,GAAiCC,EAAU,CAC5E,YAAAnd,EACA,mBAAA+e,CACD,EAAC,EACSl7D,EAAA,IAAI,iBAAiB,EAAE,mBAAmB,CACnD,MAAO,QACP,KAAM,CAACwxB,EAAc,CAAE,OAAAt+B,KAAa,CAC5B,MAAAj6C,EAAMu4E,EAAa,aAAa,KAAK,EACrC+nC,EAASI,GAAyBzmE,EAAQomE,EAAUrgH,EAAK,CAC7D,YAAAkjG,EACA,qBAAsB,GACvB,EACD,OAAOud,IAAcH,EAAQrmE,EAAQhqD,EAAE,cAAc,CAAC,CACxD,EACD,EACD82D,EAAW,IAAI,iBAAiB,EAAE,IAAIq5D,GAAiCC,EAAU,CAC/E,YAAAnd,EACA,qBAAsB,EACvB,EAAC,EACSn8C,EAAA,IAAI,QAAQ,EAAE,iBAAiB,CACxC,KAAOxgD,GAAY,CAAC,SAAU28F,CAAW,EAAE,SAAS38F,EAAQ,IAAI,GAAKA,EAAQ,aAAa,KAAK,EAAI,CAAE,KAAM,IAAS,KACpH,MAAO,CAAC27G,EAAW,CAAE,OAAAjoE,KAAa,CAC1B,MAAAj6C,EAAMkiH,EAAU,aAAa,KAAK,EACpC,OAAA7B,EAAS,SAASrgH,CAAG,EAChBi6C,EAAO,cAAc,QAAS,CAAE,IAAAj6C,CAAK,GAEvC,IACT,CACD,GAAE,iBAAiB,CAClB,KAAM,CACJ,KAAM,MACN,WAAY,CACV,kBAAmB,EACrB,CACF,EACA,MAAO,CAACkiH,EAAW,CAAE,OAAAjoE,KAAa,CAC1B,MAAAj6C,EAAMkiH,EAAU,aAAa,iBAAiB,EAChD,OAAA7B,EAAS,SAASrgH,CAAG,EAChBi6C,EAAO,cAAc,QAAS,CAAE,IAAAj6C,CAAK,GAEvC,IACT,EACD,EAAE,IAAK++E,GAAe,CACrB,MAAMsd,EAAY,CAACv6F,EAAKjW,EAAMk2F,IAAkB,CAC9C,GAAI,CAACA,EAAc,WAAW,QAAQl2F,EAAK,SAAU,CAAE,KAAM,GAAM,QAAS,OAAS,GACnF,OAEI,MAAE,WAAAizF,EAAY,YAAAqjC,CAAY,EAAIpgC,EAAc,gBAAgBl2F,EAAK,SAAUA,EAAK,WAAW,EACjGA,EAAK,WAAaizF,EAClBjzF,EAAK,YAAcs2H,EACEpqI,GAAM+mG,EAAW,SAAU,IAEhCiD,EAAA,WAAW,OAAOl2F,EAAK,SAAU,CAAE,KAAM,GAAM,QAAS,QAAS,CACjF,EAESkzF,EAAA,GAAG,iBAAkBsd,CAAS,EAC1C,CACH,CACF,EAGI+lB,IAAa,2DACbC,IAAiB,cAAcrjD,EAAO,CAIxC,WAAW,UAAW,CACb,OAACoyB,GAAWvW,GAAQrE,EAAI,CACjC,CAIA,WAAW,YAAa,CACf,sBACT,CAIA,YAAYrjC,EAAQ,CAClB,MAAMA,CAAM,EACZ,KAAK,WAAa,KAClB,KAAK,kBAAoB,IAC3B,CAIA,MAAO,CACL,MAAMA,EAAS,KAAK,OACd2nC,EAAgB3nC,EAAO,MAAM,SAC7B08C,EAAoB18C,EAAO,QAAQ,IAAI,mBAAmB,EAC3D,cAAS08C,EAAmB,sBAAuB,IAAM,CACtD,MAAAyyB,EAAaxnC,EAAc,UAAU,cAAc,EACnDynC,EAAmBC,GAAa,aAAaF,EAAW,KAAK,EACnEC,EAAiB,WAAa,aAC9B,MAAME,EAAoBD,GAAa,aAAaF,EAAW,GAAG,EAClEG,EAAkB,WAAa,SACjB3nC,EAAA,KAAK,cAAe,IAAM,CACjC,iCAA4BynC,EAAkBE,CAAiB,EACpEF,EAAiB,OAAO,EACxBE,EAAkB,OAAO,GACxB,CAAE,SAAU,OAAQ,EACxB,EACmBtvE,EAAO,SAAS,IAAI,MAAM,EAClC,GAAG,UAAW,IAAM,CAC1B,KAAK,aACQigB,GAAA,OAAO,aAAa,KAAK,UAAU,EAClD,KAAK,kBAAkB,SACvB,KAAK,WAAa,KAClB,KAAK,kBAAoB,KAC3B,EACC,CAAE,SAAU,OAAQ,CACzB,CAQA,4BAA4BsvD,EAAcC,EAAe,CACvD,MAAMxvE,EAAS,KAAK,OACdyvE,EAAgBzvE,EAAO,QAAQ,IAAI6uE,EAAiB,EAAE,SACtDa,EAAW,IAAIzyB,GAAUsyB,EAAcC,CAAa,EACpDpoC,EAASsoC,EAAS,UAAU,CAAE,iBAAkB,GAAM,EAC5D,IAAI7iH,EAAM,GACV,UAAWhqB,KAAQukG,EACbvkG,EAAK,KAAK,GAAG,YAAY,IAC3BgqB,GAAOhqB,EAAK,KAAK,MAIrB,GADAgqB,EAAMA,EAAI,OACN,CAACA,EAAI,MAAMoiH,GAAU,EAAG,CAC1BS,EAAS,OAAO,EAChB,MACF,CACA,GAAI,CAACD,EAAc,SAAS5iH,CAAG,EAAG,CAChC6iH,EAAS,OAAO,EAChB,MACF,CAEI,IADsB1vE,EAAO,SAAS,IAAI,YAAY,EACnC,UAAW,CAChC0vE,EAAS,OAAO,EAChB,MACF,CACK,uBAAoBL,GAAa,aAAaE,CAAY,EAC/D,KAAK,WAAatvD,GAAe,OAAO,WAAW,IAAM,CAChDjgB,EAAA,MAAM,OAAQ8G,GAAW,CAC9B,KAAK,WAAa,KAClBA,EAAO,OAAO4oE,CAAQ,EACtBA,EAAS,OAAO,EAChB,IAAIC,EAAoB,KACpB,KAAK,kBAAkB,KAAK,WAAa,eAC3CA,EAAoB,KAAK,mBAE3BlC,GAAYztE,EAAO,MAAOnzC,EAAK8iH,EAAmB,EAAK,EACvD,KAAK,kBAAkB,SACvB,KAAK,kBAAoB,KAC1B,EACD3vE,EAAO,QAAQ,IAAI0nC,EAAM,EAAE,uBAAuB,GACjD,GAAG,CACR,CACF,EAKIkoC,IAAgB,cAAcz0G,EAAK,CAKrC,YAAY00G,EAAY72D,EAAQ,CAC9B,MAAMA,CAAM,EACZ,MAAMl8D,EAAIk8D,EAAO,EACZ,kBAAe,IAAIkD,GACnB,gBAAa,IAAID,GACjB,SAAI,qBAAsB,EAAE,EAC5B,kBAAe,KAAK,kBACpB,oBAAiB,KAAK,cAAcn/D,EAAE,MAAM,EAAGwjE,GAAM,MAAO,gBAAgB,EACjF,KAAK,eAAe,KAAO,SACtB,oBAAe,KAAK,WAAW,EAAE,GAAG,KAAM,qBAAuBtgF,GAAU,CAAC,CAACA,CAAK,EAClF,sBAAmB,KAAK,cAAc8c,EAAE,QAAQ,EAAGwjE,GAAM,OAAQ,mBAAoB,QAAQ,EAC7F,iBAAc,IAAIzL,GAClB,kBAAe,IAAI2F,GAAY,CAClC,WAAY,KAAK,YACjB,aAAc,KAAK,aACnB,iBAAkB,KAAK,WACvB,QAAS,CAEP,cAAe,cAEf,UAAW,KACb,EACD,EACD,KAAK,YAAcq1D,EACnB,KAAK,YAAY,CACf,IAAK,OACL,WAAY,CACV,MAAO,CACL,KACA,gBACA,oBACF,EACA,SAAU,IACZ,EACA,SAAU,CACR,KAAK,aACL,KAAK,eACL,KAAK,gBACP,EACD,CACH,CAIA,QAAS,CACP,MAAM,OAAO,EACC3iD,GAAA,CACZ,KAAM,KACP,EACkB,CACjB,KAAK,aACL,KAAK,eACL,KAAK,kBAEI,QAASn4E,GAAM,CACnB,iBAAY,IAAIA,CAAC,EACjB,kBAAa,IAAIA,EAAE,OAAO,EAChC,EACI,gBAAW,SAAS,KAAK,OAAO,EACrC,MAAM8hF,EAAmBn+E,GAASA,EAAK,gBAAgB,EAClD,gBAAW,IAAI,aAAcm+E,CAAe,EAC5C,gBAAW,IAAI,YAAaA,CAAe,EAC3C,gBAAW,IAAI,UAAWA,CAAe,EACzC,gBAAW,IAAI,YAAaA,CAAe,CAClD,CAIA,SAAU,CACR,MAAM,QAAQ,EACd,KAAK,aAAa,UAClB,KAAK,WAAW,SAClB,CAIA,OAAQ,CACN,KAAK,aAAa,YACpB,CAOA,IAAI,KAAM,CACR,OAAO,KAAK,aAAa,UAAU,QAAQ,MAAM,MACnD,CACA,IAAI,IAAIhqE,EAAK,CACX,KAAK,aAAa,UAAU,QAAQ,MAAQA,EAAI,MAClD,CAIA,SAAU,CACR,KAAK,gBAAgB,EACV,UAAAijH,KAAa,KAAK,YAAa,CAClC,MAAAn/C,EAAYm/C,EAAU,IAAI,EAChC,GAAIn/C,EACF,YAAK,aAAa,UAAYA,EACvB,EAEX,CACO,QACT,CAOA,iBAAkB,CAChB,KAAK,aAAa,UAAY,KACzB,kBAAa,SAAW,KAAK,wBACpC,CAMA,iBAAkB,CACV,MAAA7zE,EAAI,KAAK,OAAO,EAChBm4E,EAAe,IAAI1E,GAAiB,KAAK,OAAQW,EAAsB,EACvE6+C,EAAa96C,EAAa,UAC3B,qCAA2Bn4E,EAAE,mCAAmC,EAChE,0BAAuBA,EAAE,sDAAsD,EACvEm4E,EAAA,MAAQn4E,EAAE,WAAW,EAClCm4E,EAAa,SAAW,KAAK,yBAClB86C,EAAA,GAAG,QAAS,IAAM,CAC3B96C,EAAa,SAAW86C,EAAW,QAAQ,MAAQ,KAAK,qBAAuB,KAAK,yBACpF,KAAK,mBAAqBA,EAAW,QAAQ,MAAM,KAAK,EACzD,EACM96C,CACT,CAUA,cAAc59C,EAAOgqC,EAAMl1E,EAAW2pB,EAAW,CAC/C,MAAMuV,EAAS,IAAIquC,GAAW,KAAK,MAAM,EACzC,OAAAruC,EAAO,IAAI,CACT,MAAAgM,EACA,KAAAgqC,EACA,QAAS,GACV,EACDh2C,EAAO,eAAe,CACpB,WAAY,CACV,MAAOl/B,CACT,EACD,EACG2pB,GACFuV,EAAO,SAAS,SAAS,EAAE,GAAG,KAAMvV,CAAS,EAExCuV,CACT,CACF,EAII2kG,IAAe,cAAcnkD,EAAO,CAItC,WAAW,UAAW,CACpB,MAAO,CAACgjD,EAAiB,CAC3B,CAIA,WAAW,YAAa,CACf,oBACT,CAIA,MAAO,CACL,MAAM7uE,EAAS,KAAK,OACdojC,EAAUpjC,EAAO,SAAS,IAAI,YAAY,EAChDA,EAAO,GAAG,iBAAiB,IAAI,aAAegZ,GAAW,CACjD,MAAAp6B,EAAW2/B,GAAevF,CAAM,EACjC,2BAAep6B,EAAUwkD,CAAO,EAC9BxkD,CAAA,CACR,CACH,CACA,eAAeA,EAAUwkD,EAAS,CAChC,MAAMpjC,EAAS,KAAK,OACdljD,EAAIkjD,EAAO,EACX30B,EAASuT,EAAS,WAClBsuF,EAAWltE,EAAO,QAAQ,IAAI6uE,EAAiB,EAAE,SAC9CjwF,EAAA,KAAK,gBAAiB,IAAM,CAC7B,MAAA9rB,EAAO,IAAK6hD,GAA2Bi7D,GAAa,GAAGK,IAAkBjwE,EAAO,EAAGktE,CAAQ,EAAGltE,EAAO,MAAM,EACxGphB,EAAA,UAAU,SAAS,IAAI9rB,CAAI,EAC7BuY,EAAA,GAAG,OAAQ,IAAM,CACtBvY,EAAK,sBAAsB,EACtBA,EAAA,IAAMswE,EAAQ,OAAS,GACvBtwE,EAAA,aAAa,UAAU,SAC5BA,EAAK,qBAAqB,GACzB,CAAE,SAAU,MAAO,EACb8rB,EAAA,GAAG,SAAU,IAAM,CACtB9rB,EAAK,YACAktC,EAAA,QAAQ,aAAcltC,EAAK,GAAG,EAC9BktC,EAAA,QAAQ,KAAK,QACtB,CACD,EACDphB,EAAS,GAAG,gBAAiB,IAAM9rB,EAAK,gBAAiB,GAChD8rB,EAAA,GAAG,SAAU,IAAM,CACnBohB,EAAA,QAAQ,KAAK,OAAM,CAC3B,EACDltC,EAAK,SAAS,SAAU,QAAQ,EAAE,GAAG8rB,CAAQ,EAC7C9rB,EAAK,aAAa,UAAU,KAAK,OAAO,EAAE,GAAGswE,EAAS,OAAO,EAC7DtwE,EAAK,aAAa,KAAK,WAAW,EAAE,GAAGswE,EAAS,WAAW,EAC5D,EACDxkD,EAAS,KAAK,WAAW,EAAE,GAAGwkD,CAAO,EACrC/3D,EAAO,IAAI,CACT,MAAOvuB,EAAE,cAAc,EACvB,KAAMozH,IACN,QAAS,GACV,CACH,CACF,EACA,SAASD,IAAkBnzH,EAAGowH,EAAU,CAC/B,OACJp6G,GAAS,CACJ,IAACA,EAAK,IAAI,OACZ,OAAOhW,EAAE,4BAA4B,CAEzC,EACCgW,GAAS,CACR,GAAI,CAACo6G,EAAS,SAASp6G,EAAK,GAAG,EAC7B,OAAOhW,EAAE,kCAAkC,CAE/C,EAEJ,CAIA,IAAIqzH,IAAa,cAActkD,EAAO,CAIpC,WAAW,UAAW,CACpB,MAAO,CAACgjD,GAAmBmB,IAAcd,IAAgBh9B,EAAM,CACjE,CAIA,WAAW,YAAa,CACf,kBACT,CACF,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC/2BA,IAAIk+B,GAAmB,CAAC,OAAQ,QAAS,SAAU,SAAS,EAC5D,SAASC,GAAY1nH,EAAQ,CAC3B,OAAOynH,GAAiB,SAASznH,CAAM,CACzC,CACA,SAAS2nH,GAAUC,EAAWv3D,EAAQ,CACpC,OAAIA,EAAO,0BAA4B,MAC9Bu3D,IAAc,QAEdA,IAAc,MAEzB,CACA,SAASC,GAA0BnH,EAAmB,CACpD,MAAMoH,EAAoBpH,EAAkB,IAAK1gH,GAAW,CAC1D,IAAIrb,EACJ,OAAI,OAAOqb,GAAU,SACnBrb,EAAS,CAAE,KAAMqb,GAEjBrb,EAASqb,EAEJrb,CACX,CAAG,EAAE,OAAQqb,GAAW,CACpB,MAAM+nH,EAAcN,GAAiB,SAASznH,EAAO,IAAI,EACzD,OAAK+nH,GACH/0D,GAAW,uCAAwC,CAAE,OAAAhzD,CAAM,CAAE,EAExD+nH,CACX,CAAG,EACKC,EAAiBF,EAAkB,OAAQ9nH,GAAW,EAAQA,EAAO,SAAU,EAAE,OACvF,GAAIgoH,GAAkBA,EAAiBF,EAAkB,OACvD,MAAM,IAAIv7D,EAAc,0CAA2C,CAAE,kBAAAm0D,CAAmB,GAE1F,OAAAoH,EAAkB,QAAQ,CAAC9nH,EAAQ9T,EAAO+7H,IAAe,CACvD,MAAMC,EAAoBD,EAAW,MAAM/7H,EAAQ,CAAC,EAEpD,GAD0Bg8H,EAAkB,KAAMl6F,GAASA,EAAK,MAAQhuB,EAAO,IAAI,EAEjF,MAAM,IAAIusD,EAAc,wCAAyC,CAAE,OAAAvsD,EAAQ,kBAAA0gH,CAAmB,GAEhG,GAAI1gH,EAAO,WACsBkoH,EAAkB,KAAMl6F,GAASA,EAAK,WAAahuB,EAAO,SAAS,EAEhG,MAAM,IAAIusD,EAAc,6CAA8C,CAAE,OAAAvsD,EAAQ,kBAAA0gH,CAAmB,EAG3G,CAAG,EACMoH,CACT,CAGA,IAAIK,GAAY,YACZC,IAAmB,cAAcjwC,EAAQ,CAI3C,SAAU,CAER,MAAM9nB,EADS,KAAK,OACE,OAChBgrC,EAAap/G,GAAM,KAAK,OAAO,MAAM,SAAS,UAAU,kBAAiB,CAAE,EACjF,KAAK,UAAY,EAAQo/G,GAAe,KAAK,cAAcA,CAAU,EACjE,KAAK,WAAaA,EAAW,aAAa,WAAW,EACvD,KAAK,MAAQA,EAAW,aAAa,WAAW,EAEhD,KAAK,MAAQhrC,EAAO,2BAA6B,MAAQ,QAAU,MAEtE,CAUD,QAAQj1E,EAAU,GAAI,CACpB,MAAMi8D,EAAS,KAAK,OACdgZ,EAAShZ,EAAO,OAChB+P,EAAQ/P,EAAO,MACfl9D,EAAMitE,EAAM,SACZ/vE,EAAQ+D,EAAQ,MACtBgsE,EAAM,OAAQjJ,GAAW,CACvB,MAAMs1C,EAAS,MAAM,KAAKt5G,EAAI,UAAU,kBAAiB,CAAE,EAAE,OAAQs6B,GAAU,KAAK,cAAcA,CAAK,CAAC,EAClG4zG,EAAmB50B,EAAO,CAAC,EAAE,aAAa,WAAW,EACnCk0B,GAAUtwI,EAAOg5E,CAAM,GAAKg4D,IAAqBhxI,GAAS,CAACA,EAEjFixI,IAA6B70B,EAAQt1C,CAAM,EAE3CoqE,IAAwB90B,EAAQt1C,EAAQ9mE,CAAK,CAErD,CAAK,CACF,CAMD,cAAco9B,EAAO,CACnB,OAAO,KAAK,OAAO,MAAM,OAAO,eAAeA,EAAO0zG,EAAS,CAChE,CACH,EACA,SAASG,IAA6B70B,EAAQt1C,EAAQ,CACpD,UAAW1pC,KAASg/E,EAClBt1C,EAAO,gBAAgBgqE,GAAW1zG,CAAK,CAE3C,CACA,SAAS8zG,IAAwB90B,EAAQt1C,EAAQypE,EAAW,CAC1D,UAAWnzG,KAASg/E,EAClBt1C,EAAO,aAAagqE,GAAWP,EAAWnzG,CAAK,CAEnD,CAGA,IAAI+zG,IAAmB,cAActlD,EAAO,CAI1C,WAAW,YAAa,CACtB,MAAO,kBACR,CAID,YAAY7rB,EAAQ,CAClB,MAAMA,CAAM,EACZA,EAAO,OAAO,OAAO,YAAa,CAChC,QAASowE,GAAiB,IAAKznH,IAAY,CAAE,KAAMA,CAAM,EAAG,CAClE,CAAK,CACF,CAID,MAAO,CACL,MAAMq3C,EAAS,KAAK,OACdgZ,EAAShZ,EAAO,OAChB2D,EAAS3D,EAAO,MAAM,OAEtBoxE,EADUZ,GAA0BxwE,EAAO,OAAO,IAAI,mBAAmB,CAAC,EAC/C,OAAQr3C,GAAW0nH,GAAY1nH,EAAO,IAAI,GAAK,CAAC2nH,GAAU3nH,EAAO,KAAMqwD,CAAM,CAAC,EACzGq4D,EAAmBD,EAAiB,KAAMzoH,GAAW,CAAC,CAACA,EAAO,SAAS,EAC7Eg7C,EAAO,OAAO,SAAU,CAAE,gBAAiB,WAAa,GACxD3D,EAAO,MAAM,OAAO,uBAAuB,YAAa,CAAE,aAAc,EAAI,CAAE,EAC1EqxE,EACFrxE,EAAO,WAAW,qBAAqBsxE,IAAqBF,CAAgB,CAAC,EAE7EpxE,EAAO,WAAW,IAAI,UAAU,EAAE,qBAAqBuxE,IAA8BH,CAAgB,CAAC,EAExG,MAAMI,EAA0BC,IAA6BL,CAAgB,EAC7E,UAAWnpE,KAAcupE,EACvBxxE,EAAO,WAAW,IAAI,QAAQ,EAAE,qBAAqBiI,CAAU,EAEjE,MAAMypE,EAAiCC,IAAoCP,CAAgB,EAC3F,UAAWnpE,KAAcypE,EACvB1xE,EAAO,WAAW,IAAI,QAAQ,EAAE,qBAAqBiI,CAAU,EAEjEjI,EAAO,SAAS,IAAI,YAAa,IAAI+wE,IAAiB/wE,CAAM,CAAC,CAC9D,CACH,EACA,SAASuxE,IAA8BxtI,EAAS,CAC9C,MAAMsc,EAAO,GACb,SAAW,CAAE,KAAA1f,CAAM,IAAIoD,EACrBsc,EAAK1f,CAAI,EAAI,CACX,IAAK,QACL,MAAO,CACL,aAAcA,CACf,CACP,EASE,MAPmB,CACjB,MAAO,CACL,IAAK,YACL,OAAQoD,EAAQ,IAAK4kB,GAAWA,EAAO,IAAI,CAC5C,EACD,KAAAtI,CACJ,CAEA,CACA,SAASoxH,IAA6B1tI,EAAS,CAC7C,MAAMo8E,EAAc,GACpB,SAAW,CAAE,KAAAx/E,CAAM,IAAIoD,EACrBo8E,EAAY,KAAK,CACf,KAAM,CACJ,IAAK,QACL,MAAO,CACL,aAAcx/E,CACf,CACF,EACD,MAAO,CACL,IAAK,YACL,MAAOA,CACR,CACP,CAAK,EAEH,OAAOw/E,CACT,CACA,SAASwxD,IAAoC5tI,EAAS,CACpD,MAAMo8E,EAAc,GACpB,SAAW,CAAE,KAAAx/E,CAAM,IAAIoD,EACrBo8E,EAAY,KAAK,CACf,KAAM,CACJ,IAAK,QACL,MAAOx/E,CACR,EACD,MAAO,CACL,IAAK,YACL,MAAOA,CACR,CACP,CAAK,EAEH,OAAOw/E,CACT,CACA,SAASmxD,IAAqBvtI,EAAS,CACrC,MAAMsc,EAAO,GACb,UAAWsI,KAAU5kB,EACnBsc,EAAKsI,EAAO,IAAI,EAAI,CAClB,IAAK,QACL,MAAOA,EAAO,SACpB,EASE,MAPmB,CACjB,MAAO,CACL,IAAK,YACL,OAAQ5kB,EAAQ,IAAK4kB,GAAWA,EAAO,IAAI,CAC5C,EACD,KAAAtI,CACJ,CAEA,CAGA,IAAIuxH,GAA2B,IAAI,IAAI,CACrC,CAAC,OAAQtxD,GAAM,SAAS,EACxB,CAAC,QAASA,GAAM,UAAU,EAC1B,CAAC,SAAUA,GAAM,WAAW,EAC5B,CAAC,UAAWA,GAAM,YAAY,CAChC,CAAC,EACGuxD,IAAc,cAAchmD,EAAO,CAcrC,IAAI,uBAAwB,CAC1B,MAAM/uE,EAAI,KAAK,OAAO,EACtB,MAAO,CACL,KAAQA,EAAE,YAAY,EACtB,MAASA,EAAE,aAAa,EACxB,OAAUA,EAAE,cAAc,EAC1B,QAAWA,EAAE,SAAS,CAC5B,CACG,CAID,WAAW,YAAa,CACtB,MAAO,aACR,CAID,MAAO,CACL,MAAMkjD,EAAS,KAAK,OACdohB,EAAmBphB,EAAO,GAAG,iBAC7BljD,EAAIkjD,EAAO,EACXj8D,EAAUysI,GAA0BxwE,EAAO,OAAO,IAAI,mBAAmB,CAAC,EAChFj8D,EAAQ,IAAK4kB,GAAWA,EAAO,IAAI,EAAE,OAAO0nH,EAAW,EAAE,QAAS1nH,GAAW,KAAK,WAAWA,CAAM,CAAC,EACpGy4D,EAAiB,IAAI,YAAcpI,GAAW,CAC5C,MAAMyF,EAAeF,GAAevF,CAAM,EAC1C2F,GAAqBF,EAAc,IAAM16E,EAAQ,IAAK4kB,GAAWy4D,EAAiB,OAAO,aAAaz4D,EAAO,IAAI,EAAE,CAAC,EAAG,CACrH,oCAAqC,GACrC,WAAY,GACZ,UAAW7L,EAAE,wBAAwB,CAC7C,CAAO,EACD2hE,EAAa,WAAW,IAAI,CAC1B,MAAO3hE,EAAE,gBAAgB,EACzB,QAAS,EACjB,CAAO,EACD2hE,EAAa,eAAe,CAC1B,WAAY,CACV,MAAO,uBACR,CACT,CAAO,EACD,MAAMqzD,EAAc94D,EAAO,2BAA6B,MAAQ44D,GAAS,IAAI,OAAO,EAAIA,GAAS,IAAI,MAAM,EACrGxuC,EAAUpjC,EAAO,SAAS,IAAI,WAAW,EAC/C,OAAAye,EAAa,WAAW,KAAK,MAAM,EAAE,GAAG2kB,EAAS,QAAUpjG,GAAU4xI,GAAS,IAAI5xI,CAAK,GAAK8xI,CAAW,EACvGrzD,EAAa,KAAK,WAAW,EAAE,GAAG2kB,EAAS,WAAW,EACtD,KAAK,SAAS3kB,EAAc,UAAW,IAAM,CAC3Cze,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACMye,CACb,CAAK,CACF,CAMD,WAAW91D,EAAQ,CACjB,MAAMq3C,EAAS,KAAK,OACpBA,EAAO,GAAG,iBAAiB,IAAI,aAAar3C,CAAM,GAAKqwD,GAAW,CAChE,MAAMoqB,EAAUpjC,EAAO,SAAS,IAAI,WAAW,EACzC+b,EAAa,IAAIrC,GAAWV,CAAM,EACxC,OAAA+C,EAAW,IAAI,CACb,MAAO,KAAK,sBAAsBpzD,CAAM,EACxC,KAAMipH,GAAS,IAAIjpH,CAAM,EACzB,QAAS,GACT,aAAc,EACtB,CAAO,EACDozD,EAAW,KAAK,WAAW,EAAE,GAAGqnB,CAAO,EACvCrnB,EAAW,KAAK,MAAM,EAAE,GAAGqnB,EAAS,QAAUpjG,GAAUA,IAAU2oB,CAAM,EACxE,KAAK,SAASozD,EAAY,UAAW,IAAM,CACzC/b,EAAO,QAAQ,YAAa,CAAE,MAAOr3C,CAAQ,GAC7Cq3C,EAAO,QAAQ,KAAK,OAC5B,CAAO,EACM+b,CACb,CAAK,CACF,CACH,EAGIg2D,IAAY,cAAclmD,EAAO,CAInC,WAAW,UAAW,CACpB,MAAO,CAACslD,IAAkBU,GAAW,CACtC,CAID,WAAW,YAAa,CACtB,MAAO,WACR,CACH,EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCChVA,MAAM3zC,WAAsB8zC,EAAkB,CAAE,CAEhD,MAAMC,GAAwB,CAC5B,YAAY7yB,EAAQ8yB,EAAWC,EAAcC,EAAQ,CACnD,KAAK,OAAShzB,EACd,KAAK,UAAY8yB,EACjB,KAAK,aAAeC,EACpB,KAAK,OAASC,CACf,CAED,QAAS,CACP,OAAO,KAAK,OAAO,KAChB,KAAKpkG,GAAQ,IAAI,QAAQ,CAAC74B,EAASC,IAAW,CAC7C,KAAK,aAAY,EACjB,KAAK,eAAeD,EAASC,EAAQ44B,CAAI,EACzC,KAAK,aAAaA,CAAI,CACvB,EAAC,CACL,CAED,OAAQ,CACF,KAAK,KACP,KAAK,IAAI,OAEZ,CAED,cAAe,CACb,MAAMtf,EAAM,KAAK,IAAM,IAAI,eAC3BA,EAAI,KAAK,OAAQ,mCAAmC,KAAK,SAAS,UAAW,EAAI,EACjFA,EAAI,aAAe,MACpB,CAED,eAAevZ,EAASC,EAAQ44B,EAAM,CACpC,MAAMtf,EAAM,KAAK,IACX0wF,EAAS,KAAK,OACdizB,EAAmB,yBAAyBrkG,EAAK,IAAI,IAE3Dtf,EAAI,iBAAiB,QAAS,IAAMtZ,EAAOi9H,CAAgB,CAAC,EAC5D3jH,EAAI,iBAAiB,QAAS,IAAMtZ,EAAQ,GAC5CsZ,EAAI,iBAAiB,OAAQ,IAAM,CACjC,MAAMrC,EAAWqC,EAAI,SAErB,GAAI,CAACrC,GAAYA,EAAS,MACxB,OAAOjX,EAAOiX,GAAYA,EAAS,MAAQA,EAAS,MAAM,QAAUgmH,CAAgB,EAGtFl9H,EAAQ,CACN,QAASkX,EAAS,GAC1B,CAAO,CACP,CAAK,EAEGqC,EAAI,QACNA,EAAI,OAAO,iBAAiB,WAAYC,GAAO,CACzCA,EAAI,mBACNywF,EAAO,YAAczwF,EAAI,MACzBywF,EAAO,SAAWzwF,EAAI,OAEhC,CAAO,CAEJ,CAED,aAAaqf,EAAM,CACjB,MAAMt1B,EAAO,IAAI,SACjBA,EAAK,OAAO,OAAQs1B,CAAI,EACxBt1B,EAAK,OAAO,gBAAiB,KAAK,YAAY,EAE1C,KAAK,QACPA,EAAK,OAAO,SAAU,KAAK,MAAM,EAGnC,KAAK,IAAI,KAAKA,CAAI,CACnB,CACH,CAEA,SAAS45H,IAA8BtyE,EAAQ,CAC7CA,EAAO,QAAQ,IAAI,gBAAgB,EAAE,oBAAsBo/C,GAClD,IAAI6yB,IACT7yB,EACAp/C,EAAO,OAAO,IAAI,WAAW,EAC7BA,EAAO,OAAO,IAAI,cAAc,EAChCA,EAAO,OAAO,IAAI,QAAQ,CAChC,CAEA,CAEAk+B,GAAc,eAAiB,CAC7Bq0C,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,IACAC,IACAC,GACAC,GACF,EAEAz1C,GAAc,cAAgB,CAC5B,QAAS,CACP,MAAO,CACL,UACA,IACA,OACA,SACA,YACA,sBACA,aACA,WACA,OACA,YACA,eACA,eACA,cACA,aACA,aACA,OACA,MACD,CACF,EACD,UAAW,CACT,QAAS,CACP,OACA,QACA,SACA,SACD,CACF,EACD,MAAO,CACL,WAAY,KACZ,QAAS,CACP,kBACA,kBACA,uBACA,yBACA,wBACA,IACA,qBACA,sBACD,EACD,OAAQ,CACN,OACA,YACA,cACA,YACD,CACF,EACD,SAAU,KACV,WAAY,CACV,eAAgB,EACjB,CACH,EAEe,MAAK01C,WAAS9kE,EAAW,CAWtC,SAAU,CACR,KAAK,mBAAoB,CAC1B,CAED,YAAa,CACX,KAAK,uBAAwB,CAC9B,CAED,mBAAoB,CAClB3mC,IAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,OAAQ,CACrC,CAED,oBAAqB,CACd,KAAK,iBAGV,KAAK,kBAAmB,EAExB+1D,GAAc,OAAO,KAAK,YAAa,CACrC,aAAc,CAACo0C,GAA6B,EAC5C,UAAW,KAAK,eAChB,aAAc,KAAK,kBACnB,OAAQ,KAAK,WACnB,CAAK,EAAE,KAAMtyE,GAAW,CAClBA,EAAO,QAAQ,KAAK,OAAO8G,GAAU,CACnCA,EAAO,SAAS,aAAc,OAAQ9G,EAAO,QAAQ,KAAK,SAAS,QAAO,CAAE,CACpF,CAAO,EAEG,KAAK,YAAY,aAAa,WAAW,GAC3CA,EAAO,QAAQ,KAAK,QAGtB,KAAK,OAASA,EAEd,KAAK,YAAY,QAAQ,MAAM,EAAE,iBAAiB,SAAU,IAAM,CAChE,KAAK,YAAY,MAAQ,KAAK,OAAO,QAAS,CACtD,CAAO,CACP,CAAK,EACF,CAED,wBAAyB,CACnB,KAAK,SAAW,QAIpB,KAAK,OAAO,QAAS,CACtB,CACH,CAzDE7+D,GADkByyI,GACX,UAAU,CACf,QACA,OACD,GACDzyI,GALkByyI,GAKX,SAAS,CACd,UAAW,OACX,aAAc,OACd,OAAQ,MACT,kJCnMY,MAAKC,WAAS/kE,EAAW,CAkBtC,mBAAmBpyD,EAAO,CAExBA,EAAM,eAAgB,EAGtB,IAAIo3H,EAAiB,CAAC,QAAS,MAAO,QAAQ,EAC1C,KAAK,sBACPA,EAAe,KAAK,cAAc,EAKpC,IAAI/vI,EAAU,CACZ,WAAY,KAAK,eACjB,OAAQ,KAAK,YACb,cAAe,KAAK,kBACpB,iBAAkB,KAAK,uBAAuB,KAAK,IAAI,EACvD,SAAU,GACV,QAAS,KAAK,gBAAkB,KAAK,aAAa,MAAM,GAAG,EAAI+vI,EAC/D,iBAAkB,OAAK,wBAA0B,KAAK,sBAAwB,IAC9E,OAAQ,KAAK,WACd,EAEG,KAAK,uBACP/vI,EAAQ,eAAoB,KAAK,mBAInC,WAAW,iBAAiBA,EAAS,KAAK,qBAAqB,KAAK,KAAM2Y,CAAK,CAAC,CACjF,CAED,WAAWA,EAAO,CAEhBA,EAAM,eAAgB,EAGtB,KAAK,kBAAkB,MAAQ,KAG/B,KAAK,gBAAiB,EAGlB,KAAK,iBAAmB,KAAK,qBAC/ByrB,GAAE,IAAI,KAAK,mBAAmB,EAAE,EAAE,OAErC,CAED,uBAAuBzkC,EAAUqwI,EAAc,CAC7C5rG,GAAE,KAAK,CACL,IAAK,KAAK,mBACV,KAAM,MACN,SAAU,OACV,KAAM,CAAC,KAAM4rG,CAAY,EACzB,SAAU,UAAW,CAAE,QAAQ,IAAI,UAAU,CAAG,EAChD,QAAS,SAASC,EAAWC,EAAYvlH,EAAK,CAAEhrB,EAASswI,CAAS,CAAG,EACrE,MAAO,SAAStlH,EAAKV,EAAQ3W,EAAO,CAAE,QAAQ,IAAIqX,EAAKV,EAAQ3W,CAAK,CAAG,CAC7E,CAAK,CACF,CAED,qBAAqBqF,EAAOrF,EAAOgV,EAAU,CAE3C,GAAI,CAAChV,GAASgV,GAAYA,EAAS,QAAU,UAAW,CACtD,MAAM3T,EAAO2T,EAAS,KAGtB,KAAK,kBAAkB,MAAQ3T,EAAK,UAGpC,KAAK,gBAAiB,EAGtB,KAAK,aAAa,KAAK,eAAe,QAAQ,gBAAiBA,EAAK,SAAS,CAAC,EAG1E,KAAK,iBAAmB,KAAK,qBAC/ByvB,GAAE,IAAI,KAAK,mBAAmB,EAAE,EAAE,OAErC,CACF,CAED,aAAatb,EAAK,CAChB,IAAIqnH,EAAgB/rG,GAAE,aAAatb,CAAG,YAAY,KAAK,UAAU,aAAa,KAAK,WAAW,UAAU,KAAK,UAAU,wBAAwB,EAC/Isb,GAAE,KAAK,kBAAkB,EAAE,QAAQ+rG,CAAa,EAGhD,KAAK,mBAAmB,UAAU,IAAI,KAAK,mBAAmB,CAC/D,CAED,iBAAkB,CACX,KAAK,qBACV,KAAK,mBAAmB,YAAY,KAAK,eAAe,EACxD,KAAK,mBAAmB,UAAU,OAAO,KAAK,mBAAmB,EAClE,CACH,CA9GE/yI,GADkB0yI,GACX,UAAU,CAAE,eAAgB,cAAe,WAAa,GAC/D1yI,GAFkB0yI,GAEX,SAAS,CACd,cAAe,OACf,OAAQ,OACR,MAAO,OACP,UAAW,OACX,OAAQ,OACR,aAAc,OACd,UAAW,OACX,QAAS,OACT,eAAgB,QAChB,OAAQ,OACR,WAAY,QACZ,eAAgB,MACjB,GACD1yI,GAhBkB0yI,GAgBX,UAAU,CAAE,gBAAkB,mHCZvC,IAAIM,IAAoB9zI,GAAW,CACjC,iDAAiDhB,EAASC,EAAQ,EAC/D,SAASwd,EAAGlG,EAAG,CACF,OAAOvX,GAAnB,UAA0C,OAAOC,GAAnB,SAA4BA,EAAO,QAAUsX,EAAC,EAAmB,OAAO,QAArB,YAA+B,OAAO,IAAM,OAAO,CAAE,EAAEA,CAAC,EAAgB,OAAOvX,GAAnB,SAA6BA,EAAQ,MAAQuX,EAAC,EAAKkG,EAAE,MAAQlG,EAAC,CACjN,GAAM,KAAM,KAAO,IAAM,CAEnB,IAAIkG,EAAI,CAAE,EAAG,CAACizC,GAAIO,IAAO,CACvB,QAASL,KAAMK,EACbxzC,EAAE,EAAEwzC,EAAIL,CAAE,GAAK,CAACnzC,EAAE,EAAEizC,GAAIE,CAAE,GAAK,OAAO,eAAeF,GAAIE,EAAI,CAAE,WAAY,GAAM,IAAKK,EAAGL,CAAE,CAAC,CAAE,CACjG,EAAE,EAAG,CAACJ,GAAIE,IAAO,OAAO,UAAU,eAAe,KAAKF,GAAIE,CAAE,EAAG,EAAIF,IAAO,CAC1D,OAAO,OAAtB,KAAgC,OAAO,aAAe,OAAO,eAAeA,GAAI,OAAO,YAAa,CAAE,MAAO,QAAU,GAAG,OAAO,eAAeA,GAAI,aAAc,CAAE,MAAO,EAAI,CAAE,CACzL,CAAS,EAAEj5C,EAAI,GACTkG,EAAE,EAAElG,EAAG,CAAE,QAAS,IAAMs6C,EAAC,CAAE,EAC3B,IAAItJ,EAAI,GACR,SAAS/0C,EAAEg9C,GAAIE,EAAIO,EAAIL,EAAIxoD,GAAK,GAAI,CAClCsoD,aAAc,gBAAkBA,aAAc,SAAWA,EAAK,MAAM,KAAKA,CAAE,EAAI,MAAM,QAAQA,CAAE,IAAMA,EAAK,CAACA,CAAE,GAAI,MAAM,QAAQO,CAAE,IAAMA,EAAK,CAACA,CAAE,GAC/I,UAAWC,KAAMR,EACf,UAAWc,MAAMP,EACfC,EAAGV,EAAE,EAAEgB,GAAIZ,EAAI,CAAE,QAAS,GAAO,GAAGxoD,EAAE,CAAE,EAC5C,OAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAC/C,CACDqV,EAAE,EAAE8qC,CAAC,EAAG9qC,EAAE,EAAE8qC,EAAG,CAAE,uBAAwB,IAAMrjC,EAAG,wBAAyB,IAAMurC,EAAG,mBAAoB,IAAM3vD,EAAG,UAAW,IAAM0T,EAAG,IAAK,IAAMmW,EAAG,GAAI,IAAMjnB,EAAG,eAAgB,IAAM2iC,CAAG,GACzL,MAAM3iC,EAAI8P,EAAE,KAAK,KAAM,kBAAkB,EAAGmX,EAAInX,EAAE,KAAK,KAAM,qBAAqB,EAClF,SAASi9C,EAAED,GAAI,CACb,MAAME,EAAK,SAAS,cAAc,KAAK,EACvC,OAAOA,EAAG,UAAYF,GAAG,KAAM,EAAEE,EAAG,iBACrC,CACD,SAAS5vD,EAAE0vD,GAAI,CACb,MAAME,EAAK,CAACa,EAAIC,KAAO,CACrB,MAAMiI,EAAKlI,EAAG,aAAaC,EAAE,EAC7B,OAAOD,EAAG,gBAAgBC,EAAE,EAAGiI,CAChC,EAAExI,EAAK,CAACM,EAAIX,GAAK,KAAO,CACvB,MAAMxoD,EAAKsoD,EAAGa,EAAI,MAAM,EAAGL,GAAKR,EAAGa,EAAI,MAAM,EAAGP,EAAK5oD,EAAKwoD,GAAGxoD,CAAE,EAAI,CAAE,EAAGwoD,GACxEM,KAAON,GAAGM,EAAE,EAAIK,GAChB,UAAW0F,KAAM,MAAM,KAAK1F,EAAG,QAAQ,EAAG,CACxC,MAAMkG,GAAK/G,EAAGuG,EAAI,MAAM,EAAGD,GAAK/F,EAAGgG,EAAIQ,GAAK,CAAE,EAAGzG,CAAE,EACnDyG,KAAOzG,EAAGyG,EAAE,IAAMzG,EAAGyG,EAAE,EAAI,CAAE,IAAG,KAAK,OAAO,KAAKT,EAAE,EAAE,OAASA,GAAKC,CAAE,CACtE,CACD,OAAOrG,EACjB,EACQ,OAAOK,EAAGR,EAAED,EAAE,CAAC,CAChB,CACD,SAASh8C,EAAEg8C,GAAI,CACb,IAAIE,EAAKF,GAAG,MAAQA,GAAG,cAAgBA,GAAG,eAC1C,GAAIE,EACF,OAAOA,EACT,IAAIO,EAAKT,GAAG,OAAO,cACnB,IAAKE,EAAK,CAACF,GAAG,OAAQS,CAAE,EAAGA,EAAKA,EAAG,eACjCP,EAAG,KAAKO,CAAE,EACZ,OAAOP,EAAG,KAAK,SAAU,MAAM,EAAGA,CACnC,CACD,SAASrqB,EAAEmqB,GAAI,CACb,OAAOA,cAAc,QAAUA,GAAiB,OAAOA,IAAnB,SAAwBA,GAAG,MAAM,KAAK,EAAE,OAAO,CAACe,EAAIb,EAAIO,EAAIL,MAAQW,EAAKA,EAAG,cAAcb,CAAE,EAAGO,EAAKL,GAAG,OAAS,EAAIW,EAAG,WAAaA,GAAK,QAAQ,EAAI,IAC1L,CACD,SAASrsC,EAAEsrC,GAAIE,EAAMa,GAAOA,EAAI,CAC9B,SAASN,EAAGwI,EAAI,CACd,MAAM7I,GAAK,CAAC,KAAM,IAAM,EAAG,EAAE,OAAO6I,EAAG,UAAY,EAAIA,EAAG,OAAO,CAAC,GAAKA,EAAG,OAAS,EAAI,EAAI,IAC3F,IAAIrxD,EAAK,EAAG8oD,GAAKV,GAAG,eACpBA,GAAG,MAAQA,GAAG,MAAM,QAAQ,UAAW,CAACe,EAAIwjF,IAAOA,GAAM7jF,IAAM6jF,EAAKxjF,EAAG,QAAUL,IAAMA,GAAK6jF,EAAIrkF,EAAG,OAAOa,CAAE,EAAGX,GAAIxoD,CAAE,IAAMA,IAAMmpD,EAAG,EAAGf,GAAG,QAASA,GAAG,kBAAkBU,GAAIA,EAAE,EAAGuI,EAAG,iBAAkBjJ,GAAG,cAAc,IAAI,MAAM,OAAO,CAAC,CAC1O,CACD9sD,EAAE8sD,GAAI,QAAS,IAAM9sD,EAAE,OAAQ,QAASutD,EAAI,CAAE,QAAS,EAAO,EAAC,EAAGvtD,EAAE8sD,GAAI,OAAQ,IAAM7lC,EAAE,OAAQ,QAASsmC,CAAE,CAAC,CAC7G,CACD,KAAM,CAAE,IAAKJ,EAAG,IAAKF,EAAG,MAAO9jB,EAAG,MAAOtiC,CAAG,EAAG,KAC/C,SAASwmD,EAAEP,GAAIE,EAAIO,EAAI,CACrBP,GAAM,IAAKO,GAAM,IACjB,MAAML,EAAK/jB,EAAE2jB,GAAKA,GAAK,IAAM,CAAC,EAAGpoD,GAAKooD,GAAKI,EAAIM,EAAKD,GAAM,EAAIP,GAAKM,GAAKC,GAAM,EAAI7oD,GAAKsoD,GAAKS,EAAKF,GAAM,GAAK,EAAI7oD,IAAMsoD,GAAKU,EAAKR,EAAK,EACrI,MAAO,CAAC,IAAM,CAACK,EAAID,GAAIE,EAAIA,EAAIC,EAAIF,CAAE,EAAEG,CAAE,EAAG,IAAM,CAACD,EAAIF,EAAIA,EAAID,GAAIE,EAAIA,CAAE,EAAEE,CAAE,EAAG,IAAM,CAACF,EAAIA,EAAIC,EAAIF,EAAIA,EAAID,EAAE,EAAEI,CAAE,CAAC,CACnH,CACD,SAAS17C,EAAE86C,GAAIE,EAAIO,EAAI,CACrB,MAAML,GAAM,GAAKF,GAAM,OAASO,GAAM,KAAO,EAC7C,OAAaL,IAAN,IAAaF,EAAWE,IAAN,EAAW,EAAIA,EAAK,GAAMF,EAAKO,GAAM,EAAIL,GAAMF,EAAKO,GAAM,EAAI,EAAIL,IAAM,CAACJ,GAAI,IAAME,EAAI,IAAME,CAAE,CACzH,CACD,SAAS7vD,EAAEyvD,GAAIE,EAAIO,EAAI,CACrB,MAAML,EAAKC,EAAEL,IAAM,IAAKE,GAAM,IAAKO,GAAM,GAAG,EAAG7oD,GAAKuoD,EAAEH,GAAIE,EAAIO,CAAE,EAAGC,EAAK9oD,GAAKwoD,EAC7E,IAAII,GAAIG,EACR,GAAUD,IAAN,EACFF,GAAKG,EAAK,MACP,CACHA,EAAKD,EAAK9oD,GACV,MAAM6uD,IAAO7uD,GAAKooD,IAAM,EAAIU,EAAK,GAAKA,EAAIE,KAAOhpD,GAAKsoD,GAAM,EAAIQ,EAAK,GAAKA,EAAIG,KAAOjpD,GAAK6oD,GAAM,EAAIC,EAAK,GAAKA,EAC9GV,KAAOpoD,GAAK4oD,GAAKK,GAAKD,GAAKV,IAAOtoD,GAAK4oD,GAAK,EAAI,EAAIiG,EAAK5F,GAAKJ,IAAO7oD,KAAO4oD,GAAK,EAAI,EAAII,GAAK6F,GAAKjG,GAAK,EAAIA,IAAM,EAAIA,GAAK,IAAMA,IAAM,EACxI,CACD,MAAO,CAAC,IAAMA,GAAI,IAAMG,EAAI,IAAM/oD,EAAE,CACrC,CACD,SAAS,EAAEooD,GAAIE,EAAIO,EAAIL,EAAI,CACzB,OAAAF,GAAM,IAAKO,GAAM,IACV,CAAC,GAAGlwD,EAAE,KAAO,EAAI8vD,EAAE,GAAIL,IAAM,MAAQ,GAAKI,GAAM,MAAQA,CAAE,GAAI,KAAO,EAAIC,EAAE,EAAGH,GAAM,EAAIE,GAAMA,CAAE,GAAI,KAAO,EAAIC,EAAE,EAAGI,GAAM,EAAIL,GAAMA,CAAE,EAAE,CAAC,CACjJ,CACD,SAASE,EAAEN,GAAIE,EAAIO,EAAI,CACrBP,GAAM,IACN,MAAME,EAAK,GAAKF,IAAOO,GAAM,KAAO,GAAMA,EAAK,EAAIA,IAAOA,EAAKP,GAAM,IAAKtoD,GAAK,KAAO6oD,EAAKP,GAC3F,MAAO,CAACF,GAAI,MAAMI,CAAE,EAAI,EAAIA,EAAIxoD,EAAE,CACnC,CACD,SAAS0M,EAAE07C,GAAI,CACb,OAAOzvD,EAAE,GAAGyvD,GAAG,MAAM,OAAO,EAAE,IAAKe,GAAO,SAASA,EAAI,EAAE,CAAC,CAAC,CAC5D,CACD,SAASrvD,EAAEsuD,GAAI,CACbA,GAAKA,GAAG,MAAM,aAAa,EAAI,SAASe,GAAI,CAC1C,GAAgBA,GAAG,YAAa,IAA5B,QACF,MAAO,OACT,MAAMC,EAAK,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI,EAC3D,OAAOA,EAAG,UAAYD,GAAeC,EAAG,YAAd,OAA0B,KAAOA,EAAG,SACxE,EAAUhB,EAAE,EAAIA,GACR,MAAME,EAAK,CAAE,KAAM,qDAAsD,KAAM,2EAA4E,KAAM,+DAAgE,KAAM,+DAAgE,KAAM,0DAA0D,EAAIO,EAAMM,IAAOA,GAAG,IAAKkG,GAAO,oBAAoB,KAAKA,CAAE,EAAI,OAAOA,CAAE,EAAI,MAAM,EACzb,IAAI7G,EACJnzC,EACE,UAAWrV,MAAMsoD,EACf,GAAIE,EAAKF,EAAGtoD,EAAE,EAAE,KAAKooD,EAAE,EACrB,OAAQpoD,GAAE,CACR,IAAK,OAAQ,CACX,KAAM,EAAGmpD,EAAIC,GAAIN,EAAIF,CAAE,EAAIC,EAAGL,CAAE,EAChC,GAAIW,EAAK,KAAOC,GAAK,KAAON,EAAK,KAAOF,EAAK,IAC3C,MAAMvzC,EACR,MAAO,CAAE,OAAQ,EAAE8zC,EAAIC,GAAIN,EAAIF,CAAE,EAAG,KAAM5oD,GAC3C,CACD,IAAK,OAAQ,CACX,GAAI,EAAGmpD,EAAE,CAAIC,GAAM,CAAAN,EAAQ,EAAAF,CAAE,EAAIC,EAAGL,CAAE,EACtC,GAAIW,EAAaX,EAAG,CAAC,IAAZ,IAAgBW,EAAK,IAAM,IAAMA,EAAIC,GAAaZ,EAAG,CAAC,IAAZ,IAAgBY,GAAK,IAAM,IAAMA,GAAIN,EAAaN,EAAG,CAAC,IAAZ,IAAgBM,EAAK,IAAM,IAAMA,EAAIF,EAAaJ,EAAG,CAAC,IAAZ,IAAgBI,EAAK,IAAMA,EAAIO,EAAK,KAAOC,GAAK,KAAON,EAAK,KAAOF,EAAK,GAAKA,EAAK,EACvN,MAAMvzC,EACR,MAAO,CAAE,OAAQ,CAAC,GAAG1c,EAAEwwD,EAAIC,GAAIN,CAAE,EAAGF,CAAE,EAAG,EAAGA,EAAI,KAAM5oD,EAAE,CACzD,CACD,IAAK,OAAQ,CACX,GAAI,CAAG,CAAAmpD,CAAE,EAAIX,EACPW,EAAG,SAAT,GAAyBA,EAAG,SAAT,IAAoBA,EAAKA,EAAG,MAAM,EAAE,EAAE,IAAKkG,GAAOA,EAAKA,CAAE,EAAE,KAAK,EAAE,GACrF,MAAMjG,GAAKD,EAAG,UAAU,EAAG,CAAC,EAC5B,IAAIkI,EAAKlI,EAAG,UAAU,CAAC,EACvB,OAAOkI,EAAKA,EAAK,SAASA,EAAI,EAAE,EAAI,IAAM,OAAQ,CAAE,OAAQ,CAAC,GAAG3kD,EAAE08C,EAAE,EAAGiI,CAAE,EAAG,EAAGA,EAAI,KAAMrxD,GAC1F,CACD,IAAK,OAAQ,CACX,GAAI,EAAGmpD,EAAIC,GAAIN,EAAM,CAAAF,CAAE,EAAIC,EAAGL,CAAE,EAChC,GAAII,EAAaJ,EAAG,CAAC,IAAZ,IAAgBI,EAAK,IAAMA,EAAIO,EAAK,KAAOC,GAAK,KAAON,EAAK,KAAOF,EAAK,GAAKA,EAAK,EACzF,MAAMvzC,EACR,MAAO,CAAE,OAAQ,CAAC,GAAGqzC,EAAES,EAAIC,GAAIN,CAAE,EAAGF,CAAE,EAAG,EAAGA,EAAI,KAAM5oD,EAAE,CACzD,CACD,IAAK,OAAQ,CACX,GAAI,EAAGmpD,EAAIC,GAAIN,EAAM,CAAAF,CAAE,EAAIC,EAAGL,CAAE,EAChC,GAAII,EAAaJ,EAAG,CAAC,IAAZ,IAAgBI,EAAK,IAAMA,EAAIO,EAAK,KAAOC,GAAK,KAAON,EAAK,KAAOF,EAAK,GAAKA,EAAK,EACzF,MAAMvzC,EACR,MAAO,CAAE,OAAQ,CAAC8zC,EAAIC,GAAIN,EAAIF,CAAE,EAAG,EAAGA,EAAI,KAAM5oD,EAAE,CACnD,CACF,CACP,MAAO,CAAE,OAAQ,KAAM,KAAM,IAAI,CAClC,CACD,SAASqpD,EAAEjB,GAAK,EAAGE,EAAK,EAAGO,EAAK,EAAGL,EAAK,EAAG,CACzC,MAAMxoD,GAAK,CAACmpD,GAAIC,IAAO,CAACiI,EAAK,KAAOjI,EAAG,CAACiI,EAAKlI,GAAG,IAAKkG,IAAO,OAAOA,GAAG,QAAQgC,CAAE,CAAC,CAAC,EAAIlI,EAAE,EAAGL,EAAK,CAAE,EAAGV,GAAI,EAAGE,EAAI,EAAGO,EAAI,EAAGL,EAAI,QAAS,CACrI,MAAMW,GAAK,CAACL,EAAG,EAAGA,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,EAClC,OAAOK,GAAG,SAAWnpD,GAAGmpD,GAAKkG,GAAO,QAAQA,EAAG,CAAC,CAAC,KAAKA,EAAG,CAAC,CAAC,MAAMA,EAAG,CAAC,CAAC,MAAMvG,EAAG,CAAC,GAAG,EAAGK,EACvF,EAAE,QAAS,CACV,MAAMA,GAAK,CAAC,GAAG77C,EAAEw7C,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,EACxC,OAAOK,GAAG,SAAWnpD,GAAGmpD,GAAKkG,GAAO,QAAQA,EAAG,CAAC,CAAC,KAAKA,EAAG,CAAC,CAAC,MAAMA,EAAG,CAAC,CAAC,MAAMvG,EAAG,CAAC,GAAG,EAAGK,EACvF,EAAE,QAAS,CACV,MAAMA,GAAK,CAAC,GAAGR,EAAEG,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,EACxC,OAAOK,GAAG,SAAWnpD,GAAGmpD,GAAKkG,GAAO,QAAQA,EAAG,CAAC,CAAC,KAAKA,EAAG,CAAC,CAAC,KAAKA,EAAG,CAAC,CAAC,KAAKvG,EAAG,CAAC,GAAG,EAAGK,EACrF,EAAE,QAAS,CACV,MAAMA,GAAK,SAASkG,EAAIjG,EAAIiI,GAAI,CAC9B,MAAMxC,GAAKlG,EAAE0G,EAAIjG,EAAIiI,EAAE,EAAGzC,GAAKC,GAAG,CAAC,EAAI,IAAKyE,GAAKzE,GAAG,CAAC,EAAI,IAAKjG,GAAKiG,GAAG,CAAC,EAAI,IAAK9F,GAAKN,EAAE,EAAImG,GAAI,EAAI0E,GAAI,EAAI1K,EAAE,EAC7G,MAAO,CAAC,KAAaG,KAAN,EAAW,GAAK,EAAI6F,GAAK7F,KAAO,EAAIA,KAAM,KAAaA,KAAN,EAAW,GAAK,EAAIuK,GAAKvK,KAAO,EAAIA,KAAM,KAAaA,KAAN,EAAW,GAAK,EAAIH,GAAKG,KAAO,EAAIA,KAAM,IAAMA,EAAE,CAC/K,EAAYD,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,EAClB,OAAOK,GAAG,SAAWnpD,GAAGmpD,GAAKkG,GAAO,QAAQA,EAAG,CAAC,CAAC,MAAMA,EAAG,CAAC,CAAC,MAAMA,EAAG,CAAC,CAAC,MAAMA,EAAG,CAAC,CAAC,IAAI,EAAGlG,EAC1F,EAAE,QAAS,CACV,MAAMA,GAAK,SAASkG,EAAIgG,GAAIhE,GAAI,CAC9B,OAAO1I,EAAE0G,EAAIgG,GAAIhE,EAAE,EAAE,IAAKu7E,IAAOzqI,EAAEyqI,EAAE,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,CACrE,EAAC9jF,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,EAAGM,EAAKN,EAAG,GAAK,EAAI,GAAK,QAAQ,IAAMA,EAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,YAAa,EAAC,SAAS,EAAG,GAAG,EACrH,OAAOM,GAAMD,GAAG,KAAKC,CAAE,EAAGD,GAAG,SAAW,IAAM,IAAIA,GAAG,KAAK,EAAE,EAAE,YAAa,IAAIA,EAChF,EAAE,MAAO,IAAME,EAAEP,EAAG,EAAGA,EAAG,EAAGA,EAAG,EAAGA,EAAG,CAAC,CAAC,EACzC,OAAOA,CACR,CACD,MAAMpoB,EAAK0nB,IAAO,KAAK,IAAI,KAAK,IAAIA,GAAI,CAAC,EAAG,CAAC,EAC7C,SAASkB,GAAElB,GAAI,CACb,MAAME,EAAK,CAAE,QAAS,OAAO,OAAO,CAAE,KAAM,KAAM,SAAU,IAAM,EAAG,OAAQ,IAAM,CAAC,EAAIF,EAAE,EAAG,UAAUe,EAAI,CACzG,KAAM,CAAE,QAASkI,EAAI,EAAG/I,EAAI,CAAE,KAAMuG,EAAI,IAAK7uD,CAAI,EAAGmpD,EACpD,GAAI,SAAS,gBAAkBkI,GAAG,QAAS,CACzC,KAAM,CAAE,KAAMs7E,EAAI,EAAGrkF,EAAG,QAASQ,GAAmB9oD,IAAd,UAAkBoxD,GAAsBpxD,IAAjB,aAAqB+oD,GAAqB/oD,IAAhB,YAAoBgpD,GAAqBhpD,IAAhB,YAChH,GAAkB6uD,IAAd,YAAqB/F,IAAMsI,IAAMrI,IAAMC,IAAK,CAC9C,IAAI6jF,GAAK,EAAGj+E,GAAK,EACT+9E,KAAR,IAAaE,GAAK/jF,IAAMsI,GAAK,EAAI,GAAau7E,KAAR,IAAaE,GAAK/jF,IAAMsI,GAAK,GAAK,GAAKxC,GAAK9F,GAAK,GAAKC,GAAK,EAAI,EAAG8jF,GAAK7jF,GAAK,GAAKoI,GAAK,EAAI,GAAI9I,EAAG,OAAO5nB,EAAE4nB,EAAG,MAAM,EAAI,IAAOukF,EAAE,EAAGnsG,EAAE4nB,EAAG,MAAM,EAAI,IAAOsG,EAAE,CAAC,EAAGzF,EAAG,gBACzM,MACCnpD,EAAG,WAAW,OAAO,IAAMsoD,EAAG,QAAQ,SAAUa,EAAG,eAAc,EACpE,CACX,EAAW,UAAUA,EAAI,CACf7tD,EAAE,SAAU,CAAC,UAAW,WAAY,aAAa,EAAGgtD,EAAG,QAAQ,EAAGhtD,EAAE,SAAU,CAAC,YAAa,WAAW,EAAGgtD,EAAG,QAAQ,EAAGa,EAAG,YAAcA,EAAG,iBAAkBb,EAAG,SAASa,CAAE,CACtL,EAAW,SAASA,EAAI,CACd,KAAM,CAAE,QAASkI,GAAI,MAAOxC,GAAOvG,EAAI,CAAE,KAAMtoD,EAAI,QAAS8oD,GAAI,QAASsI,EAAI,EAAGC,GAAItI,GAAKqI,GAAG,wBAC5F,IAAIpI,GAAK,EAAGC,GAAK,EACjB,GAAIE,EAAI,CACN,MAAMC,GAAKD,GAAMA,EAAG,SAAWA,EAAG,QAAQ,CAAC,EAC3CH,GAAKG,GAAMC,IAAMD,GAAI,QAAU,EAAGF,GAAKE,GAAMC,IAAMD,GAAI,QAAU,EAAGH,GAAKD,GAAG,KAAOC,GAAKD,GAAG,KAAOC,GAAKD,GAAG,KAAOA,GAAG,QAAUC,GAAKD,GAAG,KAAOA,GAAG,OAAQE,GAAKF,GAAG,IAAME,GAAKF,GAAG,IAAME,GAAKF,GAAG,IAAMA,GAAG,SAAWE,GAAKF,GAAG,IAAMA,GAAG,QAASC,IAAMD,GAAG,KAAME,IAAMF,GAAG,GACnQ,MACC8F,IAAO7F,GAAK6F,EAAG,EAAI9F,GAAG,MAAOE,GAAK4F,EAAG,EAAI9F,GAAG,QACtC/oD,IAAR,MAAe8oD,GAAG,MAAM,KAAO,QAAQE,GAAKD,GAAG,MAAQ,GAAG,OAAOD,GAAG,YAAc,CAAC,OAAgB9oD,IAAR,MAAe8oD,GAAG,MAAM,IAAM,QAAQG,GAAKF,GAAG,OAAS,GAAG,OAAOD,GAAG,aAAe,CAAC,OAAQR,EAAG,MAAQ,CAAE,EAAGU,GAAKD,GAAG,MAAO,EAAGE,GAAKF,GAAG,QACjO,MAAM4M,GAAKj1B,EAAEsoB,GAAKD,GAAG,KAAK,EAAGoI,GAAKzwB,EAAEuoB,GAAKF,GAAG,MAAM,EAClD,OAAQ/oD,EAAE,CACR,IAAK,IACH,OAAOqxD,GAAG,SAASsE,EAAE,EACvB,IAAK,IACH,OAAOtE,GAAG,SAASF,EAAE,EACvB,QACE,OAAOE,GAAG,SAASsE,GAAIxE,EAAE,CAC5B,CACF,EAAE,UAAW,CACZ7I,EAAG,QAAQ,SAAU/lC,EAAE,SAAU,CAAC,UAAW,WAAY,aAAa,EAAG+lC,EAAG,QAAQ,EAAG/lC,EAAE,SAAU,CAAC,YAAa,WAAW,EAAG+lC,EAAG,QAAQ,CAC3I,EAAE,SAAU,CACXA,EAAG,SAAQ,CACZ,EAAE,OAAOa,EAAK,EAAGkI,GAAK,EAAG,CACxB,KAAM,CAAE,KAAMxC,EAAI,IAAK7uD,EAAI,MAAO8oD,GAAI,OAAQsI,EAAI,EAAG9I,EAAG,QAAQ,QAAQ,sBAAqB,EACrFA,EAAG,QAAQ,OAAnB,MAA4B+I,GAAKlI,GAAKb,EAAG,SAAS,CAAE,QAASuG,EAAK/F,GAAKK,EAAI,QAASnpD,EAAKoxD,GAAKC,EAAE,CAAE,CACnG,EAAE,SAAU,CACX,KAAM,CAAE,QAASlI,EAAI,UAAWkI,GAAI,UAAWxC,CAAI,EAAGvG,EACtD/lC,EAAE,SAAU,CAAC,UAAW,OAAO,EAAGssC,CAAE,EAAGtsC,EAAE,CAAC4mC,EAAG,QAASA,EAAG,OAAO,EAAG,YAAakI,EAAE,EAAG9uC,EAAE,CAAC4mC,EAAG,QAASA,EAAG,OAAO,EAAG,aAAckI,GAAI,CAAE,QAAS,EAAO,EAC/J,GAAa,CAAE,QAASxI,EAAI,UAAWL,EAAI,UAAWI,EAAI,EAAGN,EACrD,OAAOhtD,EAAE,CAACutD,EAAG,QAASA,EAAG,OAAO,EAAG,YAAaL,CAAE,EAAGltD,EAAE,CAACutD,EAAG,QAASA,EAAG,OAAO,EAAG,aAAcL,EAAI,CAAE,QAAS,EAAO,GAAGltD,EAAE,SAAU,CAAC,UAAW,OAAO,EAAGstD,EAAE,EAAGN,CAChK,CACD,SAAS9jB,GAAE4jB,GAAK,GAAI,CAClBA,GAAK,OAAO,OAAO,CAAE,SAAU,IAAM,EAAG,UAAW,GAAI,SAAU,EAAI,EAAEA,EAAE,EACzE,MAAME,EAAKhtD,EAAE8sD,GAAG,SAAU,QAAUgB,GAAO,CACzChB,GAAG,SAAS,QAASS,GAAOA,EAAG,UAAUO,EAAG,SAAWP,EAAK,MAAQ,QAAQ,EAAET,GAAG,SAAS,CAAC,EAAGA,GAAG,SAASgB,CAAE,EAAGA,EAAG,iBAC5H,CAAS,EACD,MAAO,CAAE,QAAS,IAAM7mC,EAAE,GAAG+lC,CAAE,CAAC,CACjC,CACD,MAAMkB,GAAI,CAAE,iBAAkB,CAAE,MAAO,MAAO,OAAQ,MAAO,IAAK,KAAO,EAAE,kBAAmB,CAAE,IAAK,OAAQ,MAAO,OAAQ,OAAQ,OAAQ,KAAM,MAAQ,EAAE,SAAU,SAAU,OAAQ,EAAG,QAAS,CAAC,EAAIQ,GAAI,CAAC5B,GAAIE,EAAIO,IAAO,CAC3N,MAAML,EAAiB,OAAOJ,IAAnB,UAAyBA,cAAc,YAAc,CAAE,UAAWA,GAAI,OAAQE,EAAI,GAAGO,CAAE,EAAKT,GACvG,MAAO,CAAE,OAAOe,GAAKX,EAAI,CACvB,KAAM,CAAE,UAAWY,EAAI,OAAQiI,IAAO,OAAO,OAAO7I,EAAIW,EAAE,EAC1D,GAAI,CAACkI,IAAM,CAACjI,EACV,MAAM,IAAI,MAAM,uCAAuC,EACzD,OAAQ,CAACiG,EAAIgG,EAAIs3E,KAAO,CACtB,KAAM,CAAE,UAAW99E,GAAI,MAAO7uD,GAAI,OAAQ8oD,GAAI,QAASF,GAAI,SAAUG,GAAI,iBAAkBC,GAAI,kBAAmBC,EAAE,EAAK,CAAE,UAAW,SAAS,gBAAgB,sBAAqB,EAAI,GAAGO,GAAG,GAAGmjF,EAAI,EAAE,CAAE,KAAMh3E,GAAI,IAAKxE,EAAI,EAAGkE,EAAG,MAClOA,EAAG,MAAM,KAAO,IAAKA,EAAG,MAAM,IAAM,IACpC,MAAMnM,GAAKmG,EAAG,wBAAyBmG,GAAKH,EAAG,sBAAuB,EAAEK,GAAK,CAAE,EAAGxM,GAAG,IAAMsM,GAAG,OAAS1M,GAAI,EAAGI,GAAG,OAASJ,GAAI,EAAGI,GAAG,MAAQJ,GAAI,EAAGI,GAAG,KAAOsM,GAAG,MAAQ1M,EAAE,EAAI8M,GAAK,CAAE,GAAI1M,GAAG,KAAM,GAAIA,GAAG,KAAOA,GAAG,MAAQ,EAAIsM,GAAG,MAAQ,EAAG,GAAItM,GAAG,KAAOA,GAAG,MAAQsM,GAAG,MAAO,GAAItM,GAAG,IAAK,GAAIA,GAAG,OAASA,GAAG,OAAS,EAAIsM,GAAG,OAAS,EAAG,GAAItM,GAAG,OAASsM,GAAG,MAAQ,EAAE,CAACM,GAAID,GAAK,QAAQ,EAAI9M,GAAG,MAAM,GAAG,EAAGqhB,GAAKnhB,GAAG6M,EAAE,EAAGL,GAAKzM,GAAG6M,EAAE,EAAG,CAAE,IAAKi3E,GAAI,KAAMC,GAAI,OAAQh3E,GAAI,MAAOzpB,EAAI,EAAGuiB,GACtd,UAAW+9E,MAAMxiE,GAAI,CACnB,MAAM4iE,GAAaJ,KAAR,KAAsBA,KAAR,IACzB,IAAIC,GAAKn3E,GAAGk3E,EAAE,EACd,KAAM,CAACt5E,GAAI25E,EAAE,EAAID,GAAK,CAAC,MAAO,MAAM,EAAI,CAAC,OAAQ,KAAK,EAAG,CAACE,GAAIC,EAAE,EAAIH,GAAK,CAACx3E,GAAG,OAAQA,GAAG,KAAK,EAAI,CAACA,GAAG,MAAOA,GAAG,MAAM,EAAG,CAAC43E,GAAIC,EAAE,EAAIL,GAAK,CAACj3E,GAAIzpB,EAAE,EAAI,CAACA,GAAIypB,EAAE,EAAG,CAACu3E,GAAIC,EAAE,EAAIP,GAAK,CAACF,GAAIC,EAAE,EAAI,CAACA,GAAID,EAAE,EAC/L,GAAI,EAAED,GAAKS,IAAMT,GAAKK,GAAKtkF,GAAKwkF,IAC9B,UAAWI,MAAM/3E,GAAI,CACnB,IAAIg4E,GAAK73E,IAAIo3E,GAAK,IAAM,KAAOQ,EAAE,EACjC,GAAI,EAAEC,GAAKF,IAAME,GAAKN,GAAKvkF,GAAKykF,IAAK,CACnC,GAAII,IAAMj4E,GAAGy3E,EAAE,EAAGJ,IAAMr3E,GAAGlC,EAAE,EAAG+B,EAAG,MAAM43E,EAAE,EAAI,GAAGQ,EAAE,KAAMp4E,EAAG,MAAM/B,EAAE,EAAI,GAAGu5E,EAAE,KAAM7sI,GAAI,CACtF,MAAM0tI,GAAKV,GAAK9jF,GAAG,MAAQ,EAAIA,GAAG,OAAS,EAAGykF,GAAK,EAAID,GAAKP,GAAKjkF,GAAG+jF,EAAE,EAAIS,GAAKD,GAAKN,GAAK,EACzFN,GAAK3jF,GAAGoK,EAAE,IAAMu5E,IAAMK,IAAKltI,GAAG,MAAMitI,EAAE,EAAI,GAAGU,EAAE,KAAM3tI,GAAG,MAAMszD,EAAE,EAAI,GAAGu5E,EAAE,IAC1E,CACD,OAAOD,GAAKY,EACb,CACF,CACJ,CACD,OAAOn4E,EAAG,MAAM,KAAOM,GAAIN,EAAG,MAAM,IAAMlE,GAAI,IAC1D,GAAa/H,EAAIiI,GAAI7I,CAAE,CACvB,EACA,EACYolF,GAAK,MAAMA,EAAG,CAClB,YAAYxlF,EAAI,CACd1uD,GAAc,KAAM,sBAAuB,EAAI,EAC/CA,GAAc,KAAM,UAAW,EAAI,EACnCA,GAAc,KAAM,WAAY,IAAI,EACpCA,GAAc,KAAM,QAAS,IAAI,EACjCA,GAAc,KAAM,SAAU2vD,EAAG,GACjC3vD,GAAc,KAAM,aAAc2vD,EAAG,GACrC3vD,GAAc,KAAM,gBAAiB,EAAE,EACvCA,GAAc,KAAM,uBAAwB,IAAI,EAChDA,GAAc,KAAM,iBAAkB,CAAE,KAAM,GAAI,KAAM,GAAI,KAAM,CAAE,EAAE,KAAM,GAAI,MAAO,GAAI,OAAQ,CAAE,EAAE,WAAY,GAAI,OAAQ,GAAI,aAAc,CAAE,EAAE,EACrJ,KAAK,QAAU0uD,EAAK,OAAO,OAAO,CAAE,GAAGwlF,GAAG,iBAAmBxlF,CAAE,EAC/D,KAAM,CAAE,SAAUE,EAAI,WAAYO,EAAI,MAAOL,GAAI,QAASxoD,EAAI,YAAa8oD,GAAI,QAASF,CAAE,EAAKR,EAC/F,CAAC,OAAQ,UAAU,EAAE,SAASI,EAAE,GAAK,CAACxoD,IAAOooD,EAAG,QAAU,KAAMS,EAAG,cAAgBA,EAAG,YAAc,IACpG,KAAM,CAAE,QAASE,EAAI,QAASC,GAAI,IAAKC,GAAI,QAAS0M,EAAI,EAAG9M,EAC3DA,EAAG,QAAU,CAACC,IAAME,GAAIH,EAAG,QAAU8M,IAAM5M,GAAMC,IAAMC,GAAI,KAAK,UAAW,EAAE,KAAK,iBAAgB,EAAI,KAAK,YAAa,EAAE,KAAK,YAAW,EAAIX,GAAMA,EAAG,QAAUA,EAAG,QAASa,IAAO,KAAK,UAAUA,EAAE,CAAC,EACtM,KAAM,CAAE,OAAQgI,GAAI,IAAKjI,EAAI,EAAG,KAAK,MACrC,KAAK,SAAWc,GAAEmH,GAAIjI,GAAI,CAAE,OAAQN,CAAI,GAAGuI,GAAG,aAAa,OAAQ,QAAQ,EAAGA,GAAG,aAAa,aAAc,KAAK,GAAG,YAAY,CAAC,EACjI,MAAMqE,GAAK,KACX,KAAK,qBAAuB,sBAAsB,SAASpM,IAAK,CAC9D,GAAI,CAACF,GAAG,YACN,OAAO,sBAAsBE,EAAE,EACjCoM,GAAG,SAASpN,EAAG,OAAO,EAAGoN,GAAG,qBAAoB,EAAIpN,EAAG,wBAA0BoN,GAAG,gBAAkBpN,EAAG,sBAAuBoN,GAAG,uBAAuBA,GAAG,eAAe,GAAIpN,EAAG,YAAcoN,GAAG,KAAM,EAAEA,GAAG,oBAAsB,GAAOA,GAAG,MAAM,MAAM,CACvQ,CAAW,CACF,CACD,WAAY,CACV,KAAM,CAAE,QAASpN,CAAI,EAAG,KACxB,UAAWE,IAAM,CAAC,KAAM,WAAW,EACjCF,EAAGE,CAAE,EAAIrqB,EAAEmqB,EAAGE,CAAE,CAAC,EACnB,KAAK,OAAUa,GAAO,CACpB,KAAM,CAAE,WAAYb,EAAI,YAAaO,GAAI,OAAQL,EAAI,SAAUxoD,GAAI,MAAO8oD,EAAI,YAAaF,CAAI,EAAGO,EAAG,QAASH,GAAMqG,IAAOA,GAAK,GAAK,8BAA+BpG,GAAMG,IAAOD,EAAG,GAAGC,EAAE,EAAGuM,GAAKj9D,EAAE;AAAA;AAAA;AAAA,UAGrMmwD,GAAK,GAAK,kEAAkE;AAAA;AAAA,yCAE7C7oD,IAAM,EAAE,iBAAiB8oD,CAAE,KAAKN,EAAK,0BAA4B,EAAE,gBAAgBS,GAAG,WAAW,CAAC;AAAA,uCACpGD,GAAGV,EAAG,OAAO,CAAC;AAAA,4DACOU,GAAGV,EAAG,OAAO,CAAC;AAAA,0FACgBW,GAAG,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iFAM7BA,GAAG,cAAc,CAAC;AAAA;AAAA;AAAA,wDAG3CD,GAAGV,EAAG,GAAG,CAAC;AAAA;AAAA,uFAEqBW,GAAG,UAAU,CAAC;AAAA;AAAA;AAAA,4DAGzCD,GAAGV,EAAG,OAAO,CAAC;AAAA;AAAA,2FAEiBW,GAAG,cAAc,CAAC;AAAA;AAAA;AAAA;AAAA,qCAIxEX,EAAG,QAAU,GAAK,UAAU;AAAA;AAAA,4DAELU,GAAG,OAAO,KAAKV,EAAG,WAAW,EAAE,MAAM,CAAC;AAAA,qFACbU,GAAGV,EAAG,YAAY,KAAK,CAAC,gBAAgBW,GAAG,YAAY,CAAC;AAAA;AAAA,6EAEhEL,EAAK,MAAQ,MAAM,mBAAmBI,GAAGV,EAAG,YAAY,GAAG,CAAC;AAAA,6EAC5DM,EAAK,MAAQ,MAAM,mBAAmBI,GAAGV,EAAG,YAAY,IAAI,CAAC;AAAA,6EAC7DM,EAAK,MAAQ,MAAM,mBAAmBI,GAAGV,EAAG,YAAY,IAAI,CAAC;AAAA,6EAC7DM,EAAK,MAAQ,MAAM,mBAAmBI,GAAGV,EAAG,YAAY,IAAI,CAAC;AAAA,iGACzCU,GAAGV,EAAG,YAAY,IAAI,CAAC;AAAA;AAAA,yDAE/DW,GAAG,UAAU,CAAC,mBAAmBD,GAAGV,EAAG,YAAY,IAAI,CAAC,gBAAgBW,GAAG,eAAe,CAAC;AAAA,6DACvFA,GAAG,YAAY,CAAC,mBAAmBD,GAAGV,EAAG,YAAY,MAAM,CAAC,gBAAgBW,GAAG,iBAAiB,CAAC;AAAA,2DACnGA,GAAG,WAAW,CAAC,mBAAmBD,GAAGV,EAAG,YAAY,KAAK,CAAC,gBAAgBW,GAAG,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA,KAIpJ,EAAGkI,GAAKwE,GAAG,YACJ,OAAOxE,GAAG,QAAQ,KAAM9B,IAAO,CAACA,GAAG,QAAU,CAACA,GAAG,UAAU,IAAI,QAAQ,CAAC,EAAG8B,GAAG,KAAO,IAAMA,GAAG,QAAQ,KAAM9B,IAAOA,GAAG,UAAU,SAAS,QAAQ,CAAC,EAAGsG,EACjK,GAAa,IAAI,EAAGvN,EAAG,cAAgB,KAAK,MAAM,OAASA,EAAG,IAAKA,EAAG,UAAU,YAAY,KAAK,MAAM,IAAI,CAClG,CACD,aAAc,CACZ,MAAMA,EAAK,KAAK,QAASE,EAAK,KAAK,MACnC,GAAIF,EAAG,UAAU,YAAYE,EAAG,IAAI,EAAGF,EAAG,OAAQ,CAChD,MAAMS,EAAKT,EAAG,GAAG,cACjBA,EAAG,GAAG,YAAcS,EAAG,aAAaP,EAAG,IAAKF,EAAG,GAAG,WAAW,EAAIS,EAAG,YAAYP,EAAG,GAAG,CACvF,MACCF,EAAG,UAAU,YAAYE,EAAG,GAAG,EACjCF,EAAG,YAAcA,EAAG,QAAUA,EAAG,GAAG,OAAQ,EAAGA,EAAG,GAAG,WAAW,aAAaE,EAAG,KAAMF,EAAG,EAAE,EAAGA,EAAG,UAAY,KAAK,QAAO,EAAIA,EAAG,aAAeE,EAAG,OAAO,MAAM,WAAa,OAAQF,EAAG,cAAgBE,EAAG,QAAQ,UAAU,MAAM,WAAa,SAAU,KAAK,MAC/P,CACD,kBAAmB,CACjB,MAAMF,EAAK,KAAME,EAAK,KAAK,QAAQ,WAAYO,GAAMT,EAAG,QAAQ,SAAW,KAAK,OAAO,CAAC,EAAG,CAACI,GAAIxoD,CAAE,EAAI6oD,EAAG,MAAM,UAAU,EAAIA,EAAK,CAAE,EAAEC,GAAK,IAAM,KAAK,SAAW,KAAK,OAAS,KAAK,WAAW,MAAK,GAAKF,EAAK,CAAE,QAASU,GAAE,CAAE,QAASlB,EAAG,MAAM,QAAQ,OAAQ,QAASA,EAAG,MAAM,QAAQ,QAAS,OAAQ,IAAMA,EAAG,MAAM,aAAc,SAAUA,CAAE,EAAG,SAASiJ,EAAIxC,GAAI,CACrW,GAAI,CAACvG,EAAG,QACN,OACF,MAAMsG,GAAK9F,GAAI,EAAE,CAAE,MAAOsI,GAAI,QAASrI,EAAE,EAAKX,EAAI,CAAE,UAAWY,GAAI,aAAcC,EAAI,EAAGmI,GAAG,QAC3FhJ,EAAG,UAAYwG,GAAG,EAAI,IAAMyC,EAAIzC,GAAG,EAAI,IAAM,IAAMC,GAAID,GAAG,EAAI,IAAMA,GAAG,EAAI,GAAIxG,EAAG,cAAc,QAAQ,GACxG,MAAMuN,GAAK/G,GAAG,OAAQ,EAAC,SAAS,CAAC,EACjC,KAAK,QAAQ,MAAM,WAAa+G,GAAI,KAAK,QAAQ,MAAM,WAAa;AAAA,gEAChB/G,GAAG,CAAC;AAAA,wDACZA,GAAG,CAAC,gBAAgBA,GAAG,CAAC,0BAA0BA,GAAG,CAAC;AAAA,sBACvF7F,GAAG,WAAaA,GAAG,aAAeX,EAAG,YAAcY,GAAG,MAAM,YAAY,cAAe2M,EAAE,GAAKvE,GAAG,OAAO,MAAM,YAAY,cAAeuE,EAAE,EAAGvE,GAAG,OAAO,UAAU,OAAO,OAAO,GAC3L,MAAMD,GAAKvC,GAAG,OAAQ,EAAC,SAAQ,EAC/B,SAAW,CAAE,GAAIxF,GAAI,MAAOujF,EAAE,IAAMvkF,EAAG,cACrCgB,GAAG,UAAU+H,KAAOw7E,GAAG,OAAM,EAAG,SAAQ,EAAK,MAAQ,QAAQ,EAAE,YAAY,EAC7E1jF,GAAG,MAAM,YAAY,cAAe0M,EAAE,CACvC,EAAE,EAAG,IAAKrM,GAAE,CAAE,KAActpD,IAAR,IAAa,IAAM,IAAK,QAASooD,EAAG,MAAM,IAAI,OAAQ,QAASA,EAAG,MAAM,IAAI,OAAQ,OAAQ,IAAMA,EAAG,MAAM,aAAc,SAAUA,CAAE,EAAG,SAASiJ,EAAI,CACxK,GAAI,CAAC/I,EAAG,KAAO,CAACA,EAAG,QACjB,OACF,MAAMuG,GAAK/F,KACXV,EAAG,UAAYyG,GAAG,EAAI,IAAMwC,GAAK,KAAK,QAAQ,MAAM,gBAAkB,OAAOxC,GAAG,CAAC,eAAgBjG,EAAG,QAAQ,SAC7G,EAAE,EAAG,QAASU,GAAE,CAAE,KAAcd,KAAR,IAAa,IAAM,IAAK,QAASJ,EAAG,MAAM,QAAQ,OAAQ,QAASA,EAAG,MAAM,QAAQ,OAAQ,OAAQ,IAAMA,EAAG,MAAM,aAAc,SAAUA,CAAE,EAAG,SAASiJ,EAAI,CACpL,GAAI,CAAC/I,EAAG,SAAW,CAACA,EAAG,QACrB,OACF,MAAMuG,GAAK/F,KACXV,EAAG,UAAYyG,GAAG,EAAI,KAAK,MAAM,IAAMwC,CAAE,EAAI,KAAM,KAAK,QAAQ,MAAM,WAAa,iBAAiBxC,GAAG,CAAC,IAAKjG,EAAG,QAAQ,SACzH,EAAE,EAAG,WAAYpkB,GAAE,CAAE,SAAU4jB,EAAG,MAAM,YAAY,QAAS,UAAW,SAAU,SAASgB,EAAI,CAC9FhB,EAAG,gBAAkBgB,EAAG,OAAO,aAAa,WAAW,EAAE,YAAa,EAAEhB,EAAG,SAAWA,EAAG,cAAc,QAAQ,CAChH,EAAE,CAAC,EACJ,KAAK,YAAcQ,CACpB,CACD,aAAc,CACZ,KAAM,CAAE,MAAOR,EAAI,QAASE,CAAI,EAAG,KAAMO,EAAK,CAACvtD,EAAE8sD,EAAG,YAAY,MAAO,QAAS,IAAM,KAAK,YAAa,GAAG9sD,EAAE,CAAC8sD,EAAG,YAAY,OAAQA,EAAG,QAAQ,SAAS,EAAG,QAAS,IAAM,CACzK,KAAK,QAAQ,IAAI,KAAK,YAAc,KAAK,QAAQ,OAAM,EAAI,EAAI,EAAG,KAAK,MAAM,QAAQ,CACjG,CAAW,EAAG9sD,EAAE8sD,EAAG,YAAY,KAAM,QAAS,IAAM,CACxC,CAAC,KAAK,cAAgB,CAACE,EAAG,YAAc,KAAK,MACzD,CAAW,EAAGhtD,EAAE8sD,EAAG,YAAY,OAAQ,CAAC,QAAS,OAAO,EAAIe,IAAO,CACvD,KAAK,SAASA,GAAG,OAAO,MAAO,EAAI,GAAK,CAAC,KAAK,sBAAwB,KAAK,MAAM,SAAU,KAAK,OAAQ,QAAS,IAAI,EAAG,KAAK,MAAM,aAAc,QAAS,IAAI,GAAIA,GAAG,yBAAwB,CACzM,CAAW,EAAG7tD,EAAE8sD,EAAG,YAAY,OAAQ,CAAC,QAAS,MAAM,EAAIe,IAAO,CACtD,KAAK,QAAqBA,GAAG,OAAd,OAAoB,KAAK,SAAW,KAAK,cAAc,IAAI,CACtF,CAAW,EAAG7tD,EAAE,CAAC8sD,EAAG,QAAQ,QAASA,EAAG,QAAQ,OAAQA,EAAG,IAAI,OAAQA,EAAG,IAAI,OAAQA,EAAG,QAAQ,OAAQA,EAAG,QAAQ,MAAM,EAAG,CAAC,YAAa,YAAY,EAAG,IAAM,KAAK,QAAU,GAAM,CAAE,QAAS,EAAM,EAAC,EAC7L,GAAI,CAACE,EAAG,WAAY,CAClB,MAAME,GAAKF,EAAG,aACdO,EAAG,KAAKvtD,EAAE8sD,EAAG,OAAQ,QAAS,IAAM,KAAK,OAAM,EAAK,KAAK,KAAI,EAAK,KAAK,KAAI,CAAE,EAAG9sD,EAAE,SAAU,QAAU6tD,GAAO,KAAK,OAAQ,IAAKA,EAAG,MAAQX,IAAMW,EAAG,OAASX,KAAO,KAAK,KAAM,GAAGltD,EAAE,SAAU,CAAC,aAAc,WAAW,EAAI8tD,GAAO,CAChO,KAAK,OAAM,GAAM,CAACh9C,EAAEg9C,CAAE,EAAE,KAAMiM,IAAOA,KAAOjN,EAAG,KAAOiN,KAAOjN,EAAG,MAAM,GAAK,KAAK,MACjF,EAAE,CAAE,QAAS,EAAM,EAAC,CACtB,CACD,GAAIE,EAAG,kBAAmB,CACxB,MAAMc,GAAK,CAAE,KAAM,CAAC,IAAK,IAAK,IAAK,CAAC,EAAG,KAAM,CAAC,IAAK,IAAK,IAAK,CAAC,EAAG,KAAM,CAAC,IAAK,IAAK,IAAK,CAAC,EAAG,KAAM,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EACrHtsC,EAAEsrC,EAAG,YAAY,OAAQ,CAACe,EAAIkI,GAAI7I,IAAO,CACvC,MAAMxoD,EAAKopD,GAAG,KAAK,uBAAwB,EAAC,YAAW,CAAE,EACzD,GAAIppD,EAAI,CACN,MAAMq1D,GAAKr1D,EAAGwoD,CAAE,EAAGM,GAAKK,GAAMkM,IAAM,IAAM,IAAMhE,GAAKA,IACrD,OAAOvI,IAAM,EAAI,EAAI,QAAQA,GAAKuM,GAAKvM,GAAKuM,IAAI,YAAY,CAAC,CAAC,CAC/D,CACD,OAAOlM,CACrB,CAAa,CACF,CACD,GAAIb,EAAG,gBAAkB,CAACA,EAAG,OAAQ,CACnC,IAAIa,GAAK,KACT,MAAMX,EAAK,KACXK,EAAG,KAAKvtD,EAAE,OAAQ,CAAC,SAAU,QAAQ,EAAG,IAAM,CAC5CktD,EAAG,OAAM,IAAOF,EAAG,eAAiBE,EAAG,KAAM,EAAWW,KAAT,MAAeA,GAAK,WAAW,IAAMA,GAAK,KAAM,GAAG,EAAG,sBAAsB,SAASC,IAAK,CACvIZ,EAAG,qBAAoB,EAAaW,KAAT,MAAe,sBAAsBC,EAAE,CACnE,KAAM,aAAaD,EAAE,EAAGA,GAAK,WAAW,IAAMA,GAAK,KAAM,GAAG,GAC9D,EAAE,CAAE,QAAS,EAAM,EAAC,CACtB,CACD,KAAK,eAAiBN,CACvB,CACD,sBAAuB,CACrB,KAAM,CAAE,QAAST,CAAI,EAAG,KACxB,GAAI,CAACA,EAAG,QACF,CAAC,KAAK,SAAS,OAAO,CAAE,UAAW,SAAS,KAAK,sBAAqB,EAAI,SAAUA,EAAG,QAAU,GAAG,CACtG,MAAMe,EAAK,KAAK,MAAM,IAAKb,EAAKa,EAAG,wBACnCA,EAAG,MAAM,KAAO,OAAO,YAAcb,EAAG,QAAU,EAAI,KAAMa,EAAG,MAAM,MAAQ,OAAO,WAAab,EAAG,OAAS,EAAI,IAClH,CAEJ,CACD,cAAcF,EAAI,CAChB,KAAM,CAAE,MAAOE,EAAI,OAAQO,EAAI,QAASL,EAAI,EAAG,KAC/C,GAAIF,EAAG,YAAY,OAAQ,CACzB,MAAMa,EAAK,KAAKb,EAAG,YAAY,KAAI,EAAG,aAAa,WAAW,CAAC,GAC/DA,EAAG,YAAY,OAAO,MAAsB,OAAOO,EAAGM,CAAE,GAA1B,WAA8BN,EAAGM,CAAE,EAAC,EAAG,SAASX,GAAG,eAAe,EAAI,EACrG,CACD,CAAC,KAAK,qBAAuB,KAAK,SAAW,KAAK,MAAM,SAAUK,EAAIT,EAAI,IAAI,CAC/E,CACD,YAAYA,EAAK,GAAO,CACtB,KAAM,CAAE,MAAOE,EAAI,QAASO,CAAE,EAAK,KACnCA,EAAG,aAAeP,EAAG,OAAO,MAAM,YAAY,cAAe,qBAAqB,EAAGA,EAAG,OAAO,UAAU,IAAI,OAAO,EAAGO,EAAG,YAAc,KAAK,KAAI,EAAI,KAAK,WAAa,KAAM,KAAK,qBAAuBT,IAAO,KAAK,MAAM,OAAQ,IAAI,EAAG,KAAK,MAAM,OAAO,EAC7P,CACD,iBAAiBA,EAAI,CACnB,KAAM,CAAE,OAAQE,EAAI,KAAMO,EAAI,EAAGL,EAAE,EAAK1uD,EAAEsuD,CAAE,EAAG,CAAE,YAAapoD,CAAE,EAAK,KAAK,QAAS8oD,GAAgBN,KAAX,QAAuBA,KAAN,EACzG,OAAOF,GAAYA,EAAG,SAAT,IAAoBA,EAAG,CAAC,EAAI,QAAS,CAAE,OAAQ,CAACA,GAAMtoD,GAAM8oD,GAAK,KAAOR,EAAI,KAAMO,EAChG,CACD,GAAGT,EAAI,CACL,OAAO,KAAK,QAAQ,KAAKA,CAAE,GAAKwlF,GAAG,cAAcxlF,CAAE,CACpD,CACD,MAAMA,KAAOE,EAAI,CACf,KAAK,eAAeF,CAAE,EAAE,QAASe,GAAOA,EAAG,GAAGb,EAAI,IAAI,CAAC,CACxD,CACD,GAAGF,EAAIE,EAAI,CACT,OAAO,KAAK,eAAeF,CAAE,EAAE,KAAKE,CAAE,EAAG,IAC1C,CACD,IAAIF,EAAIE,EAAI,CACV,MAAMO,EAAK,KAAK,eAAeT,CAAE,GAAK,GAAII,GAAKK,EAAG,QAAQP,CAAE,EAC5D,MAAO,CAACE,IAAMK,EAAG,OAAOL,GAAI,CAAC,EAAG,IACjC,CACD,UAAUJ,EAAI,CACZ,KAAM,CAAE,OAAQE,CAAE,EAAK,KAAK,iBAAiBF,CAAE,EAC/C,GAAIE,EAAI,CACN,KAAM,CAAE,cAAea,EAAI,MAAON,EAAI,EAAG,KAAML,EAAKa,EAAE,GAAGf,CAAE,EAAGQ,GAAKT,EAAE,6CAA6CG,EAAG,SAAS,SAAS,CAAC,CAAC,iBAAiB,KAAK,GAAG,YAAY,CAAC,KAAK,EACpL,OAAOK,GAAG,SAAS,YAAYC,EAAE,EAAGK,EAAG,KAAK,CAAE,GAAIL,GAAI,MAAON,CAAE,CAAE,EAAG,KAAK,eAAe,KAAKltD,EAAEwtD,GAAI,QAAS,IAAM,CAChH,KAAK,QAAQ,GAAGN,EAAG,OAAM,EAAI,EAAI,EAAG,KAAK,MAAM,eAAgBA,CAAE,EAAG,KAAK,MAAM,SAAUA,EAAI,SAAU,IAAI,CACzH,CAAa,CAAC,EAAG,EACN,CACD,MAAO,EACR,CACD,aAAaJ,EAAI,CACf,MAAME,EAAK,KAAK,cAAcF,CAAE,EAChC,GAAIE,EAAI,CACN,KAAM,CAAE,GAAIO,CAAI,EAAGP,EACnB,OAAO,KAAK,MAAM,SAAS,YAAYO,CAAE,EAAG,KAAK,cAAc,OAAOT,EAAI,CAAC,EAAG,EAC/E,CACD,MAAO,EACR,CACD,WAAWA,EAAK,GAAO,CACrB,KAAM,CAAE,QAASE,EAAI,OAAQO,CAAE,EAAK,KAAK,MAAOL,GAAK,KAAK,OAAO,OAAQ,EAAC,SAAS,CAAC,EACpF,OAAOF,EAAG,UAAU,MAAM,YAAY,cAAeE,EAAE,EAAG,KAAK,QAAQ,aAAeK,EAAG,MAAM,YAAY,cAAeL,EAAE,EAAGK,EAAG,UAAU,OAAO,OAAO,EAAG,KAAK,WAAa,KAAK,OAAO,QAAS,KAAK,qBAAuBT,GAAM,KAAK,MAAM,OAAQ,KAAK,MAAM,EAAG,IACxQ,CACD,SAAU,CACR,qBAAqB,KAAK,oBAAoB,EAAG,KAAK,eAAe,QAASA,GAAO7lC,EAAE,GAAG6lC,CAAE,CAAC,EAAG,OAAO,KAAK,KAAK,WAAW,EAAE,QAASA,GAAO,KAAK,YAAYA,CAAE,EAAE,QAAS,EAC7K,CACD,kBAAmB,CACjB,KAAK,QAAO,EACZ,KAAM,CAAE,KAAMA,EAAI,IAAKE,CAAI,EAAG,KAAK,MACnCF,EAAG,eAAiBA,EAAG,cAAc,YAAYA,CAAE,EAAGE,EAAG,cAAc,YAAYA,CAAE,EAAG,OAAO,KAAK,IAAI,EAAE,QAASa,GAAO,KAAKA,CAAE,EAAI,IAAI,CAC1I,CACD,MAAO,CACL,MAAO,CAAC,CAAC,KAAK,OAAQ,IAAK,KAAK,MAAM,IAAI,UAAU,OAAO,SAAS,EAAG,KAAK,MAAM,MAAM,EAAG,GAC5F,CACD,MAAO,CACL,MAAO,CAAC,KAAK,QAAQ,UAAY,CAAC,KAAK,OAAM,IAAO,KAAK,MAAM,IAAI,UAAU,IAAI,SAAS,EAAG,KAAK,qBAAoB,EAAI,KAAK,MAAM,OAAQ,KAAK,MAAM,EAAG,KAC5J,CACD,QAAS,CACP,OAAO,KAAK,MAAM,IAAI,UAAU,SAAS,SAAS,CACnD,CACD,QAAQf,EAAK,IAAKE,EAAK,EAAGO,EAAK,EAAGL,GAAK,EAAGxoD,EAAK,GAAO,CACpD,MAAM8oD,GAAK,KAAK,QAChB,GAAI,KAAK,QAAU,GAAOV,EAAK,GAAKA,EAAK,KAAOE,EAAK,GAAKA,EAAK,KAAOO,EAAK,GAAKA,EAAK,KAAOL,GAAK,GAAKA,GAAK,EACzG,MAAO,GACT,KAAK,OAASa,EAAEjB,EAAIE,EAAIO,EAAIL,EAAE,EAC9B,KAAM,CAAE,IAAKI,EAAI,QAASG,EAAI,QAASC,EAAE,EAAK,KAAK,YACnD,OAAOJ,EAAG,OAAOR,EAAK,GAAG,EAAGW,EAAG,OAAOP,EAAE,EAAGQ,GAAG,OAAOV,EAAK,IAAK,EAAIO,EAAK,GAAG,EAAG7oD,GAAM,KAAK,WAAU,EAAI8oD,IAAM,KAAK,cAAa,EAAI,KAAK,QAAUA,GAAI,EACvJ,CACD,SAASV,EAAIE,EAAK,GAAO,CACvB,GAAaF,IAAT,KACF,OAAO,KAAK,YAAYE,CAAE,EAAG,GAC/B,KAAM,CAAE,OAAQO,EAAI,KAAML,EAAE,EAAK,KAAK,iBAAiBJ,CAAE,EACzD,GAAIS,EAAI,CACN,MAAMM,EAAKX,GAAG,YAAa,EAAE,CAAE,QAASxoD,EAAE,EAAK,KAAK,MAAM,YAAa8oD,EAAK9oD,GAAG,KAAMopD,GAAOA,EAAG,aAAa,WAAW,IAAMD,CAAE,EAC/H,GAAIL,GAAM,CAACA,EAAG,OACZ,UAAWuG,KAAMrvD,GACfqvD,EAAG,UAAUA,IAAOvG,EAAK,MAAQ,QAAQ,EAAE,QAAQ,EACvD,MAAO,CAAC,CAAC,KAAK,QAAQ,GAAGD,EAAIP,CAAE,GAAK,KAAK,uBAAuBa,CAAE,CACnE,CACD,MAAO,EACR,CACD,uBAAuBf,EAAI,CACzB,OAAOA,EAAKA,EAAG,cAAe,CAAC,CAAC,KAAK,MAAM,YAAY,QAAQ,KAAME,GAAOA,EAAG,aAAa,WAAW,EAAE,WAAWF,CAAE,GAAK,CAACE,EAAG,MAAK,CAAE,CACvI,CACD,wBAAyB,CACvB,OAAO,KAAK,eACb,CACD,UAAW,CACT,OAAO,KAAK,MACb,CACD,kBAAmB,CACjB,OAAO,KAAK,UACb,CACD,SAAU,CACR,OAAO,KAAK,KACb,CACD,SAAU,CACR,OAAO,KAAK,KAAM,EAAE,KAAK,QAAQ,SAAW,GAAM,KAAK,MAAM,OAAO,UAAU,IAAI,UAAU,EAAG,IAChG,CACD,QAAS,CACP,OAAO,KAAK,QAAQ,SAAW,GAAO,KAAK,MAAM,OAAO,UAAU,OAAO,UAAU,EAAG,IACvF,CACT,EACM5uD,GAAck0I,GAAI,QAASztF,CAAC,EAC5BzmD,GAAck0I,GAAI,UAAW,OAAO,EACpCl0I,GAAck0I,GAAI,gBAAiB,CAAE,YAAa,sBAAuB,aAAc,6BAA8B,aAAc,eAAgB,iBAAkB,qBAAsB,WAAY,OAAQ,aAAc,SAAU,YAAa,QAAS,gBAAiB,iBAAkB,kBAAmB,mBAAoB,iBAAkB,kBAAmB,aAAc,oBAAqB,eAAgB,uBAAwB,WAAY,uBAAwB,eAAgB,kBAAkB,CAAE,EAC/fl0I,GAAck0I,GAAI,kBAAmB,CAAE,SAAU,KAAM,MAAO,UAAW,YAAa,GAAO,QAAS,EAAG,SAAU,GAAO,WAAY,GAAM,cAAe,GAAO,gBAAiB,EAAG,YAAa,GAAO,eAAgB,GAAM,UAAW,OAAQ,WAAY,CAAE,YAAa,EAAI,EAAE,KAAM,CAAE,EAAE,SAAU,KAAM,OAAQ,GAAO,QAAS,KAAM,QAAS,UAAW,sBAAuB,KAAM,SAAU,gBAAiB,kBAAmB,GAAM,WAAY,GAAO,aAAc,QAAU,GAC5dl0I,GAAck0I,GAAI,SAAWxlF,IAAO,IAAIwlF,GAAGxlF,EAAE,CAAC,EAC9C,IAAIqB,GAAImkF,GACR,OAAOz+H,EAAIA,EAAE,OACd,IAAG,CACL,CACH,CAAC,EACD,MAAe0+H,GAAAnB,MACf;AAAA;AAAA;AAAA;AAAA,uCC3hBAoB,IAAAD,GAAA,WAAAA,GAAA,QAAAA,GAEe,MAAKE,WAAS1mE,EAAW,CAItC,SAAU,CACR,KAAK,mBAAoB,EACzB,KAAK,aAAe3mC,GAAE,KAAK,kBAAkB,EAAE,KAAK,QAAQ,EAAE,IAAI,SAAUh0B,EAAGk3B,EAAQ,CAAE,OAAOlD,GAAEkD,CAAM,EAAE,KAAK,YAAY,EAAI,EAAE,IAAK,CACvI,CAED,YAAa,CACX,KAAK,uBAAwB,CAC9B,CAED,UAAU3uB,EAAO,CACfA,EAAM,eAAc,EAEpB,MAAM+4H,EAAW/4H,EAAM,OACjB01D,EAAQqjE,EAAS,QAAQ,MAE/BttG,GAAE,KAAK,gBAAgB,EAAE,IAAIiqC,CAAK,EAClCjqC,GAAE,KAAK,sBAAsB,EAAE,IAAIiqC,CAAK,EACxCjqC,GAAE,KAAK,uBAAuB,EAAE,KAAK,QAASiqC,CAAK,EACnDjqC,GAAE,eAAe,EAAE,YAAY,sBAAsB,EAErD,KAAK,MAAM,SAASiqC,CAAK,EAEzBqjE,EAAS,UAAU,IAAI,SAAU,eAAe,CACjD,CAED,gBAAgB/4H,EAAO,CACrBA,EAAM,eAAc,EAEpB,MAAMozC,EAAI,KAAK,MAAM,KAAK,OAAM,EAAK,GAAG,EAClCK,EAAI,KAAK,MAAM,KAAK,OAAM,EAAK,GAAG,EAClC/vD,EAAI,KAAK,MAAM,KAAK,OAAM,EAAK,GAAG,EAExC,KAAK,MAAM,SAAS,OAAO0vD,CAAC,IAAIK,CAAC,IAAI/vD,CAAC,EAAE,EACxC,MAAMs1I,EAAW,KAAK,MAAM,SAAQ,EAAG,OAAM,EAAG,WAChD,KAAK,MAAM,SAASA,CAAQ,EAE5B,KAAK,sBAAsBA,CAAQ,CACpC,CAED,sBAAsBtjE,EAAO,CAC3BjqC,GAAE,KAAK,gBAAgB,EAAE,IAAIiqC,CAAK,EAClCjqC,GAAE,KAAK,sBAAsB,EAAE,IAAIiqC,CAAK,EAExCjqC,GAAE,eAAe,EAAE,YAAY,sBAAsB,EAErDA,GAAE,KAAK,uBAAuB,EAC3B,SAAS,QAAQ,EACjB,SAAS,eAAe,EACxB,IAAI,mBAAoBiqC,CAAK,EAC7B,IAAI,kBAAmBA,CAAK,EAC5B,KAAK,aAAcA,CAAK,EACxB,MACJ,CAED,YAAY11D,EAAO,CACjBA,EAAM,eAAc,EACpByrB,GAAE,KAAK,sBAAsB,EAAE,IAAI,EAAE,EACrCA,GAAE,KAAK,gBAAgB,EAAE,IAAI,EAAE,EAC/BA,GAAE,KAAK,uBAAuB,EAAE,KAAI,EACpCA,GAAE,eAAe,EAAE,YAAY,sBAAsB,CACtD,CAED,YAAYzrB,EAAO,CACjBA,EAAM,eAAc,CACrB,CAED,oBAAqB,CACnB,KAAK,MAAQ64H,IAAM,OAAO,CACxB,GAAI,aACJ,MAAO,WACP,YAAa,GACb,QAAS,KAAK,mBAAqB,UACnC,WAAY,CAEV,QAAS,GACT,IAAK,GAGL,YAAa,CACX,MAAO,GACP,KAAM,EACP,CACF,CACP,CAAK,EAED,KAAK,MAAM,GAAG,OAAQ,CAACnjE,EAAOujE,IAAc,CAC1C,MAAMC,EAAYxjE,EAAM,OAAM,EAAG,SAAU,EACtC,KAAK,aAAa,SAASwjE,CAAS,GACvC,KAAK,sBAAsBA,CAAS,EAEtC,KAAK,MAAM,MACjB,CAAK,EAED,MAAMp/H,EAAO,KAEb2xB,GAAE,+BAA+B,EAAE,GAAG,UAAW,SAAUvxB,EAAG,CACxDA,EAAE,MAAQ,SACZJ,EAAK,MAAM,WAAW,EAAK,CAEnC,CAAK,CACF,CAED,wBAAyB,CACvB,KAAK,MAAM,QAAS,CACrB,CACH,CA5GErV,GADkBq0I,GACX,UAAU,CAAE,mBAAoB,aAAc,aAAc,oBAAqB,iBACxFr0I,GAFkBq0I,GAEX,SAAS,CAAE,aAAc,MAAQ,mHCE1C,IAAIK,IAAiBx1I,GAAW,CAC9B,gCAAgChB,EAASC,EAAQ,EAC9C,SAAS+B,EAAQC,EAAS,CACzB,OAAOjC,GAAY,UAAY,OAAOC,EAAW,IAAcA,EAAO,QAAUgC,IAAY,OAAO,QAAW,YAAc,OAAO,IAAM,OAAOA,CAAO,EAAID,EAAO,OAASC,GAC7K,GAAGjC,EAAS,UAAW,CAEjB,IAAAy2I,EACJ,SAAS18H,GAAQ,CACR,OAAA08H,EAAa,MAAM,KAAM,SAAS,CAC3C,CACA,SAASC,EAAgBryI,EAAU,CAClBoyI,EAAApyI,CACjB,CACA,SAASsyI,EAAQ5pI,EAAO,CACtB,OAAOA,aAAiB,OAAS,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,gBAC7E,CACA,SAASquF,EAASruF,EAAO,CACvB,OAAOA,GAAS,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBACpE,CACS,SAAA6pI,EAAW91I,EAAGC,EAAG,CACxB,OAAO,OAAO,UAAU,eAAe,KAAKD,EAAGC,CAAC,CAClD,CACA,SAAS81I,EAAcp2I,EAAK,CAC1B,GAAI,OAAO,oBACT,OAAO,OAAO,oBAAoBA,CAAG,EAAE,SAAW,EAE9C,IAAAmsC,EACJ,IAAKA,KAAKnsC,EACJ,GAAAm2I,EAAWn2I,EAAKmsC,CAAC,EACZ,SAGJ,QAEX,CACA,SAASkqG,EAAY/pI,EAAO,CAC1B,OAAOA,IAAU,MACnB,CACA,SAASgqI,EAAShqI,EAAO,CAChB,cAAOA,GAAU,UAAY,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBAChF,CACA,SAASiqI,EAAOjqI,EAAO,CACrB,OAAOA,aAAiB,MAAQ,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,eAC5E,CACS,SAAAgE,EAAI1O,EAAK8I,EAAI,CAChB,IAAAgzF,EAAM,CAAI,EAAAz6F,EACd,IAAKA,EAAI,EAAGA,EAAIrB,EAAI,OAAQ,EAAEqB,EAC5By6F,EAAI,KAAKhzF,EAAG9I,EAAIqB,CAAC,EAAGA,CAAC,CAAC,EAEjB,OAAAy6F,CACT,CACS,SAAAr0B,EAAOhpE,EAAGC,EAAG,CACpB,QAAS2C,KAAK3C,EACR61I,EAAW71I,EAAG2C,CAAC,IACf5C,EAAA4C,CAAC,EAAI3C,EAAE2C,CAAC,GAGV,OAAAkzI,EAAW71I,EAAG,UAAU,IAC1BD,EAAE,SAAWC,EAAE,UAEb61I,EAAW71I,EAAG,SAAS,IACzBD,EAAE,QAAUC,EAAE,SAETD,CACT,CACA,SAASm2I,EAAUlqI,EAAOgkF,EAASi8C,EAASkK,EAAQ,CAClD,OAAOC,GAAiBpqI,EAAOgkF,EAASi8C,EAASkK,EAAQ,EAAI,EAAE,KACjE,CACA,SAASE,GAAsB,CACtB,OACL,MAAO,GACP,aAAc,CAAC,EACf,YAAa,CAAC,EACd,SAAU,GACV,cAAe,EACf,UAAW,GACX,WAAY,KACZ,aAAc,KACd,cAAe,GACf,gBAAiB,GACjB,IAAK,GACL,gBAAiB,CAAC,EAClB,IAAK,KACL,SAAU,KACV,QAAS,GACT,gBAAiB,GAErB,CACA,SAASC,EAAgB9sI,EAAG,CACtB,OAAAA,EAAE,KAAO,OACXA,EAAE,IAAM6sI,KAEH7sI,EAAE,GACX,CACI,IAAA+sI,EACA,MAAM,UAAU,KAClBA,EAAO,MAAM,UAAU,KAEvBA,EAAO,SAASC,EAAK,CACnB,IAAI95H,EAAI,OAAO,IAAI,EAAGjZ,EAAMiZ,EAAE,SAAW,EAAG/Z,EAC5C,IAAKA,EAAI,EAAGA,EAAIc,EAAKd,IACf,GAAAA,KAAK+Z,GAAK85H,EAAI,KAAK,KAAM95H,EAAE/Z,CAAC,EAAGA,EAAG+Z,CAAC,EAC9B,SAGJ,UAGX,SAAS01E,EAAQ5oF,EAAG,CACd,GAAAA,EAAE,UAAY,KAAM,CAClB,IAAAitI,EAAQH,EAAgB9sI,CAAC,EAAGktI,EAAcH,EAAK,KAAKE,EAAM,gBAAiB,SAAS9zI,EAAG,CACzF,OAAOA,GAAK,KACb,EAAGg0I,EAAa,CAAC,MAAMntI,EAAE,GAAG,QAAS,IAAKitI,EAAM,SAAW,GAAK,CAACA,EAAM,OAAS,CAACA,EAAM,YAAc,CAACA,EAAM,cAAgB,CAACA,EAAM,gBAAkB,CAACA,EAAM,iBAAmB,CAACA,EAAM,WAAa,CAACA,EAAM,eAAiB,CAACA,EAAM,kBAAoB,CAACA,EAAM,UAAYA,EAAM,UAAYC,GAI5R,GAHIltI,EAAE,UACSmtI,KAAcF,EAAM,gBAAkB,GAAKA,EAAM,aAAa,SAAW,GAAKA,EAAM,UAAY,QAE3G,OAAO,UAAY,MAAQ,CAAC,OAAO,SAASjtI,CAAC,EAC/CA,EAAE,SAAWmtI,MAEN,QAAAA,CAEX,CACA,OAAOntI,EAAE,QACX,CACA,SAASotI,EAAcH,EAAO,CACxB,IAAAjtI,EAAI0sI,EAAU,GAAG,EACrB,OAAIO,GAAS,KACJ1tE,EAAAutE,EAAgB9sI,CAAC,EAAGitI,CAAK,EAEhBH,EAAA9sI,CAAC,EAAE,gBAAkB,GAEhCA,CACT,CACA,IAAIqtI,EAAmB79H,EAAM,iBAAmB,GAAI89H,EAAmB,GAC9D,SAAAC,EAAWC,EAAKC,EAAO,CAC9B,IAAIt0I,EAAG4V,EAAM3V,EA+BT,GA9BCmzI,EAAYkB,EAAM,gBAAgB,IACrCD,EAAI,iBAAmBC,EAAM,kBAE1BlB,EAAYkB,EAAM,EAAE,IACvBD,EAAI,GAAKC,EAAM,IAEZlB,EAAYkB,EAAM,EAAE,IACvBD,EAAI,GAAKC,EAAM,IAEZlB,EAAYkB,EAAM,EAAE,IACvBD,EAAI,GAAKC,EAAM,IAEZlB,EAAYkB,EAAM,OAAO,IAC5BD,EAAI,QAAUC,EAAM,SAEjBlB,EAAYkB,EAAM,IAAI,IACzBD,EAAI,KAAOC,EAAM,MAEdlB,EAAYkB,EAAM,MAAM,IAC3BD,EAAI,OAASC,EAAM,QAEhBlB,EAAYkB,EAAM,OAAO,IAC5BD,EAAI,QAAUC,EAAM,SAEjBlB,EAAYkB,EAAM,GAAG,IACpBD,EAAA,IAAMV,EAAgBW,CAAK,GAE5BlB,EAAYkB,EAAM,OAAO,IAC5BD,EAAI,QAAUC,EAAM,SAElBJ,EAAiB,OAAS,EAC5B,IAAKl0I,EAAI,EAAGA,EAAIk0I,EAAiB,OAAQl0I,IACvC4V,EAAOs+H,EAAiBl0I,CAAC,EACzBC,EAAMq0I,EAAM1+H,CAAI,EACXw9H,EAAYnzI,CAAG,IAClBo0I,EAAIz+H,CAAI,EAAI3V,GAIX,OAAAo0I,CACT,CACA,SAASE,EAAO7lG,EAAQ,CACtB0lG,EAAW,KAAM1lG,CAAM,EAClB,QAAK,IAAI,KAAKA,EAAO,IAAM,KAAOA,EAAO,GAAG,QAAQ,EAAI,GAAG,EAC3D,KAAK,YACH,QAAyB,SAAK,GAAG,GAEpCylG,IAAqB,KACJA,EAAA,GACnB99H,EAAM,aAAa,IAAI,EACJ89H,EAAA,GAEvB,CACA,SAASK,EAASz3I,EAAK,CACrB,OAAOA,aAAew3I,GAAUx3I,GAAO,MAAQA,EAAI,kBAAoB,IACzE,CACA,SAAS03I,EAAKlzI,EAAK,CACb8U,EAAM,8BAAgC,IAAS,OAAO,QAAY,KAAe,QAAQ,MACnF,aAAK,wBAA0B9U,CAAG,CAE9C,CACS,SAAAmzI,GAAUnzI,EAAKkG,EAAI,CAC1B,IAAIktI,EAAY,GAChB,OAAOvuE,EAAO,UAAW,CAIvB,GAHI/vD,EAAM,oBAAsB,MACxBA,EAAA,mBAAmB,KAAM9U,CAAG,EAEhCozI,EAAW,CACb,IAAInpI,EAAO,CAAI,EAAArJ,EAAKnC,EAAGhD,GACvB,IAAKgD,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAAK,CAErC,GADMmC,EAAA,GACF,OAAO,UAAUnC,CAAC,GAAM,SAAU,CACpCmC,GAAO;AAAA,GAAQnC,EAAI,KACd,IAAAhD,MAAO,UAAU,CAAC,EACjBk2I,EAAW,UAAU,CAAC,EAAGl2I,EAAG,IAC9BmF,GAAOnF,GAAM,KAAO,UAAU,CAAC,EAAEA,EAAG,EAAI,MAGtCmF,IAAI,MAAM,EAAG,EAAE,OAErBA,EAAM,UAAUnC,CAAC,EAEnBwL,EAAK,KAAKrJ,CAAG,CACf,CACAsyI,EACElzI,EAAM;AAAA,aAAkB,MAAM,UAAU,MAAM,KAAKiK,CAAI,EAAE,KAAK,EAAE,EAAI;AAAA,EAAO,IAAI,MAAQ,SAE7EmpI,EAAA,EACd,CACO,OAAAltI,EAAG,MAAM,KAAM,SAAS,GAC9BA,CAAE,CACP,CACA,IAAImtI,GAAe,GACV,SAAAC,GAAgBj3I,EAAM2D,EAAK,CAC9B8U,EAAM,oBAAsB,MACxBA,EAAA,mBAAmBzY,EAAM2D,CAAG,EAE/BqzI,GAAah3I,CAAI,IACpB62I,EAAKlzI,CAAG,EACRqzI,GAAah3I,CAAI,EAAI,GAEzB,CACAyY,EAAM,4BAA8B,GACpCA,EAAM,mBAAqB,KAC3B,SAAS7W,GAAW6J,EAAO,CAClB,cAAO,SAAa,KAAeA,aAAiB,UAAY,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,mBACnH,CACA,SAAS84D,GAAIzzB,EAAQ,CACnB,IAAI94B,EAAM5V,EACV,IAAKA,KAAK0uC,EACJwkG,EAAWxkG,EAAQ1uC,CAAC,IACtB4V,EAAO84B,EAAO1uC,CAAC,EACXR,GAAWoW,CAAI,EACjB,KAAK5V,CAAC,EAAI4V,EAEL,SAAM5V,CAAC,EAAI4V,GAItB,KAAK,QAAU84B,EACf,KAAK,+BAAiC,IAAI,QACvC,KAAK,wBAAwB,QAAU,KAAK,cAAc,QAAU,IAAM,UAAU,OAEzF,CACS,SAAAomG,GAAaC,EAAcC,EAAa,CAC/C,IAAIv6C,EAAMr0B,EAAO,CAAC,EAAG2uE,CAAY,EAAGn/H,EACpC,IAAKA,KAAQo/H,EACP9B,EAAW8B,EAAap/H,CAAI,IAC1B8hF,EAASq9C,EAAan/H,CAAI,CAAC,GAAK8hF,EAASs9C,EAAYp/H,CAAI,CAAC,GACxD6kF,EAAA7kF,CAAI,EAAI,GACZwwD,EAAOq0B,EAAI7kF,CAAI,EAAGm/H,EAAan/H,CAAI,CAAC,EACpCwwD,EAAOq0B,EAAI7kF,CAAI,EAAGo/H,EAAYp/H,CAAI,CAAC,GAC1Bo/H,EAAYp/H,CAAI,GAAK,KAC1B6kF,EAAA7kF,CAAI,EAAIo/H,EAAYp/H,CAAI,EAE5B,OAAO6kF,EAAI7kF,CAAI,GAIrB,IAAKA,KAAQm/H,EACP7B,EAAW6B,EAAcn/H,CAAI,GAAK,CAACs9H,EAAW8B,EAAap/H,CAAI,GAAK8hF,EAASq9C,EAAan/H,CAAI,CAAC,IACjG6kF,EAAI7kF,CAAI,EAAIwwD,EAAO,CAAI,EAAAq0B,EAAI7kF,CAAI,CAAC,GAG7B,OAAA6kF,CACT,CACA,SAASw6C,GAAOvmG,EAAQ,CAClBA,GAAU,MACZ,KAAK,IAAIA,CAAM,CAEnB,CACI,IAAApnC,EACA,OAAO,KACTA,EAAO,OAAO,KAEdA,EAAO,SAASvK,EAAK,CACf,IAAAiD,EAAGy6F,EAAM,GACb,IAAKz6F,KAAKjD,EACJm2I,EAAWn2I,EAAKiD,CAAC,GACnBy6F,EAAI,KAAKz6F,CAAC,EAGP,OAAAy6F,CAAA,EAGX,IAAIy6C,EAAkB,CACpB,QAAS,gBACT,QAAS,mBACT,SAAU,eACV,QAAS,oBACT,SAAU,sBACV,SAAU,KAEH,SAAAC,EAASn4I,EAAKo4I,EAAKC,EAAM,CAChC,IAAIC,EAAS,KAAK,UAAUt4I,CAAG,GAAK,KAAK,UAAU,SACnD,OAAOwC,GAAW81I,CAAM,EAAIA,EAAO,KAAKF,EAAKC,CAAI,EAAIC,CACvD,CACS,SAAAC,GAAShsD,EAAQisD,EAAcC,EAAW,CAC7C,IAAAC,EAAY,GAAK,KAAK,IAAInsD,CAAM,EAAGosD,EAAcH,EAAeE,EAAU,OAAQE,EAAQrsD,GAAU,EACxG,OAAQqsD,EAAQH,EAAY,IAAM,GAAK,KAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAGE,CAAW,CAAC,EAAE,WAAW,OAAO,CAAC,EAAID,CAC9G,CACI,IAAAG,EAAmB,yMAA0MC,GAAwB,6CAA8CC,EAAkB,CAAC,EAAGC,EAAuB,GACpV,SAASC,GAAeC,EAAQC,EAAQC,EAAUz1I,EAAU,CAC1D,IAAI8R,EAAO9R,EACP,OAAOA,GAAa,WACtB8R,EAAO,UAAW,CACT,YAAK9R,CAAQ,GAAE,GAGtBu1I,IACFF,EAAqBE,CAAM,EAAIzjI,GAE7B0jI,IACFH,EAAqBG,EAAO,CAAC,CAAC,EAAI,UAAW,CACpC,OAAAZ,GAAS9iI,EAAK,MAAM,KAAM,SAAS,EAAG0jI,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,IAGjEC,IACmBJ,EAAAI,CAAQ,EAAI,UAAW,CACnC,YAAK,aAAa,QACvB3jI,EAAK,MAAM,KAAM,SAAS,EAC1ByjI,CAAA,CACF,EAGN,CACA,SAASG,GAAuBhtI,EAAO,CACjC,OAAAA,EAAM,MAAM,UAAU,EACjBA,EAAM,QAAQ,WAAY,EAAE,EAE9BA,EAAM,QAAQ,MAAO,EAAE,CAChC,CACA,SAASitI,GAAmBjpD,EAAS,CACnC,IAAItuF,EAAQsuF,EAAQ,MAAMwoD,CAAgB,EAAG71I,EAAGqB,EAChD,IAAKrB,EAAI,EAAGqB,EAAStC,EAAM,OAAQiB,EAAIqB,EAAQrB,IACzCg2I,EAAqBj3I,EAAMiB,CAAC,CAAC,EAC/BjB,EAAMiB,CAAC,EAAIg2I,EAAqBj3I,EAAMiB,CAAC,CAAC,EAExCjB,EAAMiB,CAAC,EAAIq2I,GAAuBt3I,EAAMiB,CAAC,CAAC,EAG9C,OAAO,SAASo1I,EAAK,CACnB,IAAIE,EAAS,GAAI5wI,GACjB,IAAKA,GAAK,EAAGA,GAAKrD,EAAQqD,KACxB4wI,GAAU91I,GAAWT,EAAM2F,EAAE,CAAC,EAAI3F,EAAM2F,EAAE,EAAE,KAAK0wI,EAAK/nD,CAAO,EAAItuF,EAAM2F,EAAE,EAEpE,OAAA4wI,CAAA,CAEX,CACS,SAAAiB,GAAa1vI,EAAGwmF,EAAS,CAC5B,OAACxmF,EAAE,WAGPwmF,EAAUmpD,GAAanpD,EAASxmF,EAAE,WAAY,GAC9CkvI,EAAgB1oD,CAAO,EAAI0oD,EAAgB1oD,CAAO,GAAKipD,GAAmBjpD,CAAO,EAC1E0oD,EAAgB1oD,CAAO,EAAExmF,CAAC,GAJxBA,EAAE,aAAa,aAK1B,CACS,SAAA2vI,GAAanpD,EAASi8C,EAAS,CACtC,IAAItpI,EAAI,EACR,SAASy2I,EAA4BptI,EAAO,CACnC,OAAAigI,EAAQ,eAAejgI,CAAK,GAAKA,CAC1C,CAEA,IADAysI,GAAsB,UAAY,EAC3B91I,GAAK,GAAK81I,GAAsB,KAAKzoD,CAAO,GACjDA,EAAUA,EAAQ,QAChByoD,GACAW,CAAA,EAEFX,GAAsB,UAAY,EAC7B91I,GAAA,EAEA,OAAAqtF,CACT,CACA,IAAIqpD,GAAwB,CAC1B,IAAK,YACL,GAAI,SACJ,EAAG,aACH,GAAI,eACJ,IAAK,sBACL,KAAM,6BAER,SAASC,GAAe35I,EAAK,CACvB,IAAAqwF,EAAU,KAAK,gBAAgBrwF,CAAG,EAAG45I,EAAc,KAAK,gBAAgB55I,EAAI,YAAa,GACzF,OAAAqwF,GAAW,CAACupD,EACPvpD,GAEJ,qBAAgBrwF,CAAG,EAAI45I,EAAY,MAAMf,CAAgB,EAAE,IAAI,SAASgB,EAAK,CAChF,OAAIA,IAAQ,QAAUA,IAAQ,MAAQA,IAAQ,MAAQA,IAAQ,OACrDA,EAAI,MAAM,CAAC,EAEbA,CAAA,CACR,EAAE,KAAK,EAAE,EACH,KAAK,gBAAgB75I,CAAG,EACjC,CACA,IAAI85I,GAAqB,eACzB,SAASC,IAAc,CACrB,OAAO,KAAK,YACd,CACI,IAAAC,GAAiB,KAAMC,GAAgC,UAC3D,SAASC,GAAQ3tD,EAAQ,CACvB,OAAO,KAAK,SAAS,QAAQ,KAAMA,CAAM,CAC3C,CACA,IAAI4tD,GAAsB,CACxB,OAAQ,QACR,KAAM,SACN,EAAG,gBACH,GAAI,aACJ,EAAG,WACH,GAAI,aACJ,EAAG,UACH,GAAI,WACJ,EAAG,QACH,GAAI,UACJ,EAAG,SACH,GAAI,WACJ,EAAG,UACH,GAAI,YACJ,EAAG,SACH,GAAI,YAEN,SAASC,GAAa7tD,EAAQ8tD,EAAe9hI,EAAQ+hI,EAAU,CACzD,IAAAhC,EAAS,KAAK,cAAc//H,CAAM,EACtC,OAAO/V,GAAW81I,CAAM,EAAIA,EAAO/rD,EAAQ8tD,EAAe9hI,EAAQ+hI,CAAQ,EAAIhC,EAAO,QAAQ,MAAO/rD,CAAM,CAC5G,CACS,SAAAguD,GAAWC,EAAOlC,EAAQ,CACjC,IAAIjoD,EAAU,KAAK,cAAcmqD,EAAQ,EAAI,SAAW,MAAM,EACvD,OAAAh4I,GAAW6tF,CAAO,EAAIA,EAAQioD,CAAM,EAAIjoD,EAAQ,QAAQ,MAAOioD,CAAM,CAC9E,CACA,IAAImC,GAAU,GACL,SAAAC,GAAajgI,EAAMkgI,EAAW,CACjC,IAAAC,EAAYngI,EAAK,cACbggI,GAAAG,CAAS,EAAIH,GAAQG,EAAY,GAAG,EAAIH,GAAQE,CAAS,EAAIlgI,CACvE,CACA,SAASogI,GAAeC,EAAO,CACtB,cAAOA,GAAU,SAAWL,GAAQK,CAAK,GAAKL,GAAQK,EAAM,aAAa,EAAI,MACtF,CACA,SAASC,GAAqBC,EAAa,CACrC,IAAAC,EAAkB,GAAIC,EAAgBtiI,EAC1C,IAAKA,KAAQoiI,EACP9E,EAAW8E,EAAapiI,CAAI,IAC9BsiI,EAAiBL,GAAejiI,CAAI,EAChCsiI,IACcD,EAAAC,CAAc,EAAIF,EAAYpiI,CAAI,IAIjD,OAAAqiI,CACT,CACA,IAAIE,GAAa,GACR,SAAAC,GAAgB3gI,EAAM4gI,EAAU,CACvCF,GAAW1gI,CAAI,EAAI4gI,CACrB,CACA,SAASC,GAAoBC,EAAU,CACjC,IAAAT,EAAQ,CAAI,EAAA3qF,EAChB,IAAKA,KAAKorF,EACJrF,EAAWqF,EAAUprF,CAAC,GAClB2qF,EAAA,KAAK,CAAE,KAAM3qF,EAAG,SAAUgrF,GAAWhrF,CAAC,EAAG,EAG7C,OAAA2qF,EAAA,KAAK,SAAS16I,EAAGC,EAAG,CACjB,OAAAD,EAAE,SAAWC,EAAE,SACvB,EACMy6I,CACT,CACA,SAASU,GAAWl3F,EAAM,CACxB,OAAOA,EAAO,IAAM,GAAKA,EAAO,MAAQ,GAAKA,EAAO,MAAQ,CAC9D,CACA,SAASm3F,GAASlvD,EAAQ,CACxB,OAAIA,EAAS,EACJ,KAAK,KAAKA,CAAM,GAAK,EAErB,KAAK,MAAMA,CAAM,CAE5B,CACA,SAASmvD,GAAMC,EAAqB,CAC9B,IAAAC,EAAgB,CAACD,EAAqB17I,EAAQ,EAClD,OAAI27I,IAAkB,GAAK,SAASA,CAAa,IAC/C37I,EAAQw7I,GAASG,CAAa,GAEzB37I,CACT,CACS,SAAA47I,GAAWphI,EAAMqhI,EAAU,CAClC,OAAO,SAAS77I,EAAO,CACrB,OAAIA,GAAS,MACL87I,GAAA,KAAMthI,EAAMxa,CAAK,EACjBoZ,EAAA,aAAa,KAAMyiI,CAAQ,EAC1B,MAEAE,GAAI,KAAMvhI,CAAI,CACvB,CAEJ,CACS,SAAAuhI,GAAI5D,EAAK39H,EAAM,CACtB,OAAO29H,EAAI,UAAYA,EAAI,GAAG,OAASA,EAAI,OAAS,MAAQ,IAAM39H,CAAI,IAAM,GAC9E,CACS,SAAAshI,GAAM3D,EAAK39H,EAAMxa,EAAO,CAC3Bm4I,EAAI,QAAQ,GAAK,CAAC,MAAMn4I,CAAK,IAC3Bwa,IAAS,YAAc+gI,GAAWpD,EAAI,MAAM,GAAKA,EAAI,MAAY,OAAKA,EAAI,SAAW,IACvFn4I,EAAQy7I,GAAMz7I,CAAK,EACnBm4I,EAAI,GAAG,OAASA,EAAI,OAAS,MAAQ,IAAM39H,CAAI,EAC7Cxa,EACAm4I,EAAI,MAAM,EACV6D,GAAYh8I,EAAOm4I,EAAI,OAAO,IAG5BA,EAAA,GAAG,OAASA,EAAI,OAAS,MAAQ,IAAM39H,CAAI,EAAExa,CAAK,EAG5D,CACA,SAASi8I,GAAUpB,EAAO,CAExB,OADAA,EAAQD,GAAeC,CAAK,EACxBt4I,GAAW,KAAKs4I,CAAK,CAAC,EACjB,KAAKA,CAAK,IAEZ,IACT,CACS,SAAAqB,GAAUrB,EAAO76I,EAAO,CAC3B,UAAO66I,GAAU,SAAU,CAC7BA,EAAQC,GAAqBD,CAAK,EAC9B,IAAAsB,EAAcd,GAAoBR,CAAK,EAAG93I,EAC9C,IAAKA,EAAI,EAAGA,EAAIo5I,EAAY,OAAQp5I,IAC7B,KAAAo5I,EAAYp5I,CAAC,EAAE,IAAI,EAAE83I,EAAMsB,EAAYp5I,CAAC,EAAE,IAAI,CAAC,CACtD,SAEA83I,EAAQD,GAAeC,CAAK,EACxBt4I,GAAW,KAAKs4I,CAAK,CAAC,EACjB,YAAKA,CAAK,EAAE76I,CAAK,EAGrB,WACT,CACA,IAAIo8I,GAAS,KAAM/2E,GAAS,OAAQg3E,GAAS,QAASC,GAAS,QAASC,GAAS,aAAcC,GAAY,QAASC,GAAY,YAAaC,GAAY,gBAAiBC,EAAY,UAAWC,EAAY,UAAWC,GAAY,eAAgBC,GAAgB,MAAOC,GAAc,WAAYC,GAAc,qBAAsBC,GAAmB,0BAA2BC,GAAiB,uBAAwBC,GAAY,wJAAyJC,EACrkBA,EAAU,GACD,SAAAC,EAAcpE,EAAQ7tF,EAAOkyF,EAAa,CACzCF,EAAAnE,CAAM,EAAI12I,GAAW6oD,CAAK,EAAIA,EAAQ,SAAS8/C,EAAUqyC,EAAa,CACrE,OAAAryC,GAAYoyC,EAAcA,EAAclyF,CAAA,CAEnD,CACS,SAAAoyF,GAAsBvE,EAAQxnG,EAAQ,CAC7C,OAAKwkG,EAAWmH,EAASnE,CAAM,EAGxBmE,EAAQnE,CAAM,EAAExnG,EAAO,QAASA,EAAO,OAAO,EAF5C,IAAI,OAAOgsG,GAAexE,CAAM,CAAC,CAG5C,CACA,SAASwE,GAAezzH,EAAG,CAClB,OAAA0zH,GACL1zH,EAAE,QAAQ,KAAM,EAAE,EAAE,QAAQ,sCAAuC,SAASvb,EAASkvI,EAAIvgF,EAAIy3E,EAAII,EAAI,CAC5F,OAAA0I,GAAMvgF,GAAMy3E,GAAMI,CAAA,CAC1B,EAEL,CACA,SAASyI,GAAY1zH,EAAG,CACf,OAAAA,EAAE,QAAQ,yBAA0B,MAAM,CACnD,CACA,IAAI5a,GAAS,GACJ,SAAAwuI,GAAc3E,EAAQv1I,EAAU,CACvC,IAAIX,EAAGyS,EAAO9R,EASd,IARI,OAAOu1I,GAAW,WACpBA,EAAS,CAACA,CAAM,GAEd7C,EAAS1yI,CAAQ,IACZ8R,EAAA,SAASpJ,EAAOtK,EAAO,CACtBA,EAAA4B,CAAQ,EAAI+3I,GAAMrvI,CAAK,IAG5BrJ,EAAI,EAAGA,EAAIk2I,EAAO,OAAQl2I,IACtBqM,GAAA6pI,EAAOl2I,CAAC,CAAC,EAAIyS,CAExB,CACS,SAAAqoI,GAAkB5E,EAAQv1I,EAAU,CAC3Ck6I,GAAc3E,EAAQ,SAAS7sI,EAAOtK,EAAO2vC,EAAQqsG,EAAQ,CACpDrsG,EAAA,GAAKA,EAAO,IAAM,GACzB/tC,EAAS0I,EAAOqlC,EAAO,GAAIA,EAAQqsG,CAAM,EAC1C,CACH,CACS,SAAAC,GAAwB9E,EAAQ7sI,EAAOqlC,EAAQ,CAClDrlC,GAAS,MAAQ6pI,EAAW7mI,GAAQ6pI,CAAM,GAC5C7pI,GAAO6pI,CAAM,EAAE7sI,EAAOqlC,EAAO,GAAIA,EAAQwnG,CAAM,CAEnD,CACA,IAAI+E,GAAO,EAAGC,GAAQ,EAAGC,GAAO,EAAGC,GAAO,EAAGC,GAAS,EAAGC,GAAS,EAAGC,GAAc,EAAGC,GAAO,EAAGC,GAAU,EACjG,SAAAj+I,GAAIsS,EAAG3S,EAAG,CACT,OAAA2S,EAAI3S,EAAIA,GAAKA,CACvB,CACI,IAAA8B,GACA,MAAM,UAAU,QAClBA,GAAU,MAAM,UAAU,QAE1BA,GAAU,SAAS4lD,EAAG,CAChB,IAAA7kD,EACJ,IAAKA,EAAI,EAAGA,EAAI,KAAK,OAAQ,EAAEA,EACzB,QAAKA,CAAC,IAAM6kD,EACP,OAAA7kD,EAGJ,UAGF,SAAAi5I,GAAY33F,EAAMo6F,EAAO,CAChC,GAAI,MAAMp6F,CAAI,GAAK,MAAMo6F,CAAK,EACrB,WAEL,IAAAC,EAAWn+I,GAAIk+I,EAAO,EAAE,EAC5B,OAAAp6F,IAASo6F,EAAQC,GAAY,GACtBA,IAAa,EAAInD,GAAWl3F,CAAI,EAAI,GAAK,GAAK,GAAKq6F,EAAW,EAAI,CAC3E,CACA1F,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,UAAW,CACvC,YAAK,MAAU,IACvB,EACDA,GAAe,MAAO,EAAG,EAAG,SAAS5oD,EAAS,CAC5C,OAAO,KAAK,WAAa,cAAY,KAAMA,CAAO,EACnD,EACD4oD,GAAe,OAAQ,EAAG,EAAG,SAAS5oD,EAAS,CAC7C,OAAO,KAAK,WAAa,SAAO,KAAMA,CAAO,EAC9C,EACDqqD,GAAa,QAAS,GAAG,EACzBU,GAAgB,QAAS,CAAC,EAC1BkC,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,MAAO,SAASnyC,EAAUmhC,EAAS,CACxC,OAAAA,EAAQ,iBAAiBnhC,CAAQ,EACzC,EACamyC,EAAA,OAAQ,SAASnyC,EAAUmhC,EAAS,CACzC,OAAAA,EAAQ,YAAYnhC,CAAQ,EACpC,EACD0yC,GAAc,CAAC,IAAK,IAAI,EAAG,SAASxxI,EAAOtK,EAAO,CAChDA,EAAMm8I,EAAK,EAAIxC,GAAMrvI,CAAK,EAAI,EAC/B,EACawxI,GAAA,CAAC,MAAO,MAAM,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQwnG,EAAQ,CACpE,IAAIwF,EAAQhtG,EAAO,QAAQ,YAAYrlC,EAAO6sI,EAAQxnG,EAAO,OAAO,EAChEgtG,GAAS,KACX38I,EAAMm8I,EAAK,EAAIQ,EAEC/H,EAAAjlG,CAAM,EAAE,aAAerlC,CACzC,CACD,EACD,IAAIuyI,GAAsB,wFAAwF,MAChH,KACCC,GAA2B,kDAAkD,MAC9E,KACCC,GAAmB,gCAAiCC,GAA0B3B,GAAW4B,GAAqB5B,GACxG,SAAA6B,GAAap1I,EAAGwmF,EAAS,CAChC,OAAKxmF,EAGEosI,EAAQ,KAAK,OAAO,EAAI,KAAK,QAAQpsI,EAAE,OAAO,EAAI,KAAK,SAAS,KAAK,QAAQ,UAAYi1I,IAAkB,KAAKzuD,CAAO,EAAI,SAAW,YAAY,EAAExmF,EAAE,MAAO,GAF3JosI,EAAQ,KAAK,OAAO,EAAI,KAAK,QAAU,KAAK,QAAQ,UAG/D,CACS,SAAAiJ,GAAkBr1I,EAAGwmF,EAAS,CACrC,OAAKxmF,EAGEosI,EAAQ,KAAK,YAAY,EAAI,KAAK,aAAapsI,EAAE,OAAO,EAAI,KAAK,aAAai1I,GAAiB,KAAKzuD,CAAO,EAAI,SAAW,YAAY,EAAExmF,EAAE,OAAO,EAF/IosI,EAAQ,KAAK,YAAY,EAAI,KAAK,aAAe,KAAK,aAAa,UAG9E,CACS,SAAAkJ,GAAkBC,EAAW/uD,EAASmmD,EAAQ,CACrD,IAAIxzI,EAAG42D,EAAIw+E,EAAKiH,GAAMD,EAAU,oBAC5B,IAAC,KAAK,aAIR,IAHA,KAAK,aAAe,GACpB,KAAK,iBAAmB,GACxB,KAAK,kBAAoB,GACpBp8I,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACpBo1I,EAAM7B,EAAU,CAAC,IAAKvzI,CAAC,CAAC,EACnB,uBAAkBA,CAAC,EAAI,KAAK,YAC/Bo1I,EACA,IACA,kBAAkB,EACf,sBAAiBp1I,CAAC,EAAI,KAAK,OAAOo1I,EAAK,EAAE,EAAE,oBAGpD,OAAI5B,EACEnmD,IAAY,OACdz2B,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACtCzlF,IAAO,GAAKA,EAAK,OAExBA,EAAK33D,GAAQ,KAAK,KAAK,iBAAkBo9I,EAAG,EACrCzlF,IAAO,GAAKA,EAAK,MAGtBy2B,IAAY,OACdz2B,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACzCzlF,IAAO,GACFA,GAETA,EAAK33D,GAAQ,KAAK,KAAK,iBAAkBo9I,EAAG,EACrCzlF,IAAO,GAAKA,EAAK,QAExBA,EAAK33D,GAAQ,KAAK,KAAK,iBAAkBo9I,EAAG,EACxCzlF,IAAO,GACFA,GAETA,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACtCzlF,IAAO,GAAKA,EAAK,MAG9B,CACS,SAAA0lF,GAAkBF,EAAW/uD,EAASmmD,EAAQ,CACrD,IAAIxzI,EAAGo1I,EAAK/sF,EACZ,GAAI,KAAK,kBACP,OAAO8zF,GAAkB,KAAK,KAAMC,EAAW/uD,EAASmmD,CAAM,EAOhE,IALK,KAAK,eACR,KAAK,aAAe,GACpB,KAAK,iBAAmB,GACxB,KAAK,kBAAoB,IAEtBxzI,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAgBnB,GAfJo1I,EAAM7B,EAAU,CAAC,IAAKvzI,CAAC,CAAC,EACpBwzI,GAAU,CAAC,KAAK,iBAAiBxzI,CAAC,IAC/B,sBAAiBA,CAAC,EAAI,IAAI,OAC7B,IAAM,KAAK,OAAOo1I,EAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAI,IAC9C,KAEG,uBAAkBp1I,CAAC,EAAI,IAAI,OAC9B,IAAM,KAAK,YAAYo1I,EAAK,EAAE,EAAE,QAAQ,IAAK,EAAE,EAAI,IACnD,MAGA,CAAC5B,GAAU,CAAC,KAAK,aAAaxzI,CAAC,IACzBqoD,EAAA,IAAM,KAAK,OAAO+sF,EAAK,EAAE,EAAI,KAAO,KAAK,YAAYA,EAAK,EAAE,EAC/D,kBAAap1I,CAAC,EAAI,IAAI,OAAOqoD,EAAM,QAAQ,IAAK,EAAE,EAAG,GAAG,GAE3DmrF,GAAUnmD,IAAY,QAAU,KAAK,iBAAiBrtF,CAAC,EAAE,KAAKo8I,CAAS,EAClE,OAAAp8I,EACT,GAAWwzI,GAAUnmD,IAAY,OAAS,KAAK,kBAAkBrtF,CAAC,EAAE,KAAKo8I,CAAS,EACzE,OAAAp8I,EACT,GAAW,CAACwzI,GAAU,KAAK,aAAaxzI,CAAC,EAAE,KAAKo8I,CAAS,EAChD,OAAAp8I,CAEX,CACF,CACS,SAAAu8I,GAASnH,EAAKn4I,EAAO,CACxB,IAAAu/I,EACA,IAACpH,EAAI,UACA,OAAAA,EAEL,UAAOn4I,GAAU,UACf,WAAQ,KAAKA,CAAK,EACpBA,EAAQy7I,GAAMz7I,CAAK,UAEnBA,EAAQm4I,EAAI,WAAa,cAAYn4I,CAAK,EACtC,CAACo2I,EAASp2I,CAAK,EACV,OAAAm4I,EAIA,OAAAoH,EAAA,KAAK,IAAIpH,EAAI,KAAK,EAAG6D,GAAY7D,EAAI,OAAQn4I,CAAK,CAAC,EAC5Dm4I,EAAA,GAAG,OAASA,EAAI,OAAS,MAAQ,IAAM,OAAO,EAAEn4I,EAAOu/I,CAAU,EAC9DpH,CACT,CACA,SAASqH,GAAYx/I,EAAO,CAC1B,OAAIA,GAAS,MACXs/I,GAAS,KAAMt/I,CAAK,EACdoZ,EAAA,aAAa,KAAM,EAAI,EACtB,MAEA2iI,GAAI,KAAM,OAAO,CAE5B,CACA,SAAS0D,IAAiB,CACxB,OAAOzD,GAAY,KAAK,KAAQ,OAAK,OAAO,CAC9C,CACA,SAAS0D,GAAiBx0C,EAAU,CAClC,OAAI,KAAK,mBACF+qC,EAAW,KAAM,cAAc,GAClC0J,GAAmB,KAAK,IAAI,EAE1Bz0C,EACK,KAAK,wBAEL,KAAK,oBAGT+qC,EAAW,KAAM,mBAAmB,IACvC,KAAK,kBAAoB6I,IAEpB,KAAK,yBAA2B5zC,EAAW,KAAK,wBAA0B,KAAK,kBAE1F,CACA,SAAS00C,GAAY10C,EAAU,CAC7B,OAAI,KAAK,mBACF+qC,EAAW,KAAM,cAAc,GAClC0J,GAAmB,KAAK,IAAI,EAE1Bz0C,EACK,KAAK,mBAEL,KAAK,eAGT+qC,EAAW,KAAM,cAAc,IAClC,KAAK,aAAe8I,IAEf,KAAK,oBAAsB7zC,EAAW,KAAK,mBAAqB,KAAK,aAEhF,CACA,SAASy0C,IAAqB,CACnB,SAAAE,EAAU1/I,GAAGC,GAAG,CAChB,OAAAA,GAAE,OAASD,GAAE,MACtB,CACI,IAAA2/I,EAAc,CAAI,EAAAC,EAAa,GAAIC,EAAc,CAAC,EAAGj9I,EAAGo1I,EAC5D,IAAKp1I,EAAI,EAAGA,EAAI,GAAIA,IAClBo1I,EAAM7B,EAAU,CAAC,IAAKvzI,CAAC,CAAC,EACxB+8I,EAAY,KAAK,KAAK,YAAY3H,EAAK,EAAE,CAAC,EAC1C4H,EAAW,KAAK,KAAK,OAAO5H,EAAK,EAAE,CAAC,EACpC6H,EAAY,KAAK,KAAK,OAAO7H,EAAK,EAAE,CAAC,EACrC6H,EAAY,KAAK,KAAK,YAAY7H,EAAK,EAAE,CAAC,EAK5C,IAHA2H,EAAY,KAAKD,CAAS,EAC1BE,EAAW,KAAKF,CAAS,EACzBG,EAAY,KAAKH,CAAS,EACrB98I,EAAI,EAAGA,EAAI,GAAIA,IAClB+8I,EAAY/8I,CAAC,EAAI26I,GAAYoC,EAAY/8I,CAAC,CAAC,EAC3Cg9I,EAAWh9I,CAAC,EAAI26I,GAAYqC,EAAWh9I,CAAC,CAAC,EAE3C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAClBi9I,EAAYj9I,CAAC,EAAI26I,GAAYsC,EAAYj9I,CAAC,CAAC,EAExC,kBAAe,IAAI,OAAO,KAAOi9I,EAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EACtE,KAAK,kBAAoB,KAAK,aAC9B,KAAK,mBAAqB,IAAI,OAC5B,KAAOD,EAAW,KAAK,GAAG,EAAI,IAC9B,KAEF,KAAK,wBAA0B,IAAI,OACjC,KAAOD,EAAY,KAAK,GAAG,EAAI,IAC/B,IAEJ,CACe9G,GAAA,IAAK,EAAG,EAAG,UAAW,CAC/B,IAAA59G,EAAI,KAAK,OACb,OAAOA,GAAK,KAAOk9G,GAASl9G,EAAG,CAAC,EAAI,IAAMA,CAAA,CAC3C,EACD49G,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAW,CAClC,YAAK,KAAS,MACtB,EACDA,GAAe,EAAG,CAAC,OAAQ,CAAC,EAAG,EAAG,MAAM,EACxCA,GAAe,EAAG,CAAC,QAAS,CAAC,EAAG,EAAG,MAAM,EACzCA,GAAe,EAAG,CAAC,SAAU,EAAG,EAAI,EAAG,EAAG,MAAM,EAChDyB,GAAa,OAAQ,GAAG,EACxBU,GAAgB,OAAQ,CAAC,EACzBkC,EAAc,IAAKN,EAAW,EAChBM,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,OAAQT,EAAWN,EAAM,EACzBe,EAAA,QAASR,GAAWN,EAAM,EAC1Bc,EAAA,SAAUR,GAAWN,EAAM,EACzCqB,GAAc,CAAC,QAAS,QAAQ,EAAGI,EAAI,EACzBJ,GAAA,OAAQ,SAASxxI,EAAOtK,EAAO,CACrCA,EAAAk8I,EAAI,EAAI5xI,EAAM,SAAW,EAAIgN,EAAM,kBAAkBhN,CAAK,EAAIqvI,GAAMrvI,CAAK,EAChF,EACawxI,GAAA,KAAM,SAASxxI,EAAOtK,EAAO,CACzCA,EAAMk8I,EAAI,EAAI5kI,EAAM,kBAAkBhN,CAAK,EAC5C,EACawxI,GAAA,IAAK,SAASxxI,EAAOtK,EAAO,CACxCA,EAAMk8I,EAAI,EAAI,SAAS5xI,EAAO,EAAE,EACjC,EACD,SAAS6zI,GAAW57F,EAAM,CACjB,OAAAk3F,GAAWl3F,CAAI,EAAI,IAAM,GAClC,CACMjrC,EAAA,kBAAoB,SAAShN,EAAO,CACxC,OAAOqvI,GAAMrvI,CAAK,GAAKqvI,GAAMrvI,CAAK,EAAI,GAAK,KAAO,MAEhD,IAAA8zI,GAAatE,GAAW,WAAY,EAAI,EAC5C,SAASuE,IAAgB,CAChB,OAAA5E,GAAW,KAAK,MAAM,CAC/B,CACA,SAAS6E,GAAWhlH,EAAGxxB,EAAGsiC,EAAG8jB,EAAG4B,EAAG5nC,EAAGq2H,GAAI,CACpC,IAAAx8F,GACA,OAAAzoB,EAAI,KAAOA,GAAK,GACXyoB,GAAA,IAAI,KAAKzoB,EAAI,IAAKxxB,EAAGsiC,EAAG8jB,EAAG4B,EAAG5nC,EAAGq2H,EAAE,EACtC,SAASx8F,GAAK,YAAY,CAAC,GAC7BA,GAAK,YAAYzoB,CAAC,GAGbyoB,GAAA,IAAI,KAAKzoB,EAAGxxB,EAAGsiC,EAAG8jB,EAAG4B,EAAG5nC,EAAGq2H,EAAE,EAE/Bx8F,EACT,CACA,SAASy8F,GAAcllH,EAAG,CACxB,IAAIyoB,EAAMt1C,EACN,OAAA6sB,EAAI,KAAOA,GAAK,GAClB7sB,EAAO,MAAM,UAAU,MAAM,KAAK,SAAS,EACtCA,EAAA,CAAC,EAAI6sB,EAAI,IACdyoB,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAMt1C,CAAI,CAAC,EACtC,SAASs1C,EAAK,eAAe,CAAC,GAChCA,EAAK,eAAezoB,CAAC,GAGvByoB,EAAO,IAAI,KAAK,KAAK,IAAI,MAAM,KAAM,SAAS,CAAC,EAE1CA,CACT,CACS,SAAA08F,GAAgBl8F,EAAMm8F,EAAKC,EAAK,CACvC,IAAIC,EAAM,EAAIF,EAAMC,EAAKE,GAAS,EAAIL,GAAcj8F,EAAM,EAAGq8F,CAAG,EAAE,YAAcF,GAAO,EAChF,OAACG,EAAQD,EAAM,CACxB,CACA,SAASE,GAAmBv8F,EAAMw8F,EAAMC,EAASN,EAAKC,EAAK,CACzD,IAAIM,GAAgB,EAAID,EAAUN,GAAO,EAAGQ,GAAaT,GAAgBl8F,EAAMm8F,EAAKC,CAAG,EAAGQ,GAAY,EAAI,GAAKJ,EAAO,GAAKE,EAAeC,GAAYE,GAASC,GAC/J,OAAIF,IAAa,GACfC,GAAU78F,EAAO,EACF88F,GAAAlB,GAAWiB,EAAO,EAAID,IAC5BA,GAAYhB,GAAW57F,CAAI,GACpC68F,GAAU78F,EAAO,EACF88F,GAAAF,GAAYhB,GAAW57F,CAAI,IAEhC68F,GAAA78F,EACK88F,GAAAF,IAEV,CACL,KAAMC,GACN,UAAWC,EAAA,CAEf,CACS,SAAAC,GAAWjJ,EAAKqI,EAAKC,EAAK,CACjC,IAAIO,EAAaT,GAAgBpI,EAAI,KAAQ,EAAAqI,EAAKC,CAAG,EAAGI,EAAO,KAAK,OAAO1I,EAAI,UAAc,EAAA6I,EAAa,GAAK,CAAC,EAAI,EAAGK,EAASH,GAChI,OAAIL,EAAO,GACCK,GAAA/I,EAAI,KAAS,IACvBkJ,EAAUR,EAAOS,GAAYJ,GAASV,EAAKC,CAAG,GACrCI,EAAOS,GAAYnJ,EAAI,OAAQqI,EAAKC,CAAG,GAChDY,EAAUR,EAAOS,GAAYnJ,EAAI,OAAQqI,EAAKC,CAAG,EACvCS,GAAA/I,EAAI,KAAS,MAEvB+I,GAAU/I,EAAI,OACJkJ,EAAAR,GAEL,CACL,KAAMQ,EACN,KAAMH,EAAA,CAEV,CACS,SAAAI,GAAYj9F,EAAMm8F,EAAKC,EAAK,CAC/B,IAAAO,EAAaT,GAAgBl8F,EAAMm8F,EAAKC,CAAG,EAAGc,EAAiBhB,GAAgBl8F,EAAO,EAAGm8F,EAAKC,CAAG,EACrG,OAAQR,GAAW57F,CAAI,EAAI28F,EAAaO,GAAkB,CAC5D,CACAvI,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,MAAM,EAC3CA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,SAAS,EAC9CyB,GAAa,OAAQ,GAAG,EACxBA,GAAa,UAAW,GAAG,EAC3BU,GAAgB,OAAQ,CAAC,EACzBA,GAAgB,UAAW,CAAC,EAC5BkC,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACrCg4E,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACnBw4E,GAAA,CAAC,IAAK,KAAM,IAAK,IAAI,EAAG,SAASzxI,EAAOy0I,EAAMpvG,EAAQwnG,EAAQ,CAC9E4H,EAAK5H,EAAO,OAAO,EAAG,CAAC,CAAC,EAAIwC,GAAMrvI,CAAK,EACxC,EACD,SAASo1I,GAAWrJ,EAAK,CAChB,OAAAiJ,GAAWjJ,EAAK,KAAK,MAAM,IAAK,KAAK,MAAM,GAAG,EAAE,IACzD,CACA,IAAIsJ,GAAoB,CACtB,IAAK,EAEL,IAAK,GAGP,SAASC,IAAuB,CAC9B,OAAO,KAAK,MAAM,GACpB,CACA,SAASC,IAAuB,CAC9B,OAAO,KAAK,MAAM,GACpB,CACA,SAASC,GAAWx1I,EAAO,CACzB,IAAIy0I,EAAO,KAAK,WAAW,EAAE,KAAK,IAAI,EAC/B,OAAAz0I,GAAS,KAAOy0I,EAAO,KAAK,KAAKz0I,EAAQy0I,GAAQ,EAAG,GAAG,CAChE,CACA,SAASgB,GAAcz1I,EAAO,CAC5B,IAAIy0I,EAAOO,GAAW,KAAM,EAAG,CAAC,EAAE,KAC3B,OAAAh1I,GAAS,KAAOy0I,EAAO,KAAK,KAAKz0I,EAAQy0I,GAAQ,EAAG,GAAG,CAChE,CACe7H,GAAA,IAAK,EAAG,KAAM,KAAK,EAClCA,GAAe,KAAM,EAAG,EAAG,SAAS5oD,EAAS,CAC3C,OAAO,KAAK,WAAa,cAAY,KAAMA,CAAO,EACnD,EACD4oD,GAAe,MAAO,EAAG,EAAG,SAAS5oD,EAAS,CAC5C,OAAO,KAAK,WAAa,gBAAc,KAAMA,CAAO,EACrD,EACD4oD,GAAe,OAAQ,EAAG,EAAG,SAAS5oD,EAAS,CAC7C,OAAO,KAAK,WAAa,WAAS,KAAMA,CAAO,EAChD,EACc4oD,GAAA,IAAK,EAAG,EAAG,SAAS,EACpBA,GAAA,IAAK,EAAG,EAAG,YAAY,EACtCyB,GAAa,MAAO,GAAG,EACvBA,GAAa,UAAW,GAAG,EAC3BA,GAAa,aAAc,GAAG,EAC9BU,GAAgB,MAAO,EAAE,EACzBA,GAAgB,UAAW,EAAE,EAC7BA,GAAgB,aAAc,EAAE,EAChCkC,EAAc,IAAKb,EAAS,EAC5Ba,EAAc,IAAKb,EAAS,EAC5Ba,EAAc,IAAKb,EAAS,EACda,EAAA,KAAM,SAASnyC,EAAUmhC,EAAS,CACvC,OAAAA,EAAQ,iBAAiBnhC,CAAQ,EACzC,EACamyC,EAAA,MAAO,SAASnyC,EAAUmhC,EAAS,CACxC,OAAAA,EAAQ,mBAAmBnhC,CAAQ,EAC3C,EACamyC,EAAA,OAAQ,SAASnyC,EAAUmhC,EAAS,CACzC,OAAAA,EAAQ,cAAcnhC,CAAQ,EACtC,EACiB2yC,GAAA,CAAC,KAAM,MAAO,MAAM,EAAG,SAASzxI,EAAOy0I,EAAMpvG,EAAQwnG,EAAQ,CAC7E,IAAI6H,EAAUrvG,EAAO,QAAQ,cAAcrlC,EAAO6sI,EAAQxnG,EAAO,OAAO,EACpEqvG,GAAW,KACbD,EAAK,EAAIC,EAEOpK,EAAAjlG,CAAM,EAAE,eAAiBrlC,CAC3C,CACD,EACiByxI,GAAA,CAAC,IAAK,IAAK,GAAG,EAAG,SAASzxI,EAAOy0I,EAAMpvG,EAAQwnG,EAAQ,CAClE4H,EAAA5H,CAAM,EAAIwC,GAAMrvI,CAAK,EAC3B,EACQ,SAAA01I,GAAa11I,EAAOigI,EAAS,CAChC,cAAOjgI,GAAU,SACZA,EAEJ,MAAMA,CAAK,GAGRA,EAAAigI,EAAQ,cAAcjgI,CAAK,EAC/B,OAAOA,GAAU,SACZA,EAEF,MANE,SAASA,EAAO,EAAE,CAO7B,CACS,SAAA21I,GAAgB31I,EAAOigI,EAAS,CACnC,cAAOjgI,GAAU,SACZigI,EAAQ,cAAcjgI,CAAK,EAAI,GAAK,EAEtC,MAAMA,CAAK,EAAI,KAAOA,CAC/B,CACS,SAAA41I,GAAcC,EAAIpvI,EAAG,CACrB,OAAAovI,EAAG,MAAMpvI,EAAG,CAAC,EAAE,OAAOovI,EAAG,MAAM,EAAGpvI,CAAC,CAAC,CAC7C,CACA,IAAIqvI,GAAwB,2DAA2D,MACrF,KACCC,GAA6B,8BAA8B,MAAM,GAAG,EAAGC,GAA2B,uBAAuB,MAAM,GAAG,EAAGC,GAAuBlF,GAAWmF,GAA4BnF,GAAWoF,GAA0BpF,GAClO,SAAAqF,GAAe54I,EAAGwmF,EAAS,CAClC,IAAIqyD,EAAWzM,EAAQ,KAAK,SAAS,EAAI,KAAK,UAAY,KAAK,UAAUpsI,GAAKA,IAAM,IAAQ,KAAK,UAAU,SAAS,KAAKwmF,CAAO,EAAI,SAAW,YAAY,EAC3J,OAAOxmF,IAAM,GAAOo4I,GAAcS,EAAU,KAAK,MAAM,GAAG,EAAI74I,EAAI64I,EAAS74I,EAAE,IAAK,GAAI64I,CACxF,CACA,SAASC,GAAoB94I,EAAG,CAC9B,OAAOA,IAAM,GAAOo4I,GAAc,KAAK,eAAgB,KAAK,MAAM,GAAG,EAAIp4I,EAAI,KAAK,eAAeA,EAAE,KAAK,EAAI,KAAK,cACnH,CACA,SAAS+4I,GAAkB/4I,EAAG,CAC5B,OAAOA,IAAM,GAAOo4I,GAAc,KAAK,aAAc,KAAK,MAAM,GAAG,EAAIp4I,EAAI,KAAK,aAAaA,EAAE,KAAK,EAAI,KAAK,YAC/G,CACS,SAAAg5I,GAAoBC,EAAazyD,EAASmmD,EAAQ,CACzD,IAAIxzI,EAAG42D,EAAIw+E,EAAKiH,GAAMyD,EAAY,oBAC9B,IAAC,KAAK,eAIR,IAHA,KAAK,eAAiB,GACtB,KAAK,oBAAsB,GAC3B,KAAK,kBAAoB,GACpB9/I,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACnBo1I,EAAM7B,EAAU,CAAC,IAAK,CAAC,CAAC,EAAE,IAAIvzI,CAAC,EAC1B,uBAAkBA,CAAC,EAAI,KAAK,YAC/Bo1I,EACA,IACA,kBAAkB,EACf,yBAAoBp1I,CAAC,EAAI,KAAK,cACjCo1I,EACA,IACA,kBAAkB,EACf,oBAAep1I,CAAC,EAAI,KAAK,SAASo1I,EAAK,EAAE,EAAE,oBAGpD,OAAI5B,EACEnmD,IAAY,QACdz2B,EAAK33D,GAAQ,KAAK,KAAK,eAAgBo9I,EAAG,EACnCzlF,IAAO,GAAKA,EAAK,MACfy2B,IAAY,OACrBz2B,EAAK33D,GAAQ,KAAK,KAAK,oBAAqBo9I,EAAG,EACxCzlF,IAAO,GAAKA,EAAK,OAExBA,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACtCzlF,IAAO,GAAKA,EAAK,MAGtBy2B,IAAY,QACdz2B,EAAK33D,GAAQ,KAAK,KAAK,eAAgBo9I,EAAG,EACtCzlF,IAAO,KAGXA,EAAK33D,GAAQ,KAAK,KAAK,oBAAqBo9I,EAAG,EAC3CzlF,IAAO,IACFA,GAETA,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACtCzlF,IAAO,GAAKA,EAAK,OACfy2B,IAAY,OACrBz2B,EAAK33D,GAAQ,KAAK,KAAK,oBAAqBo9I,EAAG,EAC3CzlF,IAAO,KAGXA,EAAK33D,GAAQ,KAAK,KAAK,eAAgBo9I,EAAG,EACtCzlF,IAAO,IACFA,GAETA,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACtCzlF,IAAO,GAAKA,EAAK,QAExBA,EAAK33D,GAAQ,KAAK,KAAK,kBAAmBo9I,EAAG,EACzCzlF,IAAO,KAGXA,EAAK33D,GAAQ,KAAK,KAAK,eAAgBo9I,EAAG,EACtCzlF,IAAO,IACFA,GAETA,EAAK33D,GAAQ,KAAK,KAAK,oBAAqBo9I,EAAG,EACxCzlF,IAAO,GAAKA,EAAK,MAG9B,CACS,SAAAmpF,GAAoBD,EAAazyD,EAASmmD,EAAQ,CACzD,IAAIxzI,EAAGo1I,EAAK/sF,EACZ,GAAI,KAAK,oBACP,OAAOw3F,GAAoB,KAAK,KAAMC,EAAazyD,EAASmmD,CAAM,EAQpE,IANK,KAAK,iBACR,KAAK,eAAiB,GACtB,KAAK,kBAAoB,GACzB,KAAK,oBAAsB,GAC3B,KAAK,mBAAqB,IAEvBxzI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAoBlB,GAnBJo1I,EAAM7B,EAAU,CAAC,IAAK,CAAC,CAAC,EAAE,IAAIvzI,CAAC,EAC3BwzI,GAAU,CAAC,KAAK,mBAAmBxzI,CAAC,IACjC,wBAAmBA,CAAC,EAAI,IAAI,OAC/B,IAAM,KAAK,SAASo1I,EAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACpD,KAEG,yBAAoBp1I,CAAC,EAAI,IAAI,OAChC,IAAM,KAAK,cAAco1I,EAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACzD,KAEG,uBAAkBp1I,CAAC,EAAI,IAAI,OAC9B,IAAM,KAAK,YAAYo1I,EAAK,EAAE,EAAE,QAAQ,IAAK,MAAM,EAAI,IACvD,MAGC,KAAK,eAAep1I,CAAC,IACxBqoD,EAAQ,IAAM,KAAK,SAAS+sF,EAAK,EAAE,EAAI,KAAO,KAAK,cAAcA,EAAK,EAAE,EAAI,KAAO,KAAK,YAAYA,EAAK,EAAE,EACtG,oBAAep1I,CAAC,EAAI,IAAI,OAAOqoD,EAAM,QAAQ,IAAK,EAAE,EAAG,GAAG,GAE7DmrF,GAAUnmD,IAAY,QAAU,KAAK,mBAAmBrtF,CAAC,EAAE,KAAK8/I,CAAW,EACtE,OAAA9/I,EACT,GAAWwzI,GAAUnmD,IAAY,OAAS,KAAK,oBAAoBrtF,CAAC,EAAE,KAAK8/I,CAAW,EAC7E,OAAA9/I,EACT,GAAWwzI,GAAUnmD,IAAY,MAAQ,KAAK,kBAAkBrtF,CAAC,EAAE,KAAK8/I,CAAW,EAC1E,OAAA9/I,EACT,GAAW,CAACwzI,GAAU,KAAK,eAAexzI,CAAC,EAAE,KAAK8/I,CAAW,EACpD,OAAA9/I,CAEX,CACF,CACA,SAASggJ,GAAgB32I,EAAO,CAC1B,IAAC,KAAK,UACD,OAAAA,GAAS,KAAO,KAAO,IAE5B,IAAA42I,EAAM,KAAK,OAAS,KAAK,GAAG,UAAU,EAAI,KAAK,GAAG,SACtD,OAAI52I,GAAS,MACXA,EAAQ01I,GAAa11I,EAAO,KAAK,WAAY,GACtC,KAAK,IAAIA,EAAQ42I,EAAK,GAAG,GAEzBA,CAEX,CACA,SAASC,GAAsB72I,EAAO,CAChC,IAAC,KAAK,UACD,OAAAA,GAAS,KAAO,KAAO,IAE5B,IAAA00I,GAAW,KAAK,MAAQ,EAAI,KAAK,WAAa,QAAM,KAAO,EAC/D,OAAO10I,GAAS,KAAO00I,EAAU,KAAK,IAAI10I,EAAQ00I,EAAS,GAAG,CAChE,CACA,SAASoC,GAAmB92I,EAAO,CAC7B,IAAC,KAAK,UACD,OAAAA,GAAS,KAAO,KAAO,IAEhC,GAAIA,GAAS,KAAM,CACjB,IAAI00I,EAAUiB,GAAgB31I,EAAO,KAAK,WAAY,GAC/C,YAAK,IAAI,KAAK,MAAQ,EAAI00I,EAAUA,EAAU,CAAC,MAE/C,aAAK,IAAS,IAEzB,CACA,SAASqC,GAAcj4C,EAAU,CAC/B,OAAI,KAAK,qBACF+qC,EAAW,KAAM,gBAAgB,GACpCmN,GAAqB,KAAK,IAAI,EAE5Bl4C,EACK,KAAK,qBAEL,KAAK,iBAGT+qC,EAAW,KAAM,gBAAgB,IACpC,KAAK,eAAiBoM,IAEjB,KAAK,sBAAwBn3C,EAAW,KAAK,qBAAuB,KAAK,eAEpF,CACA,SAASm4C,GAAmBn4C,EAAU,CACpC,OAAI,KAAK,qBACF+qC,EAAW,KAAM,gBAAgB,GACpCmN,GAAqB,KAAK,IAAI,EAE5Bl4C,EACK,KAAK,0BAEL,KAAK,sBAGT+qC,EAAW,KAAM,qBAAqB,IACzC,KAAK,oBAAsBqM,IAEtB,KAAK,2BAA6Bp3C,EAAW,KAAK,0BAA4B,KAAK,oBAE9F,CACA,SAASo4C,GAAiBp4C,EAAU,CAClC,OAAI,KAAK,qBACF+qC,EAAW,KAAM,gBAAgB,GACpCmN,GAAqB,KAAK,IAAI,EAE5Bl4C,EACK,KAAK,wBAEL,KAAK,oBAGT+qC,EAAW,KAAM,mBAAmB,IACvC,KAAK,kBAAoBsM,IAEpB,KAAK,yBAA2Br3C,EAAW,KAAK,wBAA0B,KAAK,kBAE1F,CACA,SAASk4C,IAAuB,CACrB,SAAAvD,EAAU1/I,GAAGC,GAAG,CAChB,OAAAA,GAAE,OAASD,GAAE,MACtB,CACA,IAAIojJ,EAAY,CAAI,EAAAzD,EAAc,CAAI,EAAAC,EAAa,CAAC,EAAGC,EAAc,GAAIj9I,EAAGo1I,GAAKqL,GAAMC,GAAQC,GAC/F,IAAK3gJ,EAAI,EAAGA,EAAI,EAAGA,IACjBo1I,GAAM7B,EAAU,CAAC,IAAK,CAAC,CAAC,EAAE,IAAIvzI,CAAC,EAC/BygJ,GAAO9F,GAAY,KAAK,YAAYvF,GAAK,EAAE,CAAC,EAC5CsL,GAAS/F,GAAY,KAAK,cAAcvF,GAAK,EAAE,CAAC,EAChDuL,GAAQhG,GAAY,KAAK,SAASvF,GAAK,EAAE,CAAC,EAC1CoL,EAAU,KAAKC,EAAI,EACnB1D,EAAY,KAAK2D,EAAM,EACvB1D,EAAW,KAAK2D,EAAK,EACrB1D,EAAY,KAAKwD,EAAI,EACrBxD,EAAY,KAAKyD,EAAM,EACvBzD,EAAY,KAAK0D,EAAK,EAExBH,EAAU,KAAK1D,CAAS,EACxBC,EAAY,KAAKD,CAAS,EAC1BE,EAAW,KAAKF,CAAS,EACzBG,EAAY,KAAKH,CAAS,EACrB,oBAAiB,IAAI,OAAO,KAAOG,EAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EACxE,KAAK,oBAAsB,KAAK,eAChC,KAAK,kBAAoB,KAAK,eAC9B,KAAK,qBAAuB,IAAI,OAC9B,KAAOD,EAAW,KAAK,GAAG,EAAI,IAC9B,KAEF,KAAK,0BAA4B,IAAI,OACnC,KAAOD,EAAY,KAAK,GAAG,EAAI,IAC/B,KAEF,KAAK,wBAA0B,IAAI,OACjC,KAAOyD,EAAU,KAAK,GAAG,EAAI,IAC7B,IAEJ,CACA,SAASI,IAAU,CACV,YAAK,QAAU,IAAM,EAC9B,CACA,SAASC,IAAU,CACV,YAAK,MAAW,KACzB,CACA5K,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,MAAM,EACxCA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG2K,EAAO,EACzC3K,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG4K,EAAO,EAC1B5K,GAAA,MAAO,EAAG,EAAG,UAAW,CAC9B,SAAK2K,GAAQ,MAAM,IAAI,EAAIrL,GAAS,KAAK,UAAW,CAAC,EAC7D,EACcU,GAAA,QAAS,EAAG,EAAG,UAAW,CACvC,MAAO,GAAK2K,GAAQ,MAAM,IAAI,EAAIrL,GAAS,KAAK,QAAQ,EAAG,CAAC,EAAIA,GAAS,KAAK,UAAW,CAAC,EAC3F,EACcU,GAAA,MAAO,EAAG,EAAG,UAAW,CAC9B,SAAK,KAAK,MAAM,EAAIV,GAAS,KAAK,UAAW,CAAC,EACtD,EACcU,GAAA,QAAS,EAAG,EAAG,UAAW,CACvC,MAAO,GAAK,KAAK,MAAM,EAAIV,GAAS,KAAK,QAAW,GAAC,EAAIA,GAAS,KAAK,UAAW,CAAC,EACpF,EACQ,SAAAuL,GAAS5K,EAAQ6K,EAAW,CACpB9K,GAAAC,EAAQ,EAAG,EAAG,UAAW,CAC/B,YAAK,aAAa,SACvB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb6K,CAAA,CACF,CACD,CACH,CACAD,GAAS,IAAK,EAAI,EAClBA,GAAS,IAAK,EAAK,EACnBpJ,GAAa,OAAQ,GAAG,EACxBU,GAAgB,OAAQ,EAAE,EACjB,SAAA4I,GAAc74C,EAAUmhC,EAAS,CACxC,OAAOA,EAAQ,cACjB,CACAgR,EAAc,IAAK0G,EAAa,EAChC1G,EAAc,IAAK0G,EAAa,EAChC1G,EAAc,IAAKb,EAAS,EAC5Ba,EAAc,IAAKb,EAAS,EAC5Ba,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,KAAMb,GAAWn3E,EAAM,EACrCg4E,EAAc,MAAOZ,EAAS,EAC9BY,EAAc,QAASX,EAAS,EAChCW,EAAc,MAAOZ,EAAS,EAC9BY,EAAc,QAASX,EAAS,EAChCkB,GAAc,CAAC,IAAK,IAAI,EAAGO,EAAI,EAC/BP,GAAc,CAAC,IAAK,IAAI,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACpD,IAAAuyG,EAASvI,GAAMrvI,CAAK,EACxBtK,EAAMq8I,EAAI,EAAI6F,IAAW,GAAK,EAAIA,CAAA,CACnC,EACDpG,GAAc,CAAC,IAAK,GAAG,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACvDA,EAAO,MAAQA,EAAO,QAAQ,KAAKrlC,CAAK,EACxCqlC,EAAO,UAAYrlC,CAAA,CACpB,EACDwxI,GAAc,CAAC,IAAK,IAAI,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CAClD3vC,EAAAq8I,EAAI,EAAI1C,GAAMrvI,CAAK,EACTsqI,EAAAjlG,CAAM,EAAE,QAAU,GACnC,EACDmsG,GAAc,MAAO,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CAC9C,IAAAwyG,EAAM73I,EAAM,OAAS,EACzBtK,EAAMq8I,EAAI,EAAI1C,GAAMrvI,EAAM,OAAO,EAAG63I,CAAG,CAAC,EACxCniJ,EAAMs8I,EAAM,EAAI3C,GAAMrvI,EAAM,OAAO63I,CAAG,CAAC,EACvBvN,EAAAjlG,CAAM,EAAE,QAAU,GACnC,EACDmsG,GAAc,QAAS,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACpD,IAAIyyG,EAAO93I,EAAM,OAAS,EAAG+3I,EAAO/3I,EAAM,OAAS,EACnDtK,EAAMq8I,EAAI,EAAI1C,GAAMrvI,EAAM,OAAO,EAAG83I,CAAI,CAAC,EACzCpiJ,EAAMs8I,EAAM,EAAI3C,GAAMrvI,EAAM,OAAO83I,EAAM,CAAC,CAAC,EAC3CpiJ,EAAMu8I,EAAM,EAAI5C,GAAMrvI,EAAM,OAAO+3I,CAAI,CAAC,EACxBzN,EAAAjlG,CAAM,EAAE,QAAU,GACnC,EACDmsG,GAAc,MAAO,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CAC9C,IAAAwyG,EAAM73I,EAAM,OAAS,EACzBtK,EAAMq8I,EAAI,EAAI1C,GAAMrvI,EAAM,OAAO,EAAG63I,CAAG,CAAC,EACxCniJ,EAAMs8I,EAAM,EAAI3C,GAAMrvI,EAAM,OAAO63I,CAAG,CAAC,EACxC,EACDrG,GAAc,QAAS,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACpD,IAAIyyG,EAAO93I,EAAM,OAAS,EAAG+3I,EAAO/3I,EAAM,OAAS,EACnDtK,EAAMq8I,EAAI,EAAI1C,GAAMrvI,EAAM,OAAO,EAAG83I,CAAI,CAAC,EACzCpiJ,EAAMs8I,EAAM,EAAI3C,GAAMrvI,EAAM,OAAO83I,EAAM,CAAC,CAAC,EAC3CpiJ,EAAMu8I,EAAM,EAAI5C,GAAMrvI,EAAM,OAAO+3I,CAAI,CAAC,EACzC,EACD,SAASC,GAAWh4I,EAAO,CACzB,OAAQA,EAAQ,IAAI,YAAc,SAAO,CAAC,IAAM,GAClD,CACA,IAAIi4I,GAA6B,gBAAiBC,EAAa1I,GAAW,QAAS,EAAI,EAC9E,SAAA2I,EAAeC,EAAQC,EAAUC,EAAS,CACjD,OAAIF,EAAS,GACJE,EAAU,KAAO,KAEjBA,EAAU,KAAO,IAE5B,CACA,IAAIC,EAAa,CACf,SAAU1M,EACV,eAAgBwB,GAChB,YAAaI,GACb,QAASE,GACT,uBAAwBC,GACxB,aAAcE,GACd,OAAQyE,GACR,YAAaC,GACb,KAAM6C,GACN,SAAUS,GACV,YAAaE,GACb,cAAeD,GACf,cAAekC,EAAA,EAEbO,EAAU,CAAI,EAAAC,EAAiB,GAAIC,EAC9B,SAAAC,EAAaC,EAAMtgJ,EAAM,CAChC,IAAI3B,EAAGkiJ,EAAO,KAAK,IAAID,EAAK,OAAQtgJ,EAAK,MAAM,EAC/C,IAAK3B,EAAI,EAAGA,EAAIkiJ,EAAMliJ,GAAK,EACzB,GAAIiiJ,EAAKjiJ,CAAC,IAAM2B,EAAK3B,CAAC,EACb,OAAAA,EAGJ,OAAAkiJ,CACT,CACA,SAASC,EAAgBnlJ,EAAK,CAC5B,OAAOA,GAAMA,EAAI,cAAc,QAAQ,IAAK,GAAG,CACjD,CACA,SAASolJ,EAAaC,EAAO,CAEpB,QADHriJ,EAAI,EAAGe,EAAGuV,EAAMgzH,EAASgZ,EACtBtiJ,EAAIqiJ,EAAM,QAAQ,CAKvB,IAJAC,EAAQH,EAAgBE,EAAMriJ,CAAC,CAAC,EAAE,MAAM,GAAG,EAC3Ce,EAAIuhJ,EAAM,OACVhsI,EAAO6rI,EAAgBE,EAAMriJ,EAAI,CAAC,CAAC,EACnCsW,EAAOA,EAAOA,EAAK,MAAM,GAAG,EAAI,KACzBvV,EAAI,GAAG,CAEZ,GADUuoI,EAAAiZ,GAAWD,EAAM,MAAM,EAAGvhJ,CAAC,EAAE,KAAK,GAAG,CAAC,EAC5CuoI,EACK,OAAAA,EAEL,GAAAhzH,GAAQA,EAAK,QAAUvV,GAAKihJ,EAAaM,EAAOhsI,CAAI,GAAKvV,EAAI,EAC/D,MAEFA,GACF,CACAf,GACF,CACO,OAAA+hJ,CACT,CACA,SAASQ,GAAW3kJ,EAAM,CACxB,IAAI4kJ,EAAY,KAAMC,EAClB,GAAAZ,EAAQjkJ,CAAI,IAAM,QAAU,OAAOrB,EAAW,KAAeA,GAAUA,EAAO,QAC5E,IACFimJ,EAAYT,EAAa,MACRU,EAAAvlJ,GACjBulJ,EAAe,YAAc7kJ,CAAI,EACjC8kJ,GAAmBF,CAAS,OAClB,CACVX,EAAQjkJ,CAAI,EAAI,IAClB,CAEF,OAAOikJ,EAAQjkJ,CAAI,CACrB,CACS,SAAA8kJ,GAAmB1lJ,EAAKgb,EAAQ,CACnC,IAAArC,EACJ,OAAI3Y,IACEo2I,EAAYp7H,CAAM,EACpBrC,EAAOgtI,GAAU3lJ,CAAG,EAEb2Y,EAAAitI,GAAa5lJ,EAAKgb,CAAM,EAE7BrC,EACaosI,EAAApsI,EAEX,OAAO,QAAY,KAAe,QAAQ,MACpC,aACN,UAAY3Y,EAAM,2CAKnB+kJ,EAAa,KACtB,CACS,SAAAa,GAAahlJ,EAAM8wC,EAAQ,CAClC,GAAIA,IAAW,KAAM,CACnB,IAAI46F,EAASyL,EAAe6M,EAExB,GADJlzG,EAAO,KAAO9wC,EACVikJ,EAAQjkJ,CAAI,GAAK,KACnBi3I,GACE,uBACA,2OAEaE,EAAA8M,EAAQjkJ,CAAI,EAAE,gBACpB8wC,EAAO,cAAgB,KAChC,GAAImzG,EAAQnzG,EAAO,YAAY,GAAK,KACnBqmG,EAAA8M,EAAQnzG,EAAO,YAAY,EAAE,gBAElC46F,EAAAiZ,GAAW7zG,EAAO,YAAY,EACpC46F,GAAW,KACbyL,EAAezL,EAAQ,YAEvB,QAAKwY,EAAepzG,EAAO,YAAY,IACtBozG,EAAApzG,EAAO,YAAY,EAAI,IAEzBozG,EAAApzG,EAAO,YAAY,EAAE,KAAK,CACvC,KAAA9wC,EACA,OAAA8wC,CAAA,CACD,EACM,KAIb,OAAAmzG,EAAQjkJ,CAAI,EAAI,IAAIq3I,GAAOH,GAAaC,EAAcrmG,CAAM,CAAC,EACzDozG,EAAelkJ,CAAI,GACrBkkJ,EAAelkJ,CAAI,EAAE,QAAQ,SAAST,EAAG,CAC1BylJ,GAAAzlJ,EAAE,KAAMA,EAAE,MAAM,EAC9B,EAEHulJ,GAAmB9kJ,CAAI,EAChBikJ,EAAQjkJ,CAAI,MAEnB,eAAOikJ,EAAQjkJ,CAAI,EACZ,IAEX,CACS,SAAAilJ,GAAajlJ,EAAM8wC,EAAQ,CAClC,GAAIA,GAAU,KAAM,CACd,IAAA46F,EAASwZ,EAAW/N,EAAe6M,EACnCC,EAAQjkJ,CAAI,GAAK,MAAQikJ,EAAQjkJ,CAAI,EAAE,cAAgB,KACjDikJ,EAAAjkJ,CAAI,EAAE,IAAIk3I,GAAa+M,EAAQjkJ,CAAI,EAAE,QAAS8wC,CAAM,CAAC,GAE7Do0G,EAAYP,GAAW3kJ,CAAI,EACvBklJ,GAAa,OACf/N,EAAe+N,EAAU,SAElBp0G,EAAAomG,GAAaC,EAAcrmG,CAAM,EACtCo0G,GAAa,OACfp0G,EAAO,KAAO9wC,GAEN0rI,EAAA,IAAI2L,GAAOvmG,CAAM,EACnB46F,EAAA,aAAeuY,EAAQjkJ,CAAI,EACnCikJ,EAAQjkJ,CAAI,EAAI0rI,GAElBoZ,GAAmB9kJ,CAAI,OAEnBikJ,EAAQjkJ,CAAI,GAAK,OACfikJ,EAAQjkJ,CAAI,EAAE,cAAgB,MAChCikJ,EAAQjkJ,CAAI,EAAIikJ,EAAQjkJ,CAAI,EAAE,aAC1BA,IAAS8kJ,MACXA,GAAmB9kJ,CAAI,GAEhBikJ,EAAQjkJ,CAAI,GAAK,MAC1B,OAAOikJ,EAAQjkJ,CAAI,GAIzB,OAAOikJ,EAAQjkJ,CAAI,CACrB,CACA,SAAS+kJ,GAAU3lJ,EAAK,CAClB,IAAAssI,EAIJ,GAHItsI,GAAOA,EAAI,SAAWA,EAAI,QAAQ,QACpCA,EAAMA,EAAI,QAAQ,OAEhB,CAACA,EACI,OAAA+kJ,EAEL,IAAC9O,EAAQj2I,CAAG,EAAG,CAEjB,GADAssI,EAAUiZ,GAAWvlJ,CAAG,EACpBssI,EACK,OAAAA,EAETtsI,EAAM,CAACA,CAAG,CACZ,CACA,OAAOolJ,EAAaplJ,CAAG,CACzB,CACA,SAAS+lJ,IAAc,CACrB,OAAOz7I,EAAKu6I,CAAO,CACrB,CACA,SAASmB,GAAcn8I,EAAG,CACpB,IAAAqyG,EAAU97G,EAAIyJ,EAAE,GACpB,OAAIzJ,GAAKu2I,EAAgB9sI,CAAC,EAAE,WAAa,KACvCqyG,EAAW97G,EAAE89I,EAAK,EAAI,GAAK99I,EAAE89I,EAAK,EAAI,GAAKA,GAAQ99I,EAAE+9I,EAAI,EAAI,GAAK/9I,EAAE+9I,EAAI,EAAIlC,GAAY77I,EAAE69I,EAAI,EAAG79I,EAAE89I,EAAK,CAAC,EAAIC,GAAO/9I,EAAEg+I,EAAI,EAAI,GAAKh+I,EAAEg+I,EAAI,EAAI,IAAMh+I,EAAEg+I,EAAI,IAAM,KAAOh+I,EAAEi+I,EAAM,IAAM,GAAKj+I,EAAEk+I,EAAM,IAAM,GAAKl+I,EAAEm+I,EAAW,IAAM,GAAKH,GAAOh+I,EAAEi+I,EAAM,EAAI,GAAKj+I,EAAEi+I,EAAM,EAAI,GAAKA,GAASj+I,EAAEk+I,EAAM,EAAI,GAAKl+I,EAAEk+I,EAAM,EAAI,GAAKA,GAASl+I,EAAEm+I,EAAW,EAAI,GAAKn+I,EAAEm+I,EAAW,EAAI,IAAMA,GAAc,GACxX5H,EAAgB9sI,CAAC,EAAE,qBAAuBqyG,EAAW+hC,IAAQ/hC,EAAWiiC,MAC/DjiC,EAAAiiC,IAETxH,EAAgB9sI,CAAC,EAAE,gBAAkBqyG,IAAa,KACzCA,EAAAsiC,IAET7H,EAAgB9sI,CAAC,EAAE,kBAAoBqyG,IAAa,KAC3CA,EAAAuiC,IAEG9H,EAAA9sI,CAAC,EAAE,SAAWqyG,GAEzBryG,CACT,CACA,IAAIo8I,GAAmB,iJAAkJC,GAAgB,6IAA8IC,GAAU,wBAAyBC,GAAW,CACnX,CAAC,eAAgB,qBAAqB,EACtC,CAAC,aAAc,iBAAiB,EAChC,CAAC,eAAgB,gBAAgB,EACjC,CAAC,aAAc,cAAe,EAAK,EACnC,CAAC,WAAY,aAAa,EAC1B,CAAC,UAAW,aAAc,EAAK,EAC/B,CAAC,aAAc,YAAY,EAC3B,CAAC,WAAY,OAAO,EACpB,CAAC,aAAc,aAAa,EAC5B,CAAC,YAAa,cAAe,EAAK,EAClC,CAAC,UAAW,OAAO,EACnB,CAAC,SAAU,QAAS,EAAK,EACzB,CAAC,OAAQ,QAAS,EAAK,GACtBC,GAAW,CACZ,CAAC,gBAAiB,qBAAqB,EACvC,CAAC,gBAAiB,oBAAoB,EACtC,CAAC,WAAY,gBAAgB,EAC7B,CAAC,QAAS,WAAW,EACrB,CAAC,cAAe,mBAAmB,EACnC,CAAC,cAAe,kBAAkB,EAClC,CAAC,SAAU,cAAc,EACzB,CAAC,OAAQ,UAAU,EACnB,CAAC,KAAM,MAAM,CACZ,EAAAC,GAAkB,qBAAsBC,GAAU,0LAA2LC,GAAa,CAC3P,GAAI,EACJ,IAAK,EACL,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,GACV,IAAK,GAAK,IAEZ,SAASC,GAAc/0G,EAAQ,CAC7B,IAAI1uC,EAAG8Q,EAAGyE,EAASm5B,EAAO,GAAI3nC,EAAQk8I,GAAiB,KAAK1tI,CAAM,GAAK2tI,GAAc,KAAK3tI,CAAM,EAAGmuI,EAAWC,GAAYC,GAAYC,GACtI,GAAI98I,EAAO,CAET,IADgB4sI,EAAAjlG,CAAM,EAAE,IAAM,GACzB1uC,EAAI,EAAG8Q,EAAIsyI,GAAS,OAAQpjJ,EAAI8Q,EAAG9Q,IAClC,GAAAojJ,GAASpjJ,CAAC,EAAE,CAAC,EAAE,KAAK+G,EAAM,CAAC,CAAC,EAAG,CACpB48I,GAAAP,GAASpjJ,CAAC,EAAE,CAAC,EAC1B0jJ,EAAYN,GAASpjJ,CAAC,EAAE,CAAC,IAAM,GAC/B,KACF,CAEF,GAAI2jJ,IAAc,KAAM,CACtBj1G,EAAO,SAAW,GAClB,MACF,CACI,GAAA3nC,EAAM,CAAC,EAAG,CACZ,IAAK/G,EAAI,EAAG8Q,EAAIuyI,GAAS,OAAQrjJ,EAAI8Q,EAAG9Q,IAClC,GAAAqjJ,GAASrjJ,CAAC,EAAE,CAAC,EAAE,KAAK+G,EAAM,CAAC,CAAC,EAAG,CACjC68I,IAAc78I,EAAM,CAAC,GAAK,KAAOs8I,GAASrjJ,CAAC,EAAE,CAAC,EAC9C,KACF,CAEF,GAAI4jJ,IAAc,KAAM,CACtBl1G,EAAO,SAAW,GAClB,MACF,CACF,CACI,IAACg1G,GAAaE,IAAc,KAAM,CACpCl1G,EAAO,SAAW,GAClB,MACF,CACI,GAAA3nC,EAAM,CAAC,EACT,GAAIo8I,GAAQ,KAAKp8I,EAAM,CAAC,CAAC,EACZ88I,GAAA,QACN,CACLn1G,EAAO,SAAW,GAClB,MACF,CAEFA,EAAO,GAAKi1G,IAAcC,IAAc,KAAOC,IAAY,IAC3DC,GAA0Bp1G,CAAM,OAEhCA,EAAO,SAAW,EAEtB,CACA,SAASq1G,GAA0BC,EAASC,EAAUC,EAAQC,EAASC,EAAWC,EAAW,CAC3F,IAAI95I,GAAS,CACX+5I,GAAeN,CAAO,EACtBnI,GAAyB,QAAQoI,CAAQ,EACzC,SAASC,EAAQ,EAAE,EACnB,SAASC,EAAS,EAAE,EACpB,SAASC,EAAW,EAAE,GAExB,OAAIC,GACF95I,GAAO,KAAK,SAAS85I,EAAW,EAAE,CAAC,EAE9B95I,EACT,CACA,SAAS+5I,GAAeN,EAAS,CAC3B,IAAA1iG,EAAO,SAAS0iG,EAAS,EAAE,EAC/B,OAAI1iG,GAAQ,GACH,IAAMA,EACJA,GAAQ,IACV,KAAOA,EAETA,CACT,CACA,SAASijG,GAAkBt9H,EAAG,CAC5B,OAAOA,EAAE,QAAQ,oBAAqB,GAAG,EAAE,QAAQ,WAAY,GAAG,EAAE,QAAQ,SAAU,EAAE,EAAE,QAAQ,SAAU,EAAE,CAChH,CACS,SAAAu9H,GAAaC,EAAYC,EAAah2G,EAAQ,CACrD,GAAI+1G,EAAY,CACd,IAAIE,EAAkBvF,GAA2B,QAAQqF,CAAU,EAAGG,EAAgB,IAAI,KACxFF,EAAY,CAAC,EACbA,EAAY,CAAC,EACbA,EAAY,CAAC,GACb,OAAO,EACT,GAAIC,IAAoBC,EACN,OAAAjR,EAAAjlG,CAAM,EAAE,gBAAkB,GAC1CA,EAAO,SAAW,GACX,EAEX,CACO,QACT,CACS,SAAAm2G,GAAgBC,EAAWC,EAAgBC,EAAW,CAC7D,GAAIF,EACF,OAAOtB,GAAWsB,CAAS,KAClBC,EACF,SAEH,IAAAE,EAAK,SAASD,EAAW,EAAE,EAAGn+I,EAAIo+I,EAAK,IAAKh4F,GAAKg4F,EAAKp+I,GAAK,IAC/D,OAAOomD,EAAI,GAAKpmD,CAEpB,CACA,SAASq+I,GAAkBx2G,EAAQ,CACjC,IAAI3nC,EAAQw8I,GAAQ,KAAKgB,GAAkB71G,EAAO,EAAE,CAAC,EAAGy2G,EACxD,GAAIp+I,EAAO,CAST,GARco+I,EAAApB,GACZh9I,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,EACPA,EAAM,CAAC,GAEL,CAACy9I,GAAaz9I,EAAM,CAAC,EAAGo+I,EAAaz2G,CAAM,EAC7C,OAEFA,EAAO,GAAKy2G,EACLz2G,EAAA,KAAOm2G,GAAgB99I,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,EAAE,CAAC,EAC3D2nC,EAAO,GAAK6uG,GAAc,MAAM,KAAM7uG,EAAO,EAAE,EAC/CA,EAAO,GAAG,cAAcA,EAAO,GAAG,cAAc,EAAIA,EAAO,IAAI,EAC/CilG,EAAAjlG,CAAM,EAAE,QAAU,QAElCA,EAAO,SAAW,EAEtB,CACA,SAAS02G,GAAiB12G,EAAQ,CAChC,IAAIhjC,EAAU43I,GAAgB,KAAK50G,EAAO,EAAE,EAC5C,GAAIhjC,IAAY,KAAM,CACpBgjC,EAAO,GAAyB,SAAK,CAAChjC,EAAQ,CAAC,CAAC,EAChD,MACF,CAEI,GADJ+3I,GAAc/0G,CAAM,EAChBA,EAAO,WAAa,GACtB,OAAOA,EAAO,aAEd,QAGE,GADJw2G,GAAkBx2G,CAAM,EACpBA,EAAO,WAAa,GACtB,OAAOA,EAAO,aAEd,QAEEA,EAAO,QACTA,EAAO,SAAW,GAElBr4B,EAAM,wBAAwBq4B,CAAM,CAExC,CACAr4B,EAAM,wBAA0Bq+H,GAC9B,gSACA,SAAShmG,EAAQ,CACRA,EAAA,OAAyB,KAAKA,EAAO,IAAMA,EAAO,QAAU,OAAS,GAAG,CACjF,GAEO,SAAA6J,GAASn7C,EAAGC,EAAGslC,EAAG,CACzB,OAAIvlC,GAGAC,GAGGslC,CACT,CACA,SAAS0iH,GAAiB32G,EAAQ,CAChC,IAAI42G,EAAW,IAAI,KAAKjvI,EAAM,IAAK,GACnC,OAAIq4B,EAAO,QACF,CACL42G,EAAS,eAAe,EACxBA,EAAS,YAAY,EACrBA,EAAS,WAAW,GAGjB,CAACA,EAAS,cAAeA,EAAS,WAAYA,EAAS,SAAS,CACzE,CACA,SAASC,GAAgB72G,EAAQ,CAC/B,IAAI1uC,EAAG8gD,EAAMz3C,EAAQ,CAAC,EAAGm8I,EAAaC,EAAiBC,GACvD,GAAI,CAAAh3G,EAAO,GAgBN,KAbL82G,EAAcH,GAAiB32G,CAAM,EACjCA,EAAO,IAAMA,EAAO,GAAGysG,EAAI,GAAK,MAAQzsG,EAAO,GAAGwsG,EAAK,GAAK,MAC9DyK,GAAsBj3G,CAAM,EAE1BA,EAAO,YAAc,OACvBg3G,GAAYntG,GAAS7J,EAAO,GAAGusG,EAAI,EAAGuK,EAAYvK,EAAI,CAAC,GACnDvsG,EAAO,WAAawuG,GAAWwI,EAAS,GAAKh3G,EAAO,aAAe,KACrDilG,EAAAjlG,CAAM,EAAE,mBAAqB,IAE/CoS,EAAOy8F,GAAcmI,GAAW,EAAGh3G,EAAO,UAAU,EACpDA,EAAO,GAAGwsG,EAAK,EAAIp6F,EAAK,YAAY,EACpCpS,EAAO,GAAGysG,EAAI,EAAIr6F,EAAK,WAAW,GAE/B9gD,EAAI,EAAGA,EAAI,GAAK0uC,EAAO,GAAG1uC,CAAC,GAAK,KAAM,EAAEA,EAC3C0uC,EAAO,GAAG1uC,CAAC,EAAIqJ,EAAMrJ,CAAC,EAAIwlJ,EAAYxlJ,CAAC,EAElC,KAAAA,EAAI,EAAGA,IACZ0uC,EAAO,GAAG1uC,CAAC,EAAIqJ,EAAMrJ,CAAC,EAAI0uC,EAAO,GAAG1uC,CAAC,GAAK,KAAOA,IAAM,EAAI,EAAI,EAAI0uC,EAAO,GAAG1uC,CAAC,EAE5E0uC,EAAO,GAAG0sG,EAAI,IAAM,IAAM1sG,EAAO,GAAG2sG,EAAM,IAAM,GAAK3sG,EAAO,GAAG4sG,EAAM,IAAM,GAAK5sG,EAAO,GAAG6sG,EAAW,IAAM,IAC7G7sG,EAAO,SAAW,GACXA,EAAA,GAAG0sG,EAAI,EAAI,GAEpB1sG,EAAO,IAAMA,EAAO,QAAU6uG,GAAgBF,IAAY,MACxD,KACAh0I,CAAA,EAEgBo8I,EAAA/2G,EAAO,QAAUA,EAAO,GAAG,YAAcA,EAAO,GAAG,SACjEA,EAAO,MAAQ,MACjBA,EAAO,GAAG,cAAcA,EAAO,GAAG,cAAc,EAAIA,EAAO,IAAI,EAE7DA,EAAO,WACFA,EAAA,GAAG0sG,EAAI,EAAI,IAEhB1sG,EAAO,IAAM,OAAOA,EAAO,GAAG,EAAM,KAAeA,EAAO,GAAG,IAAM+2G,IACrD9R,EAAAjlG,CAAM,EAAE,gBAAkB,IAE9C,CACA,SAASi3G,GAAsBj3G,EAAQ,CACrC,IAAI,EAAGk3G,EAAU9H,EAAMC,EAASN,EAAKC,GAAK5vI,GAAM+3I,GAAiBC,GACjE,EAAIp3G,EAAO,GACP,EAAE,IAAM,MAAQ,EAAE,GAAK,MAAQ,EAAE,GAAK,MAClC+uG,EAAA,EACAC,GAAA,EACKkI,EAAArtG,GACT,EAAE,GACF7J,EAAO,GAAGusG,EAAI,EACdoD,GAAW0H,GAAe,IAAG,CAAC,EAAE,MAE3BjI,EAAAvlG,GAAS,EAAE,EAAG,CAAC,EACZwlG,EAAAxlG,GAAS,EAAE,EAAG,CAAC,GACrBwlG,EAAU,GAAKA,EAAU,KACT8H,GAAA,MAGdpI,EAAA/uG,EAAO,QAAQ,MAAM,IACrBgvG,GAAAhvG,EAAO,QAAQ,MAAM,IAC3Bo3G,GAAUzH,GAAW0H,GAAe,EAAAtI,EAAKC,EAAG,EACjCkI,EAAArtG,GAAS,EAAE,GAAI7J,EAAO,GAAGusG,EAAI,EAAG6K,GAAQ,IAAI,EACvDhI,EAAOvlG,GAAS,EAAE,EAAGutG,GAAQ,IAAI,EAC7B,EAAE,GAAK,MACT/H,EAAU,EAAE,GACRA,EAAU,GAAKA,EAAU,KACT8H,GAAA,KAEX,EAAE,GAAK,MAChB9H,EAAU,EAAE,EAAIN,GACZ,EAAE,EAAI,GAAK,EAAE,EAAI,KACDoI,GAAA,KAGV9H,EAAAN,GAGVK,EAAO,GAAKA,EAAOS,GAAYqH,EAAUnI,EAAKC,EAAG,EACnC/J,EAAAjlG,CAAM,EAAE,eAAiB,GAChCm3G,IAAmB,KACZlS,EAAAjlG,CAAM,EAAE,iBAAmB,IAE3C5gC,GAAO+vI,GAAmB+H,EAAU9H,EAAMC,EAASN,EAAKC,EAAG,EACpDhvG,EAAA,GAAGusG,EAAI,EAAIntI,GAAK,KACvB4gC,EAAO,WAAa5gC,GAAK,UAE7B,CACAuI,EAAM,SAAW,UAAW,GAE5BA,EAAM,SAAW,UAAW,GAE5B,SAASytI,GAA0Bp1G,EAAQ,CACrC,GAAAA,EAAO,KAAOr4B,EAAM,SAAU,CAChCotI,GAAc/0G,CAAM,EACpB,MACF,CACI,GAAAA,EAAO,KAAOr4B,EAAM,SAAU,CAChC6uI,GAAkBx2G,CAAM,EACxB,MACF,CACAA,EAAO,GAAK,GACIilG,EAAAjlG,CAAM,EAAE,MAAQ,GAChC,IAAIn5B,EAAS,GAAKm5B,EAAO,GAAI1uC,EAAG0kJ,EAAasB,EAAS9P,EAAQ+P,GAASC,GAAe3wI,EAAO,OAAQ4wI,GAAyB,EAAGC,GAEjI,IADUJ,EAAAxP,GAAa9nG,EAAO,GAAIA,EAAO,OAAO,EAAE,MAAMmnG,CAAgB,GAAK,GACxE71I,EAAI,EAAGA,EAAIgmJ,EAAQ,OAAQhmJ,IAC9Bk2I,EAAS8P,EAAQhmJ,CAAC,EACH0kJ,GAAAnvI,EAAO,MAAMklI,GAAsBvE,EAAQxnG,CAAM,CAAC,GAAK,IAAI,CAAC,EACvEg2G,IACFuB,GAAU1wI,EAAO,OAAO,EAAGA,EAAO,QAAQmvI,CAAW,CAAC,EAClDuB,GAAQ,OAAS,GACnBtS,EAAgBjlG,CAAM,EAAE,YAAY,KAAKu3G,EAAO,EAElD1wI,EAASA,EAAO,MACdA,EAAO,QAAQmvI,CAAW,EAAIA,EAAY,QAE5CyB,IAA0BzB,EAAY,QAEpC1O,EAAqBE,CAAM,GACzBwO,EACc/Q,EAAAjlG,CAAM,EAAE,MAAQ,GAEhCilG,EAAgBjlG,CAAM,EAAE,aAAa,KAAKwnG,CAAM,EAE1B8E,GAAA9E,EAAQwO,EAAah2G,CAAM,GAC1CA,EAAO,SAAW,CAACg2G,GAC5B/Q,EAAgBjlG,CAAM,EAAE,aAAa,KAAKwnG,CAAM,EAGpCvC,EAAAjlG,CAAM,EAAE,cAAgBw3G,GAAeC,GACnD5wI,EAAO,OAAS,GAClBo+H,EAAgBjlG,CAAM,EAAE,YAAY,KAAKn5B,CAAM,EAE7Cm5B,EAAO,GAAG0sG,EAAI,GAAK,IAAMzH,EAAgBjlG,CAAM,EAAE,UAAY,IAAQA,EAAO,GAAG0sG,EAAI,EAAI,IACzEzH,EAAAjlG,CAAM,EAAE,QAAU,QAEpCilG,EAAgBjlG,CAAM,EAAE,gBAAkBA,EAAO,GAAG,MAAM,CAAC,EAC3CilG,EAAAjlG,CAAM,EAAE,SAAWA,EAAO,UACnCA,EAAA,GAAG0sG,EAAI,EAAIiL,GAChB33G,EAAO,QACPA,EAAO,GAAG0sG,EAAI,EACd1sG,EAAO,WAEH03G,GAAAzS,EAAgBjlG,CAAM,EAAE,IAC1B03G,KAAQ,OACH13G,EAAA,GAAGusG,EAAI,EAAIvsG,EAAO,QAAQ,gBAAgB03G,GAAK13G,EAAO,GAAGusG,EAAI,CAAC,GAEvEsK,GAAgB72G,CAAM,EACtBs0G,GAAct0G,CAAM,CACtB,CACS,SAAA23G,GAAgB/c,EAASgd,EAAMC,EAAW,CAC7C,IAAAC,EACJ,OAAID,GAAa,KACRD,EAELhd,EAAQ,cAAgB,KACnBA,EAAQ,aAAagd,EAAMC,CAAS,GAClCjd,EAAQ,MAAQ,OAClBkd,EAAAld,EAAQ,KAAKid,CAAS,EACzBC,GAAQF,EAAO,KACTA,GAAA,IAEN,CAACE,GAAQF,IAAS,KACbA,EAAA,IAEFA,EAIX,CACA,SAASG,GAAyB/3G,EAAQ,CACxC,IAAIg4G,EAAYC,EAAYC,EAAa5mJ,EAAG6mJ,EAAcC,GAAkBC,GAAoB,GAC5F,GAAAr4G,EAAO,GAAG,SAAW,EAAG,CACVilG,EAAAjlG,CAAM,EAAE,cAAgB,GACjCA,EAAA,GAAyB,SAAK,GAAG,EACxC,MACF,CACA,IAAK1uC,EAAI,EAAGA,EAAI0uC,EAAO,GAAG,OAAQ1uC,IACjB6mJ,EAAA,EACIC,GAAA,GACNJ,EAAAtS,EAAW,GAAI1lG,CAAM,EAC9BA,EAAO,SAAW,OACpBg4G,EAAW,QAAUh4G,EAAO,SAEnBg4G,EAAA,GAAKh4G,EAAO,GAAG1uC,CAAC,EAC3B8jJ,GAA0B4C,CAAU,EAChCj3D,EAAQi3D,CAAU,IACDI,GAAA,IAELD,GAAAlT,EAAgB+S,CAAU,EAAE,cAC5CG,GAAgBlT,EAAgB+S,CAAU,EAAE,aAAa,OAAS,GAClD/S,EAAA+S,CAAU,EAAE,MAAQG,EAC/BE,GASCF,EAAeD,IACHA,EAAAC,EACDF,EAAAD,IAVXE,GAAe,MAAQC,EAAeD,GAAeE,MACzCF,EAAAC,EACDF,EAAAD,EACTI,KACkBC,GAAA,KAUrB3gF,EAAA13B,EAAQi4G,GAAcD,CAAU,CACzC,CACA,SAASM,GAAiBt4G,EAAQ,CAChC,GAAI,CAAAA,EAAO,GAGP,KAAA1uC,EAAI+3I,GAAqBrpG,EAAO,EAAE,EAAGu4G,EAAYjnJ,EAAE,MAAQ,OAASA,EAAE,KAAOA,EAAE,IACnF0uC,EAAO,GAAKrhC,EACV,CAACrN,EAAE,KAAMA,EAAE,MAAOinJ,EAAWjnJ,EAAE,KAAMA,EAAE,OAAQA,EAAE,OAAQA,EAAE,WAAW,EACtE,SAASjD,EAAK,CACL,OAAAA,GAAO,SAASA,EAAK,EAAE,CAChC,GAEFwoJ,GAAgB72G,CAAM,EACxB,CACA,SAASw4G,GAAiBx4G,EAAQ,CAChC,IAAI+rD,EAAM,IAAI85C,EAAOyO,GAAcmE,GAAcz4G,CAAM,CAAC,CAAC,EACzD,OAAI+rD,EAAI,WACFA,EAAA,IAAI,EAAG,GAAG,EACdA,EAAI,SAAW,QAEVA,CACT,CACA,SAAS0sD,GAAcz4G,EAAQ,CAC7B,IAAIrlC,EAAQqlC,EAAO,GAAI2+C,EAAU3+C,EAAO,GAExC,OADAA,EAAO,QAAUA,EAAO,SAAWi0G,GAAUj0G,EAAO,EAAE,EAClDrlC,IAAU,MAAQgkF,IAAY,QAAUhkF,IAAU,GAC7C4qI,EAAc,CAAE,UAAW,EAAM,IAEtC,OAAO5qI,GAAU,WACnBqlC,EAAO,GAAKrlC,EAAQqlC,EAAO,QAAQ,SAASrlC,CAAK,GAE/CmrI,EAASnrI,CAAK,EACT,IAAIkrI,EAAOyO,GAAc35I,CAAK,CAAC,GAC7BiqI,EAAOjqI,CAAK,EACrBqlC,EAAO,GAAKrlC,EACH4pI,EAAQ5lD,CAAO,EACxBo5D,GAAyB/3G,CAAM,EACtB2+C,EACTy2D,GAA0Bp1G,CAAM,EAEhC04G,GAAgB14G,CAAM,EAEnB+gD,EAAQ/gD,CAAM,IACjBA,EAAO,GAAK,MAEPA,GACT,CACA,SAAS04G,GAAgB14G,EAAQ,CAC/B,IAAIrlC,EAAQqlC,EAAO,GACf0kG,EAAY/pI,CAAK,EACnBqlC,EAAO,GAAK,IAAI,KAAKr4B,EAAM,IAAK,GACvBi9H,EAAOjqI,CAAK,EACrBqlC,EAAO,GAAK,IAAI,KAAKrlC,EAAM,QAAS,GAC3B,OAAOA,GAAU,SAC1B+7I,GAAiB12G,CAAM,EACdukG,EAAQ5pI,CAAK,GACtBqlC,EAAO,GAAKrhC,EAAIhE,EAAM,MAAM,CAAC,EAAG,SAAStM,EAAK,CACrC,gBAASA,EAAK,EAAE,EACxB,EACDwoJ,GAAgB72G,CAAM,GACbgpD,EAASruF,CAAK,EACvB29I,GAAiBt4G,CAAM,EACd2kG,EAAShqI,CAAK,EAChBqlC,EAAA,GAAK,IAAI,KAAKrlC,CAAK,EAE1BgN,EAAM,wBAAwBq4B,CAAM,CAExC,CACA,SAAS+kG,GAAiBpqI,EAAOgkF,EAASi8C,EAASkK,EAAQ6T,EAAO,CAChE,IAAI1kH,EAAI,GACJ,OAAA0qD,IAAY,IAAQA,IAAY,MACzBmmD,EAAAnmD,EACCA,EAAA,SAERi8C,IAAY,IAAQA,IAAY,MACzBkK,EAAAlK,EACCA,EAAA,SAER5xC,EAASruF,CAAK,GAAK8pI,EAAc9pI,CAAK,GAAK4pI,EAAQ5pI,CAAK,GAAKA,EAAM,SAAW,KACxEA,EAAA,QAEVs5B,EAAE,iBAAmB,GACnBA,EAAA,QAAUA,EAAE,OAAS0kH,EACvB1kH,EAAE,GAAK2mG,EACP3mG,EAAE,GAAKt5B,EACPs5B,EAAE,GAAK0qD,EACP1qD,EAAE,QAAU6wG,EACL0T,GAAiBvkH,CAAC,CAC3B,CACA,SAASojH,GAAY18I,EAAOgkF,EAASi8C,EAASkK,EAAQ,CACpD,OAAOC,GAAiBpqI,EAAOgkF,EAASi8C,EAASkK,EAAQ,EAAK,CAChE,CACA,IAAI8T,GAAe5S,GACjB,qGACA,UAAW,CACT,IAAI6S,EAAQxB,GAAY,MAAM,KAAM,SAAS,EAC7C,OAAI,KAAK,WAAawB,EAAM,UACnBA,EAAQ,KAAO,KAAOA,EAEtBtT,EAAc,CAEzB,GACCuT,GAAe9S,GAChB,qGACA,UAAW,CACT,IAAI6S,EAAQxB,GAAY,MAAM,KAAM,SAAS,EAC7C,OAAI,KAAK,WAAawB,EAAM,UACnBA,EAAQ,KAAO,KAAOA,EAEtBtT,EAAc,CAEzB,GAEO,SAAAwT,GAAOhgJ,EAAIigJ,EAAS,CAC3B,IAAIjtD,EAAKz6F,EAIL,GAHA0nJ,EAAQ,SAAW,GAAKzU,EAAQyU,EAAQ,CAAC,CAAC,IAC5CA,EAAUA,EAAQ,CAAC,GAEjB,CAACA,EAAQ,OACX,OAAO3B,GAAY,EAGrB,IADAtrD,EAAMitD,EAAQ,CAAC,EACV1nJ,EAAI,EAAGA,EAAI0nJ,EAAQ,OAAQ,EAAE1nJ,GAC5B,CAAC0nJ,EAAQ1nJ,CAAC,EAAE,QAAQ,GAAK0nJ,EAAQ1nJ,CAAC,EAAEyH,CAAE,EAAEgzF,CAAG,KAC7CA,EAAMitD,EAAQ1nJ,CAAC,GAGZ,OAAAy6F,CACT,CACA,SAASrtB,IAAM,CACb,IAAI5hE,EAAO,GAAG,MAAM,KAAK,UAAW,CAAC,EAC9B,OAAAi8I,GAAO,WAAYj8I,CAAI,CAChC,CACA,SAASqa,IAAM,CACb,IAAIra,EAAO,GAAG,MAAM,KAAK,UAAW,CAAC,EAC9B,OAAAi8I,GAAO,UAAWj8I,CAAI,CAC/B,CACA,IAAIm8I,GAAM,UAAW,CACnB,OAAO,KAAK,IAAM,KAAK,MAAQ,KAAqB,IAAK,EAEvDC,GAAW,CACb,OACA,UACA,QACA,OACA,MACA,OACA,SACA,SACA,eAEF,SAASC,GAAgBhhJ,EAAG,CACtB,IAAA7J,EAAK8qJ,EAAiB,GAAO9nJ,EACjC,IAAKhD,KAAO6J,EACN,GAAAqsI,EAAWrsI,EAAG7J,CAAG,GAAK,EAAEiC,GAAQ,KAAK2oJ,GAAU5qJ,CAAG,IAAM,KAAO6J,EAAE7J,CAAG,GAAK,MAAQ,CAAC,MAAM6J,EAAE7J,CAAG,CAAC,IACzF,SAGX,IAAKgD,EAAI,EAAGA,EAAI4nJ,GAAS,OAAQ,EAAE5nJ,EACjC,GAAI6G,EAAE+gJ,GAAS5nJ,CAAC,CAAC,EAAG,CAClB,GAAI8nJ,EACK,SAEL,WAAWjhJ,EAAE+gJ,GAAS5nJ,CAAC,CAAC,CAAC,IAAM04I,GAAM7xI,EAAE+gJ,GAAS5nJ,CAAC,CAAC,CAAC,IACpC8nJ,EAAA,GAErB,CAEK,QACT,CACA,SAASC,IAAY,CACnB,OAAO,KAAK,QACd,CACA,SAASC,IAAkB,CACzB,OAAOC,GAAe,GAAG,CAC3B,CACA,SAASC,GAASC,EAAU,CAC1B,IAAIlQ,EAAkBF,GAAqBoQ,CAAQ,EAAGC,EAASnQ,EAAgB,MAAQ,EAAGoQ,EAAWpQ,EAAgB,SAAW,EAAGqQ,EAAUrQ,EAAgB,OAAS,EAAGsQ,EAAStQ,EAAgB,MAAQA,EAAgB,SAAW,EAAGuQ,GAAQvQ,EAAgB,KAAO,EAAGwJ,GAASxJ,EAAgB,MAAQ,EAAGyJ,GAAWzJ,EAAgB,QAAU,EAAGwQ,GAAWxQ,EAAgB,QAAU,EAAGyQ,GAAgBzQ,EAAgB,aAAe,EACxa,cAAW4P,GAAgB5P,CAAe,EAC1C,mBAAgB,CAACyQ,GAAgBD,GAAW,IACjD/G,GAAW,IACXD,GAAS,IAAM,GAAK,GACf,WAAQ,CAAC+G,GAAQD,EAAS,EAC/B,KAAK,QAAU,CAACD,EAAUD,EAAW,EAAID,EAAS,GAClD,KAAK,MAAQ,GACb,KAAK,QAAUzF,KACf,KAAK,QAAQ,CACf,CACA,SAASgG,GAAW5rJ,EAAK,CACvB,OAAOA,aAAemrJ,EACxB,CACA,SAASU,GAASr/D,EAAQ,CACxB,OAAIA,EAAS,EACJ,KAAK,MAAM,GAAKA,CAAM,EAAI,GAE1B,KAAK,MAAMA,CAAM,CAE5B,CACS,SAAA6qB,GAAcy0C,EAAQC,EAAQC,EAAa,CAClD,IAAIjoJ,EAAM,KAAK,IAAI+nJ,EAAO,OAAQC,EAAO,MAAM,EAAGE,EAAa,KAAK,IAAIH,EAAO,OAASC,EAAO,MAAM,EAAGG,EAAQ,EAAGjpJ,GACnH,IAAKA,GAAI,EAAGA,GAAIc,EAAKd,MACf+oJ,GAAeF,EAAO7oJ,EAAC,IAAM8oJ,EAAO9oJ,EAAC,GAAK,CAAC+oJ,GAAerQ,GAAMmQ,EAAO7oJ,EAAC,CAAC,IAAM04I,GAAMoQ,EAAO9oJ,EAAC,CAAC,IAChGipJ,IAGJ,OAAOA,EAAQD,CACjB,CACS,SAAA17H,GAAO4oH,EAAQ/xF,EAAW,CAClB8xF,GAAAC,EAAQ,EAAG,EAAG,UAAW,CACtC,IAAIgT,EAAU,KAAK,UAAU,EAAGtT,EAAQ,IACxC,OAAIsT,EAAU,IACZA,EAAU,CAACA,EACHtT,EAAA,KAEHA,EAAQL,GAAS,CAAC,EAAE2T,EAAU,IAAK,CAAC,EAAI/kG,EAAYoxF,GAAS,CAAC,CAAC2T,EAAU,GAAI,CAAC,EACtF,CACH,CACA57H,GAAO,IAAK,GAAG,EACfA,GAAO,KAAM,EAAE,EACfgtH,EAAc,IAAKJ,EAAgB,EACnCI,EAAc,KAAMJ,EAAgB,EACpCW,GAAc,CAAC,IAAK,IAAI,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACxDA,EAAO,QAAU,GACVA,EAAA,KAAOy6G,GAAiBjP,GAAkB7wI,CAAK,EACvD,EACD,IAAI+/I,GAAc,kBACT,SAAAD,GAAiBx9I,EAAS4J,EAAQ,CACzC,IAAItT,GAAWsT,GAAU,IAAI,MAAM5J,CAAO,EAAG09I,EAAOpoI,EAAOygI,EAC3D,OAAIz/I,IAAY,KACP,MAETonJ,EAAQpnJ,EAAQA,EAAQ,OAAS,CAAC,GAAK,GAC9Bgf,GAAAooI,EAAQ,IAAI,MAAMD,EAAW,GAAK,CAAC,IAAK,EAAG,CAAC,EAC1C1H,EAAA,EAAEzgI,EAAM,CAAC,EAAI,IAAMy3H,GAAMz3H,EAAM,CAAC,CAAC,EACrCygI,IAAa,EAAI,EAAIzgI,EAAM,CAAC,IAAM,IAAMygI,EAAW,CAACA,EAC7D,CACS,SAAA4H,GAAgBjgJ,EAAO2jE,EAAO,CACrC,IAAIytB,EAAK+8C,EACT,OAAIxqE,EAAM,QACRytB,EAAMztB,EAAM,QACZwqE,GAAShD,EAASnrI,CAAK,GAAKiqI,EAAOjqI,CAAK,EAAIA,EAAM,QAAQ,EAAI08I,GAAY18I,CAAK,EAAE,QAAQ,GAAKoxF,EAAI,UAClGA,EAAI,GAAG,QAAQA,EAAI,GAAG,UAAY+8C,CAAK,EACjCnhI,EAAA,aAAaokF,EAAK,EAAK,EACtBA,GAEAsrD,GAAY18I,CAAK,EAAE,OAE9B,CACA,SAASkgJ,GAAc1iJ,EAAG,CACxB,MAAO,CAAC,KAAK,MAAMA,EAAE,GAAG,mBAAmB,CAC7C,CACAwP,EAAM,aAAe,UAAW,GAEvB,SAAAmzI,GAAangJ,EAAOogJ,EAAeC,EAAa,CACnD,IAAAR,EAAU,KAAK,SAAW,EAAGS,EAC7B,IAAC,KAAK,UACD,OAAAtgJ,GAAS,KAAO,KAAO,IAEhC,GAAIA,GAAS,KAAM,CACb,UAAOA,GAAU,UAEnB,GADQA,EAAA8/I,GAAiBjP,GAAkB7wI,CAAK,EAC5CA,IAAU,KACL,iBAEA,KAAK,IAAIA,CAAK,EAAI,IAAM,CAACqgJ,IAClCrgJ,EAAQA,EAAQ,IAEd,OAAC,KAAK,QAAUogJ,IAClBE,EAAcJ,GAAc,IAAI,GAElC,KAAK,QAAUlgJ,EACf,KAAK,OAAS,GACVsgJ,GAAe,MACZ,SAAIA,EAAa,GAAG,EAEvBT,IAAY7/I,IACV,CAACogJ,GAAiB,KAAK,kBACzBG,EACE,KACA3B,GAAe5+I,EAAQ6/I,EAAS,GAAG,EACnC,EACA,IAEQ,KAAK,oBACf,KAAK,kBAAoB,GACnB7yI,EAAA,aAAa,KAAM,EAAI,EAC7B,KAAK,kBAAoB,OAGtB,SAEP,QAAO,KAAK,OAAS6yI,EAAUK,GAAc,IAAI,CAErD,CACS,SAAAM,GAAWxgJ,EAAOogJ,EAAe,CACxC,OAAIpgJ,GAAS,MACP,OAAOA,GAAU,WACnBA,EAAQ,CAACA,GAEN,eAAUA,EAAOogJ,CAAa,EAC5B,MAEA,CAAC,KAAK,WAEjB,CACA,SAASK,GAAeL,EAAe,CAC9B,YAAK,UAAU,EAAGA,CAAa,CACxC,CACA,SAASM,GAAiBN,EAAe,CACvC,OAAI,KAAK,SACF,eAAU,EAAGA,CAAa,EAC/B,KAAK,OAAS,GACVA,GACF,KAAK,SAASF,GAAc,IAAI,EAAG,GAAG,GAGnC,IACT,CACA,SAASS,IAA0B,CAC7B,QAAK,MAAQ,KACf,KAAK,UAAU,KAAK,KAAM,GAAO,EAAI,UAC5B,OAAO,KAAK,IAAO,SAAU,CACtC,IAAIC,EAAQd,GAAiBlP,GAAa,KAAK,EAAE,EAC7CgQ,GAAS,KACX,KAAK,UAAUA,CAAK,EAEf,eAAU,EAAG,EAAI,CAE1B,CACO,WACT,CACA,SAASC,GAAqB7gJ,EAAO,CAC/B,OAAC,KAAK,WAGVA,EAAQA,EAAQ08I,GAAY18I,CAAK,EAAE,UAAc,KACzC,KAAK,YAAcA,GAAS,KAAO,GAHlC,EAIX,CACA,SAAS8gJ,IAAuB,CACvB,YAAK,YAAc,KAAK,QAAQ,MAAM,CAAC,EAAE,aAAe,KAAK,YAAc,KAAK,QAAQ,MAAM,CAAC,EAAE,WAC1G,CACA,SAASC,IAA8B,CACrC,GAAI,CAAChX,EAAY,KAAK,aAAa,EACjC,OAAO,KAAK,cAEV,IAAAzwG,EAAI,CAAI,EAAA4kH,EACZ,OAAAnT,EAAWzxG,EAAG,IAAI,EAClBA,EAAIwkH,GAAcxkH,CAAC,EACfA,EAAE,IACI4kH,EAAA5kH,EAAE,OAAS4wG,EAAU5wG,EAAE,EAAE,EAAIojH,GAAYpjH,EAAE,EAAE,EAChD,mBAAgB,KAAK,QAAa,GAAAyxE,GAAczxE,EAAE,GAAI4kH,EAAM,QAAS,GAAI,GAE9E,KAAK,cAAgB,GAEhB,KAAK,aACd,CACA,SAAS8C,IAAU,CACjB,OAAO,KAAK,QAAY,GAAC,KAAK,OAAS,EACzC,CACA,SAASC,IAAc,CACrB,OAAO,KAAK,UAAY,KAAK,OAAS,EACxC,CACA,SAASC,IAAQ,CACf,OAAO,KAAK,QAAQ,EAAI,KAAK,QAAU,KAAK,UAAY,EAAI,EAC9D,CACI,IAAAC,GAAc,wDAAyDC,GAAW,sKAC7E,SAAAxC,GAAe5+I,EAAOrM,EAAK,CAClC,IAAImrJ,EAAW9+I,EAAOtC,EAAQ,KAAM6uI,EAAOl1I,EAAKgqJ,GAC5C,OAAA/B,GAAWt/I,CAAK,EACP8+I,EAAA,CACT,GAAI9+I,EAAM,cACV,EAAGA,EAAM,MACT,EAAGA,EAAM,SAEFgqI,EAAShqI,CAAK,GAAK,CAAC,MAAM,CAACA,CAAK,GACzC8+I,EAAW,GACPnrJ,EACOmrJ,EAAAnrJ,CAAG,EAAI,CAACqM,EAEjB8+I,EAAS,aAAe,CAAC9+I,IAElBtC,EAAQyjJ,GAAY,KAAKnhJ,CAAK,IACvCusI,EAAQ7uI,EAAM,CAAC,IAAM,IAAM,GAAK,EACrBohJ,EAAA,CACT,EAAG,EACH,EAAGzP,GAAM3xI,EAAMo0I,EAAI,CAAC,EAAIvF,EACxB,EAAG8C,GAAM3xI,EAAMq0I,EAAI,CAAC,EAAIxF,EACxB,EAAG8C,GAAM3xI,EAAMs0I,EAAM,CAAC,EAAIzF,EAC1B,EAAG8C,GAAM3xI,EAAMu0I,EAAM,CAAC,EAAI1F,EAC1B,GAAI8C,GAAMkQ,GAAS7hJ,EAAMw0I,EAAW,EAAI,GAAG,CAAC,EAAI3F,CAAA,IAGzC7uI,EAAQ0jJ,GAAS,KAAKphJ,CAAK,IACpCusI,EAAQ7uI,EAAM,CAAC,IAAM,IAAM,GAAK,EACrBohJ,EAAA,CACT,EAAGwC,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,EAC3B,EAAG+U,GAAS5jJ,EAAM,CAAC,EAAG6uI,CAAK,IAEpBuS,GAAY,KACrBA,EAAW,GACF,OAAOA,GAAa,WAAa,SAAUA,GAAY,OAAQA,KAC9DuC,GAAAE,GACR7E,GAAYoC,EAAS,IAAI,EACzBpC,GAAYoC,EAAS,EAAE,GAEzBA,EAAW,GACXA,EAAS,GAAKuC,GAAQ,aACtBvC,EAAS,EAAIuC,GAAQ,QAEjBhqJ,EAAA,IAAIwnJ,GAASC,CAAQ,EACvBQ,GAAWt/I,CAAK,GAAK6pI,EAAW7pI,EAAO,SAAS,IAClD3I,EAAI,QAAU2I,EAAM,SAElBs/I,GAAWt/I,CAAK,GAAK6pI,EAAW7pI,EAAO,UAAU,IACnD3I,EAAI,SAAW2I,EAAM,UAEhB3I,CACT,CACAunJ,GAAe,GAAKC,GAAS,UAC7BD,GAAe,QAAUD,GAChB,SAAA2C,GAASE,EAAKjV,EAAO,CAC5B,IAAIn7C,EAAMowD,GAAO,WAAWA,EAAI,QAAQ,IAAK,GAAG,CAAC,EACjD,OAAQ,MAAMpwD,CAAG,EAAI,EAAIA,GAAOm7C,CAClC,CACS,SAAAkV,GAA0Bp+I,EAAM66I,EAAO,CAC9C,IAAI9sD,EAAM,GACV,OAAAA,EAAI,OAAS8sD,EAAM,MAAM,EAAI76I,EAAK,SAAW66I,EAAM,KAAK,EAAI76I,EAAK,QAAU,GACvEA,EAAK,MAAM,EAAE,IAAI+tF,EAAI,OAAQ,GAAG,EAAE,QAAQ8sD,CAAK,GACjD,EAAE9sD,EAAI,OAEJA,EAAA,aAAe,CAAC8sD,EAAQ,CAAC76I,EAAK,MAAQ,MAAI+tF,EAAI,OAAQ,GAAG,EACtDA,CACT,CACS,SAAAmwD,GAAkBl+I,EAAM66I,EAAO,CAClC,IAAA9sD,EACJ,OAAM/tF,EAAK,WAAa66I,EAAM,QAAY,GAGlCA,EAAA+B,GAAgB/B,EAAO76I,CAAI,EAC/BA,EAAK,SAAS66I,CAAK,EACf9sD,EAAAqwD,GAA0Bp+I,EAAM66I,CAAK,GAErC9sD,EAAAqwD,GAA0BvD,EAAO76I,CAAI,EACvC+tF,EAAA,aAAe,CAACA,EAAI,aACpBA,EAAA,OAAS,CAACA,EAAI,QAEbA,GAVE,CAAE,aAAc,EAAG,OAAQ,CAAE,CAWxC,CACS,SAAAswD,EAAY/yE,EAAWp6E,EAAM,CAC7B,gBAASqC,EAAK+qJ,EAAQ,CAC3B,IAAIC,EAAK9hJ,EACT,OAAI6hJ,IAAW,MAAQ,CAAC,MAAM,CAACA,CAAM,IACnCnW,GACEj3I,EACA,YAAcA,EAAO,uDAAyDA,EAAO,kGAEjFuL,EAAAlJ,EACAA,EAAA+qJ,EACGA,EAAA7hJ,GAEL8hJ,EAAAhD,GAAehoJ,EAAK+qJ,CAAM,EACpBpB,EAAA,KAAMqB,EAAKjzE,CAAS,EACzB,KAEX,CACA,SAAS4xE,EAAYxU,EAAK+S,EAAU+C,EAAUC,EAAc,CACtD,IAAAzC,EAAgBP,EAAS,cAAeK,EAAQI,GAAST,EAAS,KAAK,EAAGG,GAAUM,GAAST,EAAS,OAAO,EAC5G/S,EAAI,YAGM+V,KAAuB,GAClC7C,IACF/L,GAASnH,EAAK4D,GAAI5D,EAAK,OAAO,EAAIkT,GAAU4C,CAAQ,EAElD1C,GACFzP,GAAM3D,EAAK,OAAQ4D,GAAI5D,EAAK,MAAM,EAAIoT,EAAQ0C,CAAQ,EAEpDxC,GACFtT,EAAI,GAAG,QAAQA,EAAI,GAAG,QAAQ,EAAIsT,EAAgBwC,CAAQ,EAExDC,GACI90I,EAAA,aAAa++H,EAAKoT,GAASF,EAAO,EAE5C,CACI,IAAAz2I,GAAMk5I,EAAY,EAAG,KAAK,EAAGjrI,GAAWirI,EAAY,GAAI,UAAU,EACtE,SAAS1uD,GAAShzF,EAAO,CAChB,cAAOA,GAAU,UAAYA,aAAiB,MACvD,CACA,SAAS+hJ,GAAc/hJ,EAAO,CACrB,OAAAmrI,EAASnrI,CAAK,GAAKiqI,EAAOjqI,CAAK,GAAKgzF,GAAShzF,CAAK,GAAKgqI,EAAShqI,CAAK,GAAKgiJ,GAAsBhiJ,CAAK,GAAKiiJ,GAAoBjiJ,CAAK,GAAKA,IAAU,MAAQA,IAAU,MAC7K,CACA,SAASiiJ,GAAoBjiJ,EAAO,CAC9B,IAAAkiJ,EAAa7zD,EAASruF,CAAK,GAAK,CAAC8pI,EAAc9pI,CAAK,EAAGmiJ,EAAe,GAAOvoI,EAAa,CAC5F,QACA,OACA,IACA,SACA,QACA,IACA,OACA,MACA,IACA,QACA,OACA,IACA,QACA,OACA,IACA,UACA,SACA,IACA,UACA,SACA,IACA,eACA,cACA,MACCjjB,EAAGwgE,EACN,IAAKxgE,EAAI,EAAGA,EAAIijB,EAAW,OAAQjjB,GAAK,EACtCwgE,EAAWv9C,EAAWjjB,CAAC,EACRwrJ,KAAgBtY,EAAW7pI,EAAOm3D,CAAQ,EAE3D,OAAO+qF,GAAcC,CACvB,CACA,SAASH,GAAsBhiJ,EAAO,CACpC,IAAIoiJ,EAAYxY,EAAQ5pI,CAAK,EAAGqiJ,EAAe,GAC/C,OAAID,IACaC,EAAAriJ,EAAM,OAAO,SAASuqC,EAAM,CACzC,MAAO,CAACy/F,EAASz/F,CAAI,GAAKyoD,GAAShzF,CAAK,EACzC,EAAE,SAAW,GAEToiJ,GAAaC,CACtB,CACA,SAASC,GAAetiJ,EAAO,CACzB,IAAAkiJ,EAAa7zD,EAASruF,CAAK,GAAK,CAAC8pI,EAAc9pI,CAAK,EAAGmiJ,EAAe,GAAOvoI,EAAa,CAC5F,UACA,UACA,UACA,WACA,WACA,YACCjjB,EAAGwgE,EACN,IAAKxgE,EAAI,EAAGA,EAAIijB,EAAW,OAAQjjB,GAAK,EACtCwgE,EAAWv9C,EAAWjjB,CAAC,EACRwrJ,KAAgBtY,EAAW7pI,EAAOm3D,CAAQ,EAE3D,OAAO+qF,GAAcC,CACvB,CACS,SAAAI,GAAkBC,EAAUxW,EAAM,CACzC,IAAImC,EAAQqU,EAAS,KAAKxW,EAAM,OAAQ,EAAI,EAC5C,OAAOmC,EAAQ,GAAK,WAAaA,EAAQ,GAAK,WAAaA,EAAQ,EAAI,UAAYA,EAAQ,EAAI,UAAYA,EAAQ,EAAI,UAAYA,EAAQ,EAAI,WAAa,UAC9J,CACS,SAAAsU,GAAWznI,EAAM0nI,EAAS,CAC7B,UAAU,SAAW,IAClB,UAAU,CAAC,EAGLX,GAAc,UAAU,CAAC,CAAC,GACnC/mI,EAAO,UAAU,CAAC,EACR0nI,EAAA,QACDJ,GAAe,UAAU,CAAC,CAAC,IACpCI,EAAU,UAAU,CAAC,EACd1nI,EAAA,SAPAA,EAAA,OACG0nI,EAAA,SASd,IAAI1W,EAAOhxH,GAAQ0hI,GAAY,EAAGiG,EAAM1C,GAAgBjU,EAAM,IAAI,EAAE,QAAQ,KAAK,EAAGhoD,EAAUh3E,EAAM,eAAe,KAAM21I,CAAG,GAAK,WAAY1W,EAASyW,IAAYvsJ,GAAWusJ,EAAQ1+D,CAAO,CAAC,EAAI0+D,EAAQ1+D,CAAO,EAAE,KAAK,KAAMgoD,CAAI,EAAI0W,EAAQ1+D,CAAO,GACpP,OAAO,KAAK,OACVioD,GAAU,KAAK,aAAa,SAASjoD,EAAS,KAAM04D,GAAY1Q,CAAI,CAAC,EAEzE,CACA,SAASj0I,IAAQ,CACR,WAAImzI,EAAO,IAAI,CACxB,CACS,SAAA0X,GAAQ5iJ,EAAOyuI,EAAO,CAC7B,IAAIoU,EAAa1X,EAASnrI,CAAK,EAAIA,EAAQ08I,GAAY18I,CAAK,EAC5D,OAAM,KAAK,WAAa6iJ,EAAW,QAAY,GAGvCpU,EAAAD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACL,KAAK,UAAYoU,EAAW,QAAQ,EAEpCA,EAAW,QAAY,OAAK,MAAQ,UAAQpU,CAAK,EAAE,WANnD,EAQX,CACS,SAAAqU,GAAS9iJ,EAAOyuI,EAAO,CAC9B,IAAIoU,EAAa1X,EAASnrI,CAAK,EAAIA,EAAQ08I,GAAY18I,CAAK,EAC5D,OAAM,KAAK,WAAa6iJ,EAAW,QAAY,GAGvCpU,EAAAD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACL,KAAK,UAAYoU,EAAW,QAAQ,EAEpC,KAAK,MAAQ,QAAMpU,CAAK,EAAE,QAAY,EAAAoU,EAAW,WANjD,EAQX,CACA,SAASE,GAAU9X,EAAOD,EAAKyD,EAAOuU,EAAa,CACjD,IAAIC,EAAY9X,EAASF,CAAK,EAAIA,EAAQyR,GAAYzR,CAAK,EAAGiY,EAAU/X,EAASH,CAAG,EAAIA,EAAM0R,GAAY1R,CAAG,EACzG,OAAE,KAAK,WAAaiY,EAAU,WAAaC,EAAQ,WAGvDF,EAAcA,GAAe,MACrBA,EAAY,CAAC,IAAM,IAAM,KAAK,QAAQC,EAAWxU,CAAK,EAAI,CAAC,KAAK,SAASwU,EAAWxU,CAAK,KAAOuU,EAAY,CAAC,IAAM,IAAM,KAAK,SAASE,EAASzU,CAAK,EAAI,CAAC,KAAK,QAAQyU,EAASzU,CAAK,IAHpL,EAIX,CACS,SAAA0U,GAAOnjJ,EAAOyuI,EAAO,CAC5B,IAAIoU,EAAa1X,EAASnrI,CAAK,EAAIA,EAAQ08I,GAAY18I,CAAK,EAAGojJ,EAC/D,OAAM,KAAK,WAAaP,EAAW,QAAY,GAGvCpU,EAAAD,GAAeC,CAAK,GAAK,cAC7BA,IAAU,cACL,KAAK,YAAcoU,EAAW,QAAQ,GAE7CO,EAAUP,EAAW,UACd,KAAK,MAAM,EAAE,QAAQpU,CAAK,EAAE,WAAa2U,GAAWA,GAAW,KAAK,MAAM,EAAE,MAAM3U,CAAK,EAAE,YAPzF,EASX,CACS,SAAA4U,GAAcrjJ,EAAOyuI,EAAO,CAC5B,YAAK,OAAOzuI,EAAOyuI,CAAK,GAAK,KAAK,QAAQzuI,EAAOyuI,CAAK,CAC/D,CACS,SAAA6U,GAAetjJ,EAAOyuI,EAAO,CAC7B,YAAK,OAAOzuI,EAAOyuI,CAAK,GAAK,KAAK,SAASzuI,EAAOyuI,CAAK,CAChE,CACS,SAAA5vI,GAAKmB,EAAOyuI,EAAO8U,EAAS,CACnC,IAAIn5I,EAAMo5I,EAAWvX,EACjB,IAAC,KAAK,UACD,WAGL,GADG7hI,EAAA61I,GAAgBjgJ,EAAO,IAAI,EAC9B,CAACoK,EAAK,UACD,WAIT,OAFAo5I,GAAap5I,EAAK,YAAc,KAAK,UAAe,OACpDqkI,EAAQD,GAAeC,CAAK,EACpBA,EAAO,CACb,IAAK,OACMxC,EAAAwX,GAAU,KAAMr5I,CAAI,EAAI,GACjC,MACF,IAAK,QACM6hI,EAAAwX,GAAU,KAAMr5I,CAAI,EAC7B,MACF,IAAK,UACM6hI,EAAAwX,GAAU,KAAMr5I,CAAI,EAAI,EACjC,MACF,IAAK,SACH6hI,GAAU,KAAO7hI,GAAQ,IACzB,MACF,IAAK,SACH6hI,GAAU,KAAO7hI,GAAQ,IACzB,MACF,IAAK,OACH6hI,GAAU,KAAO7hI,GAAQ,KACzB,MACF,IAAK,MACO6hI,GAAA,KAAO7hI,EAAOo5I,GAAa,MACrC,MACF,IAAK,OACOvX,GAAA,KAAO7hI,EAAOo5I,GAAa,OACrC,MACF,QACEvX,EAAS,KAAO7hI,CACpB,CACO,OAAAm5I,EAAUtX,EAASmD,GAASnD,CAAM,CAC3C,CACS,SAAAwX,GAAU1vJ,EAAGC,EAAG,CACvB,GAAID,EAAE,OAASC,EAAE,OACR,OAACyvJ,GAAUzvJ,EAAGD,CAAC,EAEpB,IAAA2vJ,GAAkB1vJ,EAAE,OAASD,EAAE,KAAK,GAAK,IAAMC,EAAE,QAAUD,EAAE,MAAM,GAAIy0B,EAASz0B,EAAE,QAAQ,IAAI2vJ,EAAgB,QAAQ,EAAGC,EAASC,EAClI,OAAA5vJ,EAAIw0B,EAAS,GACfm7H,EAAU5vJ,EAAE,MAAM,EAAE,IAAI2vJ,EAAiB,EAAG,QAAQ,EAC1CE,GAAA5vJ,EAAIw0B,IAAWA,EAASm7H,KAElCA,EAAU5vJ,EAAE,MAAM,EAAE,IAAI2vJ,EAAiB,EAAG,QAAQ,EAC1CE,GAAA5vJ,EAAIw0B,IAAWm7H,EAAUn7H,IAE9B,EAAEk7H,EAAiBE,IAAW,CACvC,CACA52I,EAAM,cAAgB,uBACtBA,EAAM,iBAAmB,yBACzB,SAASlX,IAAW,CAClB,OAAO,KAAK,QAAQ,OAAO,IAAI,EAAE,OAAO,kCAAkC,CAC5E,CACA,SAAS+tJ,GAAYC,EAAY,CAC3B,IAAC,KAAK,UACD,YAEL,IAAAC,EAAMD,IAAe,GAAMtmJ,EAAIumJ,EAAM,KAAK,MAAQ,MAAQ,OAC9D,OAAIvmJ,EAAE,OAAS,GAAKA,EAAE,OAAS,KACtB0vI,GACL1vI,EACAumJ,EAAM,iCAAmC,gCAGzC5tJ,GAAW,KAAK,UAAU,WAAW,EACnC4tJ,EACK,KAAK,SAAS,cAEd,IAAI,KAAK,KAAK,QAAY,OAAK,YAAc,GAAK,GAAG,EAAE,YAAc,UAAQ,IAAK7W,GAAa1vI,EAAG,GAAG,CAAC,EAG1G0vI,GACL1vI,EACAumJ,EAAM,+BAAiC,6BAE3C,CACA,SAAS3kI,IAAU,CACb,IAAC,KAAK,UACD,2BAAuB,KAAK,GAAK,OAE1C,IAAIhW,EAAO,SAAU46I,EAAO,GAAIvsI,EAAQwgC,EAAMgsG,EAAUvsI,EACpD,OAAC,KAAK,YACRtO,EAAO,KAAK,cAAgB,EAAI,aAAe,mBACxC46I,EAAA,KAETvsI,EAAS,IAAMrO,EAAO,MACf6uC,EAAA,GAAK,KAAK,KAAK,GAAK,KAAK,QAAU,KAAO,OAAS,SAC/CgsG,EAAA,wBACXvsI,EAASssI,EAAO,OACT,KAAK,OAAOvsI,EAASwgC,EAAOgsG,EAAWvsI,CAAM,CACtD,CACA,SAASogC,GAAOosG,EAAa,CACtBA,IACHA,EAAc,KAAK,MAAU,EAAAl3I,EAAM,iBAAmBA,EAAM,eAE1D,IAAAi/H,EAASiB,GAAa,KAAMgX,CAAW,EAC3C,OAAO,KAAK,aAAa,WAAWjY,CAAM,CAC5C,CACS,SAAAv3I,GAAKsmB,EAAMgzH,EAAe,CACjC,OAAI,KAAK,YAAc7C,EAASnwH,CAAI,GAAKA,EAAK,WAAa0hI,GAAY1hI,CAAI,EAAE,QAAY,GAChF4jI,GAAe,CAAE,GAAI,KAAM,KAAM5jI,CAAM,GAAE,OAAO,KAAK,OAAQ,GAAE,SAAS,CAACgzH,CAAa,EAEtF,KAAK,aAAa,aAE7B,CACA,SAASmW,GAAQnW,EAAe,CAC9B,OAAO,KAAK,KAAK0O,GAAY,EAAG1O,CAAa,CAC/C,CACS,SAAAv5I,GAAGumB,EAAMgzH,EAAe,CAC/B,OAAI,KAAK,YAAc7C,EAASnwH,CAAI,GAAKA,EAAK,WAAa0hI,GAAY1hI,CAAI,EAAE,QAAY,GAChF4jI,GAAe,CAAE,KAAM,KAAM,GAAI5jI,CAAM,GAAE,OAAO,KAAK,OAAQ,GAAE,SAAS,CAACgzH,CAAa,EAEtF,KAAK,aAAa,aAE7B,CACA,SAASoW,GAAMpW,EAAe,CAC5B,OAAO,KAAK,GAAG0O,GAAY,EAAG1O,CAAa,CAC7C,CACA,SAASphE,GAAOj5E,EAAK,CACf,IAAA0wJ,EACJ,OAAI1wJ,IAAQ,OACH,KAAK,QAAQ,OAEpB0wJ,EAAgB/K,GAAU3lJ,CAAG,EACzB0wJ,GAAiB,OACnB,KAAK,QAAUA,GAEV,KAEX,CACA,IAAI5hJ,GAAO4oI,GACT,kJACA,SAAS13I,EAAK,CACZ,OAAIA,IAAQ,OACH,KAAK,aAEL,KAAK,OAAOA,CAAG,CAE1B,GAEF,SAAS2wJ,IAAa,CACpB,OAAO,KAAK,OACd,CACA,IAAIC,GAAgB,IAAKC,GAAgB,GAAKD,GAAeE,GAAc,GAAKD,GAAeE,IAAoB,IAAM,IAAM,IAAM,GAAKD,GACjI,SAAAE,GAAMC,EAAUC,EAAS,CACxB,OAAAD,EAAWC,EAAUA,GAAWA,CAC1C,CACS,SAAAC,GAAiB91H,EAAGxxB,EAAGsiC,EAAG,CAC7B,OAAA9Q,EAAI,KAAOA,GAAK,EACX,IAAI,KAAKA,EAAI,IAAKxxB,EAAGsiC,CAAC,EAAI4kH,GAE1B,IAAI,KAAK11H,EAAGxxB,EAAGsiC,CAAC,EAAE,SAE7B,CACS,SAAAilH,GAAe/1H,EAAGxxB,EAAGsiC,EAAG,CAC3B,OAAA9Q,EAAI,KAAOA,GAAK,EACX,KAAK,IAAIA,EAAI,IAAKxxB,EAAGsiC,CAAC,EAAI4kH,GAE1B,KAAK,IAAI11H,EAAGxxB,EAAGsiC,CAAC,CAE3B,CACA,SAASklH,GAAQvW,EAAO,CACtB,IAAIzzH,EAAMiqI,EAEV,GADAxW,EAAQD,GAAeC,CAAK,EACxBA,IAAU,QAAUA,IAAU,eAAiB,CAAC,KAAK,UAChD,YAGT,OADcwW,EAAA,KAAK,OAASF,GAAiBD,GACrCrW,EAAO,CACb,IAAK,OACHzzH,EAAOiqI,EAAY,KAAK,KAAK,EAAG,EAAG,CAAC,EACpC,MACF,IAAK,UACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAU,OAAK,MAAU,IAC9B,GAEF,MACF,IAAK,QACHjqI,EAAOiqI,EAAY,KAAK,OAAQ,KAAK,QAAS,CAAC,EAC/C,MACF,IAAK,OACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,OAAS,KAAK,QAAQ,GAE7B,MACF,IAAK,UACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAU,QAAK,aAAe,IAErC,MACF,IAAK,MACL,IAAK,OACIjqI,EAAAiqI,EAAY,KAAK,KAAK,EAAG,KAAK,QAAS,KAAK,MAAM,EACzD,MACF,IAAK,OACIjqI,EAAA,KAAK,GAAG,UACPA,GAAA2pI,GACN3pI,GAAQ,KAAK,OAAS,EAAI,KAAK,UAAc,EAAAwpI,IAC7CC,EAAA,EAEF,MACF,IAAK,SACIzpI,EAAA,KAAK,GAAG,UACPA,GAAA2pI,GAAM3pI,EAAMwpI,EAAa,EACjC,MACF,IAAK,SACIxpI,EAAA,KAAK,GAAG,UACPA,GAAA2pI,GAAM3pI,EAAMupI,EAAa,EACjC,KACJ,CACK,eAAG,QAAQvpI,CAAI,EACdhO,EAAA,aAAa,KAAM,EAAI,EACtB,IACT,CACA,SAASk4I,GAAMzW,EAAO,CACpB,IAAIzzH,EAAMiqI,EAEV,GADAxW,EAAQD,GAAeC,CAAK,EACxBA,IAAU,QAAUA,IAAU,eAAiB,CAAC,KAAK,UAChD,YAGT,OADcwW,EAAA,KAAK,OAASF,GAAiBD,GACrCrW,EAAO,CACb,IAAK,OACHzzH,EAAOiqI,EAAY,KAAK,OAAS,EAAG,EAAG,CAAC,EAAI,EAC5C,MACF,IAAK,UACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAM,EAAI,KAAK,QAAU,EAAI,EAClC,CACE,IACJ,MACF,IAAK,QACIjqI,EAAAiqI,EAAY,KAAK,OAAQ,KAAK,MAAM,EAAI,EAAG,CAAC,EAAI,EACvD,MACF,IAAK,OACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAS,OAAK,QAAY,GAC7B,IACJ,MACF,IAAK,UACIjqI,EAAAiqI,EACL,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,KAAK,GAAK,KAAK,aAAe,GAAK,CACtC,IACJ,MACF,IAAK,MACL,IAAK,OACIjqI,EAAAiqI,EAAY,KAAK,KAAQ,OAAK,MAAM,EAAG,KAAK,OAAS,CAAC,EAAI,EACjE,MACF,IAAK,OACIjqI,EAAA,KAAK,GAAG,UACfA,GAAQypI,GAAcE,GACpB3pI,GAAQ,KAAK,OAAS,EAAI,KAAK,UAAc,EAAAwpI,IAC7CC,EACE,IACJ,MACF,IAAK,SACIzpI,EAAA,KAAK,GAAG,UACfA,GAAQwpI,GAAgBG,GAAM3pI,EAAMwpI,EAAa,EAAI,EACrD,MACF,IAAK,SACIxpI,EAAA,KAAK,GAAG,UACfA,GAAQupI,GAAgBI,GAAM3pI,EAAMupI,EAAa,EAAI,EACrD,KACJ,CACK,eAAG,QAAQvpI,CAAI,EACdhO,EAAA,aAAa,KAAM,EAAI,EACtB,IACT,CACA,SAASm4I,IAAU,CACjB,OAAO,KAAK,GAAG,QAAa,QAAK,SAAW,GAAK,GACnD,CACA,SAASC,IAAO,CACd,OAAO,KAAK,MAAM,KAAK,UAAY,GAAG,CACxC,CACA,SAASC,IAAS,CAChB,OAAO,IAAI,KAAK,KAAK,QAAS,EAChC,CACA,SAASloH,IAAU,CACjB,IAAI3/B,EAAI,KACD,OACLA,EAAE,KAAK,EACPA,EAAE,MAAM,EACRA,EAAE,KAAK,EACPA,EAAE,KAAK,EACPA,EAAE,OAAO,EACTA,EAAE,OAAO,EACTA,EAAE,YAAY,EAElB,CACA,SAAS8nJ,IAAW,CAClB,IAAI9nJ,EAAI,KACD,OACL,MAAOA,EAAE,KAAK,EACd,OAAQA,EAAE,MAAM,EAChB,KAAMA,EAAE,KAAK,EACb,MAAOA,EAAE,MAAM,EACf,QAASA,EAAE,QAAQ,EACnB,QAASA,EAAE,QAAQ,EACnB,aAAcA,EAAE,aAAa,EAEjC,CACA,SAAS+nJ,IAAS,CAChB,OAAO,KAAK,QAAY,OAAK,cAAgB,IAC/C,CACA,SAASC,IAAY,CACnB,OAAOp/D,EAAQ,IAAI,CACrB,CACA,SAASq/D,IAAe,CACtB,OAAO1oF,EAAO,CAAI,EAAAutE,EAAgB,IAAI,CAAC,CACzC,CACA,SAASob,IAAY,CACZ,OAAApb,EAAgB,IAAI,EAAE,QAC/B,CACA,SAASqb,IAAe,CACf,OACL,MAAO,KAAK,GACZ,OAAQ,KAAK,GACb,OAAQ,KAAK,QACb,MAAO,KAAK,OACZ,OAAQ,KAAK,QAEjB,CACe/Y,GAAA,IAAK,EAAG,EAAG,SAAS,EACpBA,GAAA,KAAM,EAAG,EAAG,SAAS,EACrBA,GAAA,MAAO,EAAG,EAAG,SAAS,EACtBA,GAAA,OAAQ,EAAG,EAAG,SAAS,EACvBA,GAAA,QAAS,EAAG,EAAG,WAAW,EACzCA,GAAe,IAAK,CAAC,IAAK,CAAC,EAAG,KAAM,SAAS,EAC7CA,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,SAAS,EAC3CA,GAAe,IAAK,CAAC,MAAO,CAAC,EAAG,EAAG,SAAS,EAC5CA,GAAe,IAAK,CAAC,OAAQ,CAAC,EAAG,EAAG,SAAS,EAC7CqE,EAAc,IAAK2U,EAAY,EAC/B3U,EAAc,KAAM2U,EAAY,EAChC3U,EAAc,MAAO2U,EAAY,EACjC3U,EAAc,OAAQ4U,EAAY,EAClC5U,EAAc,QAAS6U,EAAc,EACvBtU,GAAA,CAAC,IAAK,KAAM,MAAO,OAAQ,OAAO,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQwnG,EAAQ,CACxF,IAAIkQ,EAAM13G,EAAO,QAAQ,UAAUrlC,EAAO6sI,EAAQxnG,EAAO,OAAO,EAC5D03G,EACczS,EAAAjlG,CAAM,EAAE,IAAM03G,EAEdzS,EAAAjlG,CAAM,EAAE,WAAarlC,CACvC,CACD,EACDixI,EAAc,IAAKP,EAAa,EAChCO,EAAc,KAAMP,EAAa,EACjCO,EAAc,MAAOP,EAAa,EAClCO,EAAc,OAAQP,EAAa,EACnCO,EAAc,KAAM8U,EAAmB,EACvCvU,GAAc,CAAC,IAAK,KAAM,MAAO,MAAM,EAAGI,EAAI,EAC9CJ,GAAc,CAAC,IAAI,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQwnG,EAAQ,CACvD,IAAAnvI,EACA2nC,EAAO,QAAQ,uBACjB3nC,EAAQsC,EAAM,MAAMqlC,EAAO,QAAQ,oBAAoB,GAErDA,EAAO,QAAQ,oBACjB3vC,EAAMk8I,EAAI,EAAIvsG,EAAO,QAAQ,oBAAoBrlC,EAAOtC,CAAK,EAE7DhI,EAAMk8I,EAAI,EAAI,SAAS5xI,EAAO,EAAE,CAClC,CACD,EACQ,SAAAgmJ,GAAWxoJ,EAAGwmF,EAAS,CAC1B,IAAArtF,EAAG8Q,EAAGgwC,EAAMwuG,EAAO,KAAK,OAAS3M,GAAU,IAAI,EAAE,MAChD,IAAA3iJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAAG,CACvC,OAAQ,OAAOsvJ,EAAKtvJ,CAAC,EAAE,MAAO,CAC5B,IAAK,SACH8gD,EAAOzqC,EAAMi5I,EAAKtvJ,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,EACzCsvJ,EAAKtvJ,CAAC,EAAE,MAAQ8gD,EAAK,QAAQ,EAC7B,KACJ,CACA,OAAQ,OAAOwuG,EAAKtvJ,CAAC,EAAE,MAAO,CAC5B,IAAK,YACEsvJ,EAAAtvJ,CAAC,EAAE,MAAQ,IAChB,MACF,IAAK,SACI8gD,EAAAzqC,EAAMi5I,EAAKtvJ,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,EAAE,UAC3CsvJ,EAAKtvJ,CAAC,EAAE,MAAQ8gD,EAAK,QAAQ,EAC7B,KACJ,CACF,CACO,OAAAwuG,CACT,CACS,SAAAC,GAAgBC,EAASniE,EAASmmD,EAAQ,CACjD,IAAIxzI,EAAG8Q,EAAGw+I,EAAO,KAAK,OAAQ1xJ,GAAM6xJ,GAAMC,GAErC,IADLF,EAAUA,EAAQ,cACbxvJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAIpC,GAHApC,GAAO0xJ,EAAKtvJ,CAAC,EAAE,KAAK,YAAY,EAChCyvJ,GAAOH,EAAKtvJ,CAAC,EAAE,KAAK,YAAY,EAChC0vJ,GAASJ,EAAKtvJ,CAAC,EAAE,OAAO,YAAY,EAChCwzI,EACF,OAAQnmD,EAAS,CACf,IAAK,IACL,IAAK,KACL,IAAK,MACH,GAAIoiE,KAASD,EACX,OAAOF,EAAKtvJ,CAAC,EAEf,MACF,IAAK,OACH,GAAIpC,KAAS4xJ,EACX,OAAOF,EAAKtvJ,CAAC,EAEf,MACF,IAAK,QACH,GAAI0vJ,KAAWF,EACb,OAAOF,EAAKtvJ,CAAC,EAEf,KACJ,SACS,CAACpC,GAAM6xJ,GAAMC,EAAM,EAAE,QAAQF,CAAO,GAAK,EAClD,OAAOF,EAAKtvJ,CAAC,CAGnB,CACS,SAAA2vJ,GAAsBvJ,EAAK9kG,EAAM,CACxC,IAAI5xC,EAAM02I,EAAI,OAASA,EAAI,MAAQ,EAAI,GACvC,OAAI9kG,IAAS,OACJjrC,EAAM+vI,EAAI,KAAK,EAAE,KAAK,EAEtB/vI,EAAM+vI,EAAI,KAAK,EAAE,QAAU9kG,EAAO8kG,EAAI,QAAU12I,CAE3D,CACA,SAASkgJ,IAAa,CACpB,IAAI5vJ,EAAG8Q,EAAG7Q,EAAKqvJ,EAAO,KAAK,aAAa,OACnC,IAAAtvJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAKhC,GAJJC,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,UAC9BqvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,OAGvCsvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,MAClC,OAAAsvJ,EAAKtvJ,CAAC,EAAE,KAGZ,QACT,CACA,SAAS6vJ,IAAe,CACtB,IAAI7vJ,EAAG8Q,EAAG7Q,EAAKqvJ,EAAO,KAAK,aAAa,OACnC,IAAAtvJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAKhC,GAJJC,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,UAC9BqvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,OAGvCsvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,MAClC,OAAAsvJ,EAAKtvJ,CAAC,EAAE,OAGZ,QACT,CACA,SAAS8vJ,IAAa,CACpB,IAAI9vJ,EAAG8Q,EAAG7Q,EAAKqvJ,EAAO,KAAK,aAAa,OACnC,IAAAtvJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAKhC,GAJJC,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,UAC9BqvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,OAGvCsvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,MAClC,OAAAsvJ,EAAKtvJ,CAAC,EAAE,KAGZ,QACT,CACA,SAAS+vJ,IAAa,CAChB,IAAA/vJ,EAAG8Q,EAAGpB,EAAKzP,EAAKqvJ,EAAO,KAAK,aAAa,OACxC,IAAAtvJ,EAAI,EAAG8Q,EAAIw+I,EAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EAGpC,GAFM0P,EAAA4/I,EAAKtvJ,CAAC,EAAE,OAASsvJ,EAAKtvJ,CAAC,EAAE,MAAQ,EAAI,GAC3CC,EAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,EAAE,UAC9BqvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,OAASsvJ,EAAKtvJ,CAAC,EAAE,OAASC,GAAOA,GAAOqvJ,EAAKtvJ,CAAC,EAAE,MACzF,OAAQ,KAAK,OAASqW,EAAMi5I,EAAKtvJ,CAAC,EAAE,KAAK,EAAE,KAAK,GAAK0P,EAAM4/I,EAAKtvJ,CAAC,EAAE,OAGvE,OAAO,KAAK,MACd,CACA,SAASgwJ,GAAc7nD,EAAU,CAC/B,OAAK+qC,EAAW,KAAM,gBAAgB,GACpC+c,GAAiB,KAAK,IAAI,EAErB9nD,EAAW,KAAK,eAAiB,KAAK,UAC/C,CACA,SAAS+nD,GAAc/nD,EAAU,CAC/B,OAAK+qC,EAAW,KAAM,gBAAgB,GACpC+c,GAAiB,KAAK,IAAI,EAErB9nD,EAAW,KAAK,eAAiB,KAAK,UAC/C,CACA,SAASgoD,GAAgBhoD,EAAU,CACjC,OAAK+qC,EAAW,KAAM,kBAAkB,GACtC+c,GAAiB,KAAK,IAAI,EAErB9nD,EAAW,KAAK,iBAAmB,KAAK,UACjD,CACS,SAAA8mD,GAAa9mD,EAAUmhC,EAAS,CAChC,OAAAA,EAAQ,cAAcnhC,CAAQ,CACvC,CACS,SAAA+mD,GAAa/mD,EAAUmhC,EAAS,CAChC,OAAAA,EAAQ,cAAcnhC,CAAQ,CACvC,CACS,SAAAgnD,GAAehnD,EAAUmhC,EAAS,CAClC,OAAAA,EAAQ,gBAAgBnhC,CAAQ,CACzC,CACS,SAAAinD,GAAoBjnD,EAAUmhC,EAAS,CAC9C,OAAOA,EAAQ,sBAAwByQ,EACzC,CACA,SAASkW,IAAmB,CAC1B,IAAIG,EAAa,CAAC,EAAGC,EAAa,GAAIC,EAAe,CAAI,EAAArT,EAAc,CAAI,EAAAj9I,EAAG8Q,EAAGw+I,GAAO,KAAK,KAAK,EAC7F,IAAAtvJ,EAAI,EAAG8Q,EAAIw+I,GAAK,OAAQtvJ,EAAI8Q,EAAG,EAAE9Q,EACpCqwJ,EAAW,KAAK1V,GAAY2U,GAAKtvJ,CAAC,EAAE,IAAI,CAAC,EACzCowJ,EAAW,KAAKzV,GAAY2U,GAAKtvJ,CAAC,EAAE,IAAI,CAAC,EACzCswJ,EAAa,KAAK3V,GAAY2U,GAAKtvJ,CAAC,EAAE,MAAM,CAAC,EAC7Ci9I,EAAY,KAAKtC,GAAY2U,GAAKtvJ,CAAC,EAAE,IAAI,CAAC,EAC1Ci9I,EAAY,KAAKtC,GAAY2U,GAAKtvJ,CAAC,EAAE,IAAI,CAAC,EAC1Ci9I,EAAY,KAAKtC,GAAY2U,GAAKtvJ,CAAC,EAAE,MAAM,CAAC,EAEzC,gBAAa,IAAI,OAAO,KAAOi9I,EAAY,KAAK,GAAG,EAAI,IAAK,GAAG,EAC/D,oBAAiB,IAAI,OAAO,KAAOoT,EAAW,KAAK,GAAG,EAAI,IAAK,GAAG,EAClE,oBAAiB,IAAI,OAAO,KAAOD,EAAW,KAAK,GAAG,EAAI,IAAK,GAAG,EACvE,KAAK,iBAAmB,IAAI,OAC1B,KAAOE,EAAa,KAAK,GAAG,EAAI,IAChC,IAEJ,CACAra,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAW,CAClC,YAAK,SAAa,MAC1B,EACDA,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAW,CAClC,YAAK,YAAgB,MAC7B,EACQ,SAAAsa,GAAuBra,EAAQvxH,EAAQ,CAC9CsxH,GAAe,EAAG,CAACC,EAAQA,EAAO,MAAM,EAAG,EAAGvxH,CAAM,CACtD,CACA4rI,GAAuB,OAAQ,UAAU,EACzCA,GAAuB,QAAS,UAAU,EAC1CA,GAAuB,OAAQ,aAAa,EAC5CA,GAAuB,QAAS,aAAa,EAC7C7Y,GAAa,WAAY,IAAI,EAC7BA,GAAa,cAAe,IAAI,EAChCU,GAAgB,WAAY,CAAC,EAC7BA,GAAgB,cAAe,CAAC,EAChCkC,EAAc,IAAKN,EAAW,EAC9BM,EAAc,IAAKN,EAAW,EAChBM,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,OAAQT,EAAWN,EAAM,EACzBe,EAAA,OAAQT,EAAWN,EAAM,EACzBe,EAAA,QAASR,GAAWN,EAAM,EAC1Bc,EAAA,QAASR,GAAWN,EAAM,EACtBsB,GAAA,CAAC,OAAQ,QAAS,OAAQ,OAAO,EAAG,SAASzxI,EAAOy0I,EAAMpvG,EAAQwnG,EAAQ,CAC1F4H,EAAK5H,EAAO,OAAO,EAAG,CAAC,CAAC,EAAIwC,GAAMrvI,CAAK,EACxC,EACiByxI,GAAA,CAAC,KAAM,IAAI,EAAG,SAASzxI,EAAOy0I,EAAMpvG,EAAQwnG,EAAQ,CACpE4H,EAAK5H,CAAM,EAAI7/H,EAAM,kBAAkBhN,CAAK,EAC7C,EACD,SAASmnJ,GAAennJ,EAAO,CAC7B,OAAOonJ,GAAqB,KAC1B,KACApnJ,EACA,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,aAAa,MAAM,IACxB,KAAK,aAAa,MAAM,IAE5B,CACA,SAASqnJ,GAAkBrnJ,EAAO,CAChC,OAAOonJ,GAAqB,KAC1B,KACApnJ,EACA,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,EACA,EAEJ,CACA,SAASsnJ,IAAoB,CAC3B,OAAOpS,GAAY,KAAK,KAAK,EAAG,EAAG,CAAC,CACtC,CACA,SAASqS,IAA2B,CAClC,OAAOrS,GAAY,KAAK,YAAY,EAAG,EAAG,CAAC,CAC7C,CACA,SAASsS,IAAiB,CACpB,IAAAC,EAAW,KAAK,aAAa,MACjC,OAAOvS,GAAY,KAAK,OAAQuS,EAAS,IAAKA,EAAS,GAAG,CAC5D,CACA,SAASC,IAAqB,CACxB,IAAAD,EAAW,KAAK,aAAa,MACjC,OAAOvS,GAAY,KAAK,WAAYuS,EAAS,IAAKA,EAAS,GAAG,CAChE,CACA,SAASL,GAAqBpnJ,EAAOy0I,EAAMC,EAASN,EAAKC,EAAK,CACxD,IAAAsT,EACJ,OAAI3nJ,GAAS,KACJg1I,GAAW,KAAMZ,EAAKC,CAAG,EAAE,MAEpBsT,EAAAzS,GAAYl1I,EAAOo0I,EAAKC,CAAG,EACrCI,EAAOkT,IACFlT,EAAAkT,GAEFC,GAAW,KAAK,KAAM5nJ,EAAOy0I,EAAMC,EAASN,EAAKC,CAAG,EAE/D,CACA,SAASuT,GAAWrL,EAAU9H,EAAMC,EAASN,EAAKC,EAAK,CACrD,IAAIwT,EAAgBrT,GAAmB+H,EAAU9H,EAAMC,EAASN,EAAKC,CAAG,EAAG58F,GAAOy8F,GAAc2T,EAAc,KAAM,EAAGA,EAAc,SAAS,EACzI,iBAAKpwG,GAAK,eAAgB,GAC1B,WAAMA,GAAK,YAAa,GACxB,UAAKA,GAAK,WAAY,GACpB,IACT,CACem1F,GAAA,IAAK,EAAG,KAAM,SAAS,EACtCyB,GAAa,UAAW,GAAG,EAC3BU,GAAgB,UAAW,CAAC,EAC5BkC,EAAc,IAAKjB,EAAM,EACXwB,GAAA,IAAK,SAASxxI,EAAOtK,EAAO,CACxCA,EAAMm8I,EAAK,GAAKxC,GAAMrvI,CAAK,EAAI,GAAK,EACrC,EACD,SAAS8nJ,GAAc9nJ,EAAO,CAC5B,OAAOA,GAAS,KAAO,KAAK,MAAM,KAAK,QAAU,GAAK,CAAC,EAAI,KAAK,OAAOA,EAAQ,GAAK,EAAI,KAAK,QAAU,CAAC,CAC1G,CACA4sI,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,KAAM,MAAM,EAC3CyB,GAAa,OAAQ,GAAG,EACxBU,GAAgB,OAAQ,CAAC,EACzBkC,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACvBg4E,EAAA,KAAM,SAASnyC,EAAUmhC,EAAS,CAC9C,OAAOnhC,EAAWmhC,EAAQ,yBAA2BA,EAAQ,cAAgBA,EAAQ,+BACtF,EACDuR,GAAc,CAAC,IAAK,IAAI,EAAGM,EAAI,EACjBN,GAAA,KAAM,SAASxxI,EAAOtK,EAAO,CACnCA,EAAAo8I,EAAI,EAAIzC,GAAMrvI,EAAM,MAAMowI,EAAS,EAAE,CAAC,CAAC,EAC9C,EACG,IAAA2X,GAAmBvY,GAAW,OAAQ,EAAI,EAC9C5C,GAAe,MAAO,CAAC,OAAQ,CAAC,EAAG,OAAQ,WAAW,EACtDyB,GAAa,YAAa,KAAK,EAC/BU,GAAgB,YAAa,CAAC,EAC9BkC,EAAc,MAAOV,CAAS,EAC9BU,EAAc,OAAQhB,EAAM,EAC5BuB,GAAc,CAAC,MAAO,MAAM,EAAG,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CACrDA,EAAA,WAAagqG,GAAMrvI,CAAK,EAChC,EACD,SAASgoJ,GAAgBhoJ,EAAO,CAC9B,IAAI60I,EAAY,KAAK,OAClB,KAAK,QAAQ,QAAQ,KAAK,EAAI,KAAK,MAAM,EAAE,QAAQ,MAAM,GAAK,KAC7D,IACJ,OAAO70I,GAAS,KAAO60I,EAAY,KAAK,IAAI70I,EAAQ60I,EAAW,GAAG,CACpE,CACAjI,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,QAAQ,EAC1CyB,GAAa,SAAU,GAAG,EAC1BU,GAAgB,SAAU,EAAE,EAC5BkC,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACrCu4E,GAAc,CAAC,IAAK,IAAI,EAAGQ,EAAM,EAC7B,IAAAiW,GAAezY,GAAW,UAAW,EAAK,EAC9C5C,GAAe,IAAK,CAAC,KAAM,CAAC,EAAG,EAAG,QAAQ,EAC1CyB,GAAa,SAAU,GAAG,EAC1BU,GAAgB,SAAU,EAAE,EAC5BkC,EAAc,IAAKb,EAAS,EACda,EAAA,KAAMb,GAAWn3E,EAAM,EACrCu4E,GAAc,CAAC,IAAK,IAAI,EAAGS,EAAM,EAC7B,IAAAiW,GAAe1Y,GAAW,UAAW,EAAK,EAC/B5C,GAAA,IAAK,EAAG,EAAG,UAAW,CACnC,MAAO,CAAC,EAAE,KAAK,YAAgB,OAChC,EACDA,GAAe,EAAG,CAAC,KAAM,CAAC,EAAG,EAAG,UAAW,CACzC,MAAO,CAAC,EAAE,KAAK,YAAgB,MAChC,EACDA,GAAe,EAAG,CAAC,MAAO,CAAC,EAAG,EAAG,aAAa,EAC9CA,GAAe,EAAG,CAAC,OAAQ,CAAC,EAAG,EAAG,UAAW,CACpC,YAAK,YAAgB,KAC7B,EACDA,GAAe,EAAG,CAAC,QAAS,CAAC,EAAG,EAAG,UAAW,CACrC,YAAK,YAAgB,MAC7B,EACDA,GAAe,EAAG,CAAC,SAAU,CAAC,EAAG,EAAG,UAAW,CACtC,YAAK,YAAgB,MAC7B,EACDA,GAAe,EAAG,CAAC,UAAW,CAAC,EAAG,EAAG,UAAW,CACvC,YAAK,YAAgB,MAC7B,EACDA,GAAe,EAAG,CAAC,WAAY,CAAC,EAAG,EAAG,UAAW,CACxC,YAAK,YAAgB,MAC7B,EACDA,GAAe,EAAG,CAAC,YAAa,CAAC,EAAG,EAAG,UAAW,CACzC,YAAK,YAAgB,MAC7B,EACDyB,GAAa,cAAe,IAAI,EAChCU,GAAgB,cAAe,EAAE,EACnBkC,EAAA,IAAKV,EAAWP,EAAM,EACtBiB,EAAA,KAAMV,EAAWt3E,EAAM,EACvBg4E,EAAA,MAAOV,EAAWN,EAAM,EACtC,IAAIjqI,GAAOmiJ,GACX,IAAKniJ,GAAQ,OAAQA,GAAM,QAAU,EAAGA,IAAS,IAC/CirI,EAAcjrI,GAAO0qI,EAAa,EAE3B,SAAA0X,GAAQpoJ,EAAOtK,EAAO,CAC7BA,EAAMw8I,EAAW,EAAI7C,IAAO,KAAOrvI,GAAS,GAAG,CACjD,CACA,IAAKgG,GAAQ,IAAKA,GAAM,QAAU,EAAGA,IAAS,IAC5CwrI,GAAcxrI,GAAOoiJ,EAAO,EAEVD,GAAA3Y,GAAW,eAAgB,EAAK,EACrC5C,GAAA,IAAK,EAAG,EAAG,UAAU,EACrBA,GAAA,KAAM,EAAG,EAAG,UAAU,EACrC,SAASyb,IAAc,CACd,YAAK,OAAS,MAAQ,EAC/B,CACA,SAASC,IAAc,CACd,YAAK,OAAS,6BAA+B,EACtD,CACA,IAAInwJ,GAAQ+yI,EAAO,UACnB/yI,GAAM,IAAMqQ,GACZrQ,GAAM,SAAWsqJ,GACjBtqJ,GAAM,MAAQJ,GACdI,GAAM,KAAO0G,GACb1G,GAAM,MAAQ+sJ,GACd/sJ,GAAM,OAAS2/C,GACf3/C,GAAM,KAAOzD,GACbyD,GAAM,QAAUgsJ,GAChBhsJ,GAAM,GAAK1D,GACX0D,GAAM,MAAQisJ,GACdjsJ,GAAM,IAAM03I,GACZ13I,GAAM,UAAYutJ,GAClBvtJ,GAAM,QAAUyqJ,GAChBzqJ,GAAM,SAAW2qJ,GACjB3qJ,GAAM,UAAY4qJ,GAClB5qJ,GAAM,OAASgrJ,GACfhrJ,GAAM,cAAgBkrJ,GACtBlrJ,GAAM,eAAiBmrJ,GACvBnrJ,GAAM,QAAUqtJ,GAChBrtJ,GAAM,KAAOsK,GACbtK,GAAM,OAASy0E,GACfz0E,GAAM,WAAamsJ,GACnBnsJ,GAAM,IAAMgmJ,GACZhmJ,GAAM,IAAM8lJ,GACZ9lJ,GAAM,aAAestJ,GACrBttJ,GAAM,IAAM23I,GACZ33I,GAAM,QAAU6sJ,GAChB7sJ,GAAM,SAAWse,GACjBte,GAAM,QAAUglC,GAChBhlC,GAAM,SAAWmtJ,GACjBntJ,GAAM,OAASktJ,GACfltJ,GAAM,YAAc0rJ,GACpB1rJ,GAAM,QAAUinB,GACZ,OAAO,OAAW,KAAe,OAAO,KAAO,OACjDjnB,GAAM,OAAO,IAAI,4BAA4B,CAAC,EAAI,UAAW,CACpD,gBAAY,KAAK,SAAW,MAGvCA,GAAM,OAASotJ,GACfptJ,GAAM,SAAWrC,GACjBqC,GAAM,KAAOitJ,GACbjtJ,GAAM,QAAUgtJ,GAChBhtJ,GAAM,aAAewtJ,GACrBxtJ,GAAM,QAAUouJ,GAChBpuJ,GAAM,UAAYquJ,GAClBruJ,GAAM,QAAUsuJ,GAChBtuJ,GAAM,QAAUuuJ,GAChBvuJ,GAAM,KAAO27I,GACb37I,GAAM,WAAa47I,GACnB57I,GAAM,SAAWgvJ,GACjBhvJ,GAAM,YAAckvJ,GACdlvJ,GAAA,QAAUA,GAAM,SAAW2vJ,GACjC3vJ,GAAM,MAAQi7I,GACdj7I,GAAM,YAAck7I,GACdl7I,GAAA,KAAOA,GAAM,MAAQq9I,GACrBr9I,GAAA,QAAUA,GAAM,SAAWs9I,GACjCt9I,GAAM,YAAcqvJ,GACpBrvJ,GAAM,gBAAkBuvJ,GACxBvvJ,GAAM,eAAiBmvJ,GACvBnvJ,GAAM,sBAAwBovJ,GAC9BpvJ,GAAM,KAAO4vJ,GACP5vJ,GAAA,IAAMA,GAAM,KAAOw+I,GACzBx+I,GAAM,QAAU0+I,GAChB1+I,GAAM,WAAa2+I,GACnB3+I,GAAM,UAAY6vJ,GACZ7vJ,GAAA,KAAOA,GAAM,MAAQ+/I,EACrB//I,GAAA,OAASA,GAAM,QAAU8vJ,GACzB9vJ,GAAA,OAASA,GAAM,QAAU+vJ,GACzB/vJ,GAAA,YAAcA,GAAM,aAAegwJ,GACzChwJ,GAAM,UAAYgoJ,GAClBhoJ,GAAM,IAAMsoJ,GACZtoJ,GAAM,MAAQuoJ,GACdvoJ,GAAM,UAAYwoJ,GAClBxoJ,GAAM,qBAAuB0oJ,GAC7B1oJ,GAAM,MAAQ2oJ,GACd3oJ,GAAM,QAAU6oJ,GAChB7oJ,GAAM,YAAc8oJ,GACpB9oJ,GAAM,MAAQ+oJ,GACd/oJ,GAAM,MAAQ+oJ,GACd/oJ,GAAM,SAAWkwJ,GACjBlwJ,GAAM,SAAWmwJ,GACjBnwJ,GAAM,MAAQkzI,GACZ,kDACA0c,EAAA,EAEF5vJ,GAAM,OAASkzI,GACb,mDACA+H,EAAA,EAEFj7I,GAAM,MAAQkzI,GACZ,iDACAyI,EAAA,EAEF37I,GAAM,KAAOkzI,GACX,2GACAmV,EAAA,EAEFroJ,GAAM,aAAekzI,GACnB,0GACA0V,EAAA,EAEF,SAASwH,GAAWvoJ,EAAO,CAClB,OAAA08I,GAAY18I,EAAQ,GAAG,CAChC,CACA,SAASwoJ,IAAe,CACtB,OAAO9L,GAAY,MAAM,KAAM,SAAS,EAAE,UAAU,CACtD,CACA,SAAS+L,GAAmBv8I,EAAQ,CAC3B,OAAAA,CACT,CACA,IAAIw8I,GAAU9c,GAAO,UACrB8c,GAAQ,SAAW5c,EACnB4c,GAAQ,eAAiBpb,GACzBob,GAAQ,YAAchb,GACtBgb,GAAQ,QAAU7a,GAClB6a,GAAQ,SAAWD,GACnBC,GAAQ,WAAaD,GACrBC,GAAQ,aAAe3a,GACvB2a,GAAQ,WAAaxa,GACrBwa,GAAQ,IAAM5vF,GACd4vF,GAAQ,KAAO1C,GACf0C,GAAQ,UAAYxC,GACpBwC,GAAQ,gBAAkBpC,GAC1BoC,GAAQ,cAAgB7B,GACxB6B,GAAQ,cAAgB/B,GACxB+B,GAAQ,gBAAkB5B,GAC1B4B,GAAQ,OAAS9V,GACjB8V,GAAQ,YAAc7V,GACtB6V,GAAQ,YAAczV,GACtByV,GAAQ,YAAclV,GACtBkV,GAAQ,iBAAmBpV,GAC3BoV,GAAQ,KAAOtT,GACfsT,GAAQ,eAAiBnT,GACzBmT,GAAQ,eAAiBpT,GACzBoT,GAAQ,SAAWtS,GACnBsS,GAAQ,YAAcnS,GACtBmS,GAAQ,cAAgBpS,GACxBoS,GAAQ,cAAgBhS,GACxBgS,GAAQ,cAAgB3R,GACxB2R,GAAQ,mBAAqBzR,GAC7ByR,GAAQ,iBAAmBxR,GAC3BwR,GAAQ,KAAO1Q,GACf0Q,GAAQ,SAAWvQ,EACnB,SAASwQ,GAAM3kE,EAASv7E,EAAOmgJ,EAAO17I,EAAQ,CACxC,IAAA+yH,EAAUqZ,KAAayK,EAAM7Z,IAAY,IAAIh9H,EAAQzE,CAAK,EAC9D,OAAOw3H,EAAQ2oB,CAAK,EAAE7E,EAAK//D,CAAO,CACpC,CACS,SAAA6kE,GAAe7kE,EAASv7E,EAAOmgJ,EAAO,CAM7C,GALI5e,EAAShmD,CAAO,IACVv7E,EAAAu7E,EACEA,EAAA,QAEZA,EAAUA,GAAW,GACjBv7E,GAAS,KACX,OAAOkgJ,GAAM3kE,EAASv7E,EAAOmgJ,EAAO,OAAO,EAEzC,IAAAjyJ,EAAGmyJ,EAAM,GACb,IAAKnyJ,EAAI,EAAGA,EAAI,GAAIA,IAClBmyJ,EAAInyJ,CAAC,EAAIgyJ,GAAM3kE,EAASrtF,EAAGiyJ,EAAO,OAAO,EAEpC,OAAAE,CACT,CACA,SAASC,GAAiBC,EAAchlE,EAASv7E,EAAOmgJ,EAAO,CACzD,OAAOI,GAAiB,WACtBhf,EAAShmD,CAAO,IACVv7E,EAAAu7E,EACEA,EAAA,QAEZA,EAAUA,GAAW,KAEXA,EAAAglE,EACFvgJ,EAAAu7E,EACOglE,EAAA,GACXhf,EAAShmD,CAAO,IACVv7E,EAAAu7E,EACEA,EAAA,QAEZA,EAAUA,GAAW,IAEnB,IAAAi8C,EAAUqZ,KAAaxhF,EAAQkxF,EAAe/oB,EAAQ,MAAM,IAAM,EAAGtpI,GAAGmyJ,GAAM,GAClF,GAAIrgJ,GAAS,KACX,OAAOkgJ,GAAM3kE,GAAUv7E,EAAQqvD,GAAS,EAAG8wF,EAAO,KAAK,EAEzD,IAAKjyJ,GAAI,EAAGA,GAAI,EAAGA,KACbmyJ,GAAAnyJ,EAAC,EAAIgyJ,GAAM3kE,GAAUrtF,GAAImhE,GAAS,EAAG8wF,EAAO,KAAK,EAEhD,OAAAE,EACT,CACS,SAAAG,GAAWjlE,EAASv7E,EAAO,CAC3B,OAAAogJ,GAAe7kE,EAASv7E,EAAO,QAAQ,CAChD,CACS,SAAAygJ,GAAgBllE,EAASv7E,EAAO,CAChC,OAAAogJ,GAAe7kE,EAASv7E,EAAO,aAAa,CACrD,CACS,SAAA0gJ,GAAaH,EAAchlE,EAASv7E,EAAO,CAClD,OAAOsgJ,GAAiBC,EAAchlE,EAASv7E,EAAO,UAAU,CAClE,CACS,SAAA2gJ,GAAkBJ,EAAchlE,EAASv7E,EAAO,CACvD,OAAOsgJ,GAAiBC,EAAchlE,EAASv7E,EAAO,eAAe,CACvE,CACS,SAAA4gJ,GAAgBL,EAAchlE,EAASv7E,EAAO,CACrD,OAAOsgJ,GAAiBC,EAAchlE,EAASv7E,EAAO,aAAa,CACrE,CACA4wI,GAAmB,KAAM,CACvB,KAAM,CACJ,CACE,MAAO,aACP,MAAO,IACP,OAAQ,EACR,KAAM,cACN,OAAQ,KACR,KAAM,IACR,EACA,CACE,MAAO,aACP,MAAO,KACP,OAAQ,EACR,KAAM,gBACN,OAAQ,KACR,KAAM,IACR,CACF,EACA,uBAAwB,uBACxB,QAAS,SAASn5D,EAAQ,CACxB,IAAIlsF,EAAIksF,EAAS,GAAI+rD,EAASoD,GAAMnvD,EAAS,IAAM,EAAE,IAAM,EAAI,KAAOlsF,IAAM,EAAI,KAAOA,IAAM,EAAI,KAAOA,IAAM,EAAI,KAAO,KACzH,OAAOksF,EAAS+rD,CAClB,EACD,EACDj/H,EAAM,KAAOq+H,GACX,wDACAgO,EAAA,EAEFrsI,EAAM,SAAWq+H,GACf,gEACAiO,EAAA,EAEF,IAAIgQ,GAAU,KAAK,IACnB,SAASC,IAAM,CACb,IAAIj9I,EAAO,KAAK,MACX,0BAAgBg9I,GAAQ,KAAK,aAAa,EAC1C,WAAQA,GAAQ,KAAK,KAAK,EAC1B,aAAUA,GAAQ,KAAK,OAAO,EAC9Bh9I,EAAA,aAAeg9I,GAAQh9I,EAAK,YAAY,EACxCA,EAAA,QAAUg9I,GAAQh9I,EAAK,OAAO,EAC9BA,EAAA,QAAUg9I,GAAQh9I,EAAK,OAAO,EAC9BA,EAAA,MAAQg9I,GAAQh9I,EAAK,KAAK,EAC1BA,EAAA,OAASg9I,GAAQh9I,EAAK,MAAM,EAC5BA,EAAA,MAAQg9I,GAAQh9I,EAAK,KAAK,EACxB,IACT,CACA,SAASk9I,GAAc1K,EAAU9+I,EAAOpM,EAAO+6E,EAAW,CACpD,IAAAuvE,EAAQU,GAAe5+I,EAAOpM,CAAK,EAC9B,OAAAkrJ,EAAA,eAAiBnwE,EAAYuvE,EAAM,cACnCY,EAAA,OAASnwE,EAAYuvE,EAAM,MAC3BY,EAAA,SAAWnwE,EAAYuvE,EAAM,QAC/BY,EAAS,SAClB,CACS,SAAA2K,GAAMzpJ,EAAOpM,EAAO,CAC3B,OAAO41J,GAAc,KAAMxpJ,EAAOpM,EAAO,CAAC,CAC5C,CACS,SAAA81J,GAAW1pJ,EAAOpM,EAAO,CAChC,OAAO41J,GAAc,KAAMxpJ,EAAOpM,EAAO,EAAE,CAC7C,CACA,SAAS+1J,GAAQzpE,EAAQ,CACvB,OAAIA,EAAS,EACJ,KAAK,MAAMA,CAAM,EAEjB,KAAK,KAAKA,CAAM,CAE3B,CACA,SAAS0pE,IAAS,CAChB,IAAIvK,EAAgB,KAAK,cAAeF,EAAQ,KAAK,MAAOF,EAAU,KAAK,QAAS3yI,EAAO,KAAK,MAAO8yI,EAAU/G,EAAUD,GAAQ2G,GAAQ8K,GAC3I,OAAMxK,GAAiB,GAAKF,GAAS,GAAKF,GAAW,GAAKI,GAAiB,GAAKF,GAAS,GAAKF,GAAW,IACvGI,GAAiBsK,GAAQG,GAAa7K,CAAO,EAAIE,CAAK,EAAI,MAClDA,EAAA,EACEF,EAAA,GAEZ3yI,EAAK,aAAe+yI,EAAgB,IACzBD,EAAAhQ,GAASiQ,EAAgB,GAAG,EACvC/yI,EAAK,QAAU8yI,EAAW,GACf/G,EAAAjJ,GAASgQ,EAAW,EAAE,EACjC9yI,EAAK,QAAU+rI,EAAW,GACjBD,GAAAhJ,GAASiJ,EAAW,EAAE,EAC/B/rI,EAAK,MAAQ8rI,GAAS,GACb+G,GAAA/P,GAASgJ,GAAS,EAAE,EACZyR,GAAAza,GAAS2a,GAAa5K,CAAK,CAAC,EAClCF,GAAA4K,GACF1K,GAAAwK,GAAQG,GAAaD,EAAc,CAAC,EACpC9K,GAAA3P,GAAS6P,EAAU,EAAE,EACnBA,GAAA,GACX3yI,EAAK,KAAO6yI,EACZ7yI,EAAK,OAAS2yI,EACd3yI,EAAK,MAAQyyI,GACN,IACT,CACA,SAASgL,GAAa5K,EAAO,CAC3B,OAAOA,EAAQ,KAAO,MACxB,CACA,SAAS2K,GAAa7K,EAAS,CAC7B,OAAOA,EAAU,OAAS,IAC5B,CACA,SAAS+K,GAAGvb,EAAO,CACb,IAAC,KAAK,UACD,WAEL,IAAA0Q,EAAOF,EAASI,EAAgB,KAAK,cAEzC,GADA5Q,EAAQD,GAAeC,CAAK,EACxBA,IAAU,SAAWA,IAAU,WAAaA,IAAU,OAGxD,OAFQ0Q,EAAA,KAAK,MAAQE,EAAgB,MAC3BJ,EAAA,KAAK,QAAU8K,GAAa5K,CAAK,EACnC1Q,EAAO,CACb,IAAK,QACI,OAAAwQ,EACT,IAAK,UACH,OAAOA,EAAU,EACnB,IAAK,OACH,OAAOA,EAAU,EACrB,KAGA,QADAE,EAAQ,KAAK,MAAQ,KAAK,MAAM2K,GAAa,KAAK,OAAO,CAAC,EAClDrb,EAAO,CACb,IAAK,OACI,OAAA0Q,EAAQ,EAAIE,EAAgB,OACrC,IAAK,MACH,OAAOF,EAAQE,EAAgB,MACjC,IAAK,OACI,OAAAF,EAAQ,GAAKE,EAAgB,KACtC,IAAK,SACI,OAAAF,EAAQ,KAAOE,EAAgB,IACxC,IAAK,SACI,OAAAF,EAAQ,MAAQE,EAAgB,IACzC,IAAK,cACH,OAAO,KAAK,MAAMF,EAAQ,KAAK,EAAIE,EACrC,QACQ,UAAI,MAAM,gBAAkB5Q,CAAK,CAC3C,CAEJ,CACA,SAASwb,IAAY,CACf,OAAC,KAAK,UAGH,KAAK,cAAgB,KAAK,MAAQ,MAAQ,KAAK,QAAU,GAAK,OAAS5a,GAAM,KAAK,QAAU,EAAE,EAAI,QAFhG,GAGX,CACA,SAAS6a,GAAOC,EAAO,CACrB,OAAO,UAAW,CACT,YAAK,GAAGA,CAAK,EAExB,CACA,IAAIC,GAAiBF,GAAO,IAAI,EAAGG,GAAYH,GAAO,GAAG,EAAGI,GAAYJ,GAAO,GAAG,EAAGK,GAAUL,GAAO,GAAG,EAAGM,GAASN,GAAO,GAAG,EAAGO,GAAUP,GAAO,GAAG,EAAGQ,GAAWR,GAAO,GAAG,EAAGS,GAAaT,GAAO,GAAG,EAAGU,GAAUV,GAAO,GAAG,EAC/N,SAASW,IAAU,CACjB,OAAOjM,GAAe,IAAI,CAC5B,CACA,SAASkM,GAAMrc,EAAO,CACpB,OAAAA,EAAQD,GAAeC,CAAK,EACrB,KAAK,UAAY,KAAKA,EAAQ,GAAG,EAAM,KAChD,CACA,SAASsc,GAAWx2J,EAAM,CACxB,OAAO,UAAW,CAChB,OAAO,KAAK,UAAY,KAAK,MAAMA,CAAI,EAAI,IAE/C,CACI,IAAAy2J,GAAeD,GAAW,cAAc,EAAGE,GAAUF,GAAW,SAAS,EAAGG,GAAUH,GAAW,SAAS,EAAGI,GAAQJ,GAAW,OAAO,EAAGK,GAAOL,GAAW,MAAM,EAAGM,GAASN,GAAW,QAAQ,EAAGO,GAAQP,GAAW,OAAO,EAClO,SAASQ,IAAQ,CACf,OAAOnc,GAAS,KAAK,KAAK,EAAI,CAAC,CACjC,CACI,IAAAnqD,GAAQ,KAAK,MAAOumE,GAAa,CACnC,GAAI,GAEJ,EAAG,GAEH,EAAG,GAEH,EAAG,GAEH,EAAG,GAEH,EAAG,KAEH,EAAG,IAGL,SAASC,GAAkBv/I,EAAQg0E,EAAQ8tD,EAAeC,EAAUhO,EAAS,CACpE,OAAAA,EAAQ,aAAa//C,GAAU,EAAG,CAAC,CAAC8tD,EAAe9hI,EAAQ+hI,CAAQ,CAC5E,CACA,SAASyd,GAAeC,EAAgB3d,EAAe4d,EAAa3rB,EAAS,CACvE,IAAA6e,EAAWF,GAAe+M,CAAc,EAAE,MAAOvM,EAAWn6D,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAGzG,GAAWpzD,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAG1G,GAASnzD,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAGK,GAAQl6D,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAGG,GAAUh6D,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAGI,GAASj6D,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAGC,GAAS95D,GAAM65D,EAAS,GAAG,GAAG,CAAC,EAAG/qJ,GAAIqrJ,GAAYwM,EAAY,IAAM,CAAC,IAAKxM,CAAQ,GAAKA,EAAWwM,EAAY,GAAK,CAAC,KAAMxM,CAAQ,GAAK/G,IAAY,GAAK,CAAC,GAAG,GAAKA,GAAWuT,EAAY,GAAK,CAAC,KAAMvT,EAAQ,GAAKD,IAAU,GAAK,CAAC,GAAG,GAAKA,GAASwT,EAAY,GAAK,CAAC,KAAMxT,EAAM,GAAK+G,IAAS,GAAK,CAAC,GAAG,GAAKA,GAAQyM,EAAY,GAAK,CAAC,KAAMzM,EAAK,EACllB,OAAAyM,EAAY,GAAK,OACf73J,OAAKmrJ,IAAU,GAAK,CAAC,GAAG,GAAKA,GAAS0M,EAAY,GAAK,CAAC,KAAM1M,EAAM,GAEtEnrJ,OAAKkrJ,IAAW,GAAK,CAAC,GAAG,GAAKA,GAAU2M,EAAY,GAAK,CAAC,KAAM3M,EAAO,GAAKF,IAAU,GAAK,CAAC,GAAG,GAAK,CAAC,KAAMA,EAAM,EACrHhrJ,GAAE,CAAC,EAAIi6I,EACLj6I,GAAA,CAAC,EAAI,CAAC43J,EAAiB,EACzB53J,GAAE,CAAC,EAAIksI,EACAwrB,GAAkB,MAAM,KAAM13J,EAAC,CACxC,CACA,SAAS83J,GAA2BC,EAAkB,CACpD,OAAIA,IAAqB,OAChB7mE,GAEL,OAAO6mE,GAAqB,YACtB7mE,GAAA6mE,EACD,IAEF,EACT,CACS,SAAAC,GAA4BC,EAAW9yD,EAAO,CACjD,OAAAsyD,GAAWQ,CAAS,IAAM,OACrB,GAEL9yD,IAAU,OACLsyD,GAAWQ,CAAS,GAE7BR,GAAWQ,CAAS,EAAI9yD,EACpB8yD,IAAc,MAChBR,GAAW,GAAKtyD,EAAQ,GAEnB,GACT,CACS,SAAA+yD,GAASC,EAAeC,EAAe,CAC1C,IAAC,KAAK,UACD,YAAK,aAAa,cAE3B,IAAIC,EAAa,GAAOC,EAAKb,GAAYvrB,EAASgM,EAC9C,cAAOigB,GAAkB,WACXC,EAAAD,EACAA,EAAA,IAEd,OAAOA,GAAkB,YACdE,EAAAF,GAEX,OAAOC,GAAkB,WAC3BE,EAAK,OAAO,OAAO,CAAC,EAAGb,GAAYW,CAAa,EAC5CA,EAAc,GAAK,MAAQA,EAAc,IAAM,OAC9CE,EAAA,GAAKF,EAAc,EAAI,IAG9BlsB,EAAU,KAAK,aACfgM,EAASyf,GAAe,KAAM,CAACU,EAAYC,EAAIpsB,CAAO,EAClDmsB,IACFngB,EAAShM,EAAQ,WAAW,CAAC,KAAMgM,CAAM,GAEpChM,EAAQ,WAAWgM,CAAM,CAClC,CACA,IAAIqgB,GAAQ,KAAK,IACjB,SAASC,GAAKz4J,EAAG,CACf,OAAQA,EAAI,IAAMA,EAAI,IAAM,CAACA,CAC/B,CACA,SAAS04J,IAAgB,CACnB,IAAC,KAAK,UACD,YAAK,aAAa,cAEvB,IAAApN,EAAWkN,GAAM,KAAK,aAAa,EAAI,IAAKnN,EAAQmN,GAAM,KAAK,KAAK,EAAGrN,EAAUqN,GAAM,KAAK,OAAO,EAAGjU,EAAUD,EAAQ2G,EAAQnhI,GAAGk1F,GAAQ,KAAK,UAAU,EAAG25C,GAAWC,GAAQC,GAAUC,GAC9L,OAAK95C,IAGMulC,EAAAjJ,GAASgQ,EAAW,EAAE,EACxBhH,EAAAhJ,GAASiJ,EAAW,EAAE,EACnB+G,GAAA,GACA/G,GAAA,GACH0G,EAAA3P,GAAS6P,EAAU,EAAE,EACnBA,GAAA,GACPrhI,GAAAwhI,EAAWA,EAAS,QAAQ,CAAC,EAAE,QAAQ,SAAU,EAAE,EAAI,GAC/CqN,GAAA35C,GAAQ,EAAI,IAAM,GAC9B45C,GAASH,GAAK,KAAK,OAAO,IAAMA,GAAKz5C,EAAK,EAAI,IAAM,GACpD65C,GAAWJ,GAAK,KAAK,KAAK,IAAMA,GAAKz5C,EAAK,EAAI,IAAM,GACpD85C,GAAUL,GAAK,KAAK,aAAa,IAAMA,GAAKz5C,EAAK,EAAI,IAAM,GACpD25C,GAAY,KAAO1N,EAAS2N,GAAS3N,EAAS,IAAM,KAAOE,EAAUyN,GAASzN,EAAU,IAAM,KAAOE,EAAQwN,GAAWxN,EAAQ,IAAM,KAAO/G,GAAUC,GAAY+G,EAAW,IAAM,KAAOhH,EAASwU,GAAUxU,EAAS,IAAM,KAAOC,EAAWuU,GAAUvU,EAAW,IAAM,KAAO+G,EAAWwN,GAAUhvI,GAAI,IAAM,KAb9S,KAcX,CACA,IAAIivI,GAAUhO,GAAS,UACvB,OAAAgO,GAAQ,QAAUnO,GAClBmO,GAAQ,IAAMtD,GACdsD,GAAQ,IAAMpD,GACdoD,GAAQ,SAAWnD,GACnBmD,GAAQ,GAAK7C,GACb6C,GAAQ,eAAiBzC,GACzByC,GAAQ,UAAYxC,GACpBwC,GAAQ,UAAYvC,GACpBuC,GAAQ,QAAUtC,GAClBsC,GAAQ,OAASrC,GACjBqC,GAAQ,QAAUpC,GAClBoC,GAAQ,SAAWnC,GACnBmC,GAAQ,WAAalC,GACrBkC,GAAQ,QAAUjC,GAClBiC,GAAQ,QAAU5C,GAClB4C,GAAQ,QAAUjD,GAClBiD,GAAQ,MAAQhC,GAChBgC,GAAQ,IAAM/B,GACd+B,GAAQ,aAAe7B,GACvB6B,GAAQ,QAAU5B,GAClB4B,GAAQ,QAAU3B,GAClB2B,GAAQ,MAAQ1B,GAChB0B,GAAQ,KAAOzB,GACfyB,GAAQ,MAAQtB,GAChBsB,GAAQ,OAASxB,GACjBwB,GAAQ,MAAQvB,GAChBuB,GAAQ,SAAWZ,GACnBY,GAAQ,YAAcL,GACtBK,GAAQ,SAAWL,GACnBK,GAAQ,OAASL,GACjBK,GAAQ,OAASjgF,GACjBigF,GAAQ,WAAavI,GACrBuI,GAAQ,YAAcxhB,GACpB,sFACAmhB,EAAA,EAEFK,GAAQ,KAAOpqJ,GACAmqI,GAAA,IAAK,EAAG,EAAG,MAAM,EACjBA,GAAA,IAAK,EAAG,EAAG,SAAS,EACnCqE,EAAc,IAAKN,EAAW,EAC9BM,EAAc,IAAKH,EAAc,EACjCU,GAAc,IAAK,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CAChDA,EAAO,GAAK,IAAI,KAAK,WAAWrlC,CAAK,EAAI,GAAG,EAC7C,EACDwxI,GAAc,IAAK,SAASxxI,EAAOtK,EAAO2vC,EAAQ,CAChDA,EAAO,GAAK,IAAI,KAAKgqG,GAAMrvI,CAAK,CAAC,EAClC,EACDgN,EAAM,QAAU,SAChB28H,EAAgB+S,EAAW,EAC3B1vI,EAAM,GAAK7U,GACX6U,EAAM,IAAM+2D,GACZ/2D,EAAM,IAAMwP,GACZxP,EAAM,IAAMsxI,GACZtxI,EAAM,IAAMk9H,EACZl9H,EAAM,KAAOu7I,GACbv7I,EAAM,OAASi8I,GACfj8I,EAAM,OAASi9H,EACfj9H,EAAM,OAASqsI,GACfrsI,EAAM,QAAU49H,EAChB59H,EAAM,SAAW4xI,GACjB5xI,EAAM,SAAWm+H,EACjBn+H,EAAM,SAAWm8I,GACjBn8I,EAAM,UAAYw7I,GAClBx7I,EAAM,WAAassI,GACnBtsI,EAAM,WAAasyI,GACnBtyI,EAAM,YAAck8I,GACpBl8I,EAAM,YAAcq8I,GACpBr8I,EAAM,aAAeusI,GACrBvsI,EAAM,aAAewsI,GACrBxsI,EAAM,QAAU0sI,GAChB1sI,EAAM,cAAgBo8I,GACtBp8I,EAAM,eAAiBwhI,GACvBxhI,EAAM,qBAAuB6+I,GAC7B7+I,EAAM,sBAAwB++I,GAC9B/+I,EAAM,eAAiBu1I,GACvBv1I,EAAM,UAAY7U,GAClB6U,EAAM,UAAY,CAChB,eAAgB,mBAEhB,uBAAwB,sBAExB,kBAAmB,0BAEnB,KAAM,aAEN,KAAM,QAEN,aAAc,WAEd,QAAS,eAET,KAAM,aAEN,MAAO,WAGFA,CAAA,CACR,CACH,CACF,CAAC,EAGG8/I,IAA0B74J,GAAW,CACvC,kDAAkDhB,EAASC,EAAQ,EAChE,SAASmU,EAAMnS,EAAS,CACvB,GAAI,OAAO,QAAW,YAAc,OAAO,IACzC,OAAO,CAAC,SAAU,QAAQ,EAAG,SAAS63J,EAASC,EAAQ,CACrD,OAAKA,EAAO,KACVA,EAAO,GAAK,IACV,OAAOD,GAAY,YAAcA,EAAQ,eAAe,SAAS,IACnEA,EAAUA,EAAQ,SACb73J,EAAQ63J,EAASC,CAAM,EAC/B,UACQ,OAAO95J,GAAW,UAAYA,EAAO,QAAS,CACvD,IAAI8D,EAAS,OAAO,OAAU,IAAci2J,GAAgB,OACvDj2J,IACHA,EAAShC,GAAe,EACnBgC,EAAO,KACVA,EAAO,GAAK,KAEZ,IAAAk2J,EAAS,OAAO,OAAU,KAAe,OAAO,OAAO,OAAU,IAAc,OAAO,OAASzjB,IAAe,EAC3Gv2I,EAAA,QAAUgC,EAAQg4J,EAAQl2J,CAAM,OAEvCqQ,EAAK,gBAAkBnS,EAAQmS,EAAK,OAAQA,EAAK,MAAM,CACzD,GACCpU,EAAS,SAASi6J,EAAQnxH,EAAG,CAC9B,IAAIoxH,EAAkB,SAASnmI,EAASrvB,EAASzD,EAAI,CAyD/C,GAxDJ,KAAK,SAAW,OACX,aAAU6nC,EAAE/U,CAAO,EACxB,KAAK,UAAYkmI,EAAS,UAAQ,KAAK,EACvC,KAAK,QAAUA,EAAS,QAAM,KAAK,EACnC,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,UAAY,GACjB,KAAK,iBAAmB,GACxB,KAAK,cAAgB,GAChB,aAAUA,IAAS,SAAS,IAAK,MAAM,EAAE,OAAO,MAAM,EACtD,aAAUA,IAAS,IAAI,IAAK,MAAM,EAAE,OAAO,MAAM,EACtD,KAAK,gBAAkB,GACvB,KAAK,mBAAqB,GAC1B,KAAK,qBAAuB,GAC5B,KAAK,WAAa,GAClB,KAAK,iBAAmB,GACxB,KAAK,oBAAsB,EAC3B,KAAK,kBAAoB,GACzB,KAAK,gBAAkB,GACvB,KAAK,gBAAkB,GACvB,KAAK,oBAAsB,GAC3B,KAAK,OAAS,GACd,KAAK,MAAQ,QACT,KAAK,QAAQ,SAAS,YAAY,IACpC,KAAK,MAAQ,QACf,KAAK,MAAQ,OACT,KAAK,QAAQ,SAAS,QAAQ,IAChC,KAAK,MAAQ,MACf,KAAK,cAAgB,aACrB,KAAK,mBAAqB,cAC1B,KAAK,oBAAsB,cAC3B,KAAK,OAAS,CACZ,UAAW,MACX,OAAQA,EAAO,aAAa,eAAe,GAAG,EAC9C,UAAW,MACX,WAAY,QACZ,YAAa,SACb,UAAW,IACX,iBAAkB,eAClB,WAAYA,EAAO,YAAY,EAC/B,WAAYA,EAAO,YAAY,EAC/B,SAAUA,EAAO,WAAW,EAAE,eAAe,GAE/C,KAAK,SAAW,UAAW,GAE3B,KAAK,UAAY,GACjB,KAAK,aAAe,GACpB,KAAK,cAAgB,IACjB,OAAOv1J,GAAY,UAAYA,IAAY,QAC7CA,EAAU,IACZA,EAAUokC,EAAE,OAAO,KAAK,QAAQ,OAAQpkC,CAAO,EAC3C,OAAOA,EAAQ,UAAa,UAAY,EAAEA,EAAQ,oBAAoBokC,KACxEpkC,EAAQ,SAAW,ycACrB,KAAK,SAAWA,EAAQ,UAAYokC,EAAEpkC,EAAQ,QAAQ,EAAE,OAASokC,EAAEpkC,EAAQ,QAAQ,EAAIokC,EAAE,KAAK,QAAQ,EACtG,KAAK,UAAYA,EAAEpkC,EAAQ,QAAQ,EAAE,SAAS,KAAK,QAAQ,EACvD,OAAOA,EAAQ,QAAW,WACxB,OAAOA,EAAQ,OAAO,WAAc,WACjC,YAAO,UAAYA,EAAQ,OAAO,WACrC,OAAOA,EAAQ,OAAO,QAAW,WAC9B,YAAO,OAASA,EAAQ,OAAO,QAClC,OAAOA,EAAQ,OAAO,WAAc,WACjC,YAAO,UAAYA,EAAQ,OAAO,WACrC,OAAOA,EAAQ,OAAO,YAAe,WACvC,KAAK,OAAO,WAAaA,EAAQ,OAAO,WAAW,SACjD,OAAOA,EAAQ,OAAO,YAAe,WACvC,KAAK,OAAO,WAAaA,EAAQ,OAAO,WAAW,SACjD,OAAOA,EAAQ,OAAO,UAAa,WAChC,YAAO,SAAWA,EAAQ,OAAO,UACpC,OAAOA,EAAQ,OAAO,YAAe,WAClC,YAAO,WAAaA,EAAQ,OAAO,YACtC,OAAOA,EAAQ,OAAO,aAAgB,WACnC,YAAO,YAAcA,EAAQ,OAAO,aACvC,OAAOA,EAAQ,OAAO,WAAc,WACjC,YAAO,UAAYA,EAAQ,OAAO,WACrC,OAAOA,EAAQ,OAAO,kBAAqB,UAAU,CACnD,IAAAJ,EAAO,SAAS,cAAc,UAAU,EACvCA,EAAA,UAAYI,EAAQ,OAAO,iBAChC,IAAIy1J,EAAY71J,EAAK,MACrB,KAAK,OAAO,iBAAmB61J,CACjC,CAgFE,GA9EJ,KAAK,UAAU,SAAS,KAAK,OAAO,SAAS,EACzC,OAAOz1J,EAAQ,WAAc,WAC/B,KAAK,UAAYu1J,EAAOv1J,EAAQ,UAAW,KAAK,OAAO,MAAM,GAC3D,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUu1J,EAAOv1J,EAAQ,QAAS,KAAK,OAAO,MAAM,GACvD,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUu1J,EAAOv1J,EAAQ,QAAS,KAAK,OAAO,MAAM,GACvD,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUu1J,EAAOv1J,EAAQ,QAAS,KAAK,OAAO,MAAM,GACvD,OAAOA,EAAQ,WAAc,WAC1B,eAAYu1J,EAAOv1J,EAAQ,SAAS,GACvC,OAAOA,EAAQ,SAAY,WACxB,aAAUu1J,EAAOv1J,EAAQ,OAAO,GACnC,OAAOA,EAAQ,SAAY,WACxB,aAAUu1J,EAAOv1J,EAAQ,OAAO,GACnC,OAAOA,EAAQ,SAAY,WACxB,aAAUu1J,EAAOv1J,EAAQ,OAAO,GACnC,KAAK,SAAW,KAAK,UAAU,SAAS,KAAK,OAAO,IACjD,eAAY,KAAK,QAAQ,MAAM,GAClC,KAAK,SAAW,KAAK,QAAQ,QAAQ,KAAK,OAAO,IAC9C,aAAU,KAAK,QAAQ,MAAM,GAChC,OAAOA,EAAQ,oBAAuB,WACxC,KAAK,mBAAqBA,EAAQ,oBAChC,OAAOA,EAAQ,YAAe,WAChC,KAAK,mBAAqBA,EAAQ,YAChC,OAAOA,EAAQ,qBAAwB,WACzC,KAAK,oBAAsBA,EAAQ,qBACjC,OAAOA,EAAQ,aAAgB,WACjC,KAAK,oBAAsBA,EAAQ,aACjC,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUA,EAAQ,SACrB,OAAOA,EAAQ,WAAc,WAC/B,KAAK,QAAUA,EAAQ,WACrB,OAAOA,EAAQ,OAAU,WAC3B,KAAK,MAAQA,EAAQ,OACnB,OAAOA,EAAQ,OAAU,WAC3B,KAAK,MAAQA,EAAQ,OACnB,OAAOA,EAAQ,iBAAoB,YACrC,KAAK,gBAAkBA,EAAQ,iBAC7B,OAAOA,EAAQ,oBAAuB,YACxC,KAAK,mBAAqBA,EAAQ,oBAChC,OAAOA,EAAQ,eAAkB,WACnC,KAAK,cAAgBA,EAAQ,eAC3B,OAAOA,EAAQ,eAAkB,WACnC,KAAK,cAAgBA,EAAQ,cAAc,KAAK,GAAG,GACjD,OAAOA,EAAQ,eAAkB,YACnC,KAAK,cAAgBA,EAAQ,eAC3B,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUA,EAAQ,SACrB,OAAOA,EAAQ,SAAY,WAC7B,KAAK,QAAUA,EAAQ,SACrB,OAAOA,EAAQ,sBAAyB,YAC1C,KAAK,qBAAuBA,EAAQ,sBAClC,OAAOA,EAAQ,kBAAqB,YACtC,KAAK,iBAAmBA,EAAQ,iBAC5B,KAAK,mBACF,aAAU,KAAK,UAAU,MAAM,IAEpC,OAAOA,EAAQ,YAAe,YAChC,KAAK,WAAaA,EAAQ,YACxB,OAAOA,EAAQ,mBAAsB,YACvC,KAAK,kBAAoBA,EAAQ,mBAC/B,OAAOA,EAAQ,qBAAwB,WACzC,KAAK,oBAAsBA,EAAQ,qBACjC,OAAOA,EAAQ,kBAAqB,YACtC,KAAK,iBAAmBA,EAAQ,kBAC9B,OAAOA,EAAQ,WAAc,YAC/B,KAAK,UAAYA,EAAQ,WACvB,OAAOA,EAAQ,iBAAoB,YACrC,KAAK,gBAAkBA,EAAQ,iBAC7B,OAAOA,EAAQ,iBAAoB,YACrC,KAAK,gBAAkBA,EAAQ,iBAC7B,OAAOA,EAAQ,eAAkB,aACnC,KAAK,cAAgBA,EAAQ,eAC3B,OAAOA,EAAQ,cAAiB,aAClC,KAAK,aAAeA,EAAQ,cAC1B,OAAOA,EAAQ,qBAAwB,YACzC,KAAK,oBAAsBA,EAAQ,qBACjC,KAAK,OAAO,UAAY,EAE1B,QADIihD,EAAW,KAAK,OAAO,SACpBA,EAAW,GAChB,KAAK,OAAO,WAAW,KAAK,KAAK,OAAO,WAAW,OAAO,EAC1DA,IAGJ,IAAI92C,EAAOiW,EAAKolC,EAChB,GAAI,OAAOxlD,EAAQ,UAAc,KAAe,OAAOA,EAAQ,QAAY,KACrEokC,EAAE,KAAK,OAAO,EAAE,GAAG,OAAO,EAAG,CAC/B,IAAInlC,EAAMmlC,EAAE,KAAK,OAAO,EAAE,MAAOk9G,EAAQriJ,EAAI,MAAM,KAAK,OAAO,SAAS,EACxEkL,EAAQiW,EAAM,KACVkhI,EAAM,QAAU,GAClBn3I,EAAQorJ,EAAOjU,EAAM,CAAC,EAAG,KAAK,OAAO,MAAM,EAC3ClhI,EAAMm1I,EAAOjU,EAAM,CAAC,EAAG,KAAK,OAAO,MAAM,GAChC,KAAK,kBAAoBriJ,IAAQ,KAC1CkL,EAAQorJ,EAAOt2J,EAAK,KAAK,OAAO,MAAM,EACtCmhB,EAAMm1I,EAAOt2J,EAAK,KAAK,OAAO,MAAM,GAElCkL,IAAU,MAAQiW,IAAQ,OAC5B,KAAK,aAAajW,CAAK,EACvB,KAAK,WAAWiW,CAAG,EAEvB,CAEE,UAAOpgB,EAAQ,QAAW,SAAU,CACjC,IAAAwlD,KAASxlD,EAAQ,OAAQ,CACxB,OAAOA,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,GAAM,SAC9Br7C,EAAAorJ,EAAOv1J,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,EAAG,KAAK,OAAO,MAAM,EAE3Dr7C,EAAQorJ,EAAOv1J,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,CAAC,EACrC,OAAOxlD,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,GAAM,SAChCplC,EAAAm1I,EAAOv1J,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,EAAG,KAAK,OAAO,MAAM,EAEzDplC,EAAMm1I,EAAOv1J,EAAQ,OAAOwlD,CAAK,EAAE,CAAC,CAAC,EACnC,KAAK,SAAWr7C,EAAM,SAAS,KAAK,OAAO,IACrCA,EAAA,KAAK,QAAQ,SACvB,IAAIurJ,EAAU,KAAK,QAKnB,GAJI,KAAK,SAAWA,GAAWvrJ,EAAM,QAAQ,IAAI,KAAK,OAAO,EAAE,QAAQurJ,CAAO,IAC5EA,EAAUvrJ,EAAM,QAAQ,IAAI,KAAK,OAAO,GACtCurJ,GAAWt1I,EAAI,QAAQs1I,CAAO,IAChCt1I,EAAMs1I,EAAQ,SACZ,OAAK,SAAWt1I,EAAI,SAAS,KAAK,QAAS,KAAK,WAAa,SAAW,KAAK,GAAKs1I,GAAWvrJ,EAAM,QAAQurJ,EAAS,KAAK,WAAa,SAAW,KAAK,GAEtJ,KAAA91J,EAAO,SAAS,cAAc,UAAU,EAC5CA,EAAK,UAAY4lD,EACjB,IAAIiwG,EAAY71J,EAAK,MACrB,KAAK,OAAO61J,CAAS,EAAI,CAACtrJ,EAAOiW,CAAG,EACtC,CACA,IAAI3c,EAAO,OACN,IAAA+hD,KAAS,KAAK,OACT/hD,GAAA,uBAAyB+hD,EAAQ,KAAOA,EAAQ,QAEtD,KAAK,uBACP/hD,GAAQ,uBAAyB,KAAK,OAAO,iBAAmB,KAAO,KAAK,OAAO,iBAAmB,SAEhGA,GAAA,QACR,KAAK,UAAU,KAAK,SAAS,EAAE,QAAQA,CAAI,CAC7C,CACI,OAAOlH,GAAO,aAChB,KAAK,SAAWA,GAEb,KAAK,aACR,KAAK,UAAY,KAAK,UAAU,QAAQ,KAAK,EAC7C,KAAK,QAAU,KAAK,QAAQ,MAAM,KAAK,EACvC,KAAK,UAAU,KAAK,gBAAgB,EAAE,KAAK,GAEzC,KAAK,YAAc,KAAK,YAC1B,KAAK,UAAY,IACf,KAAK,WACF,eAAU,SAAS,YAAY,EAElC,OAAOyD,EAAQ,QAAW,UACvB,eAAU,SAAS,aAAa,EACnC,KAAK,mBACF,eAAU,SAAS,QAAQ,EAChC,KAAK,UAAU,KAAK,oBAAoB,EAAE,SAAS,QAAQ,EAC3D,KAAK,UAAU,KAAK,oBAAoB,EAAE,KAAK,EAC/C,KAAK,UAAU,KAAK,qBAAqB,EAAE,KAAK,EAC5C,CAAC,KAAK,YAAc,KAAK,WACtB,eAAU,SAAS,YAAY,IAGpC,OAAOA,EAAQ,OAAW,KAAe,CAAC,KAAK,kBAAoB,KAAK,sBACrE,eAAU,SAAS,eAAe,EAEzC,KAAK,UAAU,SAAS,QAAU,KAAK,KAAK,EAC5C,KAAK,UAAU,KAAK,uBAAuB,EAAE,SAAS,KAAK,aAAa,EACpE,KAAK,mBAAmB,QAC1B,KAAK,UAAU,KAAK,WAAW,EAAE,SAAS,KAAK,kBAAkB,EAC/D,KAAK,oBAAoB,QAC3B,KAAK,UAAU,KAAK,YAAY,EAAE,SAAS,KAAK,mBAAmB,EACrE,KAAK,UAAU,KAAK,WAAW,EAAE,KAAK,KAAK,OAAO,UAAU,EAC5D,KAAK,UAAU,KAAK,YAAY,EAAE,KAAK,KAAK,OAAO,WAAW,EAC9D,KAAK,UAAU,KAAK,eAAe,EAAE,GAAG,wBAAyB,QAASokC,EAAE,MAAM,KAAK,UAAW,IAAI,CAAC,EAAE,GAAG,wBAAyB,QAASA,EAAE,MAAM,KAAK,UAAW,IAAI,CAAC,EAAE,GAAG,4BAA6B,eAAgBA,EAAE,MAAM,KAAK,UAAW,IAAI,CAAC,EAAE,GAAG,6BAA8B,eAAgBA,EAAE,MAAM,KAAK,UAAW,IAAI,CAAC,EAAE,GAAG,yBAA0B,oBAAqBA,EAAE,MAAM,KAAK,mBAAoB,IAAI,CAAC,EAAE,GAAG,yBAA0B,qBAAsBA,EAAE,MAAM,KAAK,mBAAoB,IAAI,CAAC,EAAE,GAAG,yBAA0B,8EAA+EA,EAAE,MAAM,KAAK,YAAa,IAAI,CAAC,EAC5oB,KAAK,UAAU,KAAK,SAAS,EAAE,GAAG,wBAAyB,KAAMA,EAAE,MAAM,KAAK,WAAY,IAAI,CAAC,EAC1F,eAAU,KAAK,cAAc,EAAE,GAAG,wBAAyB,kBAAmBA,EAAE,MAAM,KAAK,WAAY,IAAI,CAAC,EAAE,GAAG,wBAAyB,mBAAoBA,EAAE,MAAM,KAAK,YAAa,IAAI,CAAC,EAC9L,KAAK,QAAQ,GAAG,OAAO,GAAK,KAAK,QAAQ,GAAG,QAAQ,EACtD,KAAK,QAAQ,GAAG,CACd,wBAAyBA,EAAE,MAAM,KAAK,KAAM,IAAI,EAChD,wBAAyBA,EAAE,MAAM,KAAK,KAAM,IAAI,EAChD,wBAAyBA,EAAE,MAAM,KAAK,eAAgB,IAAI,EAC1D,0BAA2BA,EAAE,MAAM,KAAK,QAAS,IAAI,EAEtD,GAEI,aAAQ,GAAG,wBAAyBA,EAAE,MAAM,KAAK,OAAQ,IAAI,CAAC,EAC9D,aAAQ,GAAG,0BAA2BA,EAAE,MAAM,KAAK,OAAQ,IAAI,CAAC,GAEvE,KAAK,cAAc,GAErB,OAAAoxH,EAAgB,UAAY,CAC1B,YAAaA,EACb,aAAc,SAASG,EAAW,CAC5B,OAAOA,GAAc,WACvB,KAAK,UAAYJ,EAAOI,EAAW,KAAK,OAAO,MAAM,GACnD,OAAOA,GAAc,WAClB,eAAYJ,EAAOI,CAAS,GAC9B,KAAK,aACR,KAAK,UAAY,KAAK,UAAU,QAAQ,KAAK,GAC3C,KAAK,YAAc,KAAK,qBAC1B,KAAK,UAAU,OAAO,KAAK,MAAM,KAAK,UAAU,OAAO,EAAI,KAAK,mBAAmB,EAAI,KAAK,mBAAmB,EAC7G,KAAK,SAAW,KAAK,UAAU,SAAS,KAAK,OAAO,IACjD,eAAY,KAAK,QAAQ,MAAM,EAChC,KAAK,YAAc,KAAK,qBAC1B,KAAK,UAAU,OAAO,KAAK,MAAM,KAAK,UAAU,OAAO,EAAI,KAAK,mBAAmB,EAAI,KAAK,mBAAmB,GAE/G,KAAK,SAAW,KAAK,UAAU,QAAQ,KAAK,OAAO,IAChD,eAAY,KAAK,QAAQ,MAAM,EAChC,KAAK,YAAc,KAAK,qBAC1B,KAAK,UAAU,OAAO,KAAK,MAAM,KAAK,UAAU,OAAO,EAAI,KAAK,mBAAmB,EAAI,KAAK,mBAAmB,GAE9G,KAAK,WACR,KAAK,cAAc,EACrB,KAAK,mBAAmB,CAC1B,EACA,WAAY,SAASC,EAAS,CACxB,OAAOA,GAAY,WACrB,KAAK,QAAUL,EAAOK,EAAS,KAAK,OAAO,MAAM,GAC/C,OAAOA,GAAY,WAChB,aAAUL,EAAOK,CAAO,GAC1B,KAAK,aACR,KAAK,QAAU,KAAK,QAAQ,MAAM,KAAK,GACrC,KAAK,YAAc,KAAK,qBAC1B,KAAK,QAAQ,OAAO,KAAK,MAAM,KAAK,QAAQ,OAAO,EAAI,KAAK,mBAAmB,EAAI,KAAK,mBAAmB,EACzG,KAAK,QAAQ,SAAS,KAAK,SAAS,IACjC,aAAU,KAAK,UAAU,MAAM,GAClC,KAAK,SAAW,KAAK,QAAQ,QAAQ,KAAK,OAAO,IAC9C,aAAU,KAAK,QAAQ,MAAM,GAChC,KAAK,SAAW,KAAK,UAAU,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,SAAS,KAAK,OAAO,IAChF,KAAK,QAAU,KAAK,UAAU,QAAQ,IAAI,KAAK,OAAO,GACnD,uBAAoB,KAAK,QAAQ,MAAM,EACvC,eAAU,KAAK,eAAe,EAAE,KAAK,KAAK,UAAU,OAAO,KAAK,OAAO,MAAM,EAAI,KAAK,OAAO,UAAY,KAAK,QAAQ,OAAO,KAAK,OAAO,MAAM,CAAC,EAChJ,KAAK,WACR,KAAK,cAAc,EACrB,KAAK,mBAAmB,CAC1B,EACA,cAAe,UAAW,CACjB,QACT,EACA,aAAc,UAAW,CAChB,QACT,EACA,WAAY,UAAW,CACjB,KAAK,aACP,KAAK,iBAAiB,MAAM,EAC5B,KAAK,iBAAiB,OAAO,EACxB,KAAK,QAGH,eAAU,KAAK,8BAA8B,EAAE,KAAK,WAAY,EAAK,EAAE,YAAY,UAAU,EAF7F,eAAU,KAAK,8BAA8B,EAAE,KAAK,WAAY,EAAI,EAAE,SAAS,UAAU,GAK9F,KAAK,SACF,eAAU,KAAK,eAAe,EAAE,KAAK,KAAK,UAAU,OAAO,KAAK,OAAO,MAAM,EAAI,KAAK,OAAO,UAAY,KAAK,QAAQ,OAAO,KAAK,OAAO,MAAM,CAAC,EACvJ,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,CACxB,EACA,mBAAoB,UAAW,CAC7B,GAAI,KAAK,QAAS,CACZ,IAAC,KAAK,kBAAoB,KAAK,aAAa,OAAS,KAAK,cAAc,QAAU,KAAK,UAAU,OAAO,SAAS,GAAK,KAAK,aAAa,MAAM,OAAO,SAAS,GAAK,KAAK,UAAU,OAAO,SAAS,GAAK,KAAK,cAAc,MAAM,OAAO,SAAS,KAAO,KAAK,QAAQ,OAAO,SAAS,GAAK,KAAK,aAAa,MAAM,OAAO,SAAS,GAAK,KAAK,QAAQ,OAAO,SAAS,GAAK,KAAK,cAAc,MAAM,OAAO,SAAS,GACnZ,OAEF,KAAK,aAAa,MAAQ,KAAK,UAAU,MAAM,EAAE,KAAK,CAAC,EACnD,CAAC,KAAK,kBAAoB,KAAK,QAAQ,SAAW,KAAK,UAAU,MAAM,GAAK,KAAK,QAAQ,QAAU,KAAK,UAAU,QACpH,KAAK,cAAc,MAAQ,KAAK,QAAQ,MAAM,EAAE,KAAK,CAAC,EAEjD,mBAAc,MAAQ,KAAK,UAAU,QAAQ,KAAK,CAAC,EAAE,IAAI,EAAG,OAAO,CAC1E,MAEI,KAAK,aAAa,MAAM,OAAO,SAAS,GAAK,KAAK,UAAU,OAAO,SAAS,GAAK,KAAK,cAAc,MAAM,OAAO,SAAS,GAAK,KAAK,UAAU,OAAO,SAAS,IAChK,KAAK,aAAa,MAAQ,KAAK,UAAU,MAAM,EAAE,KAAK,CAAC,EAClD,mBAAc,MAAQ,KAAK,UAAU,QAAQ,KAAK,CAAC,EAAE,IAAI,EAAG,OAAO,GAGxE,KAAK,SAAW,KAAK,iBAAmB,CAAC,KAAK,kBAAoB,KAAK,cAAc,MAAQ,KAAK,UACpG,KAAK,cAAc,MAAQ,KAAK,QAAQ,MAAM,EAAE,KAAK,CAAC,EACjD,kBAAa,MAAQ,KAAK,QAAQ,QAAQ,KAAK,CAAC,EAAE,SAAS,EAAG,OAAO,EAE9E,EACA,gBAAiB,UAAW,CAC1B,GAAI,KAAK,WAAY,CACnB,IAAItQ,EAAMuQ,EAAQ/0J,EAClB,GAAI,KAAK,SAOH,GANGwkJ,EAAA,SAAS,KAAK,UAAU,KAAK,mBAAmB,EAAE,MAAO,EAAE,EACzDuQ,EAAA,SAAS,KAAK,UAAU,KAAK,qBAAqB,EAAE,MAAO,EAAE,EAClE,MAAMA,CAAM,IACLA,EAAA,SAAS,KAAK,UAAU,KAAK,iCAAiC,EAAE,MAAO,EAAE,GAE3E/0J,EAAA,KAAK,kBAAoB,SAAS,KAAK,UAAU,KAAK,qBAAqB,EAAE,MAAO,EAAE,EAAI,EAC/F,CAAC,KAAK,iBAAkB,CAC1B,IAAIg1J,EAAO,KAAK,UAAU,KAAK,mBAAmB,EAAE,MAChDA,IAAS,MAAQxQ,EAAO,KAClBA,GAAA,IACNwQ,IAAS,MAAQxQ,IAAS,KACrBA,EAAA,EACX,UAEOA,EAAA,SAAS,KAAK,UAAU,KAAK,oBAAoB,EAAE,MAAO,EAAE,EAC1DuQ,EAAA,SAAS,KAAK,UAAU,KAAK,sBAAsB,EAAE,MAAO,EAAE,EACnE,MAAMA,CAAM,IACLA,EAAA,SAAS,KAAK,UAAU,KAAK,kCAAkC,EAAE,MAAO,EAAE,GAE5E/0J,EAAA,KAAK,kBAAoB,SAAS,KAAK,UAAU,KAAK,sBAAsB,EAAE,MAAO,EAAE,EAAI,EAChG,CAAC,KAAK,iBAAkB,CAC1B,IAAIg1J,EAAO,KAAK,UAAU,KAAK,oBAAoB,EAAE,MACjDA,IAAS,MAAQxQ,EAAO,KAClBA,GAAA,IACNwQ,IAAS,MAAQxQ,IAAS,KACrBA,EAAA,EACX,CAEG,kBAAa,MAAM,KAAKA,CAAI,EAAE,OAAOuQ,CAAM,EAAE,OAAO/0J,CAAM,EAC1D,mBAAc,MAAM,KAAKwkJ,CAAI,EAAE,OAAOuQ,CAAM,EAAE,OAAO/0J,CAAM,CAClE,CACA,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,OAAO,EAC3B,KAAK,UAAU,KAAK,YAAY,EAAE,YAAY,QAAQ,EAClD,KAAK,SAAW,MAEpB,KAAK,qBAAqB,CAC5B,EACA,eAAgB,SAASi1J,EAAM,CAC7B,IAAI5hB,EAAW4hB,GAAQ,OAAS,KAAK,aAAe,KAAK,cACrDrb,EAAQvG,EAAS,MAAM,MAAM,EAC7B7zF,EAAO6zF,EAAS,MAAM,KAAK,EAC3BmR,EAAOnR,EAAS,MAAM,KAAK,EAC3B0hB,EAAS1hB,EAAS,MAAM,OAAO,EAC/BrzI,EAASqzI,EAAS,MAAM,OAAO,EAC/B8D,EAAcsd,EAAO,CAACj1G,EAAMo6F,CAAK,CAAC,EAAE,cACpCsb,EAAWT,EAAO,CAACj1G,EAAMo6F,EAAO,CAAC,CAAC,EAClCub,EAAUV,EAAO,CAACj1G,EAAMo6F,EAAOzC,CAAW,CAAC,EAC3Cie,EAAYX,EAAOS,CAAQ,EAAE,SAAS,EAAG,OAAO,EAAE,QAClDG,EAAWZ,EAAOS,CAAQ,EAAE,SAAS,EAAG,OAAO,EAAE,OACjDI,EAAkBb,EAAO,CAACY,EAAUD,CAAS,CAAC,EAAE,cAChDG,EAAYL,EAAS,MACrB7hB,EAAW,GACfA,EAAS,SAAW6hB,EACpB7hB,EAAS,QAAU8hB,EACnB,QAASj3J,EAAI,EAAGA,EAAI,EAAGA,IACZm1I,EAAAn1I,CAAC,EAAI,GAEhB,IAAIs3J,EAAWF,EAAkBC,EAAY,KAAK,OAAO,SAAW,EAChEC,EAAWF,IACDE,GAAA,GACVD,GAAa,KAAK,OAAO,WAC3BC,EAAWF,EAAkB,GAG/B,QAFIG,EAAUhB,EAAO,CAACY,EAAUD,EAAWI,EAAU,GAAIT,EAAQ/0J,CAAM,CAAC,EACpE01J,EAAKC,EACAz3J,EAAI,EAAGw3J,EAAM,EAAGC,EAAM,EAAGz3J,EAAI,GAAIA,IAAKw3J,IAAOD,EAAUhB,EAAOgB,CAAO,EAAE,IAAI,GAAI,MAAM,EACxFv3J,EAAI,GAAKw3J,EAAM,IAAM,IACjBA,EAAA,EACNC,KAEFtiB,EAASsiB,CAAG,EAAED,CAAG,EAAID,EAAQ,MAAM,EAAE,KAAKjR,CAAI,EAAE,OAAOuQ,CAAM,EAAE,OAAO/0J,CAAM,EAC5Ey1J,EAAQ,KAAK,EAAE,EACX,KAAK,SAAWpiB,EAASsiB,CAAG,EAAED,CAAG,EAAE,OAAO,YAAY,GAAK,KAAK,QAAQ,OAAO,YAAY,GAAKriB,EAASsiB,CAAG,EAAED,CAAG,EAAE,SAAS,KAAK,OAAO,GAAKT,GAAQ,SACvJ5hB,EAASsiB,CAAG,EAAED,CAAG,EAAI,KAAK,QAAQ,SAEhC,KAAK,SAAWriB,EAASsiB,CAAG,EAAED,CAAG,EAAE,OAAO,YAAY,GAAK,KAAK,QAAQ,OAAO,YAAY,GAAKriB,EAASsiB,CAAG,EAAED,CAAG,EAAE,QAAQ,KAAK,OAAO,GAAKT,GAAQ,UACtJ5hB,EAASsiB,CAAG,EAAED,CAAG,EAAI,KAAK,QAAQ,SAGlCT,GAAQ,OACV,KAAK,aAAa,SAAW5hB,EAE7B,KAAK,cAAc,SAAWA,EAEhC,IAAIuiB,EAAUX,GAAQ,OAAS,KAAK,QAAU,KAAK,UAC/CL,EAAU,KAAK,QACJK,GAAQ,OAAS,KAAK,UAAY,KAAK,QAC1C,KAAK,OAAO,WAAa,MACrC,IAAIn6I,GAAO,kCACHA,IAAA,UACAA,IAAA,QACJ,KAAK,iBAAmB,KAAK,sBACvBA,IAAA,cACL,CAAC86I,GAAWA,EAAQ,SAASviB,EAAS,QAAQ,KAAO,CAAC,KAAK,iBAAmB4hB,GAAQ,QACjFn6I,IAAA,gDAEAA,IAAA,YAEV,IAAI+6I,GAAW,KAAK,OAAO,WAAWxiB,EAAS,CAAC,EAAE,CAAC,EAAE,MAAO,GAAIA,EAAS,CAAC,EAAE,CAAC,EAAE,OAAO,OAAO,EAC7F,GAAI,KAAK,cAAe,CAQtB,QAPIyiB,GAAeziB,EAAS,CAAC,EAAE,CAAC,EAAE,QAC9B0iB,GAAc1iB,EAAS,CAAC,EAAE,CAAC,EAAE,OAC7B2iB,GAAUpB,GAAWA,EAAQ,QAAU,KAAK,QAC5CqB,GAAUL,GAAWA,EAAQ,QAAU,KAAK,QAC5CM,GAAYH,IAAeE,GAC3BE,EAAYJ,IAAeC,GAC3BI,EAAY,+BACPrxJ,EAAI,EAAGA,EAAI,GAAIA,KACjB,CAACmxJ,IAAaN,GAAW7wJ,GAAK6wJ,EAAQ,WAAa,CAACO,GAAavB,GAAW7vJ,GAAK6vJ,EAAQ,MAAU,GACtGwB,GAAa,kBAAoBrxJ,EAAI,KAAOA,IAAM+wJ,GAAe,uBAAyB,IAAM,IAAM,KAAK,OAAO,WAAW/wJ,CAAC,EAAI,YAElIqxJ,GAAa,kBAAoBrxJ,EAAI,KAAOA,IAAM+wJ,GAAe,uBAAyB,IAAM,wBAA0B,KAAK,OAAO,WAAW/wJ,CAAC,EAAI,YAG7IqxJ,GAAA,YAEb,QADIC,GAAW,8BACN9/H,EAAI0/H,GAAS1/H,GAAKy/H,GAASz/H,IACtB8/H,IAAA,kBAAoB9/H,EAAI,KAAOA,IAAMw/H,GAAc,uBAAyB,IAAM,IAAMx/H,EAAI,YAE9F8/H,IAAA,YACZR,GAAWO,EAAYC,EACzB,CAiBA,GAhBAv7I,IAAQ,iCAAmC+6I,GAAW,SACjD,CAACjB,GAAWA,EAAQ,QAAQvhB,EAAS,OAAO,KAAO,CAAC,KAAK,iBAAmB4hB,GAAQ,SAAW,KAAK,kBAC/Fn6I,IAAA,gDAEAA,IAAA,YAEFA,IAAA,QACAA,IAAA,QACJ,KAAK,iBAAmB,KAAK,sBACvBA,IAAA,oBAAsB,KAAK,OAAO,UAAY,SACxDwoB,EAAE,KAAK,KAAK,OAAO,WAAY,SAAStzB,GAAOsmJ,GAAY,CACzDx7I,IAAQ,OAASw7I,GAAa,QAC/B,EACOx7I,IAAA,QACAA,IAAA,WACAA,IAAA,UACJ,KAAK,SAAW,MAAQ,KAAK,QAAS,CACpC,IAAAy7I,GAAW,KAAK,UAAU,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,MAAM,KAAK,GAC/D,CAAC3B,GAAW2B,GAAS,SAAS3B,CAAO,KAC7BA,EAAA2B,GAEd,CACA,QAASZ,EAAM,EAAGA,EAAM,EAAGA,IAAO,CACxB76I,IAAA,OACJ,KAAK,gBACPA,IAAQ,oBAAsBu4H,EAASsiB,CAAG,EAAE,CAAC,EAAE,KAAS,UACjD,KAAK,qBACZ76I,IAAQ,oBAAsBu4H,EAASsiB,CAAG,EAAE,CAAC,EAAE,QAAY,WAC7D,QAASD,EAAM,EAAGA,EAAM,EAAGA,IAAO,CAChC,IAAIryI,EAAU,GACVgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,OAAuB,IAAI,KAAQ,KAAK,GAC7DryI,EAAQ,KAAK,OAAO,EAClBgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,WAAe,KACpCryI,EAAQ,KAAK,SAAS,EACpBgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,SAAWriB,EAAS,CAAC,EAAE,CAAC,EAAE,MAAM,GAC7ChwH,EAAA,KAAK,MAAO,MAAM,EACxB,KAAK,SAAWgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,SAAS,KAAK,QAAS,KAAK,GACzDryI,EAAA,KAAK,MAAO,UAAU,EAC5BuxI,GAAWvhB,EAASsiB,CAAG,EAAED,CAAG,EAAE,QAAQd,EAAS,KAAK,GAC9CvxI,EAAA,KAAK,MAAO,UAAU,EAC5B,KAAK,cAAcgwH,EAASsiB,CAAG,EAAED,CAAG,CAAC,GAC/BryI,EAAA,KAAK,MAAO,UAAU,EAC5BgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,OAAO,YAAY,GAAK,KAAK,UAAU,OAAO,YAAY,GACvEryI,EAAA,KAAK,SAAU,YAAY,EACjC,KAAK,SAAW,MAAQgwH,EAASsiB,CAAG,EAAED,CAAG,EAAE,OAAO,YAAY,GAAK,KAAK,QAAQ,OAAO,YAAY,GAC7FryI,EAAA,KAAK,SAAU,UAAU,EAC/B,KAAK,SAAW,MAAQgwH,EAASsiB,CAAG,EAAED,CAAG,EAAI,KAAK,WAAariB,EAASsiB,CAAG,EAAED,CAAG,EAAI,KAAK,SAC3FryI,EAAQ,KAAK,UAAU,EACzB,IAAImzI,EAAW,KAAK,aAAanjB,EAASsiB,CAAG,EAAED,CAAG,CAAC,EAC/Cc,IAAa,KACX,OAAOA,GAAa,SACtBnzI,EAAQ,KAAKmzI,CAAQ,EAErB,MAAM,UAAU,KAAK,MAAMnzI,EAASmzI,CAAQ,GAGhD,QADIC,GAAQ,GAAIjwJ,GAAW,GAClBtI,EAAI,EAAGA,EAAImlB,EAAQ,OAAQnlB,IACzBu4J,IAAApzI,EAAQnlB,CAAC,EAAI,IAClBmlB,EAAQnlB,CAAC,GAAK,aACLsI,GAAA,IAEVA,KACMiwJ,IAAA,aACX37I,IAAQ,cAAgB27I,GAAM,QAAQ,aAAc,EAAE,EAAI,kBAAoBd,EAAM,IAAMD,EAAM,KAAOriB,EAASsiB,CAAG,EAAED,CAAG,EAAE,KAAS,SACrI,CACQ56I,IAAA,OACV,CACQA,IAAA,WACAA,IAAA,WACR,KAAK,UAAU,KAAK,iBAAmBm6I,EAAO,kBAAkB,EAAE,KAAKn6I,EAAI,CAC7E,EACA,iBAAkB,SAASm6I,EAAM,CAC3B,KAAAA,GAAQ,SAAW,CAAC,KAAK,SAE7B,KAAIn6I,EAAM8L,EAAUgvI,EAAShB,EAAU,KAAK,QAG5C,GAFI,KAAK,UAAY,CAAC,KAAK,SAAW,KAAK,UAAU,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,SAAS,KAAK,OAAO,KAClGA,EAAU,KAAK,UAAU,MAAQ,MAAI,KAAK,OAAO,GAC/CK,GAAQ,OACCruI,EAAA,KAAK,UAAU,QAC1BgvI,EAAU,KAAK,gBACNX,GAAQ,QAAS,CACfruI,EAAA,KAAK,QAAQ,QACxBgvI,EAAU,KAAK,UACf,IAAIc,EAAe,KAAK,UAAU,KAAK,oCAAoC,EACvE,GAAAA,EAAa,KAAK,GAAK,KACzB9vI,EAAS,KAAM,MAAMA,EAAS,KAAM,GAAsB8vI,EAAa,KAAK,6BAA6B,EAAE,IAAK,EAAxE9vI,EAAS,MAA+D,EAChHA,EAAS,OAAQ,MAAMA,EAAS,OAAQ,GAAwB8vI,EAAa,KAAK,+BAA+B,EAAE,IAAK,EAA5E9vI,EAAS,QAAmE,EACxHA,EAAS,OAAQ,MAAMA,EAAS,OAAQ,GAAwB8vI,EAAa,KAAK,+BAA+B,EAAE,IAAK,EAA5E9vI,EAAS,QAAmE,EACpH,CAAC,KAAK,kBAAkB,CAC1B,IAAIouI,EAAO0B,EAAa,KAAK,6BAA6B,EAAE,IAAI,EAC5D1B,IAAS,MAAQpuI,EAAS,KAAS,MACrCA,EAAS,KAAKA,EAAS,KAAK,EAAI,EAAE,EAChCouI,IAAS,MAAQpuI,EAAS,KAAW,QACvCA,EAAS,KAAK,CAAC,CACnB,CAEEA,EAAS,SAAS,KAAK,SAAS,IACvBA,EAAA,KAAK,UAAU,SACxBguI,GAAWhuI,EAAS,QAAQguI,CAAO,IACrChuI,EAAWguI,EAAQ,QACvB,CACO95I,EAAA,8BAGP,QAFIzR,EAAQ,KAAK,iBAAmB,EAAI,EACpCiW,EAAM,KAAK,iBAAmB,GAAK,GAC9BphB,EAAImL,EAAOnL,GAAKohB,EAAKphB,IAAK,CACjC,IAAIy4J,EAAUz4J,EACT,KAAK,mBACEy4J,EAAA/vI,EAAS,KAAK,GAAK,GAAK1oB,GAAK,GAAK,GAAKA,EAAI,GAAKA,GAAK,GAAK,EAAIA,GAC1E,IAAIqkB,EAAOqE,EAAS,MAAM,EAAE,KAAK+vI,CAAO,EACpCnwJ,EAAW,GACXovJ,GAAWrzI,EAAK,OAAO,EAAE,EAAE,SAASqzI,CAAO,IAClCpvJ,EAAA,IACTouJ,GAAWryI,EAAK,OAAO,CAAC,EAAE,QAAQqyI,CAAO,IAChCpuJ,EAAA,IACTmwJ,GAAW/vI,EAAS,KAAK,GAAK,CAACpgB,EACzBsU,GAAA,kBAAoB5c,EAAI,yBAA2BA,EAAI,YACtDsI,EACDsU,GAAA,kBAAoB5c,EAAI,0CAA4CA,EAAI,YAExE4c,GAAA,kBAAoB5c,EAAI,KAAOA,EAAI,WAE/C,CACQ4c,GAAA,aACAA,GAAA,kCACR,QAAS5c,EAAI,EAAGA,EAAI,GAAIA,GAAK,KAAK,oBAAqB,CACrD,IAAIm2I,EAASn2I,EAAI,GAAK,IAAMA,EAAIA,EAC5BqkB,EAAOqE,EAAS,MAAM,EAAE,OAAO1oB,CAAC,EAChCsI,EAAW,GACXovJ,GAAWrzI,EAAK,OAAO,EAAE,EAAE,SAASqzI,CAAO,IAClCpvJ,EAAA,IACTouJ,GAAWryI,EAAK,OAAO,CAAC,EAAE,QAAQqyI,CAAO,IAChCpuJ,EAAA,IACTogB,EAAS,UAAY1oB,GAAK,CAACsI,EACrBsU,GAAA,kBAAoB5c,EAAI,yBAA2Bm2I,EAAS,YAC3D7tI,EACDsU,GAAA,kBAAoB5c,EAAI,0CAA4Cm2I,EAAS,YAE7Ev5H,GAAA,kBAAoB5c,EAAI,KAAOm2I,EAAS,WAEpD,CAEA,GADQv5H,GAAA,aACJ,KAAK,kBAAmB,CAClBA,GAAA,kCACR,QAAS5c,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAIm2I,EAASn2I,EAAI,GAAK,IAAMA,EAAIA,EAC5BqkB,EAAOqE,EAAS,MAAM,EAAE,OAAO1oB,CAAC,EAChCsI,EAAW,GACXovJ,GAAWrzI,EAAK,SAASqzI,CAAO,IACvBpvJ,EAAA,IACTouJ,GAAWryI,EAAK,QAAQqyI,CAAO,IACtBpuJ,EAAA,IACTogB,EAAS,UAAY1oB,GAAK,CAACsI,EACrBsU,GAAA,kBAAoB5c,EAAI,yBAA2Bm2I,EAAS,YAC3D7tI,EACDsU,GAAA,kBAAoB5c,EAAI,0CAA4Cm2I,EAAS,YAE7Ev5H,GAAA,kBAAoB5c,EAAI,KAAOm2I,EAAS,WAEpD,CACQv5H,GAAA,YACV,CACI,IAAC,KAAK,iBAAkB,CAClBA,GAAA,8BACR,IAAI87I,EAAU,GACVC,EAAU,GACVjB,GAAWhvI,EAAS,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,SAASgvI,CAAO,IACjEgB,EAAA,yCACRhC,GAAWhuI,EAAS,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQguI,CAAO,IAC/DiC,EAAA,yCACRjwI,EAAS,KAAK,GAAK,GACb9L,GAAA,qBAAuB87I,EAAU,qDAAuDC,EAAU,eAElG/7I,GAAA,yCAA2C87I,EAAU,iCAAmCC,EAAU,eAEpG/7I,GAAA,WACV,CACA,KAAK,UAAU,KAAK,iBAAmBm6I,EAAO,iBAAiB,EAAE,KAAKn6I,CAAI,EAC5E,EACA,iBAAkB,UAAW,CACvB,KAAK,kBAAoB,KAAK,UAAY,KAAK,UAAU,SAAS,KAAK,OAAO,GAAK,KAAK,UAAU,OAAO,KAAK,OAAO,GACvH,KAAK,UAAU,KAAK,iBAAiB,EAAE,KAAK,WAAY,EAAK,EAE7D,KAAK,UAAU,KAAK,iBAAiB,EAAE,KAAK,WAAY,EAAI,CAEhE,EACA,KAAM,UAAW,CACX,IAAA2Q,EAAe,CAAE,IAAK,EAAG,KAAM,CAAE,EAAGqrI,EAAcC,EAAQ,KAAK,MAC/DC,EAAkB1zH,EAAE,MAAM,EAAE,MAAM,EAQtC,OAPK,KAAK,SAAS,GAAG,MAAM,IACX7X,EAAA,CACb,IAAK,KAAK,SAAS,SAAS,IAAM,KAAK,SAAS,UAAU,EAC1D,KAAM,KAAK,SAAS,SAAS,KAAO,KAAK,SAAS,WAAW,GAE7CurI,EAAA,KAAK,SAAS,CAAC,EAAE,YAAc,KAAK,SAAS,OAAS,QAElED,EAAO,CACb,IAAK,OACYD,EAAA,KAAK,QAAQ,SAAS,IAAM,KAAK,QAAQ,cAAgBrrI,EAAa,IACjFqrI,EAAe,KAAK,UAAU,eAAiB,KAAK,SAAS,CAAC,EAAE,eACnDA,EAAA,KAAK,QAAQ,SAAS,IAAM,KAAK,UAAU,cAAgBrrI,EAAa,IAC/EsrI,EAAA,MAEV,MACF,IAAK,KACYD,EAAA,KAAK,QAAQ,SAAS,IAAM,KAAK,UAAU,cAAgBrrI,EAAa,IACvF,MACF,QACiBqrI,EAAA,KAAK,QAAQ,SAAS,IAAM,KAAK,QAAQ,cAAgBrrI,EAAa,IACrF,KACJ,CACA,KAAK,UAAU,IAAI,CACjB,IAAK,EACL,KAAM,EACN,MAAO,OACR,EACG,IAAAwrI,EAAiB,KAAK,UAAU,WAAW,EAE3C,GADJ,KAAK,UAAU,YAAY,UAAWF,GAAS,IAAI,EAC/C,KAAK,OAAS,OAAQ,CACpB,IAAAG,EAAiBF,EAAkB,KAAK,QAAQ,SAAS,KAAO,KAAK,QAAQ,aAC7EC,EAAiBC,EAAiB5zH,EAAE,MAAM,EAAE,QAC9C,KAAK,UAAU,IAAI,CACjB,IAAKwzH,EACL,MAAO,OACP,KAAM,EACP,EAED,KAAK,UAAU,IAAI,CACjB,IAAKA,EACL,MAAOI,EACP,KAAM,OACP,CACH,SACS,KAAK,OAAS,SAAU,CACjC,IAAIC,EAAgB,KAAK,QAAQ,OAAS,OAAO1rI,EAAa,KAAO,KAAK,QAAQ,WAAW,EAAI,EAAIwrI,EAAiB,EAClHE,EAAgB,EAClB,KAAK,UAAU,IAAI,CACjB,IAAKL,EACL,MAAO,OACP,KAAM,EACP,EACQK,EAAgBF,EAAiB3zH,EAAE,MAAM,EAAE,QACpD,KAAK,UAAU,IAAI,CACjB,IAAKwzH,EACL,KAAM,OACN,MAAO,EACR,EAED,KAAK,UAAU,IAAI,CACjB,IAAKA,EACL,KAAMK,EACN,MAAO,OACR,CACH,KACK,CACL,IAAIA,EAAgB,KAAK,QAAQ,OAAO,EAAE,KAAO1rI,EAAa,KAC1D0rI,EAAgBF,EAAiB3zH,EAAE,MAAM,EAAE,QAC7C,KAAK,UAAU,IAAI,CACjB,IAAKwzH,EACL,KAAM,OACN,MAAO,EACR,EAED,KAAK,UAAU,IAAI,CACjB,IAAKA,EACL,KAAMK,EACN,MAAO,OACR,CAEL,CACF,EACA,KAAM,SAASplJ,EAAG,CACZ,KAAK,YAET,KAAK,mBAAqBuxB,EAAE,MAAM,SAAS4nB,EAAI,CAC7C,KAAK,aAAaA,CAAE,GACnB,IAAI,EACL5nB,EAAA,QAAQ,EAAE,GAAG,4BAA6B,KAAK,kBAAkB,EAAE,GAAG,2BAA4B,KAAK,kBAAkB,EAAE,GAAG,wBAAyB,yBAA0B,KAAK,kBAAkB,EAAE,GAAG,0BAA2B,KAAK,kBAAkB,EACjQA,EAAE,MAAM,EAAE,GAAG,yBAA0BA,EAAE,MAAM,SAAS4nB,EAAI,CAC1D,KAAK,KAAKA,CAAE,GACX,IAAI,CAAC,EACH,kBAAe,KAAK,UAAU,MAAM,EACpC,gBAAa,KAAK,QAAQ,MAAM,EAChC,uBAAoB,KAAK,QAAQ,MAAM,EAC5C,KAAK,WAAW,EAChB,KAAK,UAAU,OACf,KAAK,KAAK,EACL,aAAQ,QAAQ,uBAAwB,IAAI,EACjD,KAAK,UAAY,GACnB,EACA,KAAM,SAASn5C,EAAG,CACX,KAAK,YAEL,KAAK,UACH,eAAY,KAAK,aAAa,MAAM,EACpC,aAAU,KAAK,WAAW,MAAM,IAEnC,CAAC,KAAK,UAAU,OAAO,KAAK,YAAY,GAAK,CAAC,KAAK,QAAQ,OAAO,KAAK,UAAU,IAC9E,cAAS,KAAK,UAAU,MAAM,EAAG,KAAK,QAAQ,QAAS,KAAK,WAAW,EAC9E,KAAK,cAAc,EACjBuxB,EAAA,QAAQ,EAAE,IAAI,kBAAkB,EAChCA,EAAA,MAAM,EAAE,IAAI,kBAAkB,EAChC,KAAK,UAAU,OACV,aAAQ,QAAQ,uBAAwB,IAAI,EACjD,KAAK,UAAY,GACnB,EACA,OAAQ,SAASvxB,EAAG,CACd,KAAK,UACP,KAAK,KAAK,EAEV,KAAK,KAAK,CAEd,EACA,aAAc,SAASA,EAAG,CACpB,IAAAnW,EAAS0nC,EAAEvxB,EAAE,MAAM,EAGrBA,EAAE,MAAQ,WAAanW,EAAO,QAAQ,KAAK,OAAO,EAAE,QAAUA,EAAO,QAAQ,KAAK,SAAS,EAAE,QAAUA,EAAO,QAAQ,iBAAiB,EAAE,SAG3I,KAAK,KAAK,EACL,aAAQ,QAAQ,+BAAgC,IAAI,EAC3D,EACA,cAAe,UAAW,CACnB,eAAU,SAAS,eAAe,EACvC,KAAK,KAAK,EACL,aAAQ,QAAQ,+BAAgC,IAAI,CAC3D,EACA,cAAe,UAAW,CACnB,eAAU,YAAY,eAAe,EACrC,aAAQ,QAAQ,+BAAgC,IAAI,CAC3D,EACA,WAAY,SAASmW,EAAG,CACtB,IAAIygC,EAAQzgC,EAAE,OAAO,aAAa,gBAAgB,EAE9C,GADJ,KAAK,YAAcygC,EACfA,GAAS,KAAK,OAAO,iBACvB,KAAK,cAAc,MACd,CACD,IAAA4kH,EAAQ,KAAK,OAAO5kH,CAAK,EACxB,eAAY4kH,EAAM,CAAC,EACnB,aAAUA,EAAM,CAAC,EACjB,KAAK,aACH,eAAU,QAAQ,KAAK,EACvB,aAAQ,MAAM,KAAK,GAErB,KAAK,qBACR,KAAK,cAAc,EACrB,KAAK,WAAW,CAClB,CACF,EACA,UAAW,SAASrlJ,EAAG,CACrB,IAAIslJ,EAAM/zH,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EACzCslJ,EAAI,SAAS,MAAM,GACrB,KAAK,aAAa,MAAM,SAAS,EAAG,OAAO,EACvC,KAAK,iBACP,KAAK,cAAc,MAAM,SAAS,EAAG,OAAO,GAE9C,KAAK,cAAc,MAAM,SAAS,EAAG,OAAO,EAE9C,KAAK,gBAAgB,CACvB,EACA,UAAW,SAAStlJ,EAAG,CACrB,IAAIslJ,EAAM/zH,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EACzCslJ,EAAI,SAAS,MAAM,EACrB,KAAK,aAAa,MAAM,IAAI,EAAG,OAAO,GAEtC,KAAK,cAAc,MAAM,IAAI,EAAG,OAAO,EACnC,KAAK,iBACP,KAAK,aAAa,MAAM,IAAI,EAAG,OAAO,GAE1C,KAAK,gBAAgB,CACvB,EACA,UAAW,SAAStlJ,EAAG,CACrB,GAAKuxB,EAAEvxB,EAAE,MAAM,EAAE,SAAS,WAAW,EAErC,KAAIuiC,EAAQhR,EAAEvxB,EAAE,MAAM,EAAE,KAAK,YAAY,EACrC4jJ,EAAMrhH,EAAM,OAAO,EAAG,CAAC,EACvBohH,EAAMphH,EAAM,OAAO,EAAG,CAAC,EACvB+iH,EAAM/zH,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EACzCitC,EAAOq4G,EAAI,SAAS,MAAM,EAAI,KAAK,aAAa,SAAS1B,CAAG,EAAED,CAAG,EAAI,KAAK,cAAc,SAASC,CAAG,EAAED,CAAG,EACzG4B,EAAe,KAAK,aACpBC,EAAgB,KAAK,cACrB1C,EAAY,KAAK,UAChB,KAAK,SACR,KAAK,UAAU,KAAK,wBAAwB,EAAE,KAAK,SAAS7kJ,EAAOnK,EAAI,CACrE,GAAI,CAAAy9B,EAAEz9B,CAAE,EAAE,SAAS,MAAM,EAEzB,KAAI2xJ,EAASl0H,EAAEz9B,CAAE,EAAE,KAAK,YAAY,EAChC4xJ,EAAOD,EAAO,OAAO,EAAG,CAAC,EACzBE,EAAOF,EAAO,OAAO,EAAG,CAAC,EACzBG,EAAOr0H,EAAEz9B,CAAE,EAAE,QAAQ,eAAe,EACpC2oD,EAAKmpG,EAAK,SAAS,MAAM,EAAIL,EAAa,SAASG,CAAI,EAAEC,CAAI,EAAIH,EAAc,SAASE,CAAI,EAAEC,CAAI,EAClGlpG,EAAG,QAAQqmG,CAAS,GAAKrmG,EAAG,SAASxP,CAAI,GAAKwP,EAAG,OAAOxP,EAAM,KAAK,EACnE1b,EAAAz9B,CAAE,EAAE,SAAS,UAAU,EAEvBy9B,EAAAz9B,CAAE,EAAE,YAAY,UAAU,EAC9B,CACD,EAEL,EACA,UAAW,SAASkM,EAAG,CACrB,GAAKuxB,EAAEvxB,EAAE,MAAM,EAAE,SAAS,WAAW,EAErC,KAAIuiC,EAAQhR,EAAEvxB,EAAE,MAAM,EAAE,KAAK,YAAY,EACrC4jJ,EAAMrhH,EAAM,OAAO,EAAG,CAAC,EACvBohH,EAAMphH,EAAM,OAAO,EAAG,CAAC,EACvB+iH,EAAM/zH,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EACzCitC,EAAOq4G,EAAI,SAAS,MAAM,EAAI,KAAK,aAAa,SAAS1B,CAAG,EAAED,CAAG,EAAI,KAAK,cAAc,SAASC,CAAG,EAAED,CAAG,EAC7G,GAAI,KAAK,SAAW12G,EAAK,SAAS,KAAK,UAAW,KAAK,EAAG,CACxD,GAAI,KAAK,WAAY,CACf,IAAAwlG,EAAO,SAAS,KAAK,UAAU,KAAK,mBAAmB,EAAE,MAAO,EAAE,EAClE,IAAC,KAAK,iBAAkB,CAC1B,IAAIwQ,EAAO,KAAK,UAAU,KAAK,mBAAmB,EAAE,MAChDA,IAAS,MAAQxQ,EAAO,KAClBA,GAAA,IACNwQ,IAAS,MAAQxQ,IAAS,KACrBA,EAAA,EACX,CACI,IAAAuQ,EAAS,SAAS,KAAK,UAAU,KAAK,qBAAqB,EAAE,MAAO,EAAE,EACtE,MAAMA,CAAM,IACLA,EAAA,SAAS,KAAK,UAAU,KAAK,iCAAiC,EAAE,MAAO,EAAE,GAEpF,IAAI/0J,EAAS,KAAK,kBAAoB,SAAS,KAAK,UAAU,KAAK,qBAAqB,EAAE,IAAO,IAAE,EAAI,EAChGg/C,IAAK,MAAM,EAAE,KAAKwlG,CAAI,EAAE,OAAOuQ,CAAM,EAAE,OAAO/0J,CAAM,CAC7D,CACA,KAAK,QAAU,KACV,kBAAag/C,EAAK,MAAO,WACrB,CAAC,KAAK,SAAWA,EAAK,SAAS,KAAK,SAAS,EACtD,KAAK,WAAW,KAAK,UAAU,MAAO,OACjC,CACL,GAAI,KAAK,WAAY,CACf,IAAAwlG,EAAO,SAAS,KAAK,UAAU,KAAK,oBAAoB,EAAE,MAAO,EAAE,EACnE,IAAC,KAAK,iBAAkB,CAC1B,IAAIwQ,EAAO,KAAK,UAAU,KAAK,oBAAoB,EAAE,MACjDA,IAAS,MAAQxQ,EAAO,KAClBA,GAAA,IACNwQ,IAAS,MAAQxQ,IAAS,KACrBA,EAAA,EACX,CACI,IAAAuQ,EAAS,SAAS,KAAK,UAAU,KAAK,sBAAsB,EAAE,MAAO,EAAE,EACvE,MAAMA,CAAM,IACLA,EAAA,SAAS,KAAK,UAAU,KAAK,kCAAkC,EAAE,MAAO,EAAE,GAErF,IAAI/0J,EAAS,KAAK,kBAAoB,SAAS,KAAK,UAAU,KAAK,sBAAsB,EAAE,IAAO,IAAE,EAAI,EACjGg/C,IAAK,MAAM,EAAE,KAAKwlG,CAAI,EAAE,OAAOuQ,CAAM,EAAE,OAAO/0J,CAAM,CAC7D,CACK,gBAAWg/C,EAAK,MAAO,GACxB,KAAK,YACP,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAEpB,CACI,KAAK,mBACF,gBAAW,KAAK,SAAS,EAC1B,CAAC,KAAK,YAAc,KAAK,WAC3B,KAAK,WAAW,GAEpB,KAAK,WAAW,EAChBjtC,EAAE,gBAAgB,EACpB,EACA,qBAAsB,UAAW,CAC/B,IAAI6lJ,EAAc,GACd15J,EAAI,EACC,QAAAwmD,KAAS,KAAK,OAAQ,CAC7B,GAAI,KAAK,WAAY,CACf,IAAArF,EAAS,KAAK,kBAAoB,sBAAwB,mBAC1D,QAAK,UAAU,OAAOA,CAAM,GAAK,KAAK,OAAOqF,CAAK,EAAE,CAAC,EAAE,OAAOrF,CAAM,GAAK,KAAK,QAAQ,OAAOA,CAAM,GAAK,KAAK,OAAOqF,CAAK,EAAE,CAAC,EAAE,OAAOrF,CAAM,EAAG,CAClIu4G,EAAA,GACd,KAAK,YAAc,KAAK,UAAU,KAAK,iBAAmB15J,EAAI,GAAG,EAAE,SAAS,QAAQ,EAAE,KAAK,gBAAgB,EAC3G,KACF,UAEI,KAAK,UAAU,OAAO,YAAY,GAAK,KAAK,OAAOwmD,CAAK,EAAE,CAAC,EAAE,OAAO,YAAY,GAAK,KAAK,QAAQ,OAAO,YAAY,GAAK,KAAK,OAAOA,CAAK,EAAE,CAAC,EAAE,OAAO,YAAY,EAAG,CAC1JkzG,EAAA,GACd,KAAK,YAAc,KAAK,UAAU,KAAK,iBAAmB15J,EAAI,GAAG,EAAE,SAAS,QAAQ,EAAE,KAAK,gBAAgB,EAC3G,KACF,CAEFA,GACF,CACI05J,IACE,KAAK,qBACF,iBAAc,KAAK,UAAU,KAAK,iBAAiB,EAAE,SAAS,QAAQ,EAAE,KAAK,gBAAgB,EAElG,KAAK,YAAc,KAErB,KAAK,cAAc,EAEvB,EACA,WAAY,SAAS7lJ,EAAG,CACtB,KAAK,KAAK,EACL,aAAQ,QAAQ,wBAAyB,IAAI,CACpD,EACA,YAAa,SAASA,EAAG,CACvB,KAAK,UAAY,KAAK,aACtB,KAAK,QAAU,KAAK,WACpB,KAAK,KAAK,EACL,aAAQ,QAAQ,yBAA0B,IAAI,CACrD,EACA,mBAAoB,SAASA,EAAG,CAC1B,IAAA8lJ,EAASv0H,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,SAAS,MAAM,EAAG+lJ,EAAcD,EAAS,OAAS,QAASR,EAAM,KAAK,UAAU,KAAK,iBAAmBS,CAAW,EACjKle,EAAQ,SAASyd,EAAI,KAAK,cAAc,EAAE,MAAO,EAAE,EACnD73G,EAAO63G,EAAI,KAAK,aAAa,EAAE,IAAI,EAClCQ,IACCr4G,EAAO,KAAK,UAAU,QAAUA,GAAQ,KAAK,UAAU,KAAU,GAAAo6F,EAAQ,KAAK,UAAU,WAClFA,EAAA,KAAK,UAAU,QAChBp6F,EAAA,KAAK,UAAU,QAGtB,KAAK,UACHA,EAAO,KAAK,QAAQ,QAAUA,GAAQ,KAAK,QAAQ,KAAU,GAAAo6F,EAAQ,KAAK,QAAQ,WAC5EA,EAAA,KAAK,QAAQ,QACdp6F,EAAA,KAAK,QAAQ,QAGpB,KAAK,UACHA,EAAO,KAAK,QAAQ,QAAUA,GAAQ,KAAK,QAAQ,KAAU,GAAAo6F,EAAQ,KAAK,QAAQ,WAC5EA,EAAA,KAAK,QAAQ,QACdp6F,EAAA,KAAK,QAAQ,QAGpBq4G,GACF,KAAK,aAAa,MAAM,MAAMje,CAAK,EAAE,KAAKp6F,CAAI,EAC1C,KAAK,kBACF,mBAAc,MAAQ,KAAK,aAAa,MAAM,QAAQ,IAAI,EAAG,OAAO,KAE3E,KAAK,cAAc,MAAM,MAAMo6F,CAAK,EAAE,KAAKp6F,CAAI,EAC3C,KAAK,kBACF,kBAAa,MAAQ,KAAK,cAAc,MAAM,QAAQ,SAAS,EAAG,OAAO,IAElF,KAAK,gBAAgB,CACvB,EACA,YAAa,SAASztC,EAAG,CACnB,IAAAslJ,EAAM/zH,EAAEvxB,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAG8lJ,EAASR,EAAI,SAAS,MAAM,EACxE7S,EAAO,SAAS6S,EAAI,KAAK,aAAa,EAAE,MAAO,EAAE,EACjDtC,EAAS,SAASsC,EAAI,KAAK,eAAe,EAAE,MAAO,EAAE,EACrD,MAAMtC,CAAM,IACdA,EAAS,SAASsC,EAAI,KAAK,2BAA2B,EAAE,MAAO,EAAE,GAE/D,IAAAr3J,EAAS,KAAK,kBAAoB,SAASq3J,EAAI,KAAK,eAAe,EAAE,MAAO,EAAE,EAAI,EAClF,IAAC,KAAK,iBAAkB,CAC1B,IAAIrC,EAAOqC,EAAI,KAAK,aAAa,EAAE,IAAI,EACnCrC,IAAS,MAAQxQ,EAAO,KAClBA,GAAA,IACNwQ,IAAS,MAAQxQ,IAAS,KACrBA,EAAA,EACX,CACA,GAAIqT,EAAQ,CACN,IAAAxuJ,EAAQ,KAAK,UAAU,MAAM,EACjCA,EAAM,KAAKm7I,CAAI,EACfn7I,EAAM,OAAO0rJ,CAAM,EACnB1rJ,EAAM,OAAOrJ,CAAM,EACnB,KAAK,aAAaqJ,CAAK,EACnB,KAAK,iBACF,aAAU,KAAK,UAAU,MAAM,EAC3B,KAAK,SAAW,KAAK,QAAQ,OAAO,YAAY,GAAKA,EAAM,OAAO,YAAY,GAAK,KAAK,QAAQ,SAASA,CAAK,GAClH,gBAAWA,EAAM,MAAO,EAC/B,SACS,KAAK,QAAS,CACnB,IAAAiW,EAAM,KAAK,QAAQ,MAAM,EAC7BA,EAAI,KAAKklI,CAAI,EACbllI,EAAI,OAAOy1I,CAAM,EACjBz1I,EAAI,OAAOtf,CAAM,EACjB,KAAK,WAAWsf,CAAG,CACrB,CACA,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,MAAM,EAC5B,KAAK,iBAAiB,OAAO,CAC/B,EACA,eAAgB,UAAW,CACzB,GAAK,KAAK,QAAQ,GAAG,OAAO,GAEvB,KAAK,QAAQ,IAAM,SAExB,KAAIy4I,EAAa,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,SAAS,EAAG1uJ,EAAQ,KAAMiW,EAAM,KAClFy4I,EAAW,SAAW,IACxB1uJ,EAAQorJ,EAAOsD,EAAW,CAAC,EAAG,KAAK,OAAO,MAAM,EAChDz4I,EAAMm1I,EAAOsD,EAAW,CAAC,EAAG,KAAK,OAAO,MAAM,IAE5C,KAAK,kBAAoB1uJ,IAAU,MAAQiW,IAAQ,QACrDjW,EAAQorJ,EAAO,KAAK,QAAQ,MAAO,KAAK,OAAO,MAAM,EAC/Cn1I,EAAAjW,GAEJ,GAACA,EAAM,QAAa,IAACiW,EAAI,QAAQ,KAErC,KAAK,aAAajW,CAAK,EACvB,KAAK,WAAWiW,CAAG,EACnB,KAAK,WAAW,GAClB,EACA,QAAS,SAASvN,EAAG,EACfA,EAAE,UAAY,GAAKA,EAAE,UAAY,KACnC,KAAK,KAAK,EAERA,EAAE,UAAY,KAChBA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB,KAAK,KAAK,EAEd,EACA,cAAe,UAAW,CACxB,GAAI,KAAK,QAAQ,GAAG,OAAO,GAAK,KAAK,gBAAiB,CACpD,IAAI49E,EAAW,KAAK,UAAU,OAAO,KAAK,OAAO,MAAM,EAClD,KAAK,mBACIA,GAAA,KAAK,OAAO,UAAY,KAAK,QAAQ,OAAO,KAAK,OAAO,MAAM,GAExEA,IAAa,KAAK,QAAQ,OAC5B,KAAK,QAAQ,IAAIA,CAAQ,EAAE,QAAQ,QAAQ,CAE/C,CACF,EACA,OAAQ,UAAW,CACjB,KAAK,UAAU,SACV,aAAQ,IAAI,kBAAkB,EACnC,KAAK,QAAQ,YACf,GAEFrsD,EAAE,GAAG,gBAAkB,SAASpkC,EAASL,EAAU,CAC7C,IAAAm5J,EAAmB10H,EAAE,OAAO,GAAM,GAAIA,EAAE,GAAG,gBAAgB,eAAgBpkC,CAAO,EACtF,YAAK,KAAK,UAAW,CACf,IAAA2G,EAAKy9B,EAAE,IAAI,EACXz9B,EAAG,KAAK,iBAAiB,GACxBA,EAAA,KAAK,iBAAiB,EAAE,OAAO,EACpCA,EAAG,KAAK,kBAAmB,IAAI6uJ,EAAgB7uJ,EAAImyJ,EAAkBn5J,CAAQ,CAAC,EAC/E,EACM,MAEF61J,CAAA,CACR,CACH,CACF,CAAC,EACcL,MACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCCt8Je,MAAK4D,WAAShuF,EAAW,CAItC,SAAU,CACR,KAAK,mBAAoB,CAC1B,CAED,YAAa,CACX,KAAK,uBAAwB,CAC9B,CAED,UAAUpyD,EAAO,CAEfA,EAAM,eAAgB,EAEtByrB,GAAE,KAAK,WAAW,EAAE,IAAI,EAAE,CAC3B,CAED,iBAAiBzrB,EAAOqgJ,EAAQ,CAC9B,MAAM74G,EAAS,KAAK,iBAAmB,oBAAsB,aAC7D/b,GAAE,KAAK,WAAW,EAAE,IAAI40H,EAAO,UAAU,OAAO74G,CAAM,CAAC,CACxD,CAED,oBAAoBxnC,EAAO,CAEzBA,EAAM,eAAgB,EAEtByrB,GAAE,KAAK,4BAA4B,EAAE,YAAY,QAAQ,EACzDA,GAAE,KAAK,qBAAqB,EAAE,YAAY,QAAQ,CACnD,CAED,0BAA0BzrB,EAAO,CAE/BA,EAAM,eAAgB,EAEtByrB,GAAE,KAAK,qBAAqB,EAAE,YAAY,QAAQ,EAE9C,KAAK,gCACPA,GAAE,KAAK,2BAA2B,EAAE,YAAY,QAAQ,CAE3D,CAED,gBAAgBvxB,EAAG,CACjBA,GAAKA,EAAE,eAAgB,EAEvBuxB,GAAE,KAAK,4BAA4B,EAAE,YAAY,QAAQ,EACzDA,GAAE,KAAK,qBAAqB,EAAE,SAAS,QAAQ,EAE3C,KAAK,gCACPA,GAAE,KAAK,2BAA2B,EAAE,SAAS,QAAQ,CAExD,CAED,YAAYzrB,EAAO,CAEjBA,EAAM,eAAgB,EAEtB,MAAMsgJ,EAAoB,KAAK,6BAA6B,cAAc,GAAG,EACvE,CAAC,MAAAh9J,CAAK,EAAI0c,EAAM,OAAO,QAE7ByrB,GAAE,KAAK,mBAAmB,EAAE,IAAInoC,CAAK,EACrCmoC,GAAE60H,CAAiB,EAAE,KAAKh9J,CAAK,EAE/BmoC,GAAE,mBAAmB,EAAE,YAAY,QAAQ,EAAE,SAAS,oBAAoB,EAC1EA,GAAEzrB,EAAM,MAAM,EAAE,YAAY,oBAAoB,EAAE,SAAS,QAAQ,EAEnE,KAAK,gBAAiB,CACvB,CAED,oBAAqB,CAuBnB,GAtBAyrB,GAAE,KAAK,WAAW,EAAE,gBAAgB,CAClC,iBAAkB,GAClB,WAAY,KAAK,iBACjB,oBAAqB,EACrB,gBAAiB,GACjB,UAAW,GACX,MAAO,OACP,cAAe,GACf,OAAQ,CACN,YAAa,QACb,WAAY,QACZ,OAAQ,KAAK,iBAAmB,oBAAsB,YACvD,CACP,CAAK,EAEDA,GAAE,KAAK,WAAW,EAAE,GAAG,wBAAyB,KAAK,iBAAiB,KAAK,IAAI,CAAC,EAChFA,GAAE,KAAK,WAAW,EAAE,GAAG,yBAA0B,KAAK,UAAU,KAAK,IAAI,CAAC,EAE1E,KAAK,aAAe,KAAK,YACzB,KAAK,OAASA,GAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAGrD,KAAK,kBAAoB,KAAK,+BAAgC,CAChE,KAAK,eAAiB,KAAK,4BAA4B,cAAc,gBAAgB,EAErFA,GAAE,KAAK,cAAc,EAAE,QAAQ,CAC7B,MAAO,OACf,CAAO,EAED,MAAM90B,EAAO,KAEb80B,GAAE,KAAK,cAAc,EAAE,GAAG,iBAAkB,SAASzrB,EAAO,CAC1D,MAAMsgJ,EAAoB3pJ,EAAK,6BAA6B,cAAc,GAAG,EACvE,CAAC,MAAArT,CAAK,EAAI0c,EAAM,OAEtByrB,GAAE90B,EAAK,mBAAmB,EAAE,IAAIrT,CAAK,EACrCmoC,GAAE60H,CAAiB,EAAE,KAAKh9J,CAAK,EAE/B,MAAMi9J,EAA+B90H,GAAE,mCAAmC,EAEtE90B,EAAK,sBAAsB,SAASrT,CAAK,GAC3CmoC,GAAE,mBAAmB,EAAE,YAAY,QAAQ,EAAE,SAAS,oBAAoB,EAC1E80H,EAA6B,SAAS,QAAQ,EAAE,KAAK,SAAU,EAAI,EACnE90H,GAAE,iBAAiBnoC,CAAK,GAAG,EAAE,YAAY,oBAAoB,EAAE,SAAS,QAAQ,IAGhFmoC,GAAE,mBAAmB,EAAE,YAAY,QAAQ,EAAE,SAAS,oBAAoB,EAE1E80H,EAA6B,KAAKj9J,CAAK,EACvCi9J,EAA6B,KAAK,aAAcj9J,CAAK,EAAE,WAAW,QAAQ,EAC1Ei9J,EAA6B,YAAY,CAAC,SAAU,oBAAoB,CAAC,EAAE,SAAS,QAAQ,GAG9F5pJ,EAAK,gBAAiB,CAC9B,CAAO,CACF,CACF,CAED,wBAAyB,CACnB,KAAK,SAAW,SAEpB80B,GAAE,KAAK,YAAY,EAAE,IAAI,uBAAuB,EAChDA,GAAE,KAAK,YAAY,EAAE,IAAI,wBAAwB,EAGjD,KAAK,OAAO,OAAQ,EAEhB,KAAK,kBACPA,GAAE,KAAK,cAAc,EAAE,QAAQ,SAAS,EAE3C,CACH,CA7IEhnC,GADkB27J,GACX,UAAU,CAAE,QAAS,cAAe,yBAA0B,kBAAmB,wBAAyB,eAAiB,GAClI37J,GAFkB27J,GAEX,SAAS,CAAE,YAAa,QAAS,iBAAkB,KAAO,mHCNpD,MAAKI,WAASpuF,EAAW,CAUtC,qBAAsB,CACpB,KAAK,iBAAiB,UAAU,OAAO,WAAW,EAClD,KAAK,iBAAiB,UAAU,IAAI,UAAU,EAC9C,KAAK,qBAAqB,UAAY,0BAElC,KAAK,gCACP,KAAK,4BAA4B,OAAQ,CAE5C,CAED,QAAQpyD,EAAO,CACbA,EAAM,eAAgB,EACtB,KAAK,gBAAgB,MAAO,CAC7B,CAED,UAAUA,EAAO,CACfA,EAAM,eAAgB,EAEtB,KAAK,4BAA4B,UAAU,IAAI,QAAQ,EACvD,KAAK,sBAAsB,UAAU,IAAI,QAAQ,EACjD,KAAK,uBAAuB,MAAQ,EACrC,CACH,CA/BEvb,GADkB+7J,GACX,UAAU,CACf,YACA,iBACA,kBACA,wBACA,aACA,kBACD,mHCRY,MAAKC,WAASruF,EAAW,CAUtC,sBAAuB,CACrB,KAAK,iBAAiB,UAAU,OAAO,WAAW,EAClD,KAAK,iBAAiB,UAAU,IAAI,UAAU,EAC9C,KAAK,sBAAsB,UAAY,uBAEnC,KAAK,iCACP,KAAK,6BAA6B,OAAQ,CAE7C,CAED,SAASpyD,EAAO,CACdA,EAAM,eAAgB,EACtB,KAAK,gBAAgB,MAAO,CAC7B,CAED,WAAWA,EAAO,CAChBA,EAAM,eAAgB,EAEtB,KAAK,6BAA6B,UAAU,IAAI,QAAQ,EACxD,KAAK,uBAAuB,UAAU,IAAI,QAAQ,EAClD,KAAK,wBAAwB,MAAQ,EACtC,CACH,CA/BEvb,GADkBg8J,GACX,UAAU,CACf,YACA,kBACA,mBACA,yBACA,aACA,mBACD,mHCRY,MAAKC,WAAStuF,EAAW,CAWtC,SAAU,CACR,KAAK,eAAiB,KAAK,kBAAoB,KAAK,eAAiB,MACtE,CAED,cAAcpyD,EAAO,CACnB,KAAK,sBAAsB,UAAY,UAAU,KAAK,cAAc,MACpE,KAAK,uBAAuB,UAAU,OAAO,QAAQ,CACtD,CAED,SAASA,EAAO,CACdA,EAAM,eAAgB,EACtB,KAAK,gBAAgB,MAAO,CAC7B,CAED,WAAWA,EAAO,CAChBA,EAAM,eAAgB,EACtB,KAAK,gBAAgB,MAAQ,GAC7B,KAAK,sBAAsB,UAAY,cAAc,KAAK,cAAc,MACxE,KAAK,uBAAuB,UAAU,IAAI,QAAQ,CACnD,CACH,CA9BEvb,GADkBi8J,GACX,UAAU,CACf,YACA,kBACA,oBACA,kBACD,GACDj8J,GAPkBi8J,GAOX,SAAS,CACd,UAAW,MACZ,mHCTY,MAAKC,WAASvuF,EAAW,CAGtC,SAAU,CACR,MAAMkmF,EAAQ,KAAK,YAEnB,GAAI,KAAK,sBAAwB,KAAK,sBAAuB,CAC3D,MAAMsI,EAAc,KAAK,kBACnBC,EAAe,KAAK,mBACZ,CAAC,KAAK,kBAAmB,KAAK,kBAAkB,EAExD,QAAQ98J,GAAU,CACtBA,EAAO,iBAAiB,QAAS,UAAW,CAC1C,MAAM+8J,EAAUxI,EAAM,aAAa,MAAM,IAAM,WAAa,OAAS,WACrEA,EAAM,aAAa,OAAQwI,CAAO,EAClCF,EAAY,UAAU,OAAO,QAAQ,EACrCC,EAAa,UAAU,OAAO,QAAQ,CAChD,CAAS,CACT,CAAO,CACF,CACF,CACH,CApBEp8J,GADkBk8J,GACX,UAAU,CAAE,QAAS,cAAe,cAAgB,mHCE7D,IAAII,IAAuBp9J,GAAW,CACpC,uDAAuDhB,EAASC,EAAQ,EACrE,SAASgC,EAAS,CACb,OAAOhC,GAAW,UAAYA,EAAO,QACvCA,EAAO,QAAUgC,IAEjB,OAAO,aAAeA,GAC1B,GAAG,SAASo8J,EAAW,CAErB,OAAO,UAAW,CAEhB,QADIC,EAAe,CAAC,CAAC,6BAA8B,KAAM,IAAI,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,IAAK,EAAG,CAAC,KAAK,CAAC,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,IAAK,EAAG,CAAC,KAAK,CAAC,EAAG,CAAC,sBAAuB,KAAM,IAAK,EAAG,CAAC,KAAK,CAAC,EAAG,CAAC,YAAa,KAAM,IAAI,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,YAAa,KAAM,KAAM,CAAC,EAAG,CAAC,uBAAwB,KAAM,IAAI,EAAG,CAAC,0BAA2B,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,IAAK,EAAG,CAAC,KAAK,CAAC,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,IAAK,EAAG,CAAC,KAAK,CAAC,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,IAAI,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,iBAAkB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,+CAAgD,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,IAAI,EAAG,CAAC,iCAAkC,KAAM,KAAK,EAAG,CAAC,yBAA0B,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,sBAAuB,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,sBAAuB,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,IAAK,EAAG,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,CAAC,EAAG,CAAC,0BAA2B,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,MAAO,EAAG,CAAC,IAAK,IAAK,GAAG,CAAC,EAAG,CAAC,iBAAkB,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,uDAAwD,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,IAAI,EAAG,CAAC,aAAc,KAAM,IAAI,EAAG,CAAC,mBAAoB,KAAM,KAAM,EAAG,CAAC,OAAO,CAAC,EAAG,CAAC,0BAA2B,KAAM,KAAM,EAAG,CAAC,OAAO,CAAC,EAAG,CAAC,WAAY,KAAM,IAAI,EAAG,CAAC,yBAA0B,KAAM,KAAK,EAAG,CAAC,iDAAkD,KAAM,KAAK,EAAG,CAAC,uCAAwC,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,OAAQ,KAAM,IAAI,EAAG,CAAC,UAAW,KAAM,MAAO,CAAC,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,mCAAoC,KAAM,KAAK,EAAG,CAAC,oBAAqB,KAAM,IAAI,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,4CAA6C,KAAM,IAAK,EAAG,CAAC,MAAO,MAAO,KAAK,CAAC,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,IAAI,EAAG,CAAC,cAAe,KAAM,KAAK,EAAG,CAAC,wCAAyC,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,oCAAqC,KAAM,KAAK,EAAG,CAAC,0BAA2B,KAAM,KAAK,EAAG,CAAC,OAAQ,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,MAAO,CAAC,EAAG,CAAC,SAAU,KAAM,IAAI,EAAG,CAAC,mCAAoC,KAAM,KAAK,EAAG,CAAC,yCAA0C,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,IAAI,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,YAAa,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,IAAI,EAAG,CAAC,+BAAgC,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,aAAc,KAAM,MAAO,CAAC,EAAG,CAAC,OAAQ,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,YAAa,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAM,EAAG,CAAC,OAAQ,OAAQ,OAAQ,MAAM,CAAC,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,+BAAgC,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,KAAK,EAAG,CAAC,yBAA0B,KAAM,IAAI,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,IAAI,EAAG,CAAC,YAAa,KAAM,IAAI,EAAG,CAAC,kBAAmB,KAAM,IAAI,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,cAAe,KAAM,KAAM,EAAG,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAM,CAAC,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,KAAM,CAAC,EAAG,CAAC,UAAW,KAAM,IAAK,EAAG,CAAC,MAAO,KAAK,CAAC,EAAG,CAAC,aAAc,KAAM,IAAI,EAAG,CAAC,SAAU,KAAM,KAAM,EAAG,CAAC,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,MAAM,CAAC,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,yBAA0B,KAAM,IAAK,EAAG,CAAC,KAAM,GAAG,CAAC,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,0BAA2B,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,sBAAuB,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,4BAA6B,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,IAAI,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,OAAQ,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,4BAA6B,KAAM,KAAK,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,MAAO,EAAG,CAAC,MAAO,KAAK,CAAC,EAAG,CAAC,kBAAmB,KAAM,IAAI,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,8BAA+B,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,yBAA0B,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,sBAAuB,KAAM,MAAO,CAAC,EAAG,CAAC,0BAA2B,KAAM,KAAK,EAAG,CAAC,2BAA4B,KAAM,IAAI,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,0BAA2B,KAAM,IAAI,EAAG,CAAC,qCAAsC,KAAM,KAAK,EAAG,CAAC,cAAe,KAAM,IAAI,EAAG,CAAC,YAAa,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,OAAQ,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,KAAK,EAAG,CAAC,+BAAgC,KAAM,KAAK,EAAG,CAAC,uCAAwC,KAAM,KAAK,EAAG,CAAC,2BAA4B,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,iBAAkB,KAAM,KAAM,CAAC,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,IAAI,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,cAAe,KAAM,IAAI,EAAG,CAAC,cAAe,KAAM,IAAI,EAAG,CAAC,kBAAmB,KAAM,IAAI,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,cAAe,KAAM,IAAK,EAAG,CAAC,MAAO,KAAK,CAAC,EAAG,CAAC,iBAAkB,KAAM,KAAK,EAAG,CAAC,uBAAwB,KAAM,MAAO,CAAC,EAAG,CAAC,oBAAqB,KAAM,IAAI,EAAG,CAAC,kBAAmB,KAAM,IAAK,CAAC,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,MAAO,CAAC,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,wBAAyB,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,cAAe,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,iDAAkD,KAAM,MAAO,CAAC,EAAG,CAAC,uDAAwD,KAAM,KAAK,EAAG,CAAC,mCAAoC,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,8CAA+C,KAAM,KAAK,EAAG,CAAC,6CAA8C,KAAM,KAAK,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,YAAa,KAAM,IAAI,EAAG,CAAC,eAAgB,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,kBAAmB,KAAM,KAAK,EAAG,CAAC,uBAAwB,KAAM,KAAK,EAAG,CAAC,eAAgB,KAAM,IAAI,EAAG,CAAC,qBAAsB,KAAM,IAAI,EAAG,CAAC,gCAAiC,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,IAAI,EAAG,CAAC,0BAA2B,KAAM,IAAI,EAAG,CAAC,qBAAsB,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,yBAA0B,KAAM,KAAM,EAAG,CAAC,IAAI,CAAC,EAAG,CAAC,mBAAoB,KAAM,IAAI,EAAG,CAAC,wBAAyB,KAAM,IAAI,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,cAAe,KAAM,KAAK,EAAG,CAAC,aAAc,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,IAAI,EAAG,CAAC,cAAe,KAAM,KAAK,EAAG,CAAC,OAAQ,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,QAAS,KAAM,KAAK,EAAG,CAAC,sBAAuB,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,mBAAoB,KAAM,IAAI,EAAG,CAAC,eAAgB,KAAM,KAAK,EAAG,CAAC,2BAA4B,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,sBAAuB,KAAM,IAAK,GAAI,CAAC,KAAK,CAAC,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,oBAAqB,KAAM,KAAK,EAAG,CAAC,qDAAsD,KAAM,KAAK,EAAG,CAAC,iBAAkB,KAAM,KAAM,CAAC,EAAG,CAAC,gBAAiB,KAAM,IAAK,CAAC,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,2BAA4B,KAAM,KAAK,EAAG,CAAC,UAAW,KAAM,KAAK,EAAG,CAAC,oCAAqC,KAAM,KAAM,EAAG,CAAC,OAAO,CAAC,EAAG,CAAC,YAAa,KAAM,IAAI,EAAG,CAAC,qBAAsB,KAAM,IAAI,EAAG,CAAC,uCAAwC,KAAM,KAAK,EAAG,CAAC,sCAAuC,KAAM,MAAO,EAAG,CAAC,OAAQ,MAAM,CAAC,EAAG,CAAC,mBAAoB,KAAM,KAAK,EAAG,CAAC,SAAU,KAAM,KAAK,EAAG,CAAC,WAAY,KAAM,KAAK,EAAG,CAAC,gBAAiB,KAAM,MAAO,EAAG,CAAC,IAAI,CAAC,CAAC,EAChmS56J,EAAI,EAAGA,EAAI46J,EAAa,OAAQ56J,IAAK,CACxC,IAAA2iC,EAAIi4H,EAAa56J,CAAC,EACtB46J,EAAa56J,CAAC,EAAI,CAChB,KAAM2iC,EAAE,CAAC,EACT,KAAMA,EAAE,CAAC,EACT,SAAUA,EAAE,CAAC,EACb,SAAUA,EAAE,CAAC,GAAK,EAClB,UAAWA,EAAE,CAAC,GAAK,KAEvB,CAES,SAAAk4H,EAAgBv6G,EAAUw6G,EAAa,CAC1C,KAAEx6G,aAAoBw6G,GAClB,UAAI,UAAU,mCAAmC,CAE3D,CACS,SAAAC,EAAkBr9J,EAAQyd,EAAO,CACxC,QAASzW,EAAK,EAAGA,EAAKyW,EAAM,OAAQzW,IAAM,CACpC,IAAAi8D,EAAaxlD,EAAMzW,CAAE,EACdi8D,EAAA,WAAaA,EAAW,YAAc,GACjDA,EAAW,aAAe,GACtB,UAAWA,IACbA,EAAW,SAAW,IACxB,OAAO,eAAejjE,EAAQijE,EAAW,IAAKA,CAAU,CAC1D,CACF,CACS,SAAAq6F,EAAaF,EAAaG,EAAYC,EAAa,CACtD,OAAAD,GACgBF,EAAAD,EAAY,UAAWG,CAAU,EACjDC,GACFH,EAAkBD,EAAaI,CAAW,EACrCJ,CACT,CACA,IAAIK,EAAsB,CACxB,YAAa,SAAqB9xJ,EAAO,CACnC,IAAAgqC,EAAMhqC,EAAM,aAAa,wBAAwB,EAC9C,cAAO,oBAAoB,UAAUgqC,CAAG,CACjD,EACA,UAAW,CAAC,EAEZ,cAAe,UAAyB,CACtC,OAAO,SAAS,aAAe,UACjC,GAEE,OAAO,QAAW,WACpB,OAAO,oBAAsB8nH,GAC/B,IAAIpyJ,EAAK,EACLwvC,EAAW,CAEb,cAAe,GAEf,iBAAkB,GAElB,gBAAiB,SAEjB,gBAAiB,GAEjB,kBAAmB,KAEnB,kBAAmB,KAEnB,iBAAkB,CAAC,EAEnB,gBAAiB,GAEjB,YAAa,KAEb,YAAa,GAEb,eAAgB,GAEhB,mBAAoB,KAEpB,aAAc,GAEd,cAAe,CAAC,EAEhB,sBAAuB,SAEvB,mBAAoB,CAAC,KAAM,IAAI,EAE/B,iBAAkB,GAElB,YAAa,IAEX6iH,EAAwB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAC9IC,EAAc,SAAsBt+J,EAAK4D,EAAU,CAErD,QADI2G,EAAO,OAAO,KAAKvK,CAAG,EACjB2H,EAAK,EAAGA,EAAK4C,EAAK,OAAQ5C,IACjC/D,EAAS2G,EAAK5C,CAAE,EAAG3H,EAAIuK,EAAK5C,CAAE,CAAC,CAAC,CAClC,EAEE42J,EAAkB,SAA0B/oJ,EAAQ,CACtD8oJ,EAAY,OAAO,oBAAoB,UAAW,SAASr+J,EAAK,CAC9D,OAAO,oBAAoB,UAAUA,CAAG,EAAEuV,CAAM,EAAE,EACnD,GAECgpJ,EAAiC,WAC1B,SAAAC,EAAKnyJ,EAAOrI,EAAS,CAC5B,IAAIy6J,EAAQ,KACZZ,EAAgB,KAAMW,CAAI,EAC1B,KAAK,GAAKzyJ,IACV,KAAK,SAAWM,EAChB,KAAK,WAAa,KAClB,KAAK,gBAAkB,KACnB,IAAAqyJ,EAAgB16J,GAAW,GAC/B,KAAK,QAAU,GACHq6J,EAAA9iH,EAAU,SAASv7C,EAAKC,EAAO,CACnCw+J,EAAA,QAAQz+J,CAAG,EAAI0+J,EAAc,eAAe1+J,CAAG,EAAI0+J,EAAc1+J,CAAG,EAAIC,CAAA,CAC/E,EACD,KAAK,sBAAwB,EAAQoM,EAAM,aAAa,aAAa,CACvE,CACA,OAAA2xJ,EAAaQ,EAAM,CAAC,CAClB,IAAK,QACL,MAAO,UAAiB,CACtB,IAAIG,EAAS,KAYT,GAXA,KAAK,QAAQ,eACf,KAAK,QAAQ,iBAAmB,IAC9B,KAAK,QAAQ,mBACf,KAAK,QAAQ,iBAAmB,KAAK,QAAQ,aAAe,IAE9D,KAAK,SAAW,oEAAoE,KAAK,UAAU,SAAS,EACxG,KAAK,WACE,cAAK,UAAU,IAAI,YAAY,EACnC,KAAK,QAAQ,oBACX,aAAQ,kBAAoB,SAAS,OAE1C,OAAO,QAAY,IAAa,CAClC,IAAIC,EAAqB,IAAI,QAAQ,SAASxpJ,EAASC,EAAQ,CAC7DspJ,EAAO,0BAA4BvpJ,EACnCupJ,EAAO,yBAA2BtpJ,CAAA,CACnC,EACGwpJ,EAAqB,IAAI,QAAQ,SAASzpJ,EAASC,EAAQ,CAC7DspJ,EAAO,0BAA4BvpJ,EACnCupJ,EAAO,yBAA2BtpJ,CAAA,CACnC,EACD,KAAK,QAAU,QAAQ,IAAI,CAACupJ,EAAoBC,CAAkB,CAAC,OAE9D,+BAA4B,KAAK,yBAA2B,UAAW,GAEvE,+BAA4B,KAAK,yBAA2B,UAAW,GAG9E,KAAK,oBAAsB,GAC3B,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,cAAc,CACrB,GACC,CACD,IAAK,sBACL,MAAO,UAA+B,CACpC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAC5B,KAAK,QAAQ,oBACf,KAAK,4BAA4B,GAC/B,KAAK,QAAQ,cAAc,QAAU,KAAK,QAAQ,qBAC/C,eAAU,KAAK,KAAK,gBAAgB,CAE7C,GACC,CACD,IAAK,kBACL,MAAO,SAAyBC,EAAMC,EAAa1jB,EAAU,CACvD0jB,EAAY,OAAS,KAAK,oBAC5B,KAAK,kBAAoBA,EAAY,QAElC,KAAK,aAAa,eAAeA,CAAW,IAC1C,kBAAaA,CAAW,EAAI,IAE1B,QAAAr3J,EAAK,EAAGA,EAAK,KAAK,aAAaq3J,CAAW,EAAE,OAAQr3J,IAC3D,GAAI,KAAK,aAAaq3J,CAAW,EAAEr3J,CAAE,IAAMo3J,EACzC,OAEJ,IAAIhqJ,EAAQumI,IAAasiB,EAAYtiB,EAAW,KAAK,aAAa0jB,CAAW,EAAE,OAC/E,KAAK,aAAaA,CAAW,EAAEjqJ,CAAK,EAAIgqJ,CAC1C,GACC,CACD,IAAK,uBACL,MAAO,UAAgC,CACjC,QAAK,QAAQ,cAAc,OAAQ,CACrC,IAAIE,EAAyB,KAAK,QAAQ,cAAc,IAAI,SAASC,EAAS,CAC5E,OAAOA,EAAQ,aAAY,CAC5B,EACD,KAAK,UAAYrB,EAAa,OAAO,SAASqB,EAAS,CACrD,OAAOD,EAAuB,QAAQC,EAAQ,IAAI,EAAI,GACvD,CACQ,cAAK,QAAQ,iBAAiB,OAAQ,CAC/C,IAAIC,EAA4B,KAAK,QAAQ,iBAAiB,IAAI,SAASD,EAAS,CAClF,OAAOA,EAAQ,aAAY,CAC5B,EACD,KAAK,UAAYrB,EAAa,OAAO,SAASqB,EAAS,CACrD,OAAOC,EAA0B,QAAQD,EAAQ,IAAI,IAAM,GAC5D,OAED,KAAK,UAAYrB,CAErB,GACC,CACD,IAAK,8BACL,MAAO,UAAuC,CAC5C,QAASl2J,EAAK,EAAGA,EAAK,KAAK,UAAU,OAAQA,IAAM,CACjD,IAAIy3J,EAAM,KAAK,UAAUz3J,CAAE,EAAE,KAAK,cAC9B,KAAK,QAAQ,mBAAmB,eAAey3J,CAAG,IACpD,KAAK,UAAUz3J,CAAE,EAAE,KAAO,KAAK,QAAQ,mBAAmBy3J,CAAG,EAEjE,CACF,GACC,CACD,IAAK,mBACL,MAAO,SAA0B/+J,EAAGC,EAAG,CACrC,OAAOD,EAAE,KAAK,cAAcC,EAAE,IAAI,CACpC,GACC,CACD,IAAK,uBACL,MAAO,UAAgC,CACrC,KAAK,kBAAoB,EACzB,KAAK,UAAY,GACjB,KAAK,aAAe,GACpB,QAASqH,EAAK,EAAGA,EAAK,KAAK,UAAU,OAAQA,IAAM,CAC7C,IAAAipD,EAAK,KAAK,UAAUjpD,CAAE,EACrB,KAAK,UAAUipD,EAAG,QAAQ,IACxB,eAAUA,EAAG,QAAQ,EAAI,IAChC,KAAK,gBAAgBA,EAAG,KAAMA,EAAG,SAAUA,EAAG,QAAQ,CACxD,CACA,QAASvrD,EAAK,EAAGA,EAAK,KAAK,UAAU,OAAQA,IAAM,CAC7C,IAAAg6J,EAAK,KAAK,UAAUh6J,CAAE,EAC1B,GAAIg6J,EAAG,UAEL,QADIC,EAAkB,KAAK,aAAaD,EAAG,QAAQ,EAAE,CAAC,EAC7C,EAAI,EAAG,EAAIA,EAAG,UAAU,OAAQ,IAAK,CAE5C,QADIE,EAAWF,EAAG,UAAU,CAAC,EACpBlzH,GAAI,EAAGA,GAAIozH,EAAS,OAAQpzH,KAAK,CACxC,IAAIqzH,GAAkBH,EAAG,SAAWE,EAAS,OAAO,EAAGpzH,EAAC,EACnD,qBAAgBmzH,EAAiBE,EAAe,EAChD,qBAAgBH,EAAG,KAAMG,EAAe,CAC/C,CACA,KAAK,gBAAgBH,EAAG,KAAMA,EAAG,SAAWE,CAAQ,CACtD,CAEJ,CACF,GACC,CACD,IAAK,6BACL,MAAO,UAAsC,CAC3C,KAAK,mBAAqB,GAC1B,QAAS53J,EAAK,EAAGA,EAAK,KAAK,QAAQ,mBAAmB,OAAQA,IAAM,CAClE,IAAIq3J,EAAc,KAAK,QAAQ,mBAAmBr3J,CAAE,EAAE,cAClD83J,EAAc,KAAK,gBAAgBT,EAAa,GAAO,EAAI,EAC3DS,GACG,wBAAmB,KAAKA,CAAW,CAC5C,CACF,GACC,CACD,IAAK,YACL,MAAO,SAAmB5+J,EAAMiK,EAAO8V,EAAW,CAC5C,IAAAhW,EAAK,SAAS,cAAc/J,CAAI,EAChC,OAAAiK,GACUwzJ,EAAAxzJ,EAAO,SAAS7K,EAAKC,EAAO,CAC/B,OAAA0K,EAAG,aAAa3K,EAAKC,CAAK,EAClC,EACC0gB,GACFA,EAAU,YAAYhW,CAAE,EACnBA,CACT,GACC,CACD,IAAK,kBACL,MAAO,UAA2B,CAC5B,CAAC,KAAK,SAAS,aAAa,cAAc,GAAK,EAAE,KAAK,SAAS,MAAQ,KAAK,SAAS,KAAK,aAAa,cAAc,IAClH,cAAS,aAAa,eAAgB,KAAK,EAElD,IAAI80J,EAAc,MACd,KAAK,QAAQ,gBACAA,GAAA,wBACb,KAAK,QAAQ,mBACAA,GAAA,4BACb,KAAK,QAAQ,kBACAA,GAAA,IACfA,GAAe,KAAK,QAAQ,iBAE1B,IAAAhjH,EAAU,KAAK,UAAU,MAAO,CAClC,MAASgjH,CAAA,CACV,EAkDG,GAjDJ,KAAK,SAAS,WAAW,aAAahjH,EAAS,KAAK,QAAQ,EACvD,oBAAiB,KAAK,UAAU,MAAO,CAC1C,MAAS,uBACRA,CAAO,EACFA,EAAA,YAAY,KAAK,QAAQ,EAC5B,kBAAe,KAAK,UAAU,MAAO,CACxC,MAAS,qBACT,KAAM,WACN,gBAAiB,OAAO,OAAO,KAAK,GAAI,mBAAmB,EAC3D,YAAa,OAAO,OAAO,KAAK,GAAI,mBAAmB,EACvD,gBAAiB,SAChB,KAAK,cAAc,EACjB,uBAAoB,KAAK,UAAU,MAAO,CAC7C,MAAS,aACR,KAAK,YAAY,EAChB,KAAK,QAAQ,mBACV,sBAAmB,KAAK,UAAU,MAAO,CAC5C,MAAS,2BACR,KAAK,YAAY,GAElB,KAAK,QAAQ,gBACV,kBAAa,aAAa,WAAY,GAAG,EACzC,mBAAgB,KAAK,UAAU,MAAO,CACzC,MAAS,cACR,KAAK,YAAY,EACf,iBAAc,KAAK,UAAU,KAAM,CACtC,MAAS,8BACT,GAAI,OAAO,OAAO,KAAK,GAAI,mBAAmB,EAC9C,KAAM,UACN,aAAc,oBACf,EACG,KAAK,mBAAmB,SAC1B,KAAK,iBAAiB,KAAK,mBAAoB,iBAAkB,EAAI,EACrE,KAAK,UAAU,KAAM,CACnB,MAAS,eACT,KAAM,YACN,gBAAiB,QAChB,KAAK,WAAW,GAEhB,sBAAiB,KAAK,UAAW,eAAe,EACjD,KAAK,QAAQ,mBACV,cAAW,KAAK,UAAU,MAAO,CACpC,MAAS,qBACV,EACI,cAAS,YAAY,KAAK,WAAW,GAErC,oBAAe,YAAY,KAAK,WAAW,GAGhD,KAAK,QAAQ,YAAa,CACxB,IAAAijH,EAAkB,KAAK,QAAQ,YAC/B9+J,EAAO,KAAK,SAAS,aAAa,MAAM,EAC5C,GAAIA,EAAM,CACJ,IAAA8G,EAAK9G,EAAK,YAAY,GAAG,EACzB8G,IAAO,KACSg4J,EAAA,GAAG,OAAO9+J,EAAK,OAAO,EAAG8G,CAAE,EAAG,GAAG,EAAE,OAAOg4J,EAAiB,GAAG,EACpF,CACK,iBAAc,KAAK,UAAU,QAAS,CACzC,KAAM,SACN,KAAMA,CAAA,CACP,EACOjjH,EAAA,YAAY,KAAK,WAAW,CACtC,CACF,GACC,CACD,IAAK,mBACL,MAAO,SAA0BkjH,EAAWvzJ,EAAWwzJ,EAAW,CAEhE,QADIzzJ,EAAM,GACDzE,EAAK,EAAGA,EAAKi4J,EAAU,OAAQj4J,IAAM,CACxC,IAAAipD,EAAKgvG,EAAUj4J,CAAE,EACjBm4J,EAAWD,EAAY,aAAe,GACnCzzJ,GAAA,2BAA2B,OAAOC,EAAW,0BAA0B,EAAE,OAAO,KAAK,GAAI,SAAS,EAAE,OAAOukD,EAAG,IAAI,EAAE,OAAOkvG,EAAU,kCAAkC,EAAE,OAAOlvG,EAAG,SAAU,uBAAuB,EAAE,OAAOA,EAAG,KAAM,0BAA0B,EACvQxkD,GAAO,yDAAyD,OAAOwkD,EAAG,KAAM,gBAAgB,EAChGxkD,GAAO,mCAAmC,OAAOwkD,EAAG,KAAM,SAAS,EACnExkD,GAAO,iCAAiC,OAAOwkD,EAAG,SAAU,SAAS,EAC9DxkD,GAAA,OACT,CACK,iBAAY,mBAAmB,YAAaA,CAAG,CACtD,GACC,CACD,IAAK,mBACL,MAAO,UAA4B,CACjC,IAAI69H,EAAiB,KAAK,SAAS,aAAa,OAAO,EACnD50C,EAAa,KAAK,SAAS,MAC3B0qE,EAAe91B,GAAkBA,EAAe,OAAO,CAAC,IAAM,MAAQ,CAAC50C,GAAcA,EAAW,OAAO,CAAC,IAAM,KAC9GnyF,EAAM68J,EAAe91B,EAAiB50C,EACtC2qE,EAAW,KAAK,aAAa98J,CAAG,EAChC+8J,EAAmB,KAAK,kBAAkB/8J,CAAG,EAC7Cg9J,EAAgB,KAAK,QAASC,GAAiBD,EAAc,eAAgBE,GAAeF,EAAc,aAAcG,GAAmBH,EAAc,iBAAkBI,GAAmBJ,EAAc,iBAC5MF,GAAY,CAACC,EACf,KAAK,sBAAsB/8J,CAAG,EACrBi9J,KAAmB,SACxBA,GACG,cAASA,GAAe,YAAa,GAEtCH,GAAYC,EACd,KAAK,SAAS,IAAI,GAElB,KAAK,eAAiB,KAAK,mBAAmB,OAAS,KAAK,mBAAmB,CAAC,EAAE,KAAO,KAAK,UAAU,CAAC,EAAE,KACtG/8J,GACE,cAAS,KAAK,cAAc,GAInC,CAACA,GAAO,CAACk9J,IAAgB,CAACC,IAAoB,CAACC,KACjD,KAAK,SAAS,MAAQ,IAAI,OAAO,KAAK,oBAAoB,QAAQ,IAGlEp9J,GACF,KAAK,qBAAqBA,CAAG,CACjC,GACC,CACD,IAAK,iBACL,MAAO,UAA0B,CAC/B,KAAK,kBAAkB,EACnB,KAAK,QAAQ,kBACf,KAAK,mBAAmB,EACtB,KAAK,QAAQ,eACf,KAAK,uBAAuB,EAC1B,KAAK,aACP,KAAK,yBAAyB,CAClC,GACC,CACD,IAAK,2BACL,MAAO,UAAoC,CACzC,IAAIq9J,EAAS,KACb,KAAK,yBAA2B,UAAW,CAClCA,EAAA,YAAY,MAAQA,EAAO,UAAU,GAE1C,KAAK,SAAS,MAChB,KAAK,SAAS,KAAK,iBAAiB,SAAU,KAAK,wBAAwB,CAC/E,GACC,CACD,IAAK,mBACL,MAAO,UAA4B,CAE1B,QADH31J,EAAK,KAAK,SACPA,GAAMA,EAAG,UAAY,SAC1BA,EAAKA,EAAG,WAEH,OAAAA,CACT,GACC,CACD,IAAK,yBACL,MAAO,UAAkC,CACvC,IAAI41J,EAAS,KACR,uBAAoB,SAAS1pJ,EAAG,CAC/B0pJ,EAAO,YAAY,UAAU,SAAS,WAAW,EACnDA,EAAO,SAAS,QAEhB1pJ,EAAE,eAAe,GAEjB,IAAAygC,EAAQ,KAAK,mBACbA,GACIA,EAAA,iBAAiB,QAAS,KAAK,iBAAiB,EACxD,KAAK,yBAA2B,UAAW,CACrCipH,EAAO,YAAY,UAAU,SAAS,WAAW,GAAK,CAACA,EAAO,SAAS,UAAY,CAACA,EAAO,SAAS,UACtGA,EAAO,cAAc,CACvB,EAEF,KAAK,aAAa,iBAAiB,QAAS,KAAK,wBAAwB,EACpE,kCAA+B,SAAS1pJ,EAAG,CAC9C,IAAI2pJ,EAAmBD,EAAO,YAAY,UAAU,SAAS,WAAW,EACpEC,GAAoB,CAAC,UAAW,KAAM,YAAa,OAAQ,IAAK,OAAO,EAAE,QAAQ3pJ,EAAE,GAAG,IAAM,KAC9FA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClB0pJ,EAAO,cAAc,GAEnB1pJ,EAAE,MAAQ,OACZ0pJ,EAAO,eAAe,GAE1B,KAAK,eAAe,iBAAiB,UAAW,KAAK,4BAA4B,CACnF,GACC,CACD,IAAK,gBACL,MAAO,UAAyB,CAC9B,IAAIE,EAAS,KACT,KAAK,QAAQ,aAAe,CAAC,OAAO,kBAClC,OAAO,oBAAoB,gBAC7B,OAAO,oBAAoB,UAAU,KAAK,QAAQ,WAAW,EAEtD,wBAAiB,OAAQ,UAAW,CACzC,OAAO,oBAAoB,UAAUA,EAAO,QAAQ,WAAW,EAChE,EAGH,KAAK,0BAA0B,EAC7B,KAAK,QAAQ,iBAAmB,OAClC,KAAK,iBAAiB,EAEtB,KAAK,0BAA0B,CACnC,GACC,CACD,IAAK,mBACL,MAAO,UAA4B,CAC7B,OAAO,oBAAoB,YAC7B,KAAK,kBAAkB,EACb,OAAO,oBAAoB,4BACrC,OAAO,oBAAoB,0BAA4B,GACnD,OAAO,KAAK,QAAQ,aAAgB,YACjC,aAAQ,YAAY,SAAS1B,EAAa,CACtC,2BAAoB,YAAcA,EAAY,YAAY,EACjE,WAAW,UAAW,CACpB,OAAOT,EAAgB,mBAAmB,EAC3C,GACA,UAAW,CACZ,OAAOA,EAAgB,0BAA0B,EAClD,EAGP,GACC,CACD,IAAK,oBACL,MAAO,UAA6B,CAClC,IAAIoC,EAAS,KACb,KAAK,kBAAoB,UAAW,CAC9BA,EAAO,sBAAsBA,EAAO,SAAS,KAAK,GACpDA,EAAO,sBAAsB,CAC/B,EAEF,KAAK,SAAS,iBAAiB,QAAS,KAAK,iBAAiB,EAC9D,KAAK,sBAAwB,UAAW,CACtC,WAAWA,EAAO,iBAAiB,GAErC,KAAK,SAAS,iBAAiB,MAAO,KAAK,qBAAqB,EAChE,KAAK,SAAS,iBAAiB,QAAS,KAAK,qBAAqB,CACpE,GACC,CACD,IAAK,OACL,MAAO,SAAcn0E,EAAQ,CAC3B,IAAI1jE,EAAM,KAAK,SAAS,aAAa,WAAW,EACzC,OAAAA,GAAO0jE,EAAO,OAAS1jE,EAAM0jE,EAAO,OAAO,EAAG1jE,CAAG,EAAI0jE,CAC9D,GACC,CACD,IAAK,qBACL,MAAO,UAA8B,CACnC,IAAIo0E,EAAS,KACb,KAAK,yBAA2B,UAAW,CACzCA,EAAO,qBAAqB,GAE1B,KAAK,SAAS,MAChB,KAAK,SAAS,KAAK,iBAAiB,SAAU,KAAK,wBAAwB,EAC7E,KAAK,SAAS,iBAAiB,OAAQ,KAAK,wBAAwB,CACtE,GACC,CACD,IAAK,uBACL,MAAO,UAAgC,CACrC,GAAI,KAAK,SAAS,MAAM,OAAO,CAAC,IAAM,IAAK,CACzC,IAAIC,EAAU,KAAK,YAAY,KAAK,SAAS,KAAK,GAC9C,CAACA,GAAW,KAAK,oBAAoB,WAAaA,KACpD,KAAK,SAAS,MAAQ,GAE1B,CACF,GACC,CACD,IAAK,cACL,MAAO,SAAqB32I,EAAG,CACtB,OAAAA,EAAE,QAAQ,MAAO,EAAE,CAC5B,GACC,CACD,IAAK,WACL,MAAO,SAAkBrpB,EAAM,CACzB,IAAAiW,EAAI,SAAS,YAAY,OAAO,EAClCA,EAAA,UAAUjW,EAAM,GAAM,EAAI,EACvB,cAAS,cAAciW,CAAC,CAC/B,GACC,CACD,IAAK,gBACL,MAAO,UAAyB,CACzB,iBAAY,UAAU,OAAO,WAAW,EACxC,kBAAa,aAAa,gBAAiB,MAAM,EACtD,KAAK,qBAAqB,EACtB,KAAK,aACF,wBAAmB,KAAK,WAAY,EAAK,EACzC,eAAU,KAAK,WAAY,EAAI,GAEtC,KAAK,uBAAuB,EACvB,mBAAc,UAAU,IAAI,gBAAgB,EACjD,KAAK,SAAS,sBAAsB,CACtC,GACC,CACD,IAAK,eACL,MAAO,SAAsBlM,EAAIyB,EAAWy0J,EAAiB,CACvDA,GAAmB,CAACl2J,EAAG,UAAU,SAASyB,CAAS,EAClDzB,EAAA,UAAU,IAAIyB,CAAS,EACnB,CAACy0J,GAAmBl2J,EAAG,UAAU,SAASyB,CAAS,GACvDzB,EAAA,UAAU,OAAOyB,CAAS,CACjC,GACC,CACD,IAAK,uBACL,MAAO,UAAgC,CACrC,IAAI00J,EAAS,KAIT,GAHA,KAAK,QAAQ,mBACf,KAAK,QAAQ,kBAAkB,YAAY,KAAK,QAAQ,EAEtD,CAAC,KAAK,SAAU,CACd,IAAA5c,EAAM,KAAK,SAAS,sBAAsB,EAC1Cr4F,EAAY,OAAO,aAAe,SAAS,gBAAgB,UAC3Dk1G,EAAW7c,EAAI,IAAMr4F,EACrBm1G,EAAiB,KAAK,YAAY,aAClCC,EAAoBF,EAAW,KAAK,SAAS,aAAeC,EAAiBn1G,EAAY,OAAO,YAChGq1G,EAAoBH,EAAWC,EAAiBn1G,EAEhD,GADJ,KAAK,aAAa,KAAK,YAAa,4BAA6B,CAACo1G,GAAqBC,CAAiB,EACpG,KAAK,QAAQ,kBAAmB,CAClC,IAAIC,GAAW,CAACF,GAAqBC,EAAoB,EAAI,KAAK,SAAS,aAC3E,KAAK,SAAS,MAAM,IAAM,GAAG,OAAOH,EAAWI,GAAU,IAAI,EACxD,cAAS,MAAM,KAAO,GAAG,OAAOjd,EAAI,KAAO,SAAS,KAAK,WAAY,IAAI,EAC9E,KAAK,oBAAsB,UAAW,CACpC,OAAO4c,EAAO,gBAAe,EAExB,wBAAiB,SAAU,KAAK,mBAAmB,CAC5D,CACF,CACF,GACC,CACD,IAAK,sBACL,MAAO,SAA6BpgK,EAAQ,CAEnC,QADHiK,EAAKjK,EACFiK,GAAMA,IAAO,KAAK,aAAe,CAACA,EAAG,UAAU,SAAS,cAAc,GAC3EA,EAAKA,EAAG,WAEH,OAAAA,IAAO,KAAK,YAAc,KAAOA,CAC1C,GACC,CACD,IAAK,yBACL,MAAO,UAAkC,CACvC,IAAIy2J,EAAS,KACR,iCAA8B,SAASvqJ,EAAG,CAC7C,IAAIyoH,EAAW8hC,EAAO,oBAAoBvqJ,EAAE,MAAM,EAC9CyoH,GACK8hC,EAAA,mBAAmB9hC,EAAU,EAAK,GAE7C,KAAK,YAAY,iBAAiB,YAAa,KAAK,2BAA2B,EAC1E,6BAA0B,SAASzoH,EAAG,CACzC,IAAIyoH,EAAW8hC,EAAO,oBAAoBvqJ,EAAE,MAAM,EAC9CyoH,GACF8hC,EAAO,gBAAgB9hC,CAAQ,GAEnC,KAAK,YAAY,iBAAiB,QAAS,KAAK,uBAAuB,EACvE,IAAI+hC,EAAY,GAChB,KAAK,uBAAyB,UAAW,CAClCA,GACHD,EAAO,eAAe,EACZC,EAAA,IAEd,SAAS,gBAAgB,iBAAiB,QAAS,KAAK,sBAAsB,EAC9E,IAAI3pE,EAAQ,GACR4pE,EAAa,KACZ,8BAA2B,SAASzqJ,EAAG,CAC1CA,EAAE,eAAe,EACbA,EAAE,MAAQ,WAAaA,EAAE,MAAQ,MAAQA,EAAE,MAAQ,aAAeA,EAAE,MAAQ,OACvEuqJ,EAAA,iBAAiBvqJ,EAAE,GAAG,EACtBA,EAAE,MAAQ,QACjBuqJ,EAAO,gBAAgB,EAChBvqJ,EAAE,MAAQ,SACjBuqJ,EAAO,eAAe,EACf,uBAAuB,KAAKvqJ,EAAE,GAAG,IACpCyqJ,GACF,aAAaA,CAAU,EAChB5pE,GAAA7gF,EAAE,IAAI,cACfuqJ,EAAO,kBAAkB1pE,CAAK,EAC9B4pE,EAAa,WAAW,UAAW,CACzB5pE,EAAA,IACP,GAAG,EACR,EAEO,0BAAiB,UAAW,KAAK,wBAAwB,CACpE,GACC,CACD,IAAK,mBACL,MAAO,SAA0B13F,EAAK,CAChC,IAAAsZ,EAAOtZ,IAAQ,WAAaA,IAAQ,KAAO,KAAK,gBAAgB,uBAAyB,KAAK,gBAAgB,mBAC9GsZ,IACEA,EAAK,UAAU,SAAS,cAAc,IACxCA,EAAOtZ,IAAQ,WAAaA,IAAQ,KAAOsZ,EAAK,uBAAyBA,EAAK,oBAE3E,wBAAmBA,EAAM,EAAI,EAEtC,GACC,CACD,IAAK,kBACL,MAAO,UAA2B,CAC5B,KAAK,iBACF,qBAAgB,KAAK,eAAe,CAC7C,GACC,CACD,IAAK,oBACL,MAAO,SAA2Bo+E,EAAO,CACvC,QAAShwF,EAAK,EAAGA,EAAK,KAAK,UAAU,OAAQA,IACvC,QAAK,YAAY,KAAK,UAAUA,CAAE,EAAE,KAAMgwF,CAAK,EAAG,CACpD,IAAI4nC,EAAW,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAO,KAAK,UAAU53H,CAAE,EAAE,IAAI,CAAC,EAC3G,wBAAmB43H,EAAU,EAAK,EAClC,eAAUA,EAAU,EAAI,EAC7B,KACF,CAEJ,GACC,CACD,IAAK,cACL,MAAO,SAAqBl/H,EAAGC,EAAG,CAChC,OAAOD,EAAE,OAAO,EAAGC,EAAE,MAAM,EAAE,YAAkB,IAAAA,CACjD,GACC,CACD,IAAK,uBACL,MAAO,SAA8BkhK,EAAgB,CACnD,IAAIh1E,EAASg1E,EACb,GAAI,KAAK,QAAQ,iBAAmB,OAAO,mBAAqB,KAAK,oBAAqB,CACpF,IAAAC,EAAc,CAAC,KAAK,QAAQ,mBAAqB,KAAK,QAAQ,cAAgBj1E,EAAO,OAAO,CAAC,IAAM,KACnGk1E,EAAwB,kBAAkB,aAAcC,EAAWD,EAAsB,SAAUE,EAAgBF,EAAsB,cACzIt9G,EAASq9G,EAAcE,EAAWC,EACtCp1E,EAAS,kBAAkB,aAAaA,EAAQ,KAAK,oBAAoB,KAAMpoC,CAAM,CACvF,CACSooC,EAAA,KAAK,iBAAiBA,CAAM,EACrC,KAAK,SAAS,MAAQA,CACxB,GACC,CACD,IAAK,wBACL,MAAO,SAA+Bg1E,EAAgB,CACpD,IAAIh1E,EAASg1E,EACTK,EAAmB,KAAK,oBAAoB,SAC5CC,EAASD,IAAqB,IAC9Br1E,GAAU,KAAK,QAAQ,cAAgBs1E,GAAUt1E,EAAO,OAAO,CAAC,IAAM,MACpEA,EAAO,OAAO,CAAC,IAAM,MACdA,EAAA,IAAI,OAAOA,CAAM,GACnBA,EAAA,IAAI,OAAOA,CAAM,GAExB,KAAK,QAAQ,kBAAoBq1E,GAAoBr1E,EAAO,OAAO,CAAC,IAAM,MAC5EA,EAAS,IAAI,OAAOq1E,CAAgB,EAAE,OAAOr1E,CAAM,GAErD,IAAIwzE,EAAW,KAAK,aAAaxzE,EAAQ,EAAI,EACzCq0E,EAAU,KAAK,YAAYr0E,CAAM,EACjCwyE,EAAc,KAClB,GAAIgB,EAAU,CACZ,IAAI+B,GAAe,KAAK,aAAa,KAAK,YAAY/B,CAAQ,CAAC,EAC3DgC,GAAkBD,GAAa,QAAQ,KAAK,oBAAoB,IAAI,IAAM,IAAMlB,EAAQ,QAAUb,EAAS,OAAS,EACpHiC,GAAyBJ,IAAqB,KAAO,KAAK,kBAAkBhB,CAAO,EACnF,IAACoB,IAA0B,CAACD,IAC9B,QAASh+J,GAAI,EAAGA,GAAI+9J,GAAa,OAAQ/9J,KACnC,GAAA+9J,GAAa/9J,EAAC,EAAG,CACnBg7J,EAAc+C,GAAa/9J,EAAC,EAC5B,KACF,EAEJ,MACSwoF,EAAO,OAAO,CAAC,IAAM,KAAOq0E,EAAQ,OAC/B7B,EAAA,IACL,CAACxyE,GAAUA,IAAW,OAC/BwyE,EAAc,KAAK,gBAErB,OAAIA,IAAgB,KACX,KAAK,SAASA,CAAW,EAE3B,EACT,GACC,CACD,IAAK,oBACL,MAAO,SAA2BxyE,EAAQ,CACpC,IAAAq0E,EAAU,KAAK,YAAYr0E,CAAM,EACrC,GAAIq0E,EAAQ,OAAO,CAAC,IAAM,IAAK,CAC7B,IAAItB,EAAWsB,EAAQ,OAAO,EAAG,CAAC,EAC3B,OAAAxC,EAAsB,QAAQkB,CAAQ,IAAM,EACrD,CACO,QACT,GACC,CACD,IAAK,qBACL,MAAO,SAA4BhgC,EAAU2iC,EAAa,CACxD,IAAIC,EAAW,KAAK,gBAChBA,GACOA,EAAA,UAAU,OAAO,gBAAgB,EAC5C,KAAK,gBAAkB5iC,EAClB,qBAAgB,UAAU,IAAI,gBAAgB,EAC/C2iC,GACF,KAAK,gBAAgB,OACzB,GACC,CACD,IAAK,kBACL,MAAO,SAAyBlD,EAAaoD,EAA2BC,EAAW,CAEjF,QADIC,EAAcF,EAA4BvE,EAAe,KAAK,UACzDl2J,EAAK,EAAGA,EAAK26J,EAAY,OAAQ36J,IACxC,GAAI26J,EAAY36J,CAAE,EAAE,OAASq3J,EAC3B,OAAOsD,EAAY36J,CAAE,EAGzB,GAAI06J,EACK,YAET,MAAM,IAAI,MAAM,wBAAwB,OAAOrD,EAAa,GAAG,CAAC,CAClE,GACC,CACD,IAAK,WACL,MAAO,SAAkBA,EAAa,CACpC,IAAIuD,EAAc,KAAK,oBAAoB,KAAO,KAAK,oBAAsB,GACxE,yBAAsBvD,EAAc,KAAK,gBAAgBA,EAAa,GAAO,EAAK,EAAI,GACvF,KAAK,oBAAoB,OACtB,oBAAiB,KAAK,oBAAoB,MAEjD,KAAK,kBAAkB,aAAa,QAAS,kBAAkB,OAAOA,CAAW,CAAC,EAClF,IAAI3lH,EAAQ2lH,EAAc,GAAG,OAAO,KAAK,oBAAoB,KAAM,KAAK,EAAE,OAAO,KAAK,oBAAoB,QAAQ,EAAI,UAElH,GADC,kBAAa,aAAa,QAAS3lH,CAAK,EACzC,KAAK,QAAQ,iBAAkB,CAC7B,IAAA2mH,EAAW,KAAK,oBAAoB,SAAW,IAAI,OAAO,KAAK,oBAAoB,QAAQ,EAAI,GACnG,KAAK,iBAAiB,UAAYA,EAClC,IAAIwC,EAAoB,KAAK,aAAa,aAAe,KAAK,8BAC9D,KAAK,SAAS,MAAM,YAAc,GAAG,OAAOA,EAAoB,EAAG,IAAI,CACzE,CAEI,GADJ,KAAK,mBAAmB,EACpB,KAAK,QAAQ,cAAe,CAC9B,IAAIL,EAAW,KAAK,WAKpB,GAJIA,IACOA,EAAA,UAAU,OAAO,aAAa,EAC9BA,EAAA,aAAa,gBAAiB,OAAO,GAE5CnD,EAAa,CACX,IAAAyD,EAAW,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAOzD,EAAa,YAAY,CAAC,GAAK,KAAK,YAAY,cAAc,QAAQ,OAAO,KAAK,GAAI,SAAS,EAAE,OAAOA,CAAW,CAAC,EACnMyD,EAAA,aAAa,gBAAiB,MAAM,EACpCA,EAAA,UAAU,IAAI,aAAa,EACpC,KAAK,WAAaA,EAClB,KAAK,aAAa,aAAa,wBAAyBA,EAAS,aAAa,IAAI,CAAC,CACrF,CACF,CACA,OAAOF,EAAY,OAASvD,CAC9B,GACC,CACD,IAAK,8BACL,MAAO,UAAuC,CAC5C,IAAI0D,EAAiB,KAAK,SAAS,WAAW,UAAU,EACxDA,EAAe,MAAM,WAAa,SACzB,cAAK,YAAYA,CAAc,EACpC,IAAAC,EAAsB,KAAK,eAAe,UAAU,EACxDD,EAAe,YAAYC,CAAmB,EAC9C,IAAIC,EAAoB,KAAK,aAAa,UAAU,EAAI,EACxDD,EAAoB,YAAYC,CAAiB,EACjD,IAAIhhJ,EAAQghJ,EAAkB,YACf,OAAAF,EAAA,WAAW,YAAYA,CAAc,EAC7C9gJ,CACT,GACC,CACD,IAAK,qBACL,MAAO,UAA8B,CAC/B,IAAAihJ,EAAuB,KAAK,QAAQ,kBAAoB,cAAgB,CAAC,KAAK,uBAAyB,KAAK,QAAQ,kBAAoB,SACxI,UAAO,mBAAqBA,EAAsB,CACpD,IAAIC,EAAa,kBAAkB,WAAW,KAAK,QAAQ,qBAAqB,EAC5ErmI,EAAc,KAAK,oBAAoB,KAAO,kBAAkB,iBAAiB,KAAK,oBAAoB,KAAM,KAAK,QAAQ,aAAcqmI,CAAU,EAAI,GAC/IrmI,EAAA,KAAK,iBAAiBA,CAAW,EAC3C,OAAO,KAAK,QAAQ,mBAAsB,aAC5CA,EAAc,KAAK,QAAQ,kBAAkBA,EAAa,KAAK,mBAAmB,GAE/E,cAAS,aAAa,cAAeA,CAAW,CACvD,CACF,GACC,CACD,IAAK,kBACL,MAAO,SAAyB8iG,EAAU,CACxC,IAAIwjC,EAAc,KAAK,SAASxjC,EAAS,aAAa,mBAAmB,CAAC,EAC1E,KAAK,eAAe,EACpB,KAAK,gBAAgBA,EAAS,aAAa,gBAAgB,EAAG,EAAI,EAClE,KAAK,SAAS,QACV,IAAAx7H,EAAM,KAAK,SAAS,MAAM,OACzB,cAAS,kBAAkBA,EAAKA,CAAG,EACpCg/J,GACF,KAAK,sBAAsB,CAE/B,GACC,CACD,IAAK,iBACL,MAAO,UAA0B,CAC1B,iBAAY,UAAU,IAAI,WAAW,EACrC,kBAAa,aAAa,gBAAiB,OAAO,EAClD,mBAAc,UAAU,OAAO,gBAAgB,EAC3C,6BAAoB,UAAW,KAAK,wBAAwB,EACrE,SAAS,gBAAgB,oBAAoB,QAAS,KAAK,sBAAsB,EACjF,KAAK,YAAY,oBAAoB,YAAa,KAAK,2BAA2B,EAClF,KAAK,YAAY,oBAAoB,QAAS,KAAK,uBAAuB,EACtE,KAAK,QAAQ,oBACV,KAAK,UACD,2BAAoB,SAAU,KAAK,mBAAmB,EAC3D,KAAK,SAAS,YAChB,KAAK,SAAS,WAAW,YAAY,KAAK,QAAQ,GAEtD,KAAK,SAAS,uBAAuB,CACvC,GACC,CACD,IAAK,YACL,MAAO,SAAmBzvI,EAAS0vI,EAAQ,CACzC,IAAIpiJ,EAAY,KAAK,YACjBkrC,EAAY,OAAO,aAAe,SAAS,gBAAgB,UAC3Dm3G,EAAkBriJ,EAAU,aAC5Bi7I,EAAej7I,EAAU,sBAAsB,EAAE,IAAMkrC,EACvDo3G,EAAkBrH,EAAeoH,EACjCE,GAAgB7vI,EAAQ,aACxB8vI,GAAa9vI,EAAQ,sBAAsB,EAAE,IAAMw4B,EACnDu3G,GAAgBD,GAAaD,GAC7BG,GAAeF,GAAavH,EAAej7I,EAAU,UACrD2iJ,GAAeN,EAAkB,EAAIE,GAAgB,EACzD,GAAIC,GAAavH,EACXmH,IACcM,IAAAC,IAClB3iJ,EAAU,UAAY0iJ,WACbD,GAAgBH,EAAiB,CACtCF,IACcM,IAAAC,IAClB,IAAIC,GAAmBP,EAAkBE,GACzCviJ,EAAU,UAAY0iJ,GAAeE,EACvC,CACF,GACC,CACD,IAAK,kBACL,MAAO,SAAyBC,EAAiBC,EAAqB,CAChE,IAAAC,EAAW,KAAK,SAAS,MACzBC,EAAc,IAAI,OAAOH,CAAe,EACxCI,EACJ,GAAIF,EAAS,OAAO,CAAC,IAAM,IAAK,CAC1B,IAAAG,EAAe,KAAK,aAAaH,CAAQ,EACzCG,EACUD,EAAAF,EAAS,QAAQG,EAAcF,CAAW,EAE1CC,EAAAD,CACd,SACS,KAAK,QAAQ,cAAgB,KAAK,QAAQ,iBACnD,OAEA,GAAID,EACFE,EAAYD,EAAcD,UACjBD,GAAuB,CAAC,KAAK,QAAQ,iBAClCG,EAAAD,MAEZ,QAGJ,KAAK,SAAS,MAAQC,CACxB,GACC,CACD,IAAK,eACL,MAAO,SAAsBr3E,EAAQu3E,EAAiB,CACpD,IAAI/D,EAAW,GACf,GAAIxzE,EAAO,OAAO,CAAC,IAAM,IAEvB,QADIw3E,EAAe,GACVr8J,EAAK,EAAGA,EAAK6kF,EAAO,OAAQ7kF,IAAM,CACrC,IAAAipD,EAAK47B,EAAO,OAAO7kF,CAAE,EACzB,GAAI,CAAC,MAAM,SAASipD,EAAI,EAAE,CAAC,EAAG,CAE5B,GADgBozG,GAAApzG,EACZmzG,EACE,KAAK,aAAaC,CAAY,IAChChE,EAAWxzE,EAAO,OAAO,EAAG7kF,EAAK,CAAC,WAGhC,KAAK,UAAUq8J,CAAY,EAAG,CAChChE,EAAWxzE,EAAO,OAAO,EAAG7kF,EAAK,CAAC,EAClC,KACF,CAEE,GAAAq8J,EAAa,SAAW,KAAK,kBAC/B,KAEJ,CACF,CAEK,OAAAhE,CACT,GACC,CACD,IAAK,iBACL,MAAO,UAA0B,CAC/B,IAAI98J,EAAM,KAAK,SAAS,MAAM,KAAK,EAC/B88J,EAAW,KAAK,oBAAoB,SACpCj8I,EACAkgJ,EAAa,KAAK,YAAY/gK,CAAG,EACjC,YAAK,QAAQ,kBAAoBA,EAAI,OAAO,CAAC,IAAM,KAAO88J,GAAYiE,EAC/DlgJ,EAAA,IAAI,OAAOi8I,CAAQ,EAEnBj8I,EAAA,GAEJA,EAAS7gB,CAClB,GACC,CACD,IAAK,mBACL,MAAO,SAA0Bs+J,EAAgB,CAC/C,IAAIh1E,EAASg1E,EACT,QAAK,QAAQ,iBAAkB,CAC7B,IAAAxB,EAAW,KAAK,aAAaxzE,CAAM,EACvC,GAAIwzE,EAAU,CACZA,EAAW,IAAI,OAAO,KAAK,oBAAoB,QAAQ,EACvD,IAAI5xJ,EAAQo+E,EAAOwzE,EAAS,MAAM,IAAM,KAAOxzE,EAAOwzE,EAAS,MAAM,IAAM,IAAMA,EAAS,OAAS,EAAIA,EAAS,OACvGxzE,IAAO,OAAOp+E,CAAK,CAC9B,CACF,CACO,YAAK,KAAKo+E,CAAM,CACzB,GACC,CACD,IAAK,wBACL,MAAO,UAAiC,CACtC,KAAK,SAAS,eAAe,CAC/B,GACC,CACD,IAAK,oBACL,MAAO,UAA6B,CAC9B,KAAK,QAAQ,iBAAmB,SAC7B,oBAAiB,OAAO,oBAAoB,YAC5C,KAAK,SAAS,OACZ,gBAAW,KAAK,cAAc,EAErC,KAAK,0BAA0B,EAEnC,GACC,CACD,IAAK,cACL,MAAO,UAAuB,CACxB,OAAO,oBACL,KAAK,SAAS,OACX,0BAAqB,KAAK,SAAS,KAAK,EAE/C,KAAK,mBAAmB,GAE1B,KAAK,0BAA0B,CACjC,GACC,CACD,IAAK,UACL,MAAO,UAAmB,CACpB,IAAAx5D,EAAO,KAAK,SAAS,KACrB,QAAK,QAAQ,cAAe,CAC9B,KAAK,eAAe,EACpB,KAAK,aAAa,oBAAoB,QAAS,KAAK,wBAAwB,EAC5E,KAAK,eAAe,oBAAoB,UAAW,KAAK,4BAA4B,EAChF,IAAAukB,EAAQ,KAAK,mBACbA,GACIA,EAAA,oBAAoB,QAAS,KAAK,iBAAiB,CAC7D,CACI,KAAK,aAAevkB,GACjBA,EAAA,oBAAoB,SAAU,KAAK,wBAAwB,EAC9D,KAAK,QAAQ,mBACXA,GACGA,EAAA,oBAAoB,SAAU,KAAK,wBAAwB,EAClE,KAAK,SAAS,oBAAoB,OAAQ,KAAK,wBAAwB,GAEzE,KAAK,SAAS,oBAAoB,QAAS,KAAK,iBAAiB,EACjE,KAAK,SAAS,oBAAoB,MAAO,KAAK,qBAAqB,EACnE,KAAK,SAAS,oBAAoB,QAAS,KAAK,qBAAqB,EAChE,cAAS,gBAAgB,wBAAwB,EAClD,IAAA0pB,EAAU,KAAK,SAAS,WAC5BA,EAAQ,WAAW,aAAa,KAAK,SAAUA,CAAO,EAC9CA,EAAA,WAAW,YAAYA,CAAO,EACtC,OAAO,OAAO,oBAAoB,UAAU,KAAK,EAAE,CACrD,GACC,CACD,IAAK,eACL,MAAO,UAAwB,CAC7B,OAAI,OAAO,kBACF,kBAAkB,aAAa,KAAK,eAAkB,OAAK,oBAAoB,IAAI,EAErF,EACT,GACC,CACD,IAAK,YACL,MAAO,SAAmB0H,EAAQ,CAChC,GAAI,OAAO,kBAAmB,CACxB,IAAA26G,EAAO,KAAK,oBAAoB,KACpC,OAAO,kBAAkB,aAAa,KAAK,eAAe,EAAGA,EAAM36G,CAAM,CAC3E,CACO,QACT,GACC,CACD,IAAK,gBACL,MAAO,UAAyB,CAC9B,OAAI,OAAO,kBACF,kBAAkB,cAAc,KAAK,eAAkB,OAAK,oBAAoB,IAAI,EAEtF,GACT,GACC,CACD,IAAK,yBACL,MAAO,UAAkC,CACvC,OAAO,KAAK,mBACd,GACC,CACD,IAAK,qBACL,MAAO,UAA8B,CACnC,GAAI,OAAO,kBAAmB,CACxB,IAAA26G,EAAO,KAAK,oBAAoB,KACpC,OAAO,kBAAkB,mBAAmB,KAAK,iBAAkBA,CAAI,CACzE,CACO,SACT,GACC,CACD,IAAK,gBACL,MAAO,UAAyB,CAC9B,IAAI77J,EAAM,KAAK,eAAe,EAAE,KAAK,EACjC87J,EAAc,KAAK,QAAQ,aAAe,KAAK,oBAAoB,KAAO,GAC9E,OAAO,OAAO,kBAAoB,kBAAkB,cAAc97J,EAAK87J,CAAW,EAAI,IACxF,GACC,CACD,IAAK,aACL,MAAO,SAAoBkF,EAAqB,CAC1C,IAAAlF,EAAckF,EAAoB,cACjC,KAAK,kBAAkB,UAAU,SAAS,QAAQ,OAAOlF,CAAW,CAAC,IACxE,KAAK,SAASA,CAAW,EACzB,KAAK,gBAAgB,KAAK,oBAAoB,SAAU,EAAK,EAC7D,KAAK,sBAAsB,EAE/B,GACC,CACD,IAAK,YACL,MAAO,SAAmBxyE,EAAQ,CAC5B,IAAAu2E,EAAc,KAAK,sBAAsBv2E,CAAM,EACnD,KAAK,qBAAqBA,CAAM,EAC5Bu2E,GACF,KAAK,sBAAsB,CAE/B,GACC,CACD,IAAK,2BACL,MAAO,SAAkCz9J,EAAM,CAC7C,KAAK,QAAQ,sBAAwBA,EACrC,KAAK,mBAAmB,CAC1B,CACD,EAAC,EACKm5J,CAAA,IAETL,EAAoB,eAAiB,UAAW,CACvC,OAAAP,CAAA,EAET,IAAIsG,EAAe,SAAuBnpH,EAAMopH,EAAeC,EAAe,CACxE,IAAAlhK,EAAS,SAAS,cAAc,QAAQ,EAC5CA,EAAO,OAAS,UAAW,CACzBo7J,EAAgB,aAAa,EACzB6F,GACYA,GAAA,EAElBjhK,EAAO,QAAU,UAAW,CAC1Bo7J,EAAgB,0BAA0B,EACtC8F,GACYA,GAAA,EAElBlhK,EAAO,UAAY,iBACnBA,EAAO,MAAQ,GACfA,EAAO,IAAM63C,EACJ,cAAK,YAAY73C,CAAM,GAEd,OAAAi7J,EAAA,UAAY,SAASpjH,EAAM,CAC7C,GAAI,CAAC,OAAO,mBAAqB,CAAC,OAAO,oBAAoB,0BAA2B,CAElF,GADJ,OAAO,oBAAoB,0BAA4B,GACnD,OAAO,QAAY,IACrB,OAAO,IAAI,QAAQ,SAAS3lC,EAASC,EAAQ,CACpC,OAAA6uJ,EAAanpH,EAAM3lC,EAASC,CAAM,EAC1C,EAEH6uJ,EAAanpH,CAAI,CACnB,CACO,aAETojH,EAAoB,SAAW5iH,EAC/B4iH,EAAoB,QAAU,UACvB,SAAS9xJ,EAAOrI,EAAS,CAC9B,IAAIqgK,EAAM,IAAI9F,EAAIlyJ,EAAOrI,CAAO,EAChC,OAAAqgK,EAAI,MAAM,EACJh4J,EAAA,aAAa,yBAA0Bg4J,EAAI,EAAE,EACnD,OAAO,oBAAoB,UAAUA,EAAI,EAAE,EAAIA,EACxCA,CAAA,CACT,GACA,CACH,CACH,CACF,CAAC,EAGGC,IAAyBhkK,GAAW,CACtC,uCAAuChB,EAASC,EAAQ,CACtDA,EAAO,QAAUm+J,KACnB,CACF,CAAC,EACD,MAAA6G,GAAeD,IAAuB,GC9oCrC,UAAW,CACV,IAAIE,EAAK,MAAQ,KACjB,SAASt4H,EAAE9rC,EAAGC,EAAG,CACfD,EAAIA,EAAE,MAAM,GAAG,EACf,IAAIulC,GAAI6+H,EACRpkK,EAAE,CAAC,IAAKulC,IAAoB,OAAOA,GAAE,WAAxB,KAAsCA,GAAE,WAAW,OAASvlC,EAAE,CAAC,CAAC,EAC7E,QAAS+rC,GAAG/rC,EAAE,SAAW+rC,GAAI/rC,EAAE,UAC7BA,EAAE,QAAqBC,IAAX,OAAeslC,GAAEwG,EAAC,GAAKxG,GAAEwG,EAAC,IAAM,OAAO,UAAUA,EAAC,EAAIxG,GAAIA,GAAEwG,EAAC,EAAIxG,GAAIA,GAAEwG,EAAC,EAAI,GAAKxG,GAAEwG,EAAC,EAAI9rC,CACvG,CACD,SAASwJ,EAAEzJ,EAAGC,EAAG,CACf,SAASslC,IAAI,CACZ,CACDA,GAAE,UAAYtlC,EAAE,UAChBD,EAAE,EAAIC,EAAE,UACRD,EAAE,UAAY,IAAIulC,GAClBvlC,EAAE,UAAU,YAAcA,EAC1BA,EAAE,GAAK,SAAS+rC,GAAGt1B,GAAGu5C,GAAG,CACvB,QAASC,GAAI,MAAM,UAAU,OAAS,CAAC,EAAGJ,GAAI,EAAGA,GAAI,UAAU,OAAQA,KACrEI,GAAEJ,GAAI,CAAC,EAAI,UAAUA,EAAC,EACxB,OAAO5vD,EAAE,UAAUwW,EAAC,EAAE,MAAMs1B,GAAGkkB,EAAC,CACtC,CACG,CAED,SAASo0G,EAAGrkK,EAAG,CACb,IAAIC,EAAI,CAAE,EAAEslC,GAAI,EAAGwG,GACnB,IAAKA,MAAK/rC,EACRC,EAAEslC,IAAG,EAAIvlC,EAAE+rC,EAAC,EACd,OAAO9rC,CACR,CAED,SAASqkK,EAAGtkK,EAAGC,EAAG,CAChBD,EAAE,KAAKC,GAAKskK,CAAE,CACf,CACD,SAASA,EAAGvkK,EAAGC,EAAG,CAChB,OAAOD,EAAIC,EAAI,EAAID,EAAIC,EAAI,GAAK,CACjC,CAED,SAASukK,EAAGxkK,EAAGC,EAAG,CAMhB,OALA,KAAK,EAAID,EACT,KAAK,EAAI,CAAC,CAACC,EAAE,EACb,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,KACX,KAAK,EAAI,GACD,KAAK,EAAC,CACZ,KAAKwkK,EACL,KAAKC,EACL,KAAKC,EACL,KAAKC,EACL,KAAKC,EACL,KAAKC,EACL,KAAKC,EACH,KAAK,EAAI,EACZ,CACD,KAAK,EAAI9kK,EAAE,YACZ,CACD,IAAI8kK,EAAK,EAAGD,EAAK,EAAGL,EAAK,EAAGC,EAAK,EAAGC,EAAK,EAAGC,EAAK,GAAIC,EAAK,GAC1D,SAASG,EAAGhlK,EAAGC,EAAG,CAGhB,IAFA,KAAK,EAAID,EACT,KAAK,EAAI,GACJA,EAAI,EAAGA,EAAIC,EAAE,OAAQD,IAAK,CAC7B,IAAIulC,GAAItlC,EAAED,CAAC,EACX,KAAK,EAAEulC,GAAE,CAAC,EAAIA,EACf,CACF,CACD,SAAS0/H,EAAGjlK,EAAG,CACb,OAAAA,EAAIqkK,EAAGrkK,EAAE,CAAC,EACVskK,EAAGtkK,EAAG,SAASC,EAAGslC,GAAG,CACnB,OAAOtlC,EAAE,EAAIslC,GAAE,CACrB,CAAK,EACMvlC,CACR,CAED,SAAS0S,GAAI,CACX,KAAK,EAAI,GACT,KAAK,EAAI,KAAK,EAAC,EAAG,EAClB,KAAK,EAAI,KAAK,EAAI,IACnB,CACDA,EAAE,UAAU,IAAM,SAAS1S,EAAG,CAC5B,OAAe,KAAK,EAAEA,EAAE,CAAC,GAAlB,IACX,EACE0S,EAAE,UAAU,IAAM,SAAS1S,EAAGC,EAAG,CAC/B,OAAO,EAAE,KAAMD,EAAE,EAAGC,CAAC,CACzB,EACEyS,EAAE,UAAU,IAAM,SAAS1S,EAAGC,EAAG,CAC/B2xD,EAAE,KAAM5xD,EAAE,EAAGC,CAAC,CAClB,EACEyS,EAAE,UAAU,IAAM,SAAS1S,EAAGC,EAAG,CAC/B0vD,EAAE,KAAM3vD,EAAE,EAAGC,CAAC,CAClB,EACE,SAAS0c,EAAE3c,EAAGC,EAAG,CACf,QAASslC,GAAI0/H,EAAGjlK,EAAE,EAAC,CAAE,EAAG+rC,GAAI,EAAGA,GAAIxG,GAAE,OAAQwG,KAAK,CAChD,IAAIt1B,GAAI8uB,GAAEwG,EAAC,EAAGikB,GAAIv5C,GAAE,EACpB,GAAYxW,EAAE,EAAE+vD,EAAC,GAAb,KAAgB,CAClBhwD,EAAE,GAAK,OAAOA,EAAE,EAAEyW,GAAE,CAAC,EACrB,IAAIw5C,GAAUx5C,GAAE,GAAR,IAAmBA,GAAE,GAAR,GACrB,GAAIA,GAAE,EAAG,CACPA,GAAIs5C,EAAE9vD,EAAG+vD,EAAC,EACV,QAASH,GAAI,EAAGA,GAAIp5C,GAAE,OAAQo5C,KAC5BF,EAAE3vD,EAAGgwD,GAAGC,GAAIx5C,GAAEo5C,EAAC,EAAE,MAAO,EAAGp5C,GAAEo5C,EAAC,CAAC,CAClC,MACCp5C,GAAI7B,EAAE3U,EAAG+vD,EAAC,EAAGC,IAAKA,GAAIr7C,EAAE5U,EAAGgwD,EAAC,GAAKrzC,EAAEszC,GAAGx5C,EAAC,EAAIm7C,EAAE5xD,EAAGgwD,GAAGv5C,GAAE,OAAO,EAAIm7C,EAAE5xD,EAAGgwD,GAAGv5C,EAAC,CAC5E,CACF,CACF,CACD/D,EAAE,UAAU,MAAQ,UAAW,CAC7B,IAAI1S,EAAI,IAAI,KAAK,YACjB,OAAAA,GAAK,OAASA,EAAE,EAAI,CAAE,EAAEA,EAAE,IAAMA,EAAE,EAAI,CAAE,GAAG2c,EAAE3c,EAAG,IAAI,GAC7CA,CACX,EACE,SAAS4U,EAAE5U,EAAGC,EAAG,CACf,IAAIslC,GAAIvlC,EAAE,EAAEC,CAAC,EACb,GAAYslC,IAAR,KACF,OAAO,KACT,GAAIvlC,EAAE,EAAG,CACP,GAAI,EAAEC,KAAKD,EAAE,GAAI,CACf,IAAI+rC,GAAI/rC,EAAE,EAAGyW,GAAIzW,EAAE,EAAEC,CAAC,EACtB,GAAYslC,IAAR,KACF,GAAI9uB,GAAE,EAAG,CACP,QAASu5C,GAAI,GAAIC,GAAI,EAAGA,GAAI1qB,GAAE,OAAQ0qB,KACpCD,GAAEC,EAAC,EAAIlkB,GAAE,EAAEt1B,GAAG8uB,GAAE0qB,EAAC,CAAC,EACpB1qB,GAAIyqB,EACL,MACCzqB,GAAIwG,GAAE,EAAEt1B,GAAG8uB,EAAC,EAChB,OAAOvlC,EAAE,EAAEC,CAAC,EAAIslC,EACjB,CACD,OAAOvlC,EAAE,EAAEC,CAAC,CACb,CACD,OAAOslC,EACR,CACD,SAAS,EAAEvlC,EAAGC,EAAGslC,GAAG,CAClB,IAAIwG,GAAIn3B,EAAE5U,EAAGC,CAAC,EACd,OAAOD,EAAE,EAAEC,CAAC,EAAE,EAAI8rC,GAAExG,IAAK,CAAC,EAAIwG,EAC/B,CACD,SAAS3qC,EAAEpB,EAAGC,EAAG,CACf,GAAYD,EAAE,EAAEC,CAAC,GAAb,KACFD,EAAI,EAAEA,EAAGC,EAAG,MAAM,OAElBD,EAAG,CAED,GADAA,EAAIA,EAAE,EAAEC,CAAC,EACMD,EAAE,IAAb,OACF,GAAIC,EAAID,EAAE,EAAGC,IAAM,QACjBD,EAAE,EAAI,WACCC,IAAM,OACbD,EAAE,EAAI,UACCC,IAAM,OACbD,EAAE,EAAIA,EAAE,EAAI,IAAM,OACf,CACHA,EAAI,IAAIC,EACR,MAAMD,CACP,CACHA,EAAIA,EAAE,CACP,CACH,OAAOA,CACR,CACD,SAAS+vD,EAAE/vD,EAAGC,EAAG,CACf,OAAO2U,EAAE5U,EAAGC,CAAC,GAAK,EACnB,CACD,SAASF,EAAEC,EAAGC,EAAG,CACf,OAAOD,EAAE,EAAEC,CAAC,EAAE,EAAYD,EAAE,EAAEC,CAAC,GAAb,KAAiBD,EAAE,EAAEC,CAAC,EAAE,OAAS,EAAYD,EAAE,EAAEC,CAAC,GAAb,KAAiB,EAAI,CAC7E,CACD,SAAS2xD,EAAE5xD,EAAGC,EAAGslC,GAAG,CAClBvlC,EAAE,EAAEC,CAAC,EAAIslC,GACTvlC,EAAE,IAAMA,EAAE,EAAEC,CAAC,EAAIslC,GAClB,CACD,SAASoqB,EAAE3vD,EAAGC,EAAGslC,GAAG,CAClBvlC,EAAE,EAAEC,CAAC,IAAMD,EAAE,EAAEC,CAAC,EAAI,IACpBD,EAAE,EAAEC,CAAC,EAAE,KAAKslC,EAAC,EACbvlC,EAAE,GAAK,OAAOA,EAAE,EAAEC,CAAC,CACpB,CACD,SAASg7B,EAAEj7B,EAAGC,EAAG,CACf,IAAIslC,GAAI,CAAE,EAAEwG,GACZ,IAAKA,MAAK9rC,EACH8rC,IAAL,GAAUxG,GAAE,KAAK,IAAIi/H,EAAGz4H,GAAG9rC,EAAE8rC,EAAC,CAAC,CAAC,EAClC,OAAO,IAAIi5H,EAAGhlK,EAAGulC,EAAC,CACnB,CAED,SAASorB,IAAI,CACZ,CACDA,GAAE,UAAU,EAAI,SAAS3wD,EAAG,CAC1B,UAAIA,EAAE,EACA,MAAM,eAAe,CAC/B,EACE2wD,GAAE,UAAU,EAAI,SAAS3wD,EAAGC,EAAG,CAC7B,GAAUD,EAAE,GAAR,IAAmBA,EAAE,GAAR,GACf,OAAOC,aAAayS,EAAIzS,EAAI,KAAK,EAAED,EAAE,EAAE,UAAU,EAAG,EAAEC,CAAC,EACzD,GAAUD,EAAE,GAAR,GACF,OAAoB,OAAOC,GAApB,UAAyBixD,GAAE,KAAKjxD,CAAC,IAAMD,EAAI,OAAOC,CAAC,EAAG,EAAID,GAAKA,EAAIC,EAC5E,GAAI,CAACD,EAAE,EACL,OAAOC,EAET,GADAD,EAAIA,EAAE,EACFA,IAAM,QACR,GAAiB,OAAOC,GAApB,SACF,OAAO,OAAOA,CAAC,UACRD,IAAM,QAAuB,OAAOC,GAApB,WAAyCA,IAAf,YAAoCA,IAAhB,aAA+BA,IAAV,OAAeixD,GAAE,KAAKjxD,CAAC,GACnH,OAAO,OAAOA,CAAC,EACjB,OAAOA,CACX,EACE,IAAIixD,GAAI,aACR,SAASN,IAAI,CACZ,CACDnnD,EAAEmnD,GAAGD,EAAC,EACNC,GAAE,UAAU,EAAI,SAAS5wD,EAAGC,EAAG,CAC7B,OAAAD,EAAI,IAAIA,EAAE,EACVA,EAAE,EAAI,KACNA,EAAE,EAAIC,EACND,EAAE,EAAI,GACCA,CACX,EACE,SAASixD,IAAI,CACZ,CACDxnD,EAAEwnD,GAAGL,EAAC,EACNK,GAAE,UAAU,EAAI,SAASjxD,EAAGC,EAAG,CAC7B,OAAYD,EAAE,GAAP,EAAW,CAAC,CAACC,EAAI0wD,GAAE,UAAU,EAAE,MAAM,KAAM,SAAS,CAC/D,EACEM,GAAE,UAAU,EAAI,SAASjxD,EAAGC,EAAG,CAC7B,OAAOgxD,GAAE,EAAE,EAAE,KAAK,KAAMjxD,EAAGC,CAAC,CAChC,EACE,SAAS8wD,GAAE/wD,EAAGC,EAAG,CACPD,GAAR,MAAa,KAAK,EAAE,MAAM,KAAM,SAAS,CAC1C,CACD+wD,GAAE,UAAU,EAAI,GAChBA,GAAE,UAAU,IAAM,SAAS/wD,EAAG,CAC5B,KAAK,EAAI,GAAKA,CAClB,EACE+wD,GAAE,UAAU,EAAI,SAAS/wD,EAAGC,EAAGslC,GAAG,CAEhC,GADA,KAAK,GAAK,OAAOvlC,CAAC,EACNC,GAAR,KACF,QAAS8rC,GAAI,EAAGA,GAAI,UAAU,OAAQA,KACpC,KAAK,GAAK,UAAUA,EAAC,EACzB,OAAO,IACX,EACEglB,GAAE,UAAU,SAAW,UAAW,CAChC,OAAO,KAAK,CAChB,EACE,SAASK,IAAI,CACX1+C,EAAE,KAAK,IAAI,CACZ,CACDjJ,EAAE2nD,GAAG1+C,CAAC,EACN,IAAIwyJ,GAAK,KACT,SAAShzG,GAAI,CACXx/C,EAAE,KAAK,IAAI,CACZ,CACDjJ,EAAEyoD,EAAGx/C,CAAC,EACN,IAAIyyJ,EAAK,KACT,SAASpzG,GAAI,CACXr/C,EAAE,KAAK,IAAI,CACZ,CACDjJ,EAAEsoD,EAAGr/C,CAAC,EACN,IAAI0yJ,GAAK,KACTh0G,GAAE,UAAU,EAAI,UAAW,CACzB,IAAIpxD,EAAIklK,GACR,OAAAllK,IAAMklK,GAAKllK,EAAIi7B,EAAEm2B,GAAG,CAAE,EAAG,CAAE,KAAM,eAAgB,EAAG,kCAAoC,EAAG,CAAE,KAAM,UAAW,SAAU,GAAM,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,SAAU,SAAU,GAAM,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,yBAA0B,EAAG,GAAM,EAAG,EAAG,KAAM,MAAM,EAAI,EAAG,CAAE,KAAM,kCAAmC,EAAG,EAAG,KAAM,MAAM,EAAI,EAAG,CAAE,KAAM,2CAA4C,EAAG,EAAG,aAAc,GAAO,KAAM,OAAO,EAAI,EAAG,CAAE,KAAM,wCAAyC,EAAG,EAAG,KAAM,MAAM,CAAI,IAC7fpxD,CACX,EACEoxD,GAAE,EAAIA,GAAE,UAAU,EAClBc,EAAE,UAAU,EAAI,UAAW,CACzB,IAAIlyD,EAAImlK,EACR,OAAAnlK,IAAMmlK,EAAKnlK,EAAIi7B,EAAEi3B,EAAG,CAAE,EAAG,CAAE,KAAM,kBAAmB,EAAG,mCAAqC,EAAE,EAAG,CAAE,KAAM,0BAA2B,EAAG,EAAG,KAAM,MAAM,EAAI,EAAG,CAAE,KAAM,kBAAmB,EAAG,GAAM,EAAG,EAAG,KAAM,QAAU,GAAI,CAAE,KAAM,6BAA8B,EAAG,GAAM,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,iBAAkB,EAAG,EAAG,KAAM,MAAQ,EAAE,GAC5UlyD,CACX,EACEkyD,EAAE,EAAIA,EAAE,UAAU,EAClBH,EAAE,UAAU,EAAI,UAAW,CACzB,IAAI/xD,EAAIolK,GACR,OAAAplK,IAAMolK,GAAKplK,EAAIi7B,EAAE82B,EAAG,CAClB,EAAG,CAAE,KAAM,gBAAiB,EAAG,iCAAmC,EAClE,EAAG,CAAE,KAAM,eAAgB,EAAG,GAAI,KAAMG,CAAG,EAC3C,EAAG,CAAE,KAAM,aAAc,EAAG,GAAI,KAAMA,CAAG,EACzC,EAAG,CAAE,KAAM,SAAU,EAAG,GAAI,KAAMA,CAAG,EACrC,EAAG,CAAE,KAAM,YAAa,EAAG,GAAI,KAAMA,CAAG,EACxC,EAAG,CAAE,KAAM,eAAgB,EAAG,GAAI,KAAMA,CAAG,EAC3C,EAAG,CAAE,KAAM,cAAe,EAAG,GAAI,KAAMA,CAAG,EAC1C,EAAG,CAAE,KAAM,kBAAmB,EAAG,GAAI,KAAMA,CAAG,EAC9C,EAAG,CAAE,KAAM,OAAQ,EAAG,GAAI,KAAMA,CAAG,EACnC,GAAI,CAAE,KAAM,QAAS,EAAG,GAAI,KAAMA,CAAG,EACrC,GAAI,CAAE,KAAM,MAAO,EAAG,GAAI,KAAMA,CAAG,EACnC,GAAI,CAAE,KAAM,YAAa,EAAG,GAAI,KAAMA,CAAG,EACzC,GAAI,CAAE,KAAM,YAAa,EAAG,GAAI,KAAMA,CAAG,EACzC,GAAI,CAAE,KAAM,aAAc,EAAG,GAAI,KAAMA,CAAG,EAC1C,GAAI,CAAE,KAAM,gBAAiB,EAAG,GAAI,KAAMA,CAAG,EAC7C,GAAI,CAAE,KAAM,mBAAoB,EAAG,GAAI,KAAMA,CAAG,EAChD,GAAI,CAAE,KAAM,eAAgB,EAAG,GAAI,KAAMA,CAAG,EAC5C,GAAI,CAAE,KAAM,4BAA6B,EAAG,GAAI,KAAMA,CAAG,EACzD,EAAG,CAAE,KAAM,KAAM,SAAU,GAAM,EAAG,EAAG,KAAM,MAAQ,EACrD,GAAI,CAAE,KAAM,eAAgB,EAAG,EAAG,KAAM,MAAQ,EAChD,GAAI,CAAE,KAAM,uBAAwB,EAAG,EAAG,KAAM,MAAQ,EACxD,GAAI,CAAE,KAAM,iCAAkC,EAAG,EAAG,KAAM,MAAQ,EAClE,GAAI,CAAE,KAAM,kBAAmB,EAAG,EAAG,KAAM,MAAQ,EACnD,GAAI,CAAE,KAAM,wBAAyB,EAAG,EAAG,KAAM,MAAQ,EACzD,GAAI,CACF,KAAM,8BACN,EAAG,EACH,KAAM,MACP,EACD,GAAI,CAAE,KAAM,iCAAkC,EAAG,EAAG,KAAM,MAAQ,EAClE,GAAI,CAAE,KAAM,qCAAsC,EAAG,EAAG,aAAc,GAAO,KAAM,OAAS,EAC5F,GAAI,CAAE,KAAM,gBAAiB,EAAG,GAAM,EAAG,GAAI,KAAMd,EAAG,EACtD,GAAI,CAAE,KAAM,qBAAsB,EAAG,GAAM,EAAG,GAAI,KAAMA,EAAG,EAC3D,GAAI,CAAE,KAAM,wBAAyB,EAAG,EAAG,aAAc,GAAO,KAAM,OAAS,EAC/E,GAAI,CAAE,KAAM,iBAAkB,EAAG,EAAG,KAAM,MAAQ,CACnD,IACMpxD,CACX,EACE+xD,EAAE,EAAIA,EAAE,UAAU,EAClB,SAASV,GAAI,CACX3+C,EAAE,KAAK,IAAI,CACZ,CACDjJ,EAAE4nD,EAAG3+C,CAAC,EACN,IAAI2yJ,GAAK,KAAMC,EAAK,CAAE,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAE,EACzDj0G,EAAE,UAAU,EAAI,UAAW,CACzB,IAAIrxD,EAAIqlK,GACR,OAAArlK,IAAMqlK,GAAKrlK,EAAIi7B,EAAEo2B,EAAG,CAAE,EAAG,CAAE,KAAM,cAAe,EAAG,+BAA+B,EAAI,EAAG,CAAE,KAAM,eAAgB,SAAU,GAAM,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,kBAAmB,SAAU,GAAM,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,YAAa,EAAG,EAAG,KAAM,MAAM,EAAI,EAAG,CAAE,KAAM,uBAAwB,EAAG,EAAG,KAAM,OAAS,EAAE,EAAG,CAAE,KAAM,0BAA2B,EAAG,EAAG,aAAc,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,YAAa,EAAG,EAAG,KAAM,MAAQ,EAAE,EAAG,CAAE,KAAM,sBAAuB,EAAG,GAAI,aAAc,EAAG,KAAMi0G,CAAI,EAAE,EAAG,CACrgB,KAAM,kCACN,EAAG,EACH,KAAM,MACP,EAAE,GACItlK,CACX,EACEqxD,EAAE,KAAOA,EACTA,EAAE,KAAK,EAAIA,EAAE,UAAU,EACvB,IAAIW,EAAI,CACN,EAAG,6EAA6E,MAAM,GAAG,EACzF,EAAG,CAAC,KAAM,IAAI,EACd,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,KAAM,IAAI,EACf,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,KAAM,KAAM,KAAM,IAAI,EAC3B,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,KAAM,IAAI,EACf,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,KAAM,KAAM,IAAI,EACrB,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,GAAI,CAAC,IAAI,EACT,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,IAAI,EAChB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,IAAI,EAChB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,IAAI,EAChB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,IAAI,EAChB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,KAAM,IAAI,EACtB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAM,IAAI,EAChB,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,KAAK,EACX,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,EACV,IAAK,CAAC,IAAI,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","names":["require_application_003","__commonJSMin","exports","module","__create","__defProp","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","__defNormalProp","obj","key","value","__require","x","a","b","__commonJS","cb","mod","__export","target","all","name","__copyProps","to","from","except","desc","__toESM","isNodeMode","__publicField","require_jquery","global","factory","w","window2","noGlobal","arr","getProto","slice","flat","array","push","indexOf","class2type","toString","hasOwn","fnToString","ObjectFunctionString","support","isFunction","isWindow","document","preservedScriptAttributes","DOMEval","code","node","doc","i","val","script","toType","version","jQuery","selector","context","num","elems","ret","callback","elem","_elem","len","j","options","src","copy","copyIsArray","clone","length","deep","msg","proto","Ctor","isArrayLike","arr2","results","first","second","invert","callbackInverse","matches","callbackExpect","arg","_i","type","Sizzle","window3","support2","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","document2","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","expando","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","hasOwn2","pop","pushNative","push2","slice2","indexOf2","list","i2","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rtrim2","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml2","rinputs","rheader","rnative","rquickExpr2","rsibling","runescape","funescape","escape","nonHex","high","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","els","Sizzle2","seed","m","nid","match","groups","newSelector","newContext","nodeType","testContext","toSelector","keys","cache","markFunction","fn","assert","el","addHandle","attrs","handler","arr3","siblingCheck","cur","diff","createInputPseudo","createButtonPseudo","createDisabledPseudo","disabled","createPositionalPseudo","argument","matches2","matchIndexes","namespace","docElem2","hasCompare","subWindow","id","attrId","node2","tag","tmp","className","input","adown","bup","compare","aup","ap","bp","expr","elements","sel","duplicates","excess","unquoted","nodeNameSelector","nodeName2","pattern","operator","check","result","what","_argument","last","simple","forward","ofType","_context","xml","uniqueCache","outerCache","nodeIndex","start","dir2","parent","useCache","pseudo","args","idx","matched","matcher","unmatched","text","lang","elemLang","hash","attr","_matchIndexes","setFilters","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","map","filter","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","find","compiled","isXML2","_name","dir","until","truncate","siblings","n","rneedsContext","nodeName","rsingleTag","winnow","qualifier","not","elem2","self","rootjQuery","rquickExpr","init","root","rparentsprev","guaranteedUnique","targets","l","selectors","sibling","rnothtmlwhite","createOptions","object","_","flag","firing","memory","fired","locked","queue","firingIndex","fire","add","index","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","value2","func","tuples","state","promise","deferred","fns","newDefer","tuple","returned","onFulfilled","onRejected","onProgress","maxDepth","depth","deferred2","special","that","mightThrow","then","process","e","stateString","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","error","stack","readyList","wait","completed","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","camelCase","string","acceptData","owner","Data","data","prop","dataPriv","dataUser","rbrace","rmultiDash","getData","dataAttr","data2","startLength","hooks","next","setter","count","defer","pnum","rcssNum","cssExpand","documentElement","isAttached","composed","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","initialInUnit","defaultDisplayMap","getDefaultDisplay","display","showHide","show","values","rcheckableType","rtagName","rscriptType","fragment","div","wrapMap","getAll","setGlobalEval","refElements","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","nodes","rtypenamespace","returnTrue","returnFalse","expectSync","safeActiveElement","on","types","one","origFn","event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","mappedTypes","origCount","nativeEvent","handlerQueue","matchedHandlers","matchedSelectors","delegateCount","hook","originalEvent","leverageNative","expectSync2","notAsync","saved","handle","props","delegateType","orig","fix","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","remove","keepData","html","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","original","insert","rnumnonpx","getStyles","view","swap","old","rboxStyle","computeStyleTests","container","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","reliableTrDimensionsVal","table","tr","trChild","trStyle","curCSS","computed","width","minWidth","maxWidth","style","addGetHookIf","conditionFn","hookFn","cssPrefixes","emptyStyle","vendorProps","vendorPropName","capName","finalPropName","final","rdisplayswap","rcustomProp","cssShow","cssNormalTransform","setPositiveNumber","subtract","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","getWidthOrHeight","boxSizingNeeded","valueIsBorderBox","offsetProp","origName","isCustomProp","scrollboxSizeBuggy","prefix","suffix","expanded","parts","name2","Tween","end","easing","percent","eased","p","fxNow","inProgress","rfxtypes","rrun","schedule","createFxNow","genFx","includeWidth","which","createTween","animation","Animation","defaultPrefilter","opts","toggle","oldfire","propTween","restoreDisplay","isBox","anim","hidden","dataShow","propFilter","specialEasing","properties","stopped","tick","currentTime","index2","length2","gotoEnd","prepend","speed","opt","empty","optall","doAnimation","clearQueue","stopQueue","stop","dequeue","timers","cssFn","timer","time","timeout","boolHook","attrHandle","nType","attrNames","getter","lowercaseName","rfocusable","rclickable","tabindex","stripAndCollapse","getClass","classesToArray","classes","curValue","clazz","finalValue","j2","stateVal","isValidValue","classNames","rreturn","option","max","optionSet","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","attaches","location","nonce","rquery","parserErrorElem","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","s","valueOrFunction","val2","r20","rhash","rantiCache","rheaders","rlocalProtocol","rnoContent","rprotocol","prefilters","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","inspect","selected","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","contents","ajaxConvert","response","isSuccess","conv2","current","conv","prev","converters","settings","url","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","completed2","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","statusText","finalText","status","nativeStatusText","headers","success","modified","htmlIsFunction","xhrSuccessStatus","xhrSupported","errorCallback","complete","xhr","evt","oldCallbacks","rjsonp","originalSettings","callbackName","overwritten","responseContainer","jsonProp","body","keepScripts","parsed","params","off","responseText","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","position","curElem","rect","win","offsetParent","offset","parentOffset","top","method2","defaultExtra","funcName","margin","type2","fnOver","fnOut","rtrim","proxy","hold","_jQuery","_$","__vite__cjsImport0_jquery","turbo_es2017_esm_exports","FrameElement","FrameLoadingStyle","FrameRenderer","PageRenderer","PageSnapshot","StreamActions","StreamElement","StreamSourceElement","clearCache","connectStreamSource","disconnectStreamSource","navigator$1","registerAdapter","renderStreamMessage","session","setConfirmMethod","setFormMode","setProgressBarDelay","visit","BuiltInHTMLElement","wrapperForTheName","prototype","submitter","validateSubmitter","form","raise","errorConstructor","message","submittersByForm","findSubmitterFromClickTarget","element","candidate","clickCaptured","FrameLoadingStyle2","_FrameElement","frameLoadingStyleFromString","_a","_b","expandURL","locatable","getAnchor","anchorMatch","getAction","action","getExtension","getLastPathComponent","isHTML","isPrefixedBy","baseURL","getPrefix","locationIsVisitable","location2","rootLocation","getRequestURL","anchor","toCacheKey","urlsAreEqual","left","right","getPathComponents","addTrailingSlash","FetchResponse","activateScriptElement","createdScriptElement","cspNonce","getMetaContent","copyElementAttributes","destinationElement","sourceElement","createDocumentFragment","template","dispatch","eventName","cancelable","detail","nextAnimationFrame","nextEventLoopTick","nextMicrotask","parseHTMLDocument","unindent","strings","lines","interpolate","indent","line","uuid","getAttribute","attributeName","hasAttribute","markAsBusy","clearBusyState","waitForLoad","timeoutInMilliseconds","onComplete","getHistoryMethodForAction","isAction","getVisitAction","getMetaElement","setMetaContent","findClosestRecursively","FetchMethod","FetchMethod2","fetchMethodFromString","FetchRequest","delegate","_value","fetchOptions","fetchResponse","mimeType","requestInterception","AppearanceObserver","entries","lastEntry","StreamMessage","importStreamElements","streamElement","inertScriptElement","FormSubmissionState","FormSubmissionState2","FormEnctype","FormEnctype2","formEnctypeFromString","encoding","FormSubmission","_FormSubmission","_element","_submitter","formElement","mustRedirect","buildFormData","mergeFormDataEntries","formElementAction","initialized","requesting","confirmationMessage","stopping","request","getCookieValue","_request","responseSucceededWithoutRedirect","formData","cookieName","cookie","cookie2","searchParams","Snapshot","inertDisabledOrHidden","queryPermanentElementsAll","getPermanentElementById","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","FormSubmitObserver","eventTarget","submissionDoesNotDismissDialog","submissionDoesNotTargetIFrame","View","y","renderer","isPreview","shouldRender","renderInterception","reason","FrameView","LinkInterceptor","_event","LinkClickObserver","link","doesNotTargetIFrame","FormLinkClickObserver","turboFrame","turboAction","turboConfirm","Bardo","bardo","permanentElement","placeholder","createPlaceholderForPermanentElement","Renderer","currentSnapshot","newSnapshot","renderElement","willRender","elementIsFocusable","currentElement","newElement","destinationRange","frameElement","sourceRange","block","readScrollLogicalPosition","behavior","readScrollBehavior","activatedScriptElement","defaultValue","ProgressBar","_ProgressBar","HeadSnapshot","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","elementIsTracked","matchedType","tracked","elementIsMetaElementWithName","elementIsScript","elementIsStylesheet","tagName","_PageSnapshot","head","headSnapshot","clonedElement","selectElements","clonedSelectElements","source","clonedPasswordInput","TimingMetric","TimingMetric2","VisitState","VisitState2","defaultOptions","SystemStatusCode","SystemStatusCode2","Visit","restorationIdentifier","historyChanged","referrer","snapshotHTML","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","actionForHistory","isSuccessful","responseHTML","_response","redirected","_error","scrollPosition","metric","BrowserAdapter","session2","visit2","_visit","_formSubmission","CacheObserver","FrameRedirector","_location","frame","meta","History","turbo","additionalData","restorationData","Navigator","formSubmission","visitOptions","currentAnchor","isRestorationToTop","oldURL","newURL","PageStage","PageStage2","PageObserver","readyState","ScrollObserver","StreamMessageRenderer","getPermanentElementMapForFragment","permanentElementsInDocument","permanentElementInDocument","elementInStream","StreamObserver","fetchResponseFromEvent","fetchResponseIsStream","ErrorRenderer","replaceableElement","parentNode","mergedHeadElements","newStylesheetElements","loadingElements","newHeadElements","elementList","SnapshotCache","size","PageView","cachedSnapshot","Preloader","Session","adapter","delay","mode","extendURLWithDeprecatedProperties","defaultPrevented","render","_snapshot","_isPreview","ev","newBody","timing","submitterIsNavigatable","withinFrame","deprecatedLocationPropertyDescriptors","Cache","targetElement","confirmMethod","Turbo","TurboFrameMissingError","FrameController","_fetchResponse","element2","fetchRequest","newFrame","_newElement","newFrameElement","pageSnapshot","wrapped","getFrameElementById","activateElement","sourceURL","currentURL","_StreamElement","c","existingChildren","newChildrenIds","actionFunction","cable_exports","createConsumer","getConsumer","setConsumer","subscribeTo","consumer","newConsumer","createConsumer2","__vitePreload","channel","mixin","subscriptions","walk","acc","camel","TurboCableStreamSourceElement","signed_stream_name","encodeMethodIntoRequestBody","isBodyInit","determineFetchMethod","formMethod","determineFormMethod","overrideMethod","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","metaTag","EXPANDO","setData","$","isContentEditable","isEditable","csrfToken","csrfParam","CSRFProtection","refreshCSRFTokens","param","AcceptHeaders","ajax","prepareOptions","createXHR","processResponse","parser","href","isCrossDomain","preventDefault","CustomEvent","stopEverything","eventType","toArray","serializeElement","additionalParam","inputs","formElements","handleConfirmWithRails","rails","allowAction","confirm","answer","handleDisabledElement","enableElement","isXhrRedirect","enableLinkElement","enableFormElement","enableFormElements","disableElement","disableLinkElement","disableFormElement","disableFormElements","replacement","originalText","handleMethodWithRails","href2","csrfToken$1","csrfParam$1","formContent","isRemote","handleRemoteWithRails","withCredentials","button","formSubmitButtonClick","preventInsignificantClick","insignificantMetaClick","Rails","handleConfirm","handleMethod","handleRemote","sparkMd5","undefined$1","hex_chr","md5cycle","k","d","md5blk","md5blks","md5blk_array","md51","tail","lo","hi","md51_array","rhex","hex","clamp","begin","targetArray","sourceArray","toUtf8","str","utf8Str2ArrayBuffer","returnUInt8Array","buff","arrayBuffer2Utf8Str","concatenateArrayBuffers","hexToBinaryString","hex2","bytes","SparkMD52","SparkMD5","fileSlice","FileChecksum","_FileChecksum","file","binaryDigest","base64digest","start2","getMetaValue","findElement","findElements","dispatchEvent","eventInit","bubbles","BlobRecord","checksum","customHeaders","headerKey","responseType","direct_upload","BlobUpload","blob","DirectUpload","notify","error2","upload","error3","methodName","messages","DirectUploadController","hiddenInput","progress","inputSelector","DirectUploadsController","controllers","startNextController","controller","processingAttribute","submitButtonsByForm","started","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","disable","enable","submitForm","autostart","require_select2","jQuery2","S2","S22","require2","requirejs","define2","undef","main","req","makeMap","defined","waiting","config","defining","aps","jsSuffixRegExp","hasProp","normalize","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","part","normalizedBaseParts","baseParts","starMap","makeRequire","relName","forceSync","makeNormalize","makeLoad","depName","callDep","splitPrefix","makeRelParts","relParts","plugin","relResourceName","makeConfig","deps","cjsModule","callbackType","usingExports","alt","cfg","$2","Utils","ChildClass","SuperClass","__hasProp","BaseConstructor","getMethods","theClass","methods","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","unshift","argCount","calledConstructor","ctr","superMethod","calledMethod","originalMethod","decoratedMethod2","decoratedMethod","Observable","listeners","chars","randomChar","originalKey","dataLevel","$el","overflowX","overflowY","markup","replaceMap","$element","$nodes","$jqNodes","select2Id","id2","Results","dataAdapter","$results","escapeMarkup","$message","$options","item","$option","$dropdown","$resultsContainer","sorter","$selected","selectedIds","loadingMore","loading","$loading","label","$children","child","$child","$childrenContainer","$container","$highlighted","currentIndex","nextIndex","$next","currentOffset","nextTop","nextOffset","nextBottom","bottom","isAtTop","isAtBottom","$this","offsetDelta","KEYS","BaseSelection","$selection","resultsId","$target","$select","$all","$selectionContainer","SingleSelection","$rendered","formatted","title","MultipleSelection","$remove","$selections","Placeholder","decorated","$placeholder","singlePlaceholder","multipleSelections","AllowClear","$clear","previousVal","unselectData","removeAll","Search","$search","$previousChoice","msie","disableInputEvents","searchHadFocus","minimumWidth","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","path","translations","diacritics","BaseAdapter","SelectAdapter","currentData","normalizedData","children","defaults","ArrayAdapter","elm","$existing","existingIds","onlyItem","item2","$existingOption","existingData","newData","$newOption","AjaxAdapter","failure","$request","Tags","tags","createTag","insertTag","wrapper","checkChildren","optionText","paramsTerm","checkText","term","Tokenizer","tokenizer","createAndSelect","$existingOptions","tokenData","separators","params2","termChar","partParams","MinimumInputLength","$e","MaximumInputLength","MaximumSelectionLength","successCallback","Dropdown","showSearch","HidePlaceholder","modifiedData","InfiniteScroll","isLoadMoreVisible","loadingMoreOffset","AttachBody","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","dropdown","viewport","enoughRoomAbove","enoughRoomBelow","css","$offsetParent","countResults","MinimumResultsForSearch","SelectOnClose","$highlightedResults","CloseOnSelect","overChars","remainingChars","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","Defaults","Query","InitSelection","SearchableDropdown","DropdownCSS","ContainerCSS","uniqueLanguages","language","stripDiacritics","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","languageParts","baseLanguage","debug","languageData","camelKey","convertedData","Options","InputCompat","excludedData","dataset","upperCaseLetter","dataName","dataValue","camelDataName","Select2","DataAdapter","SelectionAdapter","DropdownAdapter","ResultsAdapter","initialData","WIDTH","styleWidth","elementWidth","computedStyle","observer","mutations","nonRelayEvents","changed","evt2","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","thisMethods","instanceOptions","instance","select2","__vite__cjsImport5_select2","require_jstz","jstz","HEMISPHERE_SOUTH","consts","get_date_offset","date","lookup_key","january_offset","june_offset","get_from_internationalization_api","format","timezone","dst_dates","year","yearstart","yearend","dst_start","dst_end","dateToCheck","dateToCheckOffset","find_dst_fold","find_dst_fold2","a_date","padding","iterator","date_start","date_end","dst_change","windows7_adaptations","rule_list","preliminary_timezone","score","sample","best_dst_match","score_sample","sample2","score2","scoreboard","dst_zones","dst_zones_length","ambiguities","tz","get_by_dst","get_rules","year_rules","check_has_dst","rules2","rules","has_dst","determine","preliminary_tz","require_jstz2","__vite__cjsImport6_jstz","define_global_default","checkServerForProgressUpdates","updateUrlParameter","uri","re","separator","existing","$updated","scheduleCheckForProgressUpdatesIfNeeded","predicate","thisArg","CustomEvent$1","TributeEvents","_TributeEvents","tribute","o","li","keyCode","trigger","trigger2","eventKeyPressed","info","collectionItem","lis","liClientRect","menuClientRect","scrollDistance","includeMargin","height","TributeMenuEvents","menu","immediate","later","callNow","TributeRange","iframe","scrollTo","coordinates","menuDimensions","menuIsOffScreen","menuIsOffScreenHorizontally","menuIsOffScreenVertically","range","requireLeadingSpace","hasTrailingSpace","replaceEvent","textSuffix","endPos","myField","startPos","frag","lastNode","ctx","ce","selectedElem","workingNodeContent","selectStartOffset","textComponent","wordsArray","worldsCount","menuAlreadyActive","allowSpaces","isAutocomplete","selectionInfo","effectiveRange","lastWordOfEffectiveRange","mostRecentTriggerCharPos","triggerChar","currentTriggerSnippet","firstSnippetChar","leadingSpace","regex","reversedStr","cidx","firstChar","triggerIdx","windowWidth","windowHeight","windowLeft","windowTop","menuTop","menuRight","menuBottom","menuLeft","dimensions","flipped","isFirefox","span","parentHeight","parentRect","scrollStillAvailable","selectedNodePosition","reasonableBuffer","clientRect","maxScrollDisplacement","elemTop","elemBottom","maxY","targetY","TributeSearch","pre","post","compareString","patternCache","stringIndex","patternIndex","best","indices","rendered","Tribute","_Tribute","selectClass","containerClass","itemClass","autocompleteMode","selectTemplate","menuItemTemplate","lookup","fillAttr","menuContainer","noMatchTemplate","replaceTextSuffix","positionMenu","spaceSelectsMatch","searchOpts","menuItemLimit","menuShowMinLength","noMatchEvent","matchItem","ul","processValues","items","li2","collectionIndex","textRange","textNode","textarea","scrollPos","caretPos","front","back","newValues","replace","tribute_esm_default","t2","r","e2","h","n2","u","g","f","r2","o2","s2","a2","l2","c2","h2","t3","e3","A","C","R","S","E","L","D","B","T","F","I","O","P","N","M","W","U","q","V","z","H","J","K","G","X","tt","et","Y","Q","Z","it","nt","rt","ot","st","at","lt","ht","ut","dt","ft","mt","gt","pt","bt","vt","At","xt","yt","Ct","Rt","St","Et","kt","Lt","Tt","Dt","Bt","wt","Ft","It","Pt","Nt","Mt","Ot","jt","Wt","Ut","qt","Vt","zt","_t","__t","Gt","Kt","Ht","Jt","$t","Xt","Yt","Qt","Zt","te","ee","ie","ne","oe","i3","n3","se","ae","le","he","ue","de","ge","t4","pe","me","fe","Ae","xe","ye","Ce","Re","_Re","Se","_Se","Ee","ke","De","we","Le","Te","Be","_Be","Fe","je","Ue","We","Oe","Ie","Ne","Me","Pe","qe","u2","r3","o3","Ve","ze","_e","He","Je","Ke","Ge","Xe","ti","Ye","ni","ei","ii","Qe","Ze","ri","oi","si","ai","ci","ui","di","gi","mi","pi","fi","bi","vi","Ai","xi","yi","Ei","s3","Ci","Ri","Si","ki","Li","Di","wi","Ti","Bi","Fi","Ii","Pi","Ni","Oi","Mi","ji","Wi","Ui","qi","Vi","zi","Ji","Hi","Ki","Gi","$i","Xi","Yi","Qi","rn","e4","en","nn","d2","g2","m2","p2","f2","b2","v2","A2","Zi","tn","sn","hn","ln","cn","un","an","dn","gn","mn","pn","bn","vn","An","yn","xn","Cn","Rn","Sn","En","kn","Ln","Dn","wn","Tn","Bn","Fn","In","Pn","Nn","AttachmentUpload","attachment","signedId","filename","updateTrixToolbarVisability","initializeTribute","editorElement","toolbarElement","editor","mentionConfig","topicConfig","endDateContainer","endDateInput","toggleEndDateContainer","hide","handleCurrentPositionChange","currentPositionYesButton","currentPositionNoButton","currentPositionInput","dragula","__vite__cjsImport2_dragula","saveSortOrder","idsInOrder","enableSortable","$scope","$reorderable","$handles","saveAssignments","parents","assignmentsById","parentId","enableReassignable","$reassignable","EventListener","eventOptions","binding","extendedEvent","extendEvent","leftIndex","rightIndex","stopImmediatePropagation","Dispatcher","application","eventListener","clearEventListeners","eventListenerMap","cacheKey","defaultActionDescriptorFilters","descriptorPattern","parseActionDescriptorString","descriptorString","keyFilter","parseEventTarget","parseEventOptions","eventTargetName","stringifyEventTarget","camelize","char","namespaceCamelize","capitalize","dasherize","isSomething","hasProperty","property","allModifiers","Action","descriptor","schema","getDefaultEventNameForElement","eventFilter","filters","standardFilter","typecast","ctrl","shift","modifier","defaultEventNames","Binding","actionEvent","actionDescriptorFilters","passes","currentTarget","ElementObserver","tree","processor","AttributeObserver","fetch","del","prune","Multimap","set","_values","SelectorObserver","match2","_attributeName","matchedBefore","StringMapObserver","oldValue","oldValue2","attribute","TokenListObserver","unmatchedTokens","matchedTokens","previousTokens","currentTokens","firstDifferingIndex","zip","previousToken","currentToken","tokensAreEqual","tokenString","parseTokenString","ValueListObserver","parseResult","valuesByToken","BindingObserver","ValueObserver","receiver","writer","rawValue","rawOldValue","changedMethodName","changedMethod","valueDescriptorMap","descriptors","hasMethodName","TargetObserver","readInheritableStaticArrayValues","constructor","propertyName","ancestors","getAncestorsForConstructor","constructor2","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","definition","OutletObserver","outletName","_selector","outlet","hasOutlet","hasOutletController","selectorObserver","attributeObserver","dependencies","identifiers","Context","scope","functionName","bless","shadow","getBlessedProperties","shadowConstructor","extend","shadowProperties","getShadowProperties","blessedProperties","blessing","getOwnKeys","getShadowedDescriptor","shadowingDescriptor","extendWithReflect","extended","testReflectExtension","blessDefinition","Module","ClassMap","DataMap","Guide","logger","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","targetDescriptor","revisedAttributeName","OutletSet","controllerElement","outletNames","outlets","controllerAttribute","Scope","_Scope","ScopeObserver","scopesByIdentifier","referenceCount","Router","afterLoad","defaultSchema","objectFromEntries","memo","Application","domReady","controllerConstructor","rest","ClassPropertiesBlessing","classDefinition","propertiesForClassDefinition","OutletPropertiesBlessing","outletDefinition","propertiesForOutletDefinition","getOutletController","getControllerAndEnsureConnectedScope","outletController","camelizedName","outletElement","TargetPropertiesBlessing","targetDefinition","propertiesForTargetDefinition","ValuePropertiesBlessing","valueDefinitionPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","parseValueDefinitionPair","propertiesForValueDefinitionPair","read","write","typeDefinition","valueDescriptorForTokenAndTypeDefinition","parseValueTypeConstant","constant","parseValueTypeDefault","parseValueTypeObject","payload","typeObject","hasType","hasDefault","fullObject","onlyType","onlyDefault","typeFromObject","typeFromDefaultValue","propertyPath","parseValueTypeDefinition","typeFromConstant","defaultValueForDefinition","defaultValuesByType","constantFromType","readers","writers","writeString","writeJSON","Controller","_identifier","_application","accordion_controller","toggleable","carousel_controller","slide","dot","greaterHeight","resizeTarget","clipboard_controller","button_toggle_controller","require_color_name","require_conversions","cssKeywords","reverseKeywords","convert2","model","channels","labels","rgb","min","rdif","gdif","bdif","diffc","comparativeDistance","reversed","currentClosestDistance","currentClosestKeyword","keyword","distance","xyz","hsl","t1","smin","lmin","sv","hsv","vmin","sl","hwb","wh","bl","ratio","cmyk","lab","y2","x2","z2","lch","hr","saturation","ansi","color","mult","rem","colorString","integer","chroma","grayscale","hue","hcg","pure","mg","apple","gray","require_route","conversions","buildGraph","graph","models","deriveBFS","fromModel","adjacents","adjacent","wrapConversion","toModel","conversion","require_color_convert","route","wrapRaw","wrappedFn","arg0","wrapRounded","routes","clickOutsideHandler","emitter","activator","contextElements","domEvt","contextElementsList","contextElement","CssTransitionDisablerMixin","Mixin","ViewCollection","Collection","initialItems","elementOrDocFragment","isStringArray","CKEditorError","evtName","subject","xhtmlNs","Template","EmitterMixin","def","getEmptyRevertData","search","isView","isTemplate","observable","eventNameOrFunctionOrAttribute","TemplateToBinding","valueIfTrue","TemplateIfBinding","extendTemplate","isInvalid","hasTemplateBinding","getTextUpdater","revertData","attrName","domAttrValue","attrValue","attrNs","isNamespaced","valueToBind","shouldExtend","getAttributeUpdater","arrayValueReducer","isFalsy","styleName","styleValue","getStyleUpdater","isApplying","childIndex","isViewCollection","isNode","childRevertData","revertBindings","schemaItem","domEvtName","domSelector","updater","syncValueSchemaValue","templateBinding","revertBinding","TemplateBinding","getValueSchemaValue","ns","cloneDeepWith_default","normalizePlainTextDefinition","normalizeTextDefinition","normalizeListeners","normalizeAttributes","arrayify","extendObjectValueArray","ext","childDef","isObject_default","DomEmitterMixin","ObservableMixin","locale","views","isIterable","IconView","_IconView","bind","svg","viewBox","iconview_default","ButtonLabelView","ButtonView","labelView","ariaLabelUid","uid","env_default","keystrokeView","getEnvKeystrokeText","tooltip","keystroke","DropdownButtonView","arrowView","dropdownArrowIcon","normalizeToolbarConfig","predefinedConfigOptions","FocusCycler","actions","cancel","isDomFocusable","viewIndex","focused","previous","direction","step","collectionLength","focusableItem","focusableItemCandidate","isFocusable","isVisible","isViewWithFocusCycler","ToolbarSeparatorView","ToolbarLineBreakView","DropdownPanelView","firstChild","logWarning","lastChild","DropdownView","_DropdownView","buttonView","panelView","KeystrokeHandler","FocusTracker","isOpen","optimalPanelPosition","closeDropdown","south","north","southEast","southWest","northEast","northWest","southMiddleEast","southMiddleWest","northMiddleEast","northMiddleWest","buttonRect","panelRect","getOptimalPosition","dropdownview_default","ListItemView","LabelView","ListSeparatorView","ListItemGroupView","nestedList","ListView","firstListItem","removed","added","groupView","groupIndex","registeredChildIndex","groupItemsChangeCallback","SplitButtonView","actionButton","actionView","dropdownArrowIcon2","SwitchButtonView","toggleSwitchView","createDropdown","ButtonClassOrInstance","dropdownView","addDefaultBehavior","addToolbarToDropdown","buttonsOrCallback","addToolbarToOpenDropdown","focusChildOnDropdownOpen","toolbarView","ToolbarView","buttons","addListToDropdown","itemsOrCallback","addListToOpenDropdown","listView","bindViewCollectionItemsToDefinitions","childSelectorCallback","childToFocus","priorities_default","closeDropdownOnClickOutside","closeDropdownOnExecute","closeDropdownOnBlur","focusDropdownContentsOnArrows","focusDropdownButtonOnClose","focusDropdownPanelOnOpen","isFocused","global_default","listItems","definitions","listItemView","threeVerticalDots","icons","NESTED_TOOLBAR_ICONS","ItemsView","isRtl","DynamicGrouping","StaticLayout","itemsOrConfig","removeItems","normalizedRemoveItems","filteredItems","items2","nonSeparatorPredicate","firstCommandItemIndex","lastCommandItemIndex","componentFactory","icon","withText","changeData","removedItem","addedItem","initialGroupedItemsCount","wereItemsGrouped","uiLanguageDirection","lastChildRect","Rect","toolbarRect","paddingProperty","previousWidth","resizeobserver_default","entry","FormHeaderView","DraggableViewMixin","DraggableMixin","newX","newY","DialogActionsView","DialogContentView","DialogViewPosition","toPx","toUnit","DialogView","_DialogView","getCurrentDomRoot","getViewportOffset","isModal","deltaX","deltaY","isVisible2","hasCloseButton","actionButtons","viewportRect","dialogRect","configuredPosition","domRootRect","defaultOffset","leftCoordinate","visibleDomRootRect","getConstrainedViewportRect","focusables","focusable","cancelIcon","dialogview_default","viewportOffset","toPx2","defaultLimiterElement","POSITION_OFF_SCREEN","BalloonPanelView","_BalloonPanelView","defaultPositions","positionOptions","optimalPosition","withArrow","getDomElement","limiterElement","scrollTarget","isWithinScrollTarget","isLimiterWithinScrollTarget","generatePositions","balloonpanelview_default","isElement_default","isRange","sideOffset","heightOffset","stickyVerticalOffset","targetRect","balloonRect","getNorthTop","getSouthTop","limiterRect","boundaryRect","ComponentFactory","getNormalized","BALLOON_CLASS","TooltipManager","_TooltipManager","debounce_default","editorBodyViewCollection","elementWithTooltipAttribute","getDescendantWithTooltip","getTooltipData","relatedTarget","descendantWithTooltip","relatedDescendantWithTooltip","targetDomElement","cssClass","bodyViewCollection","tooltipmanager_default","ICON_WIDTH","ICON_HEIGHT","NARROW_ROOT_HEIGHT_THRESHOLD","NARROW_ROOT_WIDTH_THRESHOLD","DEFAULT_LABEL","PoweredBy","throttle_default","balloon","verifyLicense","focusedElement","poweredByConfig","getNormalizedConfig","PoweredByView","attachOptions","getBalloonAttachOptions","editableEditorElements","iconView","poweredByIcon","focusedEditableElement","positioningFunction","getLowerRightCornerPosition","getLowerLeftCornerPosition","getLowerCornerPosition","rootRect","getBalloonLeft","visibleEditableElementRect","editableElementRect","balloonTop","balloonLeft","newBalloonPositionVisibleRect","userConfig","AriaLiveAnnouncerPoliteness","AriaLiveAnnouncer","regionName","announcementText","politeness","AriaLiveAnnouncerView","regionView","AriaLiveAnnouncerRegionView","EditorUI","editingView","domElement","rootName","setUpKeystrokeHandler","viewportOffsetConfig","legacyOffsetConfig","lastFocusedForeignElement","candidateDefinitions","currentFocusedToolbarDefinition","candidateDefinition","focusedToolbarDef","toolbarDef","defA","defB","getToolbarDefinitionWeight","candidateToolbarDefinition","beforeFocus","configuredViewportOffset","weight","BodyCollection","createElement","EditorUIView","BoxedEditorUIView","voiceLabel","EditableUIView","editableElement","updateAfterRender","update","viewRoot","InlineEditableUIView","Notification","ContextPlugin","Model","assignIn_default","toPx3","ContextualBalloon","Plugin","stackId","entry2","stacks","RotatorView","isSingleViewMode","visibleView","numberOfStacks","FakePanelsView","number","balloonClassName","singleViewMode","balloonPanelView","toPx4","StickyPanelView","isSticky","visibleLimiterRect","windowRect","visibleLimiterTop","stickyBottomOffset","topOffset","submitHandler","addKeyboardHandlingForGrid","keystrokeHandler","focusTracker","gridItems","numberOfColumns","getNumberOfColumns","getGridItemFocuser","focusedElementIndex","gridItems2","getLeftElementIndex","getRightElementIndex","getIndexToFocus","nextIndexToFocus","elementIndex","CollapsibleView","childViews","dropdownArrowIcon3","isCollapsed","getLocalizedColorOptions","localizedColorNames","colorOption","normalizeColorOptions","normalizeSingleColorDefinition","ColorTileView","checkIcon","ColorGridView","colorDefinitions","viewStyleAttribute","colorTile","selectedColor","import_color_name","color_parse_default","parse","baseHues","cstr","alpha","space","isShort","isRGB","convert","convertColor","outputFormat","colorObject","parseColorString","canConvertParsedColor","toColorSpace","convertedColorChannels","formatColorOutput","convertToHex","format2","parsedHex","parsedColor","LabeledFieldView","viewCreator","viewUid","statusUid","errorText","infoText","statusView","InputBase","isInputElementEmpty","InputView","InputTextView","createLabeledInputText","labeledFieldView","inputView","round","digits","hexToHsva","rgbaToHsva","hexToRgba","hsvaToHex","hsva","rgbaToHex","hsvaToRgba","hsvaToHsla","hh","hsvaToHslString","alphaHex","equalColorObjects","first2","equalHex","tpl","hasTouched","isTouch","isValid","pointerMove","pointer","keyMove","Slider","aria","xy","toggleEvent","Hue","Saturation","color_picker_default","hue_default","saturation_default","$isSame","$color","$hsva","$update","$parts","$css","$sliders","ColorPicker","newColor","newHsva","slider","_attr","_oldVal","oldHsva","colorModel","HexBase","HexColorPicker","waitingTime","ColorPickerView","newValue","convertColorToCommonHexFormat","styleSheetForFocusedColorPicker","slidersView","SliderView","hashView","HashView","colorInput","ColorPickerInputRowView","labeledInput","pickerColor","inputValue","trimmedValue","hashlessInput","inputColor","DocumentColorCollection","removeButtonIcon","colorPaletteIcon","ColorGridsFragmentView","colors","columns","removeButtonLabel","documentColorsLabel","documentColorsCount","colorPickerLabel","maxCount","documentColorsGrid","staticColorsGrid","colorGrid","colorObj","predefinedColor","ColorPickerFragmentView","keystrokes","colorPickerViewConfig","saveButtonView","cancelButtonView","colorPickerView","stopPropagation","actionBarRow","ColorSelectorView","SearchTextQueryView","viewConfig","isEmpty","SearchInfoView","SearchResultsView","SearchTextView","resultsCount","totalItemsCount","focusableChild","query","regExp","escapeRegExp_default","filteringResults","queryView","infoView","defaultTextConfig","primaryText","secondaryText","normalizeInfoText","AutocompleteView","_AutocompleteView","toPx8","bindResultsView","optimalResultsPosition","queryMinChars","queryLength","fieldRect","resultsRect","ClassicEditorUI","ElementReplacer","replacementElement","editable","editingRoot","placeholderText","enablePlaceholder","originalArgs","stickyPanel","stickyPanelHeight","scrollViewportOnPanelGettingSticky","dialogPlugin","dialogView","stickyPanelContentRect","ClassicEditorUIView","Watchdog","callbacks","causesRestart","lastErrorTime","firstMeaningfulErrorTime","getSubNodes","excludedProperties","subNodes","shouldNodeBeIncluded","typeOfNode","areConnectedThroughProperties","target1","target2","excludedNodes","isObject","subNodes1","subNodes2","EditorWatchdog","Editor2","watchdogConfig","elementOrData","creator","destructor","err","existingRoots","lazyRoots","oldRootsAttributes","rootsAttributes","rootData","updatedConfig","EditorWatchdogInitPlugin","roots","plugins","commentsRepository","trackChanges","marker","editables","jsonNode","parsedNodes","parsedAttributes","rootElement","markerName","markerOptions","startPosition","endPosition","parsedCommentThreads","parsedSuggestions","commentThreadData","channelId","suggestionData","trackChangesEditing","suggestion","mainQueueId","ContextWatchdog","Context2","ActionQueues","contextConfig","itemId","itemConfigurationOrItemConfigurations","itemConfigurations","watchdog","res","rethrowRestartEventOnce","itemIdOrItemIds","itemIds","onEmptyCallback","queueId","isMainAction","queueWithAction","nonErrorQueue","elementOrArray","ClassicEditor","DataApiMixin","ElementApiMixin","Editor","sourceElementOrData","isElement","getInitialData","shouldToolbarGroupWhenFull","attachToForm","classiceditor_default","getDataFromElement","DEFAULT_OPTIONS","DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME","Token","_Token","tokenUrlOrRefreshToken","defaultRefreshToken","tokenValue","isString","isPlainString","isJWTFormat","tokenRefreshTimeoutTime","binaryTokenPayload","tokenExpireTime","tokenUrl","xhrResponse","BASE64_HEADER_REG_EXP","FileUploader","fileOrData","apiAddress","_isBase64","_base64ToBlob","onError","base64","sliceSize","contentType","base64Data","byteArrays","byteNumbers","UploadGateway","CloudServicesCore","CloudServices","cloudServicesCore","BaseCommand","Command","batch","docSelection","ranges","isBackward","operations","selectionRanges","transformedRangeGroups","allRanges","rangeGroup","transformed","isRangeContainedByAnyOtherRange","normalizeRanges","batchToUndo","undoingBatch","operationsToUndo","operation","operationToUndo","nextBaseVersion","historyOperations","reversedOperations","transformSets","affectedSelectable","NoOperation","joinedRange","otherRange","UndoCommand","batchIndex","RedoCommand","redoingBatch","UndoEditing","isRedoBatch","isUndoBatch","undoneBatch","UndoUI","localizedUndoIcon","localizedRedoIcon","Icon","command","Undo","getCopyOnEnterAttributes","allAttributes","EnterCommand","isSelectionEmpty","startElement","endElement","attributesToCopy","splitBlock","leaveUnmerged","isContainedWithinOneElement","splitPos","ENTER_EVENT_TYPES","EnterObserver","Observer","shiftPressed","inputType","domEvent","enterEventSpec","BubblingEventInfo","DomEventData","Enter","viewDocument","ShiftEnterCommand","softBreakAction","isEnabled","anchorPos","isInsideLimitElement","insertBreak","breakLineElement","ShiftEnter","modelElement","ChangeBuffer","limit","changeCount","ignoreLock","DeleteCommand","sequence","doNotResetEntireContent","limitElement","limitElementFirstChild","paragraph","DELETE_CHARACTER","DELETE_WORD","DELETE_CODE_POINT","DELETE_SELECTION","DELETE_BACKWARD","DELETE_FORWARD","DELETE_EVENT_TYPES","DeleteObserver","targetRanges","deleteEventSpec","deleteData","shouldUseTargetRanges","eventInfo","enableChromeWorkaround","pressedKeyCode","beforeInputReceived","shouldFireDeleteEvent","isDeleteKeyCode","targetRange","getDeleteDirection","keyCodes","walker","count2","nextPosition","isInsideSurrogatePair","isInsideCombinedSymbol","isInsideEmojiSequence","Delete","modelDocument","deleteForwardCommand","selectionToRemove","commandName","commandData","modelRanges","viewRange","InsertTextCommand","undoStepSize","textInsertions","resultRange","selectionAttributes","TYPING_INPUT_TYPES","InsertTextObserver","FocusObserver","EventInfo","Input","modelSelection","insertTextCommand","viewSelection","viewResultRange","insertText","selectedText","rangeText","insertTextCommandData","deleteSelectionContent","buffer","Typing","getLastTextLine","TextWatcher","testCallback","directChange","rangeBeforeSelection","testResult","eventData","TwoStepCaretMovement","arrowRightPressed","arrowLeftPressed","contentDirection","isMovementHandled","isBetweenDifferentAttributes","hasAnyAttribute","preventCaretMovement","clearSelectionAttributes","setSelectionAttributesFromTheNodeBefore","isStepAfterAnyAttributeBoundary","MouseObserver","clicked","isBackspace","shouldPreserveAttributes","observedAttribute","nodeBefore","attributes2","isInlineObject","positionBefore","isStrict","nodeAfter","attrBefore","attrAfter","findAttributeRange","findAttributeRangeBound","lookBack","inlineHighlight","highlightedElements","modelRange","dispatcher","removeHighlight","HighlightStack","oldTop","newTop","compareDescriptors","shouldABeBeforeB","classesToString","WIDGET_CLASS_NAME","WIDGET_SELECTED_CLASS_NAME","isWidget","toWidget","getFillerOffset","setLabel","addSelectionHandle","setHighlightHandling","addHighlight","addHighlightCallback","writer2","removeHighlightCallback","labelOrCreator","getLabel","toWidgetEditable","is","findOptimalInsertionRange","selectedElement","typeAroundFakeCaretPosition","getTypeAroundFakeCaretPosition","widgetElement","selectionHandle","domDocument","dragHandleIcon","TYPE_AROUND_SELECTION_ATTRIBUTE","isTypeAroundWidget","viewElement","getClosestTypeAroundDomButton","getTypeAroundButtonPosition","getClosestWidgetViewElement","domConverter","widgetDomElement","POSSIBLE_INSERTION_POSITIONS","RETURN_ARROW_ICON_ELEMENT","returnIcon","PLUGIN_DISABLED_EDITING_ROOT_CLASS","WidgetTypeAround","widgetModelElement","selectedModelElement","buttonTitles","conversionApi","injectUIIntoWidget","domEventData","selectedViewElement","selectedViewElement2","positionToWidgetCssClass","isForward","isForwardArrowKeyCode","shouldStopAndPreventDefault","widgetPlugin","modelElementNextToSelection","viewElementNextToSelection","mapper","selectedModelNode","selectedViewNode","buttonPosition","widgetViewElement","wasHandled","selectedModelWidget","isFakeCaretBefore","isDeleteForward","probe","deepestEmptyRangeAncestor","getDeepestEmptyElementAncestor","documentSelection","selectable","viewWriter","typeAroundWrapper","wrapperDomElement","injectButtons","injectFakeCaret","buttonTemplate","caretTemplate","deepestEmptyAncestor","ancestor","verticalNavigationHandler","editing","arrowUpPressed","arrowDownPressed","expandSelection","selectionWillShrink","findTextRangeFromSelection","isSingleLineRange","newPosition","newSelection","getNearestNonInlineLimit","lastRangePosition","getNearestTextPosition","firstRangePosition","walkerValueType","previousPosition","domRange","rects","boundaryVerticalPosition","Widget","lastMarked","isChild","isInsideNestedEditable","findTextBlockAncestor","nextTextBlock","findNextTextBlock","objectElement","getLocalizedArrowKeyCodeDirection","isVerticalNavigation","newRange","firstPosition","lastPosition","firstSelectedNode","lastSelectedNode","objectElementNextToSelection","previousNode","nodeToRemove","widget","treeWalker","TreeWalker","WidgetToolbarRepository","balloonToolbar","isWidgetSelected","toolbarConfig","toolbarId","ariaLabel","getRelatedElement","toolbarDefinition","relatedElement","maxRelatedElementDepth","deepestRelatedElement","deepestToolbarDefinition","relatedElementDepth","repositionContextualBalloon","getBalloonPositionData","relatedElement2","toolbar","ResizeState","domResizeHandle","domHandleHost","domResizeHost","getHandlePosition","getAbsoluteBoundaryPoint","getOppositePosition","widthStyle","calculateHostPercentageWidth","newSize","resizeHostRect","domResizeHostParent","parentWidth","ancestorLevelLimit","currentLevel","checkedElement","resizerPosition","elementRect","positionParts","getResizerHandleClass","domHandle","resizerPositions","replacements","SizeView","visible","resizeState","widthPercents","Resizer","isSelected","viewResizerWrapper","newWidth","domHandleHostRect","handleHostWidth","handleHostHeight","domResizeHostRect","handleHostRect","domWrapper","existsInDom","widgetWrapper","handleHost","resizerWrapper","currentDimensions","newDimensions","compareArrays","currentCoordinates","extractCoordinates","isCentered","enlargement","currentPosition","getResizerClass","WidgetResize","resizer","widgetToolbarRepository","resizeHandle","ClipboardObserver","DomEventObserver","handleInput","nativeDataTransfer","cacheFiles","evtData","DataTransfer","getDropViewRange","domDoc","plainTextToHtml","normalizeClipboardData","fullMatch","spaces","smallPaddingElements","listElements","viewToPlainText","viewItem","newLinePadding","ClipboardPipeline","dataTransfer","contentData","modelFragment","onCopyCut","LineView","DragDropTarget","resizeObserver","targetViewElement","targetViewRanges","clientX","clientY","blockMode","draggedRange","findDropTargetRange","markers","nodeParent","viewElementBefore","domElementBefore","viewElementAfter","domElementAfter","viewElementParent","domElementParent","domScrollableRect","scrollX","scrollY","rectBefore","rectAfter","rectParent","above","below","parentStyle","leftClamped","rightClamped","domScrollable","findScrollableElement","getClosestMappedModelElement","targetViewPosition","targetModelPosition","findDropTargetRangeForElement","childNodes","shouldIgnoreElement","startIndex","endIndex","middleIndex","findElementSide","targetModelElement","viewPosition","domNode","overflow","DragDropBlockToolbar","isReadOnly","blocks","DragDrop","dragDropTarget","draggedSelection","domTarget","getFinalDropEffect","clipboardPipeline","isMove","draggableElement","findDraggableWidget","moved","selectionParent","draggableWidget","LiveRange","blockRange","getRangeIncludingFullySelectedParents","touchesBlockEdges","domEditable","domRect","domEditablePaddingLeft","preview","firstElement","parentRange","touchesStart","touchesEnd","PastePlainText","isPlainTextFragment","textAttributes","documentFragment","Clipboard","SelectAllCommand","scopeElement","isSelectAllScope","SELECT_ALL_KEYSTROKE","parseKeystroke","SelectAllEditing","getCode","SelectAllUI","selectAllIcon","SelectAll","Essentials","FileReader","reader","FileRepository","PendingActions","uploaded","total","fileOrPromise","loader","FileLoader","aggregatedUploaded","loader2","aggregatedTotal","fileOrPromiseOrLoader","pendingActions","getMessage","filePromise","uploadAdapterCreator","FileDialogButtonView","FileInputView","TOKEN_COOKIE_NAME","TOKEN_LENGTH","tokenCharset","getCsrfToken","getCookie","generateToken","setCookie","pair","randValues","character","CKFinderUploadAdapter","UploadAdapter","genericError","blockAutoformatEditing","callbackOrCommand","changes","blockToFormat","firstNode","firstNodeRange","range2","selectionRange","inlineAutoformatEditing","testRegexpOrCallback","formatCallback","leftDel","rightDel","found","delStart","delEnd","focus","getTextAfterCode","testOutput","rangesToFormat","testOutputToRanges","rangesToRemove","arrays","Autoformat","commands","boldCallback","getCallbackFunctionForInlineAutoformat","italicCallback","codeCallback","strikethroughCallback","modelName","level","attributeKey","validRanges","AttributeCommand","BOLD","BoldEditing","fontWeight","BOLD2","BoldUI","Bold","ITALIC","ItalicEditing","ITALIC2","ItalicUI","italicIcon","Italic","BlockQuoteCommand","findQuote","blocksToQuote","checkCanBeQuoted","firstBlock","getRangesOfBlockGroups","groupRange","positionAfter","quotesToMerge","quote","currentQuote","nextQuote","elementOrPosition","nextBlock","isBQAllowed","isBlockAllowedInBQ","BlockQuoteEditing","blockQuoteCommand","positionParent","BlockQuoteUI","BlockQuote","CloudServicesUploadAdapter","cloudServices","uploadUrl","Adapter","uploadGateway","EasyImage","ParagraphCommand","checkCanBecomeParagraph","InsertParagraphCommand","allowedParent","isTextAllowed","Paragraph","_Paragraph","paragraph_default","HeadingCommand","modelElements","heading","checkCanBecomeHeading","defaultModelElement","HeadingEditing","enterCommand","getLocalizedOptions","localizedTitles","HeadingUI","defaultTitle","accessibleLabel","titles","itemDefinitions","headingCommand","paragraphCommand","areEnabled","para","whichModel","commandValue","Heading","ImageLoadObserver","domRoot","createInlineImageViewElement","createBlockImageViewElement","getImgViewElementMatcher","matchImageType","imageUtils","areBothImagePluginsLoaded","getPositiveMatchPattern","determineImageTypeForInsertionAtSelection","getSizeValueIfInPx","widthAndHeightStylesAreBothSet","heightStyle","IMAGE_WIDGETS_CLASSES_MATCH_REGEXP","ImageUtils","imageType","determinedImageType","determineImageTypeForInsertion","setImageSizes","imageElement","img","selectionPosition","imageView","isImageAllowedInParent","isNotInsideImage","altText","figureView","getInsertImageParent","configImageInsertType","upcastImageFigure","converter","viewImage","conversionResult","modelImage","downcastSrcsetAttribute","downcastImageAttribute","InsertImageCommand","sourceDefinitions","sourceDefinition","ReplaceImageSourceCommand","image","ImageEditing","insertImageCommand","replaceImageSourceCommand","ImageSizeAttributes","viewElementName","attachDowncastConverter","modelAttributeName","viewAttributeName","setRatioForInlineImage","isResized","ImageTypeCommand","modelElementName","oldElement","newElementRange","markerRange","ImagePlaceholder","imgViewElement","ImageBlockEditing","docFragmentChildren","UpcastWriter","blockViewImages","inlineViewImage","ImageTextAlternativeCommand","ImageTextAlternativeEditing","TextAlternativeFormView","ImageTextAlternativeUI","focusEditable","ImageTextAlternative","ImageInsertFormView","integrations","ImageInsertUI","componentCreator","buttonViewCreator","formViewCreator","requiresForm","dropdownButton","firstIntegration","isImageSelected","observables","isEnabled2","integrationViews","imageInsertFormView","ImageBlock","ImageInlineEditing","childDefinition","inlineViewImages","blockViewImage","ImageInline","Image","ToggleImageCaptionCommand","imageCaptionUtils","ancestorCaptionElement","focusCaptionOnShow","imageCaptionEditing","selectedImage","savedCaption","newCaptionElement","captionElement","ImageCaptionUtils","imageModelElement","ImageCaptionEditing","figcaptionElement","imageAlt","imageTypeInlineCommand","imageTypeBlockCommand","handleImageTypeChange","oldCaptionElement","savedOldElementCaption","jsonObject","Element","caption","change","ImageCaptionUI","modelCaptionElement","ImageCaption","ImageStyleCommand","requestedStyle","objectFullWidth","objectInline","objectLeft","objectRight","objectCenter","objectBlockLeft","objectBlockRight","DEFAULT_ICONS","DEFAULT_DROPDOWN_DEFINITIONS","normalizeStyles","arrangement","normalizeDefinition","isValidOption","getDefaultStylesConfiguration","isBlockPluginLoaded","isInlinePluginLoaded","getDefaultDropdownDefinitions","pluginCollection","extendStyle","warnInvalidStyle","supportedElements","elementName","extendedStyle","utils_default","modelToViewStyleAttribute","newStyle","getStyleDefinitionByName","oldStyle","viewToModelStyleAttribute","nonDefaultStyles","modelImageElement","ImageStyleEditing","normalizeStyles2","getDefaultStylesConfiguration2","modelToViewConverter","viewToModelConverter","stylesMap","imageStyle","imageStyleDefinition","ImageStyleUI","imageStyleEditing","definedStyles","translateStyles","styleConfig","definedDropdowns","dropdownConfig","defaultButton","defaultItem","buttonViews","itemName","getUIComponentName","buttonName","splitButtonView","splitButtonViewArrow","getDropdownButtonTitle","areOn","identity_default","isOn","buttonConfig","dropdownTitle","buttonTitle","ImageStyle","ImageToolbar","normalizeDeclarativeConfig","createImageTypeRegExp","regExpSafeNames","fetchLocalImage","imageSrc","resource","getImageMimeType","convertLocalImageOnCanvas","isLocalImage","getBlobFromCanvas","canvas","ImageUploadUI","imageTypes","imageTypesRegExp","files","imagesToUpload","imageInsertUI","uploadImageButton","ImageUploadProgress","editor2","uploadId","fileRepository","viewFigure","_startAppearEffect","_showPlaceholder","_hidePlaceholder","_showProgressBar","_displayLocalImage","_showCompleteIcon","_hideProgressBar","_stopAppearEffect","viewImg","_getUIElement","_createPlaceholder","_removeUIElement","progressBar","_createProgressBar","completeIcon","imageFigure","uniqueProperty","UploadImageCommand","ImageUploadEditing","uploadImageCommand","isHtmlIncluded","images","fetchableImages","fetchableImage","insertedImagesIds","isInsertedInGraveyard","getImagesFromChangeItem","urls","notification","imageUploadElements","domFigure","originalDisplay","clean","srcsetAttribute","ImageUpload","ResizeImageCommand","ImageResizeEditing","resizeImageCommand","modelAttributeValue","RESIZE_ICONS","ImageResizeButtons","optionValueWithUnit","labelText","getIsOnButtonCallback","originalSizeOption","forTooltip","objectCommandValue","RESIZABLE_IMAGES_CSS_SELECTOR","RESIZED_IMAGE_CLASS","ImageResizeHandles","widgetView","imageModel","domWidgetElement","ImageResize","AutomaticDecorators","linkInImage","toMap","ATTRIBUTE_WHITESPACES","SAFE_URL","EMAIL_REG_EXP","PROTOCOL_REG_EXP","LINK_KEYSTROKE","isLinkElement","createLinkElement","linkElement","ensureSafeUrl","urlString","isSafeUrl","getLocalizedDecorators","decorators","localizedDecoratorsLabels","decorator","normalizeDecorators","retArray","upperFirst_default","isLinkableElement","isEmail","addLinkProtocolIfApplicable","defaultProtocol","protocol","isProtocolNeeded","linkHasProtocol","openLink","LinkCommand","manualDecorator","manualDecoratorIds","truthyManualDecorators","falsyManualDecorators","linkText","extractTextFromSelection","linkRange","allowedRanges","rangesToUpdate","decoratorName","allowedRange","rangeItems","UnlinkCommand","linkCommand","rangesToUnlink","ManualDecorator","HIGHLIGHT_CLASS","DECORATOR_AUTOMATIC","DECORATOR_MANUAL","EXTERNAL_LINKS_REGEXP","LinkEditing","linkDecorators","automaticDecoratorDefinitions","automaticDecorators","manualDecoratorDefinitions","manualDecorators","decoratorDefinition","manualDecoratorValue","clickedElement","attributeKeys","removeLinkAttributesFromSelection","getLinkAttributesAllowedOnText","newLink","linkAttributes","LinkFormView","classList","accumulator","switchButton","switches","decoratorValue","additionalButtonsView","LinkActionsView","unlinkIcon","VISUAL_SELECTION_MARKER_NAME","LinkUI","ClickObserver","actionsView","unlinkCommand","allowCreatingEmptyLinks","formView","isCommandEnabled","isInputEmpty","parsedUrl","linkIcon","keyEvtData","forceVisible","prevSelectedLink","prevSelectionParent","getSelectionParent","selectedLink","markerViewElements","targetLink","findLinkElementAncestor","startLink","endLink","MIN_LINK_LENGTH_WITH_SPACE_AT_END","URL_REG_EXP","URL_GROUP_IN_MATCH","AutoLink","selectedRange","selStart","selEnd","updatedSelection","watcher","isSingleSpaceAtTheEnd","getUrlAtTextEnd","linkEnd","linkStart","rangeToCheck","shiftEnterCommand","fullUrl","isLinkAllowedOnRange","linkIsAlreadySet","deletePlugin","Link","ListWalker","nestedItems","iterateSiblingListBlocks","previousNodesByIndent","isListItemBlock","previousNodeInList","nodeIndent","previousNodeIndent","ListBlocksIterable","listHead","ListItemUid","getAllListItemBlocks","listItem","getListItemBlocks","getNestedListBlocks","getListItems","backwardBlocks","forwardBlocks","isFirstBlockOfListItem","listBlock","isLastBlockOfListItem","expandListBlocksToCompleteItems","higherIndent","allBlocks","itemBlock","sortBlocks","expandListBlocksToCompleteList","splitListItemBefore","mergeListItemBefore","parentBlock","indentBlocks","expand","indentBy","blockIndent","removeListAttributes","outdentBlocksWithMerge","visited","referenceIndent","parentBlocks","mergedBlocks","mergeListItemIfNotLast","mergedBlock","isSingleListItem","firstItemId","outdentFollowingItems","lastBlock","changedBlocks","currentIndent","newIndent","getSelectedBlockObject","canBecomeSimpleListItem","ListIndentCommand","indentDirection","getSelectedListBlocks","previousItemBlock","siblingItem","firstNonListBlockIndex","ListCommand","selectedBlockObject","turnOff","itemBlocks","ListMergeCommand","shouldMergeOnBlocksContentLevel2","firstIndent","lastIndent","lastElementId","nestedLastElementBlocks","lastElementAfterDelete","nextSibling","siblingNode","isFirstBlock","ListSplitCommand","ListUtils","isListView","isListItemView","getIndent","previousSibling","createListElement","getViewElementIdForListType","getViewElementNameForListType","createListItemElement","findAndAddListHeadToMap","itemToListHead","fixListIndents","listNodes","maxIndent","prevIndent","fixBy","applied","itemIndent","fixListItemIds","seenIds","listType","listItemId","listItemUpcastConverter","listIndent","firstItemListType","listUpcastCleanList","reconvertItemsOnDataChange","attributeNames","listEditing","itemsToRefresh","changedItems","doesItemBlockRequiresRefresh","collectListItemsToRefresh","doesItemWrappingRequiresRefresh","useBogus","shouldUseBogusParagraph","isListItemElement","isListElement","listItemDowncastConverter","strategies","dataPipeline","createAttributesConsumer","consumable","findMappedViewElement","removeCustomMarkerElements","unwrapListItemBlock","insertCustomMarkerElements","wrapListItemBlock","bogusParagraphCreator","viewWalker","markersToRemove","strategy","markerElement","attributeElement","parentElement","listItemIndent","currentListItem","listItemViewElement","listViewElement","LIST_BASE_ATTRIBUTES","ListEditing","multiBlock","outdent","mergeBackwardCommand","mergeForwardCommand","shouldMergeOnBlocksContentLevel","isLastBlock","splitCommand","modelAttributes","modelChangePostFixer","createModelIndentPasteFixer","allContentChildren","lastItem","allChildren","innerItem","refItem","refType","refIndent","firstElementIndent","indentDiff","isListItem","createUIComponent","ListUI","List","FontCommand","updateAttribute","FONT_SIZE","FONT_FAMILY","FONT_COLOR","FONT_BACKGROUND_COLOR","buildDefinition","modelAttributeKey","renderUpcastAttribute","styleAttr","normalizeColorCode","renderDowncastElement","addColorSelectorToDropdown","colorSelectorView","FontFamilyCommand","normalizeOptions","configuredOptions","getOptionDefinition","generateFontPreset","fontDefinition","fontNames","firstFontName","cssFontNames","normalizeFontNameForCSS","fontName","FontFamilyEditing","attributeValue","FontFamilyUI","_prepareListOptions","fontFamilyIcon","FontFamily","FontSizeCommand","normalizeOptions2","getOptionDefinition2","namedPresets","isFullItemDefinition","attachPriority","preset","findPreset","isNumericalDefinition","generatePixelPreset","numberValue","styleFontSize","FontSizeEditing","supportAllValues","presets","isLength","isPercentage","isRelative","maxSize","clampedSize","FontSizeUI","_prepareListOptions2","fontSizeIcon","FontSize","FontColorCommand","FontColorEditing","ColorUI","componentName","dropdownLabel","componentConfig","colorsConfig","localizedColors","hasColorPicker","locale2","dropdownContentRendered","FontColorUI","fontColorIcon","FontColor","FontBackgroundColorCommand","FontBackgroundColorEditing","addBackgroundRules","FontBackgroundColorUI","fontBackgroundColorIcon","FontBackgroundColor","Font","modelToViewUrlAttributeConverter","registry","figure","mediaContentElement","mediaViewElement","toMediaWidget","createMediaFigureElement","getSelectedMediaModelWidget","insertMedia","findOptimalPosition","mediaElement","MediaEmbedCommand","selectedMedia","isMediaSelected","isAllowedInParent","mediaPlaceholderIconViewBox","MediaRegistry","providers","extraProviders","removedProviders","providerDefinitions","provider","Media","previewRenderer","subPattern","rawUrl","mediaHtml","mediaPlaceholderIcon","MediaEmbedEditing","renderMediaPreview","viewMedia","modelCursor","URL_REGEXP","AutoMediaEmbed","firstRange","leftLivePosition","LivePosition","rightLivePosition","leftPosition","rightPosition","mediaRegistry","urlRange","insertionPosition","MediaFormView","validators","validator","inputField","MediaEmbedUI","getFormValidators","mediaIcon","MediaEmbed","supportedOptions","isSupported","isDefault","alignment","normalizeAlignmentOptions","normalizedOptions","isNameValid","classNameCount","allOptions","succeedingOptions","ALIGNMENT","AlignmentCommand","currentAlignment","removeAlignmentFromSelection","setAlignmentOnSelection","AlignmentEditing","optionsToConvert","shouldUseClasses","buildClassDefinition","buildDowncastInlineDefinition","upcastInlineDefinitions","buildUpcastInlineDefinitions","upcastCompatibilityDefinitions","buildUpcastCompatibilityDefinitions","iconsMap","AlignmentUI","defaultIcon","Alignment","ClassicEditorBase","CloudinaryUploadAdapter","cloudName","uploadPreset","folder","genericErrorText","CloudinaryUploadAdapterPlugin","EssentialsPlugin","UploadAdapterPlugin","AutoformatPlugin","BoldPlugin","ItalicPlugin","BlockQuotePlugin","CloudServicesPlugin","EasyImagePlugin","HeadingPlugin","ImagePlugin","ImageCaptionPlugin","ImageStylePlugin","ImageToolbarPlugin","ImageUploadPlugin","LinkPlugin","ListPlugin","ParagraphPlugin","FontPlugin","MediaEmbedPlugin","ImageResizePlugin","TextAlignmentPlugin","ckeditor_controller","cloudinary_image_controller","defaultSources","paramsToSign","signature","textStatus","$imageElement","require_pickr_min","o4","t5","n4","_2","w2","o5","a3","l3","c3","p3","u3","v3","b3","p4","m3","t6","e5","_E","__vite__cjsImport3__simonwep_pickr","Pickr","color_picker_controller","targetEl","hexColor","_instance","hexaColor","require_moment","hookCallback","setHookCallback","isArray","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","createUTC","strict","createLocalOrUTC","defaultParsingFlags","getParsingFlags","some","fun","flags","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","to2","from2","Moment","isMoment","warn","deprecate","firstTime","deprecations","deprecateSimple","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","calendar","mom","now2","output","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign2","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token2","padded","ordinal2","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","tok","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","ordinal","defaultRelativeTime","relativeTime","withoutSuffix","isFuture","pastFuture","diff2","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","set$1","get","daysInMonth","stringGet","stringSet","prioritized","match1","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","regexes","addRegexToken","strictRegex","localeData2","getParseRegexForToken","unescapeFormat","regexEscape","p1","addParseToken","addWeekParseToken","token3","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","month","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","llc","localeMonthsParse","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","getSetYear","getIsLeapYear","createDate","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","day","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours2","minutes2","isLower","baseConfig","locales","localeFamilies","globalLocale","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","names","split","loadLocale","oldLocale","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","weekYear","weekdayOverflow","curWeek","createLocal","tokens2","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","hour","meridiem2","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","now","ordering","isDurationValid","unitHasDecimal","isValid$1","createInvalid$1","createDuration","Duration","duration","years2","quarters","months2","weeks2","days2","seconds2","milliseconds2","isDuration","absRound","array1","array2","dontConvert","lengthDiff","diffs","offset2","offsetFromString","chunkOffset","chunk","cloneWithOffset","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","createAdder","period","dur","isAdding","updateOffset","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","wholeMonthDiff","anchor2","adjust","toISOString","keepOffset","utc","zone","datetime","inputString","fromNow","toNow","newLocaleData","localeData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","abbr","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","preParsePostFormat","proto$1","get$1","field","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","milliseconds","seconds","minutes","hours","days","months","years","weeks","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds2","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","humanize","argWithSuffix","argThresholds","withSuffix","th","abs$1","sign","toISOString$1","totalSign","ymSign","daysSign","hmsSign","proto$2","require_daterangepicker","moment2","jquery","window.jQuery","moment","DateRangePicker","rangeHtml","maxDate","startDate","endDate","minute","ampm","side","firstDay","lastDay","lastMonth","lastYear","daysInLastMonth","dayOfWeek","startDay","curDate","col","row","minDate","dateHtml","currentMonth","currentYear","maxYear","minYear","inMinYear","inMaxYear","monthHtml","yearHtml","dayOfWeek2","maxLimit","isCustom","cname","timeSelector","i_in_24","am_html","pm_html","containerTop","drops","parentRightEdge","containerWidth","containerRight","containerLeft","dates","cal","leftCalendar","rightCalendar","title2","row2","col2","cal2","customRange","isLeft","leftOrRight","dateString","implementOptions","date_controller","picker","currentTimeZoneEl","selectedOptionTimeZoneButton","file_controller","image_controller","multiple_files_upload_controller","password_controller","openEyeIcon","eyeSlashIcon","newType","require_intlTelInput","undefined","allCountries","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","intlTelInputGlobals","regionlessNanpNumbers","forEachProp","forEachInstance","Iti","Iti2","_this","customOptions","_this2","autoCountryPromise","utilsScriptPromise","iso2","countryCode","lowerCaseOnlyCountries","country","lowerCaseExcludeCountries","iso","_c","rootCountryCode","areaCode","partialDialCode","countryData","parentClass","hiddenInputName","countries","preferred","idSuffix","useAttribute","dialCode","isRegionlessNanp","_this$options","initialCountry","nationalMode","autoHideDialCode","separateDialCode","_this3","_this4","isDropdownHidden","_this5","_this6","_this7","numeric","shouldHaveClass","_this8","inputTop","dropdownHeight","dropdownFitsBelow","dropdownFitsAbove","extraTop","_this9","isOpening","queryTimer","originalNumber","useNational","_intlTelInputUtils$nu","NATIONAL","INTERNATIONAL","selectedDialCode","isNanp","countryCodes","alreadySelected","isRegionlessNanpNumber","shouldFocus","prevItem","ignoreOnlyCountriesOption","allowFail","countryList","prevCountry","selectedFlagWidth","nextItem","containerClone","flagsContainerClone","selectedFlagClone","shouldSetPlaceholder","numberType","flagChanged","middle","containerHeight","containerBottom","elementHeight","elementTop","elementBottom","newScrollTop","middleOffset","heightDifference","newDialCodeBare","hasSelectedListItem","inputVal","newDialCode","newNumber","prevDialCode","includeAreaCode","numericChars","numericVal","originalCountryCode","injectScript","handleSuccess","handleFailure","iti","require_intl_tel_input","__vite__cjsImport2_intlTelInput","aa","ba","ca","da","ea","fa","ha","ia","ja","ka","la","ma","na","oa","pa","qa","ra","sa","ta","va","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","ua","Sa","intlTelInput","phone_controller","require_jquery_validate_min","d3","c4","require_additional_methods_min","resume_controller","header","super_select_controller","imageUrl","imageHtml","flash_message_controller","group_event_form_controller","require_natural_compare","alphabet","alphabetIndexMap","alphabetIndexMapLength","isNumberCode","naturalCompare","lengthA","lengthB","aIndex","bIndex","charCodeA","charCodeB","numStartA","numStartB","numEndA","numEndB","difference","require_get_by_class","getElementsByClassName","single","querySelector","polyfill","classElements","elsLen","require_extend","require_index_of","il","require_to_array","require_events","unbind","capture","require_to_string","require_classes","ClassList","force","require_get_attribute","require_item","initValues","notCreate","initValues2","notCreate2","require_add_async","addAsync","valuesToAdd","require_pagination","require_src","isHidden","refresh","pagingList","page","pages","currentPage","innerWindow","currentPageItem","require_parse","Item","getChildren","itemElements","valueNames","parseAsync","itemsToIndex","require_templater","Templater","createItem","templater","itemSource","getItemSource","getFirstListItem","createCleanTemplateItem","templateNode","valueName","jl","itemHTML","tbody","getValueName","setValue","require_search","searchString","customSearch","prepare","tmpColumn","words","phrase","ss","kl","word_found","column","text2","searchMethod","alreadyCleared","require_filter","filterFunction","require_sort","btn","predefinedOrder","insensitive","sort","customSortFunction","multi","sortFunction","itemA","itemB","sort2","require_fuzzy","Match_Location","Match_Distance","Match_Threshold","loc","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","matchmask","bin_min","bin_mid","bin_max","last_rd","finish","rd","charMatch","require_fuzzy_search","getByClass","fuzzy","fuzzySearch","searchArguments","foundArgument","searchArgument","naturalSort","initPagination","json","values2","options2","matchedItems","__vite__cjsImport1_list_js","fileAttributes","group_files_controller","group_membership_form_controller","membershipAdded","membership","indexToRemove","TableController","group_memberships_table_controller","isGoingToShowRemoved","group_permissions_form_controller","isChecked","checkbox","isGoingToSelectAll","noop","isNullOrUndef","isNumberFinite","finiteOrDefault","valueOrDefault","toPercentage","toDimension","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","klen","isValidKey","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_getKeyResolver","_splitKey","_capitalize","setsEqual","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","niceNum","roundedRange","almostEquals","niceRange","fraction","_factorize","sqrt","epsilon","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","cmp","mid","_lookupByKey","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","listener","unlistenArrayEvents","stub","_arrayUnique","set2","requestAnimFrame","callback2","throttled","updateFn","updateArgs","args2","ticking","debounce","_toLeftRightCenter","align","_alignStartEnd","_textX","rtl","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","iScale","_parsed","axis","minDefined","maxDefined","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","atEdge","elasticIn","elasticOut","effects","lim","p2b","n2b","b2n","n2p","map$1","h1","eq","hexParse","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hueParse","rotate","deg","hslString","names$1","unpack","unpacked","tkeys","ok","nk","nameParse","RGB_RE","rgbParse","rgbString","rgb1","rgb2","modHSL","fromObject","functionParse","Color","_Color","color2","c1","w1","index_esm","isPatternOrGradient","getHoverColor","overrides","getScope$1","_descriptors2","targetScope","scopeObject","targetScopeObject","privateName","local","toFontString","font","_measureText","gc","longest","textWidth","_longestText","arrayOfThings","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","devicePixelRatio","halfWidth","clearCanvas","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","rotation","radius","rad","_isPointInArea","point","area","clipArea","unclipArea","_steppedLineTo","flip","midpoint","_bezierCurveTo","renderText","stroke","setRenderOpts","decorateText","metrics","yDecoration","addRoundedRectPath","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","fallback","cacheable","_addGrace","minmax","grace","beginAtZero","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","subProxy","descriptorDefaults","_descriptors","_resolveWithContext","defaults2","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","resolve2","_proxy","_subProxy","descriptors2","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","resolver","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","_isDomSupported","_getParentNode","parseMaxStyle","parentProperty","valueInPixels","getComputedStyle","getStyle","positions","getPositionedStyle","useOffsetPos","getCanvasPosition","touches","offsetX","offsetY","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","getContainerSize","maxHeight","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","getNumberFormat","formatter","formatNumber","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","_boundSegment","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","spanGaps","solidSegments","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","styleChanged","Animator","anims","numSteps","draw2","charts","animator","transparent","interpolators","factor","c0","elapsed","remain","promises","rej","resolved","numbers","animationOptions","Animations","animatedProps","newOptions","resolveTargetOptions","animations","awaitAll","running","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","updateStacks","iAxis","vAxis","itemStacks","getFirstScaleId","scales2","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","shared","createStack","canStack","DatasetController","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","otherMin","otherMax","_skip","elements2","active","drawActiveElementsOnTop","sharing","names2","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","parseFloatBar","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","startEnd","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","reset","horizontal","vpixels","ipixels","dataIndex","skipNull","barThickness","baseValue","minBarLength","floating","startPixel","endPixel","halfGrid","maxBarThickness","center","stackIndex","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","minX","minY","DoughnutController","chartArea","arcs","spacing","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","ringWeightOffset","pointStyle","legendItem","legend","tooltipItem","dataLabel","LineController","_dataset","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","PolarAreaController","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","useFinalPosition","formatters","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","Ticks","_ctx","autoSkip","tickOpts","ticksLimit","determineMaxTicks","majorIndices","getMajorIndices","numMajorIndices","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","reverseAlign","offsetFromEdge","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex2","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","_Scale","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","decimal","optionTicks","rot","grid","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","optsAtIndex","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","gz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","propertyParts","sourceName","sourceScope","Registry","typedRegistry","reg","itemReg","registry2","component","camelMethod","ScatterController","showLine","abstract","DateAdapter","chartOptions","timestamp","amount","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","getDistanceMetricForAxis","useX","useY","getIntersectItems","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange2","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts2","setLayoutDims","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","positions2","fitBoxes","refitBoxes","refit","same","setBoxDims","placeBoxes","userPadding","layouts","layoutItem","minPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","proxies","_detectPlatform","PluginService","plugins2","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","onAnimationsComplete","animationOptions2","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","Chart","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","platform","_add","listener2","_remove","detached","enabled","activeElements","lastActive","replay","hoverOptions","deactivated","activated","invalidatePlugins","enumerable","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","alpha2","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawFullCircleBorders","inner","drawBorder","borderWidth","borderJoinStyle","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","strokePathDirect","segmentMethod","usePath2D","draw","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","skip2","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","inRange","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","outer","addRectPath","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","xMin","dx","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","plugin_decimation","xAxis","_segments","tpoints","_findSegmentEnd","_getBounds","targetSegments","tgt","subBounds","fillSources","fillSource","_getEdge","_pointsFromSegments","boundary","linePoints","_createBoundaryLine","_loop","_shouldApplyFill","_resolveTarget","propagate","fill2","_decodeFill","parseFillOption","decodeTargetIndex","firstCh","_getTargetPixel","_getTargetValue","fillOption","_buildStackLine","sourcePoints","linesBelow","getLinesBelow","addPointsBelow","sourcePoint","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","computeBoundary","computeCircularBoundary","computeLinearBoundary","_drawfill","lineOpts","doFill","clipVertical","fill","clipY","lineLoop","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","_args","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","rtlHelper","hitbox","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","borderRadius","fillText","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","plugin_legend","usePointStyle","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","map2","plugin_subtitle","positioners","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","labelCount","addIfString","addedLabels","findOrAddLabel","validIndex","CategoryScale","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","maxTicksLimit","stepSize","numericGeneratorOptions","LinearScale","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","pointLabelOpts","additionalAngle","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","pointLabels","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","round2","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","setMajorTicks","map3","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","hasWeekday","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","interpolate2","prevSource","nextSource","prevTarget","nextTarget","TimeSeriesScale","scales","registerables","auto_default","group_task_charts_controller","percentComplete","percentIncomplete","group_task_details_controller","group_task_form_controller","selectedKind","selectedTarget","questionIndex","choiceIndex","guest_checkout_modal_controller","productId","insights_controller","tagDropdown","minimumInputLength","delayBetweenRequests","sessionToken","defineGoogleAutocompleteDataAdapter","oldRemoveChoice","prediction","GoogleAutocompleteDataAdapter","oldSelectMethod","place","job_application_form_controller","AutocompleteClass","selectedOptions","errorClass","validClass","resume","sector","job_preferences_controller","industry","member_demographics_controller","isFormDirty","selfDescribedGenderDiv","selfDescribedGenderInput","selfDescribedPronounsDiv","selfDescribedPronounsInput","selfDescribedEthnicityDiv","selfDescribedEthnicityInput","selfDescribedDisabilityDiv","selfDescribedDisabilityInput","mobile_menu_controller","ModalController","targetModalId","nested_form_controller","post_controller","origin","post_sharing_controller","postTitle","postUrl","product_carousel_controller","__vite__cjsImport1_jquery","product_controller","lineItemToRemove","RevealController","shouldOpen","startSelector","startPromises","defaultSelector","defaultPromises","endSelector","endPromises","openState","_didEndTransition","_didEndTransitionHandler","transitionClasses","transitions","transitionType","shopping_cart_controller","originalTop","originalLeft","shoppingCart","shoppingCartTop","shoppingCartLeft","subgroup_form_controller","isNewRecord","subgroupToRemove","auto","basePlacements","clippingParents","popper","reference","variationPlacements","placement","placements","beforeRead","afterRead","beforeMain","afterMain","beforeWrite","afterWrite","modifierPhases","getNodeName","getWindow","ownerDocument","OwnElement","isHTMLElement","isShadowRoot","applyStyles","_ref","effect","_ref2","initialStyles","styleProperties","style2","applyStyles_default","getBasePlacement","getUAString","uaData","isLayoutViewport","getBoundingClientRect","includeScale","isFixedStrategy","scaleX","scaleY","visualViewport","addVisualOffsets","getLayoutRect","rootNode","isTableElement","getDocumentElement","getParentNode","getTrueOffsetParent","getContainingBlock","isIE","elementCss","currentNode","getOffsetParent","getMainAxisFromPlacement","within","min2","max2","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","arrow","_state$modifiersData$","arrowElement","popperOffsets2","basePlacement","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","axisProp","effect2","_options$element","arrow_default","getVariation","unsetSides","roundOffsetsByDPR","mapToStyles","_Object$assign2","popper2","popperRect","variation","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles_default","passive","effect3","_options$scroll","scroll","_options$resize","scrollParents","scrollParent","eventListeners_default","getOppositePlacement","hash2","getOppositeVariationPlacement","getWindowScroll","scrollLeft","scrollTop","getWindowScrollBarX","getViewportRect","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","isScrollParent","_getComputedStyle","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","clippingParents2","canEscapeClipping","clipperElement","getClippingRect","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","reference2","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","placements2","placement2","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","_options$mainAxis","checkMainAxis","_options$altAxis","checkAltAxis","specifiedFallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","fallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","numberOfChecks","_i2","fittingPlacement","checks2","_ret","flip_default","getSideOffsets","preventedOffsets","isAnySideFullyClipped","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide_default","distanceAndSkiddingToXY","invertDistance","skidding","_options$offset","_data$state$placement","offset_default","popperOffsets","popperOffsets_default","getAltAxis","preventOverflow","_options$tether","tether","_options$tetherOffset","tetherOffset","altAxis","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow_default","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","order","modifiers","requires","dep","depModifier","orderModifiers","orderedModifiers","phase","fn2","pending","mergeByName","merged","merged2","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers3","_generatorOptions$def2","effectCleanupFns","isDestroyed","setOptionsAction","cleanupModifierEffects","runModifierEffects","_state$elements","reference3","popper3","_state$orderedModifie","_state$orderedModifie2","state2","_ref$options","effect4","cleanupFn","noopFn","defaultModifiers2","createPopper3","tooltip_controller","createPopper","unsaved_changes_modal_controller","user_password_controller","vimeo_analytics_controller","player","YOUTUBE_VIDEO_PLAYING_STATE","youtube_analytics_controller","CONTROLLER_FILENAME_REGEX","registerControllers","controllerModules","definitionsFromGlob","definitionFromEntry","controllerModule","identifierForGlobKey","logicalName","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","__vite_glob_0_11","__vite_glob_0_12","__vite_glob_0_13","__vite_glob_0_14","__vite_glob_0_15","__vite_glob_0_16","__vite_glob_0_17","__vite_glob_0_18","__vite_glob_0_19","__vite_glob_0_20","__vite_glob_0_21","__vite_glob_0_22","__vite_glob_0_23","__vite_glob_0_24","__vite_glob_0_25","__vite_glob_0_26","__vite_glob_0_27","__vite_glob_0_28","__vite_glob_0_29","__vite_glob_0_30","__vite_glob_0_31","__vite_glob_0_32","__vite_glob_0_33","__vite_glob_0_34","__vite_glob_0_35","__vite_glob_0_36","__vite_glob_0_37","__vite_glob_0_38","__vite_glob_0_39","__vite_glob_0_40","__vite_glob_0_41","__vite_glob_0_42","__vite_glob_0_43","__vite_glob_0_44","Honeybadger","__vite__cjsImport7__honeybadgerIo_js","ActiveStorage.start"],"sources":["../../../node_modules/.vite/deps_build-d123dee8/chunk-624QZG55.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-IL4DE2EU.js","../../../node_modules/.vite/deps_build-d123dee8/jquery.js","../../../node_modules/.vite/deps_build-d123dee8/@hotwired_turbo-rails.js","../../../node_modules/.vite/deps_build-d123dee8/@rails_ujs.js","../../../node_modules/.vite/deps_build-d123dee8/@rails_activestorage.js","../../../node_modules/.vite/deps_build-d123dee8/select2.js","../../../node_modules/.vite/deps_build-d123dee8/jstz.js","../../../node_modules/.vite/deps_build-d123dee8/@honeybadger-io_js.js","../../../app/javascript/account/progress.js","../../../node_modules/.vite/deps_build-d123dee8/tributejs.js","../../../node_modules/.vite/deps_build-d123dee8/trix.js","../../../node_modules/.vite/deps_build-d123dee8/@rails_actiontext.js","../../../app/javascript/account/fields/trix_editor.js","../../../app/javascript/account/member_experience.js","../../../node_modules/.vite/deps_build-d123dee8/dragula.js","../../../app/javascript/concerns/sortable.js","../../../app/javascript/concerns/reassignable.js","../../../node_modules/.vite/deps_build-d123dee8/@hotwired_stimulus.js","../../../app/javascript/controllers/accordion_controller.js","../../../app/javascript/controllers/carousel_controller.js","../../../app/javascript/controllers/clipboard_controller.js","../../../app/javascript/controllers/fields/button_toggle_controller.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-XX3CIG5U.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-CCHBLTQG.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-editor-classic_src_classiceditor.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-cloud-services_src_cloudservices.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-LTKJ3JKL.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-6GJUXDIH.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-W7WGVHCV.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-ZGNJRE43.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-UHWQXN2Z.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-essentials_src_essentials.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-KQSKBC7C.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-adapter-ckfinder_src_uploadadapter.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-autoformat_src_autoformat.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-LVH5WX2D.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-basic-styles_src_bold.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-basic-styles_src_italic.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-block-quote_src_blockquote.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-easy-image_src_easyimage.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-2NBVD3VO.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-heading_src_heading.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-5UJG77VP.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-MPGKEZT5.js","../../../node_modules/.vite/deps_build-d123dee8/chunk-MBUPU22L.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_image.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_imagecaption.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_imagestyle.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_imagetoolbar.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_imageupload.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-image_src_imageresize.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-link_src_link.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-list_src_list.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-font_src_font.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-media-embed_src_mediaembed.js","../../../node_modules/.vite/deps_build-d123dee8/@ckeditor_ckeditor5-alignment_src_alignment.js","../../../app/javascript/controllers/fields/ckeditor_controller.js","../../../app/javascript/controllers/fields/cloudinary_image_controller.js","../../../node_modules/.vite/deps_build-d123dee8/@simonwep_pickr.js","../../../app/javascript/controllers/fields/color_picker_controller.js","../../../node_modules/.vite/deps_build-d123dee8/daterangepicker.js","../../../app/javascript/controllers/fields/date_controller.js","../../../app/javascript/controllers/fields/file_controller.js","../../../app/javascript/controllers/fields/image_controller.js","../../../app/javascript/controllers/fields/multiple_files_upload_controller.js","../../../app/javascript/controllers/fields/password_controller.js","../../../node_modules/.vite/deps_build-d123dee8/intl-tel-input.js","../../../node_modules/.vite/deps_build-d123dee8/intl-tel-input_build_js_utils__js.js","../../../app/javascript/controllers/fields/phone_controller.js","../../../node_modules/.vite/deps_build-d123dee8/jquery-validation_dist_jquery__validate__min.js","../../../node_modules/.vite/deps_build-d123dee8/jquery-validation_dist_additional-methods__min.js","../../../app/javascript/controllers/fields/resume_controller.js","../../../app/javascript/controllers/fields/super_select_controller.js","../../../app/javascript/controllers/flash_message_controller.js","../../../app/javascript/controllers/group_event_form_controller.js","../../../node_modules/.vite/deps_build-d123dee8/list__js.js","../../../app/javascript/controllers/group_files_controller.js","../../../app/javascript/controllers/group_membership_form_controller.js","../../../app/javascript/controllers/table_controller.js","../../../app/javascript/controllers/group_memberships_table_controller.js","../../../app/javascript/controllers/group_permissions_form_controller.js","../../../node_modules/.vite/deps_build-d123dee8/chart__js_auto.js","../../../app/javascript/controllers/group_task_charts_controller.js","../../../app/javascript/controllers/group_task_details_controller.js","../../../app/javascript/controllers/group_task_form_controller.js","../../../app/javascript/controllers/guest_checkout_modal_controller.js","../../../app/javascript/controllers/insights_controller.js","../../../app/javascript/adapters/google_autocomplete_data_adapter.js","../../../app/javascript/controllers/job_application_form_controller.js","../../../app/javascript/controllers/job_preferences_controller.js","../../../app/javascript/controllers/member_demographics_controller.js","../../../app/javascript/controllers/mobile_menu_controller.js","../../../app/javascript/controllers/modal_controller.js","../../../app/javascript/controllers/nested_form_controller.js","../../../app/javascript/controllers/post_controller.js","../../../app/javascript/controllers/post_sharing_controller.js","../../../app/javascript/controllers/product_carousel_controller.js","../../../app/javascript/controllers/product_controller.js","../../../app/javascript/controllers/reveal_controller.js","../../../app/javascript/controllers/shopping_cart_controller.js","../../../app/javascript/controllers/subgroup_form_controller.js","../../../node_modules/.vite/deps_build-d123dee8/@popperjs_core.js","../../../app/javascript/controllers/tooltip_controller.js","../../../app/javascript/controllers/unsaved_changes_modal_controller.js","../../../app/javascript/controllers/user_password_controller.js","../../../app/javascript/controllers/vimeo_analytics_controller.js","../../../app/javascript/controllers/youtube_analytics_controller.js","../../../node_modules/.vite/deps_build-d123dee8/stimulus-vite-helpers.js","../../../app/javascript/controllers/index.js","../../../app/javascript/electron/index.js","../../../app/javascript/entrypoints/application.js"],"sourcesContent":["var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __require = /* @__PURE__ */ ((x) => typeof require !== \"undefined\" ? require : typeof Proxy !== \"undefined\" ? new Proxy(x, {\n  get: (a, b) => (typeof require !== \"undefined\" ? require : a)[b]\n}) : x)(function(x) {\n  if (typeof require !== \"undefined\")\n    return require.apply(this, arguments);\n  throw Error('Dynamic require of \"' + x + '\" is not supported');\n});\nvar __commonJS = (cb, mod) => function __require2() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n  if (from && typeof from === \"object\" || typeof from === \"function\") {\n    for (let key of __getOwnPropNames(from))\n      if (!__hasOwnProp.call(to, key) && key !== except)\n        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n  }\n  return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n  // If the importer is in node compatibility mode or this is not an ESM\n  // file that has been converted to a CommonJS file using a Babel-\n  // compatible transform (i.e. \"__esModule\" has not been set), then set\n  // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n  isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n  mod\n));\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\n\nexport {\n  __require,\n  __commonJS,\n  __export,\n  __toESM,\n  __publicField\n};\n//# sourceMappingURL=chunk-624QZG55.js.map\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/jquery/dist/jquery.js\nvar require_jquery = __commonJS({\n  \"node_modules/jquery/dist/jquery.js\"(exports, module) {\n    (function(global, factory) {\n      \"use strict\";\n      if (typeof module === \"object\" && typeof module.exports === \"object\") {\n        module.exports = global.document ? factory(global, true) : function(w) {\n          if (!w.document) {\n            throw new Error(\"jQuery requires a window with a document\");\n          }\n          return factory(w);\n        };\n      } else {\n        factory(global);\n      }\n    })(typeof window !== \"undefined\" ? window : exports, function(window2, noGlobal) {\n      \"use strict\";\n      var arr = [];\n      var getProto = Object.getPrototypeOf;\n      var slice = arr.slice;\n      var flat = arr.flat ? function(array) {\n        return arr.flat.call(array);\n      } : function(array) {\n        return arr.concat.apply([], array);\n      };\n      var push = arr.push;\n      var indexOf = arr.indexOf;\n      var class2type = {};\n      var toString = class2type.toString;\n      var hasOwn = class2type.hasOwnProperty;\n      var fnToString = hasOwn.toString;\n      var ObjectFunctionString = fnToString.call(Object);\n      var support = {};\n      var isFunction = function isFunction2(obj) {\n        return typeof obj === \"function\" && typeof obj.nodeType !== \"number\" && typeof obj.item !== \"function\";\n      };\n      var isWindow = function isWindow2(obj) {\n        return obj != null && obj === obj.window;\n      };\n      var document = window2.document;\n      var preservedScriptAttributes = {\n        type: true,\n        src: true,\n        nonce: true,\n        noModule: true\n      };\n      function DOMEval(code, node, doc) {\n        doc = doc || document;\n        var i, val, script = doc.createElement(\"script\");\n        script.text = code;\n        if (node) {\n          for (i in preservedScriptAttributes) {\n            val = node[i] || node.getAttribute && node.getAttribute(i);\n            if (val) {\n              script.setAttribute(i, val);\n            }\n          }\n        }\n        doc.head.appendChild(script).parentNode.removeChild(script);\n      }\n      function toType(obj) {\n        if (obj == null) {\n          return obj + \"\";\n        }\n        return typeof obj === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : typeof obj;\n      }\n      var version = \"3.6.0\", jQuery = function(selector, context) {\n        return new jQuery.fn.init(selector, context);\n      };\n      jQuery.fn = jQuery.prototype = {\n        // The current version of jQuery being used\n        jquery: version,\n        constructor: jQuery,\n        // The default length of a jQuery object is 0\n        length: 0,\n        toArray: function() {\n          return slice.call(this);\n        },\n        // Get the Nth element in the matched element set OR\n        // Get the whole matched element set as a clean array\n        get: function(num) {\n          if (num == null) {\n            return slice.call(this);\n          }\n          return num < 0 ? this[num + this.length] : this[num];\n        },\n        // Take an array of elements and push it onto the stack\n        // (returning the new matched element set)\n        pushStack: function(elems) {\n          var ret = jQuery.merge(this.constructor(), elems);\n          ret.prevObject = this;\n          return ret;\n        },\n        // Execute a callback for every element in the matched set.\n        each: function(callback) {\n          return jQuery.each(this, callback);\n        },\n        map: function(callback) {\n          return this.pushStack(jQuery.map(this, function(elem, i) {\n            return callback.call(elem, i, elem);\n          }));\n        },\n        slice: function() {\n          return this.pushStack(slice.apply(this, arguments));\n        },\n        first: function() {\n          return this.eq(0);\n        },\n        last: function() {\n          return this.eq(-1);\n        },\n        even: function() {\n          return this.pushStack(jQuery.grep(this, function(_elem, i) {\n            return (i + 1) % 2;\n          }));\n        },\n        odd: function() {\n          return this.pushStack(jQuery.grep(this, function(_elem, i) {\n            return i % 2;\n          }));\n        },\n        eq: function(i) {\n          var len = this.length, j = +i + (i < 0 ? len : 0);\n          return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n        },\n        end: function() {\n          return this.prevObject || this.constructor();\n        },\n        // For internal use only.\n        // Behaves like an Array's method, not like a jQuery method.\n        push,\n        sort: arr.sort,\n        splice: arr.splice\n      };\n      jQuery.extend = jQuery.fn.extend = function() {\n        var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n        if (typeof target === \"boolean\") {\n          deep = target;\n          target = arguments[i] || {};\n          i++;\n        }\n        if (typeof target !== \"object\" && !isFunction(target)) {\n          target = {};\n        }\n        if (i === length) {\n          target = this;\n          i--;\n        }\n        for (; i < length; i++) {\n          if ((options = arguments[i]) != null) {\n            for (name in options) {\n              copy = options[name];\n              if (name === \"__proto__\" || target === copy) {\n                continue;\n              }\n              if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n                src = target[name];\n                if (copyIsArray && !Array.isArray(src)) {\n                  clone = [];\n                } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n                  clone = {};\n                } else {\n                  clone = src;\n                }\n                copyIsArray = false;\n                target[name] = jQuery.extend(deep, clone, copy);\n              } else if (copy !== void 0) {\n                target[name] = copy;\n              }\n            }\n          }\n        }\n        return target;\n      };\n      jQuery.extend({\n        // Unique for each copy of jQuery on the page\n        expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n        // Assume jQuery is ready without the ready module\n        isReady: true,\n        error: function(msg) {\n          throw new Error(msg);\n        },\n        noop: function() {\n        },\n        isPlainObject: function(obj) {\n          var proto, Ctor;\n          if (!obj || toString.call(obj) !== \"[object Object]\") {\n            return false;\n          }\n          proto = getProto(obj);\n          if (!proto) {\n            return true;\n          }\n          Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n          return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n        },\n        isEmptyObject: function(obj) {\n          var name;\n          for (name in obj) {\n            return false;\n          }\n          return true;\n        },\n        // Evaluates a script in a provided context; falls back to the global one\n        // if not specified.\n        globalEval: function(code, options, doc) {\n          DOMEval(code, { nonce: options && options.nonce }, doc);\n        },\n        each: function(obj, callback) {\n          var length, i = 0;\n          if (isArrayLike(obj)) {\n            length = obj.length;\n            for (; i < length; i++) {\n              if (callback.call(obj[i], i, obj[i]) === false) {\n                break;\n              }\n            }\n          } else {\n            for (i in obj) {\n              if (callback.call(obj[i], i, obj[i]) === false) {\n                break;\n              }\n            }\n          }\n          return obj;\n        },\n        // results is for internal usage only\n        makeArray: function(arr2, results) {\n          var ret = results || [];\n          if (arr2 != null) {\n            if (isArrayLike(Object(arr2))) {\n              jQuery.merge(\n                ret,\n                typeof arr2 === \"string\" ? [arr2] : arr2\n              );\n            } else {\n              push.call(ret, arr2);\n            }\n          }\n          return ret;\n        },\n        inArray: function(elem, arr2, i) {\n          return arr2 == null ? -1 : indexOf.call(arr2, elem, i);\n        },\n        // Support: Android <=4.0 only, PhantomJS 1 only\n        // push.apply(_, arraylike) throws on ancient WebKit\n        merge: function(first, second) {\n          var len = +second.length, j = 0, i = first.length;\n          for (; j < len; j++) {\n            first[i++] = second[j];\n          }\n          first.length = i;\n          return first;\n        },\n        grep: function(elems, callback, invert) {\n          var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert;\n          for (; i < length; i++) {\n            callbackInverse = !callback(elems[i], i);\n            if (callbackInverse !== callbackExpect) {\n              matches.push(elems[i]);\n            }\n          }\n          return matches;\n        },\n        // arg is for internal usage only\n        map: function(elems, callback, arg) {\n          var length, value, i = 0, ret = [];\n          if (isArrayLike(elems)) {\n            length = elems.length;\n            for (; i < length; i++) {\n              value = callback(elems[i], i, arg);\n              if (value != null) {\n                ret.push(value);\n              }\n            }\n          } else {\n            for (i in elems) {\n              value = callback(elems[i], i, arg);\n              if (value != null) {\n                ret.push(value);\n              }\n            }\n          }\n          return flat(ret);\n        },\n        // A global GUID counter for objects\n        guid: 1,\n        // jQuery.support is not used in Core but other projects attach their\n        // properties to it so it needs to exist.\n        support\n      });\n      if (typeof Symbol === \"function\") {\n        jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n      }\n      jQuery.each(\n        \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n        function(_i, name) {\n          class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n        }\n      );\n      function isArrayLike(obj) {\n        var length = !!obj && \"length\" in obj && obj.length, type = toType(obj);\n        if (isFunction(obj) || isWindow(obj)) {\n          return false;\n        }\n        return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n      }\n      var Sizzle = (\n        /*!\n         * Sizzle CSS Selector Engine v2.3.6\n         * https://sizzlejs.com/\n         *\n         * Copyright JS Foundation and other contributors\n         * Released under the MIT license\n         * https://js.foundation/\n         *\n         * Date: 2021-02-16\n         */\n        function(window3) {\n          var i, support2, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document2, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains, expando = \"sizzle\" + 1 * /* @__PURE__ */ new Date(), preferredDoc = window3.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {\n            if (a === b) {\n              hasDuplicate = true;\n            }\n            return 0;\n          }, hasOwn2 = {}.hasOwnProperty, arr2 = [], pop = arr2.pop, pushNative = arr2.push, push2 = arr2.push, slice2 = arr2.slice, indexOf2 = function(list, elem) {\n            var i2 = 0, len = list.length;\n            for (; i2 < len; i2++) {\n              if (list[i2] === elem) {\n                return i2;\n              }\n            }\n            return -1;\n          }, booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\", whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\", identifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\", attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n          \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5]\n          // or strings [capture 3 or capture 4]\"\n          `*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(` + identifier + \"))|)\" + whitespace + \"*\\\\]\", pseudos = \":(\" + identifier + `)(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|` + attributes + \")*)|.*)\\\\)|)\", rwhitespace = new RegExp(whitespace + \"+\", \"g\"), rtrim2 = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"), rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"), rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"), rdescend = new RegExp(whitespace + \"|>\"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp(\"^\" + identifier + \"$\"), matchExpr = {\n            \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n            \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n            \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n            \"ATTR\": new RegExp(\"^\" + attributes),\n            \"PSEUDO\": new RegExp(\"^\" + pseudos),\n            \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n            \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n            // For use in libraries implementing .is()\n            // We use this for POS matching in `select`\n            \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n          }, rhtml2 = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr2 = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"), funescape = function(escape, nonHex) {\n            var high = \"0x\" + escape.slice(1) - 65536;\n            return nonHex ? (\n              // Strip the backslash prefix from a non-hex escape sequence\n              nonHex\n            ) : (\n              // Replace a hexadecimal escape sequence with the encoded Unicode code point\n              // Support: IE <=11+\n              // For values outside the Basic Multilingual Plane (BMP), manually construct a\n              // surrogate pair\n              high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320)\n            );\n          }, rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g, fcssescape = function(ch, asCodePoint) {\n            if (asCodePoint) {\n              if (ch === \"\\0\") {\n                return \"�\";\n              }\n              return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n            }\n            return \"\\\\\" + ch;\n          }, unloadHandler = function() {\n            setDocument();\n          }, inDisabledFieldset = addCombinator(\n            function(elem) {\n              return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n            },\n            { dir: \"parentNode\", next: \"legend\" }\n          );\n          try {\n            push2.apply(\n              arr2 = slice2.call(preferredDoc.childNodes),\n              preferredDoc.childNodes\n            );\n            arr2[preferredDoc.childNodes.length].nodeType;\n          } catch (e) {\n            push2 = {\n              apply: arr2.length ? (\n                // Leverage slice if possible\n                function(target, els) {\n                  pushNative.apply(target, slice2.call(els));\n                }\n              ) : (\n                // Support: IE<9\n                // Otherwise append directly\n                function(target, els) {\n                  var j = target.length, i2 = 0;\n                  while (target[j++] = els[i2++]) {\n                  }\n                  target.length = j - 1;\n                }\n              )\n            };\n          }\n          function Sizzle2(selector, context, results, seed) {\n            var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;\n            results = results || [];\n            if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n              return results;\n            }\n            if (!seed) {\n              setDocument(context);\n              context = context || document2;\n              if (documentIsHTML) {\n                if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) {\n                  if (m = match[1]) {\n                    if (nodeType === 9) {\n                      if (elem = context.getElementById(m)) {\n                        if (elem.id === m) {\n                          results.push(elem);\n                          return results;\n                        }\n                      } else {\n                        return results;\n                      }\n                    } else {\n                      if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                        results.push(elem);\n                        return results;\n                      }\n                    }\n                  } else if (match[2]) {\n                    push2.apply(results, context.getElementsByTagName(selector));\n                    return results;\n                  } else if ((m = match[3]) && support2.getElementsByClassName && context.getElementsByClassName) {\n                    push2.apply(results, context.getElementsByClassName(m));\n                    return results;\n                  }\n                }\n                if (support2.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && // Support: IE 8 only\n                // Exclude object elements\n                (nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n                  newSelector = selector;\n                  newContext = context;\n                  if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {\n                    newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n                    if (newContext !== context || !support2.scope) {\n                      if (nid = context.getAttribute(\"id\")) {\n                        nid = nid.replace(rcssescape, fcssescape);\n                      } else {\n                        context.setAttribute(\"id\", nid = expando);\n                      }\n                    }\n                    groups = tokenize(selector);\n                    i2 = groups.length;\n                    while (i2--) {\n                      groups[i2] = (nid ? \"#\" + nid : \":scope\") + \" \" + toSelector(groups[i2]);\n                    }\n                    newSelector = groups.join(\",\");\n                  }\n                  try {\n                    push2.apply(\n                      results,\n                      newContext.querySelectorAll(newSelector)\n                    );\n                    return results;\n                  } catch (qsaError) {\n                    nonnativeSelectorCache(selector, true);\n                  } finally {\n                    if (nid === expando) {\n                      context.removeAttribute(\"id\");\n                    }\n                  }\n                }\n              }\n            }\n            return select(selector.replace(rtrim2, \"$1\"), context, results, seed);\n          }\n          function createCache() {\n            var keys = [];\n            function cache(key, value) {\n              if (keys.push(key + \" \") > Expr.cacheLength) {\n                delete cache[keys.shift()];\n              }\n              return cache[key + \" \"] = value;\n            }\n            return cache;\n          }\n          function markFunction(fn) {\n            fn[expando] = true;\n            return fn;\n          }\n          function assert(fn) {\n            var el = document2.createElement(\"fieldset\");\n            try {\n              return !!fn(el);\n            } catch (e) {\n              return false;\n            } finally {\n              if (el.parentNode) {\n                el.parentNode.removeChild(el);\n              }\n              el = null;\n            }\n          }\n          function addHandle(attrs, handler) {\n            var arr3 = attrs.split(\"|\"), i2 = arr3.length;\n            while (i2--) {\n              Expr.attrHandle[arr3[i2]] = handler;\n            }\n          }\n          function siblingCheck(a, b) {\n            var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;\n            if (diff) {\n              return diff;\n            }\n            if (cur) {\n              while (cur = cur.nextSibling) {\n                if (cur === b) {\n                  return -1;\n                }\n              }\n            }\n            return a ? 1 : -1;\n          }\n          function createInputPseudo(type) {\n            return function(elem) {\n              var name = elem.nodeName.toLowerCase();\n              return name === \"input\" && elem.type === type;\n            };\n          }\n          function createButtonPseudo(type) {\n            return function(elem) {\n              var name = elem.nodeName.toLowerCase();\n              return (name === \"input\" || name === \"button\") && elem.type === type;\n            };\n          }\n          function createDisabledPseudo(disabled) {\n            return function(elem) {\n              if (\"form\" in elem) {\n                if (elem.parentNode && elem.disabled === false) {\n                  if (\"label\" in elem) {\n                    if (\"label\" in elem.parentNode) {\n                      return elem.parentNode.disabled === disabled;\n                    } else {\n                      return elem.disabled === disabled;\n                    }\n                  }\n                  return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n                  /* jshint -W018 */\n                  elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n                }\n                return elem.disabled === disabled;\n              } else if (\"label\" in elem) {\n                return elem.disabled === disabled;\n              }\n              return false;\n            };\n          }\n          function createPositionalPseudo(fn) {\n            return markFunction(function(argument) {\n              argument = +argument;\n              return markFunction(function(seed, matches2) {\n                var j, matchIndexes = fn([], seed.length, argument), i2 = matchIndexes.length;\n                while (i2--) {\n                  if (seed[j = matchIndexes[i2]]) {\n                    seed[j] = !(matches2[j] = seed[j]);\n                  }\n                }\n              });\n            });\n          }\n          function testContext(context) {\n            return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n          }\n          support2 = Sizzle2.support = {};\n          isXML = Sizzle2.isXML = function(elem) {\n            var namespace = elem && elem.namespaceURI, docElem2 = elem && (elem.ownerDocument || elem).documentElement;\n            return !rhtml2.test(namespace || docElem2 && docElem2.nodeName || \"HTML\");\n          };\n          setDocument = Sizzle2.setDocument = function(node) {\n            var hasCompare, subWindow, doc = node ? node.ownerDocument || node : preferredDoc;\n            if (doc == document2 || doc.nodeType !== 9 || !doc.documentElement) {\n              return document2;\n            }\n            document2 = doc;\n            docElem = document2.documentElement;\n            documentIsHTML = !isXML(document2);\n            if (preferredDoc != document2 && (subWindow = document2.defaultView) && subWindow.top !== subWindow) {\n              if (subWindow.addEventListener) {\n                subWindow.addEventListener(\"unload\", unloadHandler, false);\n              } else if (subWindow.attachEvent) {\n                subWindow.attachEvent(\"onunload\", unloadHandler);\n              }\n            }\n            support2.scope = assert(function(el) {\n              docElem.appendChild(el).appendChild(document2.createElement(\"div\"));\n              return typeof el.querySelectorAll !== \"undefined\" && !el.querySelectorAll(\":scope fieldset div\").length;\n            });\n            support2.attributes = assert(function(el) {\n              el.className = \"i\";\n              return !el.getAttribute(\"className\");\n            });\n            support2.getElementsByTagName = assert(function(el) {\n              el.appendChild(document2.createComment(\"\"));\n              return !el.getElementsByTagName(\"*\").length;\n            });\n            support2.getElementsByClassName = rnative.test(document2.getElementsByClassName);\n            support2.getById = assert(function(el) {\n              docElem.appendChild(el).id = expando;\n              return !document2.getElementsByName || !document2.getElementsByName(expando).length;\n            });\n            if (support2.getById) {\n              Expr.filter[\"ID\"] = function(id) {\n                var attrId = id.replace(runescape, funescape);\n                return function(elem) {\n                  return elem.getAttribute(\"id\") === attrId;\n                };\n              };\n              Expr.find[\"ID\"] = function(id, context) {\n                if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n                  var elem = context.getElementById(id);\n                  return elem ? [elem] : [];\n                }\n              };\n            } else {\n              Expr.filter[\"ID\"] = function(id) {\n                var attrId = id.replace(runescape, funescape);\n                return function(elem) {\n                  var node2 = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n                  return node2 && node2.value === attrId;\n                };\n              };\n              Expr.find[\"ID\"] = function(id, context) {\n                if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n                  var node2, i2, elems, elem = context.getElementById(id);\n                  if (elem) {\n                    node2 = elem.getAttributeNode(\"id\");\n                    if (node2 && node2.value === id) {\n                      return [elem];\n                    }\n                    elems = context.getElementsByName(id);\n                    i2 = 0;\n                    while (elem = elems[i2++]) {\n                      node2 = elem.getAttributeNode(\"id\");\n                      if (node2 && node2.value === id) {\n                        return [elem];\n                      }\n                    }\n                  }\n                  return [];\n                }\n              };\n            }\n            Expr.find[\"TAG\"] = support2.getElementsByTagName ? function(tag, context) {\n              if (typeof context.getElementsByTagName !== \"undefined\") {\n                return context.getElementsByTagName(tag);\n              } else if (support2.qsa) {\n                return context.querySelectorAll(tag);\n              }\n            } : function(tag, context) {\n              var elem, tmp = [], i2 = 0, results = context.getElementsByTagName(tag);\n              if (tag === \"*\") {\n                while (elem = results[i2++]) {\n                  if (elem.nodeType === 1) {\n                    tmp.push(elem);\n                  }\n                }\n                return tmp;\n              }\n              return results;\n            };\n            Expr.find[\"CLASS\"] = support2.getElementsByClassName && function(className, context) {\n              if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n                return context.getElementsByClassName(className);\n              }\n            };\n            rbuggyMatches = [];\n            rbuggyQSA = [];\n            if (support2.qsa = rnative.test(document2.querySelectorAll)) {\n              assert(function(el) {\n                var input;\n                docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a><select id='\" + expando + \"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\";\n                if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n                  rbuggyQSA.push(\"[*^$]=\" + whitespace + `*(?:''|\"\")`);\n                }\n                if (!el.querySelectorAll(\"[selected]\").length) {\n                  rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n                }\n                if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n                  rbuggyQSA.push(\"~=\");\n                }\n                input = document2.createElement(\"input\");\n                input.setAttribute(\"name\", \"\");\n                el.appendChild(input);\n                if (!el.querySelectorAll(\"[name='']\").length) {\n                  rbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" + whitespace + `*(?:''|\"\")`);\n                }\n                if (!el.querySelectorAll(\":checked\").length) {\n                  rbuggyQSA.push(\":checked\");\n                }\n                if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n                  rbuggyQSA.push(\".#.+[+~]\");\n                }\n                el.querySelectorAll(\"\\\\\\f\");\n                rbuggyQSA.push(\"[\\\\r\\\\n\\\\f]\");\n              });\n              assert(function(el) {\n                el.innerHTML = \"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";\n                var input = document2.createElement(\"input\");\n                input.setAttribute(\"type\", \"hidden\");\n                el.appendChild(input).setAttribute(\"name\", \"D\");\n                if (el.querySelectorAll(\"[name=d]\").length) {\n                  rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n                }\n                if (el.querySelectorAll(\":enabled\").length !== 2) {\n                  rbuggyQSA.push(\":enabled\", \":disabled\");\n                }\n                docElem.appendChild(el).disabled = true;\n                if (el.querySelectorAll(\":disabled\").length !== 2) {\n                  rbuggyQSA.push(\":enabled\", \":disabled\");\n                }\n                el.querySelectorAll(\"*,:x\");\n                rbuggyQSA.push(\",.*:\");\n              });\n            }\n            if (support2.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n              assert(function(el) {\n                support2.disconnectedMatch = matches.call(el, \"*\");\n                matches.call(el, \"[s!='']:x\");\n                rbuggyMatches.push(\"!=\", pseudos);\n              });\n            }\n            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n            rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n            hasCompare = rnative.test(docElem.compareDocumentPosition);\n            contains = hasCompare || rnative.test(docElem.contains) ? function(a, b) {\n              var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n              return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n            } : function(a, b) {\n              if (b) {\n                while (b = b.parentNode) {\n                  if (b === a) {\n                    return true;\n                  }\n                }\n              }\n              return false;\n            };\n            sortOrder = hasCompare ? function(a, b) {\n              if (a === b) {\n                hasDuplicate = true;\n                return 0;\n              }\n              var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n              if (compare) {\n                return compare;\n              }\n              compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (\n                // Otherwise we know they are disconnected\n                1\n              );\n              if (compare & 1 || !support2.sortDetached && b.compareDocumentPosition(a) === compare) {\n                if (a == document2 || a.ownerDocument == preferredDoc && contains(preferredDoc, a)) {\n                  return -1;\n                }\n                if (b == document2 || b.ownerDocument == preferredDoc && contains(preferredDoc, b)) {\n                  return 1;\n                }\n                return sortInput ? indexOf2(sortInput, a) - indexOf2(sortInput, b) : 0;\n              }\n              return compare & 4 ? -1 : 1;\n            } : function(a, b) {\n              if (a === b) {\n                hasDuplicate = true;\n                return 0;\n              }\n              var cur, i2 = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n              if (!aup || !bup) {\n                return a == document2 ? -1 : b == document2 ? 1 : (\n                  /* eslint-enable eqeqeq */\n                  aup ? -1 : bup ? 1 : sortInput ? indexOf2(sortInput, a) - indexOf2(sortInput, b) : 0\n                );\n              } else if (aup === bup) {\n                return siblingCheck(a, b);\n              }\n              cur = a;\n              while (cur = cur.parentNode) {\n                ap.unshift(cur);\n              }\n              cur = b;\n              while (cur = cur.parentNode) {\n                bp.unshift(cur);\n              }\n              while (ap[i2] === bp[i2]) {\n                i2++;\n              }\n              return i2 ? (\n                // Do a sibling check if the nodes have a common ancestor\n                siblingCheck(ap[i2], bp[i2])\n              ) : (\n                // Otherwise nodes in our document sort first\n                // Support: IE 11+, Edge 17 - 18+\n                // IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n                // two documents; shallow comparisons work.\n                /* eslint-disable eqeqeq */\n                ap[i2] == preferredDoc ? -1 : bp[i2] == preferredDoc ? 1 : (\n                  /* eslint-enable eqeqeq */\n                  0\n                )\n              );\n            };\n            return document2;\n          };\n          Sizzle2.matches = function(expr, elements) {\n            return Sizzle2(expr, null, null, elements);\n          };\n          Sizzle2.matchesSelector = function(elem, expr) {\n            setDocument(elem);\n            if (support2.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n              try {\n                var ret = matches.call(elem, expr);\n                if (ret || support2.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n                // fragment in IE 9\n                elem.document && elem.document.nodeType !== 11) {\n                  return ret;\n                }\n              } catch (e) {\n                nonnativeSelectorCache(expr, true);\n              }\n            }\n            return Sizzle2(expr, document2, null, [elem]).length > 0;\n          };\n          Sizzle2.contains = function(context, elem) {\n            if ((context.ownerDocument || context) != document2) {\n              setDocument(context);\n            }\n            return contains(context, elem);\n          };\n          Sizzle2.attr = function(elem, name) {\n            if ((elem.ownerDocument || elem) != document2) {\n              setDocument(elem);\n            }\n            var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn2.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : void 0;\n            return val !== void 0 ? val : support2.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n          };\n          Sizzle2.escape = function(sel) {\n            return (sel + \"\").replace(rcssescape, fcssescape);\n          };\n          Sizzle2.error = function(msg) {\n            throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n          };\n          Sizzle2.uniqueSort = function(results) {\n            var elem, duplicates = [], j = 0, i2 = 0;\n            hasDuplicate = !support2.detectDuplicates;\n            sortInput = !support2.sortStable && results.slice(0);\n            results.sort(sortOrder);\n            if (hasDuplicate) {\n              while (elem = results[i2++]) {\n                if (elem === results[i2]) {\n                  j = duplicates.push(i2);\n                }\n              }\n              while (j--) {\n                results.splice(duplicates[j], 1);\n              }\n            }\n            sortInput = null;\n            return results;\n          };\n          getText = Sizzle2.getText = function(elem) {\n            var node, ret = \"\", i2 = 0, nodeType = elem.nodeType;\n            if (!nodeType) {\n              while (node = elem[i2++]) {\n                ret += getText(node);\n              }\n            } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n              if (typeof elem.textContent === \"string\") {\n                return elem.textContent;\n              } else {\n                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n                  ret += getText(elem);\n                }\n              }\n            } else if (nodeType === 3 || nodeType === 4) {\n              return elem.nodeValue;\n            }\n            return ret;\n          };\n          Expr = Sizzle2.selectors = {\n            // Can be adjusted by the user\n            cacheLength: 50,\n            createPseudo: markFunction,\n            match: matchExpr,\n            attrHandle: {},\n            find: {},\n            relative: {\n              \">\": { dir: \"parentNode\", first: true },\n              \" \": { dir: \"parentNode\" },\n              \"+\": { dir: \"previousSibling\", first: true },\n              \"~\": { dir: \"previousSibling\" }\n            },\n            preFilter: {\n              \"ATTR\": function(match) {\n                match[1] = match[1].replace(runescape, funescape);\n                match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n                if (match[2] === \"~=\") {\n                  match[3] = \" \" + match[3] + \" \";\n                }\n                return match.slice(0, 4);\n              },\n              \"CHILD\": function(match) {\n                match[1] = match[1].toLowerCase();\n                if (match[1].slice(0, 3) === \"nth\") {\n                  if (!match[3]) {\n                    Sizzle2.error(match[0]);\n                  }\n                  match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n                  match[5] = +(match[7] + match[8] || match[3] === \"odd\");\n                } else if (match[3]) {\n                  Sizzle2.error(match[0]);\n                }\n                return match;\n              },\n              \"PSEUDO\": function(match) {\n                var excess, unquoted = !match[6] && match[2];\n                if (matchExpr[\"CHILD\"].test(match[0])) {\n                  return null;\n                }\n                if (match[3]) {\n                  match[2] = match[4] || match[5] || \"\";\n                } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)\n                (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis\n                (excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n                  match[0] = match[0].slice(0, excess);\n                  match[2] = unquoted.slice(0, excess);\n                }\n                return match.slice(0, 3);\n              }\n            },\n            filter: {\n              \"TAG\": function(nodeNameSelector) {\n                var nodeName2 = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n                return nodeNameSelector === \"*\" ? function() {\n                  return true;\n                } : function(elem) {\n                  return elem.nodeName && elem.nodeName.toLowerCase() === nodeName2;\n                };\n              },\n              \"CLASS\": function(className) {\n                var pattern = classCache[className + \" \"];\n                return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(\n                  className,\n                  function(elem) {\n                    return pattern.test(\n                      typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\"\n                    );\n                  }\n                );\n              },\n              \"ATTR\": function(name, operator, check) {\n                return function(elem) {\n                  var result = Sizzle2.attr(elem, name);\n                  if (result == null) {\n                    return operator === \"!=\";\n                  }\n                  if (!operator) {\n                    return true;\n                  }\n                  result += \"\";\n                  return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n                };\n              },\n              \"CHILD\": function(type, what, _argument, first, last) {\n                var simple = type.slice(0, 3) !== \"nth\", forward = type.slice(-4) !== \"last\", ofType = what === \"of-type\";\n                return first === 1 && last === 0 ? (\n                  // Shortcut for :nth-*(n)\n                  function(elem) {\n                    return !!elem.parentNode;\n                  }\n                ) : function(elem, _context, xml) {\n                  var cache, uniqueCache, outerCache, node, nodeIndex, start, dir2 = simple !== forward ? \"nextSibling\" : \"previousSibling\", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;\n                  if (parent) {\n                    if (simple) {\n                      while (dir2) {\n                        node = elem;\n                        while (node = node[dir2]) {\n                          if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                            return false;\n                          }\n                        }\n                        start = dir2 = type === \"only\" && !start && \"nextSibling\";\n                      }\n                      return true;\n                    }\n                    start = [forward ? parent.firstChild : parent.lastChild];\n                    if (forward && useCache) {\n                      node = parent;\n                      outerCache = node[expando] || (node[expando] = {});\n                      uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                      cache = uniqueCache[type] || [];\n                      nodeIndex = cache[0] === dirruns && cache[1];\n                      diff = nodeIndex && cache[2];\n                      node = nodeIndex && parent.childNodes[nodeIndex];\n                      while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start\n                      (diff = nodeIndex = 0) || start.pop()) {\n                        if (node.nodeType === 1 && ++diff && node === elem) {\n                          uniqueCache[type] = [dirruns, nodeIndex, diff];\n                          break;\n                        }\n                      }\n                    } else {\n                      if (useCache) {\n                        node = elem;\n                        outerCache = node[expando] || (node[expando] = {});\n                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                        cache = uniqueCache[type] || [];\n                        nodeIndex = cache[0] === dirruns && cache[1];\n                        diff = nodeIndex;\n                      }\n                      if (diff === false) {\n                        while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start.pop()) {\n                          if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                            if (useCache) {\n                              outerCache = node[expando] || (node[expando] = {});\n                              uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                              uniqueCache[type] = [dirruns, diff];\n                            }\n                            if (node === elem) {\n                              break;\n                            }\n                          }\n                        }\n                      }\n                    }\n                    diff -= last;\n                    return diff === first || diff % first === 0 && diff / first >= 0;\n                  }\n                };\n              },\n              \"PSEUDO\": function(pseudo, argument) {\n                var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle2.error(\"unsupported pseudo: \" + pseudo);\n                if (fn[expando]) {\n                  return fn(argument);\n                }\n                if (fn.length > 1) {\n                  args = [pseudo, pseudo, \"\", argument];\n                  return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) {\n                    var idx, matched = fn(seed, argument), i2 = matched.length;\n                    while (i2--) {\n                      idx = indexOf2(seed, matched[i2]);\n                      seed[idx] = !(matches2[idx] = matched[i2]);\n                    }\n                  }) : function(elem) {\n                    return fn(elem, 0, args);\n                  };\n                }\n                return fn;\n              }\n            },\n            pseudos: {\n              // Potentially complex pseudos\n              \"not\": markFunction(function(selector) {\n                var input = [], results = [], matcher = compile(selector.replace(rtrim2, \"$1\"));\n                return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) {\n                  var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;\n                  while (i2--) {\n                    if (elem = unmatched[i2]) {\n                      seed[i2] = !(matches2[i2] = elem);\n                    }\n                  }\n                }) : function(elem, _context, xml) {\n                  input[0] = elem;\n                  matcher(input, null, xml, results);\n                  input[0] = null;\n                  return !results.pop();\n                };\n              }),\n              \"has\": markFunction(function(selector) {\n                return function(elem) {\n                  return Sizzle2(selector, elem).length > 0;\n                };\n              }),\n              \"contains\": markFunction(function(text) {\n                text = text.replace(runescape, funescape);\n                return function(elem) {\n                  return (elem.textContent || getText(elem)).indexOf(text) > -1;\n                };\n              }),\n              // \"Whether an element is represented by a :lang() selector\n              // is based solely on the element's language value\n              // being equal to the identifier C,\n              // or beginning with the identifier C immediately followed by \"-\".\n              // The matching of C against the element's language value is performed case-insensitively.\n              // The identifier C does not have to be a valid language name.\"\n              // http://www.w3.org/TR/selectors/#lang-pseudo\n              \"lang\": markFunction(function(lang) {\n                if (!ridentifier.test(lang || \"\")) {\n                  Sizzle2.error(\"unsupported lang: \" + lang);\n                }\n                lang = lang.replace(runescape, funescape).toLowerCase();\n                return function(elem) {\n                  var elemLang;\n                  do {\n                    if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                      elemLang = elemLang.toLowerCase();\n                      return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n                    }\n                  } while ((elem = elem.parentNode) && elem.nodeType === 1);\n                  return false;\n                };\n              }),\n              // Miscellaneous\n              \"target\": function(elem) {\n                var hash = window3.location && window3.location.hash;\n                return hash && hash.slice(1) === elem.id;\n              },\n              \"root\": function(elem) {\n                return elem === docElem;\n              },\n              \"focus\": function(elem) {\n                return elem === document2.activeElement && (!document2.hasFocus || document2.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n              },\n              // Boolean properties\n              \"enabled\": createDisabledPseudo(false),\n              \"disabled\": createDisabledPseudo(true),\n              \"checked\": function(elem) {\n                var nodeName2 = elem.nodeName.toLowerCase();\n                return nodeName2 === \"input\" && !!elem.checked || nodeName2 === \"option\" && !!elem.selected;\n              },\n              \"selected\": function(elem) {\n                if (elem.parentNode) {\n                  elem.parentNode.selectedIndex;\n                }\n                return elem.selected === true;\n              },\n              // Contents\n              \"empty\": function(elem) {\n                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n                  if (elem.nodeType < 6) {\n                    return false;\n                  }\n                }\n                return true;\n              },\n              \"parent\": function(elem) {\n                return !Expr.pseudos[\"empty\"](elem);\n              },\n              // Element/input types\n              \"header\": function(elem) {\n                return rheader.test(elem.nodeName);\n              },\n              \"input\": function(elem) {\n                return rinputs.test(elem.nodeName);\n              },\n              \"button\": function(elem) {\n                var name = elem.nodeName.toLowerCase();\n                return name === \"input\" && elem.type === \"button\" || name === \"button\";\n              },\n              \"text\": function(elem) {\n                var attr;\n                return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && // Support: IE<8\n                // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n                ((attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n              },\n              // Position-in-collection\n              \"first\": createPositionalPseudo(function() {\n                return [0];\n              }),\n              \"last\": createPositionalPseudo(function(_matchIndexes, length) {\n                return [length - 1];\n              }),\n              \"eq\": createPositionalPseudo(function(_matchIndexes, length, argument) {\n                return [argument < 0 ? argument + length : argument];\n              }),\n              \"even\": createPositionalPseudo(function(matchIndexes, length) {\n                var i2 = 0;\n                for (; i2 < length; i2 += 2) {\n                  matchIndexes.push(i2);\n                }\n                return matchIndexes;\n              }),\n              \"odd\": createPositionalPseudo(function(matchIndexes, length) {\n                var i2 = 1;\n                for (; i2 < length; i2 += 2) {\n                  matchIndexes.push(i2);\n                }\n                return matchIndexes;\n              }),\n              \"lt\": createPositionalPseudo(function(matchIndexes, length, argument) {\n                var i2 = argument < 0 ? argument + length : argument > length ? length : argument;\n                for (; --i2 >= 0; ) {\n                  matchIndexes.push(i2);\n                }\n                return matchIndexes;\n              }),\n              \"gt\": createPositionalPseudo(function(matchIndexes, length, argument) {\n                var i2 = argument < 0 ? argument + length : argument;\n                for (; ++i2 < length; ) {\n                  matchIndexes.push(i2);\n                }\n                return matchIndexes;\n              })\n            }\n          };\n          Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n          for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n            Expr.pseudos[i] = createInputPseudo(i);\n          }\n          for (i in { submit: true, reset: true }) {\n            Expr.pseudos[i] = createButtonPseudo(i);\n          }\n          function setFilters() {\n          }\n          setFilters.prototype = Expr.filters = Expr.pseudos;\n          Expr.setFilters = new setFilters();\n          tokenize = Sizzle2.tokenize = function(selector, parseOnly) {\n            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + \" \"];\n            if (cached) {\n              return parseOnly ? 0 : cached.slice(0);\n            }\n            soFar = selector;\n            groups = [];\n            preFilters = Expr.preFilter;\n            while (soFar) {\n              if (!matched || (match = rcomma.exec(soFar))) {\n                if (match) {\n                  soFar = soFar.slice(match[0].length) || soFar;\n                }\n                groups.push(tokens = []);\n              }\n              matched = false;\n              if (match = rcombinators.exec(soFar)) {\n                matched = match.shift();\n                tokens.push({\n                  value: matched,\n                  // Cast descendant combinators to space\n                  type: match[0].replace(rtrim2, \" \")\n                });\n                soFar = soFar.slice(matched.length);\n              }\n              for (type in Expr.filter) {\n                if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n                  matched = match.shift();\n                  tokens.push({\n                    value: matched,\n                    type,\n                    matches: match\n                  });\n                  soFar = soFar.slice(matched.length);\n                }\n              }\n              if (!matched) {\n                break;\n              }\n            }\n            return parseOnly ? soFar.length : soFar ? Sizzle2.error(selector) : (\n              // Cache the tokens\n              tokenCache(selector, groups).slice(0)\n            );\n          };\n          function toSelector(tokens) {\n            var i2 = 0, len = tokens.length, selector = \"\";\n            for (; i2 < len; i2++) {\n              selector += tokens[i2].value;\n            }\n            return selector;\n          }\n          function addCombinator(matcher, combinator, base) {\n            var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key === \"parentNode\", doneName = done++;\n            return combinator.first ? (\n              // Check against closest ancestor/preceding element\n              function(elem, context, xml) {\n                while (elem = elem[dir2]) {\n                  if (elem.nodeType === 1 || checkNonElements) {\n                    return matcher(elem, context, xml);\n                  }\n                }\n                return false;\n              }\n            ) : (\n              // Check against all ancestor/preceding elements\n              function(elem, context, xml) {\n                var oldCache, uniqueCache, outerCache, newCache = [dirruns, doneName];\n                if (xml) {\n                  while (elem = elem[dir2]) {\n                    if (elem.nodeType === 1 || checkNonElements) {\n                      if (matcher(elem, context, xml)) {\n                        return true;\n                      }\n                    }\n                  }\n                } else {\n                  while (elem = elem[dir2]) {\n                    if (elem.nodeType === 1 || checkNonElements) {\n                      outerCache = elem[expando] || (elem[expando] = {});\n                      uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n                      if (skip && skip === elem.nodeName.toLowerCase()) {\n                        elem = elem[dir2] || elem;\n                      } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                        return newCache[2] = oldCache[2];\n                      } else {\n                        uniqueCache[key] = newCache;\n                        if (newCache[2] = matcher(elem, context, xml)) {\n                          return true;\n                        }\n                      }\n                    }\n                  }\n                }\n                return false;\n              }\n            );\n          }\n          function elementMatcher(matchers) {\n            return matchers.length > 1 ? function(elem, context, xml) {\n              var i2 = matchers.length;\n              while (i2--) {\n                if (!matchers[i2](elem, context, xml)) {\n                  return false;\n                }\n              }\n              return true;\n            } : matchers[0];\n          }\n          function multipleContexts(selector, contexts, results) {\n            var i2 = 0, len = contexts.length;\n            for (; i2 < len; i2++) {\n              Sizzle2(selector, contexts[i2], results);\n            }\n            return results;\n          }\n          function condense(unmatched, map, filter, context, xml) {\n            var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map != null;\n            for (; i2 < len; i2++) {\n              if (elem = unmatched[i2]) {\n                if (!filter || filter(elem, context, xml)) {\n                  newUnmatched.push(elem);\n                  if (mapped) {\n                    map.push(i2);\n                  }\n                }\n              }\n            }\n            return newUnmatched;\n          }\n          function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n            if (postFilter && !postFilter[expando]) {\n              postFilter = setMatcher(postFilter);\n            }\n            if (postFinder && !postFinder[expando]) {\n              postFinder = setMatcher(postFinder, postSelector);\n            }\n            return markFunction(function(seed, results, context, xml) {\n              var temp, i2, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(\n                selector || \"*\",\n                context.nodeType ? [context] : context,\n                []\n              ), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? (\n                // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n                postFinder || (seed ? preFilter : preexisting || postFilter) ? (\n                  // ...intermediate processing is necessary\n                  []\n                ) : (\n                  // ...otherwise use results directly\n                  results\n                )\n              ) : matcherIn;\n              if (matcher) {\n                matcher(matcherIn, matcherOut, context, xml);\n              }\n              if (postFilter) {\n                temp = condense(matcherOut, postMap);\n                postFilter(temp, [], context, xml);\n                i2 = temp.length;\n                while (i2--) {\n                  if (elem = temp[i2]) {\n                    matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);\n                  }\n                }\n              }\n              if (seed) {\n                if (postFinder || preFilter) {\n                  if (postFinder) {\n                    temp = [];\n                    i2 = matcherOut.length;\n                    while (i2--) {\n                      if (elem = matcherOut[i2]) {\n                        temp.push(matcherIn[i2] = elem);\n                      }\n                    }\n                    postFinder(null, matcherOut = [], temp, xml);\n                  }\n                  i2 = matcherOut.length;\n                  while (i2--) {\n                    if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf2(seed, elem) : preMap[i2]) > -1) {\n                      seed[temp] = !(results[temp] = elem);\n                    }\n                  }\n                }\n              } else {\n                matcherOut = condense(\n                  matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut\n                );\n                if (postFinder) {\n                  postFinder(null, results, matcherOut, xml);\n                } else {\n                  push2.apply(results, matcherOut);\n                }\n              }\n            });\n          }\n          function matcherFromTokens(tokens) {\n            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[\" \"], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {\n              return elem === checkContext;\n            }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {\n              return indexOf2(checkContext, elem) > -1;\n            }, implicitRelative, true), matchers = [function(elem, context, xml) {\n              var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n              checkContext = null;\n              return ret;\n            }];\n            for (; i2 < len; i2++) {\n              if (matcher = Expr.relative[tokens[i2].type]) {\n                matchers = [addCombinator(elementMatcher(matchers), matcher)];\n              } else {\n                matcher = Expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);\n                if (matcher[expando]) {\n                  j = ++i2;\n                  for (; j < len; j++) {\n                    if (Expr.relative[tokens[j].type]) {\n                      break;\n                    }\n                  }\n                  return setMatcher(\n                    i2 > 1 && elementMatcher(matchers),\n                    i2 > 1 && toSelector(\n                      // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n                      tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === \" \" ? \"*\" : \"\" })\n                    ).replace(rtrim2, \"$1\"),\n                    matcher,\n                    i2 < j && matcherFromTokens(tokens.slice(i2, j)),\n                    j < len && matcherFromTokens(tokens = tokens.slice(j)),\n                    j < len && toSelector(tokens)\n                  );\n                }\n                matchers.push(matcher);\n              }\n            }\n            return elementMatcher(matchers);\n          }\n          function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {\n              var elem, j, matcher, matchedCount = 0, i2 = \"0\", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n              if (outermost) {\n                outermostContext = context == document2 || context || outermost;\n              }\n              for (; i2 !== len && (elem = elems[i2]) != null; i2++) {\n                if (byElement && elem) {\n                  j = 0;\n                  if (!context && elem.ownerDocument != document2) {\n                    setDocument(elem);\n                    xml = !documentIsHTML;\n                  }\n                  while (matcher = elementMatchers[j++]) {\n                    if (matcher(elem, context || document2, xml)) {\n                      results.push(elem);\n                      break;\n                    }\n                  }\n                  if (outermost) {\n                    dirruns = dirrunsUnique;\n                  }\n                }\n                if (bySet) {\n                  if (elem = !matcher && elem) {\n                    matchedCount--;\n                  }\n                  if (seed) {\n                    unmatched.push(elem);\n                  }\n                }\n              }\n              matchedCount += i2;\n              if (bySet && i2 !== matchedCount) {\n                j = 0;\n                while (matcher = setMatchers[j++]) {\n                  matcher(unmatched, setMatched, context, xml);\n                }\n                if (seed) {\n                  if (matchedCount > 0) {\n                    while (i2--) {\n                      if (!(unmatched[i2] || setMatched[i2])) {\n                        setMatched[i2] = pop.call(results);\n                      }\n                    }\n                  }\n                  setMatched = condense(setMatched);\n                }\n                push2.apply(results, setMatched);\n                if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n                  Sizzle2.uniqueSort(results);\n                }\n              }\n              if (outermost) {\n                dirruns = dirrunsUnique;\n                outermostContext = contextBackup;\n              }\n              return unmatched;\n            };\n            return bySet ? markFunction(superMatcher) : superMatcher;\n          }\n          compile = Sizzle2.compile = function(selector, match) {\n            var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + \" \"];\n            if (!cached) {\n              if (!match) {\n                match = tokenize(selector);\n              }\n              i2 = match.length;\n              while (i2--) {\n                cached = matcherFromTokens(match[i2]);\n                if (cached[expando]) {\n                  setMatchers.push(cached);\n                } else {\n                  elementMatchers.push(cached);\n                }\n              }\n              cached = compilerCache(\n                selector,\n                matcherFromGroupMatchers(elementMatchers, setMatchers)\n              );\n              cached.selector = selector;\n            }\n            return cached;\n          };\n          select = Sizzle2.select = function(selector, context, results, seed) {\n            var i2, tokens, token, type, find, compiled = typeof selector === \"function\" && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n            results = results || [];\n            if (match.length === 1) {\n              tokens = match[0] = match[0].slice(0);\n              if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n                context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n                if (!context) {\n                  return results;\n                } else if (compiled) {\n                  context = context.parentNode;\n                }\n                selector = selector.slice(tokens.shift().value.length);\n              }\n              i2 = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n              while (i2--) {\n                token = tokens[i2];\n                if (Expr.relative[type = token.type]) {\n                  break;\n                }\n                if (find = Expr.find[type]) {\n                  if (seed = find(\n                    token.matches[0].replace(runescape, funescape),\n                    rsibling.test(tokens[0].type) && testContext(context.parentNode) || context\n                  )) {\n                    tokens.splice(i2, 1);\n                    selector = seed.length && toSelector(tokens);\n                    if (!selector) {\n                      push2.apply(results, seed);\n                      return results;\n                    }\n                    break;\n                  }\n                }\n              }\n            }\n            (compiled || compile(selector, match))(\n              seed,\n              context,\n              !documentIsHTML,\n              results,\n              !context || rsibling.test(selector) && testContext(context.parentNode) || context\n            );\n            return results;\n          };\n          support2.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n          support2.detectDuplicates = !!hasDuplicate;\n          setDocument();\n          support2.sortDetached = assert(function(el) {\n            return el.compareDocumentPosition(document2.createElement(\"fieldset\")) & 1;\n          });\n          if (!assert(function(el) {\n            el.innerHTML = \"<a href='#'></a>\";\n            return el.firstChild.getAttribute(\"href\") === \"#\";\n          })) {\n            addHandle(\"type|href|height|width\", function(elem, name, isXML2) {\n              if (!isXML2) {\n                return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n              }\n            });\n          }\n          if (!support2.attributes || !assert(function(el) {\n            el.innerHTML = \"<input/>\";\n            el.firstChild.setAttribute(\"value\", \"\");\n            return el.firstChild.getAttribute(\"value\") === \"\";\n          })) {\n            addHandle(\"value\", function(elem, _name, isXML2) {\n              if (!isXML2 && elem.nodeName.toLowerCase() === \"input\") {\n                return elem.defaultValue;\n              }\n            });\n          }\n          if (!assert(function(el) {\n            return el.getAttribute(\"disabled\") == null;\n          })) {\n            addHandle(booleans, function(elem, name, isXML2) {\n              var val;\n              if (!isXML2) {\n                return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n              }\n            });\n          }\n          return Sizzle2;\n        }(window2)\n      );\n      jQuery.find = Sizzle;\n      jQuery.expr = Sizzle.selectors;\n      jQuery.expr[\":\"] = jQuery.expr.pseudos;\n      jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n      jQuery.text = Sizzle.getText;\n      jQuery.isXMLDoc = Sizzle.isXML;\n      jQuery.contains = Sizzle.contains;\n      jQuery.escapeSelector = Sizzle.escape;\n      var dir = function(elem, dir2, until) {\n        var matched = [], truncate = until !== void 0;\n        while ((elem = elem[dir2]) && elem.nodeType !== 9) {\n          if (elem.nodeType === 1) {\n            if (truncate && jQuery(elem).is(until)) {\n              break;\n            }\n            matched.push(elem);\n          }\n        }\n        return matched;\n      };\n      var siblings = function(n, elem) {\n        var matched = [];\n        for (; n; n = n.nextSibling) {\n          if (n.nodeType === 1 && n !== elem) {\n            matched.push(n);\n          }\n        }\n        return matched;\n      };\n      var rneedsContext = jQuery.expr.match.needsContext;\n      function nodeName(elem, name) {\n        return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n      }\n      var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n      function winnow(elements, qualifier, not) {\n        if (isFunction(qualifier)) {\n          return jQuery.grep(elements, function(elem, i) {\n            return !!qualifier.call(elem, i, elem) !== not;\n          });\n        }\n        if (qualifier.nodeType) {\n          return jQuery.grep(elements, function(elem) {\n            return elem === qualifier !== not;\n          });\n        }\n        if (typeof qualifier !== \"string\") {\n          return jQuery.grep(elements, function(elem) {\n            return indexOf.call(qualifier, elem) > -1 !== not;\n          });\n        }\n        return jQuery.filter(qualifier, elements, not);\n      }\n      jQuery.filter = function(expr, elems, not) {\n        var elem = elems[0];\n        if (not) {\n          expr = \":not(\" + expr + \")\";\n        }\n        if (elems.length === 1 && elem.nodeType === 1) {\n          return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n        }\n        return jQuery.find.matches(expr, jQuery.grep(elems, function(elem2) {\n          return elem2.nodeType === 1;\n        }));\n      };\n      jQuery.fn.extend({\n        find: function(selector) {\n          var i, ret, len = this.length, self = this;\n          if (typeof selector !== \"string\") {\n            return this.pushStack(jQuery(selector).filter(function() {\n              for (i = 0; i < len; i++) {\n                if (jQuery.contains(self[i], this)) {\n                  return true;\n                }\n              }\n            }));\n          }\n          ret = this.pushStack([]);\n          for (i = 0; i < len; i++) {\n            jQuery.find(selector, self[i], ret);\n          }\n          return len > 1 ? jQuery.uniqueSort(ret) : ret;\n        },\n        filter: function(selector) {\n          return this.pushStack(winnow(this, selector || [], false));\n        },\n        not: function(selector) {\n          return this.pushStack(winnow(this, selector || [], true));\n        },\n        is: function(selector) {\n          return !!winnow(\n            this,\n            // If this is a positional/relative selector, check membership in the returned set\n            // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n            typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [],\n            false\n          ).length;\n        }\n      });\n      var rootjQuery, rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/, init = jQuery.fn.init = function(selector, context, root) {\n        var match, elem;\n        if (!selector) {\n          return this;\n        }\n        root = root || rootjQuery;\n        if (typeof selector === \"string\") {\n          if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n            match = [null, selector, null];\n          } else {\n            match = rquickExpr.exec(selector);\n          }\n          if (match && (match[1] || !context)) {\n            if (match[1]) {\n              context = context instanceof jQuery ? context[0] : context;\n              jQuery.merge(this, jQuery.parseHTML(\n                match[1],\n                context && context.nodeType ? context.ownerDocument || context : document,\n                true\n              ));\n              if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n                for (match in context) {\n                  if (isFunction(this[match])) {\n                    this[match](context[match]);\n                  } else {\n                    this.attr(match, context[match]);\n                  }\n                }\n              }\n              return this;\n            } else {\n              elem = document.getElementById(match[2]);\n              if (elem) {\n                this[0] = elem;\n                this.length = 1;\n              }\n              return this;\n            }\n          } else if (!context || context.jquery) {\n            return (context || root).find(selector);\n          } else {\n            return this.constructor(context).find(selector);\n          }\n        } else if (selector.nodeType) {\n          this[0] = selector;\n          this.length = 1;\n          return this;\n        } else if (isFunction(selector)) {\n          return root.ready !== void 0 ? root.ready(selector) : (\n            // Execute immediately if ready is not present\n            selector(jQuery)\n          );\n        }\n        return jQuery.makeArray(selector, this);\n      };\n      init.prototype = jQuery.fn;\n      rootjQuery = jQuery(document);\n      var rparentsprev = /^(?:parents|prev(?:Until|All))/, guaranteedUnique = {\n        children: true,\n        contents: true,\n        next: true,\n        prev: true\n      };\n      jQuery.fn.extend({\n        has: function(target) {\n          var targets = jQuery(target, this), l = targets.length;\n          return this.filter(function() {\n            var i = 0;\n            for (; i < l; i++) {\n              if (jQuery.contains(this, targets[i])) {\n                return true;\n              }\n            }\n          });\n        },\n        closest: function(selectors, context) {\n          var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== \"string\" && jQuery(selectors);\n          if (!rneedsContext.test(selectors)) {\n            for (; i < l; i++) {\n              for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n                if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : (\n                  // Don't pass non-elements to Sizzle\n                  cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)\n                ))) {\n                  matched.push(cur);\n                  break;\n                }\n              }\n            }\n          }\n          return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n        },\n        // Determine the position of an element within the set\n        index: function(elem) {\n          if (!elem) {\n            return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n          }\n          if (typeof elem === \"string\") {\n            return indexOf.call(jQuery(elem), this[0]);\n          }\n          return indexOf.call(\n            this,\n            // If it receives a jQuery object, the first element is used\n            elem.jquery ? elem[0] : elem\n          );\n        },\n        add: function(selector, context) {\n          return this.pushStack(\n            jQuery.uniqueSort(\n              jQuery.merge(this.get(), jQuery(selector, context))\n            )\n          );\n        },\n        addBack: function(selector) {\n          return this.add(\n            selector == null ? this.prevObject : this.prevObject.filter(selector)\n          );\n        }\n      });\n      function sibling(cur, dir2) {\n        while ((cur = cur[dir2]) && cur.nodeType !== 1) {\n        }\n        return cur;\n      }\n      jQuery.each({\n        parent: function(elem) {\n          var parent = elem.parentNode;\n          return parent && parent.nodeType !== 11 ? parent : null;\n        },\n        parents: function(elem) {\n          return dir(elem, \"parentNode\");\n        },\n        parentsUntil: function(elem, _i, until) {\n          return dir(elem, \"parentNode\", until);\n        },\n        next: function(elem) {\n          return sibling(elem, \"nextSibling\");\n        },\n        prev: function(elem) {\n          return sibling(elem, \"previousSibling\");\n        },\n        nextAll: function(elem) {\n          return dir(elem, \"nextSibling\");\n        },\n        prevAll: function(elem) {\n          return dir(elem, \"previousSibling\");\n        },\n        nextUntil: function(elem, _i, until) {\n          return dir(elem, \"nextSibling\", until);\n        },\n        prevUntil: function(elem, _i, until) {\n          return dir(elem, \"previousSibling\", until);\n        },\n        siblings: function(elem) {\n          return siblings((elem.parentNode || {}).firstChild, elem);\n        },\n        children: function(elem) {\n          return siblings(elem.firstChild);\n        },\n        contents: function(elem) {\n          if (elem.contentDocument != null && // Support: IE 11+\n          // <object> elements with no `data` attribute has an object\n          // `contentDocument` with a `null` prototype.\n          getProto(elem.contentDocument)) {\n            return elem.contentDocument;\n          }\n          if (nodeName(elem, \"template\")) {\n            elem = elem.content || elem;\n          }\n          return jQuery.merge([], elem.childNodes);\n        }\n      }, function(name, fn) {\n        jQuery.fn[name] = function(until, selector) {\n          var matched = jQuery.map(this, fn, until);\n          if (name.slice(-5) !== \"Until\") {\n            selector = until;\n          }\n          if (selector && typeof selector === \"string\") {\n            matched = jQuery.filter(selector, matched);\n          }\n          if (this.length > 1) {\n            if (!guaranteedUnique[name]) {\n              jQuery.uniqueSort(matched);\n            }\n            if (rparentsprev.test(name)) {\n              matched.reverse();\n            }\n          }\n          return this.pushStack(matched);\n        };\n      });\n      var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n      function createOptions(options) {\n        var object = {};\n        jQuery.each(options.match(rnothtmlwhite) || [], function(_, flag) {\n          object[flag] = true;\n        });\n        return object;\n      }\n      jQuery.Callbacks = function(options) {\n        options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n        var firing, memory, fired, locked, list = [], queue = [], firingIndex = -1, fire = function() {\n          locked = locked || options.once;\n          fired = firing = true;\n          for (; queue.length; firingIndex = -1) {\n            memory = queue.shift();\n            while (++firingIndex < list.length) {\n              if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n                firingIndex = list.length;\n                memory = false;\n              }\n            }\n          }\n          if (!options.memory) {\n            memory = false;\n          }\n          firing = false;\n          if (locked) {\n            if (memory) {\n              list = [];\n            } else {\n              list = \"\";\n            }\n          }\n        }, self = {\n          // Add a callback or a collection of callbacks to the list\n          add: function() {\n            if (list) {\n              if (memory && !firing) {\n                firingIndex = list.length - 1;\n                queue.push(memory);\n              }\n              (function add(args) {\n                jQuery.each(args, function(_, arg) {\n                  if (isFunction(arg)) {\n                    if (!options.unique || !self.has(arg)) {\n                      list.push(arg);\n                    }\n                  } else if (arg && arg.length && toType(arg) !== \"string\") {\n                    add(arg);\n                  }\n                });\n              })(arguments);\n              if (memory && !firing) {\n                fire();\n              }\n            }\n            return this;\n          },\n          // Remove a callback from the list\n          remove: function() {\n            jQuery.each(arguments, function(_, arg) {\n              var index;\n              while ((index = jQuery.inArray(arg, list, index)) > -1) {\n                list.splice(index, 1);\n                if (index <= firingIndex) {\n                  firingIndex--;\n                }\n              }\n            });\n            return this;\n          },\n          // Check if a given callback is in the list.\n          // If no argument is given, return whether or not list has callbacks attached.\n          has: function(fn) {\n            return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n          },\n          // Remove all callbacks from the list\n          empty: function() {\n            if (list) {\n              list = [];\n            }\n            return this;\n          },\n          // Disable .fire and .add\n          // Abort any current/pending executions\n          // Clear all callbacks and values\n          disable: function() {\n            locked = queue = [];\n            list = memory = \"\";\n            return this;\n          },\n          disabled: function() {\n            return !list;\n          },\n          // Disable .fire\n          // Also disable .add unless we have memory (since it would have no effect)\n          // Abort any pending executions\n          lock: function() {\n            locked = queue = [];\n            if (!memory && !firing) {\n              list = memory = \"\";\n            }\n            return this;\n          },\n          locked: function() {\n            return !!locked;\n          },\n          // Call all callbacks with the given context and arguments\n          fireWith: function(context, args) {\n            if (!locked) {\n              args = args || [];\n              args = [context, args.slice ? args.slice() : args];\n              queue.push(args);\n              if (!firing) {\n                fire();\n              }\n            }\n            return this;\n          },\n          // Call all the callbacks with the given arguments\n          fire: function() {\n            self.fireWith(this, arguments);\n            return this;\n          },\n          // To know if the callbacks have already been called at least once\n          fired: function() {\n            return !!fired;\n          }\n        };\n        return self;\n      };\n      function Identity(v) {\n        return v;\n      }\n      function Thrower(ex) {\n        throw ex;\n      }\n      function adoptValue(value, resolve, reject, noValue) {\n        var method;\n        try {\n          if (value && isFunction(method = value.promise)) {\n            method.call(value).done(resolve).fail(reject);\n          } else if (value && isFunction(method = value.then)) {\n            method.call(value, resolve, reject);\n          } else {\n            resolve.apply(void 0, [value].slice(noValue));\n          }\n        } catch (value2) {\n          reject.apply(void 0, [value2]);\n        }\n      }\n      jQuery.extend({\n        Deferred: function(func) {\n          var tuples = [\n            // action, add listener, callbacks,\n            // ... .then handlers, argument index, [final state]\n            [\n              \"notify\",\n              \"progress\",\n              jQuery.Callbacks(\"memory\"),\n              jQuery.Callbacks(\"memory\"),\n              2\n            ],\n            [\n              \"resolve\",\n              \"done\",\n              jQuery.Callbacks(\"once memory\"),\n              jQuery.Callbacks(\"once memory\"),\n              0,\n              \"resolved\"\n            ],\n            [\n              \"reject\",\n              \"fail\",\n              jQuery.Callbacks(\"once memory\"),\n              jQuery.Callbacks(\"once memory\"),\n              1,\n              \"rejected\"\n            ]\n          ], state = \"pending\", promise = {\n            state: function() {\n              return state;\n            },\n            always: function() {\n              deferred.done(arguments).fail(arguments);\n              return this;\n            },\n            \"catch\": function(fn) {\n              return promise.then(null, fn);\n            },\n            // Keep pipe for back-compat\n            pipe: function() {\n              var fns = arguments;\n              return jQuery.Deferred(function(newDefer) {\n                jQuery.each(tuples, function(_i, tuple) {\n                  var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n                  deferred[tuple[1]](function() {\n                    var returned = fn && fn.apply(this, arguments);\n                    if (returned && isFunction(returned.promise)) {\n                      returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                    } else {\n                      newDefer[tuple[0] + \"With\"](\n                        this,\n                        fn ? [returned] : arguments\n                      );\n                    }\n                  });\n                });\n                fns = null;\n              }).promise();\n            },\n            then: function(onFulfilled, onRejected, onProgress) {\n              var maxDepth = 0;\n              function resolve(depth, deferred2, handler, special) {\n                return function() {\n                  var that = this, args = arguments, mightThrow = function() {\n                    var returned, then;\n                    if (depth < maxDepth) {\n                      return;\n                    }\n                    returned = handler.apply(that, args);\n                    if (returned === deferred2.promise()) {\n                      throw new TypeError(\"Thenable self-resolution\");\n                    }\n                    then = returned && // Support: Promises/A+ section 2.3.4\n                    // https://promisesaplus.com/#point-64\n                    // Only check objects and functions for thenability\n                    (typeof returned === \"object\" || typeof returned === \"function\") && returned.then;\n                    if (isFunction(then)) {\n                      if (special) {\n                        then.call(\n                          returned,\n                          resolve(maxDepth, deferred2, Identity, special),\n                          resolve(maxDepth, deferred2, Thrower, special)\n                        );\n                      } else {\n                        maxDepth++;\n                        then.call(\n                          returned,\n                          resolve(maxDepth, deferred2, Identity, special),\n                          resolve(maxDepth, deferred2, Thrower, special),\n                          resolve(\n                            maxDepth,\n                            deferred2,\n                            Identity,\n                            deferred2.notifyWith\n                          )\n                        );\n                      }\n                    } else {\n                      if (handler !== Identity) {\n                        that = void 0;\n                        args = [returned];\n                      }\n                      (special || deferred2.resolveWith)(that, args);\n                    }\n                  }, process = special ? mightThrow : function() {\n                    try {\n                      mightThrow();\n                    } catch (e) {\n                      if (jQuery.Deferred.exceptionHook) {\n                        jQuery.Deferred.exceptionHook(\n                          e,\n                          process.stackTrace\n                        );\n                      }\n                      if (depth + 1 >= maxDepth) {\n                        if (handler !== Thrower) {\n                          that = void 0;\n                          args = [e];\n                        }\n                        deferred2.rejectWith(that, args);\n                      }\n                    }\n                  };\n                  if (depth) {\n                    process();\n                  } else {\n                    if (jQuery.Deferred.getStackHook) {\n                      process.stackTrace = jQuery.Deferred.getStackHook();\n                    }\n                    window2.setTimeout(process);\n                  }\n                };\n              }\n              return jQuery.Deferred(function(newDefer) {\n                tuples[0][3].add(\n                  resolve(\n                    0,\n                    newDefer,\n                    isFunction(onProgress) ? onProgress : Identity,\n                    newDefer.notifyWith\n                  )\n                );\n                tuples[1][3].add(\n                  resolve(\n                    0,\n                    newDefer,\n                    isFunction(onFulfilled) ? onFulfilled : Identity\n                  )\n                );\n                tuples[2][3].add(\n                  resolve(\n                    0,\n                    newDefer,\n                    isFunction(onRejected) ? onRejected : Thrower\n                  )\n                );\n              }).promise();\n            },\n            // Get a promise for this deferred\n            // If obj is provided, the promise aspect is added to the object\n            promise: function(obj) {\n              return obj != null ? jQuery.extend(obj, promise) : promise;\n            }\n          }, deferred = {};\n          jQuery.each(tuples, function(i, tuple) {\n            var list = tuple[2], stateString = tuple[5];\n            promise[tuple[1]] = list.add;\n            if (stateString) {\n              list.add(\n                function() {\n                  state = stateString;\n                },\n                // rejected_callbacks.disable\n                // fulfilled_callbacks.disable\n                tuples[3 - i][2].disable,\n                // rejected_handlers.disable\n                // fulfilled_handlers.disable\n                tuples[3 - i][3].disable,\n                // progress_callbacks.lock\n                tuples[0][2].lock,\n                // progress_handlers.lock\n                tuples[0][3].lock\n              );\n            }\n            list.add(tuple[3].fire);\n            deferred[tuple[0]] = function() {\n              deferred[tuple[0] + \"With\"](this === deferred ? void 0 : this, arguments);\n              return this;\n            };\n            deferred[tuple[0] + \"With\"] = list.fireWith;\n          });\n          promise.promise(deferred);\n          if (func) {\n            func.call(deferred, deferred);\n          }\n          return deferred;\n        },\n        // Deferred helper\n        when: function(singleValue) {\n          var remaining = arguments.length, i = remaining, resolveContexts = Array(i), resolveValues = slice.call(arguments), primary = jQuery.Deferred(), updateFunc = function(i2) {\n            return function(value) {\n              resolveContexts[i2] = this;\n              resolveValues[i2] = arguments.length > 1 ? slice.call(arguments) : value;\n              if (!--remaining) {\n                primary.resolveWith(resolveContexts, resolveValues);\n              }\n            };\n          };\n          if (remaining <= 1) {\n            adoptValue(\n              singleValue,\n              primary.done(updateFunc(i)).resolve,\n              primary.reject,\n              !remaining\n            );\n            if (primary.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n              return primary.then();\n            }\n          }\n          while (i--) {\n            adoptValue(resolveValues[i], updateFunc(i), primary.reject);\n          }\n          return primary.promise();\n        }\n      });\n      var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n      jQuery.Deferred.exceptionHook = function(error, stack) {\n        if (window2.console && window2.console.warn && error && rerrorNames.test(error.name)) {\n          window2.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n        }\n      };\n      jQuery.readyException = function(error) {\n        window2.setTimeout(function() {\n          throw error;\n        });\n      };\n      var readyList = jQuery.Deferred();\n      jQuery.fn.ready = function(fn) {\n        readyList.then(fn).catch(function(error) {\n          jQuery.readyException(error);\n        });\n        return this;\n      };\n      jQuery.extend({\n        // Is the DOM ready to be used? Set to true once it occurs.\n        isReady: false,\n        // A counter to track how many items to wait for before\n        // the ready event fires. See #6781\n        readyWait: 1,\n        // Handle when the DOM is ready\n        ready: function(wait) {\n          if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n            return;\n          }\n          jQuery.isReady = true;\n          if (wait !== true && --jQuery.readyWait > 0) {\n            return;\n          }\n          readyList.resolveWith(document, [jQuery]);\n        }\n      });\n      jQuery.ready.then = readyList.then;\n      function completed() {\n        document.removeEventListener(\"DOMContentLoaded\", completed);\n        window2.removeEventListener(\"load\", completed);\n        jQuery.ready();\n      }\n      if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n        window2.setTimeout(jQuery.ready);\n      } else {\n        document.addEventListener(\"DOMContentLoaded\", completed);\n        window2.addEventListener(\"load\", completed);\n      }\n      var access = function(elems, fn, key, value, chainable, emptyGet, raw) {\n        var i = 0, len = elems.length, bulk = key == null;\n        if (toType(key) === \"object\") {\n          chainable = true;\n          for (i in key) {\n            access(elems, fn, i, key[i], true, emptyGet, raw);\n          }\n        } else if (value !== void 0) {\n          chainable = true;\n          if (!isFunction(value)) {\n            raw = true;\n          }\n          if (bulk) {\n            if (raw) {\n              fn.call(elems, value);\n              fn = null;\n            } else {\n              bulk = fn;\n              fn = function(elem, _key, value2) {\n                return bulk.call(jQuery(elem), value2);\n              };\n            }\n          }\n          if (fn) {\n            for (; i < len; i++) {\n              fn(\n                elems[i],\n                key,\n                raw ? value : value.call(elems[i], i, fn(elems[i], key))\n              );\n            }\n          }\n        }\n        if (chainable) {\n          return elems;\n        }\n        if (bulk) {\n          return fn.call(elems);\n        }\n        return len ? fn(elems[0], key) : emptyGet;\n      };\n      var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g;\n      function fcamelCase(_all, letter) {\n        return letter.toUpperCase();\n      }\n      function camelCase(string) {\n        return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n      }\n      var acceptData = function(owner) {\n        return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n      };\n      function Data() {\n        this.expando = jQuery.expando + Data.uid++;\n      }\n      Data.uid = 1;\n      Data.prototype = {\n        cache: function(owner) {\n          var value = owner[this.expando];\n          if (!value) {\n            value = {};\n            if (acceptData(owner)) {\n              if (owner.nodeType) {\n                owner[this.expando] = value;\n              } else {\n                Object.defineProperty(owner, this.expando, {\n                  value,\n                  configurable: true\n                });\n              }\n            }\n          }\n          return value;\n        },\n        set: function(owner, data, value) {\n          var prop, cache = this.cache(owner);\n          if (typeof data === \"string\") {\n            cache[camelCase(data)] = value;\n          } else {\n            for (prop in data) {\n              cache[camelCase(prop)] = data[prop];\n            }\n          }\n          return cache;\n        },\n        get: function(owner, key) {\n          return key === void 0 ? this.cache(owner) : (\n            // Always use camelCase key (gh-2257)\n            owner[this.expando] && owner[this.expando][camelCase(key)]\n          );\n        },\n        access: function(owner, key, value) {\n          if (key === void 0 || key && typeof key === \"string\" && value === void 0) {\n            return this.get(owner, key);\n          }\n          this.set(owner, key, value);\n          return value !== void 0 ? value : key;\n        },\n        remove: function(owner, key) {\n          var i, cache = owner[this.expando];\n          if (cache === void 0) {\n            return;\n          }\n          if (key !== void 0) {\n            if (Array.isArray(key)) {\n              key = key.map(camelCase);\n            } else {\n              key = camelCase(key);\n              key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n            }\n            i = key.length;\n            while (i--) {\n              delete cache[key[i]];\n            }\n          }\n          if (key === void 0 || jQuery.isEmptyObject(cache)) {\n            if (owner.nodeType) {\n              owner[this.expando] = void 0;\n            } else {\n              delete owner[this.expando];\n            }\n          }\n        },\n        hasData: function(owner) {\n          var cache = owner[this.expando];\n          return cache !== void 0 && !jQuery.isEmptyObject(cache);\n        }\n      };\n      var dataPriv = new Data();\n      var dataUser = new Data();\n      var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/, rmultiDash = /[A-Z]/g;\n      function getData(data) {\n        if (data === \"true\") {\n          return true;\n        }\n        if (data === \"false\") {\n          return false;\n        }\n        if (data === \"null\") {\n          return null;\n        }\n        if (data === +data + \"\") {\n          return +data;\n        }\n        if (rbrace.test(data)) {\n          return JSON.parse(data);\n        }\n        return data;\n      }\n      function dataAttr(elem, key, data) {\n        var name;\n        if (data === void 0 && elem.nodeType === 1) {\n          name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n          data = elem.getAttribute(name);\n          if (typeof data === \"string\") {\n            try {\n              data = getData(data);\n            } catch (e) {\n            }\n            dataUser.set(elem, key, data);\n          } else {\n            data = void 0;\n          }\n        }\n        return data;\n      }\n      jQuery.extend({\n        hasData: function(elem) {\n          return dataUser.hasData(elem) || dataPriv.hasData(elem);\n        },\n        data: function(elem, name, data) {\n          return dataUser.access(elem, name, data);\n        },\n        removeData: function(elem, name) {\n          dataUser.remove(elem, name);\n        },\n        // TODO: Now that all calls to _data and _removeData have been replaced\n        // with direct calls to dataPriv methods, these can be deprecated.\n        _data: function(elem, name, data) {\n          return dataPriv.access(elem, name, data);\n        },\n        _removeData: function(elem, name) {\n          dataPriv.remove(elem, name);\n        }\n      });\n      jQuery.fn.extend({\n        data: function(key, value) {\n          var i, name, data, elem = this[0], attrs = elem && elem.attributes;\n          if (key === void 0) {\n            if (this.length) {\n              data = dataUser.get(elem);\n              if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n                i = attrs.length;\n                while (i--) {\n                  if (attrs[i]) {\n                    name = attrs[i].name;\n                    if (name.indexOf(\"data-\") === 0) {\n                      name = camelCase(name.slice(5));\n                      dataAttr(elem, name, data[name]);\n                    }\n                  }\n                }\n                dataPriv.set(elem, \"hasDataAttrs\", true);\n              }\n            }\n            return data;\n          }\n          if (typeof key === \"object\") {\n            return this.each(function() {\n              dataUser.set(this, key);\n            });\n          }\n          return access(this, function(value2) {\n            var data2;\n            if (elem && value2 === void 0) {\n              data2 = dataUser.get(elem, key);\n              if (data2 !== void 0) {\n                return data2;\n              }\n              data2 = dataAttr(elem, key);\n              if (data2 !== void 0) {\n                return data2;\n              }\n              return;\n            }\n            this.each(function() {\n              dataUser.set(this, key, value2);\n            });\n          }, null, value, arguments.length > 1, null, true);\n        },\n        removeData: function(key) {\n          return this.each(function() {\n            dataUser.remove(this, key);\n          });\n        }\n      });\n      jQuery.extend({\n        queue: function(elem, type, data) {\n          var queue;\n          if (elem) {\n            type = (type || \"fx\") + \"queue\";\n            queue = dataPriv.get(elem, type);\n            if (data) {\n              if (!queue || Array.isArray(data)) {\n                queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n              } else {\n                queue.push(data);\n              }\n            }\n            return queue || [];\n          }\n        },\n        dequeue: function(elem, type) {\n          type = type || \"fx\";\n          var queue = jQuery.queue(elem, type), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks(elem, type), next = function() {\n            jQuery.dequeue(elem, type);\n          };\n          if (fn === \"inprogress\") {\n            fn = queue.shift();\n            startLength--;\n          }\n          if (fn) {\n            if (type === \"fx\") {\n              queue.unshift(\"inprogress\");\n            }\n            delete hooks.stop;\n            fn.call(elem, next, hooks);\n          }\n          if (!startLength && hooks) {\n            hooks.empty.fire();\n          }\n        },\n        // Not public - generate a queueHooks object, or return the current one\n        _queueHooks: function(elem, type) {\n          var key = type + \"queueHooks\";\n          return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n            empty: jQuery.Callbacks(\"once memory\").add(function() {\n              dataPriv.remove(elem, [type + \"queue\", key]);\n            })\n          });\n        }\n      });\n      jQuery.fn.extend({\n        queue: function(type, data) {\n          var setter = 2;\n          if (typeof type !== \"string\") {\n            data = type;\n            type = \"fx\";\n            setter--;\n          }\n          if (arguments.length < setter) {\n            return jQuery.queue(this[0], type);\n          }\n          return data === void 0 ? this : this.each(function() {\n            var queue = jQuery.queue(this, type, data);\n            jQuery._queueHooks(this, type);\n            if (type === \"fx\" && queue[0] !== \"inprogress\") {\n              jQuery.dequeue(this, type);\n            }\n          });\n        },\n        dequeue: function(type) {\n          return this.each(function() {\n            jQuery.dequeue(this, type);\n          });\n        },\n        clearQueue: function(type) {\n          return this.queue(type || \"fx\", []);\n        },\n        // Get a promise resolved when queues of a certain type\n        // are emptied (fx is the type by default)\n        promise: function(type, obj) {\n          var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() {\n            if (!--count) {\n              defer.resolveWith(elements, [elements]);\n            }\n          };\n          if (typeof type !== \"string\") {\n            obj = type;\n            type = void 0;\n          }\n          type = type || \"fx\";\n          while (i--) {\n            tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n            if (tmp && tmp.empty) {\n              count++;\n              tmp.empty.add(resolve);\n            }\n          }\n          resolve();\n          return defer.promise(obj);\n        }\n      });\n      var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n      var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n      var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n      var documentElement = document.documentElement;\n      var isAttached = function(elem) {\n        return jQuery.contains(elem.ownerDocument, elem);\n      }, composed = { composed: true };\n      if (documentElement.getRootNode) {\n        isAttached = function(elem) {\n          return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n        };\n      }\n      var isHiddenWithinTree = function(elem, el) {\n        elem = el || elem;\n        return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n        // Support: Firefox <=43 - 45\n        // Disconnected elements can have computed display: none, so first confirm that elem is\n        // in the document.\n        isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n      };\n      function adjustCSS(elem, prop, valueParts, tween) {\n        var adjusted, scale, maxIterations = 20, currentValue = tween ? function() {\n          return tween.cur();\n        } : function() {\n          return jQuery.css(elem, prop, \"\");\n        }, initial = currentValue(), unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"), initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n        if (initialInUnit && initialInUnit[3] !== unit) {\n          initial = initial / 2;\n          unit = unit || initialInUnit[3];\n          initialInUnit = +initial || 1;\n          while (maxIterations--) {\n            jQuery.style(elem, prop, initialInUnit + unit);\n            if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n              maxIterations = 0;\n            }\n            initialInUnit = initialInUnit / scale;\n          }\n          initialInUnit = initialInUnit * 2;\n          jQuery.style(elem, prop, initialInUnit + unit);\n          valueParts = valueParts || [];\n        }\n        if (valueParts) {\n          initialInUnit = +initialInUnit || +initial || 0;\n          adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n          if (tween) {\n            tween.unit = unit;\n            tween.start = initialInUnit;\n            tween.end = adjusted;\n          }\n        }\n        return adjusted;\n      }\n      var defaultDisplayMap = {};\n      function getDefaultDisplay(elem) {\n        var temp, doc = elem.ownerDocument, nodeName2 = elem.nodeName, display = defaultDisplayMap[nodeName2];\n        if (display) {\n          return display;\n        }\n        temp = doc.body.appendChild(doc.createElement(nodeName2));\n        display = jQuery.css(temp, \"display\");\n        temp.parentNode.removeChild(temp);\n        if (display === \"none\") {\n          display = \"block\";\n        }\n        defaultDisplayMap[nodeName2] = display;\n        return display;\n      }\n      function showHide(elements, show) {\n        var display, elem, values = [], index = 0, length = elements.length;\n        for (; index < length; index++) {\n          elem = elements[index];\n          if (!elem.style) {\n            continue;\n          }\n          display = elem.style.display;\n          if (show) {\n            if (display === \"none\") {\n              values[index] = dataPriv.get(elem, \"display\") || null;\n              if (!values[index]) {\n                elem.style.display = \"\";\n              }\n            }\n            if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n              values[index] = getDefaultDisplay(elem);\n            }\n          } else {\n            if (display !== \"none\") {\n              values[index] = \"none\";\n              dataPriv.set(elem, \"display\", display);\n            }\n          }\n        }\n        for (index = 0; index < length; index++) {\n          if (values[index] != null) {\n            elements[index].style.display = values[index];\n          }\n        }\n        return elements;\n      }\n      jQuery.fn.extend({\n        show: function() {\n          return showHide(this, true);\n        },\n        hide: function() {\n          return showHide(this);\n        },\n        toggle: function(state) {\n          if (typeof state === \"boolean\") {\n            return state ? this.show() : this.hide();\n          }\n          return this.each(function() {\n            if (isHiddenWithinTree(this)) {\n              jQuery(this).show();\n            } else {\n              jQuery(this).hide();\n            }\n          });\n        }\n      });\n      var rcheckableType = /^(?:checkbox|radio)$/i;\n      var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n      var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n      (function() {\n        var fragment = document.createDocumentFragment(), div = fragment.appendChild(document.createElement(\"div\")), input = document.createElement(\"input\");\n        input.setAttribute(\"type\", \"radio\");\n        input.setAttribute(\"checked\", \"checked\");\n        input.setAttribute(\"name\", \"t\");\n        div.appendChild(input);\n        support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n        div.innerHTML = \"<textarea>x</textarea>\";\n        support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n        div.innerHTML = \"<option></option>\";\n        support.option = !!div.lastChild;\n      })();\n      var wrapMap = {\n        // XHTML parsers do not magically insert elements in the\n        // same way that tag soup parsers do. So we cannot shorten\n        // this by omitting <tbody> or other required elements.\n        thead: [1, \"<table>\", \"</table>\"],\n        col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n        tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n        td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n        _default: [0, \"\", \"\"]\n      };\n      wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n      wrapMap.th = wrapMap.td;\n      if (!support.option) {\n        wrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n      }\n      function getAll(context, tag) {\n        var ret;\n        if (typeof context.getElementsByTagName !== \"undefined\") {\n          ret = context.getElementsByTagName(tag || \"*\");\n        } else if (typeof context.querySelectorAll !== \"undefined\") {\n          ret = context.querySelectorAll(tag || \"*\");\n        } else {\n          ret = [];\n        }\n        if (tag === void 0 || tag && nodeName(context, tag)) {\n          return jQuery.merge([context], ret);\n        }\n        return ret;\n      }\n      function setGlobalEval(elems, refElements) {\n        var i = 0, l = elems.length;\n        for (; i < l; i++) {\n          dataPriv.set(\n            elems[i],\n            \"globalEval\",\n            !refElements || dataPriv.get(refElements[i], \"globalEval\")\n          );\n        }\n      }\n      var rhtml = /<|&#?\\w+;/;\n      function buildFragment(elems, context, scripts, selection, ignored) {\n        var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length;\n        for (; i < l; i++) {\n          elem = elems[i];\n          if (elem || elem === 0) {\n            if (toType(elem) === \"object\") {\n              jQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n            } else if (!rhtml.test(elem)) {\n              nodes.push(context.createTextNode(elem));\n            } else {\n              tmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n              tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n              wrap = wrapMap[tag] || wrapMap._default;\n              tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n              j = wrap[0];\n              while (j--) {\n                tmp = tmp.lastChild;\n              }\n              jQuery.merge(nodes, tmp.childNodes);\n              tmp = fragment.firstChild;\n              tmp.textContent = \"\";\n            }\n          }\n        }\n        fragment.textContent = \"\";\n        i = 0;\n        while (elem = nodes[i++]) {\n          if (selection && jQuery.inArray(elem, selection) > -1) {\n            if (ignored) {\n              ignored.push(elem);\n            }\n            continue;\n          }\n          attached = isAttached(elem);\n          tmp = getAll(fragment.appendChild(elem), \"script\");\n          if (attached) {\n            setGlobalEval(tmp);\n          }\n          if (scripts) {\n            j = 0;\n            while (elem = tmp[j++]) {\n              if (rscriptType.test(elem.type || \"\")) {\n                scripts.push(elem);\n              }\n            }\n          }\n        }\n        return fragment;\n      }\n      var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n      function returnTrue() {\n        return true;\n      }\n      function returnFalse() {\n        return false;\n      }\n      function expectSync(elem, type) {\n        return elem === safeActiveElement() === (type === \"focus\");\n      }\n      function safeActiveElement() {\n        try {\n          return document.activeElement;\n        } catch (err) {\n        }\n      }\n      function on(elem, types, selector, data, fn, one) {\n        var origFn, type;\n        if (typeof types === \"object\") {\n          if (typeof selector !== \"string\") {\n            data = data || selector;\n            selector = void 0;\n          }\n          for (type in types) {\n            on(elem, type, selector, data, types[type], one);\n          }\n          return elem;\n        }\n        if (data == null && fn == null) {\n          fn = selector;\n          data = selector = void 0;\n        } else if (fn == null) {\n          if (typeof selector === \"string\") {\n            fn = data;\n            data = void 0;\n          } else {\n            fn = data;\n            data = selector;\n            selector = void 0;\n          }\n        }\n        if (fn === false) {\n          fn = returnFalse;\n        } else if (!fn) {\n          return elem;\n        }\n        if (one === 1) {\n          origFn = fn;\n          fn = function(event) {\n            jQuery().off(event);\n            return origFn.apply(this, arguments);\n          };\n          fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n        }\n        return elem.each(function() {\n          jQuery.event.add(this, types, fn, data, selector);\n        });\n      }\n      jQuery.event = {\n        global: {},\n        add: function(elem, types, handler, data, selector) {\n          var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get(elem);\n          if (!acceptData(elem)) {\n            return;\n          }\n          if (handler.handler) {\n            handleObjIn = handler;\n            handler = handleObjIn.handler;\n            selector = handleObjIn.selector;\n          }\n          if (selector) {\n            jQuery.find.matchesSelector(documentElement, selector);\n          }\n          if (!handler.guid) {\n            handler.guid = jQuery.guid++;\n          }\n          if (!(events = elemData.events)) {\n            events = elemData.events = /* @__PURE__ */ Object.create(null);\n          }\n          if (!(eventHandle = elemData.handle)) {\n            eventHandle = elemData.handle = function(e) {\n              return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : void 0;\n            };\n          }\n          types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n          t = types.length;\n          while (t--) {\n            tmp = rtypenamespace.exec(types[t]) || [];\n            type = origType = tmp[1];\n            namespaces = (tmp[2] || \"\").split(\".\").sort();\n            if (!type) {\n              continue;\n            }\n            special = jQuery.event.special[type] || {};\n            type = (selector ? special.delegateType : special.bindType) || type;\n            special = jQuery.event.special[type] || {};\n            handleObj = jQuery.extend({\n              type,\n              origType,\n              data,\n              handler,\n              guid: handler.guid,\n              selector,\n              needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n              namespace: namespaces.join(\".\")\n            }, handleObjIn);\n            if (!(handlers = events[type])) {\n              handlers = events[type] = [];\n              handlers.delegateCount = 0;\n              if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n                if (elem.addEventListener) {\n                  elem.addEventListener(type, eventHandle);\n                }\n              }\n            }\n            if (special.add) {\n              special.add.call(elem, handleObj);\n              if (!handleObj.handler.guid) {\n                handleObj.handler.guid = handler.guid;\n              }\n            }\n            if (selector) {\n              handlers.splice(handlers.delegateCount++, 0, handleObj);\n            } else {\n              handlers.push(handleObj);\n            }\n            jQuery.event.global[type] = true;\n          }\n        },\n        // Detach an event or set of events from an element\n        remove: function(elem, types, handler, selector, mappedTypes) {\n          var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n          if (!elemData || !(events = elemData.events)) {\n            return;\n          }\n          types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n          t = types.length;\n          while (t--) {\n            tmp = rtypenamespace.exec(types[t]) || [];\n            type = origType = tmp[1];\n            namespaces = (tmp[2] || \"\").split(\".\").sort();\n            if (!type) {\n              for (type in events) {\n                jQuery.event.remove(elem, type + types[t], handler, selector, true);\n              }\n              continue;\n            }\n            special = jQuery.event.special[type] || {};\n            type = (selector ? special.delegateType : special.bindType) || type;\n            handlers = events[type] || [];\n            tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n            origCount = j = handlers.length;\n            while (j--) {\n              handleObj = handlers[j];\n              if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n                handlers.splice(j, 1);\n                if (handleObj.selector) {\n                  handlers.delegateCount--;\n                }\n                if (special.remove) {\n                  special.remove.call(elem, handleObj);\n                }\n              }\n            }\n            if (origCount && !handlers.length) {\n              if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n                jQuery.removeEvent(elem, type, elemData.handle);\n              }\n              delete events[type];\n            }\n          }\n          if (jQuery.isEmptyObject(events)) {\n            dataPriv.remove(elem, \"handle events\");\n          }\n        },\n        dispatch: function(nativeEvent) {\n          var i, j, ret, matched, handleObj, handlerQueue, args = new Array(arguments.length), event = jQuery.event.fix(nativeEvent), handlers = (dataPriv.get(this, \"events\") || /* @__PURE__ */ Object.create(null))[event.type] || [], special = jQuery.event.special[event.type] || {};\n          args[0] = event;\n          for (i = 1; i < arguments.length; i++) {\n            args[i] = arguments[i];\n          }\n          event.delegateTarget = this;\n          if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n            return;\n          }\n          handlerQueue = jQuery.event.handlers.call(this, event, handlers);\n          i = 0;\n          while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n            event.currentTarget = matched.elem;\n            j = 0;\n            while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n              if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n                event.handleObj = handleObj;\n                event.data = handleObj.data;\n                ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n                if (ret !== void 0) {\n                  if ((event.result = ret) === false) {\n                    event.preventDefault();\n                    event.stopPropagation();\n                  }\n                }\n              }\n            }\n          }\n          if (special.postDispatch) {\n            special.postDispatch.call(this, event);\n          }\n          return event.result;\n        },\n        handlers: function(event, handlers) {\n          var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target;\n          if (delegateCount && // Support: IE <=9\n          // Black-hole SVG <use> instance trees (trac-13180)\n          cur.nodeType && // Support: Firefox <=42\n          // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n          // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n          // Support: IE 11 only\n          // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n          !(event.type === \"click\" && event.button >= 1)) {\n            for (; cur !== this; cur = cur.parentNode || this) {\n              if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n                matchedHandlers = [];\n                matchedSelectors = {};\n                for (i = 0; i < delegateCount; i++) {\n                  handleObj = handlers[i];\n                  sel = handleObj.selector + \" \";\n                  if (matchedSelectors[sel] === void 0) {\n                    matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n                  }\n                  if (matchedSelectors[sel]) {\n                    matchedHandlers.push(handleObj);\n                  }\n                }\n                if (matchedHandlers.length) {\n                  handlerQueue.push({ elem: cur, handlers: matchedHandlers });\n                }\n              }\n            }\n          }\n          cur = this;\n          if (delegateCount < handlers.length) {\n            handlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n          }\n          return handlerQueue;\n        },\n        addProp: function(name, hook) {\n          Object.defineProperty(jQuery.Event.prototype, name, {\n            enumerable: true,\n            configurable: true,\n            get: isFunction(hook) ? function() {\n              if (this.originalEvent) {\n                return hook(this.originalEvent);\n              }\n            } : function() {\n              if (this.originalEvent) {\n                return this.originalEvent[name];\n              }\n            },\n            set: function(value) {\n              Object.defineProperty(this, name, {\n                enumerable: true,\n                configurable: true,\n                writable: true,\n                value\n              });\n            }\n          });\n        },\n        fix: function(originalEvent) {\n          return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n        },\n        special: {\n          load: {\n            // Prevent triggered image.load events from bubbling to window.load\n            noBubble: true\n          },\n          click: {\n            // Utilize native event to ensure correct state for checkable inputs\n            setup: function(data) {\n              var el = this || data;\n              if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n                leverageNative(el, \"click\", returnTrue);\n              }\n              return false;\n            },\n            trigger: function(data) {\n              var el = this || data;\n              if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n                leverageNative(el, \"click\");\n              }\n              return true;\n            },\n            // For cross-browser consistency, suppress native .click() on links\n            // Also prevent it if we're currently inside a leveraged native-event stack\n            _default: function(event) {\n              var target = event.target;\n              return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n            }\n          },\n          beforeunload: {\n            postDispatch: function(event) {\n              if (event.result !== void 0 && event.originalEvent) {\n                event.originalEvent.returnValue = event.result;\n              }\n            }\n          }\n        }\n      };\n      function leverageNative(el, type, expectSync2) {\n        if (!expectSync2) {\n          if (dataPriv.get(el, type) === void 0) {\n            jQuery.event.add(el, type, returnTrue);\n          }\n          return;\n        }\n        dataPriv.set(el, type, false);\n        jQuery.event.add(el, type, {\n          namespace: false,\n          handler: function(event) {\n            var notAsync, result, saved = dataPriv.get(this, type);\n            if (event.isTrigger & 1 && this[type]) {\n              if (!saved.length) {\n                saved = slice.call(arguments);\n                dataPriv.set(this, type, saved);\n                notAsync = expectSync2(this, type);\n                this[type]();\n                result = dataPriv.get(this, type);\n                if (saved !== result || notAsync) {\n                  dataPriv.set(this, type, false);\n                } else {\n                  result = {};\n                }\n                if (saved !== result) {\n                  event.stopImmediatePropagation();\n                  event.preventDefault();\n                  return result && result.value;\n                }\n              } else if ((jQuery.event.special[type] || {}).delegateType) {\n                event.stopPropagation();\n              }\n            } else if (saved.length) {\n              dataPriv.set(this, type, {\n                value: jQuery.event.trigger(\n                  // Support: IE <=9 - 11+\n                  // Extend with the prototype to reset the above stopImmediatePropagation()\n                  jQuery.extend(saved[0], jQuery.Event.prototype),\n                  saved.slice(1),\n                  this\n                )\n              });\n              event.stopImmediatePropagation();\n            }\n          }\n        });\n      }\n      jQuery.removeEvent = function(elem, type, handle) {\n        if (elem.removeEventListener) {\n          elem.removeEventListener(type, handle);\n        }\n      };\n      jQuery.Event = function(src, props) {\n        if (!(this instanceof jQuery.Event)) {\n          return new jQuery.Event(src, props);\n        }\n        if (src && src.type) {\n          this.originalEvent = src;\n          this.type = src.type;\n          this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === void 0 && // Support: Android <=2.3 only\n          src.returnValue === false ? returnTrue : returnFalse;\n          this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n          this.currentTarget = src.currentTarget;\n          this.relatedTarget = src.relatedTarget;\n        } else {\n          this.type = src;\n        }\n        if (props) {\n          jQuery.extend(this, props);\n        }\n        this.timeStamp = src && src.timeStamp || Date.now();\n        this[jQuery.expando] = true;\n      };\n      jQuery.Event.prototype = {\n        constructor: jQuery.Event,\n        isDefaultPrevented: returnFalse,\n        isPropagationStopped: returnFalse,\n        isImmediatePropagationStopped: returnFalse,\n        isSimulated: false,\n        preventDefault: function() {\n          var e = this.originalEvent;\n          this.isDefaultPrevented = returnTrue;\n          if (e && !this.isSimulated) {\n            e.preventDefault();\n          }\n        },\n        stopPropagation: function() {\n          var e = this.originalEvent;\n          this.isPropagationStopped = returnTrue;\n          if (e && !this.isSimulated) {\n            e.stopPropagation();\n          }\n        },\n        stopImmediatePropagation: function() {\n          var e = this.originalEvent;\n          this.isImmediatePropagationStopped = returnTrue;\n          if (e && !this.isSimulated) {\n            e.stopImmediatePropagation();\n          }\n          this.stopPropagation();\n        }\n      };\n      jQuery.each({\n        altKey: true,\n        bubbles: true,\n        cancelable: true,\n        changedTouches: true,\n        ctrlKey: true,\n        detail: true,\n        eventPhase: true,\n        metaKey: true,\n        pageX: true,\n        pageY: true,\n        shiftKey: true,\n        view: true,\n        \"char\": true,\n        code: true,\n        charCode: true,\n        key: true,\n        keyCode: true,\n        button: true,\n        buttons: true,\n        clientX: true,\n        clientY: true,\n        offsetX: true,\n        offsetY: true,\n        pointerId: true,\n        pointerType: true,\n        screenX: true,\n        screenY: true,\n        targetTouches: true,\n        toElement: true,\n        touches: true,\n        which: true\n      }, jQuery.event.addProp);\n      jQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function(type, delegateType) {\n        jQuery.event.special[type] = {\n          // Utilize native event if possible so blur/focus sequence is correct\n          setup: function() {\n            leverageNative(this, type, expectSync);\n            return false;\n          },\n          trigger: function() {\n            leverageNative(this, type);\n            return true;\n          },\n          // Suppress native focus or blur as it's already being fired\n          // in leverageNative.\n          _default: function() {\n            return true;\n          },\n          delegateType\n        };\n      });\n      jQuery.each({\n        mouseenter: \"mouseover\",\n        mouseleave: \"mouseout\",\n        pointerenter: \"pointerover\",\n        pointerleave: \"pointerout\"\n      }, function(orig, fix) {\n        jQuery.event.special[orig] = {\n          delegateType: fix,\n          bindType: fix,\n          handle: function(event) {\n            var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n            if (!related || related !== target && !jQuery.contains(target, related)) {\n              event.type = handleObj.origType;\n              ret = handleObj.handler.apply(this, arguments);\n              event.type = fix;\n            }\n            return ret;\n          }\n        };\n      });\n      jQuery.fn.extend({\n        on: function(types, selector, data, fn) {\n          return on(this, types, selector, data, fn);\n        },\n        one: function(types, selector, data, fn) {\n          return on(this, types, selector, data, fn, 1);\n        },\n        off: function(types, selector, fn) {\n          var handleObj, type;\n          if (types && types.preventDefault && types.handleObj) {\n            handleObj = types.handleObj;\n            jQuery(types.delegateTarget).off(\n              handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType,\n              handleObj.selector,\n              handleObj.handler\n            );\n            return this;\n          }\n          if (typeof types === \"object\") {\n            for (type in types) {\n              this.off(type, selector, types[type]);\n            }\n            return this;\n          }\n          if (selector === false || typeof selector === \"function\") {\n            fn = selector;\n            selector = void 0;\n          }\n          if (fn === false) {\n            fn = returnFalse;\n          }\n          return this.each(function() {\n            jQuery.event.remove(this, types, fn, selector);\n          });\n        }\n      });\n      var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i, rcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n      function manipulationTarget(elem, content) {\n        if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n          return jQuery(elem).children(\"tbody\")[0] || elem;\n        }\n        return elem;\n      }\n      function disableScript(elem) {\n        elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n        return elem;\n      }\n      function restoreScript(elem) {\n        if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n          elem.type = elem.type.slice(5);\n        } else {\n          elem.removeAttribute(\"type\");\n        }\n        return elem;\n      }\n      function cloneCopyEvent(src, dest) {\n        var i, l, type, pdataOld, udataOld, udataCur, events;\n        if (dest.nodeType !== 1) {\n          return;\n        }\n        if (dataPriv.hasData(src)) {\n          pdataOld = dataPriv.get(src);\n          events = pdataOld.events;\n          if (events) {\n            dataPriv.remove(dest, \"handle events\");\n            for (type in events) {\n              for (i = 0, l = events[type].length; i < l; i++) {\n                jQuery.event.add(dest, type, events[type][i]);\n              }\n            }\n          }\n        }\n        if (dataUser.hasData(src)) {\n          udataOld = dataUser.access(src);\n          udataCur = jQuery.extend({}, udataOld);\n          dataUser.set(dest, udataCur);\n        }\n      }\n      function fixInput(src, dest) {\n        var nodeName2 = dest.nodeName.toLowerCase();\n        if (nodeName2 === \"input\" && rcheckableType.test(src.type)) {\n          dest.checked = src.checked;\n        } else if (nodeName2 === \"input\" || nodeName2 === \"textarea\") {\n          dest.defaultValue = src.defaultValue;\n        }\n      }\n      function domManip(collection, args, callback, ignored) {\n        args = flat(args);\n        var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[0], valueIsFunction = isFunction(value);\n        if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n          return collection.each(function(index) {\n            var self = collection.eq(index);\n            if (valueIsFunction) {\n              args[0] = value.call(this, index, self.html());\n            }\n            domManip(self, args, callback, ignored);\n          });\n        }\n        if (l) {\n          fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n          first = fragment.firstChild;\n          if (fragment.childNodes.length === 1) {\n            fragment = first;\n          }\n          if (first || ignored) {\n            scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n            hasScripts = scripts.length;\n            for (; i < l; i++) {\n              node = fragment;\n              if (i !== iNoClone) {\n                node = jQuery.clone(node, true, true);\n                if (hasScripts) {\n                  jQuery.merge(scripts, getAll(node, \"script\"));\n                }\n              }\n              callback.call(collection[i], node, i);\n            }\n            if (hasScripts) {\n              doc = scripts[scripts.length - 1].ownerDocument;\n              jQuery.map(scripts, restoreScript);\n              for (i = 0; i < hasScripts; i++) {\n                node = scripts[i];\n                if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n                  if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                    if (jQuery._evalUrl && !node.noModule) {\n                      jQuery._evalUrl(node.src, {\n                        nonce: node.nonce || node.getAttribute(\"nonce\")\n                      }, doc);\n                    }\n                  } else {\n                    DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n                  }\n                }\n              }\n            }\n          }\n        }\n        return collection;\n      }\n      function remove(elem, selector, keepData) {\n        var node, nodes = selector ? jQuery.filter(selector, elem) : elem, i = 0;\n        for (; (node = nodes[i]) != null; i++) {\n          if (!keepData && node.nodeType === 1) {\n            jQuery.cleanData(getAll(node));\n          }\n          if (node.parentNode) {\n            if (keepData && isAttached(node)) {\n              setGlobalEval(getAll(node, \"script\"));\n            }\n            node.parentNode.removeChild(node);\n          }\n        }\n        return elem;\n      }\n      jQuery.extend({\n        htmlPrefilter: function(html) {\n          return html;\n        },\n        clone: function(elem, dataAndEvents, deepDataAndEvents) {\n          var i, l, srcElements, destElements, clone = elem.cloneNode(true), inPage = isAttached(elem);\n          if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n            destElements = getAll(clone);\n            srcElements = getAll(elem);\n            for (i = 0, l = srcElements.length; i < l; i++) {\n              fixInput(srcElements[i], destElements[i]);\n            }\n          }\n          if (dataAndEvents) {\n            if (deepDataAndEvents) {\n              srcElements = srcElements || getAll(elem);\n              destElements = destElements || getAll(clone);\n              for (i = 0, l = srcElements.length; i < l; i++) {\n                cloneCopyEvent(srcElements[i], destElements[i]);\n              }\n            } else {\n              cloneCopyEvent(elem, clone);\n            }\n          }\n          destElements = getAll(clone, \"script\");\n          if (destElements.length > 0) {\n            setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n          }\n          return clone;\n        },\n        cleanData: function(elems) {\n          var data, elem, type, special = jQuery.event.special, i = 0;\n          for (; (elem = elems[i]) !== void 0; i++) {\n            if (acceptData(elem)) {\n              if (data = elem[dataPriv.expando]) {\n                if (data.events) {\n                  for (type in data.events) {\n                    if (special[type]) {\n                      jQuery.event.remove(elem, type);\n                    } else {\n                      jQuery.removeEvent(elem, type, data.handle);\n                    }\n                  }\n                }\n                elem[dataPriv.expando] = void 0;\n              }\n              if (elem[dataUser.expando]) {\n                elem[dataUser.expando] = void 0;\n              }\n            }\n          }\n        }\n      });\n      jQuery.fn.extend({\n        detach: function(selector) {\n          return remove(this, selector, true);\n        },\n        remove: function(selector) {\n          return remove(this, selector);\n        },\n        text: function(value) {\n          return access(this, function(value2) {\n            return value2 === void 0 ? jQuery.text(this) : this.empty().each(function() {\n              if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n                this.textContent = value2;\n              }\n            });\n          }, null, value, arguments.length);\n        },\n        append: function() {\n          return domManip(this, arguments, function(elem) {\n            if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n              var target = manipulationTarget(this, elem);\n              target.appendChild(elem);\n            }\n          });\n        },\n        prepend: function() {\n          return domManip(this, arguments, function(elem) {\n            if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n              var target = manipulationTarget(this, elem);\n              target.insertBefore(elem, target.firstChild);\n            }\n          });\n        },\n        before: function() {\n          return domManip(this, arguments, function(elem) {\n            if (this.parentNode) {\n              this.parentNode.insertBefore(elem, this);\n            }\n          });\n        },\n        after: function() {\n          return domManip(this, arguments, function(elem) {\n            if (this.parentNode) {\n              this.parentNode.insertBefore(elem, this.nextSibling);\n            }\n          });\n        },\n        empty: function() {\n          var elem, i = 0;\n          for (; (elem = this[i]) != null; i++) {\n            if (elem.nodeType === 1) {\n              jQuery.cleanData(getAll(elem, false));\n              elem.textContent = \"\";\n            }\n          }\n          return this;\n        },\n        clone: function(dataAndEvents, deepDataAndEvents) {\n          dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n          deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n          return this.map(function() {\n            return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n          });\n        },\n        html: function(value) {\n          return access(this, function(value2) {\n            var elem = this[0] || {}, i = 0, l = this.length;\n            if (value2 === void 0 && elem.nodeType === 1) {\n              return elem.innerHTML;\n            }\n            if (typeof value2 === \"string\" && !rnoInnerhtml.test(value2) && !wrapMap[(rtagName.exec(value2) || [\"\", \"\"])[1].toLowerCase()]) {\n              value2 = jQuery.htmlPrefilter(value2);\n              try {\n                for (; i < l; i++) {\n                  elem = this[i] || {};\n                  if (elem.nodeType === 1) {\n                    jQuery.cleanData(getAll(elem, false));\n                    elem.innerHTML = value2;\n                  }\n                }\n                elem = 0;\n              } catch (e) {\n              }\n            }\n            if (elem) {\n              this.empty().append(value2);\n            }\n          }, null, value, arguments.length);\n        },\n        replaceWith: function() {\n          var ignored = [];\n          return domManip(this, arguments, function(elem) {\n            var parent = this.parentNode;\n            if (jQuery.inArray(this, ignored) < 0) {\n              jQuery.cleanData(getAll(this));\n              if (parent) {\n                parent.replaceChild(elem, this);\n              }\n            }\n          }, ignored);\n        }\n      });\n      jQuery.each({\n        appendTo: \"append\",\n        prependTo: \"prepend\",\n        insertBefore: \"before\",\n        insertAfter: \"after\",\n        replaceAll: \"replaceWith\"\n      }, function(name, original) {\n        jQuery.fn[name] = function(selector) {\n          var elems, ret = [], insert = jQuery(selector), last = insert.length - 1, i = 0;\n          for (; i <= last; i++) {\n            elems = i === last ? this : this.clone(true);\n            jQuery(insert[i])[original](elems);\n            push.apply(ret, elems.get());\n          }\n          return this.pushStack(ret);\n        };\n      });\n      var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n      var getStyles = function(elem) {\n        var view = elem.ownerDocument.defaultView;\n        if (!view || !view.opener) {\n          view = window2;\n        }\n        return view.getComputedStyle(elem);\n      };\n      var swap = function(elem, options, callback) {\n        var ret, name, old = {};\n        for (name in options) {\n          old[name] = elem.style[name];\n          elem.style[name] = options[name];\n        }\n        ret = callback.call(elem);\n        for (name in options) {\n          elem.style[name] = old[name];\n        }\n        return ret;\n      };\n      var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n      (function() {\n        function computeStyleTests() {\n          if (!div) {\n            return;\n          }\n          container.style.cssText = \"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\";\n          div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\";\n          documentElement.appendChild(container).appendChild(div);\n          var divStyle = window2.getComputedStyle(div);\n          pixelPositionVal = divStyle.top !== \"1%\";\n          reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n          div.style.right = \"60%\";\n          pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n          boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n          div.style.position = \"absolute\";\n          scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n          documentElement.removeChild(container);\n          div = null;\n        }\n        function roundPixelMeasures(measure) {\n          return Math.round(parseFloat(measure));\n        }\n        var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement(\"div\"), div = document.createElement(\"div\");\n        if (!div.style) {\n          return;\n        }\n        div.style.backgroundClip = \"content-box\";\n        div.cloneNode(true).style.backgroundClip = \"\";\n        support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n        jQuery.extend(support, {\n          boxSizingReliable: function() {\n            computeStyleTests();\n            return boxSizingReliableVal;\n          },\n          pixelBoxStyles: function() {\n            computeStyleTests();\n            return pixelBoxStylesVal;\n          },\n          pixelPosition: function() {\n            computeStyleTests();\n            return pixelPositionVal;\n          },\n          reliableMarginLeft: function() {\n            computeStyleTests();\n            return reliableMarginLeftVal;\n          },\n          scrollboxSize: function() {\n            computeStyleTests();\n            return scrollboxSizeVal;\n          },\n          // Support: IE 9 - 11+, Edge 15 - 18+\n          // IE/Edge misreport `getComputedStyle` of table rows with width/height\n          // set in CSS while `offset*` properties report correct values.\n          // Behavior in IE 9 is more subtle than in newer versions & it passes\n          // some versions of this test; make sure not to make it pass there!\n          //\n          // Support: Firefox 70+\n          // Only Firefox includes border widths\n          // in computed dimensions. (gh-4529)\n          reliableTrDimensions: function() {\n            var table, tr, trChild, trStyle;\n            if (reliableTrDimensionsVal == null) {\n              table = document.createElement(\"table\");\n              tr = document.createElement(\"tr\");\n              trChild = document.createElement(\"div\");\n              table.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n              tr.style.cssText = \"border:1px solid\";\n              tr.style.height = \"1px\";\n              trChild.style.height = \"9px\";\n              trChild.style.display = \"block\";\n              documentElement.appendChild(table).appendChild(tr).appendChild(trChild);\n              trStyle = window2.getComputedStyle(tr);\n              reliableTrDimensionsVal = parseInt(trStyle.height, 10) + parseInt(trStyle.borderTopWidth, 10) + parseInt(trStyle.borderBottomWidth, 10) === tr.offsetHeight;\n              documentElement.removeChild(table);\n            }\n            return reliableTrDimensionsVal;\n          }\n        });\n      })();\n      function curCSS(elem, name, computed) {\n        var width, minWidth, maxWidth, ret, style = elem.style;\n        computed = computed || getStyles(elem);\n        if (computed) {\n          ret = computed.getPropertyValue(name) || computed[name];\n          if (ret === \"\" && !isAttached(elem)) {\n            ret = jQuery.style(elem, name);\n          }\n          if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n            width = style.width;\n            minWidth = style.minWidth;\n            maxWidth = style.maxWidth;\n            style.minWidth = style.maxWidth = style.width = ret;\n            ret = computed.width;\n            style.width = width;\n            style.minWidth = minWidth;\n            style.maxWidth = maxWidth;\n          }\n        }\n        return ret !== void 0 ? (\n          // Support: IE <=9 - 11 only\n          // IE returns zIndex value as an integer.\n          ret + \"\"\n        ) : ret;\n      }\n      function addGetHookIf(conditionFn, hookFn) {\n        return {\n          get: function() {\n            if (conditionFn()) {\n              delete this.get;\n              return;\n            }\n            return (this.get = hookFn).apply(this, arguments);\n          }\n        };\n      }\n      var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"], emptyStyle = document.createElement(\"div\").style, vendorProps = {};\n      function vendorPropName(name) {\n        var capName = name[0].toUpperCase() + name.slice(1), i = cssPrefixes.length;\n        while (i--) {\n          name = cssPrefixes[i] + capName;\n          if (name in emptyStyle) {\n            return name;\n          }\n        }\n      }\n      function finalPropName(name) {\n        var final = jQuery.cssProps[name] || vendorProps[name];\n        if (final) {\n          return final;\n        }\n        if (name in emptyStyle) {\n          return name;\n        }\n        return vendorProps[name] = vendorPropName(name) || name;\n      }\n      var rdisplayswap = /^(none|table(?!-c[ea]).+)/, rcustomProp = /^--/, cssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" }, cssNormalTransform = {\n        letterSpacing: \"0\",\n        fontWeight: \"400\"\n      };\n      function setPositiveNumber(_elem, value, subtract) {\n        var matches = rcssNum.exec(value);\n        return matches ? (\n          // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n          Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\")\n        ) : value;\n      }\n      function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n        var i = dimension === \"width\" ? 1 : 0, extra = 0, delta = 0;\n        if (box === (isBorderBox ? \"border\" : \"content\")) {\n          return 0;\n        }\n        for (; i < 4; i += 2) {\n          if (box === \"margin\") {\n            delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n          }\n          if (!isBorderBox) {\n            delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n            if (box !== \"padding\") {\n              delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n            } else {\n              extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n            }\n          } else {\n            if (box === \"content\") {\n              delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n            }\n            if (box !== \"margin\") {\n              delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n            }\n          }\n        }\n        if (!isBorderBox && computedVal >= 0) {\n          delta += Math.max(0, Math.ceil(\n            elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5\n            // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n            // Use an explicit zero to avoid NaN (gh-3964)\n          )) || 0;\n        }\n        return delta;\n      }\n      function getWidthOrHeight(elem, dimension, extra) {\n        var styles = getStyles(elem), boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n        if (rnumnonpx.test(val)) {\n          if (!extra) {\n            return val;\n          }\n          val = \"auto\";\n        }\n        if ((!support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+\n        // IE/Edge misreport `getComputedStyle` of table rows with width/height\n        // set in CSS while `offset*` properties report correct values.\n        // Interestingly, in some cases IE 9 doesn't suffer from this issue.\n        !support.reliableTrDimensions() && nodeName(elem, \"tr\") || // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n        // This happens for inline elements with no explicit setting (gh-3571)\n        val === \"auto\" || // Support: Android <=4.1 - 4.3 only\n        // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n        !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && // Make sure the element is visible & connected\n        elem.getClientRects().length) {\n          isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n          valueIsBorderBox = offsetProp in elem;\n          if (valueIsBorderBox) {\n            val = elem[offsetProp];\n          }\n        }\n        val = parseFloat(val) || 0;\n        return val + boxModelAdjustment(\n          elem,\n          dimension,\n          extra || (isBorderBox ? \"border\" : \"content\"),\n          valueIsBorderBox,\n          styles,\n          // Provide the current computed size to request scroll gutter calculation (gh-3589)\n          val\n        ) + \"px\";\n      }\n      jQuery.extend({\n        // Add in style property hooks for overriding the default\n        // behavior of getting and setting a style property\n        cssHooks: {\n          opacity: {\n            get: function(elem, computed) {\n              if (computed) {\n                var ret = curCSS(elem, \"opacity\");\n                return ret === \"\" ? \"1\" : ret;\n              }\n            }\n          }\n        },\n        // Don't automatically add \"px\" to these possibly-unitless properties\n        cssNumber: {\n          \"animationIterationCount\": true,\n          \"columnCount\": true,\n          \"fillOpacity\": true,\n          \"flexGrow\": true,\n          \"flexShrink\": true,\n          \"fontWeight\": true,\n          \"gridArea\": true,\n          \"gridColumn\": true,\n          \"gridColumnEnd\": true,\n          \"gridColumnStart\": true,\n          \"gridRow\": true,\n          \"gridRowEnd\": true,\n          \"gridRowStart\": true,\n          \"lineHeight\": true,\n          \"opacity\": true,\n          \"order\": true,\n          \"orphans\": true,\n          \"widows\": true,\n          \"zIndex\": true,\n          \"zoom\": true\n        },\n        // Add in properties whose names you wish to fix before\n        // setting or getting the value\n        cssProps: {},\n        // Get and set the style property on a DOM Node\n        style: function(elem, name, value, extra) {\n          if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n            return;\n          }\n          var ret, type, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name), style = elem.style;\n          if (!isCustomProp) {\n            name = finalPropName(origName);\n          }\n          hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n          if (value !== void 0) {\n            type = typeof value;\n            if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n              value = adjustCSS(elem, name, ret);\n              type = \"number\";\n            }\n            if (value == null || value !== value) {\n              return;\n            }\n            if (type === \"number\" && !isCustomProp) {\n              value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n            }\n            if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n              style[name] = \"inherit\";\n            }\n            if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== void 0) {\n              if (isCustomProp) {\n                style.setProperty(name, value);\n              } else {\n                style[name] = value;\n              }\n            }\n          } else {\n            if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== void 0) {\n              return ret;\n            }\n            return style[name];\n          }\n        },\n        css: function(elem, name, extra, styles) {\n          var val, num, hooks, origName = camelCase(name), isCustomProp = rcustomProp.test(name);\n          if (!isCustomProp) {\n            name = finalPropName(origName);\n          }\n          hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n          if (hooks && \"get\" in hooks) {\n            val = hooks.get(elem, true, extra);\n          }\n          if (val === void 0) {\n            val = curCSS(elem, name, styles);\n          }\n          if (val === \"normal\" && name in cssNormalTransform) {\n            val = cssNormalTransform[name];\n          }\n          if (extra === \"\" || extra) {\n            num = parseFloat(val);\n            return extra === true || isFinite(num) ? num || 0 : val;\n          }\n          return val;\n        }\n      });\n      jQuery.each([\"height\", \"width\"], function(_i, dimension) {\n        jQuery.cssHooks[dimension] = {\n          get: function(elem, computed, extra) {\n            if (computed) {\n              return rdisplayswap.test(jQuery.css(elem, \"display\")) && // Support: Safari 8+\n              // Table columns in Safari have non-zero offsetWidth & zero\n              // getBoundingClientRect().width unless display is changed.\n              // Support: IE <=11 only\n              // Running getBoundingClientRect on a disconnected node\n              // in IE throws an error.\n              (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function() {\n                return getWidthOrHeight(elem, dimension, extra);\n              }) : getWidthOrHeight(elem, dimension, extra);\n            }\n          },\n          set: function(elem, value, extra) {\n            var matches, styles = getStyles(elem), scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\", boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\", subtract = extra ? boxModelAdjustment(\n              elem,\n              dimension,\n              extra,\n              isBorderBox,\n              styles\n            ) : 0;\n            if (isBorderBox && scrollboxSizeBuggy) {\n              subtract -= Math.ceil(\n                elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5\n              );\n            }\n            if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n              elem.style[dimension] = value;\n              value = jQuery.css(elem, dimension);\n            }\n            return setPositiveNumber(elem, value, subtract);\n          }\n        };\n      });\n      jQuery.cssHooks.marginLeft = addGetHookIf(\n        support.reliableMarginLeft,\n        function(elem, computed) {\n          if (computed) {\n            return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function() {\n              return elem.getBoundingClientRect().left;\n            })) + \"px\";\n          }\n        }\n      );\n      jQuery.each({\n        margin: \"\",\n        padding: \"\",\n        border: \"Width\"\n      }, function(prefix, suffix) {\n        jQuery.cssHooks[prefix + suffix] = {\n          expand: function(value) {\n            var i = 0, expanded = {}, parts = typeof value === \"string\" ? value.split(\" \") : [value];\n            for (; i < 4; i++) {\n              expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n            }\n            return expanded;\n          }\n        };\n        if (prefix !== \"margin\") {\n          jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n        }\n      });\n      jQuery.fn.extend({\n        css: function(name, value) {\n          return access(this, function(elem, name2, value2) {\n            var styles, len, map = {}, i = 0;\n            if (Array.isArray(name2)) {\n              styles = getStyles(elem);\n              len = name2.length;\n              for (; i < len; i++) {\n                map[name2[i]] = jQuery.css(elem, name2[i], false, styles);\n              }\n              return map;\n            }\n            return value2 !== void 0 ? jQuery.style(elem, name2, value2) : jQuery.css(elem, name2);\n          }, name, value, arguments.length > 1);\n        }\n      });\n      function Tween(elem, options, prop, end, easing) {\n        return new Tween.prototype.init(elem, options, prop, end, easing);\n      }\n      jQuery.Tween = Tween;\n      Tween.prototype = {\n        constructor: Tween,\n        init: function(elem, options, prop, end, easing, unit) {\n          this.elem = elem;\n          this.prop = prop;\n          this.easing = easing || jQuery.easing._default;\n          this.options = options;\n          this.start = this.now = this.cur();\n          this.end = end;\n          this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n        },\n        cur: function() {\n          var hooks = Tween.propHooks[this.prop];\n          return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n        },\n        run: function(percent) {\n          var eased, hooks = Tween.propHooks[this.prop];\n          if (this.options.duration) {\n            this.pos = eased = jQuery.easing[this.easing](\n              percent,\n              this.options.duration * percent,\n              0,\n              1,\n              this.options.duration\n            );\n          } else {\n            this.pos = eased = percent;\n          }\n          this.now = (this.end - this.start) * eased + this.start;\n          if (this.options.step) {\n            this.options.step.call(this.elem, this.now, this);\n          }\n          if (hooks && hooks.set) {\n            hooks.set(this);\n          } else {\n            Tween.propHooks._default.set(this);\n          }\n          return this;\n        }\n      };\n      Tween.prototype.init.prototype = Tween.prototype;\n      Tween.propHooks = {\n        _default: {\n          get: function(tween) {\n            var result;\n            if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n              return tween.elem[tween.prop];\n            }\n            result = jQuery.css(tween.elem, tween.prop, \"\");\n            return !result || result === \"auto\" ? 0 : result;\n          },\n          set: function(tween) {\n            if (jQuery.fx.step[tween.prop]) {\n              jQuery.fx.step[tween.prop](tween);\n            } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n              jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n            } else {\n              tween.elem[tween.prop] = tween.now;\n            }\n          }\n        }\n      };\n      Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n        set: function(tween) {\n          if (tween.elem.nodeType && tween.elem.parentNode) {\n            tween.elem[tween.prop] = tween.now;\n          }\n        }\n      };\n      jQuery.easing = {\n        linear: function(p) {\n          return p;\n        },\n        swing: function(p) {\n          return 0.5 - Math.cos(p * Math.PI) / 2;\n        },\n        _default: \"swing\"\n      };\n      jQuery.fx = Tween.prototype.init;\n      jQuery.fx.step = {};\n      var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/;\n      function schedule() {\n        if (inProgress) {\n          if (document.hidden === false && window2.requestAnimationFrame) {\n            window2.requestAnimationFrame(schedule);\n          } else {\n            window2.setTimeout(schedule, jQuery.fx.interval);\n          }\n          jQuery.fx.tick();\n        }\n      }\n      function createFxNow() {\n        window2.setTimeout(function() {\n          fxNow = void 0;\n        });\n        return fxNow = Date.now();\n      }\n      function genFx(type, includeWidth) {\n        var which, i = 0, attrs = { height: type };\n        includeWidth = includeWidth ? 1 : 0;\n        for (; i < 4; i += 2 - includeWidth) {\n          which = cssExpand[i];\n          attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n        }\n        if (includeWidth) {\n          attrs.opacity = attrs.width = type;\n        }\n        return attrs;\n      }\n      function createTween(value, prop, animation) {\n        var tween, collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]), index = 0, length = collection.length;\n        for (; index < length; index++) {\n          if (tween = collection[index].call(animation, prop, value)) {\n            return tween;\n          }\n        }\n      }\n      function defaultPrefilter(elem, props, opts) {\n        var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = \"width\" in props || \"height\" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree(elem), dataShow = dataPriv.get(elem, \"fxshow\");\n        if (!opts.queue) {\n          hooks = jQuery._queueHooks(elem, \"fx\");\n          if (hooks.unqueued == null) {\n            hooks.unqueued = 0;\n            oldfire = hooks.empty.fire;\n            hooks.empty.fire = function() {\n              if (!hooks.unqueued) {\n                oldfire();\n              }\n            };\n          }\n          hooks.unqueued++;\n          anim.always(function() {\n            anim.always(function() {\n              hooks.unqueued--;\n              if (!jQuery.queue(elem, \"fx\").length) {\n                hooks.empty.fire();\n              }\n            });\n          });\n        }\n        for (prop in props) {\n          value = props[prop];\n          if (rfxtypes.test(value)) {\n            delete props[prop];\n            toggle = toggle || value === \"toggle\";\n            if (value === (hidden ? \"hide\" : \"show\")) {\n              if (value === \"show\" && dataShow && dataShow[prop] !== void 0) {\n                hidden = true;\n              } else {\n                continue;\n              }\n            }\n            orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n          }\n        }\n        propTween = !jQuery.isEmptyObject(props);\n        if (!propTween && jQuery.isEmptyObject(orig)) {\n          return;\n        }\n        if (isBox && elem.nodeType === 1) {\n          opts.overflow = [style.overflow, style.overflowX, style.overflowY];\n          restoreDisplay = dataShow && dataShow.display;\n          if (restoreDisplay == null) {\n            restoreDisplay = dataPriv.get(elem, \"display\");\n          }\n          display = jQuery.css(elem, \"display\");\n          if (display === \"none\") {\n            if (restoreDisplay) {\n              display = restoreDisplay;\n            } else {\n              showHide([elem], true);\n              restoreDisplay = elem.style.display || restoreDisplay;\n              display = jQuery.css(elem, \"display\");\n              showHide([elem]);\n            }\n          }\n          if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n            if (jQuery.css(elem, \"float\") === \"none\") {\n              if (!propTween) {\n                anim.done(function() {\n                  style.display = restoreDisplay;\n                });\n                if (restoreDisplay == null) {\n                  display = style.display;\n                  restoreDisplay = display === \"none\" ? \"\" : display;\n                }\n              }\n              style.display = \"inline-block\";\n            }\n          }\n        }\n        if (opts.overflow) {\n          style.overflow = \"hidden\";\n          anim.always(function() {\n            style.overflow = opts.overflow[0];\n            style.overflowX = opts.overflow[1];\n            style.overflowY = opts.overflow[2];\n          });\n        }\n        propTween = false;\n        for (prop in orig) {\n          if (!propTween) {\n            if (dataShow) {\n              if (\"hidden\" in dataShow) {\n                hidden = dataShow.hidden;\n              }\n            } else {\n              dataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n            }\n            if (toggle) {\n              dataShow.hidden = !hidden;\n            }\n            if (hidden) {\n              showHide([elem], true);\n            }\n            anim.done(function() {\n              if (!hidden) {\n                showHide([elem]);\n              }\n              dataPriv.remove(elem, \"fxshow\");\n              for (prop in orig) {\n                jQuery.style(elem, prop, orig[prop]);\n              }\n            });\n          }\n          propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n          if (!(prop in dataShow)) {\n            dataShow[prop] = propTween.start;\n            if (hidden) {\n              propTween.end = propTween.start;\n              propTween.start = 0;\n            }\n          }\n        }\n      }\n      function propFilter(props, specialEasing) {\n        var index, name, easing, value, hooks;\n        for (index in props) {\n          name = camelCase(index);\n          easing = specialEasing[name];\n          value = props[index];\n          if (Array.isArray(value)) {\n            easing = value[1];\n            value = props[index] = value[0];\n          }\n          if (index !== name) {\n            props[name] = value;\n            delete props[index];\n          }\n          hooks = jQuery.cssHooks[name];\n          if (hooks && \"expand\" in hooks) {\n            value = hooks.expand(value);\n            delete props[name];\n            for (index in value) {\n              if (!(index in props)) {\n                props[index] = value[index];\n                specialEasing[index] = easing;\n              }\n            }\n          } else {\n            specialEasing[name] = easing;\n          }\n        }\n      }\n      function Animation(elem, properties, options) {\n        var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always(function() {\n          delete tick.elem;\n        }), tick = function() {\n          if (stopped) {\n            return false;\n          }\n          var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), temp = remaining / animation.duration || 0, percent = 1 - temp, index2 = 0, length2 = animation.tweens.length;\n          for (; index2 < length2; index2++) {\n            animation.tweens[index2].run(percent);\n          }\n          deferred.notifyWith(elem, [animation, percent, remaining]);\n          if (percent < 1 && length2) {\n            return remaining;\n          }\n          if (!length2) {\n            deferred.notifyWith(elem, [animation, 1, 0]);\n          }\n          deferred.resolveWith(elem, [animation]);\n          return false;\n        }, animation = deferred.promise({\n          elem,\n          props: jQuery.extend({}, properties),\n          opts: jQuery.extend(true, {\n            specialEasing: {},\n            easing: jQuery.easing._default\n          }, options),\n          originalProperties: properties,\n          originalOptions: options,\n          startTime: fxNow || createFxNow(),\n          duration: options.duration,\n          tweens: [],\n          createTween: function(prop, end) {\n            var tween = jQuery.Tween(\n              elem,\n              animation.opts,\n              prop,\n              end,\n              animation.opts.specialEasing[prop] || animation.opts.easing\n            );\n            animation.tweens.push(tween);\n            return tween;\n          },\n          stop: function(gotoEnd) {\n            var index2 = 0, length2 = gotoEnd ? animation.tweens.length : 0;\n            if (stopped) {\n              return this;\n            }\n            stopped = true;\n            for (; index2 < length2; index2++) {\n              animation.tweens[index2].run(1);\n            }\n            if (gotoEnd) {\n              deferred.notifyWith(elem, [animation, 1, 0]);\n              deferred.resolveWith(elem, [animation, gotoEnd]);\n            } else {\n              deferred.rejectWith(elem, [animation, gotoEnd]);\n            }\n            return this;\n          }\n        }), props = animation.props;\n        propFilter(props, animation.opts.specialEasing);\n        for (; index < length; index++) {\n          result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n          if (result) {\n            if (isFunction(result.stop)) {\n              jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n            }\n            return result;\n          }\n        }\n        jQuery.map(props, createTween, animation);\n        if (isFunction(animation.opts.start)) {\n          animation.opts.start.call(elem, animation);\n        }\n        animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n        jQuery.fx.timer(\n          jQuery.extend(tick, {\n            elem,\n            anim: animation,\n            queue: animation.opts.queue\n          })\n        );\n        return animation;\n      }\n      jQuery.Animation = jQuery.extend(Animation, {\n        tweeners: {\n          \"*\": [function(prop, value) {\n            var tween = this.createTween(prop, value);\n            adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n            return tween;\n          }]\n        },\n        tweener: function(props, callback) {\n          if (isFunction(props)) {\n            callback = props;\n            props = [\"*\"];\n          } else {\n            props = props.match(rnothtmlwhite);\n          }\n          var prop, index = 0, length = props.length;\n          for (; index < length; index++) {\n            prop = props[index];\n            Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n            Animation.tweeners[prop].unshift(callback);\n          }\n        },\n        prefilters: [defaultPrefilter],\n        prefilter: function(callback, prepend) {\n          if (prepend) {\n            Animation.prefilters.unshift(callback);\n          } else {\n            Animation.prefilters.push(callback);\n          }\n        }\n      });\n      jQuery.speed = function(speed, easing, fn) {\n        var opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n          complete: fn || !fn && easing || isFunction(speed) && speed,\n          duration: speed,\n          easing: fn && easing || easing && !isFunction(easing) && easing\n        };\n        if (jQuery.fx.off) {\n          opt.duration = 0;\n        } else {\n          if (typeof opt.duration !== \"number\") {\n            if (opt.duration in jQuery.fx.speeds) {\n              opt.duration = jQuery.fx.speeds[opt.duration];\n            } else {\n              opt.duration = jQuery.fx.speeds._default;\n            }\n          }\n        }\n        if (opt.queue == null || opt.queue === true) {\n          opt.queue = \"fx\";\n        }\n        opt.old = opt.complete;\n        opt.complete = function() {\n          if (isFunction(opt.old)) {\n            opt.old.call(this);\n          }\n          if (opt.queue) {\n            jQuery.dequeue(this, opt.queue);\n          }\n        };\n        return opt;\n      };\n      jQuery.fn.extend({\n        fadeTo: function(speed, to, easing, callback) {\n          return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show().end().animate({ opacity: to }, speed, easing, callback);\n        },\n        animate: function(prop, speed, easing, callback) {\n          var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), doAnimation = function() {\n            var anim = Animation(this, jQuery.extend({}, prop), optall);\n            if (empty || dataPriv.get(this, \"finish\")) {\n              anim.stop(true);\n            }\n          };\n          doAnimation.finish = doAnimation;\n          return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n        },\n        stop: function(type, clearQueue, gotoEnd) {\n          var stopQueue = function(hooks) {\n            var stop = hooks.stop;\n            delete hooks.stop;\n            stop(gotoEnd);\n          };\n          if (typeof type !== \"string\") {\n            gotoEnd = clearQueue;\n            clearQueue = type;\n            type = void 0;\n          }\n          if (clearQueue) {\n            this.queue(type || \"fx\", []);\n          }\n          return this.each(function() {\n            var dequeue = true, index = type != null && type + \"queueHooks\", timers = jQuery.timers, data = dataPriv.get(this);\n            if (index) {\n              if (data[index] && data[index].stop) {\n                stopQueue(data[index]);\n              }\n            } else {\n              for (index in data) {\n                if (data[index] && data[index].stop && rrun.test(index)) {\n                  stopQueue(data[index]);\n                }\n              }\n            }\n            for (index = timers.length; index--; ) {\n              if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n                timers[index].anim.stop(gotoEnd);\n                dequeue = false;\n                timers.splice(index, 1);\n              }\n            }\n            if (dequeue || !gotoEnd) {\n              jQuery.dequeue(this, type);\n            }\n          });\n        },\n        finish: function(type) {\n          if (type !== false) {\n            type = type || \"fx\";\n          }\n          return this.each(function() {\n            var index, data = dataPriv.get(this), queue = data[type + \"queue\"], hooks = data[type + \"queueHooks\"], timers = jQuery.timers, length = queue ? queue.length : 0;\n            data.finish = true;\n            jQuery.queue(this, type, []);\n            if (hooks && hooks.stop) {\n              hooks.stop.call(this, true);\n            }\n            for (index = timers.length; index--; ) {\n              if (timers[index].elem === this && timers[index].queue === type) {\n                timers[index].anim.stop(true);\n                timers.splice(index, 1);\n              }\n            }\n            for (index = 0; index < length; index++) {\n              if (queue[index] && queue[index].finish) {\n                queue[index].finish.call(this);\n              }\n            }\n            delete data.finish;\n          });\n        }\n      });\n      jQuery.each([\"toggle\", \"show\", \"hide\"], function(_i, name) {\n        var cssFn = jQuery.fn[name];\n        jQuery.fn[name] = function(speed, easing, callback) {\n          return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n        };\n      });\n      jQuery.each({\n        slideDown: genFx(\"show\"),\n        slideUp: genFx(\"hide\"),\n        slideToggle: genFx(\"toggle\"),\n        fadeIn: { opacity: \"show\" },\n        fadeOut: { opacity: \"hide\" },\n        fadeToggle: { opacity: \"toggle\" }\n      }, function(name, props) {\n        jQuery.fn[name] = function(speed, easing, callback) {\n          return this.animate(props, speed, easing, callback);\n        };\n      });\n      jQuery.timers = [];\n      jQuery.fx.tick = function() {\n        var timer, i = 0, timers = jQuery.timers;\n        fxNow = Date.now();\n        for (; i < timers.length; i++) {\n          timer = timers[i];\n          if (!timer() && timers[i] === timer) {\n            timers.splice(i--, 1);\n          }\n        }\n        if (!timers.length) {\n          jQuery.fx.stop();\n        }\n        fxNow = void 0;\n      };\n      jQuery.fx.timer = function(timer) {\n        jQuery.timers.push(timer);\n        jQuery.fx.start();\n      };\n      jQuery.fx.interval = 13;\n      jQuery.fx.start = function() {\n        if (inProgress) {\n          return;\n        }\n        inProgress = true;\n        schedule();\n      };\n      jQuery.fx.stop = function() {\n        inProgress = null;\n      };\n      jQuery.fx.speeds = {\n        slow: 600,\n        fast: 200,\n        // Default speed\n        _default: 400\n      };\n      jQuery.fn.delay = function(time, type) {\n        time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n        type = type || \"fx\";\n        return this.queue(type, function(next, hooks) {\n          var timeout = window2.setTimeout(next, time);\n          hooks.stop = function() {\n            window2.clearTimeout(timeout);\n          };\n        });\n      };\n      (function() {\n        var input = document.createElement(\"input\"), select = document.createElement(\"select\"), opt = select.appendChild(document.createElement(\"option\"));\n        input.type = \"checkbox\";\n        support.checkOn = input.value !== \"\";\n        support.optSelected = opt.selected;\n        input = document.createElement(\"input\");\n        input.value = \"t\";\n        input.type = \"radio\";\n        support.radioValue = input.value === \"t\";\n      })();\n      var boolHook, attrHandle = jQuery.expr.attrHandle;\n      jQuery.fn.extend({\n        attr: function(name, value) {\n          return access(this, jQuery.attr, name, value, arguments.length > 1);\n        },\n        removeAttr: function(name) {\n          return this.each(function() {\n            jQuery.removeAttr(this, name);\n          });\n        }\n      });\n      jQuery.extend({\n        attr: function(elem, name, value) {\n          var ret, hooks, nType = elem.nodeType;\n          if (nType === 3 || nType === 8 || nType === 2) {\n            return;\n          }\n          if (typeof elem.getAttribute === \"undefined\") {\n            return jQuery.prop(elem, name, value);\n          }\n          if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n            hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : void 0);\n          }\n          if (value !== void 0) {\n            if (value === null) {\n              jQuery.removeAttr(elem, name);\n              return;\n            }\n            if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {\n              return ret;\n            }\n            elem.setAttribute(name, value + \"\");\n            return value;\n          }\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n            return ret;\n          }\n          ret = jQuery.find.attr(elem, name);\n          return ret == null ? void 0 : ret;\n        },\n        attrHooks: {\n          type: {\n            set: function(elem, value) {\n              if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n                var val = elem.value;\n                elem.setAttribute(\"type\", value);\n                if (val) {\n                  elem.value = val;\n                }\n                return value;\n              }\n            }\n          }\n        },\n        removeAttr: function(elem, value) {\n          var name, i = 0, attrNames = value && value.match(rnothtmlwhite);\n          if (attrNames && elem.nodeType === 1) {\n            while (name = attrNames[i++]) {\n              elem.removeAttribute(name);\n            }\n          }\n        }\n      });\n      boolHook = {\n        set: function(elem, value, name) {\n          if (value === false) {\n            jQuery.removeAttr(elem, name);\n          } else {\n            elem.setAttribute(name, name);\n          }\n          return name;\n        }\n      };\n      jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function(_i, name) {\n        var getter = attrHandle[name] || jQuery.find.attr;\n        attrHandle[name] = function(elem, name2, isXML) {\n          var ret, handle, lowercaseName = name2.toLowerCase();\n          if (!isXML) {\n            handle = attrHandle[lowercaseName];\n            attrHandle[lowercaseName] = ret;\n            ret = getter(elem, name2, isXML) != null ? lowercaseName : null;\n            attrHandle[lowercaseName] = handle;\n          }\n          return ret;\n        };\n      });\n      var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i;\n      jQuery.fn.extend({\n        prop: function(name, value) {\n          return access(this, jQuery.prop, name, value, arguments.length > 1);\n        },\n        removeProp: function(name) {\n          return this.each(function() {\n            delete this[jQuery.propFix[name] || name];\n          });\n        }\n      });\n      jQuery.extend({\n        prop: function(elem, name, value) {\n          var ret, hooks, nType = elem.nodeType;\n          if (nType === 3 || nType === 8 || nType === 2) {\n            return;\n          }\n          if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n            name = jQuery.propFix[name] || name;\n            hooks = jQuery.propHooks[name];\n          }\n          if (value !== void 0) {\n            if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== void 0) {\n              return ret;\n            }\n            return elem[name] = value;\n          }\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n            return ret;\n          }\n          return elem[name];\n        },\n        propHooks: {\n          tabIndex: {\n            get: function(elem) {\n              var tabindex = jQuery.find.attr(elem, \"tabindex\");\n              if (tabindex) {\n                return parseInt(tabindex, 10);\n              }\n              if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n                return 0;\n              }\n              return -1;\n            }\n          }\n        },\n        propFix: {\n          \"for\": \"htmlFor\",\n          \"class\": \"className\"\n        }\n      });\n      if (!support.optSelected) {\n        jQuery.propHooks.selected = {\n          get: function(elem) {\n            var parent = elem.parentNode;\n            if (parent && parent.parentNode) {\n              parent.parentNode.selectedIndex;\n            }\n            return null;\n          },\n          set: function(elem) {\n            var parent = elem.parentNode;\n            if (parent) {\n              parent.selectedIndex;\n              if (parent.parentNode) {\n                parent.parentNode.selectedIndex;\n              }\n            }\n          }\n        };\n      }\n      jQuery.each([\n        \"tabIndex\",\n        \"readOnly\",\n        \"maxLength\",\n        \"cellSpacing\",\n        \"cellPadding\",\n        \"rowSpan\",\n        \"colSpan\",\n        \"useMap\",\n        \"frameBorder\",\n        \"contentEditable\"\n      ], function() {\n        jQuery.propFix[this.toLowerCase()] = this;\n      });\n      function stripAndCollapse(value) {\n        var tokens = value.match(rnothtmlwhite) || [];\n        return tokens.join(\" \");\n      }\n      function getClass(elem) {\n        return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n      }\n      function classesToArray(value) {\n        if (Array.isArray(value)) {\n          return value;\n        }\n        if (typeof value === \"string\") {\n          return value.match(rnothtmlwhite) || [];\n        }\n        return [];\n      }\n      jQuery.fn.extend({\n        addClass: function(value) {\n          var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;\n          if (isFunction(value)) {\n            return this.each(function(j2) {\n              jQuery(this).addClass(value.call(this, j2, getClass(this)));\n            });\n          }\n          classes = classesToArray(value);\n          if (classes.length) {\n            while (elem = this[i++]) {\n              curValue = getClass(elem);\n              cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n              if (cur) {\n                j = 0;\n                while (clazz = classes[j++]) {\n                  if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n                    cur += clazz + \" \";\n                  }\n                }\n                finalValue = stripAndCollapse(cur);\n                if (curValue !== finalValue) {\n                  elem.setAttribute(\"class\", finalValue);\n                }\n              }\n            }\n          }\n          return this;\n        },\n        removeClass: function(value) {\n          var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;\n          if (isFunction(value)) {\n            return this.each(function(j2) {\n              jQuery(this).removeClass(value.call(this, j2, getClass(this)));\n            });\n          }\n          if (!arguments.length) {\n            return this.attr(\"class\", \"\");\n          }\n          classes = classesToArray(value);\n          if (classes.length) {\n            while (elem = this[i++]) {\n              curValue = getClass(elem);\n              cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n              if (cur) {\n                j = 0;\n                while (clazz = classes[j++]) {\n                  while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n                    cur = cur.replace(\" \" + clazz + \" \", \" \");\n                  }\n                }\n                finalValue = stripAndCollapse(cur);\n                if (curValue !== finalValue) {\n                  elem.setAttribute(\"class\", finalValue);\n                }\n              }\n            }\n          }\n          return this;\n        },\n        toggleClass: function(value, stateVal) {\n          var type = typeof value, isValidValue = type === \"string\" || Array.isArray(value);\n          if (typeof stateVal === \"boolean\" && isValidValue) {\n            return stateVal ? this.addClass(value) : this.removeClass(value);\n          }\n          if (isFunction(value)) {\n            return this.each(function(i) {\n              jQuery(this).toggleClass(\n                value.call(this, i, getClass(this), stateVal),\n                stateVal\n              );\n            });\n          }\n          return this.each(function() {\n            var className, i, self, classNames;\n            if (isValidValue) {\n              i = 0;\n              self = jQuery(this);\n              classNames = classesToArray(value);\n              while (className = classNames[i++]) {\n                if (self.hasClass(className)) {\n                  self.removeClass(className);\n                } else {\n                  self.addClass(className);\n                }\n              }\n            } else if (value === void 0 || type === \"boolean\") {\n              className = getClass(this);\n              if (className) {\n                dataPriv.set(this, \"__className__\", className);\n              }\n              if (this.setAttribute) {\n                this.setAttribute(\n                  \"class\",\n                  className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\"\n                );\n              }\n            }\n          });\n        },\n        hasClass: function(selector) {\n          var className, elem, i = 0;\n          className = \" \" + selector + \" \";\n          while (elem = this[i++]) {\n            if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n              return true;\n            }\n          }\n          return false;\n        }\n      });\n      var rreturn = /\\r/g;\n      jQuery.fn.extend({\n        val: function(value) {\n          var hooks, ret, valueIsFunction, elem = this[0];\n          if (!arguments.length) {\n            if (elem) {\n              hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n              if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== void 0) {\n                return ret;\n              }\n              ret = elem.value;\n              if (typeof ret === \"string\") {\n                return ret.replace(rreturn, \"\");\n              }\n              return ret == null ? \"\" : ret;\n            }\n            return;\n          }\n          valueIsFunction = isFunction(value);\n          return this.each(function(i) {\n            var val;\n            if (this.nodeType !== 1) {\n              return;\n            }\n            if (valueIsFunction) {\n              val = value.call(this, i, jQuery(this).val());\n            } else {\n              val = value;\n            }\n            if (val == null) {\n              val = \"\";\n            } else if (typeof val === \"number\") {\n              val += \"\";\n            } else if (Array.isArray(val)) {\n              val = jQuery.map(val, function(value2) {\n                return value2 == null ? \"\" : value2 + \"\";\n              });\n            }\n            hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n            if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === void 0) {\n              this.value = val;\n            }\n          });\n        }\n      });\n      jQuery.extend({\n        valHooks: {\n          option: {\n            get: function(elem) {\n              var val = jQuery.find.attr(elem, \"value\");\n              return val != null ? val : (\n                // Support: IE <=10 - 11 only\n                // option.text throws exceptions (#14686, #14858)\n                // Strip and collapse whitespace\n                // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n                stripAndCollapse(jQuery.text(elem))\n              );\n            }\n          },\n          select: {\n            get: function(elem) {\n              var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === \"select-one\", values = one ? null : [], max = one ? index + 1 : options.length;\n              if (index < 0) {\n                i = max;\n              } else {\n                i = one ? index : 0;\n              }\n              for (; i < max; i++) {\n                option = options[i];\n                if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n                !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n                  value = jQuery(option).val();\n                  if (one) {\n                    return value;\n                  }\n                  values.push(value);\n                }\n              }\n              return values;\n            },\n            set: function(elem, value) {\n              var optionSet, option, options = elem.options, values = jQuery.makeArray(value), i = options.length;\n              while (i--) {\n                option = options[i];\n                if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n                  optionSet = true;\n                }\n              }\n              if (!optionSet) {\n                elem.selectedIndex = -1;\n              }\n              return values;\n            }\n          }\n        }\n      });\n      jQuery.each([\"radio\", \"checkbox\"], function() {\n        jQuery.valHooks[this] = {\n          set: function(elem, value) {\n            if (Array.isArray(value)) {\n              return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n            }\n          }\n        };\n        if (!support.checkOn) {\n          jQuery.valHooks[this].get = function(elem) {\n            return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n          };\n        }\n      });\n      support.focusin = \"onfocusin\" in window2;\n      var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {\n        e.stopPropagation();\n      };\n      jQuery.extend(jQuery.event, {\n        trigger: function(event, data, elem, onlyHandlers) {\n          var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [elem || document], type = hasOwn.call(event, \"type\") ? event.type : event, namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n          cur = lastElement = tmp = elem = elem || document;\n          if (elem.nodeType === 3 || elem.nodeType === 8) {\n            return;\n          }\n          if (rfocusMorph.test(type + jQuery.event.triggered)) {\n            return;\n          }\n          if (type.indexOf(\".\") > -1) {\n            namespaces = type.split(\".\");\n            type = namespaces.shift();\n            namespaces.sort();\n          }\n          ontype = type.indexOf(\":\") < 0 && \"on\" + type;\n          event = event[jQuery.expando] ? event : new jQuery.Event(type, typeof event === \"object\" && event);\n          event.isTrigger = onlyHandlers ? 2 : 3;\n          event.namespace = namespaces.join(\".\");\n          event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null;\n          event.result = void 0;\n          if (!event.target) {\n            event.target = elem;\n          }\n          data = data == null ? [event] : jQuery.makeArray(data, [event]);\n          special = jQuery.event.special[type] || {};\n          if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n            return;\n          }\n          if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n            bubbleType = special.delegateType || type;\n            if (!rfocusMorph.test(bubbleType + type)) {\n              cur = cur.parentNode;\n            }\n            for (; cur; cur = cur.parentNode) {\n              eventPath.push(cur);\n              tmp = cur;\n            }\n            if (tmp === (elem.ownerDocument || document)) {\n              eventPath.push(tmp.defaultView || tmp.parentWindow || window2);\n            }\n          }\n          i = 0;\n          while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n            lastElement = cur;\n            event.type = i > 1 ? bubbleType : special.bindType || type;\n            handle = (dataPriv.get(cur, \"events\") || /* @__PURE__ */ Object.create(null))[event.type] && dataPriv.get(cur, \"handle\");\n            if (handle) {\n              handle.apply(cur, data);\n            }\n            handle = ontype && cur[ontype];\n            if (handle && handle.apply && acceptData(cur)) {\n              event.result = handle.apply(cur, data);\n              if (event.result === false) {\n                event.preventDefault();\n              }\n            }\n          }\n          event.type = type;\n          if (!onlyHandlers && !event.isDefaultPrevented()) {\n            if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n              if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n                tmp = elem[ontype];\n                if (tmp) {\n                  elem[ontype] = null;\n                }\n                jQuery.event.triggered = type;\n                if (event.isPropagationStopped()) {\n                  lastElement.addEventListener(type, stopPropagationCallback);\n                }\n                elem[type]();\n                if (event.isPropagationStopped()) {\n                  lastElement.removeEventListener(type, stopPropagationCallback);\n                }\n                jQuery.event.triggered = void 0;\n                if (tmp) {\n                  elem[ontype] = tmp;\n                }\n              }\n            }\n          }\n          return event.result;\n        },\n        // Piggyback on a donor event to simulate a different one\n        // Used only for `focus(in | out)` events\n        simulate: function(type, elem, event) {\n          var e = jQuery.extend(\n            new jQuery.Event(),\n            event,\n            {\n              type,\n              isSimulated: true\n            }\n          );\n          jQuery.event.trigger(e, null, elem);\n        }\n      });\n      jQuery.fn.extend({\n        trigger: function(type, data) {\n          return this.each(function() {\n            jQuery.event.trigger(type, data, this);\n          });\n        },\n        triggerHandler: function(type, data) {\n          var elem = this[0];\n          if (elem) {\n            return jQuery.event.trigger(type, data, elem, true);\n          }\n        }\n      });\n      if (!support.focusin) {\n        jQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function(orig, fix) {\n          var handler = function(event) {\n            jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n          };\n          jQuery.event.special[fix] = {\n            setup: function() {\n              var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc, fix);\n              if (!attaches) {\n                doc.addEventListener(orig, handler, true);\n              }\n              dataPriv.access(doc, fix, (attaches || 0) + 1);\n            },\n            teardown: function() {\n              var doc = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc, fix) - 1;\n              if (!attaches) {\n                doc.removeEventListener(orig, handler, true);\n                dataPriv.remove(doc, fix);\n              } else {\n                dataPriv.access(doc, fix, attaches);\n              }\n            }\n          };\n        });\n      }\n      var location = window2.location;\n      var nonce = { guid: Date.now() };\n      var rquery = /\\?/;\n      jQuery.parseXML = function(data) {\n        var xml, parserErrorElem;\n        if (!data || typeof data !== \"string\") {\n          return null;\n        }\n        try {\n          xml = new window2.DOMParser().parseFromString(data, \"text/xml\");\n        } catch (e) {\n        }\n        parserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n        if (!xml || parserErrorElem) {\n          jQuery.error(\"Invalid XML: \" + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {\n            return el.textContent;\n          }).join(\"\\n\") : data));\n        }\n        return xml;\n      };\n      var rbracket = /\\[\\]$/, rCRLF = /\\r?\\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;\n      function buildParams(prefix, obj, traditional, add) {\n        var name;\n        if (Array.isArray(obj)) {\n          jQuery.each(obj, function(i, v) {\n            if (traditional || rbracket.test(prefix)) {\n              add(prefix, v);\n            } else {\n              buildParams(\n                prefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n                v,\n                traditional,\n                add\n              );\n            }\n          });\n        } else if (!traditional && toType(obj) === \"object\") {\n          for (name in obj) {\n            buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n          }\n        } else {\n          add(prefix, obj);\n        }\n      }\n      jQuery.param = function(a, traditional) {\n        var prefix, s = [], add = function(key, valueOrFunction) {\n          var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n          s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n        };\n        if (a == null) {\n          return \"\";\n        }\n        if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n          jQuery.each(a, function() {\n            add(this.name, this.value);\n          });\n        } else {\n          for (prefix in a) {\n            buildParams(prefix, a[prefix], traditional, add);\n          }\n        }\n        return s.join(\"&\");\n      };\n      jQuery.fn.extend({\n        serialize: function() {\n          return jQuery.param(this.serializeArray());\n        },\n        serializeArray: function() {\n          return this.map(function() {\n            var elements = jQuery.prop(this, \"elements\");\n            return elements ? jQuery.makeArray(elements) : this;\n          }).filter(function() {\n            var type = this.type;\n            return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n          }).map(function(_i, elem) {\n            var val = jQuery(this).val();\n            if (val == null) {\n              return null;\n            }\n            if (Array.isArray(val)) {\n              return jQuery.map(val, function(val2) {\n                return { name: elem.name, value: val2.replace(rCRLF, \"\\r\\n\") };\n              });\n            }\n            return { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n          }).get();\n        }\n      });\n      var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg, rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\\/\\//, prefilters = {}, transports = {}, allTypes = \"*/\".concat(\"*\"), originAnchor = document.createElement(\"a\");\n      originAnchor.href = location.href;\n      function addToPrefiltersOrTransports(structure) {\n        return function(dataTypeExpression, func) {\n          if (typeof dataTypeExpression !== \"string\") {\n            func = dataTypeExpression;\n            dataTypeExpression = \"*\";\n          }\n          var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n          if (isFunction(func)) {\n            while (dataType = dataTypes[i++]) {\n              if (dataType[0] === \"+\") {\n                dataType = dataType.slice(1) || \"*\";\n                (structure[dataType] = structure[dataType] || []).unshift(func);\n              } else {\n                (structure[dataType] = structure[dataType] || []).push(func);\n              }\n            }\n          }\n        };\n      }\n      function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n        var inspected = {}, seekingTransport = structure === transports;\n        function inspect(dataType) {\n          var selected;\n          inspected[dataType] = true;\n          jQuery.each(structure[dataType] || [], function(_, prefilterOrFactory) {\n            var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n            if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n              options.dataTypes.unshift(dataTypeOrTransport);\n              inspect(dataTypeOrTransport);\n              return false;\n            } else if (seekingTransport) {\n              return !(selected = dataTypeOrTransport);\n            }\n          });\n          return selected;\n        }\n        return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n      }\n      function ajaxExtend(target, src) {\n        var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};\n        for (key in src) {\n          if (src[key] !== void 0) {\n            (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n          }\n        }\n        if (deep) {\n          jQuery.extend(true, target, deep);\n        }\n        return target;\n      }\n      function ajaxHandleResponses(s, jqXHR, responses) {\n        var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes;\n        while (dataTypes[0] === \"*\") {\n          dataTypes.shift();\n          if (ct === void 0) {\n            ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n          }\n        }\n        if (ct) {\n          for (type in contents) {\n            if (contents[type] && contents[type].test(ct)) {\n              dataTypes.unshift(type);\n              break;\n            }\n          }\n        }\n        if (dataTypes[0] in responses) {\n          finalDataType = dataTypes[0];\n        } else {\n          for (type in responses) {\n            if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n              finalDataType = type;\n              break;\n            }\n            if (!firstDataType) {\n              firstDataType = type;\n            }\n          }\n          finalDataType = finalDataType || firstDataType;\n        }\n        if (finalDataType) {\n          if (finalDataType !== dataTypes[0]) {\n            dataTypes.unshift(finalDataType);\n          }\n          return responses[finalDataType];\n        }\n      }\n      function ajaxConvert(s, response, jqXHR, isSuccess) {\n        var conv2, current, conv, tmp, prev, converters = {}, dataTypes = s.dataTypes.slice();\n        if (dataTypes[1]) {\n          for (conv in s.converters) {\n            converters[conv.toLowerCase()] = s.converters[conv];\n          }\n        }\n        current = dataTypes.shift();\n        while (current) {\n          if (s.responseFields[current]) {\n            jqXHR[s.responseFields[current]] = response;\n          }\n          if (!prev && isSuccess && s.dataFilter) {\n            response = s.dataFilter(response, s.dataType);\n          }\n          prev = current;\n          current = dataTypes.shift();\n          if (current) {\n            if (current === \"*\") {\n              current = prev;\n            } else if (prev !== \"*\" && prev !== current) {\n              conv = converters[prev + \" \" + current] || converters[\"* \" + current];\n              if (!conv) {\n                for (conv2 in converters) {\n                  tmp = conv2.split(\" \");\n                  if (tmp[1] === current) {\n                    conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n                    if (conv) {\n                      if (conv === true) {\n                        conv = converters[conv2];\n                      } else if (converters[conv2] !== true) {\n                        current = tmp[0];\n                        dataTypes.unshift(tmp[1]);\n                      }\n                      break;\n                    }\n                  }\n                }\n              }\n              if (conv !== true) {\n                if (conv && s.throws) {\n                  response = conv(response);\n                } else {\n                  try {\n                    response = conv(response);\n                  } catch (e) {\n                    return {\n                      state: \"parsererror\",\n                      error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                    };\n                  }\n                }\n              }\n            }\n          }\n        }\n        return { state: \"success\", data: response };\n      }\n      jQuery.extend({\n        // Counter for holding the number of active queries\n        active: 0,\n        // Last-Modified header cache for next request\n        lastModified: {},\n        etag: {},\n        ajaxSettings: {\n          url: location.href,\n          type: \"GET\",\n          isLocal: rlocalProtocol.test(location.protocol),\n          global: true,\n          processData: true,\n          async: true,\n          contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n          /*\n          timeout: 0,\n          data: null,\n          dataType: null,\n          username: null,\n          password: null,\n          cache: null,\n          throws: false,\n          traditional: false,\n          headers: {},\n          */\n          accepts: {\n            \"*\": allTypes,\n            text: \"text/plain\",\n            html: \"text/html\",\n            xml: \"application/xml, text/xml\",\n            json: \"application/json, text/javascript\"\n          },\n          contents: {\n            xml: /\\bxml\\b/,\n            html: /\\bhtml/,\n            json: /\\bjson\\b/\n          },\n          responseFields: {\n            xml: \"responseXML\",\n            text: \"responseText\",\n            json: \"responseJSON\"\n          },\n          // Data converters\n          // Keys separate source (or catchall \"*\") and destination types with a single space\n          converters: {\n            // Convert anything to text\n            \"* text\": String,\n            // Text to html (true = no transformation)\n            \"text html\": true,\n            // Evaluate text as a json expression\n            \"text json\": JSON.parse,\n            // Parse text as xml\n            \"text xml\": jQuery.parseXML\n          },\n          // For options that shouldn't be deep extended:\n          // you can add your own custom options here if\n          // and when you create one that shouldn't be\n          // deep extended (see ajaxExtend)\n          flatOptions: {\n            url: true,\n            context: true\n          }\n        },\n        // Creates a full fledged settings object into target\n        // with both ajaxSettings and settings fields.\n        // If target is omitted, writes into ajaxSettings.\n        ajaxSetup: function(target, settings) {\n          return settings ? (\n            // Building a settings object\n            ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings)\n          ) : (\n            // Extending ajaxSettings\n            ajaxExtend(jQuery.ajaxSettings, target)\n          );\n        },\n        ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n        ajaxTransport: addToPrefiltersOrTransports(transports),\n        // Main method\n        ajax: function(url, options) {\n          if (typeof url === \"object\") {\n            options = url;\n            url = void 0;\n          }\n          options = options || {};\n          var transport, cacheURL, responseHeadersString, responseHeaders, timeoutTimer, urlAnchor, completed2, fireGlobals, i, uncached, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks(\"once memory\"), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, strAbort = \"canceled\", jqXHR = {\n            readyState: 0,\n            // Builds headers hashtable if needed\n            getResponseHeader: function(key) {\n              var match;\n              if (completed2) {\n                if (!responseHeaders) {\n                  responseHeaders = {};\n                  while (match = rheaders.exec(responseHeadersString)) {\n                    responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n                  }\n                }\n                match = responseHeaders[key.toLowerCase() + \" \"];\n              }\n              return match == null ? null : match.join(\", \");\n            },\n            // Raw string\n            getAllResponseHeaders: function() {\n              return completed2 ? responseHeadersString : null;\n            },\n            // Caches the header\n            setRequestHeader: function(name, value) {\n              if (completed2 == null) {\n                name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n                requestHeaders[name] = value;\n              }\n              return this;\n            },\n            // Overrides response content-type header\n            overrideMimeType: function(type) {\n              if (completed2 == null) {\n                s.mimeType = type;\n              }\n              return this;\n            },\n            // Status-dependent callbacks\n            statusCode: function(map) {\n              var code;\n              if (map) {\n                if (completed2) {\n                  jqXHR.always(map[jqXHR.status]);\n                } else {\n                  for (code in map) {\n                    statusCode[code] = [statusCode[code], map[code]];\n                  }\n                }\n              }\n              return this;\n            },\n            // Cancel the request\n            abort: function(statusText) {\n              var finalText = statusText || strAbort;\n              if (transport) {\n                transport.abort(finalText);\n              }\n              done(0, finalText);\n              return this;\n            }\n          };\n          deferred.promise(jqXHR);\n          s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\");\n          s.type = options.method || options.type || s.method || s.type;\n          s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n          if (s.crossDomain == null) {\n            urlAnchor = document.createElement(\"a\");\n            try {\n              urlAnchor.href = s.url;\n              urlAnchor.href = urlAnchor.href;\n              s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n            } catch (e) {\n              s.crossDomain = true;\n            }\n          }\n          if (s.data && s.processData && typeof s.data !== \"string\") {\n            s.data = jQuery.param(s.data, s.traditional);\n          }\n          inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n          if (completed2) {\n            return jqXHR;\n          }\n          fireGlobals = jQuery.event && s.global;\n          if (fireGlobals && jQuery.active++ === 0) {\n            jQuery.event.trigger(\"ajaxStart\");\n          }\n          s.type = s.type.toUpperCase();\n          s.hasContent = !rnoContent.test(s.type);\n          cacheURL = s.url.replace(rhash, \"\");\n          if (!s.hasContent) {\n            uncached = s.url.slice(cacheURL.length);\n            if (s.data && (s.processData || typeof s.data === \"string\")) {\n              cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n              delete s.data;\n            }\n            if (s.cache === false) {\n              cacheURL = cacheURL.replace(rantiCache, \"$1\");\n              uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce.guid++ + uncached;\n            }\n            s.url = cacheURL + uncached;\n          } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n            s.data = s.data.replace(r20, \"+\");\n          }\n          if (s.ifModified) {\n            if (jQuery.lastModified[cacheURL]) {\n              jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n            }\n            if (jQuery.etag[cacheURL]) {\n              jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n            }\n          }\n          if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n            jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n          }\n          jqXHR.setRequestHeader(\n            \"Accept\",\n            s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]\n          );\n          for (i in s.headers) {\n            jqXHR.setRequestHeader(i, s.headers[i]);\n          }\n          if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed2)) {\n            return jqXHR.abort();\n          }\n          strAbort = \"abort\";\n          completeDeferred.add(s.complete);\n          jqXHR.done(s.success);\n          jqXHR.fail(s.error);\n          transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n          if (!transport) {\n            done(-1, \"No Transport\");\n          } else {\n            jqXHR.readyState = 1;\n            if (fireGlobals) {\n              globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n            }\n            if (completed2) {\n              return jqXHR;\n            }\n            if (s.async && s.timeout > 0) {\n              timeoutTimer = window2.setTimeout(function() {\n                jqXHR.abort(\"timeout\");\n              }, s.timeout);\n            }\n            try {\n              completed2 = false;\n              transport.send(requestHeaders, done);\n            } catch (e) {\n              if (completed2) {\n                throw e;\n              }\n              done(-1, e);\n            }\n          }\n          function done(status, nativeStatusText, responses, headers) {\n            var isSuccess, success, error, response, modified, statusText = nativeStatusText;\n            if (completed2) {\n              return;\n            }\n            completed2 = true;\n            if (timeoutTimer) {\n              window2.clearTimeout(timeoutTimer);\n            }\n            transport = void 0;\n            responseHeadersString = headers || \"\";\n            jqXHR.readyState = status > 0 ? 4 : 0;\n            isSuccess = status >= 200 && status < 300 || status === 304;\n            if (responses) {\n              response = ajaxHandleResponses(s, jqXHR, responses);\n            }\n            if (!isSuccess && jQuery.inArray(\"script\", s.dataTypes) > -1 && jQuery.inArray(\"json\", s.dataTypes) < 0) {\n              s.converters[\"text script\"] = function() {\n              };\n            }\n            response = ajaxConvert(s, response, jqXHR, isSuccess);\n            if (isSuccess) {\n              if (s.ifModified) {\n                modified = jqXHR.getResponseHeader(\"Last-Modified\");\n                if (modified) {\n                  jQuery.lastModified[cacheURL] = modified;\n                }\n                modified = jqXHR.getResponseHeader(\"etag\");\n                if (modified) {\n                  jQuery.etag[cacheURL] = modified;\n                }\n              }\n              if (status === 204 || s.type === \"HEAD\") {\n                statusText = \"nocontent\";\n              } else if (status === 304) {\n                statusText = \"notmodified\";\n              } else {\n                statusText = response.state;\n                success = response.data;\n                error = response.error;\n                isSuccess = !error;\n              }\n            } else {\n              error = statusText;\n              if (status || !statusText) {\n                statusText = \"error\";\n                if (status < 0) {\n                  status = 0;\n                }\n              }\n            }\n            jqXHR.status = status;\n            jqXHR.statusText = (nativeStatusText || statusText) + \"\";\n            if (isSuccess) {\n              deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n            } else {\n              deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n            }\n            jqXHR.statusCode(statusCode);\n            statusCode = void 0;\n            if (fireGlobals) {\n              globalEventContext.trigger(\n                isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n                [jqXHR, s, isSuccess ? success : error]\n              );\n            }\n            completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n            if (fireGlobals) {\n              globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n              if (!--jQuery.active) {\n                jQuery.event.trigger(\"ajaxStop\");\n              }\n            }\n          }\n          return jqXHR;\n        },\n        getJSON: function(url, data, callback) {\n          return jQuery.get(url, data, callback, \"json\");\n        },\n        getScript: function(url, callback) {\n          return jQuery.get(url, void 0, callback, \"script\");\n        }\n      });\n      jQuery.each([\"get\", \"post\"], function(_i, method) {\n        jQuery[method] = function(url, data, callback, type) {\n          if (isFunction(data)) {\n            type = type || callback;\n            callback = data;\n            data = void 0;\n          }\n          return jQuery.ajax(jQuery.extend({\n            url,\n            type: method,\n            dataType: type,\n            data,\n            success: callback\n          }, jQuery.isPlainObject(url) && url));\n        };\n      });\n      jQuery.ajaxPrefilter(function(s) {\n        var i;\n        for (i in s.headers) {\n          if (i.toLowerCase() === \"content-type\") {\n            s.contentType = s.headers[i] || \"\";\n          }\n        }\n      });\n      jQuery._evalUrl = function(url, options, doc) {\n        return jQuery.ajax({\n          url,\n          // Make this explicit, since user can override this through ajaxSetup (#11264)\n          type: \"GET\",\n          dataType: \"script\",\n          cache: true,\n          async: false,\n          global: false,\n          // Only evaluate the response if it is successful (gh-4126)\n          // dataFilter is not invoked for failure responses, so using it instead\n          // of the default converter is kludgy but it works.\n          converters: {\n            \"text script\": function() {\n            }\n          },\n          dataFilter: function(response) {\n            jQuery.globalEval(response, options, doc);\n          }\n        });\n      };\n      jQuery.fn.extend({\n        wrapAll: function(html) {\n          var wrap;\n          if (this[0]) {\n            if (isFunction(html)) {\n              html = html.call(this[0]);\n            }\n            wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n            if (this[0].parentNode) {\n              wrap.insertBefore(this[0]);\n            }\n            wrap.map(function() {\n              var elem = this;\n              while (elem.firstElementChild) {\n                elem = elem.firstElementChild;\n              }\n              return elem;\n            }).append(this);\n          }\n          return this;\n        },\n        wrapInner: function(html) {\n          if (isFunction(html)) {\n            return this.each(function(i) {\n              jQuery(this).wrapInner(html.call(this, i));\n            });\n          }\n          return this.each(function() {\n            var self = jQuery(this), contents = self.contents();\n            if (contents.length) {\n              contents.wrapAll(html);\n            } else {\n              self.append(html);\n            }\n          });\n        },\n        wrap: function(html) {\n          var htmlIsFunction = isFunction(html);\n          return this.each(function(i) {\n            jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n          });\n        },\n        unwrap: function(selector) {\n          this.parent(selector).not(\"body\").each(function() {\n            jQuery(this).replaceWith(this.childNodes);\n          });\n          return this;\n        }\n      });\n      jQuery.expr.pseudos.hidden = function(elem) {\n        return !jQuery.expr.pseudos.visible(elem);\n      };\n      jQuery.expr.pseudos.visible = function(elem) {\n        return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n      };\n      jQuery.ajaxSettings.xhr = function() {\n        try {\n          return new window2.XMLHttpRequest();\n        } catch (e) {\n        }\n      };\n      var xhrSuccessStatus = {\n        // File protocol always yields status code 0, assume 200\n        0: 200,\n        // Support: IE <=9 only\n        // #1450: sometimes IE returns 1223 when it should be 204\n        1223: 204\n      }, xhrSupported = jQuery.ajaxSettings.xhr();\n      support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n      support.ajax = xhrSupported = !!xhrSupported;\n      jQuery.ajaxTransport(function(options) {\n        var callback, errorCallback;\n        if (support.cors || xhrSupported && !options.crossDomain) {\n          return {\n            send: function(headers, complete) {\n              var i, xhr = options.xhr();\n              xhr.open(\n                options.type,\n                options.url,\n                options.async,\n                options.username,\n                options.password\n              );\n              if (options.xhrFields) {\n                for (i in options.xhrFields) {\n                  xhr[i] = options.xhrFields[i];\n                }\n              }\n              if (options.mimeType && xhr.overrideMimeType) {\n                xhr.overrideMimeType(options.mimeType);\n              }\n              if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n                headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n              }\n              for (i in headers) {\n                xhr.setRequestHeader(i, headers[i]);\n              }\n              callback = function(type) {\n                return function() {\n                  if (callback) {\n                    callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n                    if (type === \"abort\") {\n                      xhr.abort();\n                    } else if (type === \"error\") {\n                      if (typeof xhr.status !== \"number\") {\n                        complete(0, \"error\");\n                      } else {\n                        complete(\n                          // File: protocol always yields status 0; see #8605, #14207\n                          xhr.status,\n                          xhr.statusText\n                        );\n                      }\n                    } else {\n                      complete(\n                        xhrSuccessStatus[xhr.status] || xhr.status,\n                        xhr.statusText,\n                        // Support: IE <=9 only\n                        // IE9 has no XHR2 but throws on binary (trac-11426)\n                        // For XHR2 non-text, let the caller handle it (gh-2498)\n                        (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? { binary: xhr.response } : { text: xhr.responseText },\n                        xhr.getAllResponseHeaders()\n                      );\n                    }\n                  }\n                };\n              };\n              xhr.onload = callback();\n              errorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n              if (xhr.onabort !== void 0) {\n                xhr.onabort = errorCallback;\n              } else {\n                xhr.onreadystatechange = function() {\n                  if (xhr.readyState === 4) {\n                    window2.setTimeout(function() {\n                      if (callback) {\n                        errorCallback();\n                      }\n                    });\n                  }\n                };\n              }\n              callback = callback(\"abort\");\n              try {\n                xhr.send(options.hasContent && options.data || null);\n              } catch (e) {\n                if (callback) {\n                  throw e;\n                }\n              }\n            },\n            abort: function() {\n              if (callback) {\n                callback();\n              }\n            }\n          };\n        }\n      });\n      jQuery.ajaxPrefilter(function(s) {\n        if (s.crossDomain) {\n          s.contents.script = false;\n        }\n      });\n      jQuery.ajaxSetup({\n        accepts: {\n          script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n        },\n        contents: {\n          script: /\\b(?:java|ecma)script\\b/\n        },\n        converters: {\n          \"text script\": function(text) {\n            jQuery.globalEval(text);\n            return text;\n          }\n        }\n      });\n      jQuery.ajaxPrefilter(\"script\", function(s) {\n        if (s.cache === void 0) {\n          s.cache = false;\n        }\n        if (s.crossDomain) {\n          s.type = \"GET\";\n        }\n      });\n      jQuery.ajaxTransport(\"script\", function(s) {\n        if (s.crossDomain || s.scriptAttrs) {\n          var script, callback;\n          return {\n            send: function(_, complete) {\n              script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({ charset: s.scriptCharset, src: s.url }).on(\"load error\", callback = function(evt) {\n                script.remove();\n                callback = null;\n                if (evt) {\n                  complete(evt.type === \"error\" ? 404 : 200, evt.type);\n                }\n              });\n              document.head.appendChild(script[0]);\n            },\n            abort: function() {\n              if (callback) {\n                callback();\n              }\n            }\n          };\n        }\n      });\n      var oldCallbacks = [], rjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n      jQuery.ajaxSetup({\n        jsonp: \"callback\",\n        jsonpCallback: function() {\n          var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce.guid++;\n          this[callback] = true;\n          return callback;\n        }\n      });\n      jQuery.ajaxPrefilter(\"json jsonp\", function(s, originalSettings, jqXHR) {\n        var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\");\n        if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n          callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;\n          if (jsonProp) {\n            s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n          } else if (s.jsonp !== false) {\n            s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n          }\n          s.converters[\"script json\"] = function() {\n            if (!responseContainer) {\n              jQuery.error(callbackName + \" was not called\");\n            }\n            return responseContainer[0];\n          };\n          s.dataTypes[0] = \"json\";\n          overwritten = window2[callbackName];\n          window2[callbackName] = function() {\n            responseContainer = arguments;\n          };\n          jqXHR.always(function() {\n            if (overwritten === void 0) {\n              jQuery(window2).removeProp(callbackName);\n            } else {\n              window2[callbackName] = overwritten;\n            }\n            if (s[callbackName]) {\n              s.jsonpCallback = originalSettings.jsonpCallback;\n              oldCallbacks.push(callbackName);\n            }\n            if (responseContainer && isFunction(overwritten)) {\n              overwritten(responseContainer[0]);\n            }\n            responseContainer = overwritten = void 0;\n          });\n          return \"script\";\n        }\n      });\n      support.createHTMLDocument = function() {\n        var body = document.implementation.createHTMLDocument(\"\").body;\n        body.innerHTML = \"<form></form><form></form>\";\n        return body.childNodes.length === 2;\n      }();\n      jQuery.parseHTML = function(data, context, keepScripts) {\n        if (typeof data !== \"string\") {\n          return [];\n        }\n        if (typeof context === \"boolean\") {\n          keepScripts = context;\n          context = false;\n        }\n        var base, parsed, scripts;\n        if (!context) {\n          if (support.createHTMLDocument) {\n            context = document.implementation.createHTMLDocument(\"\");\n            base = context.createElement(\"base\");\n            base.href = document.location.href;\n            context.head.appendChild(base);\n          } else {\n            context = document;\n          }\n        }\n        parsed = rsingleTag.exec(data);\n        scripts = !keepScripts && [];\n        if (parsed) {\n          return [context.createElement(parsed[1])];\n        }\n        parsed = buildFragment([data], context, scripts);\n        if (scripts && scripts.length) {\n          jQuery(scripts).remove();\n        }\n        return jQuery.merge([], parsed.childNodes);\n      };\n      jQuery.fn.load = function(url, params, callback) {\n        var selector, type, response, self = this, off = url.indexOf(\" \");\n        if (off > -1) {\n          selector = stripAndCollapse(url.slice(off));\n          url = url.slice(0, off);\n        }\n        if (isFunction(params)) {\n          callback = params;\n          params = void 0;\n        } else if (params && typeof params === \"object\") {\n          type = \"POST\";\n        }\n        if (self.length > 0) {\n          jQuery.ajax({\n            url,\n            // If \"type\" variable is undefined, then \"GET\" method will be used.\n            // Make value of this field explicit since\n            // user can override it through ajaxSetup method\n            type: type || \"GET\",\n            dataType: \"html\",\n            data: params\n          }).done(function(responseText) {\n            response = arguments;\n            self.html(selector ? (\n              // If a selector was specified, locate the right elements in a dummy div\n              // Exclude scripts to avoid IE 'Permission Denied' errors\n              jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector)\n            ) : (\n              // Otherwise use the full result\n              responseText\n            ));\n          }).always(callback && function(jqXHR, status) {\n            self.each(function() {\n              callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n            });\n          });\n        }\n        return this;\n      };\n      jQuery.expr.pseudos.animated = function(elem) {\n        return jQuery.grep(jQuery.timers, function(fn) {\n          return elem === fn.elem;\n        }).length;\n      };\n      jQuery.offset = {\n        setOffset: function(elem, options, i) {\n          var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, position = jQuery.css(elem, \"position\"), curElem = jQuery(elem), props = {};\n          if (position === \"static\") {\n            elem.style.position = \"relative\";\n          }\n          curOffset = curElem.offset();\n          curCSSTop = jQuery.css(elem, \"top\");\n          curCSSLeft = jQuery.css(elem, \"left\");\n          calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n          if (calculatePosition) {\n            curPosition = curElem.position();\n            curTop = curPosition.top;\n            curLeft = curPosition.left;\n          } else {\n            curTop = parseFloat(curCSSTop) || 0;\n            curLeft = parseFloat(curCSSLeft) || 0;\n          }\n          if (isFunction(options)) {\n            options = options.call(elem, i, jQuery.extend({}, curOffset));\n          }\n          if (options.top != null) {\n            props.top = options.top - curOffset.top + curTop;\n          }\n          if (options.left != null) {\n            props.left = options.left - curOffset.left + curLeft;\n          }\n          if (\"using\" in options) {\n            options.using.call(elem, props);\n          } else {\n            curElem.css(props);\n          }\n        }\n      };\n      jQuery.fn.extend({\n        // offset() relates an element's border box to the document origin\n        offset: function(options) {\n          if (arguments.length) {\n            return options === void 0 ? this : this.each(function(i) {\n              jQuery.offset.setOffset(this, options, i);\n            });\n          }\n          var rect, win, elem = this[0];\n          if (!elem) {\n            return;\n          }\n          if (!elem.getClientRects().length) {\n            return { top: 0, left: 0 };\n          }\n          rect = elem.getBoundingClientRect();\n          win = elem.ownerDocument.defaultView;\n          return {\n            top: rect.top + win.pageYOffset,\n            left: rect.left + win.pageXOffset\n          };\n        },\n        // position() relates an element's margin box to its offset parent's padding box\n        // This corresponds to the behavior of CSS absolute positioning\n        position: function() {\n          if (!this[0]) {\n            return;\n          }\n          var offsetParent, offset, doc, elem = this[0], parentOffset = { top: 0, left: 0 };\n          if (jQuery.css(elem, \"position\") === \"fixed\") {\n            offset = elem.getBoundingClientRect();\n          } else {\n            offset = this.offset();\n            doc = elem.ownerDocument;\n            offsetParent = elem.offsetParent || doc.documentElement;\n            while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n              offsetParent = offsetParent.parentNode;\n            }\n            if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n              parentOffset = jQuery(offsetParent).offset();\n              parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n              parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n            }\n          }\n          return {\n            top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n            left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n          };\n        },\n        // This method will return documentElement in the following cases:\n        // 1) For the element inside the iframe without offsetParent, this method will return\n        //    documentElement of the parent window\n        // 2) For the hidden or detached element\n        // 3) For body or html element, i.e. in case of the html node - it will return itself\n        //\n        // but those exceptions were never presented as a real life use-cases\n        // and might be considered as more preferable results.\n        //\n        // This logic, however, is not guaranteed and can change at any point in the future\n        offsetParent: function() {\n          return this.map(function() {\n            var offsetParent = this.offsetParent;\n            while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n              offsetParent = offsetParent.offsetParent;\n            }\n            return offsetParent || documentElement;\n          });\n        }\n      });\n      jQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function(method, prop) {\n        var top = \"pageYOffset\" === prop;\n        jQuery.fn[method] = function(val) {\n          return access(this, function(elem, method2, val2) {\n            var win;\n            if (isWindow(elem)) {\n              win = elem;\n            } else if (elem.nodeType === 9) {\n              win = elem.defaultView;\n            }\n            if (val2 === void 0) {\n              return win ? win[prop] : elem[method2];\n            }\n            if (win) {\n              win.scrollTo(\n                !top ? val2 : win.pageXOffset,\n                top ? val2 : win.pageYOffset\n              );\n            } else {\n              elem[method2] = val2;\n            }\n          }, method, val, arguments.length);\n        };\n      });\n      jQuery.each([\"top\", \"left\"], function(_i, prop) {\n        jQuery.cssHooks[prop] = addGetHookIf(\n          support.pixelPosition,\n          function(elem, computed) {\n            if (computed) {\n              computed = curCSS(elem, prop);\n              return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n            }\n          }\n        );\n      });\n      jQuery.each({ Height: \"height\", Width: \"width\" }, function(name, type) {\n        jQuery.each({\n          padding: \"inner\" + name,\n          content: type,\n          \"\": \"outer\" + name\n        }, function(defaultExtra, funcName) {\n          jQuery.fn[funcName] = function(margin, value) {\n            var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"), extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n            return access(this, function(elem, type2, value2) {\n              var doc;\n              if (isWindow(elem)) {\n                return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n              }\n              if (elem.nodeType === 9) {\n                doc = elem.documentElement;\n                return Math.max(\n                  elem.body[\"scroll\" + name],\n                  doc[\"scroll\" + name],\n                  elem.body[\"offset\" + name],\n                  doc[\"offset\" + name],\n                  doc[\"client\" + name]\n                );\n              }\n              return value2 === void 0 ? (\n                // Get width or height on the element, requesting but not forcing parseFloat\n                jQuery.css(elem, type2, extra)\n              ) : (\n                // Set width or height on the element\n                jQuery.style(elem, type2, value2, extra)\n              );\n            }, type, chainable ? margin : void 0, chainable);\n          };\n        });\n      });\n      jQuery.each([\n        \"ajaxStart\",\n        \"ajaxStop\",\n        \"ajaxComplete\",\n        \"ajaxError\",\n        \"ajaxSuccess\",\n        \"ajaxSend\"\n      ], function(_i, type) {\n        jQuery.fn[type] = function(fn) {\n          return this.on(type, fn);\n        };\n      });\n      jQuery.fn.extend({\n        bind: function(types, data, fn) {\n          return this.on(types, null, data, fn);\n        },\n        unbind: function(types, fn) {\n          return this.off(types, null, fn);\n        },\n        delegate: function(selector, types, data, fn) {\n          return this.on(types, selector, data, fn);\n        },\n        undelegate: function(selector, types, fn) {\n          return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n        },\n        hover: function(fnOver, fnOut) {\n          return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n        }\n      });\n      jQuery.each(\n        \"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),\n        function(_i, name) {\n          jQuery.fn[name] = function(data, fn) {\n            return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n          };\n        }\n      );\n      var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n      jQuery.proxy = function(fn, context) {\n        var tmp, args, proxy;\n        if (typeof context === \"string\") {\n          tmp = fn[context];\n          context = fn;\n          fn = tmp;\n        }\n        if (!isFunction(fn)) {\n          return void 0;\n        }\n        args = slice.call(arguments, 2);\n        proxy = function() {\n          return fn.apply(context || this, args.concat(slice.call(arguments)));\n        };\n        proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n        return proxy;\n      };\n      jQuery.holdReady = function(hold) {\n        if (hold) {\n          jQuery.readyWait++;\n        } else {\n          jQuery.ready(true);\n        }\n      };\n      jQuery.isArray = Array.isArray;\n      jQuery.parseJSON = JSON.parse;\n      jQuery.nodeName = nodeName;\n      jQuery.isFunction = isFunction;\n      jQuery.isWindow = isWindow;\n      jQuery.camelCase = camelCase;\n      jQuery.type = toType;\n      jQuery.now = Date.now;\n      jQuery.isNumeric = function(obj) {\n        var type = jQuery.type(obj);\n        return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n        // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n        // subtraction forces infinities to NaN\n        !isNaN(obj - parseFloat(obj));\n      };\n      jQuery.trim = function(text) {\n        return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n      };\n      if (typeof define === \"function\" && define.amd) {\n        define(\"jquery\", [], function() {\n          return jQuery;\n        });\n      }\n      var _jQuery = window2.jQuery, _$ = window2.$;\n      jQuery.noConflict = function(deep) {\n        if (window2.$ === jQuery) {\n          window2.$ = _$;\n        }\n        if (deep && window2.jQuery === jQuery) {\n          window2.jQuery = _jQuery;\n        }\n        return jQuery;\n      };\n      if (typeof noGlobal === \"undefined\") {\n        window2.jQuery = window2.$ = jQuery;\n      }\n      return jQuery;\n    });\n  }\n});\n\nexport {\n  require_jquery\n};\n/*! Bundled license information:\n\njquery/dist/jquery.js:\n  (*!\n   * jQuery JavaScript Library v3.6.0\n   * https://jquery.com/\n   *\n   * Includes Sizzle.js\n   * https://sizzlejs.com/\n   *\n   * Copyright OpenJS Foundation and other contributors\n   * Released under the MIT license\n   * https://jquery.org/license\n   *\n   * Date: 2021-03-02T17:08Z\n   *)\n*/\n//# sourceMappingURL=chunk-IL4DE2EU.js.map\n","import {\n  require_jquery\n} from \"./chunk-IL4DE2EU.js\";\nimport \"./chunk-624QZG55.js\";\nexport default require_jquery();\n//# sourceMappingURL=jquery.js.map\n","import {\n  __export\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js\nvar turbo_es2017_esm_exports = {};\n__export(turbo_es2017_esm_exports, {\n  FrameElement: () => FrameElement,\n  FrameLoadingStyle: () => FrameLoadingStyle,\n  FrameRenderer: () => FrameRenderer,\n  PageRenderer: () => PageRenderer,\n  PageSnapshot: () => PageSnapshot,\n  StreamActions: () => StreamActions,\n  StreamElement: () => StreamElement,\n  StreamSourceElement: () => StreamSourceElement,\n  cache: () => cache,\n  clearCache: () => clearCache,\n  connectStreamSource: () => connectStreamSource,\n  disconnectStreamSource: () => disconnectStreamSource,\n  navigator: () => navigator$1,\n  registerAdapter: () => registerAdapter,\n  renderStreamMessage: () => renderStreamMessage,\n  session: () => session,\n  setConfirmMethod: () => setConfirmMethod,\n  setFormMode: () => setFormMode,\n  setProgressBarDelay: () => setProgressBarDelay,\n  start: () => start,\n  visit: () => visit\n});\n(function() {\n  if (window.Reflect === void 0 || window.customElements === void 0 || window.customElements.polyfillWrapFlushCallback) {\n    return;\n  }\n  const BuiltInHTMLElement = HTMLElement;\n  const wrapperForTheName = {\n    HTMLElement: function HTMLElement2() {\n      return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n    }\n  };\n  window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n  HTMLElement.prototype = BuiltInHTMLElement.prototype;\n  HTMLElement.prototype.constructor = HTMLElement;\n  Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\")\n    return;\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name);\n  }\n})(HTMLFormElement.prototype);\nvar submittersByForm = /* @__PURE__ */ new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n  const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n  const candidate = element ? element.closest(\"input, button\") : null;\n  return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n(function() {\n  if (\"submitter\" in Event.prototype)\n    return;\n  let prototype = window.Event.prototype;\n  if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n    prototype = window.SubmitEvent.prototype;\n  } else if (\"SubmitEvent\" in window) {\n    return;\n  }\n  addEventListener(\"click\", clickCaptured, true);\n  Object.defineProperty(prototype, \"submitter\", {\n    get() {\n      if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n        return submittersByForm.get(this.target);\n      }\n    }\n  });\n})();\nvar FrameLoadingStyle;\n(function(FrameLoadingStyle2) {\n  FrameLoadingStyle2[\"eager\"] = \"eager\";\n  FrameLoadingStyle2[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nvar FrameElement = class _FrameElement extends HTMLElement {\n  static get observedAttributes() {\n    return [\"disabled\", \"complete\", \"loading\", \"src\"];\n  }\n  constructor() {\n    super();\n    this.loaded = Promise.resolve();\n    this.delegate = new _FrameElement.delegateConstructor(this);\n  }\n  connectedCallback() {\n    this.delegate.connect();\n  }\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n  reload() {\n    return this.delegate.sourceURLReloaded();\n  }\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"complete\") {\n      this.delegate.completeChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\n    } else {\n      this.delegate.disabledChanged();\n    }\n  }\n  get src() {\n    return this.getAttribute(\"src\");\n  }\n  set src(value) {\n    if (value) {\n      this.setAttribute(\"src\", value);\n    } else {\n      this.removeAttribute(\"src\");\n    }\n  }\n  get loading() {\n    return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n  }\n  set loading(value) {\n    if (value) {\n      this.setAttribute(\"loading\", value);\n    } else {\n      this.removeAttribute(\"loading\");\n    }\n  }\n  get disabled() {\n    return this.hasAttribute(\"disabled\");\n  }\n  set disabled(value) {\n    if (value) {\n      this.setAttribute(\"disabled\", \"\");\n    } else {\n      this.removeAttribute(\"disabled\");\n    }\n  }\n  get autoscroll() {\n    return this.hasAttribute(\"autoscroll\");\n  }\n  set autoscroll(value) {\n    if (value) {\n      this.setAttribute(\"autoscroll\", \"\");\n    } else {\n      this.removeAttribute(\"autoscroll\");\n    }\n  }\n  get complete() {\n    return !this.delegate.isLoading;\n  }\n  get isActive() {\n    return this.ownerDocument === document && !this.isPreview;\n  }\n  get isPreview() {\n    var _a, _b;\n    return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n  }\n};\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n    case \"lazy\":\n      return FrameLoadingStyle.lazy;\n    default:\n      return FrameLoadingStyle.eager;\n  }\n}\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1);\n  } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n    return anchorMatch[1];\n  }\n}\nfunction getAction(form, submitter) {\n  const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n  return expandURL(action);\n}\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n  return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location2, rootLocation) {\n  return isPrefixedBy(location2, rootLocation) && isHTML(location2);\n}\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n  return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n  return value.endsWith(\"/\") ? value : value + \"/\";\n}\nvar FetchResponse = class {\n  constructor(response) {\n    this.response = response;\n  }\n  get succeeded() {\n    return this.response.ok;\n  }\n  get failed() {\n    return !this.succeeded;\n  }\n  get clientError() {\n    return this.statusCode >= 400 && this.statusCode <= 499;\n  }\n  get serverError() {\n    return this.statusCode >= 500 && this.statusCode <= 599;\n  }\n  get redirected() {\n    return this.response.redirected;\n  }\n  get location() {\n    return expandURL(this.response.url);\n  }\n  get isHTML() {\n    return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n  }\n  get statusCode() {\n    return this.response.status;\n  }\n  get contentType() {\n    return this.header(\"Content-Type\");\n  }\n  get responseText() {\n    return this.response.clone().text();\n  }\n  get responseHTML() {\n    if (this.isHTML) {\n      return this.response.clone().text();\n    } else {\n      return Promise.resolve(void 0);\n    }\n  }\n  header(name) {\n    return this.response.headers.get(name);\n  }\n};\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element;\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getMetaContent(\"csp-nonce\");\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement;\n  }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const { name, value } of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable,\n    bubbles: true,\n    composed: true,\n    detail\n  });\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n  return event;\n}\nfunction nextAnimationFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n  return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n  return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n  return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n  const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n  const match = lines[0].match(/^\\s+/);\n  const indent = match ? match[0].length : 0;\n  return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n  return strings.reduce((result, string, i) => {\n    const value = values[i] == void 0 ? \"\" : values[i];\n    return result + string + value;\n  }, \"\");\n}\nfunction uuid() {\n  return Array.from({ length: 36 }).map((_, i) => {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      return \"-\";\n    } else if (i == 14) {\n      return \"4\";\n    } else if (i == 19) {\n      return (Math.floor(Math.random() * 4) + 8).toString(16);\n    } else {\n      return Math.floor(Math.random() * 15).toString(16);\n    }\n  }).join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n  for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n    if (typeof value == \"string\")\n      return value;\n  }\n  return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.setAttribute(\"busy\", \"\");\n    }\n    element.setAttribute(\"aria-busy\", \"true\");\n  }\n}\nfunction clearBusyState(...elements) {\n  for (const element of elements) {\n    if (element.localName == \"turbo-frame\") {\n      element.removeAttribute(\"busy\");\n    }\n    element.removeAttribute(\"aria-busy\");\n  }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2e3) {\n  return new Promise((resolve) => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n    element.addEventListener(\"load\", onComplete, { once: true });\n    element.addEventListener(\"error\", onComplete, { once: true });\n    setTimeout(resolve, timeoutInMilliseconds);\n  });\n}\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n    case \"replace\":\n      return history.replaceState;\n    case \"advance\":\n    case \"restore\":\n      return history.pushState;\n  }\n}\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n  return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content;\n}\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n    document.head.appendChild(element);\n  }\n  element.setAttribute(\"content\", content);\n  return element;\n}\nfunction findClosestRecursively(element, selector) {\n  var _a;\n  if (element instanceof Element) {\n    return element.closest(selector) || findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector);\n  }\n}\nvar FetchMethod;\n(function(FetchMethod2) {\n  FetchMethod2[FetchMethod2[\"get\"] = 0] = \"get\";\n  FetchMethod2[FetchMethod2[\"post\"] = 1] = \"post\";\n  FetchMethod2[FetchMethod2[\"put\"] = 2] = \"put\";\n  FetchMethod2[FetchMethod2[\"patch\"] = 3] = \"patch\";\n  FetchMethod2[FetchMethod2[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n    case \"get\":\n      return FetchMethod.get;\n    case \"post\":\n      return FetchMethod.post;\n    case \"put\":\n      return FetchMethod.put;\n    case \"patch\":\n      return FetchMethod.patch;\n    case \"delete\":\n      return FetchMethod.delete;\n  }\n}\nvar FetchRequest = class {\n  constructor(delegate, method, location2, body = new URLSearchParams(), target = null) {\n    this.abortController = new AbortController();\n    this.resolveRequestPromise = (_value) => {\n    };\n    this.delegate = delegate;\n    this.method = method;\n    this.headers = this.defaultHeaders;\n    this.body = body;\n    this.url = location2;\n    this.target = target;\n  }\n  get location() {\n    return this.url;\n  }\n  get params() {\n    return this.url.searchParams;\n  }\n  get entries() {\n    return this.body ? Array.from(this.body.entries()) : [];\n  }\n  cancel() {\n    this.abortController.abort();\n  }\n  async perform() {\n    const { fetchOptions } = this;\n    this.delegate.prepareRequest(this);\n    await this.allowRequestToBeIntercepted(fetchOptions);\n    try {\n      this.delegate.requestStarted(this);\n      const response = await fetch(this.url.href, fetchOptions);\n      return await this.receive(response);\n    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error;\n      }\n    } finally {\n      this.delegate.requestFinished(this);\n    }\n  }\n  async receive(response) {\n    const fetchResponse = new FetchResponse(response);\n    const event = dispatch(\"turbo:before-fetch-response\", {\n      cancelable: true,\n      detail: { fetchResponse },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\n    } else {\n      this.delegate.requestFailedWithResponse(this, fetchResponse);\n    }\n    return fetchResponse;\n  }\n  get fetchOptions() {\n    var _a;\n    return {\n      method: FetchMethod[this.method].toUpperCase(),\n      credentials: \"same-origin\",\n      headers: this.headers,\n      redirect: \"follow\",\n      body: this.isSafe ? null : this.body,\n      signal: this.abortSignal,\n      referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n    };\n  }\n  get defaultHeaders() {\n    return {\n      Accept: \"text/html, application/xhtml+xml\"\n    };\n  }\n  get isSafe() {\n    return this.method === FetchMethod.get;\n  }\n  get abortSignal() {\n    return this.abortController.signal;\n  }\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n  }\n  async allowRequestToBeIntercepted(fetchOptions) {\n    const requestInterception = new Promise((resolve) => this.resolveRequestPromise = resolve);\n    const event = dispatch(\"turbo:before-fetch-request\", {\n      cancelable: true,\n      detail: {\n        fetchOptions,\n        url: this.url,\n        resume: this.resolveRequestPromise\n      },\n      target: this.target\n    });\n    if (event.defaultPrevented)\n      await requestInterception;\n  }\n  willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: { request: this, error }\n    });\n    return !event.defaultPrevented;\n  }\n};\nvar AppearanceObserver = class {\n  constructor(delegate, element) {\n    this.started = false;\n    this.intersect = (entries) => {\n      const lastEntry = entries.slice(-1)[0];\n      if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n        this.delegate.elementAppearedInViewport(this.element);\n      }\n    };\n    this.delegate = delegate;\n    this.element = element;\n    this.intersectionObserver = new IntersectionObserver(this.intersect);\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.intersectionObserver.observe(this.element);\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.intersectionObserver.unobserve(this.element);\n    }\n  }\n};\nvar StreamMessage = class {\n  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message));\n    } else {\n      return message;\n    }\n  }\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n};\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n    element.replaceWith(streamElement);\n  }\n  return fragment;\n}\nvar FormSubmissionState;\n(function(FormSubmissionState2) {\n  FormSubmissionState2[FormSubmissionState2[\"initialized\"] = 0] = \"initialized\";\n  FormSubmissionState2[FormSubmissionState2[\"requesting\"] = 1] = \"requesting\";\n  FormSubmissionState2[FormSubmissionState2[\"waiting\"] = 2] = \"waiting\";\n  FormSubmissionState2[FormSubmissionState2[\"receiving\"] = 3] = \"receiving\";\n  FormSubmissionState2[FormSubmissionState2[\"stopping\"] = 4] = \"stopping\";\n  FormSubmissionState2[FormSubmissionState2[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function(FormEnctype2) {\n  FormEnctype2[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n  FormEnctype2[\"multipart\"] = \"multipart/form-data\";\n  FormEnctype2[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n    case FormEnctype.multipart:\n      return FormEnctype.multipart;\n    case FormEnctype.plain:\n      return FormEnctype.plain;\n    default:\n      return FormEnctype.urlEncoded;\n  }\n}\nvar FormSubmission = class _FormSubmission {\n  static confirmMethod(message, _element, _submitter) {\n    return Promise.resolve(confirm(message));\n  }\n  constructor(delegate, formElement, submitter, mustRedirect = false) {\n    this.state = FormSubmissionState.initialized;\n    this.delegate = delegate;\n    this.formElement = formElement;\n    this.submitter = submitter;\n    this.formData = buildFormData(formElement, submitter);\n    this.location = expandURL(this.action);\n    if (this.method == FetchMethod.get) {\n      mergeFormDataEntries(this.location, [...this.body.entries()]);\n    }\n    this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n    this.mustRedirect = mustRedirect;\n  }\n  get method() {\n    var _a;\n    const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n    return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n  }\n  get action() {\n    var _a;\n    const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n    if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n      return this.submitter.getAttribute(\"formaction\") || \"\";\n    } else {\n      return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n    }\n  }\n  get body() {\n    if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n      return new URLSearchParams(this.stringFormData);\n    } else {\n      return this.formData;\n    }\n  }\n  get enctype() {\n    var _a;\n    return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n  }\n  get isSafe() {\n    return this.fetchRequest.isSafe;\n  }\n  get stringFormData() {\n    return [...this.formData].reduce((entries, [name, value]) => {\n      return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n    }, []);\n  }\n  async start() {\n    const { initialized, requesting } = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n    if (typeof confirmationMessage === \"string\") {\n      const answer = await _FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n      if (!answer) {\n        return;\n      }\n    }\n    if (this.state == initialized) {\n      this.state = requesting;\n      return this.fetchRequest.perform();\n    }\n  }\n  stop() {\n    const { stopping, stopped } = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true;\n    }\n  }\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n  requestStarted(_request) {\n    var _a;\n    this.state = FormSubmissionState.waiting;\n    (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n    this.setSubmitsWith();\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: { formSubmission: this }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n  requestPreventedHandlingResponse(request, response) {\n    this.result = { success: response.succeeded, fetchResponse: response };\n  }\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\n    } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n      const error = new Error(\"Form responses must redirect to another location\");\n      this.delegate.formSubmissionErrored(this, error);\n    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = { success: true, fetchResponse: response };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n  requestFailedWithResponse(request, response) {\n    this.result = { success: false, fetchResponse: response };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n  requestErrored(request, error) {\n    this.result = { success: false, error };\n    this.delegate.formSubmissionErrored(this, error);\n  }\n  requestFinished(_request) {\n    var _a;\n    this.state = FormSubmissionState.stopped;\n    (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n    this.resetSubmitterText();\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: Object.assign({ formSubmission: this }, this.result)\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith)\n      return;\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText)\n      return;\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect;\n  }\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n  }\n  get submitsWith() {\n    var _a;\n    return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n  }\n};\nfunction buildFormData(formElement, submitter) {\n  const formData = new FormData(formElement);\n  const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n  const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n  if (name) {\n    formData.append(name, value || \"\");\n  }\n  return formData;\n}\nfunction getCookieValue(cookieName) {\n  if (cookieName != null) {\n    const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n    const cookie = cookies.find((cookie2) => cookie2.startsWith(cookieName));\n    if (cookie) {\n      const value = cookie.split(\"=\").slice(1).join(\"=\");\n      return value ? decodeURIComponent(value) : void 0;\n    }\n  }\n}\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n  const searchParams = new URLSearchParams();\n  for (const [name, value] of entries) {\n    if (value instanceof File)\n      continue;\n    searchParams.append(name, value);\n  }\n  url.search = searchParams.toString();\n  return url;\n}\nvar Snapshot = class {\n  constructor(element) {\n    this.element = element;\n  }\n  get activeElement() {\n    return this.element.ownerDocument.activeElement;\n  }\n  get children() {\n    return [...this.element.children];\n  }\n  hasAnchor(anchor) {\n    return this.getElementForAnchor(anchor) != null;\n  }\n  getElementForAnchor(anchor) {\n    return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n  }\n  get isConnected() {\n    return this.element.isConnected;\n  }\n  get firstAutofocusableElement() {\n    const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n    for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n      if (element.closest(inertDisabledOrHidden) == null)\n        return element;\n      else\n        continue;\n    }\n    return null;\n  }\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element);\n  }\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id);\n  }\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n    for (const currentPermanentElement of this.permanentElements) {\n      const { id } = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n      }\n    }\n    return permanentElementMap;\n  }\n};\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\nvar FormSubmitObserver = class {\n  constructor(delegate, eventTarget) {\n    this.started = false;\n    this.submitCaptured = () => {\n      this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n      this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n    };\n    this.submitBubbled = (event) => {\n      if (!event.defaultPrevented) {\n        const form = event.target instanceof HTMLFormElement ? event.target : void 0;\n        const submitter = event.submitter || void 0;\n        if (form && submissionDoesNotDismissDialog(form, submitter) && submissionDoesNotTargetIFrame(form, submitter) && this.delegate.willSubmitForm(form, submitter)) {\n          event.preventDefault();\n          event.stopImmediatePropagation();\n          this.delegate.formSubmitted(form, submitter);\n        }\n      }\n    };\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n};\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n  return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n    const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n    for (const element of document.getElementsByName(target)) {\n      if (element instanceof HTMLIFrameElement)\n        return false;\n    }\n    return true;\n  } else {\n    return true;\n  }\n}\nvar View = class {\n  constructor(delegate, element) {\n    this.resolveRenderPromise = (_value) => {\n    };\n    this.resolveInterceptionPromise = (_value) => {\n    };\n    this.delegate = delegate;\n    this.element = element;\n  }\n  scrollToAnchor(anchor) {\n    const element = this.snapshot.getElementForAnchor(anchor);\n    if (element) {\n      this.scrollToElement(element);\n      this.focusElement(element);\n    } else {\n      this.scrollToPosition({ x: 0, y: 0 });\n    }\n  }\n  scrollToAnchorFromLocation(location2) {\n    this.scrollToAnchor(getAnchor(location2));\n  }\n  scrollToElement(element) {\n    element.scrollIntoView();\n  }\n  focusElement(element) {\n    if (element instanceof HTMLElement) {\n      if (element.hasAttribute(\"tabindex\")) {\n        element.focus();\n      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n  scrollToPosition({ x, y }) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n  scrollToTop() {\n    this.scrollToPosition({ x: 0, y: 0 });\n  }\n  get scrollRoot() {\n    return window;\n  }\n  async render(renderer) {\n    const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve) => this.resolveRenderPromise = resolve);\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n        const renderInterception = new Promise((resolve) => this.resolveInterceptionPromise = resolve);\n        const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender)\n          await renderInterception;\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.resolveRenderPromise(void 0);\n        delete this.renderPromise;\n      }\n    } else {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\n    } else {\n      this.element.removeAttribute(\"data-turbo-preview\");\n    }\n  }\n  async renderSnapshot(renderer) {\n    await renderer.render();\n  }\n  finishRenderingSnapshot(renderer) {\n    renderer.finishRendering();\n  }\n};\nvar FrameView = class extends View {\n  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n  }\n  get snapshot() {\n    return new Snapshot(this.element);\n  }\n};\nvar LinkInterceptor = class {\n  constructor(delegate, element) {\n    this.clickBubbled = (event) => {\n      if (this.respondsToEventTarget(event.target)) {\n        this.clickEvent = event;\n      } else {\n        delete this.clickEvent;\n      }\n    };\n    this.linkClicked = (event) => {\n      if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n        if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n          this.clickEvent.preventDefault();\n          event.preventDefault();\n          this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n        }\n      }\n      delete this.clickEvent;\n    };\n    this.willVisit = (_event) => {\n      delete this.clickEvent;\n    };\n    this.delegate = delegate;\n    this.element = element;\n  }\n  start() {\n    this.element.addEventListener(\"click\", this.clickBubbled);\n    document.addEventListener(\"turbo:click\", this.linkClicked);\n    document.addEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n  stop() {\n    this.element.removeEventListener(\"click\", this.clickBubbled);\n    document.removeEventListener(\"turbo:click\", this.linkClicked);\n    document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n  }\n  respondsToEventTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    return element && element.closest(\"turbo-frame, html\") == this.element;\n  }\n};\nvar LinkClickObserver = class {\n  constructor(delegate, eventTarget) {\n    this.started = false;\n    this.clickCaptured = () => {\n      this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n      this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n    };\n    this.clickBubbled = (event) => {\n      if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n        const target = event.composedPath && event.composedPath()[0] || event.target;\n        const link = this.findLinkFromClickTarget(target);\n        if (link && doesNotTargetIFrame(link)) {\n          const location2 = this.getLocationForLink(link);\n          if (this.delegate.willFollowLinkToLocation(link, location2, event)) {\n            event.preventDefault();\n            this.delegate.followedLinkToLocation(link, location2);\n          }\n        }\n      }\n    };\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n  clickEventIsSignificant(event) {\n    return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n  }\n  findLinkFromClickTarget(target) {\n    return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n  }\n  getLocationForLink(link) {\n    return expandURL(link.getAttribute(\"href\") || \"\");\n  }\n};\nfunction doesNotTargetIFrame(anchor) {\n  if (anchor.hasAttribute(\"target\")) {\n    for (const element of document.getElementsByName(anchor.target)) {\n      if (element instanceof HTMLIFrameElement)\n        return false;\n    }\n    return true;\n  } else {\n    return true;\n  }\n}\nvar FormLinkClickObserver = class {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n  start() {\n    this.linkInterceptor.start();\n  }\n  stop() {\n    this.linkInterceptor.stop();\n  }\n  willFollowLinkToLocation(link, location2, originalEvent) {\n    return this.delegate.willSubmitFormLinkToLocation(link, location2, originalEvent) && link.hasAttribute(\"data-turbo-method\");\n  }\n  followedLinkToLocation(link, location2) {\n    const form = document.createElement(\"form\");\n    const type = \"hidden\";\n    for (const [name, value] of location2.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n    }\n    const action = Object.assign(location2, { search: \"\" });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method)\n      form.setAttribute(\"method\", method);\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame)\n      form.setAttribute(\"data-turbo-frame\", turboFrame);\n    const turboAction = getVisitAction(link);\n    if (turboAction)\n      form.setAttribute(\"data-turbo-action\", turboAction);\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm)\n      form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream)\n      form.setAttribute(\"data-turbo-stream\", \"\");\n    this.delegate.submittedFormLinkToLocation(link, location2, form);\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n    requestAnimationFrame(() => form.requestSubmit());\n  }\n};\nvar Bardo = class {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n      this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n    }\n  }\n  leave() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement] = this.permanentElementMap[id];\n      this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n      this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n      this.delegate.leavingBardo(currentPermanentElement);\n    }\n  }\n  replaceNewPermanentElementWithPlaceholder(permanentElement) {\n    const placeholder = createPlaceholderForPermanentElement(permanentElement);\n    permanentElement.replaceWith(placeholder);\n  }\n  replaceCurrentPermanentElementWithClone(permanentElement) {\n    const clone = permanentElement.cloneNode(true);\n    permanentElement.replaceWith(clone);\n  }\n  replacePlaceholderWithPermanentElement(permanentElement) {\n    const placeholder = this.getPlaceholderById(permanentElement.id);\n    placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n  }\n  getPlaceholderById(id) {\n    return this.placeholders.find((element) => element.content == id);\n  }\n  get placeholders() {\n    return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n  }\n};\nfunction createPlaceholderForPermanentElement(permanentElement) {\n  const element = document.createElement(\"meta\");\n  element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n  element.setAttribute(\"content\", permanentElement.id);\n  return element;\n}\nvar Renderer = class {\n  constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    this.activeElement = null;\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = renderElement;\n    this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });\n  }\n  get shouldRender() {\n    return true;\n  }\n  get reloadReason() {\n    return;\n  }\n  prepareToRender() {\n    return;\n  }\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n  focusFirstAutofocusableElement() {\n    const element = this.connectedSnapshot.firstAutofocusableElement;\n    if (elementIsFocusable(element)) {\n      element.focus();\n    }\n  }\n  enteringBardo(currentPermanentElement) {\n    if (this.activeElement)\n      return;\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n      this.activeElement.focus();\n      this.activeElement = null;\n    }\n  }\n  get connectedSnapshot() {\n    return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n  }\n  get currentElement() {\n    return this.currentSnapshot.element;\n  }\n  get newElement() {\n    return this.newSnapshot.element;\n  }\n  get permanentElementMap() {\n    return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n  }\n};\nfunction elementIsFocusable(element) {\n  return element && typeof element.focus == \"function\";\n}\nvar FrameRenderer = class extends Renderer {\n  static renderElement(currentElement, newElement) {\n    var _a;\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n    const frameElement = newElement;\n    const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\n  get shouldRender() {\n    return true;\n  }\n  async render() {\n    await nextAnimationFrame();\n    this.preservingPermanentElements(() => {\n      this.loadFrameElement();\n    });\n    this.scrollFrameIntoView();\n    await nextAnimationFrame();\n    this.focusFirstAutofocusableElement();\n    await nextAnimationFrame();\n    this.activateScriptElements();\n  }\n  loadFrameElement() {\n    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n  scrollFrameIntoView() {\n    if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n      const element = this.currentElement.firstElementChild;\n      const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n      if (element) {\n        element.scrollIntoView({ block, behavior });\n        return true;\n      }\n    }\n    return false;\n  }\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\");\n  }\n};\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value;\n  } else {\n    return defaultValue;\n  }\n}\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value;\n  } else {\n    return defaultValue;\n  }\n}\nvar ProgressBar = class _ProgressBar {\n  static get defaultCSS() {\n    return unindent`\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${_ProgressBar.animationDuration}ms ease-out,\n          opacity ${_ProgressBar.animationDuration / 2}ms ${_ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n  }\n  constructor() {\n    this.hiding = false;\n    this.value = 0;\n    this.visible = false;\n    this.trickle = () => {\n      this.setValue(this.value + Math.random() / 100);\n    };\n    this.stylesheetElement = this.createStylesheetElement();\n    this.progressElement = this.createProgressElement();\n    this.installStylesheetElement();\n    this.setValue(0);\n  }\n  show() {\n    if (!this.visible) {\n      this.visible = true;\n      this.installProgressElement();\n      this.startTrickling();\n    }\n  }\n  hide() {\n    if (this.visible && !this.hiding) {\n      this.hiding = true;\n      this.fadeProgressElement(() => {\n        this.uninstallProgressElement();\n        this.stopTrickling();\n        this.visible = false;\n        this.hiding = false;\n      });\n    }\n  }\n  setValue(value) {\n    this.value = value;\n    this.refresh();\n  }\n  installStylesheetElement() {\n    document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n  }\n  installProgressElement() {\n    this.progressElement.style.width = \"0\";\n    this.progressElement.style.opacity = \"1\";\n    document.documentElement.insertBefore(this.progressElement, document.body);\n    this.refresh();\n  }\n  fadeProgressElement(callback) {\n    this.progressElement.style.opacity = \"0\";\n    setTimeout(callback, _ProgressBar.animationDuration * 1.5);\n  }\n  uninstallProgressElement() {\n    if (this.progressElement.parentNode) {\n      document.documentElement.removeChild(this.progressElement);\n    }\n  }\n  startTrickling() {\n    if (!this.trickleInterval) {\n      this.trickleInterval = window.setInterval(this.trickle, _ProgressBar.animationDuration);\n    }\n  }\n  stopTrickling() {\n    window.clearInterval(this.trickleInterval);\n    delete this.trickleInterval;\n  }\n  refresh() {\n    requestAnimationFrame(() => {\n      this.progressElement.style.width = `${10 + this.value * 90}%`;\n    });\n  }\n  createStylesheetElement() {\n    const element = document.createElement(\"style\");\n    element.type = \"text/css\";\n    element.textContent = _ProgressBar.defaultCSS;\n    if (this.cspNonce) {\n      element.nonce = this.cspNonce;\n    }\n    return element;\n  }\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element;\n  }\n  get cspNonce() {\n    return getMetaContent(\"csp-nonce\");\n  }\n};\nProgressBar.animationDuration = 300;\nvar HeadSnapshot = class extends Snapshot {\n  constructor() {\n    super(...arguments);\n    this.detailsByOuterHTML = this.children.filter((element) => !elementIsNoscript(element)).map((element) => elementWithoutNonce(element)).reduce((result, element) => {\n      const { outerHTML } = element;\n      const details = outerHTML in result ? result[outerHTML] : {\n        type: elementType(element),\n        tracked: elementIsTracked(element),\n        elements: []\n      };\n      return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n    }, {});\n  }\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked).join(\"\");\n  }\n  getScriptElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n  }\n  getStylesheetElementsNotInSnapshot(snapshot) {\n    return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n  }\n  getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n    return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML)).map((outerHTML) => this.detailsByOuterHTML[outerHTML]).filter(({ type }) => type == matchedType).map(({ elements: [element] }) => element);\n  }\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [...result, ...elements];\n      } else if (elements.length > 1) {\n        return [...result, ...elements.slice(1)];\n      } else {\n        return result;\n      }\n    }, []);\n  }\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : null;\n  }\n  findMetaElementByName(name) {\n    return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n      const { elements: [element] } = this.detailsByOuterHTML[outerHTML];\n      return elementIsMetaElementWithName(element, name) ? element : result;\n    }, void 0);\n  }\n};\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\";\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\";\n  }\n}\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n}\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n  return element;\n}\nvar PageSnapshot = class _PageSnapshot extends Snapshot {\n  static fromHTMLString(html = \"\") {\n    return this.fromDocument(parseHTMLDocument(html));\n  }\n  static fromElement(element) {\n    return this.fromDocument(element.ownerDocument);\n  }\n  static fromDocument({ head, body }) {\n    return new this(body, new HeadSnapshot(head));\n  }\n  constructor(element, headSnapshot) {\n    super(element);\n    this.headSnapshot = headSnapshot;\n  }\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions)\n        option.selected = false;\n      for (const option of source.selectedOptions)\n        clone.options[option.index].selected = true;\n    }\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n    return new _PageSnapshot(clonedElement, this.headSnapshot);\n  }\n  get headElement() {\n    return this.headSnapshot.element;\n  }\n  get rootLocation() {\n    var _a;\n    const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n    return expandURL(root);\n  }\n  get cacheControlValue() {\n    return this.getSetting(\"cache-control\");\n  }\n  get isPreviewable() {\n    return this.cacheControlValue != \"no-preview\";\n  }\n  get isCacheable() {\n    return this.cacheControlValue != \"no-cache\";\n  }\n  get isVisitable() {\n    return this.getSetting(\"visit-control\") != \"reload\";\n  }\n  getSetting(name) {\n    return this.headSnapshot.getMetaValue(`turbo-${name}`);\n  }\n};\nvar TimingMetric;\n(function(TimingMetric2) {\n  TimingMetric2[\"visitStart\"] = \"visitStart\";\n  TimingMetric2[\"requestStart\"] = \"requestStart\";\n  TimingMetric2[\"requestEnd\"] = \"requestEnd\";\n  TimingMetric2[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function(VisitState2) {\n  VisitState2[\"initialized\"] = \"initialized\";\n  VisitState2[\"started\"] = \"started\";\n  VisitState2[\"canceled\"] = \"canceled\";\n  VisitState2[\"failed\"] = \"failed\";\n  VisitState2[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nvar defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {\n  },\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\nvar SystemStatusCode;\n(function(SystemStatusCode2) {\n  SystemStatusCode2[SystemStatusCode2[\"networkFailure\"] = 0] = \"networkFailure\";\n  SystemStatusCode2[SystemStatusCode2[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n  SystemStatusCode2[SystemStatusCode2[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nvar Visit = class {\n  constructor(delegate, location2, restorationIdentifier, options = {}) {\n    this.identifier = uuid();\n    this.timingMetrics = {};\n    this.followedRedirect = false;\n    this.historyChanged = false;\n    this.scrolled = false;\n    this.shouldCacheSnapshot = true;\n    this.acceptsStreamResponse = false;\n    this.snapshotCached = false;\n    this.state = VisitState.initialized;\n    this.delegate = delegate;\n    this.location = location2;\n    this.restorationIdentifier = restorationIdentifier || uuid();\n    const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse } = Object.assign(Object.assign({}, defaultOptions), options);\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\n    this.snapshotHTML = snapshotHTML;\n    this.response = response;\n    this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n    this.visitCachedSnapshot = visitCachedSnapshot;\n    this.willRender = willRender;\n    this.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\n  }\n  get adapter() {\n    return this.delegate.adapter;\n  }\n  get view() {\n    return this.delegate.view;\n  }\n  get history() {\n    return this.delegate.history;\n  }\n  get restorationData() {\n    return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n  }\n  get silent() {\n    return this.isSamePage;\n  }\n  start() {\n    if (this.state == VisitState.initialized) {\n      this.recordTimingMetric(TimingMetric.visitStart);\n      this.state = VisitState.started;\n      this.adapter.visitStarted(this);\n      this.delegate.visitStarted(this);\n    }\n  }\n  cancel() {\n    if (this.state == VisitState.started) {\n      if (this.request) {\n        this.request.cancel();\n      }\n      this.cancelRender();\n      this.state = VisitState.canceled;\n    }\n  }\n  complete() {\n    if (this.state == VisitState.started) {\n      this.recordTimingMetric(TimingMetric.visitEnd);\n      this.state = VisitState.completed;\n      this.followRedirect();\n      if (!this.followedRedirect) {\n        this.adapter.visitCompleted(this);\n        this.delegate.visitCompleted(this);\n      }\n    }\n  }\n  fail() {\n    if (this.state == VisitState.started) {\n      this.state = VisitState.failed;\n      this.adapter.visitFailed(this);\n    }\n  }\n  changeHistory() {\n    var _a;\n    if (!this.historyChanged && this.updateHistory) {\n      const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n      const method = getHistoryMethodForAction(actionForHistory);\n      this.history.update(method, this.location, this.restorationIdentifier);\n      this.historyChanged = true;\n    }\n  }\n  issueRequest() {\n    if (this.hasPreloadedResponse()) {\n      this.simulateRequest();\n    } else if (this.shouldIssueRequest() && !this.request) {\n      this.request = new FetchRequest(this, FetchMethod.get, this.location);\n      this.request.perform();\n    }\n  }\n  simulateRequest() {\n    if (this.response) {\n      this.startRequest();\n      this.recordResponse();\n      this.finishRequest();\n    }\n  }\n  startRequest() {\n    this.recordTimingMetric(TimingMetric.requestStart);\n    this.adapter.visitRequestStarted(this);\n  }\n  recordResponse(response = this.response) {\n    this.response = response;\n    if (response) {\n      const { statusCode } = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\n      } else {\n        this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n      }\n    }\n  }\n  finishRequest() {\n    this.recordTimingMetric(TimingMetric.requestEnd);\n    this.adapter.visitRequestFinished(this);\n  }\n  loadResponse() {\n    if (this.response) {\n      const { statusCode, responseHTML } = this.response;\n      this.render(async () => {\n        if (this.shouldCacheSnapshot)\n          this.cacheSnapshot();\n        if (this.view.renderPromise)\n          await this.view.renderPromise;\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n          this.performScroll();\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n          this.adapter.visitRendered(this);\n          this.fail();\n        }\n      });\n    }\n  }\n  getCachedSnapshot() {\n    const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n    if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n      if (this.action == \"restore\" || snapshot.isPreviewable) {\n        return snapshot;\n      }\n    }\n  }\n  getPreloadedSnapshot() {\n    if (this.snapshotHTML) {\n      return PageSnapshot.fromHTMLString(this.snapshotHTML);\n    }\n  }\n  hasCachedSnapshot() {\n    return this.getCachedSnapshot() != null;\n  }\n  loadCachedSnapshot() {\n    const snapshot = this.getCachedSnapshot();\n    if (snapshot) {\n      const isPreview = this.shouldIssueRequest();\n      this.render(async () => {\n        this.cacheSnapshot();\n        if (this.isSamePage) {\n          this.adapter.visitRendered(this);\n        } else {\n          if (this.view.renderPromise)\n            await this.view.renderPromise;\n          await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n          this.performScroll();\n          this.adapter.visitRendered(this);\n          if (!isPreview) {\n            this.complete();\n          }\n        }\n      });\n    }\n  }\n  followRedirect() {\n    var _a;\n    if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n      this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n        action: \"replace\",\n        response: this.response,\n        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render(async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      });\n    }\n  }\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n  requestStarted() {\n    this.startRequest();\n  }\n  requestPreventedHandlingResponse(_request, _response) {\n  }\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == void 0) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : void 0;\n      this.recordResponse({ statusCode, responseHTML, redirected });\n    }\n  }\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const { redirected, statusCode } = response;\n    if (responseHTML == void 0) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected\n      });\n    } else {\n      this.recordResponse({ statusCode, responseHTML, redirected });\n    }\n  }\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n  requestFinished() {\n    this.finishRequest();\n  }\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n      } else {\n        this.scrollToAnchor() || this.view.scrollToTop();\n      }\n      if (this.isSamePage) {\n        this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n      }\n      this.scrolled = true;\n    }\n  }\n  scrollToRestoredPosition() {\n    const { scrollPosition } = this.restorationData;\n    if (scrollPosition) {\n      this.view.scrollToPosition(scrollPosition);\n      return true;\n    }\n  }\n  scrollToAnchor() {\n    const anchor = getAnchor(this.location);\n    if (anchor != null) {\n      this.view.scrollToAnchor(anchor);\n      return true;\n    }\n  }\n  recordTimingMetric(metric) {\n    this.timingMetrics[metric] = (/* @__PURE__ */ new Date()).getTime();\n  }\n  getTimingMetrics() {\n    return Object.assign({}, this.timingMetrics);\n  }\n  getHistoryMethodForAction(action) {\n    switch (action) {\n      case \"replace\":\n        return history.replaceState;\n      case \"advance\":\n      case \"restore\":\n        return history.pushState;\n    }\n  }\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\";\n  }\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false;\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot();\n    } else {\n      return this.willRender;\n    }\n  }\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n      this.snapshotCached = true;\n    }\n  }\n  async render(callback) {\n    this.cancelRender();\n    await new Promise((resolve) => {\n      this.frame = requestAnimationFrame(() => resolve());\n    });\n    await callback();\n    delete this.frame;\n  }\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\n  }\n};\nfunction isSuccessful(statusCode) {\n  return statusCode >= 200 && statusCode < 300;\n}\nvar BrowserAdapter = class {\n  constructor(session2) {\n    this.progressBar = new ProgressBar();\n    this.showProgressBar = () => {\n      this.progressBar.show();\n    };\n    this.session = session2;\n  }\n  visitProposedToLocation(location2, options) {\n    this.navigator.startVisit(location2, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n  }\n  visitStarted(visit2) {\n    this.location = visit2.location;\n    visit2.loadCachedSnapshot();\n    visit2.issueRequest();\n    visit2.goToSamePageAnchor();\n  }\n  visitRequestStarted(visit2) {\n    this.progressBar.setValue(0);\n    if (visit2.hasCachedSnapshot() || visit2.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\n    } else {\n      this.showProgressBar();\n    }\n  }\n  visitRequestCompleted(visit2) {\n    visit2.loadResponse();\n  }\n  visitRequestFailedWithStatusCode(visit2, statusCode) {\n    switch (statusCode) {\n      case SystemStatusCode.networkFailure:\n      case SystemStatusCode.timeoutFailure:\n      case SystemStatusCode.contentTypeMismatch:\n        return this.reload({\n          reason: \"request_failed\",\n          context: {\n            statusCode\n          }\n        });\n      default:\n        return visit2.loadResponse();\n    }\n  }\n  visitRequestFinished(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n  visitCompleted(_visit) {\n  }\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n  visitFailed(_visit) {\n  }\n  visitRendered(_visit) {\n  }\n  formSubmissionStarted(_formSubmission) {\n    this.progressBar.setValue(0);\n    this.showFormProgressBarAfterDelay();\n  }\n  formSubmissionFinished(_formSubmission) {\n    this.progressBar.setValue(1);\n    this.hideFormProgressBar();\n  }\n  showVisitProgressBarAfterDelay() {\n    this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n  }\n  hideVisitProgressBar() {\n    this.progressBar.hide();\n    if (this.visitProgressBarTimeout != null) {\n      window.clearTimeout(this.visitProgressBarTimeout);\n      delete this.visitProgressBarTimeout;\n    }\n  }\n  showFormProgressBarAfterDelay() {\n    if (this.formProgressBarTimeout == null) {\n      this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n  }\n  hideFormProgressBar() {\n    this.progressBar.hide();\n    if (this.formProgressBarTimeout != null) {\n      window.clearTimeout(this.formProgressBarTimeout);\n      delete this.formProgressBarTimeout;\n    }\n  }\n  reload(reason) {\n    var _a;\n    dispatch(\"turbo:reload\", { detail: reason });\n    window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n  }\n  get navigator() {\n    return this.session.navigator;\n  }\n};\nvar CacheObserver = class {\n  constructor() {\n    this.selector = \"[data-turbo-temporary]\";\n    this.deprecatedSelector = \"[data-turbo-cache=false]\";\n    this.started = false;\n    this.removeTemporaryElements = (_event) => {\n      for (const element of this.temporaryElements) {\n        element.remove();\n      }\n    };\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n  get temporaryElements() {\n    return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n  }\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n    if (elements.length) {\n      console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n    }\n    return [...elements];\n  }\n};\nvar FrameRedirector = class {\n  constructor(session2, element) {\n    this.session = session2;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.shouldRedirect(element);\n  }\n  linkClickIntercepted(element, url, event) {\n    const frame = this.findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == null && this.shouldSubmit(element, submitter) && this.shouldRedirect(element, submitter);\n  }\n  formSubmitted(element, submitter) {\n    const frame = this.findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(element, submitter);\n    }\n  }\n  shouldSubmit(form, submitter) {\n    var _a;\n    const action = getAction(form, submitter);\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n    return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n  }\n  shouldRedirect(element, submitter) {\n    const isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter) : this.session.elementIsNavigatable(element);\n    if (isNavigatable) {\n      const frame = this.findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false;\n    } else {\n      return false;\n    }\n  }\n  findFrameElement(element, submitter) {\n    const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n    if (id && id != \"_top\") {\n      const frame = this.element.querySelector(`#${id}:not([disabled])`);\n      if (frame instanceof FrameElement) {\n        return frame;\n      }\n    }\n  }\n};\nvar History = class {\n  constructor(delegate) {\n    this.restorationIdentifier = uuid();\n    this.restorationData = {};\n    this.started = false;\n    this.pageLoaded = false;\n    this.onPopState = (event) => {\n      if (this.shouldHandlePopState()) {\n        const { turbo } = event.state || {};\n        if (turbo) {\n          this.location = new URL(window.location.href);\n          const { restorationIdentifier } = turbo;\n          this.restorationIdentifier = restorationIdentifier;\n          this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n        }\n      }\n    };\n    this.onPageLoad = async (_event) => {\n      await nextMicrotask();\n      this.pageLoaded = true;\n    };\n    this.delegate = delegate;\n  }\n  start() {\n    if (!this.started) {\n      addEventListener(\"popstate\", this.onPopState, false);\n      addEventListener(\"load\", this.onPageLoad, false);\n      this.started = true;\n      this.replace(new URL(window.location.href));\n    }\n  }\n  stop() {\n    if (this.started) {\n      removeEventListener(\"popstate\", this.onPopState, false);\n      removeEventListener(\"load\", this.onPageLoad, false);\n      this.started = false;\n    }\n  }\n  push(location2, restorationIdentifier) {\n    this.update(history.pushState, location2, restorationIdentifier);\n  }\n  replace(location2, restorationIdentifier) {\n    this.update(history.replaceState, location2, restorationIdentifier);\n  }\n  update(method, location2, restorationIdentifier = uuid()) {\n    const state = { turbo: { restorationIdentifier } };\n    method.call(history, state, \"\", location2.href);\n    this.location = location2;\n    this.restorationIdentifier = restorationIdentifier;\n  }\n  getRestorationDataForIdentifier(restorationIdentifier) {\n    return this.restorationData[restorationIdentifier] || {};\n  }\n  updateRestorationData(additionalData) {\n    const { restorationIdentifier } = this;\n    const restorationData = this.restorationData[restorationIdentifier];\n    this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n  }\n  assumeControlOfScrollRestoration() {\n    var _a;\n    if (!this.previousScrollRestoration) {\n      this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n      history.scrollRestoration = \"manual\";\n    }\n  }\n  relinquishControlOfScrollRestoration() {\n    if (this.previousScrollRestoration) {\n      history.scrollRestoration = this.previousScrollRestoration;\n      delete this.previousScrollRestoration;\n    }\n  }\n  shouldHandlePopState() {\n    return this.pageIsLoaded();\n  }\n  pageIsLoaded() {\n    return this.pageLoaded || document.readyState == \"complete\";\n  }\n};\nvar Navigator = class {\n  constructor(delegate) {\n    this.delegate = delegate;\n  }\n  proposeVisit(location2, options = {}) {\n    if (this.delegate.allowsVisitingLocationWithAction(location2, options.action)) {\n      if (locationIsVisitable(location2, this.view.snapshot.rootLocation)) {\n        this.delegate.visitProposedToLocation(location2, options);\n      } else {\n        window.location.href = location2.toString();\n      }\n    }\n  }\n  startVisit(locatable, restorationIdentifier, options = {}) {\n    this.stop();\n    this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n    this.currentVisit.start();\n  }\n  submitForm(form, submitter) {\n    this.stop();\n    this.formSubmission = new FormSubmission(this, form, submitter, true);\n    this.formSubmission.start();\n  }\n  stop() {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n      delete this.formSubmission;\n    }\n    if (this.currentVisit) {\n      this.currentVisit.cancel();\n      delete this.currentVisit;\n    }\n  }\n  get adapter() {\n    return this.delegate.adapter;\n  }\n  get view() {\n    return this.delegate.view;\n  }\n  get history() {\n    return this.delegate.history;\n  }\n  formSubmissionStarted(formSubmission) {\n    if (typeof this.adapter.formSubmissionStarted === \"function\") {\n      this.adapter.formSubmissionStarted(formSubmission);\n    }\n  }\n  async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n    if (formSubmission == this.formSubmission) {\n      const responseHTML = await fetchResponse.responseHTML;\n      if (responseHTML) {\n        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n        const { statusCode, redirected } = fetchResponse;\n        const action = this.getActionForFormSubmission(formSubmission);\n        const visitOptions = {\n          action,\n          shouldCacheSnapshot,\n          response: { statusCode, responseHTML, redirected }\n        };\n        this.proposeVisit(fetchResponse.location, visitOptions);\n      }\n    }\n  }\n  async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    const responseHTML = await fetchResponse.responseHTML;\n    if (responseHTML) {\n      const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n      if (fetchResponse.serverError) {\n        await this.view.renderError(snapshot, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\n      }\n      this.view.scrollToTop();\n      this.view.clearSnapshotCache();\n    }\n  }\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n  formSubmissionFinished(formSubmission) {\n    if (typeof this.adapter.formSubmissionFinished === \"function\") {\n      this.adapter.formSubmissionFinished(formSubmission);\n    }\n  }\n  visitStarted(visit2) {\n    this.delegate.visitStarted(visit2);\n  }\n  visitCompleted(visit2) {\n    this.delegate.visitCompleted(visit2);\n  }\n  locationWithActionIsSamePage(location2, action) {\n    const anchor = getAnchor(location2);\n    const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n    const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n    return action !== \"replace\" && getRequestURL(location2) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);\n  }\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n  }\n  get location() {\n    return this.history.location;\n  }\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier;\n  }\n  getActionForFormSubmission({ submitter, formElement }) {\n    return getVisitAction(submitter, formElement) || \"advance\";\n  }\n};\nvar PageStage;\n(function(PageStage2) {\n  PageStage2[PageStage2[\"initial\"] = 0] = \"initial\";\n  PageStage2[PageStage2[\"loading\"] = 1] = \"loading\";\n  PageStage2[PageStage2[\"interactive\"] = 2] = \"interactive\";\n  PageStage2[PageStage2[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nvar PageObserver = class {\n  constructor(delegate) {\n    this.stage = PageStage.initial;\n    this.started = false;\n    this.interpretReadyState = () => {\n      const { readyState } = this;\n      if (readyState == \"interactive\") {\n        this.pageIsInteractive();\n      } else if (readyState == \"complete\") {\n        this.pageIsComplete();\n      }\n    };\n    this.pageWillUnload = () => {\n      this.delegate.pageWillUnload();\n    };\n    this.delegate = delegate;\n  }\n  start() {\n    if (!this.started) {\n      if (this.stage == PageStage.initial) {\n        this.stage = PageStage.loading;\n      }\n      document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n      addEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n      removeEventListener(\"pagehide\", this.pageWillUnload, false);\n      this.started = false;\n    }\n  }\n  pageIsInteractive() {\n    if (this.stage == PageStage.loading) {\n      this.stage = PageStage.interactive;\n      this.delegate.pageBecameInteractive();\n    }\n  }\n  pageIsComplete() {\n    this.pageIsInteractive();\n    if (this.stage == PageStage.interactive) {\n      this.stage = PageStage.complete;\n      this.delegate.pageLoaded();\n    }\n  }\n  get readyState() {\n    return document.readyState;\n  }\n};\nvar ScrollObserver = class {\n  constructor(delegate) {\n    this.started = false;\n    this.onScroll = () => {\n      this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n    };\n    this.delegate = delegate;\n  }\n  start() {\n    if (!this.started) {\n      addEventListener(\"scroll\", this.onScroll, false);\n      this.onScroll();\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      removeEventListener(\"scroll\", this.onScroll, false);\n      this.started = false;\n    }\n  }\n  updatePosition(position) {\n    this.delegate.scrollPositionChanged(position);\n  }\n};\nvar StreamMessageRenderer = class {\n  render({ fragment }) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n  }\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n  leavingBardo() {\n  }\n};\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const { id } = permanentElementInDocument;\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n      if (elementInStream) {\n        permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n      }\n    }\n  }\n  return permanentElementMap;\n}\nvar StreamObserver = class {\n  constructor(delegate) {\n    this.sources = /* @__PURE__ */ new Set();\n    this.started = false;\n    this.inspectFetchResponse = (event) => {\n      const response = fetchResponseFromEvent(event);\n      if (response && fetchResponseIsStream(response)) {\n        event.preventDefault();\n        this.receiveMessageResponse(response);\n      }\n    };\n    this.receiveMessageEvent = (event) => {\n      if (this.started && typeof event.data == \"string\") {\n        this.receiveMessageHTML(event.data);\n      }\n    };\n    this.delegate = delegate;\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n    }\n  }\n  connectStreamSource(source) {\n    if (!this.streamSourceIsConnected(source)) {\n      this.sources.add(source);\n      source.addEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n  disconnectStreamSource(source) {\n    if (this.streamSourceIsConnected(source)) {\n      this.sources.delete(source);\n      source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n    }\n  }\n  streamSourceIsConnected(source) {\n    return this.sources.has(source);\n  }\n  async receiveMessageResponse(response) {\n    const html = await response.responseHTML;\n    if (html) {\n      this.receiveMessageHTML(html);\n    }\n  }\n  receiveMessageHTML(html) {\n    this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n  }\n};\nfunction fetchResponseFromEvent(event) {\n  var _a;\n  const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n  if (fetchResponse instanceof FetchResponse) {\n    return fetchResponse;\n  }\n}\nfunction fetchResponseIsStream(response) {\n  var _a;\n  const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n  return contentType.startsWith(StreamMessage.contentType);\n}\nvar ErrorRenderer = class extends Renderer {\n  static renderElement(currentElement, newElement) {\n    const { documentElement, body } = document;\n    documentElement.replaceChild(newElement, body);\n  }\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n  replaceHeadAndBody() {\n    const { documentElement, head } = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(replaceableElement);\n        parentNode.replaceChild(element, replaceableElement);\n      }\n    }\n  }\n  get newHead() {\n    return this.newSnapshot.headSnapshot.element;\n  }\n  get scriptElements() {\n    return document.documentElement.querySelectorAll(\"script\");\n  }\n};\nvar PageRenderer = class extends Renderer {\n  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n  }\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      };\n    }\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      };\n    }\n  }\n  async prepareToRender() {\n    await this.mergeHead();\n  }\n  async render() {\n    if (this.willRender) {\n      await this.replaceBody();\n    }\n  }\n  finishRendering() {\n    super.finishRendering();\n    if (!this.isPreview) {\n      this.focusFirstAutofocusableElement();\n    }\n  }\n  get currentHeadSnapshot() {\n    return this.currentSnapshot.headSnapshot;\n  }\n  get newHeadSnapshot() {\n    return this.newSnapshot.headSnapshot;\n  }\n  get newElement() {\n    return this.newSnapshot.element;\n  }\n  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n    await mergedHeadElements;\n    await newStylesheetElements;\n  }\n  async replaceBody() {\n    await this.preservingPermanentElements(async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    });\n  }\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n  }\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n      document.head.appendChild(element);\n    }\n    await Promise.all(loadingElements);\n  }\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n  async mergeProvisionalElements() {\n    const newHeadElements = [...this.newHeadProvisionalElements];\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue;\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true;\n        }\n      }\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true;\n      }\n    }\n    return false;\n  }\n  removeCurrentHeadProvisionalElements() {\n    for (const element of this.currentHeadProvisionalElements) {\n      document.head.removeChild(element);\n    }\n  }\n  copyNewHeadProvisionalElements() {\n    for (const element of this.newHeadProvisionalElements) {\n      document.head.appendChild(element);\n    }\n  }\n  activateNewBody() {\n    document.adoptNode(this.newElement);\n    this.activateNewBodyScriptElements();\n  }\n  activateNewBodyScriptElements() {\n    for (const inertScriptElement of this.newBodyScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\n  }\n  get newHeadStylesheetElements() {\n    return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n  }\n  get newHeadScriptElements() {\n    return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n  }\n  get currentHeadProvisionalElements() {\n    return this.currentHeadSnapshot.provisionalElements;\n  }\n  get newHeadProvisionalElements() {\n    return this.newHeadSnapshot.provisionalElements;\n  }\n  get newBodyScriptElements() {\n    return this.newElement.querySelectorAll(\"script\");\n  }\n};\nvar SnapshotCache = class {\n  constructor(size) {\n    this.keys = [];\n    this.snapshots = {};\n    this.size = size;\n  }\n  has(location2) {\n    return toCacheKey(location2) in this.snapshots;\n  }\n  get(location2) {\n    if (this.has(location2)) {\n      const snapshot = this.read(location2);\n      this.touch(location2);\n      return snapshot;\n    }\n  }\n  put(location2, snapshot) {\n    this.write(location2, snapshot);\n    this.touch(location2);\n    return snapshot;\n  }\n  clear() {\n    this.snapshots = {};\n  }\n  read(location2) {\n    return this.snapshots[toCacheKey(location2)];\n  }\n  write(location2, snapshot) {\n    this.snapshots[toCacheKey(location2)] = snapshot;\n  }\n  touch(location2) {\n    const key = toCacheKey(location2);\n    const index = this.keys.indexOf(key);\n    if (index > -1)\n      this.keys.splice(index, 1);\n    this.keys.unshift(key);\n    this.trim();\n  }\n  trim() {\n    for (const key of this.keys.splice(this.size)) {\n      delete this.snapshots[key];\n    }\n  }\n};\nvar PageView = class extends View {\n  constructor() {\n    super(...arguments);\n    this.snapshotCache = new SnapshotCache(10);\n    this.lastRenderedLocation = new URL(location.href);\n    this.forceReloaded = false;\n  }\n  renderPage(snapshot, isPreview = false, willRender = true, visit2) {\n    const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();\n    }\n    return this.render(renderer);\n  }\n  renderError(snapshot, visit2) {\n    visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n    return this.render(renderer);\n  }\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const { lastRenderedLocation: location2 } = this;\n      await nextEventLoopTick();\n      const cachedSnapshot = snapshot.clone();\n      this.snapshotCache.put(location2, cachedSnapshot);\n      return cachedSnapshot;\n    }\n  }\n  getCachedSnapshotForLocation(location2) {\n    return this.snapshotCache.get(location2);\n  }\n  get snapshot() {\n    return PageSnapshot.fromElement(this.element);\n  }\n};\nvar Preloader = class {\n  constructor(delegate) {\n    this.selector = \"a[data-turbo-preload]\";\n    this.delegate = delegate;\n  }\n  get snapshotCache() {\n    return this.delegate.navigator.view.snapshotCache;\n  }\n  start() {\n    if (document.readyState === \"loading\") {\n      return document.addEventListener(\"DOMContentLoaded\", () => {\n        this.preloadOnLoadLinksForView(document.body);\n      });\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      this.preloadURL(link);\n    }\n  }\n  async preloadURL(link) {\n    const location2 = new URL(link.href);\n    if (this.snapshotCache.has(location2)) {\n      return;\n    }\n    try {\n      const response = await fetch(location2.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n      const responseText = await response.text();\n      const snapshot = PageSnapshot.fromHTMLString(responseText);\n      this.snapshotCache.put(location2, snapshot);\n    } catch (_) {\n    }\n  }\n};\nvar Session = class {\n  constructor() {\n    this.navigator = new Navigator(this);\n    this.history = new History(this);\n    this.preloader = new Preloader(this);\n    this.view = new PageView(this, document.documentElement);\n    this.adapter = new BrowserAdapter(this);\n    this.pageObserver = new PageObserver(this);\n    this.cacheObserver = new CacheObserver();\n    this.linkClickObserver = new LinkClickObserver(this, window);\n    this.formSubmitObserver = new FormSubmitObserver(this, document);\n    this.scrollObserver = new ScrollObserver(this);\n    this.streamObserver = new StreamObserver(this);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n    this.frameRedirector = new FrameRedirector(this, document.documentElement);\n    this.streamMessageRenderer = new StreamMessageRenderer();\n    this.drive = true;\n    this.enabled = true;\n    this.progressBarDelay = 500;\n    this.started = false;\n    this.formMode = \"on\";\n  }\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.formLinkClickObserver.start();\n      this.linkClickObserver.start();\n      this.formSubmitObserver.start();\n      this.scrollObserver.start();\n      this.streamObserver.start();\n      this.frameRedirector.start();\n      this.history.start();\n      this.preloader.start();\n      this.started = true;\n      this.enabled = true;\n    }\n  }\n  disable() {\n    this.enabled = false;\n  }\n  stop() {\n    if (this.started) {\n      this.pageObserver.stop();\n      this.cacheObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkClickObserver.stop();\n      this.formSubmitObserver.stop();\n      this.scrollObserver.stop();\n      this.streamObserver.stop();\n      this.frameRedirector.stop();\n      this.history.stop();\n      this.started = false;\n    }\n  }\n  registerAdapter(adapter) {\n    this.adapter = adapter;\n  }\n  visit(location2, options = {}) {\n    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n    if (frameElement instanceof FrameElement) {\n      frameElement.src = location2.toString();\n      frameElement.loaded;\n    } else {\n      this.navigator.proposeVisit(expandURL(location2), options);\n    }\n  }\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n  setProgressBarDelay(delay) {\n    this.progressBarDelay = delay;\n  }\n  setFormMode(mode) {\n    this.formMode = mode;\n  }\n  get location() {\n    return this.history.location;\n  }\n  get restorationIdentifier() {\n    return this.history.restorationIdentifier;\n  }\n  historyPoppedToLocationWithRestorationIdentifier(location2, restorationIdentifier) {\n    if (this.enabled) {\n      this.navigator.startVisit(location2, restorationIdentifier, {\n        action: \"restore\",\n        historyChanged: true\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({ scrollPosition: position });\n  }\n  willSubmitFormLinkToLocation(link, location2) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation);\n  }\n  submittedFormLinkToLocation() {\n  }\n  willFollowLinkToLocation(link, location2, event) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location2, event);\n  }\n  followedLinkToLocation(link, location2) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n    this.visit(location2.href, { action, acceptsStreamResponse });\n  }\n  allowsVisitingLocationWithAction(location2, action) {\n    return this.locationWithActionIsSamePage(location2, action) || this.applicationAllowsVisitingLocation(location2);\n  }\n  visitProposedToLocation(location2, options) {\n    extendURLWithDeprecatedProperties(location2);\n    this.adapter.visitProposedToLocation(location2, options);\n  }\n  visitStarted(visit2) {\n    if (!visit2.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n    }\n    extendURLWithDeprecatedProperties(visit2.location);\n    if (!visit2.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit2.location, visit2.action);\n    }\n  }\n  visitCompleted(visit2) {\n    clearBusyState(document.documentElement);\n    this.notifyApplicationAfterPageLoad(visit2.getTimingMetrics());\n  }\n  locationWithActionIsSamePage(location2, action) {\n    return this.navigator.locationWithActionIsSamePage(location2, action);\n  }\n  visitScrolledToSamePageLocation(oldURL, newURL) {\n    this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n  }\n  willSubmitForm(form, submitter) {\n    const action = getAction(form, submitter);\n    return this.submissionIsNavigatable(form, submitter) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n  }\n  formSubmitted(form, submitter) {\n    this.navigator.submitForm(form, submitter);\n  }\n  pageBecameInteractive() {\n    this.view.lastRenderedLocation = this.location;\n    this.notifyApplicationAfterPageLoad();\n  }\n  pageLoaded() {\n    this.history.assumeControlOfScrollRestoration();\n  }\n  pageWillUnload() {\n    this.history.relinquishControlOfScrollRestoration();\n  }\n  receivedMessageFromStream(message) {\n    this.renderStreamMessage(message);\n  }\n  viewWillCacheSnapshot() {\n    var _a;\n    if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n      this.notifyApplicationBeforeCachingSnapshot();\n    }\n  }\n  allowsImmediateRender({ element }, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const { defaultPrevented, detail: { render } } = event;\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n    return !defaultPrevented;\n  }\n  viewRenderedSnapshot(_snapshot, _isPreview) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender();\n  }\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n  applicationAllowsFollowingLinkToLocation(link, location2, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location2, ev);\n    return !event.defaultPrevented;\n  }\n  applicationAllowsVisitingLocation(location2) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location2);\n    return !event.defaultPrevented;\n  }\n  notifyApplicationAfterClickingLinkToLocation(link, location2, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: { url: location2.href, originalEvent: event },\n      cancelable: true\n    });\n  }\n  notifyApplicationBeforeVisitingLocation(location2) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: { url: location2.href },\n      cancelable: true\n    });\n  }\n  notifyApplicationAfterVisitingLocation(location2, action) {\n    return dispatch(\"turbo:visit\", { detail: { url: location2.href, action } });\n  }\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\");\n  }\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: Object.assign({ newBody }, options),\n      cancelable: true\n    });\n  }\n  notifyApplicationAfterRender() {\n    return dispatch(\"turbo:render\");\n  }\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: { url: this.location.href, timing }\n    });\n  }\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(new HashChangeEvent(\"hashchange\", {\n      oldURL: oldURL.toString(),\n      newURL: newURL.toString()\n    }));\n  }\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", { target: frame });\n  }\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: { fetchResponse },\n      target: frame,\n      cancelable: true\n    });\n  }\n  submissionIsNavigatable(form, submitter) {\n    if (this.formMode == \"off\") {\n      return false;\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n      if (this.formMode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form);\n      }\n    }\n  }\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n    if (this.drive || withinFrame) {\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\";\n      } else {\n        return true;\n      }\n    } else {\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\";\n      } else {\n        return false;\n      }\n    }\n  }\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\";\n  }\n  get snapshot() {\n    return this.view.snapshot;\n  }\n};\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nvar deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString();\n    }\n  }\n};\nvar Cache = class {\n  constructor(session2) {\n    this.session = session2;\n  }\n  clear() {\n    this.session.clearCache();\n  }\n  resetCacheControl() {\n    this.setCacheControl(\"\");\n  }\n  exemptPageFromCache() {\n    this.setCacheControl(\"no-cache\");\n  }\n  exemptPageFromPreview() {\n    this.setCacheControl(\"no-preview\");\n  }\n  setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n};\nvar StreamActions = {\n  after() {\n    this.targetElements.forEach((e) => {\n      var _a;\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling);\n    });\n  },\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.append(this.templateContent));\n  },\n  before() {\n    this.targetElements.forEach((e) => {\n      var _a;\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e);\n    });\n  },\n  prepend() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e) => e.prepend(this.templateContent));\n  },\n  remove() {\n    this.targetElements.forEach((e) => e.remove());\n  },\n  replace() {\n    this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n  },\n  update() {\n    this.targetElements.forEach((targetElement) => {\n      targetElement.innerHTML = \"\";\n      targetElement.append(this.templateContent);\n    });\n  }\n};\nvar session = new Session();\nvar cache = new Cache(session);\nvar { navigator: navigator$1 } = session;\nfunction start() {\n  session.start();\n}\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\nfunction visit(location2, options) {\n  session.visit(location2, options);\n}\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\nfunction clearCache() {\n  console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n  session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n  session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n  FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n  session.setFormMode(mode);\n}\nvar Turbo = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session,\n  cache,\n  PageRenderer,\n  PageSnapshot,\n  FrameRenderer,\n  start,\n  registerAdapter,\n  visit,\n  connectStreamSource,\n  disconnectStreamSource,\n  renderStreamMessage,\n  clearCache,\n  setProgressBarDelay,\n  setConfirmMethod,\n  setFormMode,\n  StreamActions\n});\nvar TurboFrameMissingError = class extends Error {\n};\nvar FrameController = class {\n  constructor(element) {\n    this.fetchResponseLoaded = (_fetchResponse) => {\n    };\n    this.currentFetchRequest = null;\n    this.resolveVisitPromise = () => {\n    };\n    this.connected = false;\n    this.hasBeenLoaded = false;\n    this.ignoredAttributes = /* @__PURE__ */ new Set();\n    this.action = null;\n    this.visitCachedSnapshot = ({ element: element2 }) => {\n      const frame = element2.querySelector(\"#\" + this.element.id);\n      if (frame && this.previousFrameElement) {\n        frame.replaceChildren(...this.previousFrameElement.children);\n      }\n      delete this.previousFrameElement;\n    };\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n  connect() {\n    if (!this.connected) {\n      this.connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n  disconnect() {\n    if (this.connected) {\n      this.connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.loadSourceURL();\n    }\n  }\n  sourceURLChanged() {\n    if (this.isIgnoringChangesTo(\"src\"))\n      return;\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n      this.loadSourceURL();\n    }\n  }\n  sourceURLReloaded() {\n    const { src } = this.element;\n    this.ignoringChangesToAttribute(\"complete\", () => {\n      this.element.removeAttribute(\"complete\");\n    });\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded;\n  }\n  completeChanged() {\n    if (this.isIgnoringChangesTo(\"complete\"))\n      return;\n    this.loadSourceURL();\n  }\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.loadSourceURL();\n    }\n  }\n  async loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.hasBeenLoaded = true;\n    }\n  }\n  async loadResponse(fetchResponse) {\n    if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) {\n      this.sourceURL = fetchResponse.response.url;\n    }\n    try {\n      const html = await fetchResponse.responseHTML;\n      if (html) {\n        const document2 = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document2);\n        if (pageSnapshot.isVisitable) {\n          await this.loadFrameResponse(fetchResponse, document2);\n        } else {\n          await this.handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.fetchResponseLoaded = () => {\n      };\n    }\n  }\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, element);\n    this.loadSourceURL();\n  }\n  willSubmitFormLinkToLocation(link) {\n    return this.shouldInterceptNavigation(link);\n  }\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.findFrameElement(link);\n    if (frame)\n      form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.shouldInterceptNavigation(element);\n  }\n  linkClickIntercepted(element, location2) {\n    this.navigateFrame(element, location2);\n  }\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n  }\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const { fetchRequest } = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n  prepareRequest(request) {\n    var _a;\n    request.headers[\"Turbo-Frame\"] = this.id;\n    if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n  requestStarted(_request) {\n    markAsBusy(this.element);\n  }\n  requestPreventedHandlingResponse(_request, _response) {\n    this.resolveVisitPromise();\n  }\n  async requestSucceededWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.resolveVisitPromise();\n  }\n  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(response);\n    this.resolveVisitPromise();\n  }\n  requestErrored(request, error) {\n    console.error(error);\n    this.resolveVisitPromise();\n  }\n  requestFinished(_request) {\n    clearBusyState(this.element);\n  }\n  formSubmissionStarted({ formElement }) {\n    markAsBusy(formElement, this.findFrameElement(formElement));\n  }\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n    frame.delegate.loadResponse(response);\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n  formSubmissionFinished({ formElement }) {\n    clearBusyState(formElement, this.findFrameElement(formElement));\n  }\n  allowsImmediateRender({ element: newFrame }, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: Object.assign({ newFrame }, options),\n      cancelable: true\n    });\n    const { defaultPrevented, detail: { render } } = event;\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n    return !defaultPrevented;\n  }\n  viewRenderedSnapshot(_snapshot, _isPreview) {\n  }\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n  viewInvalidated() {\n  }\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n  async loadFrameResponse(fetchResponse, document2) {\n    const newFrameElement = await this.extractForeignFrameElement(document2.body);\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n      if (this.view.renderPromise)\n        await this.view.renderPromise;\n      this.changeHistory();\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      this.fetchResponseLoaded(fetchResponse);\n    } else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.handleFrameMissingFromResponse(fetchResponse);\n    }\n  }\n  async visit(url) {\n    var _a;\n    const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n    (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n    this.currentFetchRequest = request;\n    return new Promise((resolve) => {\n      this.resolveVisitPromise = () => {\n        this.resolveVisitPromise = () => {\n        };\n        this.currentFetchRequest = null;\n        resolve();\n      };\n      request.perform();\n    });\n  }\n  navigateFrame(element, url, submitter) {\n    const frame = this.findFrameElement(element, submitter);\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n    this.withCurrentNavigationElement(element, () => {\n      frame.src = url;\n    });\n  }\n  proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n    this.action = getVisitAction(submitter, element, frame);\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const { visitCachedSnapshot } = frame.delegate;\n      frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n        if (frame.src) {\n          const { statusCode, redirected } = fetchResponse;\n          const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n          const response = { statusCode, redirected, responseHTML };\n          const options = {\n            response,\n            visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n          if (this.action)\n            options.action = this.action;\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n  async handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n    await this.visitResponse(fetchResponse.response);\n  }\n  willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n    const response = fetchResponse.response;\n    const visit2 = async (url, options = {}) => {\n      if (url instanceof Response) {\n        this.visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: { response, visit: visit2 },\n      cancelable: true\n    });\n    return !event.defaultPrevented;\n  }\n  handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.throwFrameMissingError(fetchResponse);\n  }\n  throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message);\n  }\n  async visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const { location: location2, redirected, statusCode } = wrapped;\n    return session.visit(location2, { response: { redirected, statusCode, responseHTML } });\n  }\n  findFrameElement(element, submitter) {\n    var _a;\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n  }\n  async extractForeignFrameElement(container) {\n    let element;\n    const id = CSS.escape(this.id);\n    try {\n      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element;\n      }\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element);\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement();\n    }\n    return null;\n  }\n  formActionIsVisitable(form, submitter) {\n    const action = getAction(form, submitter);\n    return locationIsVisitable(expandURL(action), this.rootLocation);\n  }\n  shouldInterceptNavigation(element, submitter) {\n    const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n    if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n      return false;\n    }\n    if (!this.enabled || id == \"_top\") {\n      return false;\n    }\n    if (id) {\n      const frameElement = getFrameElementById(id);\n      if (frameElement) {\n        return !frameElement.disabled;\n      }\n    }\n    if (!session.elementIsNavigatable(element)) {\n      return false;\n    }\n    if (submitter && !session.elementIsNavigatable(submitter)) {\n      return false;\n    }\n    return true;\n  }\n  get id() {\n    return this.element.id;\n  }\n  get enabled() {\n    return !this.element.disabled;\n  }\n  get sourceURL() {\n    if (this.element.src) {\n      return this.element.src;\n    }\n  }\n  set sourceURL(sourceURL) {\n    this.ignoringChangesToAttribute(\"src\", () => {\n      this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n    });\n  }\n  get loadingStyle() {\n    return this.element.loading;\n  }\n  get isLoading() {\n    return this.formSubmission !== void 0 || this.resolveVisitPromise() !== void 0;\n  }\n  get complete() {\n    return this.element.hasAttribute(\"complete\");\n  }\n  set complete(value) {\n    this.ignoringChangesToAttribute(\"complete\", () => {\n      if (value) {\n        this.element.setAttribute(\"complete\", \"\");\n      } else {\n        this.element.removeAttribute(\"complete\");\n      }\n    });\n  }\n  get isActive() {\n    return this.element.isActive && this.connected;\n  }\n  get rootLocation() {\n    var _a;\n    const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n    const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n    return expandURL(root);\n  }\n  isIgnoringChangesTo(attributeName) {\n    return this.ignoredAttributes.has(attributeName);\n  }\n  ignoringChangesToAttribute(attributeName, callback) {\n    this.ignoredAttributes.add(attributeName);\n    callback();\n    this.ignoredAttributes.delete(attributeName);\n  }\n  withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\n};\nfunction getFrameElementById(id) {\n  if (id != null) {\n    const element = document.getElementById(id);\n    if (element instanceof FrameElement) {\n      return element;\n    }\n  }\n}\nfunction activateElement(element, currentURL) {\n  if (element) {\n    const src = element.getAttribute(\"src\");\n    if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n      throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n    }\n    if (element.ownerDocument !== document) {\n      element = document.importNode(element, true);\n    }\n    if (element instanceof FrameElement) {\n      element.connectedCallback();\n      element.disconnectedCallback();\n      return element;\n    }\n  }\n}\nvar StreamElement = class _StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\n    } finally {\n      this.disconnect();\n    }\n  }\n  async render() {\n    var _a;\n    return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = (async () => {\n      const event = this.beforeRenderEvent;\n      if (this.dispatchEvent(event)) {\n        await nextAnimationFrame();\n        await event.detail.render(this);\n      }\n    })();\n  }\n  disconnect() {\n    try {\n      this.remove();\n    } catch (_a) {\n    }\n  }\n  removeDuplicateTargetChildren() {\n    this.duplicateChildren.forEach((c) => c.remove());\n  }\n  get duplicateChildren() {\n    var _a;\n    const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n    const newChildrenIds = [...((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || []].filter((c) => !!c.id).map((c) => c.id);\n    return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n  }\n  get performAction() {\n    if (this.action) {\n      const actionFunction = StreamActions[this.action];\n      if (actionFunction) {\n        return actionFunction;\n      }\n      this.raise(\"unknown action\");\n    }\n    this.raise(\"action attribute is missing\");\n  }\n  get targetElements() {\n    if (this.target) {\n      return this.targetElementsById;\n    } else if (this.targets) {\n      return this.targetElementsByQuery;\n    } else {\n      this.raise(\"target or targets attribute is missing\");\n    }\n  }\n  get templateContent() {\n    return this.templateElement.content.cloneNode(true);\n  }\n  get templateElement() {\n    if (this.firstElementChild === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template;\n    } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n      return this.firstElementChild;\n    }\n    this.raise(\"first child element must be a <template> element\");\n  }\n  get action() {\n    return this.getAttribute(\"action\");\n  }\n  get target() {\n    return this.getAttribute(\"target\");\n  }\n  get targets() {\n    return this.getAttribute(\"targets\");\n  }\n  raise(message) {\n    throw new Error(`${this.description}: ${message}`);\n  }\n  get description() {\n    var _a, _b;\n    return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n  }\n  get beforeRenderEvent() {\n    return new CustomEvent(\"turbo:before-stream-render\", {\n      bubbles: true,\n      cancelable: true,\n      detail: { newStream: this, render: _StreamElement.renderElement }\n    });\n  }\n  get targetElementsById() {\n    var _a;\n    const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n    if (element !== null) {\n      return [element];\n    } else {\n      return [];\n    }\n  }\n  get targetElementsByQuery() {\n    var _a;\n    const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n    if (elements.length !== 0) {\n      return Array.prototype.slice.call(elements);\n    } else {\n      return [];\n    }\n  }\n};\nvar StreamSourceElement = class extends HTMLElement {\n  constructor() {\n    super(...arguments);\n    this.streamSource = null;\n  }\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n    connectStreamSource(this.streamSource);\n  }\n  disconnectedCallback() {\n    if (this.streamSource) {\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n  get src() {\n    return this.getAttribute(\"src\") || \"\";\n  }\n};\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === void 0) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === void 0) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === void 0) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n(() => {\n  let element = document.currentScript;\n  if (!element)\n    return;\n  if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n    return;\n  element = element.parentElement;\n  while (element) {\n    if (element == document.body) {\n      return console.warn(unindent`\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        ——\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n    }\n    element = element.parentElement;\n  }\n})();\nwindow.Turbo = Turbo;\nstart();\n\n// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js\nvar cable_exports = {};\n__export(cable_exports, {\n  createConsumer: () => createConsumer,\n  getConsumer: () => getConsumer,\n  setConsumer: () => setConsumer,\n  subscribeTo: () => subscribeTo\n});\nvar consumer;\nasync function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer));\n}\nfunction setConsumer(newConsumer) {\n  return consumer = newConsumer;\n}\nasync function createConsumer() {\n  const { createConsumer: createConsumer2 } = await import(\n    /* webpackChunkName: \"actioncable\" */\n    \"./src-RMXPT54I.js\"\n  );\n  return createConsumer2();\n}\nasync function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer();\n  return subscriptions.create(channel, mixin);\n}\n\n// node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js\nfunction walk(obj) {\n  if (!obj || typeof obj !== \"object\")\n    return obj;\n  if (obj instanceof Date || obj instanceof RegExp)\n    return obj;\n  if (Array.isArray(obj))\n    return obj.map(walk);\n  return Object.keys(obj).reduce(function(acc, key) {\n    var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function(m, x) {\n      return \"_\" + x.toLowerCase();\n    });\n    acc[camel] = walk(obj[key]);\n    return acc;\n  }, {});\n}\n\n// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js\nvar TurboCableStreamSourceElement = class extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this);\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    });\n  }\n  disconnectedCallback() {\n    disconnectStreamSource(this);\n    if (this.subscription)\n      this.subscription.unsubscribe();\n  }\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data });\n    return this.dispatchEvent(event);\n  }\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\");\n  }\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\");\n  }\n  get channel() {\n    const channel = this.getAttribute(\"channel\");\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\");\n    return { channel, signed_stream_name, ...walk({ ...this.dataset }) };\n  }\n};\nif (customElements.get(\"turbo-cable-stream-source\") === void 0) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement);\n}\n\n// node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js\nfunction encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event;\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams();\n      const method = determineFetchMethod(submitter, body, form);\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\");\n        } else {\n          body.set(\"_method\", method);\n        }\n        fetchOptions.method = \"post\";\n      }\n    }, { once: true });\n  }\n}\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter);\n  const overrideMethod = body.get(\"_method\");\n  const method = form.getAttribute(\"method\") || \"get\";\n  if (typeof formMethod == \"string\") {\n    return formMethod;\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod;\n  } else {\n    return method;\n  }\n}\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod;\n    } else {\n      return null;\n    }\n  } else {\n    return null;\n  }\n}\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams;\n}\n\n// node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody);\nexport {\n  turbo_es2017_esm_exports as Turbo,\n  cable_exports as cable\n};\n//# sourceMappingURL=@hotwired_turbo-rails.js.map\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js\nvar linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\nvar buttonClickSelector = {\n  selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n  exclude: \"form button\"\n};\nvar inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\nvar formSubmitSelector = \"form:not([data-turbo=true])\";\nvar formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\nvar formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\nvar formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\nvar fileInputSelector = \"input[name][type=file]:not([disabled])\";\nvar linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\nvar buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\nvar nonce = null;\nvar loadCSPNonce = () => {\n  const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n  return nonce = metaTag && metaTag.content;\n};\nvar cspNonce = () => nonce || loadCSPNonce();\nvar m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar matches = function(element, selector) {\n  if (selector.exclude) {\n    return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n  } else {\n    return m.call(element, selector);\n  }\n};\nvar EXPANDO = \"_ujsData\";\nvar getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : void 0;\nvar setData = function(element, key, value) {\n  if (!element[EXPANDO]) {\n    element[EXPANDO] = {};\n  }\n  return element[EXPANDO][key] = value;\n};\nvar $ = (selector) => Array.prototype.slice.call(document.querySelectorAll(selector));\nvar isContentEditable = function(element) {\n  var isEditable = false;\n  do {\n    if (element.isContentEditable) {\n      isEditable = true;\n      break;\n    }\n    element = element.parentElement;\n  } while (element);\n  return isEditable;\n};\nvar csrfToken = () => {\n  const meta = document.querySelector(\"meta[name=csrf-token]\");\n  return meta && meta.content;\n};\nvar csrfParam = () => {\n  const meta = document.querySelector(\"meta[name=csrf-param]\");\n  return meta && meta.content;\n};\nvar CSRFProtection = (xhr) => {\n  const token = csrfToken();\n  if (token) {\n    return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n  }\n};\nvar refreshCSRFTokens = () => {\n  const token = csrfToken();\n  const param = csrfParam();\n  if (token && param) {\n    return $('form input[name=\"' + param + '\"]').forEach((input) => input.value = token);\n  }\n};\nvar AcceptHeaders = {\n  \"*\": \"*/*\",\n  text: \"text/plain\",\n  html: \"text/html\",\n  xml: \"application/xml, text/xml\",\n  json: \"application/json, text/javascript\",\n  script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\nvar ajax = (options) => {\n  options = prepareOptions(options);\n  var xhr = createXHR(options, function() {\n    const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n    if (Math.floor(xhr.status / 100) === 2) {\n      if (typeof options.success === \"function\") {\n        options.success(response, xhr.statusText, xhr);\n      }\n    } else {\n      if (typeof options.error === \"function\") {\n        options.error(response, xhr.statusText, xhr);\n      }\n    }\n    return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n  });\n  if (options.beforeSend && !options.beforeSend(xhr, options)) {\n    return false;\n  }\n  if (xhr.readyState === XMLHttpRequest.OPENED) {\n    return xhr.send(options.data);\n  }\n};\nvar prepareOptions = function(options) {\n  options.url = options.url || location.href;\n  options.type = options.type.toUpperCase();\n  if (options.type === \"GET\" && options.data) {\n    if (options.url.indexOf(\"?\") < 0) {\n      options.url += \"?\" + options.data;\n    } else {\n      options.url += \"&\" + options.data;\n    }\n  }\n  if (!(options.dataType in AcceptHeaders)) {\n    options.dataType = \"*\";\n  }\n  options.accept = AcceptHeaders[options.dataType];\n  if (options.dataType !== \"*\") {\n    options.accept += \", */*; q=0.01\";\n  }\n  return options;\n};\nvar createXHR = function(options, done) {\n  const xhr = new XMLHttpRequest();\n  xhr.open(options.type, options.url, true);\n  xhr.setRequestHeader(\"Accept\", options.accept);\n  if (typeof options.data === \"string\") {\n    xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n  }\n  if (!options.crossDomain) {\n    xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    CSRFProtection(xhr);\n  }\n  xhr.withCredentials = !!options.withCredentials;\n  xhr.onreadystatechange = function() {\n    if (xhr.readyState === XMLHttpRequest.DONE) {\n      return done(xhr);\n    }\n  };\n  return xhr;\n};\nvar processResponse = function(response, type) {\n  if (typeof response === \"string\" && typeof type === \"string\") {\n    if (type.match(/\\bjson\\b/)) {\n      try {\n        response = JSON.parse(response);\n      } catch (error) {\n      }\n    } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n      const script = document.createElement(\"script\");\n      script.setAttribute(\"nonce\", cspNonce());\n      script.text = response;\n      document.head.appendChild(script).parentNode.removeChild(script);\n    } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n      const parser = new DOMParser();\n      type = type.replace(/;.+/, \"\");\n      try {\n        response = parser.parseFromString(response, type);\n      } catch (error1) {\n      }\n    }\n  }\n  return response;\n};\nvar href = (element) => element.href;\nvar isCrossDomain = function(url) {\n  const originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href;\n  const urlAnchor = document.createElement(\"a\");\n  try {\n    urlAnchor.href = url;\n    return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n  } catch (e) {\n    return true;\n  }\n};\nvar preventDefault;\nvar { CustomEvent } = window;\nif (typeof CustomEvent !== \"function\") {\n  CustomEvent = function(event, params) {\n    const evt = document.createEvent(\"CustomEvent\");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt;\n  };\n  CustomEvent.prototype = window.Event.prototype;\n  ({ preventDefault } = CustomEvent.prototype);\n  CustomEvent.prototype.preventDefault = function() {\n    const result = preventDefault.call(this);\n    if (this.cancelable && !this.defaultPrevented) {\n      Object.defineProperty(this, \"defaultPrevented\", {\n        get() {\n          return true;\n        }\n      });\n    }\n    return result;\n  };\n}\nvar fire = (obj, name, data) => {\n  const event = new CustomEvent(name, {\n    bubbles: true,\n    cancelable: true,\n    detail: data\n  });\n  obj.dispatchEvent(event);\n  return !event.defaultPrevented;\n};\nvar stopEverything = (e) => {\n  fire(e.target, \"ujs:everythingStopped\");\n  e.preventDefault();\n  e.stopPropagation();\n  e.stopImmediatePropagation();\n};\nvar delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, function(e) {\n  let { target } = e;\n  while (!!(target instanceof Element) && !matches(target, selector)) {\n    target = target.parentNode;\n  }\n  if (target instanceof Element && handler.call(target, e) === false) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n});\nvar toArray = (e) => Array.prototype.slice.call(e);\nvar serializeElement = (element, additionalParam) => {\n  let inputs = [element];\n  if (matches(element, \"form\")) {\n    inputs = toArray(element.elements);\n  }\n  const params = [];\n  inputs.forEach(function(input) {\n    if (!input.name || input.disabled) {\n      return;\n    }\n    if (matches(input, \"fieldset[disabled] *\")) {\n      return;\n    }\n    if (matches(input, \"select\")) {\n      toArray(input.options).forEach(function(option) {\n        if (option.selected) {\n          params.push({\n            name: input.name,\n            value: option.value\n          });\n        }\n      });\n    } else if (input.checked || [\"radio\", \"checkbox\", \"submit\"].indexOf(input.type) === -1) {\n      params.push({\n        name: input.name,\n        value: input.value\n      });\n    }\n  });\n  if (additionalParam) {\n    params.push(additionalParam);\n  }\n  return params.map(function(param) {\n    if (param.name) {\n      return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n    } else {\n      return param;\n    }\n  }).join(\"&\");\n};\nvar formElements = (form, selector) => {\n  if (matches(form, \"form\")) {\n    return toArray(form.elements).filter((el) => matches(el, selector));\n  } else {\n    return toArray(form.querySelectorAll(selector));\n  }\n};\nvar handleConfirmWithRails = (rails) => function(e) {\n  if (!allowAction(this, rails)) {\n    stopEverything(e);\n  }\n};\nvar confirm = (message, element) => window.confirm(message);\nvar allowAction = function(element, rails) {\n  let callback;\n  const message = element.getAttribute(\"data-confirm\");\n  if (!message) {\n    return true;\n  }\n  let answer = false;\n  if (fire(element, \"confirm\")) {\n    try {\n      answer = rails.confirm(message, element);\n    } catch (error) {\n    }\n    callback = fire(element, \"confirm:complete\", [answer]);\n  }\n  return answer && callback;\n};\nvar handleDisabledElement = function(e) {\n  const element = this;\n  if (element.disabled) {\n    stopEverything(e);\n  }\n};\nvar enableElement = (e) => {\n  let element;\n  if (e instanceof Event) {\n    if (isXhrRedirect(e)) {\n      return;\n    }\n    element = e.target;\n  } else {\n    element = e;\n  }\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return enableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n    return enableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return enableFormElements(element);\n  }\n};\nvar disableElement = (e) => {\n  const element = e instanceof Event ? e.target : e;\n  if (isContentEditable(element)) {\n    return;\n  }\n  if (matches(element, linkDisableSelector)) {\n    return disableLinkElement(element);\n  } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n    return disableFormElement(element);\n  } else if (matches(element, formSubmitSelector)) {\n    return disableFormElements(element);\n  }\n};\nvar disableLinkElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    setData(element, \"ujs:enable-with\", element.innerHTML);\n    element.innerHTML = replacement;\n  }\n  element.addEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", true);\n};\nvar enableLinkElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    element.innerHTML = originalText;\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.removeEventListener(\"click\", stopEverything);\n  return setData(element, \"ujs:disabled\", null);\n};\nvar disableFormElements = (form) => formElements(form, formDisableSelector).forEach(disableFormElement);\nvar disableFormElement = function(element) {\n  if (getData(element, \"ujs:disabled\")) {\n    return;\n  }\n  const replacement = element.getAttribute(\"data-disable-with\");\n  if (replacement != null) {\n    if (matches(element, \"button\")) {\n      setData(element, \"ujs:enable-with\", element.innerHTML);\n      element.innerHTML = replacement;\n    } else {\n      setData(element, \"ujs:enable-with\", element.value);\n      element.value = replacement;\n    }\n  }\n  element.disabled = true;\n  return setData(element, \"ujs:disabled\", true);\n};\nvar enableFormElements = (form) => formElements(form, formEnableSelector).forEach((element) => enableFormElement(element));\nvar enableFormElement = function(element) {\n  const originalText = getData(element, \"ujs:enable-with\");\n  if (originalText != null) {\n    if (matches(element, \"button\")) {\n      element.innerHTML = originalText;\n    } else {\n      element.value = originalText;\n    }\n    setData(element, \"ujs:enable-with\", null);\n  }\n  element.disabled = false;\n  return setData(element, \"ujs:disabled\", null);\n};\nvar isXhrRedirect = function(event) {\n  const xhr = event.detail ? event.detail[0] : void 0;\n  return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\nvar handleMethodWithRails = (rails) => function(e) {\n  const link = this;\n  const method = link.getAttribute(\"data-method\");\n  if (!method) {\n    return;\n  }\n  if (isContentEditable(this)) {\n    return;\n  }\n  const href2 = rails.href(link);\n  const csrfToken$1 = csrfToken();\n  const csrfParam$1 = csrfParam();\n  const form = document.createElement(\"form\");\n  let formContent = `<input name='_method' value='${method}' type='hidden' />`;\n  if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href2)) {\n    formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;\n  }\n  formContent += '<input type=\"submit\" />';\n  form.method = \"post\";\n  form.action = href2;\n  form.target = link.target;\n  form.innerHTML = formContent;\n  form.style.display = \"none\";\n  document.body.appendChild(form);\n  form.querySelector('[type=\"submit\"]').click();\n  stopEverything(e);\n};\nvar isRemote = function(element) {\n  const value = element.getAttribute(\"data-remote\");\n  return value != null && value !== \"false\";\n};\nvar handleRemoteWithRails = (rails) => function(e) {\n  let data, method, url;\n  const element = this;\n  if (!isRemote(element)) {\n    return true;\n  }\n  if (!fire(element, \"ajax:before\")) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  if (isContentEditable(element)) {\n    fire(element, \"ajax:stopped\");\n    return false;\n  }\n  const withCredentials = element.getAttribute(\"data-with-credentials\");\n  const dataType = element.getAttribute(\"data-type\") || \"script\";\n  if (matches(element, formSubmitSelector)) {\n    const button = getData(element, \"ujs:submit-button\");\n    method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n    url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n    if (method.toUpperCase() === \"GET\") {\n      url = url.replace(/\\?.*$/, \"\");\n    }\n    if (element.enctype === \"multipart/form-data\") {\n      data = new FormData(element);\n      if (button != null) {\n        data.append(button.name, button.value);\n      }\n    } else {\n      data = serializeElement(element, button);\n    }\n    setData(element, \"ujs:submit-button\", null);\n    setData(element, \"ujs:submit-button-formmethod\", null);\n    setData(element, \"ujs:submit-button-formaction\", null);\n  } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n    method = element.getAttribute(\"data-method\");\n    url = element.getAttribute(\"data-url\");\n    data = serializeElement(element, element.getAttribute(\"data-params\"));\n  } else {\n    method = element.getAttribute(\"data-method\");\n    url = rails.href(element);\n    data = element.getAttribute(\"data-params\");\n  }\n  ajax({\n    type: method || \"GET\",\n    url,\n    data,\n    dataType,\n    beforeSend(xhr, options) {\n      if (fire(element, \"ajax:beforeSend\", [xhr, options])) {\n        return fire(element, \"ajax:send\", [xhr]);\n      } else {\n        fire(element, \"ajax:stopped\");\n        return false;\n      }\n    },\n    success(...args) {\n      return fire(element, \"ajax:success\", args);\n    },\n    error(...args) {\n      return fire(element, \"ajax:error\", args);\n    },\n    complete(...args) {\n      return fire(element, \"ajax:complete\", args);\n    },\n    crossDomain: isCrossDomain(url),\n    withCredentials: withCredentials != null && withCredentials !== \"false\"\n  });\n  stopEverything(e);\n};\nvar formSubmitButtonClick = function(e) {\n  const button = this;\n  const { form } = button;\n  if (!form) {\n    return;\n  }\n  if (button.name) {\n    setData(form, \"ujs:submit-button\", {\n      name: button.name,\n      value: button.value\n    });\n  }\n  setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n  setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n  return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\nvar preventInsignificantClick = function(e) {\n  const link = this;\n  const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n  const data = link.getAttribute(\"data-params\");\n  const metaClick = e.metaKey || e.ctrlKey;\n  const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n  const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n  if (nonPrimaryMouseClick || insignificantMetaClick) {\n    e.stopImmediatePropagation();\n  }\n};\nvar Rails = {\n  $,\n  ajax,\n  buttonClickSelector,\n  buttonDisableSelector,\n  confirm,\n  cspNonce,\n  csrfToken,\n  csrfParam,\n  CSRFProtection,\n  delegate,\n  disableElement,\n  enableElement,\n  fileInputSelector,\n  fire,\n  formElements,\n  formEnableSelector,\n  formDisableSelector,\n  formInputClickSelector,\n  formSubmitButtonClick,\n  formSubmitSelector,\n  getData,\n  handleDisabledElement,\n  href,\n  inputChangeSelector,\n  isCrossDomain,\n  linkClickSelector,\n  linkDisableSelector,\n  loadCSPNonce,\n  matches,\n  preventInsignificantClick,\n  refreshCSRFTokens,\n  serializeElement,\n  setData,\n  stopEverything\n};\nvar handleConfirm = handleConfirmWithRails(Rails);\nRails.handleConfirm = handleConfirm;\nvar handleMethod = handleMethodWithRails(Rails);\nRails.handleMethod = handleMethod;\nvar handleRemote = handleRemoteWithRails(Rails);\nRails.handleRemote = handleRemote;\nvar start = function() {\n  if (window._rails_loaded) {\n    throw new Error(\"rails-ujs has already been loaded!\");\n  }\n  window.addEventListener(\"pageshow\", function() {\n    $(formEnableSelector).forEach(function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    });\n    $(linkDisableSelector).forEach(function(el) {\n      if (getData(el, \"ujs:disabled\")) {\n        enableElement(el);\n      }\n    });\n  });\n  delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n  delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n  delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n  delegate(document, linkClickSelector, \"click\", handleConfirm);\n  delegate(document, linkClickSelector, \"click\", disableElement);\n  delegate(document, linkClickSelector, \"click\", handleRemote);\n  delegate(document, linkClickSelector, \"click\", handleMethod);\n  delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n  delegate(document, buttonClickSelector, \"click\", handleConfirm);\n  delegate(document, buttonClickSelector, \"click\", disableElement);\n  delegate(document, buttonClickSelector, \"click\", handleRemote);\n  delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n  delegate(document, inputChangeSelector, \"change\", handleConfirm);\n  delegate(document, inputChangeSelector, \"change\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n  delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n  delegate(document, formSubmitSelector, \"submit\", handleRemote);\n  delegate(document, formSubmitSelector, \"submit\", (e) => setTimeout(() => disableElement(e), 13));\n  delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n  delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n  delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n  delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n  delegate(document, formInputClickSelector, \"click\", handleConfirm);\n  delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n  document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n  document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n  return window._rails_loaded = true;\n};\nRails.start = start;\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n  if (jQuery.rails) {\n    throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n  }\n  jQuery.rails = Rails;\n  jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {\n    if (!options.crossDomain) {\n      return CSRFProtection(xhr);\n    }\n  });\n}\nexport {\n  Rails as default\n};\n//# sourceMappingURL=@rails_ujs.js.map\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/@rails/activestorage/app/assets/javascripts/activestorage.esm.js\nvar sparkMd5 = {\n  exports: {}\n};\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })(function(undefined$1) {\n    var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\")\n      ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex2) {\n      var bytes = [], length = hex2.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex2.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD52() {\n      this.reset();\n    }\n    SparkMD52.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD52.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD52.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD52.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD52.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD52.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD52.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD52.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD52.hash = function(str, raw) {\n      return SparkMD52.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD52.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD52.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD52.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD52.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD52.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD52.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD52.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD52.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD52.prototype.setState.call(this, state);\n    };\n    SparkMD52.ArrayBuffer.prototype.destroy = SparkMD52.prototype.destroy;\n    SparkMD52.ArrayBuffer.prototype._finish = SparkMD52.prototype._finish;\n    SparkMD52.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD52;\n  });\n})(sparkMd5);\nvar SparkMD5 = sparkMd5.exports;\nvar fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\nvar FileChecksum = class _FileChecksum {\n  static create(file, callback) {\n    const instance = new _FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer();\n    this.fileReader = new FileReader();\n    this.fileReader.addEventListener(\"load\", (event) => this.fileReaderDidLoad(event));\n    this.fileReader.addEventListener(\"error\", (event) => this.fileReaderDidError(event));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start2 = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start2 + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start2, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n};\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const { disabled } = element;\n  const { bubbles, cancelable, detail } = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\nvar BlobRecord = class {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum\n    };\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey) => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    });\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != void 0) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event) => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", (event) => this.requestDidError(event));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const { responseType, response } = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const { response } = this;\n      const { direct_upload } = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n};\nvar BlobUpload = class {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const { url, headers } = blob.directUploadData;\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event) => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", (event) => this.requestDidError(event));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const { status, response } = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n};\nvar id = 0;\nvar DirectUpload = class {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, (error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error2) => {\n        if (error2) {\n          callback(error2);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error3) => {\n            if (error3) {\n              callback(error3);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          });\n        }\n      });\n    });\n  }\n};\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\nvar DirectUploadController = class {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    });\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event) => this.uploadRequestDidProgress(event));\n  }\n};\nvar inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\nvar DirectUploadsController = class {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input) => input.files.length);\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error) => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        });\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input) => {\n      toArray(input.files).forEach((file) => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      });\n    });\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail\n    });\n  }\n};\nvar processingAttribute = \"data-direct-uploads-processing\";\nvar submitButtonsByForm = /* @__PURE__ */ new WeakMap();\nvar started = false;\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\nfunction didClick(event) {\n  const button = event.target.closest(\"button, input\");\n  if (button && button.type === \"submit\" && button.form) {\n    submitButtonsByForm.set(button.form, button);\n  }\n}\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const { inputs } = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error) => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    });\n  }\n}\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const { disabled } = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\nfunction disable(input) {\n  input.disabled = true;\n}\nfunction enable(input) {\n  input.disabled = false;\n}\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\nsetTimeout(autostart, 1);\nexport {\n  DirectUpload,\n  DirectUploadController,\n  DirectUploadsController,\n  start\n};\n//# sourceMappingURL=@rails_activestorage.js.map\n","import {\n  require_jquery\n} from \"./chunk-IL4DE2EU.js\";\nimport {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/select2/dist/js/select2.js\nvar require_select2 = __commonJS({\n  \"node_modules/select2/dist/js/select2.js\"(exports, module) {\n    (function(factory) {\n      if (typeof define === \"function\" && define.amd) {\n        define([\"jquery\"], factory);\n      } else if (typeof module === \"object\" && module.exports) {\n        module.exports = function(root, jQuery2) {\n          if (jQuery2 === void 0) {\n            if (typeof window !== \"undefined\") {\n              jQuery2 = require_jquery();\n            } else {\n              jQuery2 = require_jquery()(root);\n            }\n          }\n          factory(jQuery2);\n          return jQuery2;\n        };\n      } else {\n        factory(jQuery);\n      }\n    })(function(jQuery2) {\n      var S2 = function() {\n        if (jQuery2 && jQuery2.fn && jQuery2.fn.select2 && jQuery2.fn.select2.amd) {\n          var S22 = jQuery2.fn.select2.amd;\n        }\n        var S22;\n        (function() {\n          if (!S22 || !S22.requirejs) {\n            if (!S22) {\n              S22 = {};\n            } else {\n              require2 = S22;\n            }\n            var requirejs, require2, define2;\n            (function(undef) {\n              var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\\.js$/;\n              function hasProp(obj, prop) {\n                return hasOwn.call(obj, prop);\n              }\n              function normalize(name, baseName) {\n                var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split(\"/\"), map = config.map, starMap = map && map[\"*\"] || {};\n                if (name) {\n                  name = name.split(\"/\");\n                  lastIndex = name.length - 1;\n                  if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, \"\");\n                  }\n                  if (name[0].charAt(0) === \".\" && baseParts) {\n                    normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                    name = normalizedBaseParts.concat(name);\n                  }\n                  for (i = 0; i < name.length; i++) {\n                    part = name[i];\n                    if (part === \".\") {\n                      name.splice(i, 1);\n                      i -= 1;\n                    } else if (part === \"..\") {\n                      if (i === 0 || i === 1 && name[2] === \"..\" || name[i - 1] === \"..\") {\n                        continue;\n                      } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                      }\n                    }\n                  }\n                  name = name.join(\"/\");\n                }\n                if ((baseParts || starMap) && map) {\n                  nameParts = name.split(\"/\");\n                  for (i = nameParts.length; i > 0; i -= 1) {\n                    nameSegment = nameParts.slice(0, i).join(\"/\");\n                    if (baseParts) {\n                      for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join(\"/\")];\n                        if (mapValue) {\n                          mapValue = mapValue[nameSegment];\n                          if (mapValue) {\n                            foundMap = mapValue;\n                            foundI = i;\n                            break;\n                          }\n                        }\n                      }\n                    }\n                    if (foundMap) {\n                      break;\n                    }\n                    if (!foundStarMap && starMap && starMap[nameSegment]) {\n                      foundStarMap = starMap[nameSegment];\n                      starI = i;\n                    }\n                  }\n                  if (!foundMap && foundStarMap) {\n                    foundMap = foundStarMap;\n                    foundI = starI;\n                  }\n                  if (foundMap) {\n                    nameParts.splice(0, foundI, foundMap);\n                    name = nameParts.join(\"/\");\n                  }\n                }\n                return name;\n              }\n              function makeRequire(relName, forceSync) {\n                return function() {\n                  var args = aps.call(arguments, 0);\n                  if (typeof args[0] !== \"string\" && args.length === 1) {\n                    args.push(null);\n                  }\n                  return req.apply(undef, args.concat([relName, forceSync]));\n                };\n              }\n              function makeNormalize(relName) {\n                return function(name) {\n                  return normalize(name, relName);\n                };\n              }\n              function makeLoad(depName) {\n                return function(value) {\n                  defined[depName] = value;\n                };\n              }\n              function callDep(name) {\n                if (hasProp(waiting, name)) {\n                  var args = waiting[name];\n                  delete waiting[name];\n                  defining[name] = true;\n                  main.apply(undef, args);\n                }\n                if (!hasProp(defined, name) && !hasProp(defining, name)) {\n                  throw new Error(\"No \" + name);\n                }\n                return defined[name];\n              }\n              function splitPrefix(name) {\n                var prefix, index = name ? name.indexOf(\"!\") : -1;\n                if (index > -1) {\n                  prefix = name.substring(0, index);\n                  name = name.substring(index + 1, name.length);\n                }\n                return [prefix, name];\n              }\n              function makeRelParts(relName) {\n                return relName ? splitPrefix(relName) : [];\n              }\n              makeMap = function(name, relParts) {\n                var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1];\n                name = parts[1];\n                if (prefix) {\n                  prefix = normalize(prefix, relResourceName);\n                  plugin = callDep(prefix);\n                }\n                if (prefix) {\n                  if (plugin && plugin.normalize) {\n                    name = plugin.normalize(name, makeNormalize(relResourceName));\n                  } else {\n                    name = normalize(name, relResourceName);\n                  }\n                } else {\n                  name = normalize(name, relResourceName);\n                  parts = splitPrefix(name);\n                  prefix = parts[0];\n                  name = parts[1];\n                  if (prefix) {\n                    plugin = callDep(prefix);\n                  }\n                }\n                return {\n                  f: prefix ? prefix + \"!\" + name : name,\n                  //fullName\n                  n: name,\n                  pr: prefix,\n                  p: plugin\n                };\n              };\n              function makeConfig(name) {\n                return function() {\n                  return config && config.config && config.config[name] || {};\n                };\n              }\n              handlers = {\n                require: function(name) {\n                  return makeRequire(name);\n                },\n                exports: function(name) {\n                  var e = defined[name];\n                  if (typeof e !== \"undefined\") {\n                    return e;\n                  } else {\n                    return defined[name] = {};\n                  }\n                },\n                module: function(name) {\n                  return {\n                    id: name,\n                    uri: \"\",\n                    exports: defined[name],\n                    config: makeConfig(name)\n                  };\n                }\n              };\n              main = function(name, deps, callback, relName) {\n                var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports;\n                relName = relName || name;\n                relParts = makeRelParts(relName);\n                if (callbackType === \"undefined\" || callbackType === \"function\") {\n                  deps = !deps.length && callback.length ? [\"require\", \"exports\", \"module\"] : deps;\n                  for (i = 0; i < deps.length; i += 1) {\n                    map = makeMap(deps[i], relParts);\n                    depName = map.f;\n                    if (depName === \"require\") {\n                      args[i] = handlers.require(name);\n                    } else if (depName === \"exports\") {\n                      args[i] = handlers.exports(name);\n                      usingExports = true;\n                    } else if (depName === \"module\") {\n                      cjsModule = args[i] = handlers.module(name);\n                    } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {\n                      args[i] = callDep(depName);\n                    } else if (map.p) {\n                      map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                      args[i] = defined[depName];\n                    } else {\n                      throw new Error(name + \" missing \" + depName);\n                    }\n                  }\n                  ret = callback ? callback.apply(defined[name], args) : void 0;\n                  if (name) {\n                    if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {\n                      defined[name] = cjsModule.exports;\n                    } else if (ret !== undef || !usingExports) {\n                      defined[name] = ret;\n                    }\n                  }\n                } else if (name) {\n                  defined[name] = callback;\n                }\n              };\n              requirejs = require2 = req = function(deps, callback, relName, forceSync, alt) {\n                if (typeof deps === \"string\") {\n                  if (handlers[deps]) {\n                    return handlers[deps](callback);\n                  }\n                  return callDep(makeMap(deps, makeRelParts(callback)).f);\n                } else if (!deps.splice) {\n                  config = deps;\n                  if (config.deps) {\n                    req(config.deps, config.callback);\n                  }\n                  if (!callback) {\n                    return;\n                  }\n                  if (callback.splice) {\n                    deps = callback;\n                    callback = relName;\n                    relName = null;\n                  } else {\n                    deps = undef;\n                  }\n                }\n                callback = callback || function() {\n                };\n                if (typeof relName === \"function\") {\n                  relName = forceSync;\n                  forceSync = alt;\n                }\n                if (forceSync) {\n                  main(undef, deps, callback, relName);\n                } else {\n                  setTimeout(function() {\n                    main(undef, deps, callback, relName);\n                  }, 4);\n                }\n                return req;\n              };\n              req.config = function(cfg) {\n                return req(cfg);\n              };\n              requirejs._defined = defined;\n              define2 = function(name, deps, callback) {\n                if (typeof name !== \"string\") {\n                  throw new Error(\"See almond README: incorrect module build, no module name\");\n                }\n                if (!deps.splice) {\n                  callback = deps;\n                  deps = [];\n                }\n                if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n                  waiting[name] = [name, deps, callback];\n                }\n              };\n              define2.amd = {\n                jQuery: true\n              };\n            })();\n            S22.requirejs = requirejs;\n            S22.require = require2;\n            S22.define = define2;\n          }\n        })();\n        S22.define(\"almond\", function() {\n        });\n        S22.define(\"jquery\", [], function() {\n          var _$ = jQuery2 || $;\n          if (_$ == null && console && console.error) {\n            console.error(\n              \"Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page.\"\n            );\n          }\n          return _$;\n        });\n        S22.define(\"select2/utils\", [\n          \"jquery\"\n        ], function($2) {\n          var Utils = {};\n          Utils.Extend = function(ChildClass, SuperClass) {\n            var __hasProp = {}.hasOwnProperty;\n            function BaseConstructor() {\n              this.constructor = ChildClass;\n            }\n            for (var key in SuperClass) {\n              if (__hasProp.call(SuperClass, key)) {\n                ChildClass[key] = SuperClass[key];\n              }\n            }\n            BaseConstructor.prototype = SuperClass.prototype;\n            ChildClass.prototype = new BaseConstructor();\n            ChildClass.__super__ = SuperClass.prototype;\n            return ChildClass;\n          };\n          function getMethods(theClass) {\n            var proto = theClass.prototype;\n            var methods = [];\n            for (var methodName in proto) {\n              var m = proto[methodName];\n              if (typeof m !== \"function\") {\n                continue;\n              }\n              if (methodName === \"constructor\") {\n                continue;\n              }\n              methods.push(methodName);\n            }\n            return methods;\n          }\n          Utils.Decorate = function(SuperClass, DecoratorClass) {\n            var decoratedMethods = getMethods(DecoratorClass);\n            var superMethods = getMethods(SuperClass);\n            function DecoratedClass() {\n              var unshift = Array.prototype.unshift;\n              var argCount = DecoratorClass.prototype.constructor.length;\n              var calledConstructor = SuperClass.prototype.constructor;\n              if (argCount > 0) {\n                unshift.call(arguments, SuperClass.prototype.constructor);\n                calledConstructor = DecoratorClass.prototype.constructor;\n              }\n              calledConstructor.apply(this, arguments);\n            }\n            DecoratorClass.displayName = SuperClass.displayName;\n            function ctr() {\n              this.constructor = DecoratedClass;\n            }\n            DecoratedClass.prototype = new ctr();\n            for (var m = 0; m < superMethods.length; m++) {\n              var superMethod = superMethods[m];\n              DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod];\n            }\n            var calledMethod = function(methodName) {\n              var originalMethod = function() {\n              };\n              if (methodName in DecoratedClass.prototype) {\n                originalMethod = DecoratedClass.prototype[methodName];\n              }\n              var decoratedMethod2 = DecoratorClass.prototype[methodName];\n              return function() {\n                var unshift = Array.prototype.unshift;\n                unshift.call(arguments, originalMethod);\n                return decoratedMethod2.apply(this, arguments);\n              };\n            };\n            for (var d = 0; d < decoratedMethods.length; d++) {\n              var decoratedMethod = decoratedMethods[d];\n              DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n            }\n            return DecoratedClass;\n          };\n          var Observable = function() {\n            this.listeners = {};\n          };\n          Observable.prototype.on = function(event, callback) {\n            this.listeners = this.listeners || {};\n            if (event in this.listeners) {\n              this.listeners[event].push(callback);\n            } else {\n              this.listeners[event] = [callback];\n            }\n          };\n          Observable.prototype.trigger = function(event) {\n            var slice = Array.prototype.slice;\n            var params = slice.call(arguments, 1);\n            this.listeners = this.listeners || {};\n            if (params == null) {\n              params = [];\n            }\n            if (params.length === 0) {\n              params.push({});\n            }\n            params[0]._type = event;\n            if (event in this.listeners) {\n              this.invoke(this.listeners[event], slice.call(arguments, 1));\n            }\n            if (\"*\" in this.listeners) {\n              this.invoke(this.listeners[\"*\"], arguments);\n            }\n          };\n          Observable.prototype.invoke = function(listeners, params) {\n            for (var i = 0, len = listeners.length; i < len; i++) {\n              listeners[i].apply(this, params);\n            }\n          };\n          Utils.Observable = Observable;\n          Utils.generateChars = function(length) {\n            var chars = \"\";\n            for (var i = 0; i < length; i++) {\n              var randomChar = Math.floor(Math.random() * 36);\n              chars += randomChar.toString(36);\n            }\n            return chars;\n          };\n          Utils.bind = function(func, context) {\n            return function() {\n              func.apply(context, arguments);\n            };\n          };\n          Utils._convertData = function(data) {\n            for (var originalKey in data) {\n              var keys = originalKey.split(\"-\");\n              var dataLevel = data;\n              if (keys.length === 1) {\n                continue;\n              }\n              for (var k = 0; k < keys.length; k++) {\n                var key = keys[k];\n                key = key.substring(0, 1).toLowerCase() + key.substring(1);\n                if (!(key in dataLevel)) {\n                  dataLevel[key] = {};\n                }\n                if (k == keys.length - 1) {\n                  dataLevel[key] = data[originalKey];\n                }\n                dataLevel = dataLevel[key];\n              }\n              delete data[originalKey];\n            }\n            return data;\n          };\n          Utils.hasScroll = function(index, el) {\n            var $el = $2(el);\n            var overflowX = el.style.overflowX;\n            var overflowY = el.style.overflowY;\n            if (overflowX === overflowY && (overflowY === \"hidden\" || overflowY === \"visible\")) {\n              return false;\n            }\n            if (overflowX === \"scroll\" || overflowY === \"scroll\") {\n              return true;\n            }\n            return $el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth;\n          };\n          Utils.escapeMarkup = function(markup) {\n            var replaceMap = {\n              \"\\\\\": \"&#92;\",\n              \"&\": \"&amp;\",\n              \"<\": \"&lt;\",\n              \">\": \"&gt;\",\n              '\"': \"&quot;\",\n              \"'\": \"&#39;\",\n              \"/\": \"&#47;\"\n            };\n            if (typeof markup !== \"string\") {\n              return markup;\n            }\n            return String(markup).replace(/[&<>\"'\\/\\\\]/g, function(match) {\n              return replaceMap[match];\n            });\n          };\n          Utils.appendMany = function($element, $nodes) {\n            if ($2.fn.jquery.substr(0, 3) === \"1.7\") {\n              var $jqNodes = $2();\n              $2.map($nodes, function(node) {\n                $jqNodes = $jqNodes.add(node);\n              });\n              $nodes = $jqNodes;\n            }\n            $element.append($nodes);\n          };\n          Utils.__cache = {};\n          var id = 0;\n          Utils.GetUniqueElementId = function(element) {\n            var select2Id = element.getAttribute(\"data-select2-id\");\n            if (select2Id == null) {\n              if (element.id) {\n                select2Id = element.id;\n                element.setAttribute(\"data-select2-id\", select2Id);\n              } else {\n                element.setAttribute(\"data-select2-id\", ++id);\n                select2Id = id.toString();\n              }\n            }\n            return select2Id;\n          };\n          Utils.StoreData = function(element, name, value) {\n            var id2 = Utils.GetUniqueElementId(element);\n            if (!Utils.__cache[id2]) {\n              Utils.__cache[id2] = {};\n            }\n            Utils.__cache[id2][name] = value;\n          };\n          Utils.GetData = function(element, name) {\n            var id2 = Utils.GetUniqueElementId(element);\n            if (name) {\n              if (Utils.__cache[id2]) {\n                if (Utils.__cache[id2][name] != null) {\n                  return Utils.__cache[id2][name];\n                }\n                return $2(element).data(name);\n              }\n              return $2(element).data(name);\n            } else {\n              return Utils.__cache[id2];\n            }\n          };\n          Utils.RemoveData = function(element) {\n            var id2 = Utils.GetUniqueElementId(element);\n            if (Utils.__cache[id2] != null) {\n              delete Utils.__cache[id2];\n            }\n            element.removeAttribute(\"data-select2-id\");\n          };\n          return Utils;\n        });\n        S22.define(\"select2/results\", [\n          \"jquery\",\n          \"./utils\"\n        ], function($2, Utils) {\n          function Results($element, options, dataAdapter) {\n            this.$element = $element;\n            this.data = dataAdapter;\n            this.options = options;\n            Results.__super__.constructor.call(this);\n          }\n          Utils.Extend(Results, Utils.Observable);\n          Results.prototype.render = function() {\n            var $results = $2(\n              '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n            );\n            if (this.options.get(\"multiple\")) {\n              $results.attr(\"aria-multiselectable\", \"true\");\n            }\n            this.$results = $results;\n            return $results;\n          };\n          Results.prototype.clear = function() {\n            this.$results.empty();\n          };\n          Results.prototype.displayMessage = function(params) {\n            var escapeMarkup = this.options.get(\"escapeMarkup\");\n            this.clear();\n            this.hideLoading();\n            var $message = $2(\n              '<li role=\"alert\" aria-live=\"assertive\" class=\"select2-results__option\"></li>'\n            );\n            var message = this.options.get(\"translations\").get(params.message);\n            $message.append(\n              escapeMarkup(\n                message(params.args)\n              )\n            );\n            $message[0].className += \" select2-results__message\";\n            this.$results.append($message);\n          };\n          Results.prototype.hideMessages = function() {\n            this.$results.find(\".select2-results__message\").remove();\n          };\n          Results.prototype.append = function(data) {\n            this.hideLoading();\n            var $options = [];\n            if (data.results == null || data.results.length === 0) {\n              if (this.$results.children().length === 0) {\n                this.trigger(\"results:message\", {\n                  message: \"noResults\"\n                });\n              }\n              return;\n            }\n            data.results = this.sort(data.results);\n            for (var d = 0; d < data.results.length; d++) {\n              var item = data.results[d];\n              var $option = this.option(item);\n              $options.push($option);\n            }\n            this.$results.append($options);\n          };\n          Results.prototype.position = function($results, $dropdown) {\n            var $resultsContainer = $dropdown.find(\".select2-results\");\n            $resultsContainer.append($results);\n          };\n          Results.prototype.sort = function(data) {\n            var sorter = this.options.get(\"sorter\");\n            return sorter(data);\n          };\n          Results.prototype.highlightFirstItem = function() {\n            var $options = this.$results.find(\".select2-results__option[aria-selected]\");\n            var $selected = $options.filter(\"[aria-selected=true]\");\n            if ($selected.length > 0) {\n              $selected.first().trigger(\"mouseenter\");\n            } else {\n              $options.first().trigger(\"mouseenter\");\n            }\n            this.ensureHighlightVisible();\n          };\n          Results.prototype.setClasses = function() {\n            var self = this;\n            this.data.current(function(selected) {\n              var selectedIds = $2.map(selected, function(s) {\n                return s.id.toString();\n              });\n              var $options = self.$results.find(\".select2-results__option[aria-selected]\");\n              $options.each(function() {\n                var $option = $2(this);\n                var item = Utils.GetData(this, \"data\");\n                var id = \"\" + item.id;\n                if (item.element != null && item.element.selected || item.element == null && $2.inArray(id, selectedIds) > -1) {\n                  $option.attr(\"aria-selected\", \"true\");\n                } else {\n                  $option.attr(\"aria-selected\", \"false\");\n                }\n              });\n            });\n          };\n          Results.prototype.showLoading = function(params) {\n            this.hideLoading();\n            var loadingMore = this.options.get(\"translations\").get(\"searching\");\n            var loading = {\n              disabled: true,\n              loading: true,\n              text: loadingMore(params)\n            };\n            var $loading = this.option(loading);\n            $loading.className += \" loading-results\";\n            this.$results.prepend($loading);\n          };\n          Results.prototype.hideLoading = function() {\n            this.$results.find(\".loading-results\").remove();\n          };\n          Results.prototype.option = function(data) {\n            var option = document.createElement(\"li\");\n            option.className = \"select2-results__option\";\n            var attrs = {\n              \"role\": \"option\",\n              \"aria-selected\": \"false\"\n            };\n            var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\n            if (data.element != null && matches.call(data.element, \":disabled\") || data.element == null && data.disabled) {\n              delete attrs[\"aria-selected\"];\n              attrs[\"aria-disabled\"] = \"true\";\n            }\n            if (data.id == null) {\n              delete attrs[\"aria-selected\"];\n            }\n            if (data._resultId != null) {\n              option.id = data._resultId;\n            }\n            if (data.title) {\n              option.title = data.title;\n            }\n            if (data.children) {\n              attrs.role = \"group\";\n              attrs[\"aria-label\"] = data.text;\n              delete attrs[\"aria-selected\"];\n            }\n            for (var attr in attrs) {\n              var val = attrs[attr];\n              option.setAttribute(attr, val);\n            }\n            if (data.children) {\n              var $option = $2(option);\n              var label = document.createElement(\"strong\");\n              label.className = \"select2-results__group\";\n              var $label = $2(label);\n              this.template(data, label);\n              var $children = [];\n              for (var c = 0; c < data.children.length; c++) {\n                var child = data.children[c];\n                var $child = this.option(child);\n                $children.push($child);\n              }\n              var $childrenContainer = $2(\"<ul></ul>\", {\n                \"class\": \"select2-results__options select2-results__options--nested\"\n              });\n              $childrenContainer.append($children);\n              $option.append(label);\n              $option.append($childrenContainer);\n            } else {\n              this.template(data, option);\n            }\n            Utils.StoreData(option, \"data\", data);\n            return option;\n          };\n          Results.prototype.bind = function(container, $container) {\n            var self = this;\n            var id = container.id + \"-results\";\n            this.$results.attr(\"id\", id);\n            container.on(\"results:all\", function(params) {\n              self.clear();\n              self.append(params.data);\n              if (container.isOpen()) {\n                self.setClasses();\n                self.highlightFirstItem();\n              }\n            });\n            container.on(\"results:append\", function(params) {\n              self.append(params.data);\n              if (container.isOpen()) {\n                self.setClasses();\n              }\n            });\n            container.on(\"query\", function(params) {\n              self.hideMessages();\n              self.showLoading(params);\n            });\n            container.on(\"select\", function() {\n              if (!container.isOpen()) {\n                return;\n              }\n              self.setClasses();\n              if (self.options.get(\"scrollAfterSelect\")) {\n                self.highlightFirstItem();\n              }\n            });\n            container.on(\"unselect\", function() {\n              if (!container.isOpen()) {\n                return;\n              }\n              self.setClasses();\n              if (self.options.get(\"scrollAfterSelect\")) {\n                self.highlightFirstItem();\n              }\n            });\n            container.on(\"open\", function() {\n              self.$results.attr(\"aria-expanded\", \"true\");\n              self.$results.attr(\"aria-hidden\", \"false\");\n              self.setClasses();\n              self.ensureHighlightVisible();\n            });\n            container.on(\"close\", function() {\n              self.$results.attr(\"aria-expanded\", \"false\");\n              self.$results.attr(\"aria-hidden\", \"true\");\n              self.$results.removeAttr(\"aria-activedescendant\");\n            });\n            container.on(\"results:toggle\", function() {\n              var $highlighted = self.getHighlightedResults();\n              if ($highlighted.length === 0) {\n                return;\n              }\n              $highlighted.trigger(\"mouseup\");\n            });\n            container.on(\"results:select\", function() {\n              var $highlighted = self.getHighlightedResults();\n              if ($highlighted.length === 0) {\n                return;\n              }\n              var data = Utils.GetData($highlighted[0], \"data\");\n              if ($highlighted.attr(\"aria-selected\") == \"true\") {\n                self.trigger(\"close\", {});\n              } else {\n                self.trigger(\"select\", {\n                  data\n                });\n              }\n            });\n            container.on(\"results:previous\", function() {\n              var $highlighted = self.getHighlightedResults();\n              var $options = self.$results.find(\"[aria-selected]\");\n              var currentIndex = $options.index($highlighted);\n              if (currentIndex <= 0) {\n                return;\n              }\n              var nextIndex = currentIndex - 1;\n              if ($highlighted.length === 0) {\n                nextIndex = 0;\n              }\n              var $next = $options.eq(nextIndex);\n              $next.trigger(\"mouseenter\");\n              var currentOffset = self.$results.offset().top;\n              var nextTop = $next.offset().top;\n              var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n              if (nextIndex === 0) {\n                self.$results.scrollTop(0);\n              } else if (nextTop - currentOffset < 0) {\n                self.$results.scrollTop(nextOffset);\n              }\n            });\n            container.on(\"results:next\", function() {\n              var $highlighted = self.getHighlightedResults();\n              var $options = self.$results.find(\"[aria-selected]\");\n              var currentIndex = $options.index($highlighted);\n              var nextIndex = currentIndex + 1;\n              if (nextIndex >= $options.length) {\n                return;\n              }\n              var $next = $options.eq(nextIndex);\n              $next.trigger(\"mouseenter\");\n              var currentOffset = self.$results.offset().top + self.$results.outerHeight(false);\n              var nextBottom = $next.offset().top + $next.outerHeight(false);\n              var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n              if (nextIndex === 0) {\n                self.$results.scrollTop(0);\n              } else if (nextBottom > currentOffset) {\n                self.$results.scrollTop(nextOffset);\n              }\n            });\n            container.on(\"results:focus\", function(params) {\n              params.element.addClass(\"select2-results__option--highlighted\");\n            });\n            container.on(\"results:message\", function(params) {\n              self.displayMessage(params);\n            });\n            if ($2.fn.mousewheel) {\n              this.$results.on(\"mousewheel\", function(e) {\n                var top = self.$results.scrollTop();\n                var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n                var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n                var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n                if (isAtTop) {\n                  self.$results.scrollTop(0);\n                  e.preventDefault();\n                  e.stopPropagation();\n                } else if (isAtBottom) {\n                  self.$results.scrollTop(\n                    self.$results.get(0).scrollHeight - self.$results.height()\n                  );\n                  e.preventDefault();\n                  e.stopPropagation();\n                }\n              });\n            }\n            this.$results.on(\n              \"mouseup\",\n              \".select2-results__option[aria-selected]\",\n              function(evt) {\n                var $this = $2(this);\n                var data = Utils.GetData(this, \"data\");\n                if ($this.attr(\"aria-selected\") === \"true\") {\n                  if (self.options.get(\"multiple\")) {\n                    self.trigger(\"unselect\", {\n                      originalEvent: evt,\n                      data\n                    });\n                  } else {\n                    self.trigger(\"close\", {});\n                  }\n                  return;\n                }\n                self.trigger(\"select\", {\n                  originalEvent: evt,\n                  data\n                });\n              }\n            );\n            this.$results.on(\n              \"mouseenter\",\n              \".select2-results__option[aria-selected]\",\n              function(evt) {\n                var data = Utils.GetData(this, \"data\");\n                self.getHighlightedResults().removeClass(\"select2-results__option--highlighted\");\n                self.trigger(\"results:focus\", {\n                  data,\n                  element: $2(this)\n                });\n              }\n            );\n          };\n          Results.prototype.getHighlightedResults = function() {\n            var $highlighted = this.$results.find(\".select2-results__option--highlighted\");\n            return $highlighted;\n          };\n          Results.prototype.destroy = function() {\n            this.$results.remove();\n          };\n          Results.prototype.ensureHighlightVisible = function() {\n            var $highlighted = this.getHighlightedResults();\n            if ($highlighted.length === 0) {\n              return;\n            }\n            var $options = this.$results.find(\"[aria-selected]\");\n            var currentIndex = $options.index($highlighted);\n            var currentOffset = this.$results.offset().top;\n            var nextTop = $highlighted.offset().top;\n            var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n            var offsetDelta = nextTop - currentOffset;\n            nextOffset -= $highlighted.outerHeight(false) * 2;\n            if (currentIndex <= 2) {\n              this.$results.scrollTop(0);\n            } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n              this.$results.scrollTop(nextOffset);\n            }\n          };\n          Results.prototype.template = function(result, container) {\n            var template = this.options.get(\"templateResult\");\n            var escapeMarkup = this.options.get(\"escapeMarkup\");\n            var content = template(result, container);\n            if (content == null) {\n              container.style.display = \"none\";\n            } else if (typeof content === \"string\") {\n              container.innerHTML = escapeMarkup(content);\n            } else {\n              $2(container).append(content);\n            }\n          };\n          return Results;\n        });\n        S22.define(\"select2/keys\", [], function() {\n          var KEYS = {\n            BACKSPACE: 8,\n            TAB: 9,\n            ENTER: 13,\n            SHIFT: 16,\n            CTRL: 17,\n            ALT: 18,\n            ESC: 27,\n            SPACE: 32,\n            PAGE_UP: 33,\n            PAGE_DOWN: 34,\n            END: 35,\n            HOME: 36,\n            LEFT: 37,\n            UP: 38,\n            RIGHT: 39,\n            DOWN: 40,\n            DELETE: 46\n          };\n          return KEYS;\n        });\n        S22.define(\"select2/selection/base\", [\n          \"jquery\",\n          \"../utils\",\n          \"../keys\"\n        ], function($2, Utils, KEYS) {\n          function BaseSelection($element, options) {\n            this.$element = $element;\n            this.options = options;\n            BaseSelection.__super__.constructor.call(this);\n          }\n          Utils.Extend(BaseSelection, Utils.Observable);\n          BaseSelection.prototype.render = function() {\n            var $selection = $2(\n              '<span class=\"select2-selection\" role=\"combobox\"  aria-haspopup=\"true\" aria-expanded=\"false\"></span>'\n            );\n            this._tabindex = 0;\n            if (Utils.GetData(this.$element[0], \"old-tabindex\") != null) {\n              this._tabindex = Utils.GetData(this.$element[0], \"old-tabindex\");\n            } else if (this.$element.attr(\"tabindex\") != null) {\n              this._tabindex = this.$element.attr(\"tabindex\");\n            }\n            $selection.attr(\"title\", this.$element.attr(\"title\"));\n            $selection.attr(\"tabindex\", this._tabindex);\n            $selection.attr(\"aria-disabled\", \"false\");\n            this.$selection = $selection;\n            return $selection;\n          };\n          BaseSelection.prototype.bind = function(container, $container) {\n            var self = this;\n            var resultsId = container.id + \"-results\";\n            this.container = container;\n            this.$selection.on(\"focus\", function(evt) {\n              self.trigger(\"focus\", evt);\n            });\n            this.$selection.on(\"blur\", function(evt) {\n              self._handleBlur(evt);\n            });\n            this.$selection.on(\"keydown\", function(evt) {\n              self.trigger(\"keypress\", evt);\n              if (evt.which === KEYS.SPACE) {\n                evt.preventDefault();\n              }\n            });\n            container.on(\"results:focus\", function(params) {\n              self.$selection.attr(\"aria-activedescendant\", params.data._resultId);\n            });\n            container.on(\"selection:update\", function(params) {\n              self.update(params.data);\n            });\n            container.on(\"open\", function() {\n              self.$selection.attr(\"aria-expanded\", \"true\");\n              self.$selection.attr(\"aria-owns\", resultsId);\n              self._attachCloseHandler(container);\n            });\n            container.on(\"close\", function() {\n              self.$selection.attr(\"aria-expanded\", \"false\");\n              self.$selection.removeAttr(\"aria-activedescendant\");\n              self.$selection.removeAttr(\"aria-owns\");\n              self.$selection.trigger(\"focus\");\n              self._detachCloseHandler(container);\n            });\n            container.on(\"enable\", function() {\n              self.$selection.attr(\"tabindex\", self._tabindex);\n              self.$selection.attr(\"aria-disabled\", \"false\");\n            });\n            container.on(\"disable\", function() {\n              self.$selection.attr(\"tabindex\", \"-1\");\n              self.$selection.attr(\"aria-disabled\", \"true\");\n            });\n          };\n          BaseSelection.prototype._handleBlur = function(evt) {\n            var self = this;\n            window.setTimeout(function() {\n              if (document.activeElement == self.$selection[0] || $2.contains(self.$selection[0], document.activeElement)) {\n                return;\n              }\n              self.trigger(\"blur\", evt);\n            }, 1);\n          };\n          BaseSelection.prototype._attachCloseHandler = function(container) {\n            $2(document.body).on(\"mousedown.select2.\" + container.id, function(e) {\n              var $target = $2(e.target);\n              var $select = $target.closest(\".select2\");\n              var $all = $2(\".select2.select2-container--open\");\n              $all.each(function() {\n                if (this == $select[0]) {\n                  return;\n                }\n                var $element = Utils.GetData(this, \"element\");\n                $element.select2(\"close\");\n              });\n            });\n          };\n          BaseSelection.prototype._detachCloseHandler = function(container) {\n            $2(document.body).off(\"mousedown.select2.\" + container.id);\n          };\n          BaseSelection.prototype.position = function($selection, $container) {\n            var $selectionContainer = $container.find(\".selection\");\n            $selectionContainer.append($selection);\n          };\n          BaseSelection.prototype.destroy = function() {\n            this._detachCloseHandler(this.container);\n          };\n          BaseSelection.prototype.update = function(data) {\n            throw new Error(\"The `update` method must be defined in child classes.\");\n          };\n          BaseSelection.prototype.isEnabled = function() {\n            return !this.isDisabled();\n          };\n          BaseSelection.prototype.isDisabled = function() {\n            return this.options.get(\"disabled\");\n          };\n          return BaseSelection;\n        });\n        S22.define(\"select2/selection/single\", [\n          \"jquery\",\n          \"./base\",\n          \"../utils\",\n          \"../keys\"\n        ], function($2, BaseSelection, Utils, KEYS) {\n          function SingleSelection() {\n            SingleSelection.__super__.constructor.apply(this, arguments);\n          }\n          Utils.Extend(SingleSelection, BaseSelection);\n          SingleSelection.prototype.render = function() {\n            var $selection = SingleSelection.__super__.render.call(this);\n            $selection.addClass(\"select2-selection--single\");\n            $selection.html(\n              '<span class=\"select2-selection__rendered\"></span><span class=\"select2-selection__arrow\" role=\"presentation\"><b role=\"presentation\"></b></span>'\n            );\n            return $selection;\n          };\n          SingleSelection.prototype.bind = function(container, $container) {\n            var self = this;\n            SingleSelection.__super__.bind.apply(this, arguments);\n            var id = container.id + \"-container\";\n            this.$selection.find(\".select2-selection__rendered\").attr(\"id\", id).attr(\"role\", \"textbox\").attr(\"aria-readonly\", \"true\");\n            this.$selection.attr(\"aria-labelledby\", id);\n            this.$selection.on(\"mousedown\", function(evt) {\n              if (evt.which !== 1) {\n                return;\n              }\n              self.trigger(\"toggle\", {\n                originalEvent: evt\n              });\n            });\n            this.$selection.on(\"focus\", function(evt) {\n            });\n            this.$selection.on(\"blur\", function(evt) {\n            });\n            container.on(\"focus\", function(evt) {\n              if (!container.isOpen()) {\n                self.$selection.trigger(\"focus\");\n              }\n            });\n          };\n          SingleSelection.prototype.clear = function() {\n            var $rendered = this.$selection.find(\".select2-selection__rendered\");\n            $rendered.empty();\n            $rendered.removeAttr(\"title\");\n          };\n          SingleSelection.prototype.display = function(data, container) {\n            var template = this.options.get(\"templateSelection\");\n            var escapeMarkup = this.options.get(\"escapeMarkup\");\n            return escapeMarkup(template(data, container));\n          };\n          SingleSelection.prototype.selectionContainer = function() {\n            return $2(\"<span></span>\");\n          };\n          SingleSelection.prototype.update = function(data) {\n            if (data.length === 0) {\n              this.clear();\n              return;\n            }\n            var selection = data[0];\n            var $rendered = this.$selection.find(\".select2-selection__rendered\");\n            var formatted = this.display(selection, $rendered);\n            $rendered.empty().append(formatted);\n            var title = selection.title || selection.text;\n            if (title) {\n              $rendered.attr(\"title\", title);\n            } else {\n              $rendered.removeAttr(\"title\");\n            }\n          };\n          return SingleSelection;\n        });\n        S22.define(\"select2/selection/multiple\", [\n          \"jquery\",\n          \"./base\",\n          \"../utils\"\n        ], function($2, BaseSelection, Utils) {\n          function MultipleSelection($element, options) {\n            MultipleSelection.__super__.constructor.apply(this, arguments);\n          }\n          Utils.Extend(MultipleSelection, BaseSelection);\n          MultipleSelection.prototype.render = function() {\n            var $selection = MultipleSelection.__super__.render.call(this);\n            $selection.addClass(\"select2-selection--multiple\");\n            $selection.html(\n              '<ul class=\"select2-selection__rendered\"></ul>'\n            );\n            return $selection;\n          };\n          MultipleSelection.prototype.bind = function(container, $container) {\n            var self = this;\n            MultipleSelection.__super__.bind.apply(this, arguments);\n            this.$selection.on(\"click\", function(evt) {\n              self.trigger(\"toggle\", {\n                originalEvent: evt\n              });\n            });\n            this.$selection.on(\n              \"click\",\n              \".select2-selection__choice__remove\",\n              function(evt) {\n                if (self.isDisabled()) {\n                  return;\n                }\n                var $remove = $2(this);\n                var $selection = $remove.parent();\n                var data = Utils.GetData($selection[0], \"data\");\n                self.trigger(\"unselect\", {\n                  originalEvent: evt,\n                  data\n                });\n              }\n            );\n          };\n          MultipleSelection.prototype.clear = function() {\n            var $rendered = this.$selection.find(\".select2-selection__rendered\");\n            $rendered.empty();\n            $rendered.removeAttr(\"title\");\n          };\n          MultipleSelection.prototype.display = function(data, container) {\n            var template = this.options.get(\"templateSelection\");\n            var escapeMarkup = this.options.get(\"escapeMarkup\");\n            return escapeMarkup(template(data, container));\n          };\n          MultipleSelection.prototype.selectionContainer = function() {\n            var $container = $2(\n              '<li class=\"select2-selection__choice\"><span class=\"select2-selection__choice__remove\" role=\"presentation\">&times;</span></li>'\n            );\n            return $container;\n          };\n          MultipleSelection.prototype.update = function(data) {\n            this.clear();\n            if (data.length === 0) {\n              return;\n            }\n            var $selections = [];\n            for (var d = 0; d < data.length; d++) {\n              var selection = data[d];\n              var $selection = this.selectionContainer();\n              var formatted = this.display(selection, $selection);\n              $selection.append(formatted);\n              var title = selection.title || selection.text;\n              if (title) {\n                $selection.attr(\"title\", title);\n              }\n              Utils.StoreData($selection[0], \"data\", selection);\n              $selections.push($selection);\n            }\n            var $rendered = this.$selection.find(\".select2-selection__rendered\");\n            Utils.appendMany($rendered, $selections);\n          };\n          return MultipleSelection;\n        });\n        S22.define(\"select2/selection/placeholder\", [\n          \"../utils\"\n        ], function(Utils) {\n          function Placeholder(decorated, $element, options) {\n            this.placeholder = this.normalizePlaceholder(options.get(\"placeholder\"));\n            decorated.call(this, $element, options);\n          }\n          Placeholder.prototype.normalizePlaceholder = function(_, placeholder) {\n            if (typeof placeholder === \"string\") {\n              placeholder = {\n                id: \"\",\n                text: placeholder\n              };\n            }\n            return placeholder;\n          };\n          Placeholder.prototype.createPlaceholder = function(decorated, placeholder) {\n            var $placeholder = this.selectionContainer();\n            $placeholder.html(this.display(placeholder));\n            $placeholder.addClass(\"select2-selection__placeholder\").removeClass(\"select2-selection__choice\");\n            return $placeholder;\n          };\n          Placeholder.prototype.update = function(decorated, data) {\n            var singlePlaceholder = data.length == 1 && data[0].id != this.placeholder.id;\n            var multipleSelections = data.length > 1;\n            if (multipleSelections || singlePlaceholder) {\n              return decorated.call(this, data);\n            }\n            this.clear();\n            var $placeholder = this.createPlaceholder(this.placeholder);\n            this.$selection.find(\".select2-selection__rendered\").append($placeholder);\n          };\n          return Placeholder;\n        });\n        S22.define(\"select2/selection/allowClear\", [\n          \"jquery\",\n          \"../keys\",\n          \"../utils\"\n        ], function($2, KEYS, Utils) {\n          function AllowClear() {\n          }\n          AllowClear.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            if (this.placeholder == null) {\n              if (this.options.get(\"debug\") && window.console && console.error) {\n                console.error(\n                  \"Select2: The `allowClear` option should be used in combination with the `placeholder` option.\"\n                );\n              }\n            }\n            this.$selection.on(\n              \"mousedown\",\n              \".select2-selection__clear\",\n              function(evt) {\n                self._handleClear(evt);\n              }\n            );\n            container.on(\"keypress\", function(evt) {\n              self._handleKeyboardClear(evt, container);\n            });\n          };\n          AllowClear.prototype._handleClear = function(_, evt) {\n            if (this.isDisabled()) {\n              return;\n            }\n            var $clear = this.$selection.find(\".select2-selection__clear\");\n            if ($clear.length === 0) {\n              return;\n            }\n            evt.stopPropagation();\n            var data = Utils.GetData($clear[0], \"data\");\n            var previousVal = this.$element.val();\n            this.$element.val(this.placeholder.id);\n            var unselectData = {\n              data\n            };\n            this.trigger(\"clear\", unselectData);\n            if (unselectData.prevented) {\n              this.$element.val(previousVal);\n              return;\n            }\n            for (var d = 0; d < data.length; d++) {\n              unselectData = {\n                data: data[d]\n              };\n              this.trigger(\"unselect\", unselectData);\n              if (unselectData.prevented) {\n                this.$element.val(previousVal);\n                return;\n              }\n            }\n            this.$element.trigger(\"input\").trigger(\"change\");\n            this.trigger(\"toggle\", {});\n          };\n          AllowClear.prototype._handleKeyboardClear = function(_, evt, container) {\n            if (container.isOpen()) {\n              return;\n            }\n            if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n              this._handleClear(evt);\n            }\n          };\n          AllowClear.prototype.update = function(decorated, data) {\n            decorated.call(this, data);\n            if (this.$selection.find(\".select2-selection__placeholder\").length > 0 || data.length === 0) {\n              return;\n            }\n            var removeAll = this.options.get(\"translations\").get(\"removeAllItems\");\n            var $remove = $2(\n              '<span class=\"select2-selection__clear\" title=\"' + removeAll() + '\">&times;</span>'\n            );\n            Utils.StoreData($remove[0], \"data\", data);\n            this.$selection.find(\".select2-selection__rendered\").prepend($remove);\n          };\n          return AllowClear;\n        });\n        S22.define(\"select2/selection/search\", [\n          \"jquery\",\n          \"../utils\",\n          \"../keys\"\n        ], function($2, Utils, KEYS) {\n          function Search(decorated, $element, options) {\n            decorated.call(this, $element, options);\n          }\n          Search.prototype.render = function(decorated) {\n            var $search = $2(\n              '<li class=\"select2-search select2-search--inline\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></li>'\n            );\n            this.$searchContainer = $search;\n            this.$search = $search.find(\"input\");\n            var $rendered = decorated.call(this);\n            this._transferTabIndex();\n            return $rendered;\n          };\n          Search.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            var resultsId = container.id + \"-results\";\n            decorated.call(this, container, $container);\n            container.on(\"open\", function() {\n              self.$search.attr(\"aria-controls\", resultsId);\n              self.$search.trigger(\"focus\");\n            });\n            container.on(\"close\", function() {\n              self.$search.val(\"\");\n              self.$search.removeAttr(\"aria-controls\");\n              self.$search.removeAttr(\"aria-activedescendant\");\n              self.$search.trigger(\"focus\");\n            });\n            container.on(\"enable\", function() {\n              self.$search.prop(\"disabled\", false);\n              self._transferTabIndex();\n            });\n            container.on(\"disable\", function() {\n              self.$search.prop(\"disabled\", true);\n            });\n            container.on(\"focus\", function(evt) {\n              self.$search.trigger(\"focus\");\n            });\n            container.on(\"results:focus\", function(params) {\n              if (params.data._resultId) {\n                self.$search.attr(\"aria-activedescendant\", params.data._resultId);\n              } else {\n                self.$search.removeAttr(\"aria-activedescendant\");\n              }\n            });\n            this.$selection.on(\"focusin\", \".select2-search--inline\", function(evt) {\n              self.trigger(\"focus\", evt);\n            });\n            this.$selection.on(\"focusout\", \".select2-search--inline\", function(evt) {\n              self._handleBlur(evt);\n            });\n            this.$selection.on(\"keydown\", \".select2-search--inline\", function(evt) {\n              evt.stopPropagation();\n              self.trigger(\"keypress\", evt);\n              self._keyUpPrevented = evt.isDefaultPrevented();\n              var key = evt.which;\n              if (key === KEYS.BACKSPACE && self.$search.val() === \"\") {\n                var $previousChoice = self.$searchContainer.prev(\".select2-selection__choice\");\n                if ($previousChoice.length > 0) {\n                  var item = Utils.GetData($previousChoice[0], \"data\");\n                  self.searchRemoveChoice(item);\n                  evt.preventDefault();\n                }\n              }\n            });\n            this.$selection.on(\"click\", \".select2-search--inline\", function(evt) {\n              if (self.$search.val()) {\n                evt.stopPropagation();\n              }\n            });\n            var msie = document.documentMode;\n            var disableInputEvents = msie && msie <= 11;\n            this.$selection.on(\n              \"input.searchcheck\",\n              \".select2-search--inline\",\n              function(evt) {\n                if (disableInputEvents) {\n                  self.$selection.off(\"input.search input.searchcheck\");\n                  return;\n                }\n                self.$selection.off(\"keyup.search\");\n              }\n            );\n            this.$selection.on(\n              \"keyup.search input.search\",\n              \".select2-search--inline\",\n              function(evt) {\n                if (disableInputEvents && evt.type === \"input\") {\n                  self.$selection.off(\"input.search input.searchcheck\");\n                  return;\n                }\n                var key = evt.which;\n                if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n                  return;\n                }\n                if (key == KEYS.TAB) {\n                  return;\n                }\n                self.handleSearch(evt);\n              }\n            );\n          };\n          Search.prototype._transferTabIndex = function(decorated) {\n            this.$search.attr(\"tabindex\", this.$selection.attr(\"tabindex\"));\n            this.$selection.attr(\"tabindex\", \"-1\");\n          };\n          Search.prototype.createPlaceholder = function(decorated, placeholder) {\n            this.$search.attr(\"placeholder\", placeholder.text);\n          };\n          Search.prototype.update = function(decorated, data) {\n            var searchHadFocus = this.$search[0] == document.activeElement;\n            this.$search.attr(\"placeholder\", \"\");\n            decorated.call(this, data);\n            this.$selection.find(\".select2-selection__rendered\").append(this.$searchContainer);\n            this.resizeSearch();\n            if (searchHadFocus) {\n              this.$search.trigger(\"focus\");\n            }\n          };\n          Search.prototype.handleSearch = function() {\n            this.resizeSearch();\n            if (!this._keyUpPrevented) {\n              var input = this.$search.val();\n              this.trigger(\"query\", {\n                term: input\n              });\n            }\n            this._keyUpPrevented = false;\n          };\n          Search.prototype.searchRemoveChoice = function(decorated, item) {\n            this.trigger(\"unselect\", {\n              data: item\n            });\n            this.$search.val(item.text);\n            this.handleSearch();\n          };\n          Search.prototype.resizeSearch = function() {\n            this.$search.css(\"width\", \"25px\");\n            var width = \"\";\n            if (this.$search.attr(\"placeholder\") !== \"\") {\n              width = this.$selection.find(\".select2-selection__rendered\").width();\n            } else {\n              var minimumWidth = this.$search.val().length + 1;\n              width = minimumWidth * 0.75 + \"em\";\n            }\n            this.$search.css(\"width\", width);\n          };\n          return Search;\n        });\n        S22.define(\"select2/selection/eventRelay\", [\n          \"jquery\"\n        ], function($2) {\n          function EventRelay() {\n          }\n          EventRelay.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            var relayEvents = [\n              \"open\",\n              \"opening\",\n              \"close\",\n              \"closing\",\n              \"select\",\n              \"selecting\",\n              \"unselect\",\n              \"unselecting\",\n              \"clear\",\n              \"clearing\"\n            ];\n            var preventableEvents = [\n              \"opening\",\n              \"closing\",\n              \"selecting\",\n              \"unselecting\",\n              \"clearing\"\n            ];\n            decorated.call(this, container, $container);\n            container.on(\"*\", function(name, params) {\n              if ($2.inArray(name, relayEvents) === -1) {\n                return;\n              }\n              params = params || {};\n              var evt = $2.Event(\"select2:\" + name, {\n                params\n              });\n              self.$element.trigger(evt);\n              if ($2.inArray(name, preventableEvents) === -1) {\n                return;\n              }\n              params.prevented = evt.isDefaultPrevented();\n            });\n          };\n          return EventRelay;\n        });\n        S22.define(\"select2/translation\", [\n          \"jquery\",\n          \"require\"\n        ], function($2, require2) {\n          function Translation(dict) {\n            this.dict = dict || {};\n          }\n          Translation.prototype.all = function() {\n            return this.dict;\n          };\n          Translation.prototype.get = function(key) {\n            return this.dict[key];\n          };\n          Translation.prototype.extend = function(translation) {\n            this.dict = $2.extend({}, translation.all(), this.dict);\n          };\n          Translation._cache = {};\n          Translation.loadPath = function(path) {\n            if (!(path in Translation._cache)) {\n              var translations = require2(path);\n              Translation._cache[path] = translations;\n            }\n            return new Translation(Translation._cache[path]);\n          };\n          return Translation;\n        });\n        S22.define(\"select2/diacritics\", [], function() {\n          var diacritics = {\n            \"Ⓐ\": \"A\",\n            \"A\": \"A\",\n            \"À\": \"A\",\n            \"Á\": \"A\",\n            \"Â\": \"A\",\n            \"Ầ\": \"A\",\n            \"Ấ\": \"A\",\n            \"Ẫ\": \"A\",\n            \"Ẩ\": \"A\",\n            \"Ã\": \"A\",\n            \"Ā\": \"A\",\n            \"Ă\": \"A\",\n            \"Ằ\": \"A\",\n            \"Ắ\": \"A\",\n            \"Ẵ\": \"A\",\n            \"Ẳ\": \"A\",\n            \"Ȧ\": \"A\",\n            \"Ǡ\": \"A\",\n            \"Ä\": \"A\",\n            \"Ǟ\": \"A\",\n            \"Ả\": \"A\",\n            \"Å\": \"A\",\n            \"Ǻ\": \"A\",\n            \"Ǎ\": \"A\",\n            \"Ȁ\": \"A\",\n            \"Ȃ\": \"A\",\n            \"Ạ\": \"A\",\n            \"Ậ\": \"A\",\n            \"Ặ\": \"A\",\n            \"Ḁ\": \"A\",\n            \"Ą\": \"A\",\n            \"Ⱥ\": \"A\",\n            \"Ɐ\": \"A\",\n            \"Ꜳ\": \"AA\",\n            \"Æ\": \"AE\",\n            \"Ǽ\": \"AE\",\n            \"Ǣ\": \"AE\",\n            \"Ꜵ\": \"AO\",\n            \"Ꜷ\": \"AU\",\n            \"Ꜹ\": \"AV\",\n            \"Ꜻ\": \"AV\",\n            \"Ꜽ\": \"AY\",\n            \"Ⓑ\": \"B\",\n            \"B\": \"B\",\n            \"Ḃ\": \"B\",\n            \"Ḅ\": \"B\",\n            \"Ḇ\": \"B\",\n            \"Ƀ\": \"B\",\n            \"Ƃ\": \"B\",\n            \"Ɓ\": \"B\",\n            \"Ⓒ\": \"C\",\n            \"C\": \"C\",\n            \"Ć\": \"C\",\n            \"Ĉ\": \"C\",\n            \"Ċ\": \"C\",\n            \"Č\": \"C\",\n            \"Ç\": \"C\",\n            \"Ḉ\": \"C\",\n            \"Ƈ\": \"C\",\n            \"Ȼ\": \"C\",\n            \"Ꜿ\": \"C\",\n            \"Ⓓ\": \"D\",\n            \"D\": \"D\",\n            \"Ḋ\": \"D\",\n            \"Ď\": \"D\",\n            \"Ḍ\": \"D\",\n            \"Ḑ\": \"D\",\n            \"Ḓ\": \"D\",\n            \"Ḏ\": \"D\",\n            \"Đ\": \"D\",\n            \"Ƌ\": \"D\",\n            \"Ɗ\": \"D\",\n            \"Ɖ\": \"D\",\n            \"Ꝺ\": \"D\",\n            \"DZ\": \"DZ\",\n            \"DŽ\": \"DZ\",\n            \"Dz\": \"Dz\",\n            \"Dž\": \"Dz\",\n            \"Ⓔ\": \"E\",\n            \"E\": \"E\",\n            \"È\": \"E\",\n            \"É\": \"E\",\n            \"Ê\": \"E\",\n            \"Ề\": \"E\",\n            \"Ế\": \"E\",\n            \"Ễ\": \"E\",\n            \"Ể\": \"E\",\n            \"Ẽ\": \"E\",\n            \"Ē\": \"E\",\n            \"Ḕ\": \"E\",\n            \"Ḗ\": \"E\",\n            \"Ĕ\": \"E\",\n            \"Ė\": \"E\",\n            \"Ë\": \"E\",\n            \"Ẻ\": \"E\",\n            \"Ě\": \"E\",\n            \"Ȅ\": \"E\",\n            \"Ȇ\": \"E\",\n            \"Ẹ\": \"E\",\n            \"Ệ\": \"E\",\n            \"Ȩ\": \"E\",\n            \"Ḝ\": \"E\",\n            \"Ę\": \"E\",\n            \"Ḙ\": \"E\",\n            \"Ḛ\": \"E\",\n            \"Ɛ\": \"E\",\n            \"Ǝ\": \"E\",\n            \"Ⓕ\": \"F\",\n            \"F\": \"F\",\n            \"Ḟ\": \"F\",\n            \"Ƒ\": \"F\",\n            \"Ꝼ\": \"F\",\n            \"Ⓖ\": \"G\",\n            \"G\": \"G\",\n            \"Ǵ\": \"G\",\n            \"Ĝ\": \"G\",\n            \"Ḡ\": \"G\",\n            \"Ğ\": \"G\",\n            \"Ġ\": \"G\",\n            \"Ǧ\": \"G\",\n            \"Ģ\": \"G\",\n            \"Ǥ\": \"G\",\n            \"Ɠ\": \"G\",\n            \"Ꞡ\": \"G\",\n            \"Ᵹ\": \"G\",\n            \"Ꝿ\": \"G\",\n            \"Ⓗ\": \"H\",\n            \"H\": \"H\",\n            \"Ĥ\": \"H\",\n            \"Ḣ\": \"H\",\n            \"Ḧ\": \"H\",\n            \"Ȟ\": \"H\",\n            \"Ḥ\": \"H\",\n            \"Ḩ\": \"H\",\n            \"Ḫ\": \"H\",\n            \"Ħ\": \"H\",\n            \"Ⱨ\": \"H\",\n            \"Ⱶ\": \"H\",\n            \"Ɥ\": \"H\",\n            \"Ⓘ\": \"I\",\n            \"I\": \"I\",\n            \"Ì\": \"I\",\n            \"Í\": \"I\",\n            \"Î\": \"I\",\n            \"Ĩ\": \"I\",\n            \"Ī\": \"I\",\n            \"Ĭ\": \"I\",\n            \"İ\": \"I\",\n            \"Ï\": \"I\",\n            \"Ḯ\": \"I\",\n            \"Ỉ\": \"I\",\n            \"Ǐ\": \"I\",\n            \"Ȉ\": \"I\",\n            \"Ȋ\": \"I\",\n            \"Ị\": \"I\",\n            \"Į\": \"I\",\n            \"Ḭ\": \"I\",\n            \"Ɨ\": \"I\",\n            \"Ⓙ\": \"J\",\n            \"J\": \"J\",\n            \"Ĵ\": \"J\",\n            \"Ɉ\": \"J\",\n            \"Ⓚ\": \"K\",\n            \"K\": \"K\",\n            \"Ḱ\": \"K\",\n            \"Ǩ\": \"K\",\n            \"Ḳ\": \"K\",\n            \"Ķ\": \"K\",\n            \"Ḵ\": \"K\",\n            \"Ƙ\": \"K\",\n            \"Ⱪ\": \"K\",\n            \"Ꝁ\": \"K\",\n            \"Ꝃ\": \"K\",\n            \"Ꝅ\": \"K\",\n            \"Ꞣ\": \"K\",\n            \"Ⓛ\": \"L\",\n            \"L\": \"L\",\n            \"Ŀ\": \"L\",\n            \"Ĺ\": \"L\",\n            \"Ľ\": \"L\",\n            \"Ḷ\": \"L\",\n            \"Ḹ\": \"L\",\n            \"Ļ\": \"L\",\n            \"Ḽ\": \"L\",\n            \"Ḻ\": \"L\",\n            \"Ł\": \"L\",\n            \"Ƚ\": \"L\",\n            \"Ɫ\": \"L\",\n            \"Ⱡ\": \"L\",\n            \"Ꝉ\": \"L\",\n            \"Ꝇ\": \"L\",\n            \"Ꞁ\": \"L\",\n            \"LJ\": \"LJ\",\n            \"Lj\": \"Lj\",\n            \"Ⓜ\": \"M\",\n            \"M\": \"M\",\n            \"Ḿ\": \"M\",\n            \"Ṁ\": \"M\",\n            \"Ṃ\": \"M\",\n            \"Ɱ\": \"M\",\n            \"Ɯ\": \"M\",\n            \"Ⓝ\": \"N\",\n            \"N\": \"N\",\n            \"Ǹ\": \"N\",\n            \"Ń\": \"N\",\n            \"Ñ\": \"N\",\n            \"Ṅ\": \"N\",\n            \"Ň\": \"N\",\n            \"Ṇ\": \"N\",\n            \"Ņ\": \"N\",\n            \"Ṋ\": \"N\",\n            \"Ṉ\": \"N\",\n            \"Ƞ\": \"N\",\n            \"Ɲ\": \"N\",\n            \"Ꞑ\": \"N\",\n            \"Ꞥ\": \"N\",\n            \"NJ\": \"NJ\",\n            \"Nj\": \"Nj\",\n            \"Ⓞ\": \"O\",\n            \"O\": \"O\",\n            \"Ò\": \"O\",\n            \"Ó\": \"O\",\n            \"Ô\": \"O\",\n            \"Ồ\": \"O\",\n            \"Ố\": \"O\",\n            \"Ỗ\": \"O\",\n            \"Ổ\": \"O\",\n            \"Õ\": \"O\",\n            \"Ṍ\": \"O\",\n            \"Ȭ\": \"O\",\n            \"Ṏ\": \"O\",\n            \"Ō\": \"O\",\n            \"Ṑ\": \"O\",\n            \"Ṓ\": \"O\",\n            \"Ŏ\": \"O\",\n            \"Ȯ\": \"O\",\n            \"Ȱ\": \"O\",\n            \"Ö\": \"O\",\n            \"Ȫ\": \"O\",\n            \"Ỏ\": \"O\",\n            \"Ő\": \"O\",\n            \"Ǒ\": \"O\",\n            \"Ȍ\": \"O\",\n            \"Ȏ\": \"O\",\n            \"Ơ\": \"O\",\n            \"Ờ\": \"O\",\n            \"Ớ\": \"O\",\n            \"Ỡ\": \"O\",\n            \"Ở\": \"O\",\n            \"Ợ\": \"O\",\n            \"Ọ\": \"O\",\n            \"Ộ\": \"O\",\n            \"Ǫ\": \"O\",\n            \"Ǭ\": \"O\",\n            \"Ø\": \"O\",\n            \"Ǿ\": \"O\",\n            \"Ɔ\": \"O\",\n            \"Ɵ\": \"O\",\n            \"Ꝋ\": \"O\",\n            \"Ꝍ\": \"O\",\n            \"Œ\": \"OE\",\n            \"Ƣ\": \"OI\",\n            \"Ꝏ\": \"OO\",\n            \"Ȣ\": \"OU\",\n            \"Ⓟ\": \"P\",\n            \"P\": \"P\",\n            \"Ṕ\": \"P\",\n            \"Ṗ\": \"P\",\n            \"Ƥ\": \"P\",\n            \"Ᵽ\": \"P\",\n            \"Ꝑ\": \"P\",\n            \"Ꝓ\": \"P\",\n            \"Ꝕ\": \"P\",\n            \"Ⓠ\": \"Q\",\n            \"Q\": \"Q\",\n            \"Ꝗ\": \"Q\",\n            \"Ꝙ\": \"Q\",\n            \"Ɋ\": \"Q\",\n            \"Ⓡ\": \"R\",\n            \"R\": \"R\",\n            \"Ŕ\": \"R\",\n            \"Ṙ\": \"R\",\n            \"Ř\": \"R\",\n            \"Ȑ\": \"R\",\n            \"Ȓ\": \"R\",\n            \"Ṛ\": \"R\",\n            \"Ṝ\": \"R\",\n            \"Ŗ\": \"R\",\n            \"Ṟ\": \"R\",\n            \"Ɍ\": \"R\",\n            \"Ɽ\": \"R\",\n            \"Ꝛ\": \"R\",\n            \"Ꞧ\": \"R\",\n            \"Ꞃ\": \"R\",\n            \"Ⓢ\": \"S\",\n            \"S\": \"S\",\n            \"ẞ\": \"S\",\n            \"Ś\": \"S\",\n            \"Ṥ\": \"S\",\n            \"Ŝ\": \"S\",\n            \"Ṡ\": \"S\",\n            \"Š\": \"S\",\n            \"Ṧ\": \"S\",\n            \"Ṣ\": \"S\",\n            \"Ṩ\": \"S\",\n            \"Ș\": \"S\",\n            \"Ş\": \"S\",\n            \"Ȿ\": \"S\",\n            \"Ꞩ\": \"S\",\n            \"Ꞅ\": \"S\",\n            \"Ⓣ\": \"T\",\n            \"T\": \"T\",\n            \"Ṫ\": \"T\",\n            \"Ť\": \"T\",\n            \"Ṭ\": \"T\",\n            \"Ț\": \"T\",\n            \"Ţ\": \"T\",\n            \"Ṱ\": \"T\",\n            \"Ṯ\": \"T\",\n            \"Ŧ\": \"T\",\n            \"Ƭ\": \"T\",\n            \"Ʈ\": \"T\",\n            \"Ⱦ\": \"T\",\n            \"Ꞇ\": \"T\",\n            \"Ꜩ\": \"TZ\",\n            \"Ⓤ\": \"U\",\n            \"U\": \"U\",\n            \"Ù\": \"U\",\n            \"Ú\": \"U\",\n            \"Û\": \"U\",\n            \"Ũ\": \"U\",\n            \"Ṹ\": \"U\",\n            \"Ū\": \"U\",\n            \"Ṻ\": \"U\",\n            \"Ŭ\": \"U\",\n            \"Ü\": \"U\",\n            \"Ǜ\": \"U\",\n            \"Ǘ\": \"U\",\n            \"Ǖ\": \"U\",\n            \"Ǚ\": \"U\",\n            \"Ủ\": \"U\",\n            \"Ů\": \"U\",\n            \"Ű\": \"U\",\n            \"Ǔ\": \"U\",\n            \"Ȕ\": \"U\",\n            \"Ȗ\": \"U\",\n            \"Ư\": \"U\",\n            \"Ừ\": \"U\",\n            \"Ứ\": \"U\",\n            \"Ữ\": \"U\",\n            \"Ử\": \"U\",\n            \"Ự\": \"U\",\n            \"Ụ\": \"U\",\n            \"Ṳ\": \"U\",\n            \"Ų\": \"U\",\n            \"Ṷ\": \"U\",\n            \"Ṵ\": \"U\",\n            \"Ʉ\": \"U\",\n            \"Ⓥ\": \"V\",\n            \"V\": \"V\",\n            \"Ṽ\": \"V\",\n            \"Ṿ\": \"V\",\n            \"Ʋ\": \"V\",\n            \"Ꝟ\": \"V\",\n            \"Ʌ\": \"V\",\n            \"Ꝡ\": \"VY\",\n            \"Ⓦ\": \"W\",\n            \"W\": \"W\",\n            \"Ẁ\": \"W\",\n            \"Ẃ\": \"W\",\n            \"Ŵ\": \"W\",\n            \"Ẇ\": \"W\",\n            \"Ẅ\": \"W\",\n            \"Ẉ\": \"W\",\n            \"Ⱳ\": \"W\",\n            \"Ⓧ\": \"X\",\n            \"X\": \"X\",\n            \"Ẋ\": \"X\",\n            \"Ẍ\": \"X\",\n            \"Ⓨ\": \"Y\",\n            \"Y\": \"Y\",\n            \"Ỳ\": \"Y\",\n            \"Ý\": \"Y\",\n            \"Ŷ\": \"Y\",\n            \"Ỹ\": \"Y\",\n            \"Ȳ\": \"Y\",\n            \"Ẏ\": \"Y\",\n            \"Ÿ\": \"Y\",\n            \"Ỷ\": \"Y\",\n            \"Ỵ\": \"Y\",\n            \"Ƴ\": \"Y\",\n            \"Ɏ\": \"Y\",\n            \"Ỿ\": \"Y\",\n            \"Ⓩ\": \"Z\",\n            \"Z\": \"Z\",\n            \"Ź\": \"Z\",\n            \"Ẑ\": \"Z\",\n            \"Ż\": \"Z\",\n            \"Ž\": \"Z\",\n            \"Ẓ\": \"Z\",\n            \"Ẕ\": \"Z\",\n            \"Ƶ\": \"Z\",\n            \"Ȥ\": \"Z\",\n            \"Ɀ\": \"Z\",\n            \"Ⱬ\": \"Z\",\n            \"Ꝣ\": \"Z\",\n            \"ⓐ\": \"a\",\n            \"a\": \"a\",\n            \"ẚ\": \"a\",\n            \"à\": \"a\",\n            \"á\": \"a\",\n            \"â\": \"a\",\n            \"ầ\": \"a\",\n            \"ấ\": \"a\",\n            \"ẫ\": \"a\",\n            \"ẩ\": \"a\",\n            \"ã\": \"a\",\n            \"ā\": \"a\",\n            \"ă\": \"a\",\n            \"ằ\": \"a\",\n            \"ắ\": \"a\",\n            \"ẵ\": \"a\",\n            \"ẳ\": \"a\",\n            \"ȧ\": \"a\",\n            \"ǡ\": \"a\",\n            \"ä\": \"a\",\n            \"ǟ\": \"a\",\n            \"ả\": \"a\",\n            \"å\": \"a\",\n            \"ǻ\": \"a\",\n            \"ǎ\": \"a\",\n            \"ȁ\": \"a\",\n            \"ȃ\": \"a\",\n            \"ạ\": \"a\",\n            \"ậ\": \"a\",\n            \"ặ\": \"a\",\n            \"ḁ\": \"a\",\n            \"ą\": \"a\",\n            \"ⱥ\": \"a\",\n            \"ɐ\": \"a\",\n            \"ꜳ\": \"aa\",\n            \"æ\": \"ae\",\n            \"ǽ\": \"ae\",\n            \"ǣ\": \"ae\",\n            \"ꜵ\": \"ao\",\n            \"ꜷ\": \"au\",\n            \"ꜹ\": \"av\",\n            \"ꜻ\": \"av\",\n            \"ꜽ\": \"ay\",\n            \"ⓑ\": \"b\",\n            \"b\": \"b\",\n            \"ḃ\": \"b\",\n            \"ḅ\": \"b\",\n            \"ḇ\": \"b\",\n            \"ƀ\": \"b\",\n            \"ƃ\": \"b\",\n            \"ɓ\": \"b\",\n            \"ⓒ\": \"c\",\n            \"c\": \"c\",\n            \"ć\": \"c\",\n            \"ĉ\": \"c\",\n            \"ċ\": \"c\",\n            \"č\": \"c\",\n            \"ç\": \"c\",\n            \"ḉ\": \"c\",\n            \"ƈ\": \"c\",\n            \"ȼ\": \"c\",\n            \"ꜿ\": \"c\",\n            \"ↄ\": \"c\",\n            \"ⓓ\": \"d\",\n            \"d\": \"d\",\n            \"ḋ\": \"d\",\n            \"ď\": \"d\",\n            \"ḍ\": \"d\",\n            \"ḑ\": \"d\",\n            \"ḓ\": \"d\",\n            \"ḏ\": \"d\",\n            \"đ\": \"d\",\n            \"ƌ\": \"d\",\n            \"ɖ\": \"d\",\n            \"ɗ\": \"d\",\n            \"ꝺ\": \"d\",\n            \"dz\": \"dz\",\n            \"dž\": \"dz\",\n            \"ⓔ\": \"e\",\n            \"e\": \"e\",\n            \"è\": \"e\",\n            \"é\": \"e\",\n            \"ê\": \"e\",\n            \"ề\": \"e\",\n            \"ế\": \"e\",\n            \"ễ\": \"e\",\n            \"ể\": \"e\",\n            \"ẽ\": \"e\",\n            \"ē\": \"e\",\n            \"ḕ\": \"e\",\n            \"ḗ\": \"e\",\n            \"ĕ\": \"e\",\n            \"ė\": \"e\",\n            \"ë\": \"e\",\n            \"ẻ\": \"e\",\n            \"ě\": \"e\",\n            \"ȅ\": \"e\",\n            \"ȇ\": \"e\",\n            \"ẹ\": \"e\",\n            \"ệ\": \"e\",\n            \"ȩ\": \"e\",\n            \"ḝ\": \"e\",\n            \"ę\": \"e\",\n            \"ḙ\": \"e\",\n            \"ḛ\": \"e\",\n            \"ɇ\": \"e\",\n            \"ɛ\": \"e\",\n            \"ǝ\": \"e\",\n            \"ⓕ\": \"f\",\n            \"f\": \"f\",\n            \"ḟ\": \"f\",\n            \"ƒ\": \"f\",\n            \"ꝼ\": \"f\",\n            \"ⓖ\": \"g\",\n            \"g\": \"g\",\n            \"ǵ\": \"g\",\n            \"ĝ\": \"g\",\n            \"ḡ\": \"g\",\n            \"ğ\": \"g\",\n            \"ġ\": \"g\",\n            \"ǧ\": \"g\",\n            \"ģ\": \"g\",\n            \"ǥ\": \"g\",\n            \"ɠ\": \"g\",\n            \"ꞡ\": \"g\",\n            \"ᵹ\": \"g\",\n            \"ꝿ\": \"g\",\n            \"ⓗ\": \"h\",\n            \"h\": \"h\",\n            \"ĥ\": \"h\",\n            \"ḣ\": \"h\",\n            \"ḧ\": \"h\",\n            \"ȟ\": \"h\",\n            \"ḥ\": \"h\",\n            \"ḩ\": \"h\",\n            \"ḫ\": \"h\",\n            \"ẖ\": \"h\",\n            \"ħ\": \"h\",\n            \"ⱨ\": \"h\",\n            \"ⱶ\": \"h\",\n            \"ɥ\": \"h\",\n            \"ƕ\": \"hv\",\n            \"ⓘ\": \"i\",\n            \"i\": \"i\",\n            \"ì\": \"i\",\n            \"í\": \"i\",\n            \"î\": \"i\",\n            \"ĩ\": \"i\",\n            \"ī\": \"i\",\n            \"ĭ\": \"i\",\n            \"ï\": \"i\",\n            \"ḯ\": \"i\",\n            \"ỉ\": \"i\",\n            \"ǐ\": \"i\",\n            \"ȉ\": \"i\",\n            \"ȋ\": \"i\",\n            \"ị\": \"i\",\n            \"į\": \"i\",\n            \"ḭ\": \"i\",\n            \"ɨ\": \"i\",\n            \"ı\": \"i\",\n            \"ⓙ\": \"j\",\n            \"j\": \"j\",\n            \"ĵ\": \"j\",\n            \"ǰ\": \"j\",\n            \"ɉ\": \"j\",\n            \"ⓚ\": \"k\",\n            \"k\": \"k\",\n            \"ḱ\": \"k\",\n            \"ǩ\": \"k\",\n            \"ḳ\": \"k\",\n            \"ķ\": \"k\",\n            \"ḵ\": \"k\",\n            \"ƙ\": \"k\",\n            \"ⱪ\": \"k\",\n            \"ꝁ\": \"k\",\n            \"ꝃ\": \"k\",\n            \"ꝅ\": \"k\",\n            \"ꞣ\": \"k\",\n            \"ⓛ\": \"l\",\n            \"l\": \"l\",\n            \"ŀ\": \"l\",\n            \"ĺ\": \"l\",\n            \"ľ\": \"l\",\n            \"ḷ\": \"l\",\n            \"ḹ\": \"l\",\n            \"ļ\": \"l\",\n            \"ḽ\": \"l\",\n            \"ḻ\": \"l\",\n            \"ſ\": \"l\",\n            \"ł\": \"l\",\n            \"ƚ\": \"l\",\n            \"ɫ\": \"l\",\n            \"ⱡ\": \"l\",\n            \"ꝉ\": \"l\",\n            \"ꞁ\": \"l\",\n            \"ꝇ\": \"l\",\n            \"lj\": \"lj\",\n            \"ⓜ\": \"m\",\n            \"m\": \"m\",\n            \"ḿ\": \"m\",\n            \"ṁ\": \"m\",\n            \"ṃ\": \"m\",\n            \"ɱ\": \"m\",\n            \"ɯ\": \"m\",\n            \"ⓝ\": \"n\",\n            \"n\": \"n\",\n            \"ǹ\": \"n\",\n            \"ń\": \"n\",\n            \"ñ\": \"n\",\n            \"ṅ\": \"n\",\n            \"ň\": \"n\",\n            \"ṇ\": \"n\",\n            \"ņ\": \"n\",\n            \"ṋ\": \"n\",\n            \"ṉ\": \"n\",\n            \"ƞ\": \"n\",\n            \"ɲ\": \"n\",\n            \"ʼn\": \"n\",\n            \"ꞑ\": \"n\",\n            \"ꞥ\": \"n\",\n            \"nj\": \"nj\",\n            \"ⓞ\": \"o\",\n            \"o\": \"o\",\n            \"ò\": \"o\",\n            \"ó\": \"o\",\n            \"ô\": \"o\",\n            \"ồ\": \"o\",\n            \"ố\": \"o\",\n            \"ỗ\": \"o\",\n            \"ổ\": \"o\",\n            \"õ\": \"o\",\n            \"ṍ\": \"o\",\n            \"ȭ\": \"o\",\n            \"ṏ\": \"o\",\n            \"ō\": \"o\",\n            \"ṑ\": \"o\",\n            \"ṓ\": \"o\",\n            \"ŏ\": \"o\",\n            \"ȯ\": \"o\",\n            \"ȱ\": \"o\",\n            \"ö\": \"o\",\n            \"ȫ\": \"o\",\n            \"ỏ\": \"o\",\n            \"ő\": \"o\",\n            \"ǒ\": \"o\",\n            \"ȍ\": \"o\",\n            \"ȏ\": \"o\",\n            \"ơ\": \"o\",\n            \"ờ\": \"o\",\n            \"ớ\": \"o\",\n            \"ỡ\": \"o\",\n            \"ở\": \"o\",\n            \"ợ\": \"o\",\n            \"ọ\": \"o\",\n            \"ộ\": \"o\",\n            \"ǫ\": \"o\",\n            \"ǭ\": \"o\",\n            \"ø\": \"o\",\n            \"ǿ\": \"o\",\n            \"ɔ\": \"o\",\n            \"ꝋ\": \"o\",\n            \"ꝍ\": \"o\",\n            \"ɵ\": \"o\",\n            \"œ\": \"oe\",\n            \"ƣ\": \"oi\",\n            \"ȣ\": \"ou\",\n            \"ꝏ\": \"oo\",\n            \"ⓟ\": \"p\",\n            \"p\": \"p\",\n            \"ṕ\": \"p\",\n            \"ṗ\": \"p\",\n            \"ƥ\": \"p\",\n            \"ᵽ\": \"p\",\n            \"ꝑ\": \"p\",\n            \"ꝓ\": \"p\",\n            \"ꝕ\": \"p\",\n            \"ⓠ\": \"q\",\n            \"q\": \"q\",\n            \"ɋ\": \"q\",\n            \"ꝗ\": \"q\",\n            \"ꝙ\": \"q\",\n            \"ⓡ\": \"r\",\n            \"r\": \"r\",\n            \"ŕ\": \"r\",\n            \"ṙ\": \"r\",\n            \"ř\": \"r\",\n            \"ȑ\": \"r\",\n            \"ȓ\": \"r\",\n            \"ṛ\": \"r\",\n            \"ṝ\": \"r\",\n            \"ŗ\": \"r\",\n            \"ṟ\": \"r\",\n            \"ɍ\": \"r\",\n            \"ɽ\": \"r\",\n            \"ꝛ\": \"r\",\n            \"ꞧ\": \"r\",\n            \"ꞃ\": \"r\",\n            \"ⓢ\": \"s\",\n            \"s\": \"s\",\n            \"ß\": \"s\",\n            \"ś\": \"s\",\n            \"ṥ\": \"s\",\n            \"ŝ\": \"s\",\n            \"ṡ\": \"s\",\n            \"š\": \"s\",\n            \"ṧ\": \"s\",\n            \"ṣ\": \"s\",\n            \"ṩ\": \"s\",\n            \"ș\": \"s\",\n            \"ş\": \"s\",\n            \"ȿ\": \"s\",\n            \"ꞩ\": \"s\",\n            \"ꞅ\": \"s\",\n            \"ẛ\": \"s\",\n            \"ⓣ\": \"t\",\n            \"t\": \"t\",\n            \"ṫ\": \"t\",\n            \"ẗ\": \"t\",\n            \"ť\": \"t\",\n            \"ṭ\": \"t\",\n            \"ț\": \"t\",\n            \"ţ\": \"t\",\n            \"ṱ\": \"t\",\n            \"ṯ\": \"t\",\n            \"ŧ\": \"t\",\n            \"ƭ\": \"t\",\n            \"ʈ\": \"t\",\n            \"ⱦ\": \"t\",\n            \"ꞇ\": \"t\",\n            \"ꜩ\": \"tz\",\n            \"ⓤ\": \"u\",\n            \"u\": \"u\",\n            \"ù\": \"u\",\n            \"ú\": \"u\",\n            \"û\": \"u\",\n            \"ũ\": \"u\",\n            \"ṹ\": \"u\",\n            \"ū\": \"u\",\n            \"ṻ\": \"u\",\n            \"ŭ\": \"u\",\n            \"ü\": \"u\",\n            \"ǜ\": \"u\",\n            \"ǘ\": \"u\",\n            \"ǖ\": \"u\",\n            \"ǚ\": \"u\",\n            \"ủ\": \"u\",\n            \"ů\": \"u\",\n            \"ű\": \"u\",\n            \"ǔ\": \"u\",\n            \"ȕ\": \"u\",\n            \"ȗ\": \"u\",\n            \"ư\": \"u\",\n            \"ừ\": \"u\",\n            \"ứ\": \"u\",\n            \"ữ\": \"u\",\n            \"ử\": \"u\",\n            \"ự\": \"u\",\n            \"ụ\": \"u\",\n            \"ṳ\": \"u\",\n            \"ų\": \"u\",\n            \"ṷ\": \"u\",\n            \"ṵ\": \"u\",\n            \"ʉ\": \"u\",\n            \"ⓥ\": \"v\",\n            \"v\": \"v\",\n            \"ṽ\": \"v\",\n            \"ṿ\": \"v\",\n            \"ʋ\": \"v\",\n            \"ꝟ\": \"v\",\n            \"ʌ\": \"v\",\n            \"ꝡ\": \"vy\",\n            \"ⓦ\": \"w\",\n            \"w\": \"w\",\n            \"ẁ\": \"w\",\n            \"ẃ\": \"w\",\n            \"ŵ\": \"w\",\n            \"ẇ\": \"w\",\n            \"ẅ\": \"w\",\n            \"ẘ\": \"w\",\n            \"ẉ\": \"w\",\n            \"ⱳ\": \"w\",\n            \"ⓧ\": \"x\",\n            \"x\": \"x\",\n            \"ẋ\": \"x\",\n            \"ẍ\": \"x\",\n            \"ⓨ\": \"y\",\n            \"y\": \"y\",\n            \"ỳ\": \"y\",\n            \"ý\": \"y\",\n            \"ŷ\": \"y\",\n            \"ỹ\": \"y\",\n            \"ȳ\": \"y\",\n            \"ẏ\": \"y\",\n            \"ÿ\": \"y\",\n            \"ỷ\": \"y\",\n            \"ẙ\": \"y\",\n            \"ỵ\": \"y\",\n            \"ƴ\": \"y\",\n            \"ɏ\": \"y\",\n            \"ỿ\": \"y\",\n            \"ⓩ\": \"z\",\n            \"z\": \"z\",\n            \"ź\": \"z\",\n            \"ẑ\": \"z\",\n            \"ż\": \"z\",\n            \"ž\": \"z\",\n            \"ẓ\": \"z\",\n            \"ẕ\": \"z\",\n            \"ƶ\": \"z\",\n            \"ȥ\": \"z\",\n            \"ɀ\": \"z\",\n            \"ⱬ\": \"z\",\n            \"ꝣ\": \"z\",\n            \"Ά\": \"Α\",\n            \"Έ\": \"Ε\",\n            \"Ή\": \"Η\",\n            \"Ί\": \"Ι\",\n            \"Ϊ\": \"Ι\",\n            \"Ό\": \"Ο\",\n            \"Ύ\": \"Υ\",\n            \"Ϋ\": \"Υ\",\n            \"Ώ\": \"Ω\",\n            \"ά\": \"α\",\n            \"έ\": \"ε\",\n            \"ή\": \"η\",\n            \"ί\": \"ι\",\n            \"ϊ\": \"ι\",\n            \"ΐ\": \"ι\",\n            \"ό\": \"ο\",\n            \"ύ\": \"υ\",\n            \"ϋ\": \"υ\",\n            \"ΰ\": \"υ\",\n            \"ώ\": \"ω\",\n            \"ς\": \"σ\",\n            \"’\": \"'\"\n          };\n          return diacritics;\n        });\n        S22.define(\"select2/data/base\", [\n          \"../utils\"\n        ], function(Utils) {\n          function BaseAdapter($element, options) {\n            BaseAdapter.__super__.constructor.call(this);\n          }\n          Utils.Extend(BaseAdapter, Utils.Observable);\n          BaseAdapter.prototype.current = function(callback) {\n            throw new Error(\"The `current` method must be defined in child classes.\");\n          };\n          BaseAdapter.prototype.query = function(params, callback) {\n            throw new Error(\"The `query` method must be defined in child classes.\");\n          };\n          BaseAdapter.prototype.bind = function(container, $container) {\n          };\n          BaseAdapter.prototype.destroy = function() {\n          };\n          BaseAdapter.prototype.generateResultId = function(container, data) {\n            var id = container.id + \"-result-\";\n            id += Utils.generateChars(4);\n            if (data.id != null) {\n              id += \"-\" + data.id.toString();\n            } else {\n              id += \"-\" + Utils.generateChars(4);\n            }\n            return id;\n          };\n          return BaseAdapter;\n        });\n        S22.define(\"select2/data/select\", [\n          \"./base\",\n          \"../utils\",\n          \"jquery\"\n        ], function(BaseAdapter, Utils, $2) {\n          function SelectAdapter($element, options) {\n            this.$element = $element;\n            this.options = options;\n            SelectAdapter.__super__.constructor.call(this);\n          }\n          Utils.Extend(SelectAdapter, BaseAdapter);\n          SelectAdapter.prototype.current = function(callback) {\n            var data = [];\n            var self = this;\n            this.$element.find(\":selected\").each(function() {\n              var $option = $2(this);\n              var option = self.item($option);\n              data.push(option);\n            });\n            callback(data);\n          };\n          SelectAdapter.prototype.select = function(data) {\n            var self = this;\n            data.selected = true;\n            if ($2(data.element).is(\"option\")) {\n              data.element.selected = true;\n              this.$element.trigger(\"input\").trigger(\"change\");\n              return;\n            }\n            if (this.$element.prop(\"multiple\")) {\n              this.current(function(currentData) {\n                var val2 = [];\n                data = [data];\n                data.push.apply(data, currentData);\n                for (var d = 0; d < data.length; d++) {\n                  var id = data[d].id;\n                  if ($2.inArray(id, val2) === -1) {\n                    val2.push(id);\n                  }\n                }\n                self.$element.val(val2);\n                self.$element.trigger(\"input\").trigger(\"change\");\n              });\n            } else {\n              var val = data.id;\n              this.$element.val(val);\n              this.$element.trigger(\"input\").trigger(\"change\");\n            }\n          };\n          SelectAdapter.prototype.unselect = function(data) {\n            var self = this;\n            if (!this.$element.prop(\"multiple\")) {\n              return;\n            }\n            data.selected = false;\n            if ($2(data.element).is(\"option\")) {\n              data.element.selected = false;\n              this.$element.trigger(\"input\").trigger(\"change\");\n              return;\n            }\n            this.current(function(currentData) {\n              var val = [];\n              for (var d = 0; d < currentData.length; d++) {\n                var id = currentData[d].id;\n                if (id !== data.id && $2.inArray(id, val) === -1) {\n                  val.push(id);\n                }\n              }\n              self.$element.val(val);\n              self.$element.trigger(\"input\").trigger(\"change\");\n            });\n          };\n          SelectAdapter.prototype.bind = function(container, $container) {\n            var self = this;\n            this.container = container;\n            container.on(\"select\", function(params) {\n              self.select(params.data);\n            });\n            container.on(\"unselect\", function(params) {\n              self.unselect(params.data);\n            });\n          };\n          SelectAdapter.prototype.destroy = function() {\n            this.$element.find(\"*\").each(function() {\n              Utils.RemoveData(this);\n            });\n          };\n          SelectAdapter.prototype.query = function(params, callback) {\n            var data = [];\n            var self = this;\n            var $options = this.$element.children();\n            $options.each(function() {\n              var $option = $2(this);\n              if (!$option.is(\"option\") && !$option.is(\"optgroup\")) {\n                return;\n              }\n              var option = self.item($option);\n              var matches = self.matches(params, option);\n              if (matches !== null) {\n                data.push(matches);\n              }\n            });\n            callback({\n              results: data\n            });\n          };\n          SelectAdapter.prototype.addOptions = function($options) {\n            Utils.appendMany(this.$element, $options);\n          };\n          SelectAdapter.prototype.option = function(data) {\n            var option;\n            if (data.children) {\n              option = document.createElement(\"optgroup\");\n              option.label = data.text;\n            } else {\n              option = document.createElement(\"option\");\n              if (option.textContent !== void 0) {\n                option.textContent = data.text;\n              } else {\n                option.innerText = data.text;\n              }\n            }\n            if (data.id !== void 0) {\n              option.value = data.id;\n            }\n            if (data.disabled) {\n              option.disabled = true;\n            }\n            if (data.selected) {\n              option.selected = true;\n            }\n            if (data.title) {\n              option.title = data.title;\n            }\n            var $option = $2(option);\n            var normalizedData = this._normalizeItem(data);\n            normalizedData.element = option;\n            Utils.StoreData(option, \"data\", normalizedData);\n            return $option;\n          };\n          SelectAdapter.prototype.item = function($option) {\n            var data = {};\n            data = Utils.GetData($option[0], \"data\");\n            if (data != null) {\n              return data;\n            }\n            if ($option.is(\"option\")) {\n              data = {\n                id: $option.val(),\n                text: $option.text(),\n                disabled: $option.prop(\"disabled\"),\n                selected: $option.prop(\"selected\"),\n                title: $option.prop(\"title\")\n              };\n            } else if ($option.is(\"optgroup\")) {\n              data = {\n                text: $option.prop(\"label\"),\n                children: [],\n                title: $option.prop(\"title\")\n              };\n              var $children = $option.children(\"option\");\n              var children = [];\n              for (var c = 0; c < $children.length; c++) {\n                var $child = $2($children[c]);\n                var child = this.item($child);\n                children.push(child);\n              }\n              data.children = children;\n            }\n            data = this._normalizeItem(data);\n            data.element = $option[0];\n            Utils.StoreData($option[0], \"data\", data);\n            return data;\n          };\n          SelectAdapter.prototype._normalizeItem = function(item) {\n            if (item !== Object(item)) {\n              item = {\n                id: item,\n                text: item\n              };\n            }\n            item = $2.extend({}, {\n              text: \"\"\n            }, item);\n            var defaults = {\n              selected: false,\n              disabled: false\n            };\n            if (item.id != null) {\n              item.id = item.id.toString();\n            }\n            if (item.text != null) {\n              item.text = item.text.toString();\n            }\n            if (item._resultId == null && item.id && this.container != null) {\n              item._resultId = this.generateResultId(this.container, item);\n            }\n            return $2.extend({}, defaults, item);\n          };\n          SelectAdapter.prototype.matches = function(params, data) {\n            var matcher = this.options.get(\"matcher\");\n            return matcher(params, data);\n          };\n          return SelectAdapter;\n        });\n        S22.define(\"select2/data/array\", [\n          \"./select\",\n          \"../utils\",\n          \"jquery\"\n        ], function(SelectAdapter, Utils, $2) {\n          function ArrayAdapter($element, options) {\n            this._dataToConvert = options.get(\"data\") || [];\n            ArrayAdapter.__super__.constructor.call(this, $element, options);\n          }\n          Utils.Extend(ArrayAdapter, SelectAdapter);\n          ArrayAdapter.prototype.bind = function(container, $container) {\n            ArrayAdapter.__super__.bind.call(this, container, $container);\n            this.addOptions(this.convertToOptions(this._dataToConvert));\n          };\n          ArrayAdapter.prototype.select = function(data) {\n            var $option = this.$element.find(\"option\").filter(function(i, elm) {\n              return elm.value == data.id.toString();\n            });\n            if ($option.length === 0) {\n              $option = this.option(data);\n              this.addOptions($option);\n            }\n            ArrayAdapter.__super__.select.call(this, data);\n          };\n          ArrayAdapter.prototype.convertToOptions = function(data) {\n            var self = this;\n            var $existing = this.$element.find(\"option\");\n            var existingIds = $existing.map(function() {\n              return self.item($2(this)).id;\n            }).get();\n            var $options = [];\n            function onlyItem(item2) {\n              return function() {\n                return $2(this).val() == item2.id;\n              };\n            }\n            for (var d = 0; d < data.length; d++) {\n              var item = this._normalizeItem(data[d]);\n              if ($2.inArray(item.id, existingIds) >= 0) {\n                var $existingOption = $existing.filter(onlyItem(item));\n                var existingData = this.item($existingOption);\n                var newData = $2.extend(true, {}, item, existingData);\n                var $newOption = this.option(newData);\n                $existingOption.replaceWith($newOption);\n                continue;\n              }\n              var $option = this.option(item);\n              if (item.children) {\n                var $children = this.convertToOptions(item.children);\n                Utils.appendMany($option, $children);\n              }\n              $options.push($option);\n            }\n            return $options;\n          };\n          return ArrayAdapter;\n        });\n        S22.define(\"select2/data/ajax\", [\n          \"./array\",\n          \"../utils\",\n          \"jquery\"\n        ], function(ArrayAdapter, Utils, $2) {\n          function AjaxAdapter($element, options) {\n            this.ajaxOptions = this._applyDefaults(options.get(\"ajax\"));\n            if (this.ajaxOptions.processResults != null) {\n              this.processResults = this.ajaxOptions.processResults;\n            }\n            AjaxAdapter.__super__.constructor.call(this, $element, options);\n          }\n          Utils.Extend(AjaxAdapter, ArrayAdapter);\n          AjaxAdapter.prototype._applyDefaults = function(options) {\n            var defaults = {\n              data: function(params) {\n                return $2.extend({}, params, {\n                  q: params.term\n                });\n              },\n              transport: function(params, success, failure) {\n                var $request = $2.ajax(params);\n                $request.then(success);\n                $request.fail(failure);\n                return $request;\n              }\n            };\n            return $2.extend({}, defaults, options, true);\n          };\n          AjaxAdapter.prototype.processResults = function(results) {\n            return results;\n          };\n          AjaxAdapter.prototype.query = function(params, callback) {\n            var matches = [];\n            var self = this;\n            if (this._request != null) {\n              if ($2.isFunction(this._request.abort)) {\n                this._request.abort();\n              }\n              this._request = null;\n            }\n            var options = $2.extend({\n              type: \"GET\"\n            }, this.ajaxOptions);\n            if (typeof options.url === \"function\") {\n              options.url = options.url.call(this.$element, params);\n            }\n            if (typeof options.data === \"function\") {\n              options.data = options.data.call(this.$element, params);\n            }\n            function request() {\n              var $request = options.transport(options, function(data) {\n                var results = self.processResults(data, params);\n                if (self.options.get(\"debug\") && window.console && console.error) {\n                  if (!results || !results.results || !$2.isArray(results.results)) {\n                    console.error(\n                      \"Select2: The AJAX results did not return an array in the `results` key of the response.\"\n                    );\n                  }\n                }\n                callback(results);\n              }, function() {\n                if (\"status\" in $request && ($request.status === 0 || $request.status === \"0\")) {\n                  return;\n                }\n                self.trigger(\"results:message\", {\n                  message: \"errorLoading\"\n                });\n              });\n              self._request = $request;\n            }\n            if (this.ajaxOptions.delay && params.term != null) {\n              if (this._queryTimeout) {\n                window.clearTimeout(this._queryTimeout);\n              }\n              this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n            } else {\n              request();\n            }\n          };\n          return AjaxAdapter;\n        });\n        S22.define(\"select2/data/tags\", [\n          \"jquery\"\n        ], function($2) {\n          function Tags(decorated, $element, options) {\n            var tags = options.get(\"tags\");\n            var createTag = options.get(\"createTag\");\n            if (createTag !== void 0) {\n              this.createTag = createTag;\n            }\n            var insertTag = options.get(\"insertTag\");\n            if (insertTag !== void 0) {\n              this.insertTag = insertTag;\n            }\n            decorated.call(this, $element, options);\n            if ($2.isArray(tags)) {\n              for (var t = 0; t < tags.length; t++) {\n                var tag = tags[t];\n                var item = this._normalizeItem(tag);\n                var $option = this.option(item);\n                this.$element.append($option);\n              }\n            }\n          }\n          Tags.prototype.query = function(decorated, params, callback) {\n            var self = this;\n            this._removeOldTags();\n            if (params.term == null || params.page != null) {\n              decorated.call(this, params, callback);\n              return;\n            }\n            function wrapper(obj, child) {\n              var data = obj.results;\n              for (var i = 0; i < data.length; i++) {\n                var option = data[i];\n                var checkChildren = option.children != null && !wrapper({\n                  results: option.children\n                }, true);\n                var optionText = (option.text || \"\").toUpperCase();\n                var paramsTerm = (params.term || \"\").toUpperCase();\n                var checkText = optionText === paramsTerm;\n                if (checkText || checkChildren) {\n                  if (child) {\n                    return false;\n                  }\n                  obj.data = data;\n                  callback(obj);\n                  return;\n                }\n              }\n              if (child) {\n                return true;\n              }\n              var tag = self.createTag(params);\n              if (tag != null) {\n                var $option = self.option(tag);\n                $option.attr(\"data-select2-tag\", true);\n                self.addOptions([$option]);\n                self.insertTag(data, tag);\n              }\n              obj.results = data;\n              callback(obj);\n            }\n            decorated.call(this, params, wrapper);\n          };\n          Tags.prototype.createTag = function(decorated, params) {\n            var term = $2.trim(params.term);\n            if (term === \"\") {\n              return null;\n            }\n            return {\n              id: term,\n              text: term\n            };\n          };\n          Tags.prototype.insertTag = function(_, data, tag) {\n            data.unshift(tag);\n          };\n          Tags.prototype._removeOldTags = function(_) {\n            var $options = this.$element.find(\"option[data-select2-tag]\");\n            $options.each(function() {\n              if (this.selected) {\n                return;\n              }\n              $2(this).remove();\n            });\n          };\n          return Tags;\n        });\n        S22.define(\"select2/data/tokenizer\", [\n          \"jquery\"\n        ], function($2) {\n          function Tokenizer(decorated, $element, options) {\n            var tokenizer = options.get(\"tokenizer\");\n            if (tokenizer !== void 0) {\n              this.tokenizer = tokenizer;\n            }\n            decorated.call(this, $element, options);\n          }\n          Tokenizer.prototype.bind = function(decorated, container, $container) {\n            decorated.call(this, container, $container);\n            this.$search = container.dropdown.$search || container.selection.$search || $container.find(\".select2-search__field\");\n          };\n          Tokenizer.prototype.query = function(decorated, params, callback) {\n            var self = this;\n            function createAndSelect(data) {\n              var item = self._normalizeItem(data);\n              var $existingOptions = self.$element.find(\"option\").filter(function() {\n                return $2(this).val() === item.id;\n              });\n              if (!$existingOptions.length) {\n                var $option = self.option(item);\n                $option.attr(\"data-select2-tag\", true);\n                self._removeOldTags();\n                self.addOptions([$option]);\n              }\n              select(item);\n            }\n            function select(data) {\n              self.trigger(\"select\", {\n                data\n              });\n            }\n            params.term = params.term || \"\";\n            var tokenData = this.tokenizer(params, this.options, createAndSelect);\n            if (tokenData.term !== params.term) {\n              if (this.$search.length) {\n                this.$search.val(tokenData.term);\n                this.$search.trigger(\"focus\");\n              }\n              params.term = tokenData.term;\n            }\n            decorated.call(this, params, callback);\n          };\n          Tokenizer.prototype.tokenizer = function(_, params, options, callback) {\n            var separators = options.get(\"tokenSeparators\") || [];\n            var term = params.term;\n            var i = 0;\n            var createTag = this.createTag || function(params2) {\n              return {\n                id: params2.term,\n                text: params2.term\n              };\n            };\n            while (i < term.length) {\n              var termChar = term[i];\n              if ($2.inArray(termChar, separators) === -1) {\n                i++;\n                continue;\n              }\n              var part = term.substr(0, i);\n              var partParams = $2.extend({}, params, {\n                term: part\n              });\n              var data = createTag(partParams);\n              if (data == null) {\n                i++;\n                continue;\n              }\n              callback(data);\n              term = term.substr(i + 1) || \"\";\n              i = 0;\n            }\n            return {\n              term\n            };\n          };\n          return Tokenizer;\n        });\n        S22.define(\"select2/data/minimumInputLength\", [], function() {\n          function MinimumInputLength(decorated, $e, options) {\n            this.minimumInputLength = options.get(\"minimumInputLength\");\n            decorated.call(this, $e, options);\n          }\n          MinimumInputLength.prototype.query = function(decorated, params, callback) {\n            params.term = params.term || \"\";\n            if (params.term.length < this.minimumInputLength) {\n              this.trigger(\"results:message\", {\n                message: \"inputTooShort\",\n                args: {\n                  minimum: this.minimumInputLength,\n                  input: params.term,\n                  params\n                }\n              });\n              return;\n            }\n            decorated.call(this, params, callback);\n          };\n          return MinimumInputLength;\n        });\n        S22.define(\"select2/data/maximumInputLength\", [], function() {\n          function MaximumInputLength(decorated, $e, options) {\n            this.maximumInputLength = options.get(\"maximumInputLength\");\n            decorated.call(this, $e, options);\n          }\n          MaximumInputLength.prototype.query = function(decorated, params, callback) {\n            params.term = params.term || \"\";\n            if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) {\n              this.trigger(\"results:message\", {\n                message: \"inputTooLong\",\n                args: {\n                  maximum: this.maximumInputLength,\n                  input: params.term,\n                  params\n                }\n              });\n              return;\n            }\n            decorated.call(this, params, callback);\n          };\n          return MaximumInputLength;\n        });\n        S22.define(\"select2/data/maximumSelectionLength\", [], function() {\n          function MaximumSelectionLength(decorated, $e, options) {\n            this.maximumSelectionLength = options.get(\"maximumSelectionLength\");\n            decorated.call(this, $e, options);\n          }\n          MaximumSelectionLength.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            container.on(\"select\", function() {\n              self._checkIfMaximumSelected();\n            });\n          };\n          MaximumSelectionLength.prototype.query = function(decorated, params, callback) {\n            var self = this;\n            this._checkIfMaximumSelected(function() {\n              decorated.call(self, params, callback);\n            });\n          };\n          MaximumSelectionLength.prototype._checkIfMaximumSelected = function(_, successCallback) {\n            var self = this;\n            this.current(function(currentData) {\n              var count = currentData != null ? currentData.length : 0;\n              if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) {\n                self.trigger(\"results:message\", {\n                  message: \"maximumSelected\",\n                  args: {\n                    maximum: self.maximumSelectionLength\n                  }\n                });\n                return;\n              }\n              if (successCallback) {\n                successCallback();\n              }\n            });\n          };\n          return MaximumSelectionLength;\n        });\n        S22.define(\"select2/dropdown\", [\n          \"jquery\",\n          \"./utils\"\n        ], function($2, Utils) {\n          function Dropdown($element, options) {\n            this.$element = $element;\n            this.options = options;\n            Dropdown.__super__.constructor.call(this);\n          }\n          Utils.Extend(Dropdown, Utils.Observable);\n          Dropdown.prototype.render = function() {\n            var $dropdown = $2(\n              '<span class=\"select2-dropdown\"><span class=\"select2-results\"></span></span>'\n            );\n            $dropdown.attr(\"dir\", this.options.get(\"dir\"));\n            this.$dropdown = $dropdown;\n            return $dropdown;\n          };\n          Dropdown.prototype.bind = function() {\n          };\n          Dropdown.prototype.position = function($dropdown, $container) {\n          };\n          Dropdown.prototype.destroy = function() {\n            this.$dropdown.remove();\n          };\n          return Dropdown;\n        });\n        S22.define(\"select2/dropdown/search\", [\n          \"jquery\",\n          \"../utils\"\n        ], function($2, Utils) {\n          function Search() {\n          }\n          Search.prototype.render = function(decorated) {\n            var $rendered = decorated.call(this);\n            var $search = $2(\n              '<span class=\"select2-search select2-search--dropdown\"><input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\" spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" /></span>'\n            );\n            this.$searchContainer = $search;\n            this.$search = $search.find(\"input\");\n            $rendered.prepend($search);\n            return $rendered;\n          };\n          Search.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            var resultsId = container.id + \"-results\";\n            decorated.call(this, container, $container);\n            this.$search.on(\"keydown\", function(evt) {\n              self.trigger(\"keypress\", evt);\n              self._keyUpPrevented = evt.isDefaultPrevented();\n            });\n            this.$search.on(\"input\", function(evt) {\n              $2(this).off(\"keyup\");\n            });\n            this.$search.on(\"keyup input\", function(evt) {\n              self.handleSearch(evt);\n            });\n            container.on(\"open\", function() {\n              self.$search.attr(\"tabindex\", 0);\n              self.$search.attr(\"aria-controls\", resultsId);\n              self.$search.trigger(\"focus\");\n              window.setTimeout(function() {\n                self.$search.trigger(\"focus\");\n              }, 0);\n            });\n            container.on(\"close\", function() {\n              self.$search.attr(\"tabindex\", -1);\n              self.$search.removeAttr(\"aria-controls\");\n              self.$search.removeAttr(\"aria-activedescendant\");\n              self.$search.val(\"\");\n              self.$search.trigger(\"blur\");\n            });\n            container.on(\"focus\", function() {\n              if (!container.isOpen()) {\n                self.$search.trigger(\"focus\");\n              }\n            });\n            container.on(\"results:all\", function(params) {\n              if (params.query.term == null || params.query.term === \"\") {\n                var showSearch = self.showSearch(params);\n                if (showSearch) {\n                  self.$searchContainer.removeClass(\"select2-search--hide\");\n                } else {\n                  self.$searchContainer.addClass(\"select2-search--hide\");\n                }\n              }\n            });\n            container.on(\"results:focus\", function(params) {\n              if (params.data._resultId) {\n                self.$search.attr(\"aria-activedescendant\", params.data._resultId);\n              } else {\n                self.$search.removeAttr(\"aria-activedescendant\");\n              }\n            });\n          };\n          Search.prototype.handleSearch = function(evt) {\n            if (!this._keyUpPrevented) {\n              var input = this.$search.val();\n              this.trigger(\"query\", {\n                term: input\n              });\n            }\n            this._keyUpPrevented = false;\n          };\n          Search.prototype.showSearch = function(_, params) {\n            return true;\n          };\n          return Search;\n        });\n        S22.define(\"select2/dropdown/hidePlaceholder\", [], function() {\n          function HidePlaceholder(decorated, $element, options, dataAdapter) {\n            this.placeholder = this.normalizePlaceholder(options.get(\"placeholder\"));\n            decorated.call(this, $element, options, dataAdapter);\n          }\n          HidePlaceholder.prototype.append = function(decorated, data) {\n            data.results = this.removePlaceholder(data.results);\n            decorated.call(this, data);\n          };\n          HidePlaceholder.prototype.normalizePlaceholder = function(_, placeholder) {\n            if (typeof placeholder === \"string\") {\n              placeholder = {\n                id: \"\",\n                text: placeholder\n              };\n            }\n            return placeholder;\n          };\n          HidePlaceholder.prototype.removePlaceholder = function(_, data) {\n            var modifiedData = data.slice(0);\n            for (var d = data.length - 1; d >= 0; d--) {\n              var item = data[d];\n              if (this.placeholder.id === item.id) {\n                modifiedData.splice(d, 1);\n              }\n            }\n            return modifiedData;\n          };\n          return HidePlaceholder;\n        });\n        S22.define(\"select2/dropdown/infiniteScroll\", [\n          \"jquery\"\n        ], function($2) {\n          function InfiniteScroll(decorated, $element, options, dataAdapter) {\n            this.lastParams = {};\n            decorated.call(this, $element, options, dataAdapter);\n            this.$loadingMore = this.createLoadingMore();\n            this.loading = false;\n          }\n          InfiniteScroll.prototype.append = function(decorated, data) {\n            this.$loadingMore.remove();\n            this.loading = false;\n            decorated.call(this, data);\n            if (this.showLoadingMore(data)) {\n              this.$results.append(this.$loadingMore);\n              this.loadMoreIfNeeded();\n            }\n          };\n          InfiniteScroll.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            container.on(\"query\", function(params) {\n              self.lastParams = params;\n              self.loading = true;\n            });\n            container.on(\"query:append\", function(params) {\n              self.lastParams = params;\n              self.loading = true;\n            });\n            this.$results.on(\"scroll\", this.loadMoreIfNeeded.bind(this));\n          };\n          InfiniteScroll.prototype.loadMoreIfNeeded = function() {\n            var isLoadMoreVisible = $2.contains(\n              document.documentElement,\n              this.$loadingMore[0]\n            );\n            if (this.loading || !isLoadMoreVisible) {\n              return;\n            }\n            var currentOffset = this.$results.offset().top + this.$results.outerHeight(false);\n            var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false);\n            if (currentOffset + 50 >= loadingMoreOffset) {\n              this.loadMore();\n            }\n          };\n          InfiniteScroll.prototype.loadMore = function() {\n            this.loading = true;\n            var params = $2.extend({}, { page: 1 }, this.lastParams);\n            params.page++;\n            this.trigger(\"query:append\", params);\n          };\n          InfiniteScroll.prototype.showLoadingMore = function(_, data) {\n            return data.pagination && data.pagination.more;\n          };\n          InfiniteScroll.prototype.createLoadingMore = function() {\n            var $option = $2(\n              '<li class=\"select2-results__option select2-results__option--load-more\"role=\"option\" aria-disabled=\"true\"></li>'\n            );\n            var message = this.options.get(\"translations\").get(\"loadingMore\");\n            $option.html(message(this.lastParams));\n            return $option;\n          };\n          return InfiniteScroll;\n        });\n        S22.define(\"select2/dropdown/attachBody\", [\n          \"jquery\",\n          \"../utils\"\n        ], function($2, Utils) {\n          function AttachBody(decorated, $element, options) {\n            this.$dropdownParent = $2(options.get(\"dropdownParent\") || document.body);\n            decorated.call(this, $element, options);\n          }\n          AttachBody.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            container.on(\"open\", function() {\n              self._showDropdown();\n              self._attachPositioningHandler(container);\n              self._bindContainerResultHandlers(container);\n            });\n            container.on(\"close\", function() {\n              self._hideDropdown();\n              self._detachPositioningHandler(container);\n            });\n            this.$dropdownContainer.on(\"mousedown\", function(evt) {\n              evt.stopPropagation();\n            });\n          };\n          AttachBody.prototype.destroy = function(decorated) {\n            decorated.call(this);\n            this.$dropdownContainer.remove();\n          };\n          AttachBody.prototype.position = function(decorated, $dropdown, $container) {\n            $dropdown.attr(\"class\", $container.attr(\"class\"));\n            $dropdown.removeClass(\"select2\");\n            $dropdown.addClass(\"select2-container--open\");\n            $dropdown.css({\n              position: \"absolute\",\n              top: -999999\n            });\n            this.$container = $container;\n          };\n          AttachBody.prototype.render = function(decorated) {\n            var $container = $2(\"<span></span>\");\n            var $dropdown = decorated.call(this);\n            $container.append($dropdown);\n            this.$dropdownContainer = $container;\n            return $container;\n          };\n          AttachBody.prototype._hideDropdown = function(decorated) {\n            this.$dropdownContainer.detach();\n          };\n          AttachBody.prototype._bindContainerResultHandlers = function(decorated, container) {\n            if (this._containerResultsHandlersBound) {\n              return;\n            }\n            var self = this;\n            container.on(\"results:all\", function() {\n              self._positionDropdown();\n              self._resizeDropdown();\n            });\n            container.on(\"results:append\", function() {\n              self._positionDropdown();\n              self._resizeDropdown();\n            });\n            container.on(\"results:message\", function() {\n              self._positionDropdown();\n              self._resizeDropdown();\n            });\n            container.on(\"select\", function() {\n              self._positionDropdown();\n              self._resizeDropdown();\n            });\n            container.on(\"unselect\", function() {\n              self._positionDropdown();\n              self._resizeDropdown();\n            });\n            this._containerResultsHandlersBound = true;\n          };\n          AttachBody.prototype._attachPositioningHandler = function(decorated, container) {\n            var self = this;\n            var scrollEvent = \"scroll.select2.\" + container.id;\n            var resizeEvent = \"resize.select2.\" + container.id;\n            var orientationEvent = \"orientationchange.select2.\" + container.id;\n            var $watchers = this.$container.parents().filter(Utils.hasScroll);\n            $watchers.each(function() {\n              Utils.StoreData(this, \"select2-scroll-position\", {\n                x: $2(this).scrollLeft(),\n                y: $2(this).scrollTop()\n              });\n            });\n            $watchers.on(scrollEvent, function(ev) {\n              var position = Utils.GetData(this, \"select2-scroll-position\");\n              $2(this).scrollTop(position.y);\n            });\n            $2(window).on(\n              scrollEvent + \" \" + resizeEvent + \" \" + orientationEvent,\n              function(e) {\n                self._positionDropdown();\n                self._resizeDropdown();\n              }\n            );\n          };\n          AttachBody.prototype._detachPositioningHandler = function(decorated, container) {\n            var scrollEvent = \"scroll.select2.\" + container.id;\n            var resizeEvent = \"resize.select2.\" + container.id;\n            var orientationEvent = \"orientationchange.select2.\" + container.id;\n            var $watchers = this.$container.parents().filter(Utils.hasScroll);\n            $watchers.off(scrollEvent);\n            $2(window).off(scrollEvent + \" \" + resizeEvent + \" \" + orientationEvent);\n          };\n          AttachBody.prototype._positionDropdown = function() {\n            var $window = $2(window);\n            var isCurrentlyAbove = this.$dropdown.hasClass(\"select2-dropdown--above\");\n            var isCurrentlyBelow = this.$dropdown.hasClass(\"select2-dropdown--below\");\n            var newDirection = null;\n            var offset = this.$container.offset();\n            offset.bottom = offset.top + this.$container.outerHeight(false);\n            var container = {\n              height: this.$container.outerHeight(false)\n            };\n            container.top = offset.top;\n            container.bottom = offset.top + container.height;\n            var dropdown = {\n              height: this.$dropdown.outerHeight(false)\n            };\n            var viewport = {\n              top: $window.scrollTop(),\n              bottom: $window.scrollTop() + $window.height()\n            };\n            var enoughRoomAbove = viewport.top < offset.top - dropdown.height;\n            var enoughRoomBelow = viewport.bottom > offset.bottom + dropdown.height;\n            var css = {\n              left: offset.left,\n              top: container.bottom\n            };\n            var $offsetParent = this.$dropdownParent;\n            if ($offsetParent.css(\"position\") === \"static\") {\n              $offsetParent = $offsetParent.offsetParent();\n            }\n            var parentOffset = {\n              top: 0,\n              left: 0\n            };\n            if ($2.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected) {\n              parentOffset = $offsetParent.offset();\n            }\n            css.top -= parentOffset.top;\n            css.left -= parentOffset.left;\n            if (!isCurrentlyAbove && !isCurrentlyBelow) {\n              newDirection = \"below\";\n            }\n            if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n              newDirection = \"above\";\n            } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n              newDirection = \"below\";\n            }\n            if (newDirection == \"above\" || isCurrentlyAbove && newDirection !== \"below\") {\n              css.top = container.top - parentOffset.top - dropdown.height;\n            }\n            if (newDirection != null) {\n              this.$dropdown.removeClass(\"select2-dropdown--below select2-dropdown--above\").addClass(\"select2-dropdown--\" + newDirection);\n              this.$container.removeClass(\"select2-container--below select2-container--above\").addClass(\"select2-container--\" + newDirection);\n            }\n            this.$dropdownContainer.css(css);\n          };\n          AttachBody.prototype._resizeDropdown = function() {\n            var css = {\n              width: this.$container.outerWidth(false) + \"px\"\n            };\n            if (this.options.get(\"dropdownAutoWidth\")) {\n              css.minWidth = css.width;\n              css.position = \"relative\";\n              css.width = \"auto\";\n            }\n            this.$dropdown.css(css);\n          };\n          AttachBody.prototype._showDropdown = function(decorated) {\n            this.$dropdownContainer.appendTo(this.$dropdownParent);\n            this._positionDropdown();\n            this._resizeDropdown();\n          };\n          return AttachBody;\n        });\n        S22.define(\"select2/dropdown/minimumResultsForSearch\", [], function() {\n          function countResults(data) {\n            var count = 0;\n            for (var d = 0; d < data.length; d++) {\n              var item = data[d];\n              if (item.children) {\n                count += countResults(item.children);\n              } else {\n                count++;\n              }\n            }\n            return count;\n          }\n          function MinimumResultsForSearch(decorated, $element, options, dataAdapter) {\n            this.minimumResultsForSearch = options.get(\"minimumResultsForSearch\");\n            if (this.minimumResultsForSearch < 0) {\n              this.minimumResultsForSearch = Infinity;\n            }\n            decorated.call(this, $element, options, dataAdapter);\n          }\n          MinimumResultsForSearch.prototype.showSearch = function(decorated, params) {\n            if (countResults(params.data.results) < this.minimumResultsForSearch) {\n              return false;\n            }\n            return decorated.call(this, params);\n          };\n          return MinimumResultsForSearch;\n        });\n        S22.define(\"select2/dropdown/selectOnClose\", [\n          \"../utils\"\n        ], function(Utils) {\n          function SelectOnClose() {\n          }\n          SelectOnClose.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            container.on(\"close\", function(params) {\n              self._handleSelectOnClose(params);\n            });\n          };\n          SelectOnClose.prototype._handleSelectOnClose = function(_, params) {\n            if (params && params.originalSelect2Event != null) {\n              var event = params.originalSelect2Event;\n              if (event._type === \"select\" || event._type === \"unselect\") {\n                return;\n              }\n            }\n            var $highlightedResults = this.getHighlightedResults();\n            if ($highlightedResults.length < 1) {\n              return;\n            }\n            var data = Utils.GetData($highlightedResults[0], \"data\");\n            if (data.element != null && data.element.selected || data.element == null && data.selected) {\n              return;\n            }\n            this.trigger(\"select\", {\n              data\n            });\n          };\n          return SelectOnClose;\n        });\n        S22.define(\"select2/dropdown/closeOnSelect\", [], function() {\n          function CloseOnSelect() {\n          }\n          CloseOnSelect.prototype.bind = function(decorated, container, $container) {\n            var self = this;\n            decorated.call(this, container, $container);\n            container.on(\"select\", function(evt) {\n              self._selectTriggered(evt);\n            });\n            container.on(\"unselect\", function(evt) {\n              self._selectTriggered(evt);\n            });\n          };\n          CloseOnSelect.prototype._selectTriggered = function(_, evt) {\n            var originalEvent = evt.originalEvent;\n            if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n              return;\n            }\n            this.trigger(\"close\", {\n              originalEvent,\n              originalSelect2Event: evt\n            });\n          };\n          return CloseOnSelect;\n        });\n        S22.define(\"select2/i18n/en\", [], function() {\n          return {\n            errorLoading: function() {\n              return \"The results could not be loaded.\";\n            },\n            inputTooLong: function(args) {\n              var overChars = args.input.length - args.maximum;\n              var message = \"Please delete \" + overChars + \" character\";\n              if (overChars != 1) {\n                message += \"s\";\n              }\n              return message;\n            },\n            inputTooShort: function(args) {\n              var remainingChars = args.minimum - args.input.length;\n              var message = \"Please enter \" + remainingChars + \" or more characters\";\n              return message;\n            },\n            loadingMore: function() {\n              return \"Loading more results…\";\n            },\n            maximumSelected: function(args) {\n              var message = \"You can only select \" + args.maximum + \" item\";\n              if (args.maximum != 1) {\n                message += \"s\";\n              }\n              return message;\n            },\n            noResults: function() {\n              return \"No results found\";\n            },\n            searching: function() {\n              return \"Searching…\";\n            },\n            removeAllItems: function() {\n              return \"Remove all items\";\n            }\n          };\n        });\n        S22.define(\"select2/defaults\", [\n          \"jquery\",\n          \"require\",\n          \"./results\",\n          \"./selection/single\",\n          \"./selection/multiple\",\n          \"./selection/placeholder\",\n          \"./selection/allowClear\",\n          \"./selection/search\",\n          \"./selection/eventRelay\",\n          \"./utils\",\n          \"./translation\",\n          \"./diacritics\",\n          \"./data/select\",\n          \"./data/array\",\n          \"./data/ajax\",\n          \"./data/tags\",\n          \"./data/tokenizer\",\n          \"./data/minimumInputLength\",\n          \"./data/maximumInputLength\",\n          \"./data/maximumSelectionLength\",\n          \"./dropdown\",\n          \"./dropdown/search\",\n          \"./dropdown/hidePlaceholder\",\n          \"./dropdown/infiniteScroll\",\n          \"./dropdown/attachBody\",\n          \"./dropdown/minimumResultsForSearch\",\n          \"./dropdown/selectOnClose\",\n          \"./dropdown/closeOnSelect\",\n          \"./i18n/en\"\n        ], function($2, require2, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, EnglishTranslation) {\n          function Defaults() {\n            this.reset();\n          }\n          Defaults.prototype.apply = function(options) {\n            options = $2.extend(true, {}, this.defaults, options);\n            if (options.dataAdapter == null) {\n              if (options.ajax != null) {\n                options.dataAdapter = AjaxData;\n              } else if (options.data != null) {\n                options.dataAdapter = ArrayData;\n              } else {\n                options.dataAdapter = SelectData;\n              }\n              if (options.minimumInputLength > 0) {\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  MinimumInputLength\n                );\n              }\n              if (options.maximumInputLength > 0) {\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  MaximumInputLength\n                );\n              }\n              if (options.maximumSelectionLength > 0) {\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  MaximumSelectionLength\n                );\n              }\n              if (options.tags) {\n                options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n              }\n              if (options.tokenSeparators != null || options.tokenizer != null) {\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  Tokenizer\n                );\n              }\n              if (options.query != null) {\n                var Query = require2(options.amdBase + \"compat/query\");\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  Query\n                );\n              }\n              if (options.initSelection != null) {\n                var InitSelection = require2(options.amdBase + \"compat/initSelection\");\n                options.dataAdapter = Utils.Decorate(\n                  options.dataAdapter,\n                  InitSelection\n                );\n              }\n            }\n            if (options.resultsAdapter == null) {\n              options.resultsAdapter = ResultsList;\n              if (options.ajax != null) {\n                options.resultsAdapter = Utils.Decorate(\n                  options.resultsAdapter,\n                  InfiniteScroll\n                );\n              }\n              if (options.placeholder != null) {\n                options.resultsAdapter = Utils.Decorate(\n                  options.resultsAdapter,\n                  HidePlaceholder\n                );\n              }\n              if (options.selectOnClose) {\n                options.resultsAdapter = Utils.Decorate(\n                  options.resultsAdapter,\n                  SelectOnClose\n                );\n              }\n            }\n            if (options.dropdownAdapter == null) {\n              if (options.multiple) {\n                options.dropdownAdapter = Dropdown;\n              } else {\n                var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n                options.dropdownAdapter = SearchableDropdown;\n              }\n              if (options.minimumResultsForSearch !== 0) {\n                options.dropdownAdapter = Utils.Decorate(\n                  options.dropdownAdapter,\n                  MinimumResultsForSearch\n                );\n              }\n              if (options.closeOnSelect) {\n                options.dropdownAdapter = Utils.Decorate(\n                  options.dropdownAdapter,\n                  CloseOnSelect\n                );\n              }\n              if (options.dropdownCssClass != null || options.dropdownCss != null || options.adaptDropdownCssClass != null) {\n                var DropdownCSS = require2(options.amdBase + \"compat/dropdownCss\");\n                options.dropdownAdapter = Utils.Decorate(\n                  options.dropdownAdapter,\n                  DropdownCSS\n                );\n              }\n              options.dropdownAdapter = Utils.Decorate(\n                options.dropdownAdapter,\n                AttachBody\n              );\n            }\n            if (options.selectionAdapter == null) {\n              if (options.multiple) {\n                options.selectionAdapter = MultipleSelection;\n              } else {\n                options.selectionAdapter = SingleSelection;\n              }\n              if (options.placeholder != null) {\n                options.selectionAdapter = Utils.Decorate(\n                  options.selectionAdapter,\n                  Placeholder\n                );\n              }\n              if (options.allowClear) {\n                options.selectionAdapter = Utils.Decorate(\n                  options.selectionAdapter,\n                  AllowClear\n                );\n              }\n              if (options.multiple) {\n                options.selectionAdapter = Utils.Decorate(\n                  options.selectionAdapter,\n                  SelectionSearch\n                );\n              }\n              if (options.containerCssClass != null || options.containerCss != null || options.adaptContainerCssClass != null) {\n                var ContainerCSS = require2(options.amdBase + \"compat/containerCss\");\n                options.selectionAdapter = Utils.Decorate(\n                  options.selectionAdapter,\n                  ContainerCSS\n                );\n              }\n              options.selectionAdapter = Utils.Decorate(\n                options.selectionAdapter,\n                EventRelay\n              );\n            }\n            options.language = this._resolveLanguage(options.language);\n            options.language.push(\"en\");\n            var uniqueLanguages = [];\n            for (var l = 0; l < options.language.length; l++) {\n              var language = options.language[l];\n              if (uniqueLanguages.indexOf(language) === -1) {\n                uniqueLanguages.push(language);\n              }\n            }\n            options.language = uniqueLanguages;\n            options.translations = this._processTranslations(\n              options.language,\n              options.debug\n            );\n            return options;\n          };\n          Defaults.prototype.reset = function() {\n            function stripDiacritics(text) {\n              function match(a) {\n                return DIACRITICS[a] || a;\n              }\n              return text.replace(/[^\\u0000-\\u007E]/g, match);\n            }\n            function matcher(params, data) {\n              if ($2.trim(params.term) === \"\") {\n                return data;\n              }\n              if (data.children && data.children.length > 0) {\n                var match = $2.extend(true, {}, data);\n                for (var c = data.children.length - 1; c >= 0; c--) {\n                  var child = data.children[c];\n                  var matches = matcher(params, child);\n                  if (matches == null) {\n                    match.children.splice(c, 1);\n                  }\n                }\n                if (match.children.length > 0) {\n                  return match;\n                }\n                return matcher(params, match);\n              }\n              var original = stripDiacritics(data.text).toUpperCase();\n              var term = stripDiacritics(params.term).toUpperCase();\n              if (original.indexOf(term) > -1) {\n                return data;\n              }\n              return null;\n            }\n            this.defaults = {\n              amdBase: \"./\",\n              amdLanguageBase: \"./i18n/\",\n              closeOnSelect: true,\n              debug: false,\n              dropdownAutoWidth: false,\n              escapeMarkup: Utils.escapeMarkup,\n              language: {},\n              matcher,\n              minimumInputLength: 0,\n              maximumInputLength: 0,\n              maximumSelectionLength: 0,\n              minimumResultsForSearch: 0,\n              selectOnClose: false,\n              scrollAfterSelect: false,\n              sorter: function(data) {\n                return data;\n              },\n              templateResult: function(result) {\n                return result.text;\n              },\n              templateSelection: function(selection) {\n                return selection.text;\n              },\n              theme: \"default\",\n              width: \"resolve\"\n            };\n          };\n          Defaults.prototype.applyFromElement = function(options, $element) {\n            var optionLanguage = options.language;\n            var defaultLanguage = this.defaults.language;\n            var elementLanguage = $element.prop(\"lang\");\n            var parentLanguage = $element.closest(\"[lang]\").prop(\"lang\");\n            var languages = Array.prototype.concat.call(\n              this._resolveLanguage(elementLanguage),\n              this._resolveLanguage(optionLanguage),\n              this._resolveLanguage(defaultLanguage),\n              this._resolveLanguage(parentLanguage)\n            );\n            options.language = languages;\n            return options;\n          };\n          Defaults.prototype._resolveLanguage = function(language) {\n            if (!language) {\n              return [];\n            }\n            if ($2.isEmptyObject(language)) {\n              return [];\n            }\n            if ($2.isPlainObject(language)) {\n              return [language];\n            }\n            var languages;\n            if (!$2.isArray(language)) {\n              languages = [language];\n            } else {\n              languages = language;\n            }\n            var resolvedLanguages = [];\n            for (var l = 0; l < languages.length; l++) {\n              resolvedLanguages.push(languages[l]);\n              if (typeof languages[l] === \"string\" && languages[l].indexOf(\"-\") > 0) {\n                var languageParts = languages[l].split(\"-\");\n                var baseLanguage = languageParts[0];\n                resolvedLanguages.push(baseLanguage);\n              }\n            }\n            return resolvedLanguages;\n          };\n          Defaults.prototype._processTranslations = function(languages, debug) {\n            var translations = new Translation();\n            for (var l = 0; l < languages.length; l++) {\n              var languageData = new Translation();\n              var language = languages[l];\n              if (typeof language === \"string\") {\n                try {\n                  languageData = Translation.loadPath(language);\n                } catch (e) {\n                  try {\n                    language = this.defaults.amdLanguageBase + language;\n                    languageData = Translation.loadPath(language);\n                  } catch (ex) {\n                    if (debug && window.console && console.warn) {\n                      console.warn(\n                        'Select2: The language file for \"' + language + '\" could not be automatically loaded. A fallback will be used instead.'\n                      );\n                    }\n                  }\n                }\n              } else if ($2.isPlainObject(language)) {\n                languageData = new Translation(language);\n              } else {\n                languageData = language;\n              }\n              translations.extend(languageData);\n            }\n            return translations;\n          };\n          Defaults.prototype.set = function(key, value) {\n            var camelKey = $2.camelCase(key);\n            var data = {};\n            data[camelKey] = value;\n            var convertedData = Utils._convertData(data);\n            $2.extend(true, this.defaults, convertedData);\n          };\n          var defaults = new Defaults();\n          return defaults;\n        });\n        S22.define(\"select2/options\", [\n          \"require\",\n          \"jquery\",\n          \"./defaults\",\n          \"./utils\"\n        ], function(require2, $2, Defaults, Utils) {\n          function Options(options, $element) {\n            this.options = options;\n            if ($element != null) {\n              this.fromElement($element);\n            }\n            if ($element != null) {\n              this.options = Defaults.applyFromElement(this.options, $element);\n            }\n            this.options = Defaults.apply(this.options);\n            if ($element && $element.is(\"input\")) {\n              var InputCompat = require2(this.get(\"amdBase\") + \"compat/inputData\");\n              this.options.dataAdapter = Utils.Decorate(\n                this.options.dataAdapter,\n                InputCompat\n              );\n            }\n          }\n          Options.prototype.fromElement = function($e) {\n            var excludedData = [\"select2\"];\n            if (this.options.multiple == null) {\n              this.options.multiple = $e.prop(\"multiple\");\n            }\n            if (this.options.disabled == null) {\n              this.options.disabled = $e.prop(\"disabled\");\n            }\n            if (this.options.dir == null) {\n              if ($e.prop(\"dir\")) {\n                this.options.dir = $e.prop(\"dir\");\n              } else if ($e.closest(\"[dir]\").prop(\"dir\")) {\n                this.options.dir = $e.closest(\"[dir]\").prop(\"dir\");\n              } else {\n                this.options.dir = \"ltr\";\n              }\n            }\n            $e.prop(\"disabled\", this.options.disabled);\n            $e.prop(\"multiple\", this.options.multiple);\n            if (Utils.GetData($e[0], \"select2Tags\")) {\n              if (this.options.debug && window.console && console.warn) {\n                console.warn(\n                  'Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags=\"true\"` attributes and will be removed in future versions of Select2.'\n                );\n              }\n              Utils.StoreData($e[0], \"data\", Utils.GetData($e[0], \"select2Tags\"));\n              Utils.StoreData($e[0], \"tags\", true);\n            }\n            if (Utils.GetData($e[0], \"ajaxUrl\")) {\n              if (this.options.debug && window.console && console.warn) {\n                console.warn(\n                  \"Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2.\"\n                );\n              }\n              $e.attr(\"ajax--url\", Utils.GetData($e[0], \"ajaxUrl\"));\n              Utils.StoreData($e[0], \"ajax-Url\", Utils.GetData($e[0], \"ajaxUrl\"));\n            }\n            var dataset = {};\n            function upperCaseLetter(_, letter) {\n              return letter.toUpperCase();\n            }\n            for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n              var attributeName = $e[0].attributes[attr].name;\n              var prefix = \"data-\";\n              if (attributeName.substr(0, prefix.length) == prefix) {\n                var dataName = attributeName.substring(prefix.length);\n                var dataValue = Utils.GetData($e[0], dataName);\n                var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n                dataset[camelDataName] = dataValue;\n              }\n            }\n            if ($2.fn.jquery && $2.fn.jquery.substr(0, 2) == \"1.\" && $e[0].dataset) {\n              dataset = $2.extend(true, {}, $e[0].dataset, dataset);\n            }\n            var data = $2.extend(true, {}, Utils.GetData($e[0]), dataset);\n            data = Utils._convertData(data);\n            for (var key in data) {\n              if ($2.inArray(key, excludedData) > -1) {\n                continue;\n              }\n              if ($2.isPlainObject(this.options[key])) {\n                $2.extend(this.options[key], data[key]);\n              } else {\n                this.options[key] = data[key];\n              }\n            }\n            return this;\n          };\n          Options.prototype.get = function(key) {\n            return this.options[key];\n          };\n          Options.prototype.set = function(key, val) {\n            this.options[key] = val;\n          };\n          return Options;\n        });\n        S22.define(\"select2/core\", [\n          \"jquery\",\n          \"./options\",\n          \"./utils\",\n          \"./keys\"\n        ], function($2, Options, Utils, KEYS) {\n          var Select2 = function($element, options) {\n            if (Utils.GetData($element[0], \"select2\") != null) {\n              Utils.GetData($element[0], \"select2\").destroy();\n            }\n            this.$element = $element;\n            this.id = this._generateId($element);\n            options = options || {};\n            this.options = new Options(options, $element);\n            Select2.__super__.constructor.call(this);\n            var tabindex = $element.attr(\"tabindex\") || 0;\n            Utils.StoreData($element[0], \"old-tabindex\", tabindex);\n            $element.attr(\"tabindex\", \"-1\");\n            var DataAdapter = this.options.get(\"dataAdapter\");\n            this.dataAdapter = new DataAdapter($element, this.options);\n            var $container = this.render();\n            this._placeContainer($container);\n            var SelectionAdapter = this.options.get(\"selectionAdapter\");\n            this.selection = new SelectionAdapter($element, this.options);\n            this.$selection = this.selection.render();\n            this.selection.position(this.$selection, $container);\n            var DropdownAdapter = this.options.get(\"dropdownAdapter\");\n            this.dropdown = new DropdownAdapter($element, this.options);\n            this.$dropdown = this.dropdown.render();\n            this.dropdown.position(this.$dropdown, $container);\n            var ResultsAdapter = this.options.get(\"resultsAdapter\");\n            this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n            this.$results = this.results.render();\n            this.results.position(this.$results, this.$dropdown);\n            var self = this;\n            this._bindAdapters();\n            this._registerDomEvents();\n            this._registerDataEvents();\n            this._registerSelectionEvents();\n            this._registerDropdownEvents();\n            this._registerResultsEvents();\n            this._registerEvents();\n            this.dataAdapter.current(function(initialData) {\n              self.trigger(\"selection:update\", {\n                data: initialData\n              });\n            });\n            $element.addClass(\"select2-hidden-accessible\");\n            $element.attr(\"aria-hidden\", \"true\");\n            this._syncAttributes();\n            Utils.StoreData($element[0], \"select2\", this);\n            $element.data(\"select2\", this);\n          };\n          Utils.Extend(Select2, Utils.Observable);\n          Select2.prototype._generateId = function($element) {\n            var id = \"\";\n            if ($element.attr(\"id\") != null) {\n              id = $element.attr(\"id\");\n            } else if ($element.attr(\"name\") != null) {\n              id = $element.attr(\"name\") + \"-\" + Utils.generateChars(2);\n            } else {\n              id = Utils.generateChars(4);\n            }\n            id = id.replace(/(:|\\.|\\[|\\]|,)/g, \"\");\n            id = \"select2-\" + id;\n            return id;\n          };\n          Select2.prototype._placeContainer = function($container) {\n            $container.insertAfter(this.$element);\n            var width = this._resolveWidth(this.$element, this.options.get(\"width\"));\n            if (width != null) {\n              $container.css(\"width\", width);\n            }\n          };\n          Select2.prototype._resolveWidth = function($element, method) {\n            var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n            if (method == \"resolve\") {\n              var styleWidth = this._resolveWidth($element, \"style\");\n              if (styleWidth != null) {\n                return styleWidth;\n              }\n              return this._resolveWidth($element, \"element\");\n            }\n            if (method == \"element\") {\n              var elementWidth = $element.outerWidth(false);\n              if (elementWidth <= 0) {\n                return \"auto\";\n              }\n              return elementWidth + \"px\";\n            }\n            if (method == \"style\") {\n              var style = $element.attr(\"style\");\n              if (typeof style !== \"string\") {\n                return null;\n              }\n              var attrs = style.split(\";\");\n              for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n                var attr = attrs[i].replace(/\\s/g, \"\");\n                var matches = attr.match(WIDTH);\n                if (matches !== null && matches.length >= 1) {\n                  return matches[1];\n                }\n              }\n              return null;\n            }\n            if (method == \"computedstyle\") {\n              var computedStyle = window.getComputedStyle($element[0]);\n              return computedStyle.width;\n            }\n            return method;\n          };\n          Select2.prototype._bindAdapters = function() {\n            this.dataAdapter.bind(this, this.$container);\n            this.selection.bind(this, this.$container);\n            this.dropdown.bind(this, this.$container);\n            this.results.bind(this, this.$container);\n          };\n          Select2.prototype._registerDomEvents = function() {\n            var self = this;\n            this.$element.on(\"change.select2\", function() {\n              self.dataAdapter.current(function(data) {\n                self.trigger(\"selection:update\", {\n                  data\n                });\n              });\n            });\n            this.$element.on(\"focus.select2\", function(evt) {\n              self.trigger(\"focus\", evt);\n            });\n            this._syncA = Utils.bind(this._syncAttributes, this);\n            this._syncS = Utils.bind(this._syncSubtree, this);\n            if (this.$element[0].attachEvent) {\n              this.$element[0].attachEvent(\"onpropertychange\", this._syncA);\n            }\n            var observer = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n            if (observer != null) {\n              this._observer = new observer(function(mutations) {\n                self._syncA();\n                self._syncS(null, mutations);\n              });\n              this._observer.observe(this.$element[0], {\n                attributes: true,\n                childList: true,\n                subtree: false\n              });\n            } else if (this.$element[0].addEventListener) {\n              this.$element[0].addEventListener(\n                \"DOMAttrModified\",\n                self._syncA,\n                false\n              );\n              this.$element[0].addEventListener(\n                \"DOMNodeInserted\",\n                self._syncS,\n                false\n              );\n              this.$element[0].addEventListener(\n                \"DOMNodeRemoved\",\n                self._syncS,\n                false\n              );\n            }\n          };\n          Select2.prototype._registerDataEvents = function() {\n            var self = this;\n            this.dataAdapter.on(\"*\", function(name, params) {\n              self.trigger(name, params);\n            });\n          };\n          Select2.prototype._registerSelectionEvents = function() {\n            var self = this;\n            var nonRelayEvents = [\"toggle\", \"focus\"];\n            this.selection.on(\"toggle\", function() {\n              self.toggleDropdown();\n            });\n            this.selection.on(\"focus\", function(params) {\n              self.focus(params);\n            });\n            this.selection.on(\"*\", function(name, params) {\n              if ($2.inArray(name, nonRelayEvents) !== -1) {\n                return;\n              }\n              self.trigger(name, params);\n            });\n          };\n          Select2.prototype._registerDropdownEvents = function() {\n            var self = this;\n            this.dropdown.on(\"*\", function(name, params) {\n              self.trigger(name, params);\n            });\n          };\n          Select2.prototype._registerResultsEvents = function() {\n            var self = this;\n            this.results.on(\"*\", function(name, params) {\n              self.trigger(name, params);\n            });\n          };\n          Select2.prototype._registerEvents = function() {\n            var self = this;\n            this.on(\"open\", function() {\n              self.$container.addClass(\"select2-container--open\");\n            });\n            this.on(\"close\", function() {\n              self.$container.removeClass(\"select2-container--open\");\n            });\n            this.on(\"enable\", function() {\n              self.$container.removeClass(\"select2-container--disabled\");\n            });\n            this.on(\"disable\", function() {\n              self.$container.addClass(\"select2-container--disabled\");\n            });\n            this.on(\"blur\", function() {\n              self.$container.removeClass(\"select2-container--focus\");\n            });\n            this.on(\"query\", function(params) {\n              if (!self.isOpen()) {\n                self.trigger(\"open\", {});\n              }\n              this.dataAdapter.query(params, function(data) {\n                self.trigger(\"results:all\", {\n                  data,\n                  query: params\n                });\n              });\n            });\n            this.on(\"query:append\", function(params) {\n              this.dataAdapter.query(params, function(data) {\n                self.trigger(\"results:append\", {\n                  data,\n                  query: params\n                });\n              });\n            });\n            this.on(\"keypress\", function(evt) {\n              var key = evt.which;\n              if (self.isOpen()) {\n                if (key === KEYS.ESC || key === KEYS.TAB || key === KEYS.UP && evt.altKey) {\n                  self.close(evt);\n                  evt.preventDefault();\n                } else if (key === KEYS.ENTER) {\n                  self.trigger(\"results:select\", {});\n                  evt.preventDefault();\n                } else if (key === KEYS.SPACE && evt.ctrlKey) {\n                  self.trigger(\"results:toggle\", {});\n                  evt.preventDefault();\n                } else if (key === KEYS.UP) {\n                  self.trigger(\"results:previous\", {});\n                  evt.preventDefault();\n                } else if (key === KEYS.DOWN) {\n                  self.trigger(\"results:next\", {});\n                  evt.preventDefault();\n                }\n              } else {\n                if (key === KEYS.ENTER || key === KEYS.SPACE || key === KEYS.DOWN && evt.altKey) {\n                  self.open();\n                  evt.preventDefault();\n                }\n              }\n            });\n          };\n          Select2.prototype._syncAttributes = function() {\n            this.options.set(\"disabled\", this.$element.prop(\"disabled\"));\n            if (this.isDisabled()) {\n              if (this.isOpen()) {\n                this.close();\n              }\n              this.trigger(\"disable\", {});\n            } else {\n              this.trigger(\"enable\", {});\n            }\n          };\n          Select2.prototype._isChangeMutation = function(evt, mutations) {\n            var changed = false;\n            var self = this;\n            if (evt && evt.target && (evt.target.nodeName !== \"OPTION\" && evt.target.nodeName !== \"OPTGROUP\")) {\n              return;\n            }\n            if (!mutations) {\n              changed = true;\n            } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n              for (var n = 0; n < mutations.addedNodes.length; n++) {\n                var node = mutations.addedNodes[n];\n                if (node.selected) {\n                  changed = true;\n                }\n              }\n            } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n              changed = true;\n            } else if ($2.isArray(mutations)) {\n              $2.each(mutations, function(evt2, mutation) {\n                if (self._isChangeMutation(evt2, mutation)) {\n                  changed = true;\n                  return false;\n                }\n              });\n            }\n            return changed;\n          };\n          Select2.prototype._syncSubtree = function(evt, mutations) {\n            var changed = this._isChangeMutation(evt, mutations);\n            var self = this;\n            if (changed) {\n              this.dataAdapter.current(function(currentData) {\n                self.trigger(\"selection:update\", {\n                  data: currentData\n                });\n              });\n            }\n          };\n          Select2.prototype.trigger = function(name, args) {\n            var actualTrigger = Select2.__super__.trigger;\n            var preTriggerMap = {\n              \"open\": \"opening\",\n              \"close\": \"closing\",\n              \"select\": \"selecting\",\n              \"unselect\": \"unselecting\",\n              \"clear\": \"clearing\"\n            };\n            if (args === void 0) {\n              args = {};\n            }\n            if (name in preTriggerMap) {\n              var preTriggerName = preTriggerMap[name];\n              var preTriggerArgs = {\n                prevented: false,\n                name,\n                args\n              };\n              actualTrigger.call(this, preTriggerName, preTriggerArgs);\n              if (preTriggerArgs.prevented) {\n                args.prevented = true;\n                return;\n              }\n            }\n            actualTrigger.call(this, name, args);\n          };\n          Select2.prototype.toggleDropdown = function() {\n            if (this.isDisabled()) {\n              return;\n            }\n            if (this.isOpen()) {\n              this.close();\n            } else {\n              this.open();\n            }\n          };\n          Select2.prototype.open = function() {\n            if (this.isOpen()) {\n              return;\n            }\n            if (this.isDisabled()) {\n              return;\n            }\n            this.trigger(\"query\", {});\n          };\n          Select2.prototype.close = function(evt) {\n            if (!this.isOpen()) {\n              return;\n            }\n            this.trigger(\"close\", { originalEvent: evt });\n          };\n          Select2.prototype.isEnabled = function() {\n            return !this.isDisabled();\n          };\n          Select2.prototype.isDisabled = function() {\n            return this.options.get(\"disabled\");\n          };\n          Select2.prototype.isOpen = function() {\n            return this.$container.hasClass(\"select2-container--open\");\n          };\n          Select2.prototype.hasFocus = function() {\n            return this.$container.hasClass(\"select2-container--focus\");\n          };\n          Select2.prototype.focus = function(data) {\n            if (this.hasFocus()) {\n              return;\n            }\n            this.$container.addClass(\"select2-container--focus\");\n            this.trigger(\"focus\", {});\n          };\n          Select2.prototype.enable = function(args) {\n            if (this.options.get(\"debug\") && window.console && console.warn) {\n              console.warn(\n                'Select2: The `select2(\"enable\")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop(\"disabled\") instead.'\n              );\n            }\n            if (args == null || args.length === 0) {\n              args = [true];\n            }\n            var disabled = !args[0];\n            this.$element.prop(\"disabled\", disabled);\n          };\n          Select2.prototype.data = function() {\n            if (this.options.get(\"debug\") && arguments.length > 0 && window.console && console.warn) {\n              console.warn(\n                'Select2: Data can no longer be set using `select2(\"data\")`. You should consider setting the value instead using `$element.val()`.'\n              );\n            }\n            var data = [];\n            this.dataAdapter.current(function(currentData) {\n              data = currentData;\n            });\n            return data;\n          };\n          Select2.prototype.val = function(args) {\n            if (this.options.get(\"debug\") && window.console && console.warn) {\n              console.warn(\n                'Select2: The `select2(\"val\")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'\n              );\n            }\n            if (args == null || args.length === 0) {\n              return this.$element.val();\n            }\n            var newVal = args[0];\n            if ($2.isArray(newVal)) {\n              newVal = $2.map(newVal, function(obj) {\n                return obj.toString();\n              });\n            }\n            this.$element.val(newVal).trigger(\"input\").trigger(\"change\");\n          };\n          Select2.prototype.destroy = function() {\n            this.$container.remove();\n            if (this.$element[0].detachEvent) {\n              this.$element[0].detachEvent(\"onpropertychange\", this._syncA);\n            }\n            if (this._observer != null) {\n              this._observer.disconnect();\n              this._observer = null;\n            } else if (this.$element[0].removeEventListener) {\n              this.$element[0].removeEventListener(\"DOMAttrModified\", this._syncA, false);\n              this.$element[0].removeEventListener(\"DOMNodeInserted\", this._syncS, false);\n              this.$element[0].removeEventListener(\"DOMNodeRemoved\", this._syncS, false);\n            }\n            this._syncA = null;\n            this._syncS = null;\n            this.$element.off(\".select2\");\n            this.$element.attr(\n              \"tabindex\",\n              Utils.GetData(this.$element[0], \"old-tabindex\")\n            );\n            this.$element.removeClass(\"select2-hidden-accessible\");\n            this.$element.attr(\"aria-hidden\", \"false\");\n            Utils.RemoveData(this.$element[0]);\n            this.$element.removeData(\"select2\");\n            this.dataAdapter.destroy();\n            this.selection.destroy();\n            this.dropdown.destroy();\n            this.results.destroy();\n            this.dataAdapter = null;\n            this.selection = null;\n            this.dropdown = null;\n            this.results = null;\n          };\n          Select2.prototype.render = function() {\n            var $container = $2(\n              '<span class=\"select2 select2-container\"><span class=\"selection\"></span><span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span></span>'\n            );\n            $container.attr(\"dir\", this.options.get(\"dir\"));\n            this.$container = $container;\n            this.$container.addClass(\"select2-container--\" + this.options.get(\"theme\"));\n            Utils.StoreData($container[0], \"element\", this.$element);\n            return $container;\n          };\n          return Select2;\n        });\n        S22.define(\"jquery-mousewheel\", [\n          \"jquery\"\n        ], function($2) {\n          return $2;\n        });\n        S22.define(\"jquery.select2\", [\n          \"jquery\",\n          \"jquery-mousewheel\",\n          \"./select2/core\",\n          \"./select2/defaults\",\n          \"./select2/utils\"\n        ], function($2, _, Select2, Defaults, Utils) {\n          if ($2.fn.select2 == null) {\n            var thisMethods = [\"open\", \"close\", \"destroy\"];\n            $2.fn.select2 = function(options) {\n              options = options || {};\n              if (typeof options === \"object\") {\n                this.each(function() {\n                  var instanceOptions = $2.extend(true, {}, options);\n                  var instance = new Select2($2(this), instanceOptions);\n                });\n                return this;\n              } else if (typeof options === \"string\") {\n                var ret;\n                var args = Array.prototype.slice.call(arguments, 1);\n                this.each(function() {\n                  var instance = Utils.GetData(this, \"select2\");\n                  if (instance == null && window.console && console.error) {\n                    console.error(\n                      \"The select2('\" + options + \"') method was called on an element that is not using Select2.\"\n                    );\n                  }\n                  ret = instance[options].apply(instance, args);\n                });\n                if ($2.inArray(options, thisMethods) > -1) {\n                  return this;\n                }\n                return ret;\n              } else {\n                throw new Error(\"Invalid arguments for Select2: \" + options);\n              }\n            };\n          }\n          if ($2.fn.select2.defaults == null) {\n            $2.fn.select2.defaults = Defaults;\n          }\n          return Select2;\n        });\n        return {\n          define: S22.define,\n          require: S22.require\n        };\n      }();\n      var select2 = S2.require(\"jquery.select2\");\n      jQuery2.fn.select2.amd = S2;\n      return select2;\n    });\n  }\n});\nexport default require_select2();\n/*! Bundled license information:\n\nselect2/dist/js/select2.js:\n  (*!\n   * Select2 4.0.13\n   * https://select2.github.io\n   *\n   * Released under the MIT license\n   * https://github.com/select2/select2/blob/master/LICENSE.md\n   *)\n  (**\n   * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n   * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n   *)\n*/\n//# sourceMappingURL=select2.js.map\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/jstz/dist/jstz.js\nvar require_jstz = __commonJS({\n  \"node_modules/jstz/dist/jstz.js\"(exports, module) {\n    (function(root) {\n      var jstz = function() {\n        \"use strict\";\n        var HEMISPHERE_SOUTH = \"s\", consts = {\n          DAY: 864e5,\n          HOUR: 36e5,\n          MINUTE: 6e4,\n          SECOND: 1e3,\n          BASELINE_YEAR: 2014,\n          MAX_SCORE: 864e6,\n          // 10 days\n          AMBIGUITIES: {\n            \"America/Denver\": [\"America/Mazatlan\"],\n            \"Europe/London\": [\"Africa/Casablanca\"],\n            \"America/Chicago\": [\"America/Mexico_City\"],\n            \"America/Asuncion\": [\"America/Campo_Grande\", \"America/Santiago\"],\n            \"America/Montevideo\": [\"America/Sao_Paulo\", \"America/Santiago\"],\n            // Europe/Minsk should not be in this list... but Windows.\n            \"Asia/Beirut\": [\"Asia/Amman\", \"Asia/Jerusalem\", \"Europe/Helsinki\", \"Asia/Damascus\", \"Africa/Cairo\", \"Asia/Gaza\", \"Europe/Minsk\"],\n            \"Pacific/Auckland\": [\"Pacific/Fiji\"],\n            \"America/Los_Angeles\": [\"America/Santa_Isabel\"],\n            \"America/New_York\": [\"America/Havana\"],\n            \"America/Halifax\": [\"America/Goose_Bay\"],\n            \"America/Godthab\": [\"America/Miquelon\"],\n            \"Asia/Dubai\": [\"Asia/Yerevan\"],\n            \"Asia/Jakarta\": [\"Asia/Krasnoyarsk\"],\n            \"Asia/Shanghai\": [\"Asia/Irkutsk\", \"Australia/Perth\"],\n            \"Australia/Sydney\": [\"Australia/Lord_Howe\"],\n            \"Asia/Tokyo\": [\"Asia/Yakutsk\"],\n            \"Asia/Dhaka\": [\"Asia/Omsk\"],\n            // In the real world Yerevan is not ambigous for Baku... but Windows.\n            \"Asia/Baku\": [\"Asia/Yerevan\"],\n            \"Australia/Brisbane\": [\"Asia/Vladivostok\"],\n            \"Pacific/Noumea\": [\"Asia/Vladivostok\"],\n            \"Pacific/Majuro\": [\"Asia/Kamchatka\", \"Pacific/Fiji\"],\n            \"Pacific/Tongatapu\": [\"Pacific/Apia\"],\n            \"Asia/Baghdad\": [\"Europe/Minsk\", \"Europe/Moscow\"],\n            \"Asia/Karachi\": [\"Asia/Yekaterinburg\"],\n            \"Africa/Johannesburg\": [\"Asia/Gaza\", \"Africa/Cairo\"]\n          }\n        }, get_date_offset = function get_date_offset2(date) {\n          var offset = -date.getTimezoneOffset();\n          return offset !== null ? offset : 0;\n        }, lookup_key = function lookup_key2() {\n          var january_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 0, 2)), june_offset = get_date_offset(new Date(consts.BASELINE_YEAR, 5, 2)), diff = january_offset - june_offset;\n          if (diff < 0) {\n            return january_offset + \",1\";\n          } else if (diff > 0) {\n            return june_offset + \",1,\" + HEMISPHERE_SOUTH;\n          }\n          return january_offset + \",0\";\n        }, get_from_internationalization_api = function get_from_internationalization_api2() {\n          var format, timezone;\n          if (typeof Intl === \"undefined\" || typeof Intl.DateTimeFormat === \"undefined\") {\n            return;\n          }\n          format = Intl.DateTimeFormat();\n          if (typeof format === \"undefined\" || typeof format.resolvedOptions === \"undefined\") {\n            return;\n          }\n          timezone = format.resolvedOptions().timeZone;\n          if (timezone && (timezone.indexOf(\"/\") > -1 || timezone === \"UTC\") && timezone.indexOf(\"Etc\") != 0) {\n            return timezone;\n          }\n        }, dst_dates = function dst_dates2(year) {\n          var yearstart = new Date(year, 0, 1, 0, 0, 1, 0).getTime();\n          var yearend = new Date(year, 12, 31, 23, 59, 59).getTime();\n          var current = yearstart;\n          var offset = new Date(current).getTimezoneOffset();\n          var dst_start = null;\n          var dst_end = null;\n          while (current < yearend - 864e5) {\n            var dateToCheck = new Date(current);\n            var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n            if (dateToCheckOffset !== offset) {\n              if (dateToCheckOffset < offset) {\n                dst_start = dateToCheck;\n              }\n              if (dateToCheckOffset > offset) {\n                dst_end = dateToCheck;\n              }\n              offset = dateToCheckOffset;\n            }\n            current += 864e5;\n          }\n          if (dst_start && dst_end) {\n            return {\n              s: find_dst_fold(dst_start).getTime(),\n              e: find_dst_fold(dst_end).getTime()\n            };\n          }\n          return false;\n        }, find_dst_fold = function find_dst_fold2(a_date, padding, iterator) {\n          if (typeof padding === \"undefined\") {\n            padding = consts.DAY;\n            iterator = consts.HOUR;\n          }\n          var date_start = new Date(a_date.getTime() - padding).getTime();\n          var date_end = a_date.getTime() + padding;\n          var offset = new Date(date_start).getTimezoneOffset();\n          var current = date_start;\n          var dst_change = null;\n          while (current < date_end - iterator) {\n            var dateToCheck = new Date(current);\n            var dateToCheckOffset = dateToCheck.getTimezoneOffset();\n            if (dateToCheckOffset !== offset) {\n              dst_change = dateToCheck;\n              break;\n            }\n            current += iterator;\n          }\n          if (padding === consts.DAY) {\n            return find_dst_fold2(dst_change, consts.HOUR, consts.MINUTE);\n          }\n          if (padding === consts.HOUR) {\n            return find_dst_fold2(dst_change, consts.MINUTE, consts.SECOND);\n          }\n          return dst_change;\n        }, windows7_adaptations = function windows7_adaptions(rule_list, preliminary_timezone, score, sample) {\n          if (score !== \"N/A\") {\n            return score;\n          }\n          if (preliminary_timezone === \"Asia/Beirut\") {\n            if (sample.name === \"Africa/Cairo\") {\n              if (rule_list[6].s === 13983768e5 && rule_list[6].e === 14116788e5) {\n                return 0;\n              }\n            }\n            if (sample.name === \"Asia/Jerusalem\") {\n              if (rule_list[6].s === 13959648e5 && rule_list[6].e === 14118588e5) {\n                return 0;\n              }\n            }\n          } else if (preliminary_timezone === \"America/Santiago\") {\n            if (sample.name === \"America/Asuncion\") {\n              if (rule_list[6].s === 14124816e5 && rule_list[6].e === 1397358e6) {\n                return 0;\n              }\n            }\n            if (sample.name === \"America/Campo_Grande\") {\n              if (rule_list[6].s === 14136912e5 && rule_list[6].e === 13925196e5) {\n                return 0;\n              }\n            }\n          } else if (preliminary_timezone === \"America/Montevideo\") {\n            if (sample.name === \"America/Sao_Paulo\") {\n              if (rule_list[6].s === 14136876e5 && rule_list[6].e === 1392516e6) {\n                return 0;\n              }\n            }\n          } else if (preliminary_timezone === \"Pacific/Auckland\") {\n            if (sample.name === \"Pacific/Fiji\") {\n              if (rule_list[6].s === 14142456e5 && rule_list[6].e === 13961016e5) {\n                return 0;\n              }\n            }\n          }\n          return score;\n        }, best_dst_match = function best_dst_match2(rule_list, preliminary_timezone) {\n          var score_sample = function score_sample2(sample2) {\n            var score2 = 0;\n            for (var j2 = 0; j2 < rule_list.length; j2++) {\n              if (!!sample2.rules[j2] && !!rule_list[j2]) {\n                if (rule_list[j2].s >= sample2.rules[j2].s && rule_list[j2].e <= sample2.rules[j2].e) {\n                  score2 = 0;\n                  score2 += Math.abs(rule_list[j2].s - sample2.rules[j2].s);\n                  score2 += Math.abs(sample2.rules[j2].e - rule_list[j2].e);\n                } else {\n                  score2 = \"N/A\";\n                  break;\n                }\n                if (score2 > consts.MAX_SCORE) {\n                  score2 = \"N/A\";\n                  break;\n                }\n              }\n            }\n            score2 = windows7_adaptations(rule_list, preliminary_timezone, score2, sample2);\n            return score2;\n          };\n          var scoreboard = {};\n          var dst_zones = jstz.olson.dst_rules.zones;\n          var dst_zones_length = dst_zones.length;\n          var ambiguities = consts.AMBIGUITIES[preliminary_timezone];\n          for (var i = 0; i < dst_zones_length; i++) {\n            var sample = dst_zones[i];\n            var score = score_sample(dst_zones[i]);\n            if (score !== \"N/A\") {\n              scoreboard[sample.name] = score;\n            }\n          }\n          for (var tz in scoreboard) {\n            if (scoreboard.hasOwnProperty(tz)) {\n              for (var j = 0; j < ambiguities.length; j++) {\n                if (ambiguities[j] === tz) {\n                  return tz;\n                }\n              }\n            }\n          }\n          return preliminary_timezone;\n        }, get_by_dst = function get_by_dst2(preliminary_timezone) {\n          var get_rules = function get_rules2() {\n            var rule_list = [];\n            for (var i = 0; i < jstz.olson.dst_rules.years.length; i++) {\n              var year_rules = dst_dates(jstz.olson.dst_rules.years[i]);\n              rule_list.push(year_rules);\n            }\n            return rule_list;\n          };\n          var check_has_dst = function check_has_dst2(rules2) {\n            for (var i = 0; i < rules2.length; i++) {\n              if (rules2[i] !== false) {\n                return true;\n              }\n            }\n            return false;\n          };\n          var rules = get_rules();\n          var has_dst = check_has_dst(rules);\n          if (has_dst) {\n            return best_dst_match(rules, preliminary_timezone);\n          }\n          return preliminary_timezone;\n        }, determine = function determine2() {\n          var preliminary_tz = get_from_internationalization_api();\n          if (!preliminary_tz) {\n            preliminary_tz = jstz.olson.timezones[lookup_key()];\n            if (typeof consts.AMBIGUITIES[preliminary_tz] !== \"undefined\") {\n              preliminary_tz = get_by_dst(preliminary_tz);\n            }\n          }\n          return {\n            name: function() {\n              return preliminary_tz;\n            },\n            stdTimezoneOffset: function() {\n              return -lookup_key().split(\",\")[0];\n            },\n            timezoneOffset: function() {\n              return -get_date_offset(/* @__PURE__ */ new Date());\n            }\n          };\n        };\n        return {\n          determine\n        };\n      }();\n      jstz.olson = jstz.olson || {};\n      jstz.olson.timezones = {\n        \"-720,0\": \"Etc/GMT+12\",\n        \"-660,0\": \"Pacific/Pago_Pago\",\n        \"-660,1,s\": \"Pacific/Apia\",\n        // Why? Because windows... cry!\n        \"-600,1\": \"America/Adak\",\n        \"-600,0\": \"Pacific/Honolulu\",\n        \"-570,0\": \"Pacific/Marquesas\",\n        \"-540,0\": \"Pacific/Gambier\",\n        \"-540,1\": \"America/Anchorage\",\n        \"-480,1\": \"America/Los_Angeles\",\n        \"-480,0\": \"Pacific/Pitcairn\",\n        \"-420,0\": \"America/Phoenix\",\n        \"-420,1\": \"America/Denver\",\n        \"-360,0\": \"America/Guatemala\",\n        \"-360,1\": \"America/Chicago\",\n        \"-360,1,s\": \"Pacific/Easter\",\n        \"-300,0\": \"America/Bogota\",\n        \"-300,1\": \"America/New_York\",\n        \"-270,0\": \"America/Caracas\",\n        \"-240,1\": \"America/Halifax\",\n        \"-240,0\": \"America/Santo_Domingo\",\n        \"-240,1,s\": \"America/Asuncion\",\n        \"-210,1\": \"America/St_Johns\",\n        \"-180,1\": \"America/Godthab\",\n        \"-180,0\": \"America/Argentina/Buenos_Aires\",\n        \"-180,1,s\": \"America/Montevideo\",\n        \"-120,0\": \"America/Noronha\",\n        \"-120,1\": \"America/Noronha\",\n        \"-60,1\": \"Atlantic/Azores\",\n        \"-60,0\": \"Atlantic/Cape_Verde\",\n        \"0,0\": \"UTC\",\n        \"0,1\": \"Europe/London\",\n        \"60,1\": \"Europe/Berlin\",\n        \"60,0\": \"Africa/Lagos\",\n        \"60,1,s\": \"Africa/Windhoek\",\n        \"120,1\": \"Asia/Beirut\",\n        \"120,0\": \"Africa/Johannesburg\",\n        \"180,0\": \"Asia/Baghdad\",\n        \"180,1\": \"Europe/Moscow\",\n        \"210,1\": \"Asia/Tehran\",\n        \"240,0\": \"Asia/Dubai\",\n        \"240,1\": \"Asia/Baku\",\n        \"270,0\": \"Asia/Kabul\",\n        \"300,1\": \"Asia/Yekaterinburg\",\n        \"300,0\": \"Asia/Karachi\",\n        \"330,0\": \"Asia/Kolkata\",\n        \"345,0\": \"Asia/Kathmandu\",\n        \"360,0\": \"Asia/Dhaka\",\n        \"360,1\": \"Asia/Omsk\",\n        \"390,0\": \"Asia/Rangoon\",\n        \"420,1\": \"Asia/Krasnoyarsk\",\n        \"420,0\": \"Asia/Jakarta\",\n        \"480,0\": \"Asia/Shanghai\",\n        \"480,1\": \"Asia/Irkutsk\",\n        \"525,0\": \"Australia/Eucla\",\n        \"525,1,s\": \"Australia/Eucla\",\n        \"540,1\": \"Asia/Yakutsk\",\n        \"540,0\": \"Asia/Tokyo\",\n        \"570,0\": \"Australia/Darwin\",\n        \"570,1,s\": \"Australia/Adelaide\",\n        \"600,0\": \"Australia/Brisbane\",\n        \"600,1\": \"Asia/Vladivostok\",\n        \"600,1,s\": \"Australia/Sydney\",\n        \"630,1,s\": \"Australia/Lord_Howe\",\n        \"660,1\": \"Asia/Kamchatka\",\n        \"660,0\": \"Pacific/Noumea\",\n        \"690,0\": \"Pacific/Norfolk\",\n        \"720,1,s\": \"Pacific/Auckland\",\n        \"720,0\": \"Pacific/Majuro\",\n        \"765,1,s\": \"Pacific/Chatham\",\n        \"780,0\": \"Pacific/Tongatapu\",\n        \"780,1,s\": \"Pacific/Apia\",\n        \"840,0\": \"Pacific/Kiritimati\"\n      };\n      jstz.olson.dst_rules = {\n        \"years\": [\n          2008,\n          2009,\n          2010,\n          2011,\n          2012,\n          2013,\n          2014\n        ],\n        \"zones\": [\n          {\n            \"name\": \"Africa/Cairo\",\n            \"rules\": [\n              {\n                \"e\": 12199572e5,\n                \"s\": 12090744e5\n              },\n              {\n                \"e\": 1250802e6,\n                \"s\": 1240524e6\n              },\n              {\n                \"e\": 12858804e5,\n                \"s\": 12840696e5\n              },\n              false,\n              false,\n              false,\n              {\n                \"e\": 14116788e5,\n                \"s\": 1406844e6\n              }\n            ]\n          },\n          {\n            \"name\": \"Africa/Casablanca\",\n            \"rules\": [\n              {\n                \"e\": 12202236e5,\n                \"s\": 12122784e5\n              },\n              {\n                \"e\": 12508092e5,\n                \"s\": 12438144e5\n              },\n              {\n                \"e\": 1281222e6,\n                \"s\": 12727584e5\n              },\n              {\n                \"e\": 13120668e5,\n                \"s\": 13017888e5\n              },\n              {\n                \"e\": 13489704e5,\n                \"s\": 1345428e6\n              },\n              {\n                \"e\": 13828392e5,\n                \"s\": 13761e8\n              },\n              {\n                \"e\": 14142888e5,\n                \"s\": 14069448e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Asuncion\",\n            \"rules\": [\n              {\n                \"e\": 12050316e5,\n                \"s\": 12243888e5\n              },\n              {\n                \"e\": 12364812e5,\n                \"s\": 12558384e5\n              },\n              {\n                \"e\": 12709548e5,\n                \"s\": 12860784e5\n              },\n              {\n                \"e\": 13024044e5,\n                \"s\": 1317528e6\n              },\n              {\n                \"e\": 1333854e6,\n                \"s\": 13495824e5\n              },\n              {\n                \"e\": 1364094e6,\n                \"s\": 1381032e6\n              },\n              {\n                \"e\": 13955436e5,\n                \"s\": 14124816e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Campo_Grande\",\n            \"rules\": [\n              {\n                \"e\": 12032172e5,\n                \"s\": 12243888e5\n              },\n              {\n                \"e\": 12346668e5,\n                \"s\": 12558384e5\n              },\n              {\n                \"e\": 12667212e5,\n                \"s\": 1287288e6\n              },\n              {\n                \"e\": 12981708e5,\n                \"s\": 13187376e5\n              },\n              {\n                \"e\": 13302252e5,\n                \"s\": 1350792e6\n              },\n              {\n                \"e\": 136107e7,\n                \"s\": 13822416e5\n              },\n              {\n                \"e\": 13925196e5,\n                \"s\": 14136912e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Goose_Bay\",\n            \"rules\": [\n              {\n                \"e\": 122559486e4,\n                \"s\": 120503526e4\n              },\n              {\n                \"e\": 125704446e4,\n                \"s\": 123648486e4\n              },\n              {\n                \"e\": 128909886e4,\n                \"s\": 126853926e4\n              },\n              {\n                \"e\": 13205556e5,\n                \"s\": 129998886e4\n              },\n              {\n                \"e\": 13520052e5,\n                \"s\": 13314456e5\n              },\n              {\n                \"e\": 13834548e5,\n                \"s\": 13628952e5\n              },\n              {\n                \"e\": 14149044e5,\n                \"s\": 13943448e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Havana\",\n            \"rules\": [\n              {\n                \"e\": 12249972e5,\n                \"s\": 12056436e5\n              },\n              {\n                \"e\": 12564468e5,\n                \"s\": 12364884e5\n              },\n              {\n                \"e\": 12885012e5,\n                \"s\": 12685428e5\n              },\n              {\n                \"e\": 13211604e5,\n                \"s\": 13005972e5\n              },\n              {\n                \"e\": 13520052e5,\n                \"s\": 13332564e5\n              },\n              {\n                \"e\": 13834548e5,\n                \"s\": 13628916e5\n              },\n              {\n                \"e\": 14149044e5,\n                \"s\": 13943412e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Mazatlan\",\n            \"rules\": [\n              {\n                \"e\": 1225008e6,\n                \"s\": 12074724e5\n              },\n              {\n                \"e\": 12564576e5,\n                \"s\": 1238922e6\n              },\n              {\n                \"e\": 1288512e6,\n                \"s\": 12703716e5\n              },\n              {\n                \"e\": 13199616e5,\n                \"s\": 13018212e5\n              },\n              {\n                \"e\": 13514112e5,\n                \"s\": 13332708e5\n              },\n              {\n                \"e\": 13828608e5,\n                \"s\": 13653252e5\n              },\n              {\n                \"e\": 14143104e5,\n                \"s\": 13967748e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Mexico_City\",\n            \"rules\": [\n              {\n                \"e\": 12250044e5,\n                \"s\": 12074688e5\n              },\n              {\n                \"e\": 1256454e6,\n                \"s\": 12389184e5\n              },\n              {\n                \"e\": 12885084e5,\n                \"s\": 1270368e6\n              },\n              {\n                \"e\": 1319958e6,\n                \"s\": 13018176e5\n              },\n              {\n                \"e\": 13514076e5,\n                \"s\": 13332672e5\n              },\n              {\n                \"e\": 13828572e5,\n                \"s\": 13653216e5\n              },\n              {\n                \"e\": 14143068e5,\n                \"s\": 13967712e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Miquelon\",\n            \"rules\": [\n              {\n                \"e\": 12255984e5,\n                \"s\": 12050388e5\n              },\n              {\n                \"e\": 1257048e6,\n                \"s\": 12364884e5\n              },\n              {\n                \"e\": 12891024e5,\n                \"s\": 12685428e5\n              },\n              {\n                \"e\": 1320552e6,\n                \"s\": 12999924e5\n              },\n              {\n                \"e\": 13520016e5,\n                \"s\": 1331442e6\n              },\n              {\n                \"e\": 13834512e5,\n                \"s\": 13628916e5\n              },\n              {\n                \"e\": 14149008e5,\n                \"s\": 13943412e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Santa_Isabel\",\n            \"rules\": [\n              {\n                \"e\": 12250116e5,\n                \"s\": 1207476e6\n              },\n              {\n                \"e\": 12564612e5,\n                \"s\": 12389256e5\n              },\n              {\n                \"e\": 12885156e5,\n                \"s\": 12703752e5\n              },\n              {\n                \"e\": 13199652e5,\n                \"s\": 13018248e5\n              },\n              {\n                \"e\": 13514148e5,\n                \"s\": 13332744e5\n              },\n              {\n                \"e\": 13828644e5,\n                \"s\": 13653288e5\n              },\n              {\n                \"e\": 1414314e6,\n                \"s\": 13967784e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Santiago\",\n            \"rules\": [\n              {\n                \"e\": 1206846e6,\n                \"s\": 1223784e6\n              },\n              {\n                \"e\": 1237086e6,\n                \"s\": 12552336e5\n              },\n              {\n                \"e\": 127035e7,\n                \"s\": 12866832e5\n              },\n              {\n                \"e\": 13048236e5,\n                \"s\": 13138992e5\n              },\n              {\n                \"e\": 13356684e5,\n                \"s\": 13465584e5\n              },\n              {\n                \"e\": 1367118e6,\n                \"s\": 13786128e5\n              },\n              {\n                \"e\": 13985676e5,\n                \"s\": 14100624e5\n              }\n            ]\n          },\n          {\n            \"name\": \"America/Sao_Paulo\",\n            \"rules\": [\n              {\n                \"e\": 12032136e5,\n                \"s\": 12243852e5\n              },\n              {\n                \"e\": 12346632e5,\n                \"s\": 12558348e5\n              },\n              {\n                \"e\": 12667176e5,\n                \"s\": 12872844e5\n              },\n              {\n                \"e\": 12981672e5,\n                \"s\": 1318734e6\n              },\n              {\n                \"e\": 13302216e5,\n                \"s\": 13507884e5\n              },\n              {\n                \"e\": 13610664e5,\n                \"s\": 1382238e6\n              },\n              {\n                \"e\": 1392516e6,\n                \"s\": 14136876e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Asia/Amman\",\n            \"rules\": [\n              {\n                \"e\": 1225404e6,\n                \"s\": 12066552e5\n              },\n              {\n                \"e\": 12568536e5,\n                \"s\": 12381048e5\n              },\n              {\n                \"e\": 12883032e5,\n                \"s\": 12695544e5\n              },\n              {\n                \"e\": 13197528e5,\n                \"s\": 13016088e5\n              },\n              false,\n              false,\n              {\n                \"e\": 14147064e5,\n                \"s\": 13959576e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Asia/Damascus\",\n            \"rules\": [\n              {\n                \"e\": 12254868e5,\n                \"s\": 120726e7\n              },\n              {\n                \"e\": 125685e7,\n                \"s\": 12381048e5\n              },\n              {\n                \"e\": 12882996e5,\n                \"s\": 12701592e5\n              },\n              {\n                \"e\": 13197492e5,\n                \"s\": 13016088e5\n              },\n              {\n                \"e\": 13511988e5,\n                \"s\": 13330584e5\n              },\n              {\n                \"e\": 13826484e5,\n                \"s\": 1364508e6\n              },\n              {\n                \"e\": 14147028e5,\n                \"s\": 13959576e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Asia/Dubai\",\n            \"rules\": [\n              false,\n              false,\n              false,\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Gaza\",\n            \"rules\": [\n              {\n                \"e\": 12199572e5,\n                \"s\": 12066552e5\n              },\n              {\n                \"e\": 12520152e5,\n                \"s\": 12381048e5\n              },\n              {\n                \"e\": 1281474e6,\n                \"s\": 126964086e4\n              },\n              {\n                \"e\": 1312146e6,\n                \"s\": 130160886e4\n              },\n              {\n                \"e\": 13481784e5,\n                \"s\": 13330584e5\n              },\n              {\n                \"e\": 13802292e5,\n                \"s\": 1364508e6\n              },\n              {\n                \"e\": 1414098e6,\n                \"s\": 13959576e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Asia/Irkutsk\",\n            \"rules\": [\n              {\n                \"e\": 12249576e5,\n                \"s\": 12068136e5\n              },\n              {\n                \"e\": 12564072e5,\n                \"s\": 12382632e5\n              },\n              {\n                \"e\": 12884616e5,\n                \"s\": 12697128e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Jerusalem\",\n            \"rules\": [\n              {\n                \"e\": 12231612e5,\n                \"s\": 12066624e5\n              },\n              {\n                \"e\": 1254006e6,\n                \"s\": 1238112e6\n              },\n              {\n                \"e\": 1284246e6,\n                \"s\": 12695616e5\n              },\n              {\n                \"e\": 131751e7,\n                \"s\": 1301616e6\n              },\n              {\n                \"e\": 13483548e5,\n                \"s\": 13330656e5\n              },\n              {\n                \"e\": 13828284e5,\n                \"s\": 13645152e5\n              },\n              {\n                \"e\": 1414278e6,\n                \"s\": 13959648e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Asia/Kamchatka\",\n            \"rules\": [\n              {\n                \"e\": 12249432e5,\n                \"s\": 12067992e5\n              },\n              {\n                \"e\": 12563928e5,\n                \"s\": 12382488e5\n              },\n              {\n                \"e\": 12884508e5,\n                \"s\": 12696984e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Krasnoyarsk\",\n            \"rules\": [\n              {\n                \"e\": 12249612e5,\n                \"s\": 12068172e5\n              },\n              {\n                \"e\": 12564108e5,\n                \"s\": 12382668e5\n              },\n              {\n                \"e\": 12884652e5,\n                \"s\": 12697164e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Omsk\",\n            \"rules\": [\n              {\n                \"e\": 12249648e5,\n                \"s\": 12068208e5\n              },\n              {\n                \"e\": 12564144e5,\n                \"s\": 12382704e5\n              },\n              {\n                \"e\": 12884688e5,\n                \"s\": 126972e7\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Vladivostok\",\n            \"rules\": [\n              {\n                \"e\": 12249504e5,\n                \"s\": 12068064e5\n              },\n              {\n                \"e\": 12564e8,\n                \"s\": 1238256e6\n              },\n              {\n                \"e\": 12884544e5,\n                \"s\": 12697056e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Yakutsk\",\n            \"rules\": [\n              {\n                \"e\": 1224954e6,\n                \"s\": 120681e7\n              },\n              {\n                \"e\": 12564036e5,\n                \"s\": 12382596e5\n              },\n              {\n                \"e\": 1288458e6,\n                \"s\": 12697092e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Yekaterinburg\",\n            \"rules\": [\n              {\n                \"e\": 12249684e5,\n                \"s\": 12068244e5\n              },\n              {\n                \"e\": 1256418e6,\n                \"s\": 1238274e6\n              },\n              {\n                \"e\": 12884724e5,\n                \"s\": 12697236e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Asia/Yerevan\",\n            \"rules\": [\n              {\n                \"e\": 1224972e6,\n                \"s\": 1206828e6\n              },\n              {\n                \"e\": 12564216e5,\n                \"s\": 12382776e5\n              },\n              {\n                \"e\": 1288476e6,\n                \"s\": 12697272e5\n              },\n              {\n                \"e\": 13199256e5,\n                \"s\": 13011768e5\n              },\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Australia/Lord_Howe\",\n            \"rules\": [\n              {\n                \"e\": 12074076e5,\n                \"s\": 12231342e5\n              },\n              {\n                \"e\": 12388572e5,\n                \"s\": 12545838e5\n              },\n              {\n                \"e\": 12703068e5,\n                \"s\": 12860334e5\n              },\n              {\n                \"e\": 13017564e5,\n                \"s\": 1317483e6\n              },\n              {\n                \"e\": 1333206e6,\n                \"s\": 13495374e5\n              },\n              {\n                \"e\": 13652604e5,\n                \"s\": 1380987e6\n              },\n              {\n                \"e\": 139671e7,\n                \"s\": 14124366e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Australia/Perth\",\n            \"rules\": [\n              {\n                \"e\": 12068136e5,\n                \"s\": 12249576e5\n              },\n              false,\n              false,\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Europe/Helsinki\",\n            \"rules\": [\n              {\n                \"e\": 12249828e5,\n                \"s\": 12068388e5\n              },\n              {\n                \"e\": 12564324e5,\n                \"s\": 12382884e5\n              },\n              {\n                \"e\": 12884868e5,\n                \"s\": 1269738e6\n              },\n              {\n                \"e\": 13199364e5,\n                \"s\": 13011876e5\n              },\n              {\n                \"e\": 1351386e6,\n                \"s\": 13326372e5\n              },\n              {\n                \"e\": 13828356e5,\n                \"s\": 13646916e5\n              },\n              {\n                \"e\": 14142852e5,\n                \"s\": 13961412e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Europe/Minsk\",\n            \"rules\": [\n              {\n                \"e\": 12249792e5,\n                \"s\": 12068352e5\n              },\n              {\n                \"e\": 12564288e5,\n                \"s\": 12382848e5\n              },\n              {\n                \"e\": 12884832e5,\n                \"s\": 12697344e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Europe/Moscow\",\n            \"rules\": [\n              {\n                \"e\": 12249756e5,\n                \"s\": 12068316e5\n              },\n              {\n                \"e\": 12564252e5,\n                \"s\": 12382812e5\n              },\n              {\n                \"e\": 12884796e5,\n                \"s\": 12697308e5\n              },\n              false,\n              false,\n              false,\n              false\n            ]\n          },\n          {\n            \"name\": \"Pacific/Apia\",\n            \"rules\": [\n              false,\n              false,\n              false,\n              {\n                \"e\": 13017528e5,\n                \"s\": 13168728e5\n              },\n              {\n                \"e\": 13332024e5,\n                \"s\": 13489272e5\n              },\n              {\n                \"e\": 13652568e5,\n                \"s\": 13803768e5\n              },\n              {\n                \"e\": 13967064e5,\n                \"s\": 14118264e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Pacific/Fiji\",\n            \"rules\": [\n              false,\n              false,\n              {\n                \"e\": 12696984e5,\n                \"s\": 12878424e5\n              },\n              {\n                \"e\": 13271544e5,\n                \"s\": 1319292e6\n              },\n              {\n                \"e\": 1358604e6,\n                \"s\": 13507416e5\n              },\n              {\n                \"e\": 139005e7,\n                \"s\": 1382796e6\n              },\n              {\n                \"e\": 14215032e5,\n                \"s\": 14148504e5\n              }\n            ]\n          },\n          {\n            \"name\": \"Europe/London\",\n            \"rules\": [\n              {\n                \"e\": 12249828e5,\n                \"s\": 12068388e5\n              },\n              {\n                \"e\": 12564324e5,\n                \"s\": 12382884e5\n              },\n              {\n                \"e\": 12884868e5,\n                \"s\": 1269738e6\n              },\n              {\n                \"e\": 13199364e5,\n                \"s\": 13011876e5\n              },\n              {\n                \"e\": 1351386e6,\n                \"s\": 13326372e5\n              },\n              {\n                \"e\": 13828356e5,\n                \"s\": 13646916e5\n              },\n              {\n                \"e\": 14142852e5,\n                \"s\": 13961412e5\n              }\n            ]\n          }\n        ]\n      };\n      if (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n        module.exports = jstz;\n      } else if (typeof define !== \"undefined\" && define !== null && define.amd != null) {\n        define([], function() {\n          return jstz;\n        });\n      } else {\n        if (typeof root === \"undefined\") {\n          window.jstz = jstz;\n        } else {\n          root.jstz = jstz;\n        }\n      }\n    })();\n  }\n});\n\n// node_modules/jstz/index.js\nvar require_jstz2 = __commonJS({\n  \"node_modules/jstz/index.js\"(exports, module) {\n    module.exports = require_jstz();\n  }\n});\nexport default require_jstz2();\n/*! Bundled license information:\n\njstz/dist/jstz.js:\n  (**\n   * This script gives you the zone info key representing your device's time zone setting.\n   *\n   * @name jsTimezoneDetect\n   * @version 1.0.6\n   * @author Jon Nylander\n   * @license MIT License - https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt\n   *\n   * For usage and examples, visit:\n   * http://pellepim.bitbucket.org/jstz/\n   *\n   * Copyright (c) Jon Nylander\n   *)\n*/\n//# sourceMappingURL=jstz.js.map\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/@honeybadger-io/js/dist/browser/honeybadger.js\nvar require_honeybadger = __commonJS({\n  \"node_modules/@honeybadger-io/js/dist/browser/honeybadger.js\"(exports, module) {\n    (function(global2, factory) {\n      typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : (global2 = typeof globalThis !== \"undefined\" ? globalThis : global2 || self, global2.Honeybadger = factory());\n    })(exports, function() {\n      \"use strict\";\n      var commonjsGlobal = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\n      function getDefaultExportFromCjs(x) {\n        return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n      }\n      function getAugmentedNamespace(n) {\n        var f = n.default;\n        if (typeof f == \"function\") {\n          var a = function() {\n            return f.apply(this, arguments);\n          };\n          a.prototype = f.prototype;\n        } else\n          a = {};\n        Object.defineProperty(a, \"__esModule\", { value: true });\n        Object.keys(n).forEach(function(k) {\n          var d = Object.getOwnPropertyDescriptor(n, k);\n          Object.defineProperty(a, k, d.get ? d : {\n            enumerable: true,\n            get: function() {\n              return n[k];\n            }\n          });\n        });\n        return a;\n      }\n      var browser$1 = {};\n      var src = {};\n      var client = {};\n      var util$1 = {};\n      var UNKNOWN_FUNCTION = \"<unknown>\";\n      function parse(stackString) {\n        var lines = stackString.split(\"\\n\");\n        return lines.reduce(function(stack, line) {\n          var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n          if (parseResult) {\n            stack.push(parseResult);\n          }\n          return stack;\n        }, []);\n      }\n      var chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n      var chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n      function parseChrome(line) {\n        var parts = chromeRe.exec(line);\n        if (!parts) {\n          return null;\n        }\n        var isNative2 = parts[2] && parts[2].indexOf(\"native\") === 0;\n        var isEval = parts[2] && parts[2].indexOf(\"eval\") === 0;\n        var submatch = chromeEvalRe.exec(parts[2]);\n        if (isEval && submatch != null) {\n          parts[2] = submatch[1];\n          parts[3] = submatch[2];\n          parts[4] = submatch[3];\n        }\n        return {\n          file: !isNative2 ? parts[2] : null,\n          methodName: parts[1] || UNKNOWN_FUNCTION,\n          arguments: isNative2 ? [parts[2]] : [],\n          lineNumber: parts[3] ? +parts[3] : null,\n          column: parts[4] ? +parts[4] : null\n        };\n      }\n      var winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n      function parseWinjs(line) {\n        var parts = winjsRe.exec(line);\n        if (!parts) {\n          return null;\n        }\n        return {\n          file: parts[2],\n          methodName: parts[1] || UNKNOWN_FUNCTION,\n          arguments: [],\n          lineNumber: +parts[3],\n          column: parts[4] ? +parts[4] : null\n        };\n      }\n      var geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n      var geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n      function parseGecko(line) {\n        var parts = geckoRe.exec(line);\n        if (!parts) {\n          return null;\n        }\n        var isEval = parts[3] && parts[3].indexOf(\" > eval\") > -1;\n        var submatch = geckoEvalRe.exec(parts[3]);\n        if (isEval && submatch != null) {\n          parts[3] = submatch[1];\n          parts[4] = submatch[2];\n          parts[5] = null;\n        }\n        return {\n          file: parts[3],\n          methodName: parts[1] || UNKNOWN_FUNCTION,\n          arguments: parts[2] ? parts[2].split(\",\") : [],\n          lineNumber: parts[4] ? +parts[4] : null,\n          column: parts[5] ? +parts[5] : null\n        };\n      }\n      var javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n      function parseJSC(line) {\n        var parts = javaScriptCoreRe.exec(line);\n        if (!parts) {\n          return null;\n        }\n        return {\n          file: parts[3],\n          methodName: parts[1] || UNKNOWN_FUNCTION,\n          arguments: [],\n          lineNumber: +parts[4],\n          column: parts[5] ? +parts[5] : null\n        };\n      }\n      var nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n      function parseNode(line) {\n        var parts = nodeRe.exec(line);\n        if (!parts) {\n          return null;\n        }\n        return {\n          file: parts[2],\n          methodName: parts[1] || UNKNOWN_FUNCTION,\n          arguments: [],\n          lineNumber: +parts[3],\n          column: parts[4] ? +parts[4] : null\n        };\n      }\n      var stackTraceParser_esm = /* @__PURE__ */ Object.freeze({\n        __proto__: null,\n        parse\n      });\n      var require$$0 = /* @__PURE__ */ getAugmentedNamespace(stackTraceParser_esm);\n      (function(exports2) {\n        var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o, m, k, k2) {\n          if (k2 === void 0)\n            k2 = k;\n          var desc = Object.getOwnPropertyDescriptor(m, k);\n          if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n            desc = { enumerable: true, get: function() {\n              return m[k];\n            } };\n          }\n          Object.defineProperty(o, k2, desc);\n        } : function(o, m, k, k2) {\n          if (k2 === void 0)\n            k2 = k;\n          o[k2] = m[k];\n        });\n        var __setModuleDefault = commonjsGlobal && commonjsGlobal.__setModuleDefault || (Object.create ? function(o, v) {\n          Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n        } : function(o, v) {\n          o[\"default\"] = v;\n        });\n        var __importStar = commonjsGlobal && commonjsGlobal.__importStar || function(mod) {\n          if (mod && mod.__esModule)\n            return mod;\n          var result = {};\n          if (mod != null) {\n            for (var k in mod)\n              if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k))\n                __createBinding(result, mod, k);\n          }\n          __setModuleDefault(result, mod);\n          return result;\n        };\n        var __awaiter2 = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg, _arguments, P, generator) {\n          function adopt(value) {\n            return value instanceof P ? value : new P(function(resolve) {\n              resolve(value);\n            });\n          }\n          return new (P || (P = Promise))(function(resolve, reject) {\n            function fulfilled(value) {\n              try {\n                step(generator.next(value));\n              } catch (e) {\n                reject(e);\n              }\n            }\n            function rejected(value) {\n              try {\n                step(generator[\"throw\"](value));\n              } catch (e) {\n                reject(e);\n              }\n            }\n            function step(result) {\n              result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n            }\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\n          });\n        };\n        var __generator2 = commonjsGlobal && commonjsGlobal.__generator || function(thisArg, body) {\n          var _ = { label: 0, sent: function() {\n            if (t[0] & 1)\n              throw t[1];\n            return t[1];\n          }, trys: [], ops: [] }, f, y, t, g;\n          return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n            return this;\n          }), g;\n          function verb(n) {\n            return function(v) {\n              return step([n, v]);\n            };\n          }\n          function step(op) {\n            if (f)\n              throw new TypeError(\"Generator is already executing.\");\n            while (_)\n              try {\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n                  return t;\n                if (y = 0, t)\n                  op = [op[0] & 2, t.value];\n                switch (op[0]) {\n                  case 0:\n                  case 1:\n                    t = op;\n                    break;\n                  case 4:\n                    _.label++;\n                    return { value: op[1], done: false };\n                  case 5:\n                    _.label++;\n                    y = op[1];\n                    op = [0];\n                    continue;\n                  case 7:\n                    op = _.ops.pop();\n                    _.trys.pop();\n                    continue;\n                  default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                      _ = 0;\n                      continue;\n                    }\n                    if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                      _.label = op[1];\n                      break;\n                    }\n                    if (op[0] === 6 && _.label < t[1]) {\n                      _.label = t[1];\n                      t = op;\n                      break;\n                    }\n                    if (t && _.label < t[2]) {\n                      _.label = t[2];\n                      _.ops.push(op);\n                      break;\n                    }\n                    if (t[2])\n                      _.ops.pop();\n                    _.trys.pop();\n                    continue;\n                }\n                op = body.call(thisArg, _);\n              } catch (e) {\n                op = [6, e];\n                y = 0;\n              } finally {\n                f = t = 0;\n              }\n            if (op[0] & 5)\n              throw op[1];\n            return { value: op[0] ? op[1] : void 0, done: true };\n          }\n        };\n        Object.defineProperty(exports2, \"__esModule\", { value: true });\n        exports2.isBrowserConfig = exports2.clone = exports2.formatCGIData = exports2.filterUrl = exports2.filter = exports2.generateStackTrace = exports2.endpoint = exports2.instrument = exports2.isErrorObject = exports2.makeNotice = exports2.logger = exports2.sanitize = exports2.shallowClone = exports2.runAfterNotifyHandlers = exports2.runBeforeNotifyHandlers = exports2.getSourceForBacktrace = exports2.getCauses = exports2.calculateBacktraceShift = exports2.DEFAULT_BACKTRACE_SHIFT = exports2.makeBacktrace = exports2.objectIsExtensible = exports2.objectIsEmpty = exports2.mergeNotice = exports2.merge = void 0;\n        var stackTraceParser = __importStar(require$$0);\n        function merge(obj1, obj2) {\n          var result = {};\n          for (var k in obj1) {\n            result[k] = obj1[k];\n          }\n          for (var k in obj2) {\n            result[k] = obj2[k];\n          }\n          return result;\n        }\n        exports2.merge = merge;\n        function mergeNotice(notice1, notice2) {\n          var result = merge(notice1, notice2);\n          if (notice1.context && notice2.context) {\n            result.context = merge(notice1.context, notice2.context);\n          }\n          return result;\n        }\n        exports2.mergeNotice = mergeNotice;\n        function objectIsEmpty(obj) {\n          for (var k in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, k)) {\n              return false;\n            }\n          }\n          return true;\n        }\n        exports2.objectIsEmpty = objectIsEmpty;\n        function objectIsExtensible(obj) {\n          if (typeof Object.isExtensible !== \"function\") {\n            return true;\n          }\n          return Object.isExtensible(obj);\n        }\n        exports2.objectIsExtensible = objectIsExtensible;\n        function makeBacktrace(stack, filterHbSourceCode, logger2) {\n          if (filterHbSourceCode === void 0) {\n            filterHbSourceCode = false;\n          }\n          if (logger2 === void 0) {\n            logger2 = console;\n          }\n          try {\n            var backtrace = stackTraceParser.parse(stack).map(function(line) {\n              return {\n                file: line.file,\n                method: line.methodName,\n                number: line.lineNumber,\n                column: line.column\n              };\n            });\n            if (filterHbSourceCode) {\n              backtrace.splice(0, calculateBacktraceShift(backtrace));\n            }\n            return backtrace;\n          } catch (err) {\n            logger2.debug(err);\n            return [];\n          }\n        }\n        exports2.makeBacktrace = makeBacktrace;\n        function isFrameFromHbSourceCode(frame) {\n          var hasHbFile = false;\n          var hasHbMethod = false;\n          if (frame.file) {\n            hasHbFile = frame.file.toLowerCase().indexOf(\"@honeybadger-io\") > -1;\n          }\n          if (frame.method) {\n            hasHbMethod = frame.method.toLowerCase().indexOf(\"@honeybadger-io\") > -1;\n          }\n          return hasHbFile || hasHbMethod;\n        }\n        exports2.DEFAULT_BACKTRACE_SHIFT = 3;\n        function calculateBacktraceShift(backtrace) {\n          var shift = 0;\n          for (var i = 0; i < backtrace.length; i++) {\n            var frame = backtrace[i];\n            if (isFrameFromHbSourceCode(frame)) {\n              shift++;\n              continue;\n            }\n            if (!frame.file || frame.file === \"<anonymous>\") {\n              var nextFrame = backtrace[i + 1];\n              if (nextFrame && isFrameFromHbSourceCode(nextFrame)) {\n                shift++;\n                continue;\n              }\n            }\n            break;\n          }\n          return shift || exports2.DEFAULT_BACKTRACE_SHIFT;\n        }\n        exports2.calculateBacktraceShift = calculateBacktraceShift;\n        function getCauses(notice, logger2) {\n          if (notice.cause) {\n            var causes = [];\n            var cause = notice;\n            while (causes.length < 3 && (cause = cause.cause)) {\n              causes.push({\n                class: cause.name,\n                message: cause.message,\n                backtrace: typeof cause.stack == \"string\" ? makeBacktrace(cause.stack, false, logger2) : null\n              });\n            }\n            return causes;\n          }\n          return [];\n        }\n        exports2.getCauses = getCauses;\n        function getSourceForBacktrace(backtrace, getSourceFileHandler) {\n          return __awaiter2(this, void 0, void 0, function() {\n            var result, index, trace, fileContent;\n            return __generator2(this, function(_a) {\n              switch (_a.label) {\n                case 0:\n                  result = [];\n                  if (!getSourceFileHandler || !backtrace || !backtrace.length) {\n                    return [2, result];\n                  }\n                  index = 0;\n                  _a.label = 1;\n                case 1:\n                  if (!backtrace.length)\n                    return [3, 3];\n                  trace = backtrace.splice(0)[index];\n                  return [4, getSourceFileHandler(trace.file)];\n                case 2:\n                  fileContent = _a.sent();\n                  result[index] = getSourceCodeSnippet(fileContent, trace.number);\n                  index++;\n                  return [3, 1];\n                case 3:\n                  return [2, result];\n              }\n            });\n          });\n        }\n        exports2.getSourceForBacktrace = getSourceForBacktrace;\n        function runBeforeNotifyHandlers(notice, handlers) {\n          var result = true;\n          for (var i = 0, len = handlers.length; i < len; i++) {\n            var handler = handlers[i];\n            if (handler(notice) === false) {\n              result = false;\n            }\n          }\n          return result;\n        }\n        exports2.runBeforeNotifyHandlers = runBeforeNotifyHandlers;\n        function runAfterNotifyHandlers(notice, handlers, error) {\n          if (notice && notice.afterNotify) {\n            notice.afterNotify(error, notice);\n          }\n          for (var i = 0, len = handlers.length; i < len; i++) {\n            handlers[i](error, notice);\n          }\n          return true;\n        }\n        exports2.runAfterNotifyHandlers = runAfterNotifyHandlers;\n        function shallowClone(obj) {\n          if (typeof obj !== \"object\" || obj === null) {\n            return {};\n          }\n          var result = {};\n          for (var k in obj) {\n            result[k] = obj[k];\n          }\n          return result;\n        }\n        exports2.shallowClone = shallowClone;\n        function sanitize2(obj, maxDepth) {\n          if (maxDepth === void 0) {\n            maxDepth = 8;\n          }\n          var seenObjects = [];\n          function seen(obj2) {\n            if (!obj2 || typeof obj2 !== \"object\") {\n              return false;\n            }\n            for (var i = 0; i < seenObjects.length; i++) {\n              var value = seenObjects[i];\n              if (value === obj2) {\n                return true;\n              }\n            }\n            seenObjects.push(obj2);\n            return false;\n          }\n          function canSerialize(obj2) {\n            var typeOfObj = typeof obj2;\n            if (/function/.test(typeOfObj)) {\n              return obj2.name === \"toJSON\";\n            }\n            if (/symbol/.test(typeOfObj)) {\n              return false;\n            }\n            if (obj2 === null) {\n              return false;\n            }\n            if (typeof obj2 === \"object\" && typeof obj2.hasOwnProperty === \"undefined\") {\n              return false;\n            }\n            return true;\n          }\n          function serialize(obj2, depth) {\n            if (depth === void 0) {\n              depth = 0;\n            }\n            if (depth >= maxDepth) {\n              return \"[DEPTH]\";\n            }\n            if (!canSerialize(obj2)) {\n              return Object.prototype.toString.call(obj2);\n            }\n            if (seen(obj2)) {\n              return \"[RECURSION]\";\n            }\n            if (Array.isArray(obj2)) {\n              return obj2.map(function(o) {\n                return safeSerialize(o, depth + 1);\n              });\n            }\n            if (typeof obj2 === \"object\") {\n              var ret = {};\n              for (var k in obj2) {\n                var v = obj2[k];\n                if (Object.prototype.hasOwnProperty.call(obj2, k) && k != null && v != null) {\n                  ret[k] = safeSerialize(v, depth + 1);\n                }\n              }\n              return ret;\n            }\n            return obj2;\n          }\n          function safeSerialize(obj2, depth) {\n            if (depth === void 0) {\n              depth = 0;\n            }\n            try {\n              return serialize(obj2, depth);\n            } catch (e) {\n              return \"[ERROR] \".concat(e);\n            }\n          }\n          return safeSerialize(obj);\n        }\n        exports2.sanitize = sanitize2;\n        function logger(client2) {\n          var log = function(method) {\n            return function() {\n              var _a;\n              var args = [];\n              for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n              }\n              if (method === \"debug\") {\n                if (!client2.config.debug) {\n                  return;\n                }\n                method = \"log\";\n              }\n              args.unshift(\"[Honeybadger]\");\n              (_a = client2.config.logger)[method].apply(_a, args);\n            };\n          };\n          return {\n            log: log(\"log\"),\n            info: log(\"info\"),\n            debug: log(\"debug\"),\n            warn: log(\"warn\"),\n            error: log(\"error\")\n          };\n        }\n        exports2.logger = logger;\n        function makeNotice2(thing) {\n          var notice;\n          if (!thing) {\n            notice = {};\n          } else if (isErrorObject(thing)) {\n            var e = thing;\n            notice = merge(thing, { name: e.name, message: e.message, stack: e.stack, cause: e.cause });\n          } else if (typeof thing === \"object\") {\n            notice = shallowClone(thing);\n          } else {\n            var m = String(thing);\n            notice = { message: m };\n          }\n          return notice;\n        }\n        exports2.makeNotice = makeNotice2;\n        function isErrorObject(thing) {\n          return thing instanceof Error || Object.prototype.toString.call(thing) === \"[object Error]\";\n        }\n        exports2.isErrorObject = isErrorObject;\n        function instrument2(object, name, replacement) {\n          if (!object || !name || !replacement || !(name in object)) {\n            return;\n          }\n          try {\n            var original = object[name];\n            while (original && original.__hb_original) {\n              original = original.__hb_original;\n            }\n            object[name] = replacement(original);\n            object[name].__hb_original = original;\n          } catch (_e) {\n          }\n        }\n        exports2.instrument = instrument2;\n        function endpoint(base, path) {\n          var endpoint2 = base.trim().replace(/\\/$/, \"\");\n          path = path.trim().replace(/(^\\/|\\/$)/g, \"\");\n          return \"\".concat(endpoint2, \"/\").concat(path);\n        }\n        exports2.endpoint = endpoint;\n        function generateStackTrace() {\n          try {\n            throw new Error(\"\");\n          } catch (e) {\n            if (e.stack) {\n              return e.stack;\n            }\n          }\n          var maxStackSize = 10;\n          var stack = [];\n          var curr = arguments.callee;\n          while (curr && stack.length < maxStackSize) {\n            if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n              stack.push(RegExp.$1 || \"<anonymous>\");\n            } else {\n              stack.push(\"<anonymous>\");\n            }\n            try {\n              curr = curr.caller;\n            } catch (e) {\n              break;\n            }\n          }\n          return stack.join(\"\\n\");\n        }\n        exports2.generateStackTrace = generateStackTrace;\n        function filter(obj, filters) {\n          if (!is(\"Object\", obj)) {\n            return;\n          }\n          if (!is(\"Array\", filters)) {\n            filters = [];\n          }\n          var seen = [];\n          function filter2(obj2) {\n            var k, newObj;\n            if (is(\"Object\", obj2) || is(\"Array\", obj2)) {\n              if (seen.indexOf(obj2) !== -1) {\n                return \"[CIRCULAR DATA STRUCTURE]\";\n              }\n              seen.push(obj2);\n            }\n            if (is(\"Object\", obj2)) {\n              newObj = {};\n              for (k in obj2) {\n                if (filterMatch(k, filters)) {\n                  newObj[k] = \"[FILTERED]\";\n                } else {\n                  newObj[k] = filter2(obj2[k]);\n                }\n              }\n              return newObj;\n            }\n            if (is(\"Array\", obj2)) {\n              return obj2.map(function(v) {\n                return filter2(v);\n              });\n            }\n            if (is(\"Function\", obj2)) {\n              return \"[FUNC]\";\n            }\n            return obj2;\n          }\n          return filter2(obj);\n        }\n        exports2.filter = filter;\n        function filterMatch(key, filters) {\n          for (var i = 0; i < filters.length; i++) {\n            if (key.toLowerCase().indexOf(filters[i].toLowerCase()) !== -1) {\n              return true;\n            }\n          }\n          return false;\n        }\n        function is(type, obj) {\n          var klass = Object.prototype.toString.call(obj).slice(8, -1);\n          return obj !== void 0 && obj !== null && klass === type;\n        }\n        function filterUrl(url, filters) {\n          if (!filters) {\n            return url;\n          }\n          if (typeof url !== \"string\") {\n            return url;\n          }\n          var query = url.split(/\\?/, 2)[1];\n          if (!query) {\n            return url;\n          }\n          var result = url;\n          query.split(/[&]\\s?/).forEach(function(pair) {\n            var _a = pair.split(\"=\", 2), key = _a[0], value = _a[1];\n            if (filterMatch(key, filters)) {\n              result = result.replace(\"\".concat(key, \"=\").concat(value), \"\".concat(key, \"=[FILTERED]\"));\n            }\n          });\n          return result;\n        }\n        exports2.filterUrl = filterUrl;\n        function formatCGIData(vars, prefix) {\n          if (prefix === void 0) {\n            prefix = \"\";\n          }\n          var formattedVars = {};\n          Object.keys(vars).forEach(function(key) {\n            var formattedKey = prefix + key.replace(/\\W/g, \"_\").toUpperCase();\n            formattedVars[formattedKey] = vars[key];\n          });\n          return formattedVars;\n        }\n        exports2.formatCGIData = formatCGIData;\n        function clone(obj) {\n          return JSON.parse(JSON.stringify(obj));\n        }\n        exports2.clone = clone;\n        function getSourceCodeSnippet(fileData, lineNumber, sourceRadius) {\n          if (sourceRadius === void 0) {\n            sourceRadius = 2;\n          }\n          if (!fileData) {\n            return null;\n          }\n          var lines = fileData.split(\"\\n\");\n          lines.unshift(\"\");\n          var start = lineNumber - sourceRadius;\n          var end = lineNumber + sourceRadius;\n          var result = {};\n          for (var i = start; i <= end; i++) {\n            var line = lines[i];\n            if (typeof line === \"string\") {\n              result[i] = line;\n            }\n          }\n          return result;\n        }\n        function isBrowserConfig(config) {\n          return config.async !== void 0;\n        }\n        exports2.isBrowserConfig = isBrowserConfig;\n      })(util$1);\n      var store = {};\n      Object.defineProperty(store, \"__esModule\", { value: true });\n      store.GlobalStore = void 0;\n      var util_1$7 = util$1;\n      var GlobalStore = (\n        /** @class */\n        function() {\n          function GlobalStore2(contents, breadcrumbsLimit) {\n            this.contents = contents;\n            this.breadcrumbsLimit = breadcrumbsLimit;\n          }\n          GlobalStore2.create = function(contents, breadcrumbsLimit) {\n            return new GlobalStore2(contents, breadcrumbsLimit);\n          };\n          GlobalStore2.prototype.available = function() {\n            return true;\n          };\n          GlobalStore2.prototype.getContents = function(key) {\n            var value = key ? this.contents[key] : this.contents;\n            return JSON.parse(JSON.stringify(value));\n          };\n          GlobalStore2.prototype.setContext = function(context) {\n            this.contents.context = (0, util_1$7.merge)(this.contents.context, context || {});\n          };\n          GlobalStore2.prototype.addBreadcrumb = function(breadcrumb) {\n            if (this.contents.breadcrumbs.length == this.breadcrumbsLimit) {\n              this.contents.breadcrumbs.shift();\n            }\n            this.contents.breadcrumbs.push(breadcrumb);\n          };\n          GlobalStore2.prototype.clear = function() {\n            this.contents.context = {};\n            this.contents.breadcrumbs = [];\n          };\n          GlobalStore2.prototype.run = function(callback) {\n            return callback();\n          };\n          return GlobalStore2;\n        }()\n      );\n      store.GlobalStore = GlobalStore;\n      var __assign = commonjsGlobal && commonjsGlobal.__assign || function() {\n        __assign = Object.assign || function(t) {\n          for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s)\n              if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n          }\n          return t;\n        };\n        return __assign.apply(this, arguments);\n      };\n      Object.defineProperty(client, \"__esModule\", { value: true });\n      client.Client = void 0;\n      var util_1$6 = util$1;\n      var store_1 = store;\n      var notifier = {\n        name: \"honeybadger-js\",\n        url: \"https://github.com/honeybadger-io/honeybadger-js\",\n        version: \"4.9.3\"\n      };\n      var TAG_SEPARATOR = /,|\\s+/;\n      var NOT_BLANK = /\\S/;\n      var Client = (\n        /** @class */\n        function() {\n          function Client2(opts, transport2) {\n            if (opts === void 0) {\n              opts = {};\n            }\n            this.__pluginsExecuted = false;\n            this.__store = null;\n            this.__beforeNotifyHandlers = [];\n            this.__afterNotifyHandlers = [];\n            this.config = __assign({ apiKey: null, endpoint: \"https://api.honeybadger.io\", environment: null, hostname: null, projectRoot: null, component: null, action: null, revision: null, reportData: null, breadcrumbsEnabled: true, maxBreadcrumbs: 40, maxObjectDepth: 8, logger: console, developmentEnvironments: [\"dev\", \"development\", \"test\"], debug: false, tags: null, enableUncaught: true, enableUnhandledRejection: true, afterUncaught: function() {\n              return true;\n            }, filters: [\"creditcard\", \"password\"], __plugins: [] }, opts);\n            this.__initStore();\n            this.__transport = transport2;\n            this.logger = (0, util_1$6.logger)(this);\n          }\n          Client2.prototype.getVersion = function() {\n            return notifier.version;\n          };\n          Client2.prototype.configure = function(opts) {\n            var _this = this;\n            if (opts === void 0) {\n              opts = {};\n            }\n            for (var k in opts) {\n              this.config[k] = opts[k];\n            }\n            if (!this.__pluginsExecuted) {\n              this.__pluginsExecuted = true;\n              this.config.__plugins.forEach(function(plugin) {\n                return plugin.load(_this);\n              });\n            }\n            return this;\n          };\n          Client2.prototype.__initStore = function() {\n            this.__store = new store_1.GlobalStore({ context: {}, breadcrumbs: [] }, this.config.maxBreadcrumbs);\n          };\n          Client2.prototype.beforeNotify = function(handler) {\n            this.__beforeNotifyHandlers.push(handler);\n            return this;\n          };\n          Client2.prototype.afterNotify = function(handler) {\n            this.__afterNotifyHandlers.push(handler);\n            return this;\n          };\n          Client2.prototype.setContext = function(context) {\n            if (typeof context === \"object\" && context != null) {\n              this.__store.setContext(context);\n            }\n            return this;\n          };\n          Client2.prototype.resetContext = function(context) {\n            this.logger.warn(\"Deprecation warning: `Honeybadger.resetContext()` has been deprecated; please use `Honeybadger.clear()` instead.\");\n            this.__store.clear();\n            if (typeof context === \"object\" && context !== null) {\n              this.__store.setContext(context);\n            }\n            return this;\n          };\n          Client2.prototype.clear = function() {\n            this.__store.clear();\n            return this;\n          };\n          Client2.prototype.notify = function(noticeable, name, extra) {\n            var _this = this;\n            if (name === void 0) {\n              name = void 0;\n            }\n            if (extra === void 0) {\n              extra = void 0;\n            }\n            var preConditionError = null;\n            var notice = this.makeNotice(noticeable, name, extra);\n            if (!notice) {\n              this.logger.debug(\"failed to build error report\");\n              preConditionError = new Error(\"failed to build error report\");\n            }\n            if (!preConditionError && this.config.reportData === false) {\n              this.logger.debug(\"skipping error report: honeybadger.js is disabled\", notice);\n              preConditionError = new Error(\"honeybadger.js is disabled\");\n            }\n            if (!preConditionError && this.__developmentMode()) {\n              this.logger.log(\"honeybadger.js is in development mode; the following error report will be sent in production.\", notice);\n              preConditionError = new Error(\"honeybadger.js is in development mode\");\n            }\n            if (!preConditionError && !this.config.apiKey) {\n              this.logger.warn(\"could not send error report: no API key has been configured\", notice);\n              preConditionError = new Error(\"missing API key\");\n            }\n            var sourceCodeData = notice && notice.backtrace ? notice.backtrace.map(function(trace) {\n              return (0, util_1$6.shallowClone)(trace);\n            }) : null;\n            var beforeNotifyResult = (0, util_1$6.runBeforeNotifyHandlers)(notice, this.__beforeNotifyHandlers);\n            if (!preConditionError && !beforeNotifyResult) {\n              this.logger.debug(\"skipping error report: beforeNotify handlers returned false\", notice);\n              preConditionError = new Error(\"beforeNotify handlers returned false\");\n            }\n            if (preConditionError) {\n              (0, util_1$6.runAfterNotifyHandlers)(notice, this.__afterNotifyHandlers, preConditionError);\n              return false;\n            }\n            this.addBreadcrumb(\"Honeybadger Notice\", {\n              category: \"notice\",\n              metadata: {\n                message: notice.message,\n                name: notice.name,\n                stack: notice.stack\n              }\n            });\n            var breadcrumbs2 = this.__store.getContents(\"breadcrumbs\");\n            notice.__breadcrumbs = this.config.breadcrumbsEnabled ? breadcrumbs2 : [];\n            (0, util_1$6.getSourceForBacktrace)(sourceCodeData, this.__getSourceFileHandler).then(function(sourcePerTrace) {\n              sourcePerTrace.forEach(function(source, index) {\n                notice.backtrace[index].source = source;\n              });\n              var payload = _this.__buildPayload(notice);\n              _this.__transport.send({\n                headers: {\n                  \"X-API-Key\": _this.config.apiKey,\n                  \"Content-Type\": \"application/json\",\n                  \"Accept\": \"text/json, application/json\"\n                },\n                method: \"POST\",\n                endpoint: (0, util_1$6.endpoint)(_this.config.endpoint, \"/v1/notices/js\"),\n                maxObjectDepth: _this.config.maxObjectDepth,\n                logger: _this.logger\n              }, payload).then(function(res) {\n                if (res.statusCode !== 201) {\n                  (0, util_1$6.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, new Error(\"Bad HTTP response: \".concat(res.statusCode)));\n                  _this.logger.warn(\"Error report failed: unknown response from server. code=\".concat(res.statusCode));\n                  return;\n                }\n                var uuid = JSON.parse(res.body).id;\n                (0, util_1$6.runAfterNotifyHandlers)((0, util_1$6.merge)(notice, {\n                  id: uuid\n                }), _this.__afterNotifyHandlers);\n                _this.logger.info(\"Error report sent ⚡ https://app.honeybadger.io/notice/\".concat(uuid));\n              }).catch(function(err) {\n                _this.logger.error(\"Error report failed: an unknown error occurred.\", \"message=\".concat(err.message));\n                (0, util_1$6.runAfterNotifyHandlers)(notice, _this.__afterNotifyHandlers, err);\n              });\n            });\n            return true;\n          };\n          Client2.prototype.notifyAsync = function(noticeable, name, extra) {\n            var _this = this;\n            if (name === void 0) {\n              name = void 0;\n            }\n            if (extra === void 0) {\n              extra = void 0;\n            }\n            return new Promise(function(resolve, reject) {\n              var applyAfterNotify = function(partialNotice) {\n                var originalAfterNotify = partialNotice.afterNotify;\n                partialNotice.afterNotify = function(err) {\n                  originalAfterNotify === null || originalAfterNotify === void 0 ? void 0 : originalAfterNotify.call(_this, err);\n                  if (err) {\n                    return reject(err);\n                  }\n                  resolve();\n                };\n              };\n              var objectToOverride;\n              if (noticeable.afterNotify) {\n                objectToOverride = noticeable;\n              } else if (name && name.afterNotify) {\n                objectToOverride = name;\n              } else if (extra && extra.afterNotify) {\n                objectToOverride = extra;\n              } else if (name && typeof name === \"object\") {\n                objectToOverride = name;\n              } else if (extra) {\n                objectToOverride = extra;\n              } else {\n                objectToOverride = name = {};\n              }\n              applyAfterNotify(objectToOverride);\n              _this.notify(noticeable, name, extra);\n            });\n          };\n          Client2.prototype.makeNotice = function(noticeable, name, extra) {\n            if (name === void 0) {\n              name = void 0;\n            }\n            if (extra === void 0) {\n              extra = void 0;\n            }\n            var notice = (0, util_1$6.makeNotice)(noticeable);\n            if (name && !(typeof name === \"object\")) {\n              var n = String(name);\n              name = { name: n };\n            }\n            if (name) {\n              notice = (0, util_1$6.mergeNotice)(notice, name);\n            }\n            if (typeof extra === \"object\" && extra !== null) {\n              notice = (0, util_1$6.mergeNotice)(notice, extra);\n            }\n            if ((0, util_1$6.objectIsEmpty)(notice)) {\n              return null;\n            }\n            var context = this.__store.getContents(\"context\");\n            var noticeTags = this.__constructTags(notice.tags);\n            var contextTags = this.__constructTags(context[\"tags\"]);\n            var configTags = this.__constructTags(this.config.tags);\n            var tags = noticeTags.concat(contextTags).concat(configTags);\n            var uniqueTags = tags.filter(function(item, index) {\n              return tags.indexOf(item) === index;\n            });\n            notice = (0, util_1$6.merge)(notice, {\n              name: notice.name || \"Error\",\n              context: (0, util_1$6.merge)(context, notice.context),\n              projectRoot: notice.projectRoot || this.config.projectRoot,\n              environment: notice.environment || this.config.environment,\n              component: notice.component || this.config.component,\n              action: notice.action || this.config.action,\n              revision: notice.revision || this.config.revision,\n              tags: uniqueTags\n            });\n            if (typeof notice.stack !== \"string\" || !notice.stack.trim()) {\n              notice.stack = (0, util_1$6.generateStackTrace)();\n              notice.backtrace = (0, util_1$6.makeBacktrace)(notice.stack, true, this.logger);\n            } else {\n              notice.backtrace = (0, util_1$6.makeBacktrace)(notice.stack, false, this.logger);\n            }\n            return notice;\n          };\n          Client2.prototype.addBreadcrumb = function(message, opts) {\n            if (!this.config.breadcrumbsEnabled) {\n              return;\n            }\n            opts = opts || {};\n            var metadata = (0, util_1$6.shallowClone)(opts.metadata);\n            var category = opts.category || \"custom\";\n            var timestamp = (/* @__PURE__ */ new Date()).toISOString();\n            this.__store.addBreadcrumb({\n              category,\n              message,\n              metadata,\n              timestamp\n            });\n            return this;\n          };\n          Client2.prototype.__getBreadcrumbs = function() {\n            return this.__store.getContents(\"breadcrumbs\").slice();\n          };\n          Client2.prototype.__getContext = function() {\n            return this.__store.getContents(\"context\");\n          };\n          Client2.prototype.__developmentMode = function() {\n            if (this.config.reportData === true) {\n              return false;\n            }\n            return this.config.environment && this.config.developmentEnvironments.includes(this.config.environment);\n          };\n          Client2.prototype.__buildPayload = function(notice) {\n            var headers = (0, util_1$6.filter)(notice.headers, this.config.filters) || {};\n            var cgiData = (0, util_1$6.filter)(__assign(__assign({}, notice.cgiData), (0, util_1$6.formatCGIData)(headers, \"HTTP_\")), this.config.filters);\n            return {\n              notifier,\n              breadcrumbs: {\n                enabled: !!this.config.breadcrumbsEnabled,\n                trail: notice.__breadcrumbs || []\n              },\n              error: {\n                class: notice.name,\n                message: notice.message,\n                backtrace: notice.backtrace,\n                fingerprint: notice.fingerprint,\n                tags: notice.tags,\n                causes: (0, util_1$6.getCauses)(notice, this.logger)\n              },\n              request: {\n                url: (0, util_1$6.filterUrl)(notice.url, this.config.filters),\n                component: notice.component,\n                action: notice.action,\n                context: notice.context,\n                cgi_data: cgiData,\n                params: (0, util_1$6.filter)(notice.params, this.config.filters) || {},\n                session: (0, util_1$6.filter)(notice.session, this.config.filters) || {}\n              },\n              server: {\n                project_root: notice.projectRoot,\n                environment_name: notice.environment,\n                revision: notice.revision,\n                hostname: this.config.hostname,\n                time: (/* @__PURE__ */ new Date()).toUTCString()\n              },\n              details: notice.details || {}\n            };\n          };\n          Client2.prototype.__constructTags = function(tags) {\n            if (!tags) {\n              return [];\n            }\n            return tags.toString().split(TAG_SEPARATOR).filter(function(tag) {\n              return NOT_BLANK.test(tag);\n            });\n          };\n          return Client2;\n        }()\n      );\n      client.Client = Client;\n      var types = {};\n      Object.defineProperty(types, \"__esModule\", { value: true });\n      (function(exports2) {\n        var __createBinding = commonjsGlobal && commonjsGlobal.__createBinding || (Object.create ? function(o, m, k, k2) {\n          if (k2 === void 0)\n            k2 = k;\n          var desc = Object.getOwnPropertyDescriptor(m, k);\n          if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n            desc = { enumerable: true, get: function() {\n              return m[k];\n            } };\n          }\n          Object.defineProperty(o, k2, desc);\n        } : function(o, m, k, k2) {\n          if (k2 === void 0)\n            k2 = k;\n          o[k2] = m[k];\n        });\n        var __setModuleDefault = commonjsGlobal && commonjsGlobal.__setModuleDefault || (Object.create ? function(o, v) {\n          Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n        } : function(o, v) {\n          o[\"default\"] = v;\n        });\n        var __exportStar = commonjsGlobal && commonjsGlobal.__exportStar || function(m, exports3) {\n          for (var p in m)\n            if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports3, p))\n              __createBinding(exports3, m, p);\n        };\n        var __importStar = commonjsGlobal && commonjsGlobal.__importStar || function(mod) {\n          if (mod && mod.__esModule)\n            return mod;\n          var result = {};\n          if (mod != null) {\n            for (var k in mod)\n              if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k))\n                __createBinding(result, mod, k);\n          }\n          __setModuleDefault(result, mod);\n          return result;\n        };\n        Object.defineProperty(exports2, \"__esModule\", { value: true });\n        exports2.Util = exports2.Types = exports2.Client = void 0;\n        var client_1 = client;\n        Object.defineProperty(exports2, \"Client\", { enumerable: true, get: function() {\n          return client_1.Client;\n        } });\n        __exportStar(store, exports2);\n        exports2.Types = __importStar(types);\n        exports2.Util = __importStar(util$1);\n      })(src);\n      var util = {};\n      Object.defineProperty(util, \"__esModule\", { value: true });\n      util.globalThisOrWindow = util.preferCatch = util.encodeCookie = util.decodeCookie = util.localURLPathname = util.parseURL = util.nativeFetch = util.stringTextOfElement = util.stringSelectorOfElement = util.stringNameOfElement = void 0;\n      function stringNameOfElement(element) {\n        if (!element || !element.tagName) {\n          return \"\";\n        }\n        var name = element.tagName.toLowerCase();\n        if (name === \"html\") {\n          return \"\";\n        }\n        if (element.id) {\n          name += \"#\".concat(element.id);\n        }\n        var stringClassNames = element.getAttribute(\"class\");\n        if (stringClassNames) {\n          stringClassNames.split(/\\s+/).forEach(function(className) {\n            name += \".\".concat(className);\n          });\n        }\n        [\"alt\", \"name\", \"title\", \"type\"].forEach(function(attrName) {\n          var attr = element.getAttribute(attrName);\n          if (attr) {\n            name += \"[\".concat(attrName, '=\"').concat(attr, '\"]');\n          }\n        });\n        var siblings = getSiblings(element);\n        if (siblings.length > 1) {\n          name += \":nth-child(\".concat(Array.prototype.indexOf.call(siblings, element) + 1, \")\");\n        }\n        return name;\n      }\n      util.stringNameOfElement = stringNameOfElement;\n      function stringSelectorOfElement(element) {\n        var name = stringNameOfElement(element);\n        if (element.parentNode && element.parentNode.tagName) {\n          var parentName = stringSelectorOfElement(element.parentNode);\n          if (parentName.length > 0) {\n            return \"\".concat(parentName, \" > \").concat(name);\n          }\n        }\n        return name;\n      }\n      util.stringSelectorOfElement = stringSelectorOfElement;\n      function stringTextOfElement(element) {\n        var text = element.textContent || element.innerText || \"\";\n        if (!text && (element.type === \"submit\" || element.type === \"button\")) {\n          text = element.value;\n        }\n        return truncate(text.trim(), 300);\n      }\n      util.stringTextOfElement = stringTextOfElement;\n      function nativeFetch() {\n        var global2 = globalThisOrWindow();\n        if (!global2.fetch) {\n          return false;\n        }\n        if (isNative(global2.fetch)) {\n          return true;\n        }\n        try {\n          var sandbox = document.createElement(\"iframe\");\n          sandbox.style.display = \"none\";\n          document.head.appendChild(sandbox);\n          var result = sandbox.contentWindow.fetch && isNative(sandbox.contentWindow.fetch);\n          document.head.removeChild(sandbox);\n          return result;\n        } catch (err) {\n          if (console && console.warn) {\n            console.warn(\"failed to detect native fetch via iframe: \" + err);\n          }\n        }\n        return false;\n      }\n      util.nativeFetch = nativeFetch;\n      function isNative(func) {\n        return func.toString().indexOf(\"native\") !== -1;\n      }\n      function parseURL(url) {\n        var match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/) || {};\n        return {\n          protocol: match[2],\n          host: match[4],\n          pathname: match[5]\n        };\n      }\n      util.parseURL = parseURL;\n      function localURLPathname(url) {\n        var parsed = parseURL(url);\n        var parsedDocURL = parseURL(document.URL);\n        if (!parsed.host || !parsed.protocol) {\n          return parsed.pathname;\n        }\n        if (parsed.protocol === parsedDocURL.protocol && parsed.host === parsedDocURL.host) {\n          return parsed.pathname;\n        }\n        return \"\".concat(parsed.protocol, \"://\").concat(parsed.host).concat(parsed.pathname);\n      }\n      util.localURLPathname = localURLPathname;\n      function decodeCookie(string) {\n        var result = {};\n        string.split(/[;,]\\s?/).forEach(function(pair) {\n          var _a = pair.split(\"=\", 2), key = _a[0], value = _a[1];\n          result[key] = value;\n        });\n        return result;\n      }\n      util.decodeCookie = decodeCookie;\n      function encodeCookie(object) {\n        if (typeof object !== \"object\") {\n          return void 0;\n        }\n        var cookies = [];\n        for (var k in object) {\n          cookies.push(k + \"=\" + object[k]);\n        }\n        return cookies.join(\";\");\n      }\n      util.encodeCookie = encodeCookie;\n      function getSiblings(element) {\n        try {\n          var nodes = element.parentNode.childNodes;\n          var siblings_1 = [];\n          Array.prototype.forEach.call(nodes, function(node) {\n            if (node.tagName && node.tagName === element.tagName) {\n              siblings_1.push(node);\n            }\n          });\n          return siblings_1;\n        } catch (e) {\n          return [];\n        }\n      }\n      function truncate(string, length) {\n        if (string.length > length) {\n          string = string.substr(0, length) + \"...\";\n        }\n        return string;\n      }\n      util.preferCatch = function() {\n        var preferCatch = true;\n        if (typeof window === \"undefined\")\n          return preferCatch;\n        if (!window.atob) {\n          preferCatch = false;\n        }\n        if (window.ErrorEvent) {\n          try {\n            if (new window.ErrorEvent(\"\").colno === 0) {\n              preferCatch = false;\n            }\n          } catch (_e) {\n          }\n        }\n        return preferCatch;\n      }();\n      function globalThisOrWindow() {\n        if (typeof globalThis !== \"undefined\") {\n          return globalThis;\n        }\n        if (typeof self !== \"undefined\") {\n          return self;\n        }\n        return window;\n      }\n      util.globalThisOrWindow = globalThisOrWindow;\n      var onerror = {};\n      Object.defineProperty(onerror, \"__esModule\", { value: true });\n      onerror.onError = onerror.ignoreNextOnError = void 0;\n      var core_1$5 = src;\n      var util_1$5 = util;\n      var instrument$4 = core_1$5.Util.instrument, makeNotice = core_1$5.Util.makeNotice;\n      var ignoreOnError = 0;\n      var currentTimeout;\n      function ignoreNextOnError() {\n        ignoreOnError += 1;\n        clearTimeout(currentTimeout);\n        currentTimeout = setTimeout(function() {\n          ignoreOnError = 0;\n        });\n      }\n      onerror.ignoreNextOnError = ignoreNextOnError;\n      function onError(_window) {\n        if (_window === void 0) {\n          _window = (0, util_1$5.globalThisOrWindow)();\n        }\n        return {\n          load: function(client2) {\n            instrument$4(_window, \"onerror\", function(original) {\n              var onerror2 = function(msg, url, line, col, err) {\n                client2.logger.debug(\"window.onerror callback invoked\", arguments);\n                if (ignoreOnError > 0) {\n                  client2.logger.debug(\"Ignoring window.onerror (error likely reported earlier)\", arguments);\n                  ignoreOnError -= 1;\n                  return;\n                }\n                if (line === 0 && /Script error\\.?/.test(msg)) {\n                  if (client2.config.enableUncaught) {\n                    client2.logger.warn(\"Ignoring cross-domain script error: enable CORS to track these types of errors\", arguments);\n                  }\n                  return;\n                }\n                var notice = makeNotice(err);\n                if (!notice.name) {\n                  notice.name = \"window.onerror\";\n                }\n                if (!notice.message) {\n                  notice.message = msg;\n                }\n                if (!notice.stack) {\n                  notice.stack = [notice.message, \"\\n    at ? (\", url || \"unknown\", \":\", line || 0, \":\", col || 0, \")\"].join(\"\");\n                }\n                client2.addBreadcrumb(notice.name === \"window.onerror\" || !notice.name ? \"window.onerror\" : \"window.onerror: \".concat(notice.name), {\n                  category: \"error\",\n                  metadata: {\n                    name: notice.name,\n                    message: notice.message,\n                    stack: notice.stack\n                  }\n                });\n                if (client2.config.enableUncaught) {\n                  client2.notify(notice);\n                }\n              };\n              return function(msg, url, line, col, err) {\n                onerror2(msg, url, line, col, err);\n                if (typeof original === \"function\") {\n                  return original.apply(_window, arguments);\n                }\n                return false;\n              };\n            });\n          }\n        };\n      }\n      onerror.onError = onError;\n      var onunhandledrejection = {};\n      Object.defineProperty(onunhandledrejection, \"__esModule\", { value: true });\n      var core_1$4 = src;\n      var util_1$4 = util;\n      var instrument$3 = core_1$4.Util.instrument;\n      function default_1$3(_window) {\n        if (_window === void 0) {\n          _window = (0, util_1$4.globalThisOrWindow)();\n        }\n        return {\n          load: function(client2) {\n            if (!client2.config.enableUnhandledRejection) {\n              return;\n            }\n            instrument$3(_window, \"onunhandledrejection\", function(original) {\n              function onunhandledrejection2(promiseRejectionEvent) {\n                var _a;\n                client2.logger.debug(\"window.onunhandledrejection callback invoked\", arguments);\n                if (!client2.config.enableUnhandledRejection) {\n                  return;\n                }\n                var reason = promiseRejectionEvent.reason;\n                if (reason instanceof Error) {\n                  var fileName = \"unknown\";\n                  var lineNumber = 0;\n                  var stackFallback = \"\".concat(reason.message, \"\\n    at ? (\").concat(fileName, \":\").concat(lineNumber, \")\");\n                  var stack = reason.stack || stackFallback;\n                  var err = {\n                    name: reason.name,\n                    message: \"UnhandledPromiseRejectionWarning: \".concat(reason),\n                    stack\n                  };\n                  client2.addBreadcrumb(\"window.onunhandledrejection: \".concat(err.name), {\n                    category: \"error\",\n                    metadata: err\n                  });\n                  client2.notify(err);\n                  return;\n                }\n                var message = typeof reason === \"string\" ? reason : (_a = JSON.stringify(reason)) !== null && _a !== void 0 ? _a : \"Unspecified reason\";\n                client2.notify({\n                  name: \"window.onunhandledrejection\",\n                  message: \"UnhandledPromiseRejectionWarning: \".concat(message)\n                });\n              }\n              return function(promiseRejectionEvent) {\n                onunhandledrejection2(promiseRejectionEvent);\n                if (typeof original === \"function\") {\n                  original.apply(this, arguments);\n                }\n              };\n            });\n          }\n        };\n      }\n      onunhandledrejection.default = default_1$3;\n      var breadcrumbs = {};\n      Object.defineProperty(breadcrumbs, \"__esModule\", { value: true });\n      var core_1$3 = src;\n      var util_1$3 = util;\n      var sanitize$1 = core_1$3.Util.sanitize, instrument$2 = core_1$3.Util.instrument;\n      function default_1$2(_window) {\n        if (_window === void 0) {\n          _window = (0, util_1$3.globalThisOrWindow)();\n        }\n        return {\n          load: function(client2) {\n            function breadcrumbsEnabled(type) {\n              if (client2.config.breadcrumbsEnabled === true) {\n                return true;\n              }\n              if (type) {\n                return client2.config.breadcrumbsEnabled[type] === true;\n              }\n              return client2.config.breadcrumbsEnabled !== false;\n            }\n            (function() {\n              if (!breadcrumbsEnabled(\"console\")) {\n                return;\n              }\n              function inspectArray(obj) {\n                if (!Array.isArray(obj)) {\n                  return \"\";\n                }\n                return obj.map(function(value) {\n                  try {\n                    return String(value);\n                  } catch (e) {\n                    return \"[unknown]\";\n                  }\n                }).join(\" \");\n              }\n              [\"debug\", \"info\", \"warn\", \"error\", \"log\"].forEach(function(level) {\n                instrument$2(_window.console, level, function(original) {\n                  return function() {\n                    var args = Array.prototype.slice.call(arguments);\n                    var message = inspectArray(args);\n                    var opts = {\n                      category: \"log\",\n                      metadata: {\n                        level,\n                        arguments: sanitize$1(args, 3)\n                      }\n                    };\n                    client2.addBreadcrumb(message, opts);\n                    if (typeof original === \"function\") {\n                      Function.prototype.apply.call(original, _window.console, arguments);\n                    }\n                  };\n                });\n              });\n            })();\n            (function() {\n              if (!breadcrumbsEnabled(\"dom\")) {\n                return;\n              }\n              _window.addEventListener(\"click\", function(event) {\n                var message, selector, text;\n                try {\n                  message = (0, util_1$3.stringNameOfElement)(event.target);\n                  selector = (0, util_1$3.stringSelectorOfElement)(event.target);\n                  text = (0, util_1$3.stringTextOfElement)(event.target);\n                } catch (e) {\n                  message = \"UI Click\";\n                  selector = \"[unknown]\";\n                  text = \"[unknown]\";\n                }\n                if (message.length === 0) {\n                  return;\n                }\n                client2.addBreadcrumb(message, {\n                  category: \"ui.click\",\n                  metadata: {\n                    selector,\n                    text,\n                    event\n                  }\n                });\n              }, _window.location ? true : false);\n            })();\n            (function() {\n              if (!breadcrumbsEnabled(\"network\")) {\n                return;\n              }\n              if (typeof XMLHttpRequest === \"undefined\")\n                return;\n              instrument$2(XMLHttpRequest.prototype, \"open\", function(original) {\n                return function() {\n                  var xhr = this;\n                  var url = arguments[1];\n                  var method = typeof arguments[0] === \"string\" ? arguments[0].toUpperCase() : arguments[0];\n                  var message = \"\".concat(method, \" \").concat((0, util_1$3.localURLPathname)(url));\n                  this.__hb_xhr = {\n                    type: \"xhr\",\n                    method,\n                    url,\n                    message\n                  };\n                  if (typeof original === \"function\") {\n                    original.apply(xhr, arguments);\n                  }\n                };\n              });\n              instrument$2(XMLHttpRequest.prototype, \"send\", function(original) {\n                return function() {\n                  var xhr = this;\n                  function onreadystatechangeHandler() {\n                    if (xhr.readyState === 4) {\n                      var message = void 0;\n                      if (xhr.__hb_xhr) {\n                        xhr.__hb_xhr.status_code = xhr.status;\n                        message = xhr.__hb_xhr.message;\n                        delete xhr.__hb_xhr.message;\n                      }\n                      client2.addBreadcrumb(message || \"XMLHttpRequest\", {\n                        category: \"request\",\n                        metadata: xhr.__hb_xhr\n                      });\n                    }\n                  }\n                  if (\"onreadystatechange\" in xhr && typeof xhr.onreadystatechange === \"function\") {\n                    instrument$2(xhr, \"onreadystatechange\", function(original2) {\n                      return function() {\n                        onreadystatechangeHandler();\n                        if (typeof original2 === \"function\") {\n                          original2.apply(this, arguments);\n                        }\n                      };\n                    });\n                  } else {\n                    xhr.onreadystatechange = onreadystatechangeHandler;\n                  }\n                  if (typeof original === \"function\") {\n                    original.apply(xhr, arguments);\n                  }\n                };\n              });\n            })();\n            (function() {\n              if (!breadcrumbsEnabled(\"network\")) {\n                return;\n              }\n              if (!(0, util_1$3.nativeFetch)()) {\n                return;\n              }\n              instrument$2(_window, \"fetch\", function(original) {\n                return function() {\n                  var input = arguments[0];\n                  var method = \"GET\";\n                  var url;\n                  if (typeof input === \"string\") {\n                    url = input;\n                  } else if (\"Request\" in _window && input instanceof Request) {\n                    url = input.url;\n                    if (input.method) {\n                      method = input.method;\n                    }\n                  } else {\n                    url = String(input);\n                  }\n                  if (arguments[1] && arguments[1].method) {\n                    method = arguments[1].method;\n                  }\n                  if (typeof method === \"string\") {\n                    method = method.toUpperCase();\n                  }\n                  var message = \"\".concat(method, \" \").concat(typeof document === \"undefined\" ? url : (0, util_1$3.localURLPathname)(url));\n                  var metadata = {\n                    type: \"fetch\",\n                    method,\n                    url\n                  };\n                  return original.apply(this, arguments).then(function(response) {\n                    metadata[\"status_code\"] = response.status;\n                    client2.addBreadcrumb(message, {\n                      category: \"request\",\n                      metadata\n                    });\n                    return response;\n                  }).catch(function(error) {\n                    client2.addBreadcrumb(\"fetch error\", {\n                      category: \"error\",\n                      metadata\n                    });\n                    throw error;\n                  });\n                };\n              });\n            })();\n            (function() {\n              if (!breadcrumbsEnabled(\"navigation\")) {\n                return;\n              }\n              if (_window.location == null) {\n                return;\n              }\n              var lastHref = _window.location.href;\n              function recordUrlChange(from, to) {\n                lastHref = to;\n                client2.addBreadcrumb(\"Page changed\", {\n                  category: \"navigation\",\n                  metadata: {\n                    from,\n                    to\n                  }\n                });\n              }\n              if (typeof addEventListener === \"function\") {\n                addEventListener(\"popstate\", function(_event) {\n                  recordUrlChange(lastHref, _window.location.href);\n                });\n              }\n              function historyWrapper(original) {\n                return function() {\n                  var url = arguments.length > 2 ? arguments[2] : void 0;\n                  if (url) {\n                    recordUrlChange(lastHref, String(url));\n                  }\n                  return original.apply(this, arguments);\n                };\n              }\n              instrument$2(_window.history, \"pushState\", historyWrapper);\n              instrument$2(_window.history, \"replaceState\", historyWrapper);\n            })();\n          }\n        };\n      }\n      breadcrumbs.default = default_1$2;\n      var timers = {};\n      Object.defineProperty(timers, \"__esModule\", { value: true });\n      var core_1$2 = src;\n      var util_1$2 = util;\n      var instrument$1 = core_1$2.Util.instrument;\n      function default_1$1(_window) {\n        if (_window === void 0) {\n          _window = (0, util_1$2.globalThisOrWindow)();\n        }\n        return {\n          load: function(client2) {\n            (function() {\n              function instrumentTimer(wrapOpts) {\n                return function(original) {\n                  return function(func, delay) {\n                    if (typeof func === \"function\") {\n                      var args_1 = Array.prototype.slice.call(arguments, 2);\n                      func = client2.__wrap(func, wrapOpts);\n                      return original(function() {\n                        func.apply(void 0, args_1);\n                      }, delay);\n                    } else {\n                      return original(func, delay);\n                    }\n                  };\n                };\n              }\n              instrument$1(_window, \"setTimeout\", instrumentTimer({ component: \"setTimeout\" }));\n              instrument$1(_window, \"setInterval\", instrumentTimer({ component: \"setInterval\" }));\n            })();\n          }\n        };\n      }\n      timers.default = default_1$1;\n      var event_listeners = {};\n      Object.defineProperty(event_listeners, \"__esModule\", { value: true });\n      var core_1$1 = src;\n      var util_1$1 = util;\n      var instrument = core_1$1.Util.instrument;\n      function default_1(_window) {\n        if (_window === void 0) {\n          _window = (0, util_1$1.globalThisOrWindow)();\n        }\n        return {\n          load: function(client2) {\n            var targets = [\"EventTarget\", \"Window\", \"Node\", \"ApplicationCache\", \"AudioTrackList\", \"ChannelMergerNode\", \"CryptoOperation\", \"EventSource\", \"FileReader\", \"HTMLUnknownElement\", \"IDBDatabase\", \"IDBRequest\", \"IDBTransaction\", \"KeyOperation\", \"MediaController\", \"MessagePort\", \"ModalWindow\", \"Notification\", \"SVGElementInstance\", \"Screen\", \"TextTrack\", \"TextTrackCue\", \"TextTrackList\", \"WebSocket\", \"WebSocketWorker\", \"Worker\", \"XMLHttpRequest\", \"XMLHttpRequestEventTarget\", \"XMLHttpRequestUpload\"];\n            targets.forEach(function(prop) {\n              var prototype = _window[prop] && _window[prop].prototype;\n              if (prototype && Object.prototype.hasOwnProperty.call(prototype, \"addEventListener\")) {\n                instrument(prototype, \"addEventListener\", function(original) {\n                  var wrapOpts = { component: \"\".concat(prop, \".prototype.addEventListener\") };\n                  return function(type, listener, useCapture, wantsUntrusted) {\n                    try {\n                      if (listener && listener.handleEvent != null) {\n                        listener.handleEvent = client2.__wrap(listener.handleEvent, wrapOpts);\n                      }\n                    } catch (e) {\n                      client2.logger.error(e);\n                    }\n                    return original.call(this, type, client2.__wrap(listener, wrapOpts), useCapture, wantsUntrusted);\n                  };\n                });\n                instrument(prototype, \"removeEventListener\", function(original) {\n                  return function(type, listener, useCapture, wantsUntrusted) {\n                    original.call(this, type, listener, useCapture, wantsUntrusted);\n                    return original.call(this, type, client2.__wrap(listener), useCapture, wantsUntrusted);\n                  };\n                });\n              }\n            });\n          }\n        };\n      }\n      event_listeners.default = default_1;\n      var transport = {};\n      var __awaiter = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg, _arguments, P, generator) {\n        function adopt(value) {\n          return value instanceof P ? value : new P(function(resolve) {\n            resolve(value);\n          });\n        }\n        return new (P || (P = Promise))(function(resolve, reject) {\n          function fulfilled(value) {\n            try {\n              step(generator.next(value));\n            } catch (e) {\n              reject(e);\n            }\n          }\n          function rejected(value) {\n            try {\n              step(generator[\"throw\"](value));\n            } catch (e) {\n              reject(e);\n            }\n          }\n          function step(result) {\n            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n          }\n          step((generator = generator.apply(thisArg, _arguments || [])).next());\n        });\n      };\n      var __generator = commonjsGlobal && commonjsGlobal.__generator || function(thisArg, body) {\n        var _ = { label: 0, sent: function() {\n          if (t[0] & 1)\n            throw t[1];\n          return t[1];\n        }, trys: [], ops: [] }, f, y, t, g;\n        return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n          return this;\n        }), g;\n        function verb(n) {\n          return function(v) {\n            return step([n, v]);\n          };\n        }\n        function step(op) {\n          if (f)\n            throw new TypeError(\"Generator is already executing.\");\n          while (_)\n            try {\n              if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n                return t;\n              if (y = 0, t)\n                op = [op[0] & 2, t.value];\n              switch (op[0]) {\n                case 0:\n                case 1:\n                  t = op;\n                  break;\n                case 4:\n                  _.label++;\n                  return { value: op[1], done: false };\n                case 5:\n                  _.label++;\n                  y = op[1];\n                  op = [0];\n                  continue;\n                case 7:\n                  op = _.ops.pop();\n                  _.trys.pop();\n                  continue;\n                default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                    _ = 0;\n                    continue;\n                  }\n                  if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                    _.label = op[1];\n                    break;\n                  }\n                  if (op[0] === 6 && _.label < t[1]) {\n                    _.label = t[1];\n                    t = op;\n                    break;\n                  }\n                  if (t && _.label < t[2]) {\n                    _.label = t[2];\n                    _.ops.push(op);\n                    break;\n                  }\n                  if (t[2])\n                    _.ops.pop();\n                  _.trys.pop();\n                  continue;\n              }\n              op = body.call(thisArg, _);\n            } catch (e) {\n              op = [6, e];\n              y = 0;\n            } finally {\n              f = t = 0;\n            }\n          if (op[0] & 5)\n            throw op[1];\n          return { value: op[0] ? op[1] : void 0, done: true };\n        }\n      };\n      Object.defineProperty(transport, \"__esModule\", { value: true });\n      transport.BrowserTransport = void 0;\n      var core_1 = src;\n      var util_1 = util;\n      var sanitize = core_1.Util.sanitize;\n      function objectEntries(obj) {\n        return Object.entries(obj);\n      }\n      var BrowserTransport = (\n        /** @class */\n        function() {\n          function BrowserTransport2() {\n          }\n          BrowserTransport2.prototype.send = function(options, payload) {\n            return __awaiter(this, void 0, void 0, function() {\n              var headerArray, headers, requestInit, response, body;\n              return __generator(this, function(_a) {\n                switch (_a.label) {\n                  case 0:\n                    headerArray = options.headers ? objectEntries(options.headers) : [];\n                    headers = {};\n                    headerArray.forEach(function(_a2) {\n                      var key = _a2[0], value = _a2[1];\n                      if (key != null && value != null) {\n                        headers[String(key)] = String(value);\n                      }\n                    });\n                    requestInit = {\n                      method: options.method,\n                      headers\n                    };\n                    if (options.method === \"POST\") {\n                      requestInit.body = payload ? JSON.stringify(sanitize(payload, options.maxObjectDepth)) : void 0;\n                    }\n                    return [4, (0, util_1.globalThisOrWindow)().fetch(options.endpoint, requestInit)];\n                  case 1:\n                    response = _a.sent();\n                    return [4, response.text()];\n                  case 2:\n                    body = _a.sent();\n                    return [2, Promise.resolve({ statusCode: response.status, body })];\n                }\n              });\n            });\n          };\n          return BrowserTransport2;\n        }()\n      );\n      transport.BrowserTransport = BrowserTransport;\n      (function(exports2) {\n        var __extends = commonjsGlobal && commonjsGlobal.__extends || /* @__PURE__ */ function() {\n          var extendStatics = function(d, b) {\n            extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {\n              d2.__proto__ = b2;\n            } || function(d2, b2) {\n              for (var p in b2)\n                if (Object.prototype.hasOwnProperty.call(b2, p))\n                  d2[p] = b2[p];\n            };\n            return extendStatics(d, b);\n          };\n          return function(d, b) {\n            if (typeof b !== \"function\" && b !== null)\n              throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n            extendStatics(d, b);\n            function __() {\n              this.constructor = d;\n            }\n            d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n          };\n        }();\n        var __assign2 = commonjsGlobal && commonjsGlobal.__assign || function() {\n          __assign2 = Object.assign || function(t) {\n            for (var s, i = 1, n = arguments.length; i < n; i++) {\n              s = arguments[i];\n              for (var p in s)\n                if (Object.prototype.hasOwnProperty.call(s, p))\n                  t[p] = s[p];\n            }\n            return t;\n          };\n          return __assign2.apply(this, arguments);\n        };\n        var __awaiter2 = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg, _arguments, P, generator) {\n          function adopt(value) {\n            return value instanceof P ? value : new P(function(resolve) {\n              resolve(value);\n            });\n          }\n          return new (P || (P = Promise))(function(resolve, reject) {\n            function fulfilled(value) {\n              try {\n                step(generator.next(value));\n              } catch (e) {\n                reject(e);\n              }\n            }\n            function rejected(value) {\n              try {\n                step(generator[\"throw\"](value));\n              } catch (e) {\n                reject(e);\n              }\n            }\n            function step(result) {\n              result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n            }\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\n          });\n        };\n        var __generator2 = commonjsGlobal && commonjsGlobal.__generator || function(thisArg, body) {\n          var _ = { label: 0, sent: function() {\n            if (t[0] & 1)\n              throw t[1];\n            return t[1];\n          }, trys: [], ops: [] }, f, y, t, g;\n          return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() {\n            return this;\n          }), g;\n          function verb(n) {\n            return function(v) {\n              return step([n, v]);\n            };\n          }\n          function step(op) {\n            if (f)\n              throw new TypeError(\"Generator is already executing.\");\n            while (_)\n              try {\n                if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)\n                  return t;\n                if (y = 0, t)\n                  op = [op[0] & 2, t.value];\n                switch (op[0]) {\n                  case 0:\n                  case 1:\n                    t = op;\n                    break;\n                  case 4:\n                    _.label++;\n                    return { value: op[1], done: false };\n                  case 5:\n                    _.label++;\n                    y = op[1];\n                    op = [0];\n                    continue;\n                  case 7:\n                    op = _.ops.pop();\n                    _.trys.pop();\n                    continue;\n                  default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                      _ = 0;\n                      continue;\n                    }\n                    if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                      _.label = op[1];\n                      break;\n                    }\n                    if (op[0] === 6 && _.label < t[1]) {\n                      _.label = t[1];\n                      t = op;\n                      break;\n                    }\n                    if (t && _.label < t[2]) {\n                      _.label = t[2];\n                      _.ops.push(op);\n                      break;\n                    }\n                    if (t[2])\n                      _.ops.pop();\n                    _.trys.pop();\n                    continue;\n                }\n                op = body.call(thisArg, _);\n              } catch (e) {\n                op = [6, e];\n                y = 0;\n              } finally {\n                f = t = 0;\n              }\n            if (op[0] & 5)\n              throw op[1];\n            return { value: op[0] ? op[1] : void 0, done: true };\n          }\n        };\n        var __importDefault = commonjsGlobal && commonjsGlobal.__importDefault || function(mod) {\n          return mod && mod.__esModule ? mod : { \"default\": mod };\n        };\n        Object.defineProperty(exports2, \"__esModule\", { value: true });\n        exports2.Types = exports2.getUserFeedbackScriptUrl = void 0;\n        var core_12 = src;\n        var util_12 = util;\n        var onerror_1 = onerror;\n        var onunhandledrejection_1 = __importDefault(onunhandledrejection);\n        var breadcrumbs_1 = __importDefault(breadcrumbs);\n        var timers_1 = __importDefault(timers);\n        var event_listeners_1 = __importDefault(event_listeners);\n        var transport_1 = transport;\n        var merge = core_12.Util.merge, filter = core_12.Util.filter, objectIsExtensible = core_12.Util.objectIsExtensible;\n        var getProjectRoot = function() {\n          var global2 = (0, util_12.globalThisOrWindow)();\n          var projectRoot = \"\";\n          if (global2.location != null) {\n            projectRoot = global2.location.protocol + \"//\" + global2.location.host;\n          }\n          return projectRoot;\n        };\n        var getUserFeedbackScriptUrl = function(version) {\n          var majorMinorVersion = version.split(\".\").slice(0, 2).join(\".\");\n          return \"https://js.honeybadger.io/v\".concat(majorMinorVersion, \"/honeybadger-feedback-form.js\");\n        };\n        exports2.getUserFeedbackScriptUrl = getUserFeedbackScriptUrl;\n        var Honeybadger = (\n          /** @class */\n          function(_super) {\n            __extends(Honeybadger2, _super);\n            function Honeybadger2(opts) {\n              if (opts === void 0) {\n                opts = {};\n              }\n              var _this = _super.call(this, __assign2({ userFeedbackEndpoint: \"https://api.honeybadger.io/v2/feedback\", async: true, maxErrors: null, projectRoot: getProjectRoot() }, opts), new transport_1.BrowserTransport()) || this;\n              _this.__errorsSent = 0;\n              _this.__lastWrapErr = void 0;\n              _this.__lastNoticeId = void 0;\n              _this.__beforeNotifyHandlers = [\n                function(notice) {\n                  if (_this.__exceedsMaxErrors()) {\n                    _this.logger.debug(\"Dropping notice: max errors exceeded\", notice);\n                    return false;\n                  }\n                  if (notice && !notice.url && typeof document !== \"undefined\") {\n                    notice.url = document.URL;\n                  }\n                  _this.__incrementErrorsCount();\n                  return true;\n                }\n              ];\n              _this.__afterNotifyHandlers = [\n                function(_error, notice) {\n                  if (notice) {\n                    _this.__lastNoticeId = notice.id;\n                  }\n                  return true;\n                }\n              ];\n              return _this;\n            }\n            Honeybadger2.prototype.configure = function(opts) {\n              if (opts === void 0) {\n                opts = {};\n              }\n              return _super.prototype.configure.call(this, opts);\n            };\n            Honeybadger2.prototype.resetMaxErrors = function() {\n              return this.__errorsSent = 0;\n            };\n            Honeybadger2.prototype.factory = function(opts) {\n              return new Honeybadger2(opts);\n            };\n            Honeybadger2.prototype.checkIn = function(_id) {\n              throw new Error(\"Honeybadger.checkIn() is not supported on the browser\");\n            };\n            Honeybadger2.prototype.showUserFeedbackForm = function(options) {\n              if (options === void 0) {\n                options = {};\n              }\n              return __awaiter2(this, void 0, void 0, function() {\n                var global2, script;\n                return __generator2(this, function(_a) {\n                  if (!this.config || !this.config.apiKey) {\n                    this.logger.debug(\"Client not initialized\");\n                    return [\n                      2\n                      /*return*/\n                    ];\n                  }\n                  if (!this.__lastNoticeId) {\n                    this.logger.debug(\"Can't show user feedback form without a notice already reported\");\n                    return [\n                      2\n                      /*return*/\n                    ];\n                  }\n                  global2 = (0, util_12.globalThisOrWindow)();\n                  if (typeof global2.document === \"undefined\") {\n                    this.logger.debug(\"global.document is undefined. Cannot attach script\");\n                    return [\n                      2\n                      /*return*/\n                    ];\n                  }\n                  if (this.isUserFeedbackScriptUrlAlreadyVisible()) {\n                    this.logger.debug(\"User feedback form is already visible\");\n                    return [\n                      2\n                      /*return*/\n                    ];\n                  }\n                  global2[\"honeybadgerUserFeedbackOptions\"] = __assign2(__assign2({}, options), { apiKey: this.config.apiKey, endpoint: this.config.userFeedbackEndpoint, noticeId: this.__lastNoticeId });\n                  script = global2.document.createElement(\"script\");\n                  script.setAttribute(\"src\", this.getUserFeedbackSubmitUrl());\n                  script.setAttribute(\"async\", \"true\");\n                  if (options.onLoad) {\n                    script.onload = options.onLoad;\n                  }\n                  (global2.document.head || global2.document.body).appendChild(script);\n                  return [\n                    2\n                    /*return*/\n                  ];\n                });\n              });\n            };\n            Honeybadger2.prototype.isUserFeedbackScriptUrlAlreadyVisible = function() {\n              var global2 = (0, util_12.globalThisOrWindow)();\n              var feedbackScriptUrl = this.getUserFeedbackSubmitUrl();\n              for (var i = 0; i < global2.document.scripts.length; i++) {\n                var script = global2.document.scripts[i];\n                if (script.src === feedbackScriptUrl) {\n                  return true;\n                }\n              }\n              return false;\n            };\n            Honeybadger2.prototype.getUserFeedbackSubmitUrl = function() {\n              return (0, exports2.getUserFeedbackScriptUrl)(this.getVersion());\n            };\n            Honeybadger2.prototype.__buildPayload = function(notice) {\n              var cgiData = {\n                HTTP_USER_AGENT: void 0,\n                HTTP_REFERER: void 0,\n                HTTP_COOKIE: void 0\n              };\n              cgiData.HTTP_USER_AGENT = navigator.userAgent;\n              if (typeof document !== \"undefined\" && document.referrer.match(/\\S/)) {\n                cgiData.HTTP_REFERER = document.referrer;\n              }\n              var cookiesObject;\n              if (typeof notice.cookies === \"string\") {\n                cookiesObject = (0, util_12.decodeCookie)(notice.cookies);\n              } else {\n                cookiesObject = notice.cookies;\n              }\n              if (cookiesObject) {\n                cgiData.HTTP_COOKIE = (0, util_12.encodeCookie)(filter(cookiesObject, this.config.filters));\n              }\n              var payload = _super.prototype.__buildPayload.call(this, notice);\n              payload.request.cgi_data = merge(cgiData, payload.request.cgi_data);\n              return payload;\n            };\n            Honeybadger2.prototype.__wrap = function(f, opts) {\n              if (opts === void 0) {\n                opts = {};\n              }\n              var func = f;\n              if (!opts) {\n                opts = {};\n              }\n              try {\n                if (typeof func !== \"function\") {\n                  return func;\n                }\n                if (!objectIsExtensible(func)) {\n                  return func;\n                }\n                if (!func.___hb) {\n                  var client_1 = this;\n                  func.___hb = function() {\n                    if (util_12.preferCatch) {\n                      try {\n                        return func.apply(this, arguments);\n                      } catch (err) {\n                        if (client_1.__lastWrapErr === err) {\n                          throw err;\n                        }\n                        client_1.__lastWrapErr = err;\n                        (0, onerror_1.ignoreNextOnError)();\n                        client_1.addBreadcrumb(opts.component ? \"\".concat(opts.component, \": \").concat(err.name) : err.name, {\n                          category: \"error\",\n                          metadata: {\n                            message: err.message,\n                            name: err.name,\n                            stack: err.stack\n                          }\n                        });\n                        if (client_1.config.enableUncaught) {\n                          client_1.notify(err);\n                        }\n                        throw err;\n                      }\n                    } else {\n                      return func.apply(this, arguments);\n                    }\n                  };\n                }\n                func.___hb.___hb = func.___hb;\n                return func.___hb;\n              } catch (_e) {\n                return func;\n              }\n            };\n            Honeybadger2.prototype.__incrementErrorsCount = function() {\n              return this.__errorsSent++;\n            };\n            Honeybadger2.prototype.__exceedsMaxErrors = function() {\n              return this.config.maxErrors && this.__errorsSent >= this.config.maxErrors;\n            };\n            return Honeybadger2;\n          }(core_12.Client)\n        );\n        var core_2 = src;\n        Object.defineProperty(exports2, \"Types\", { enumerable: true, get: function() {\n          return core_2.Types;\n        } });\n        exports2.default = new Honeybadger({\n          __plugins: [\n            (0, onerror_1.onError)(),\n            (0, onunhandledrejection_1.default)(),\n            (0, timers_1.default)(),\n            (0, event_listeners_1.default)(),\n            (0, breadcrumbs_1.default)()\n          ]\n        });\n      })(browser$1);\n      var browser = /* @__PURE__ */ getDefaultExportFromCjs(browser$1);\n      return browser;\n    });\n  }\n});\nexport default require_honeybadger();\n//# sourceMappingURL=@honeybadger-io_js.js.map\n","var timeout;\n\nvar checkServerForProgressUpdates = function() {\n\n  // see https://gist.github.com/niyazpk/f8ac616f181f6042d1e0\n  function updateUrlParameter(uri, key, value) {\n      var i = uri.indexOf('#');\n      var hash = i === -1 ? ''  : uri.substr(i);\n           uri = i === -1 ? uri : uri.substr(0, i);\n      var re = new RegExp(\"([?&])\" + key + \"=.*?(&|$)\", \"i\");\n      var separator = uri.indexOf('?') !== -1 ? \"&\" : \"?\";\n      if (uri.match(re)) {\n          uri = uri.replace(re, '$1' + key + \"=\" + value + '$2');\n      } else {\n          uri = uri + separator + key + \"=\" + value;\n      }\n      return uri + hash;  // finally append the hash as well\n  }\n\n  // add a flag to skip the layout on refresh.\n  var url = updateUrlParameter(window.location.href, 'layoutless', true);\n\n  // re-fetch the page.\n  $.get(url, function(data) {\n\n    // for each item on the current page that is still marked as progressing.\n    $(\"[data-progressing='true']\").each(function (index, existing) {\n      var $existing = $(existing);\n\n      // e.g. 'Scaffolding::Thing'\n      var type = $(existing).attr('data-class');\n\n      // e.g. '10'\n      var id = $(existing).attr('data-id');\n\n      // find the corresponding element on the re-fetched page.\n      var $updated = $($(data).find(\"[data-class='\" + type + \"'][data-id='\" + id + \"']\").first());\n\n      // if the existing row was still marked as processing ..\n      if (parseInt($updated.attr('data-updated')) > parseInt($existing.attr('data-updated'))) {\n        $existing.replaceWith($updated);\n      }\n\n    })\n\n  });\n\n  // if there are still progressing elements, this will trigger another update.\n  scheduleCheckForProgressUpdatesIfNeeded();\n\n}\n\nvar scheduleCheckForProgressUpdatesIfNeeded = function() {\n  // if there are items on the page whose progress is still updating, dispatch a timer.\n  if ($(\"[data-progressing='true']\").length > 0) {\n    console.log(\"🏚 progress polling: we'll check the server for updates in 5 seconds.\")\n    timeout = setTimeout(checkServerForProgressUpdates, 5000);\n  }\n\n}\n\n$(document).on('turbo:load', function() {\n  if (timeout) {\n    console.log(\"🏚 progress polling: canceling an existing timer.\")\n    clearTimeout(timeout);\n    timeout = null;\n  }\n  scheduleCheckForProgressUpdatesIfNeeded();\n});\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/tributejs/dist/tribute.esm.js\nif (!Array.prototype.find) {\n  Array.prototype.find = function(predicate) {\n    if (this === null) {\n      throw new TypeError(\"Array.prototype.find called on null or undefined\");\n    }\n    if (typeof predicate !== \"function\") {\n      throw new TypeError(\"predicate must be a function\");\n    }\n    var list = Object(this);\n    var length = list.length >>> 0;\n    var thisArg = arguments[1];\n    var value;\n    for (var i = 0; i < length; i++) {\n      value = list[i];\n      if (predicate.call(thisArg, value, i, list)) {\n        return value;\n      }\n    }\n    return void 0;\n  };\n}\nif (window && typeof window.CustomEvent !== \"function\") {\n  let CustomEvent$1 = function(event, params) {\n    params = params || {\n      bubbles: false,\n      cancelable: false,\n      detail: void 0\n    };\n    var evt = document.createEvent(\"CustomEvent\");\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt;\n  };\n  if (typeof window.Event !== \"undefined\") {\n    CustomEvent$1.prototype = window.Event.prototype;\n  }\n  window.CustomEvent = CustomEvent$1;\n}\nvar TributeEvents = class _TributeEvents {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.events = this;\n  }\n  static keys() {\n    return [\n      {\n        key: 9,\n        value: \"TAB\"\n      },\n      {\n        key: 8,\n        value: \"DELETE\"\n      },\n      {\n        key: 13,\n        value: \"ENTER\"\n      },\n      {\n        key: 27,\n        value: \"ESCAPE\"\n      },\n      {\n        key: 32,\n        value: \"SPACE\"\n      },\n      {\n        key: 38,\n        value: \"UP\"\n      },\n      {\n        key: 40,\n        value: \"DOWN\"\n      }\n    ];\n  }\n  bind(element) {\n    element.boundKeydown = this.keydown.bind(element, this);\n    element.boundKeyup = this.keyup.bind(element, this);\n    element.boundInput = this.input.bind(element, this);\n    element.addEventListener(\"keydown\", element.boundKeydown, false);\n    element.addEventListener(\"keyup\", element.boundKeyup, false);\n    element.addEventListener(\"input\", element.boundInput, false);\n  }\n  unbind(element) {\n    element.removeEventListener(\"keydown\", element.boundKeydown, false);\n    element.removeEventListener(\"keyup\", element.boundKeyup, false);\n    element.removeEventListener(\"input\", element.boundInput, false);\n    delete element.boundKeydown;\n    delete element.boundKeyup;\n    delete element.boundInput;\n  }\n  keydown(instance, event) {\n    if (instance.shouldDeactivate(event)) {\n      instance.tribute.isActive = false;\n      instance.tribute.hideMenu();\n    }\n    let element = this;\n    instance.commandEvent = false;\n    _TributeEvents.keys().forEach((o) => {\n      if (o.key === event.keyCode) {\n        instance.commandEvent = true;\n        instance.callbacks()[o.value.toLowerCase()](event, element);\n      }\n    });\n  }\n  input(instance, event) {\n    instance.inputEvent = true;\n    instance.keyup.call(this, instance, event);\n  }\n  click(instance, event) {\n    let tribute = instance.tribute;\n    if (tribute.menu && tribute.menu.contains(event.target)) {\n      let li = event.target;\n      event.preventDefault();\n      event.stopPropagation();\n      while (li.nodeName.toLowerCase() !== \"li\") {\n        li = li.parentNode;\n        if (!li || li === tribute.menu) {\n          throw new Error(\"cannot find the <li> container for the click\");\n        }\n      }\n      tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n      tribute.hideMenu();\n    } else if (tribute.current.element && !tribute.current.externalTrigger) {\n      tribute.current.externalTrigger = false;\n      setTimeout(() => tribute.hideMenu());\n    }\n  }\n  keyup(instance, event) {\n    if (instance.inputEvent) {\n      instance.inputEvent = false;\n    }\n    instance.updateSelection(this);\n    if (event.keyCode === 27)\n      return;\n    if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n      instance.tribute.hasTrailingSpace = false;\n      instance.commandEvent = true;\n      instance.callbacks()[\"space\"](event, this);\n      return;\n    }\n    if (!instance.tribute.isActive) {\n      if (instance.tribute.autocompleteMode) {\n        instance.callbacks().triggerChar(event, this, \"\");\n      } else {\n        let keyCode = instance.getKeyCode(instance, this, event);\n        if (isNaN(keyCode) || !keyCode)\n          return;\n        let trigger = instance.tribute.triggers().find((trigger2) => {\n          return trigger2.charCodeAt(0) === keyCode;\n        });\n        if (typeof trigger !== \"undefined\") {\n          instance.callbacks().triggerChar(event, this, trigger);\n        }\n      }\n    }\n    if (instance.tribute.current.mentionText.length < instance.tribute.current.collection.menuShowMinLength) {\n      return;\n    }\n    if ((instance.tribute.current.trigger || instance.tribute.autocompleteMode) && instance.commandEvent === false || instance.tribute.isActive && event.keyCode === 8) {\n      instance.tribute.showMenuFor(this, true);\n    }\n  }\n  shouldDeactivate(event) {\n    if (!this.tribute.isActive)\n      return false;\n    if (this.tribute.current.mentionText.length === 0) {\n      let eventKeyPressed = false;\n      _TributeEvents.keys().forEach((o) => {\n        if (event.keyCode === o.key)\n          eventKeyPressed = true;\n      });\n      return !eventKeyPressed;\n    }\n    return false;\n  }\n  getKeyCode(instance, el, event) {\n    let tribute = instance.tribute;\n    let info = tribute.range.getTriggerInfo(\n      false,\n      tribute.hasTrailingSpace,\n      true,\n      tribute.allowSpaces,\n      tribute.autocompleteMode\n    );\n    if (info) {\n      return info.mentionTriggerChar.charCodeAt(0);\n    } else {\n      return false;\n    }\n  }\n  updateSelection(el) {\n    this.tribute.current.element = el;\n    let info = this.tribute.range.getTriggerInfo(\n      false,\n      this.tribute.hasTrailingSpace,\n      true,\n      this.tribute.allowSpaces,\n      this.tribute.autocompleteMode\n    );\n    if (info) {\n      this.tribute.current.selectedPath = info.mentionSelectedPath;\n      this.tribute.current.mentionText = info.mentionText;\n      this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n    }\n  }\n  callbacks() {\n    return {\n      triggerChar: (e, el, trigger) => {\n        let tribute = this.tribute;\n        tribute.current.trigger = trigger;\n        let collectionItem = tribute.collection.find((item) => {\n          return item.trigger === trigger;\n        });\n        tribute.current.collection = collectionItem;\n        if (tribute.current.mentionText.length >= tribute.current.collection.menuShowMinLength && tribute.inputEvent) {\n          tribute.showMenuFor(el, true);\n        }\n      },\n      enter: (e, el) => {\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          setTimeout(() => {\n            this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n            this.tribute.hideMenu();\n          }, 0);\n        }\n      },\n      escape: (e, el) => {\n        if (this.tribute.isActive) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.tribute.isActive = false;\n          this.tribute.hideMenu();\n        }\n      },\n      tab: (e, el) => {\n        this.callbacks().enter(e, el);\n      },\n      space: (e, el) => {\n        if (this.tribute.isActive) {\n          if (this.tribute.spaceSelectsMatch) {\n            this.callbacks().enter(e, el);\n          } else if (!this.tribute.allowSpaces) {\n            e.stopPropagation();\n            setTimeout(() => {\n              this.tribute.hideMenu();\n              this.tribute.isActive = false;\n            }, 0);\n          }\n        }\n      },\n      up: (e, el) => {\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length, selected = this.tribute.menuSelected;\n          if (count > selected && selected > 0) {\n            this.tribute.menuSelected--;\n            this.setActiveLi();\n          } else if (selected === 0) {\n            this.tribute.menuSelected = count - 1;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n          }\n        }\n      },\n      down: (e, el) => {\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length - 1, selected = this.tribute.menuSelected;\n          if (count > selected) {\n            this.tribute.menuSelected++;\n            this.setActiveLi();\n          } else if (count === selected) {\n            this.tribute.menuSelected = 0;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = 0;\n          }\n        }\n      },\n      delete: (e, el) => {\n        if (this.tribute.isActive && this.tribute.current.mentionText.length < 1) {\n          this.tribute.hideMenu();\n        } else if (this.tribute.isActive) {\n          this.tribute.showMenuFor(el);\n        }\n      }\n    };\n  }\n  setActiveLi(index) {\n    let lis = this.tribute.menu.querySelectorAll(\"li\"), length = lis.length >>> 0;\n    if (index)\n      this.tribute.menuSelected = parseInt(index);\n    for (let i = 0; i < length; i++) {\n      let li = lis[i];\n      if (i === this.tribute.menuSelected) {\n        li.classList.add(this.tribute.current.collection.selectClass);\n        let liClientRect = li.getBoundingClientRect();\n        let menuClientRect = this.tribute.menu.getBoundingClientRect();\n        if (liClientRect.bottom > menuClientRect.bottom) {\n          let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n          this.tribute.menu.scrollTop += scrollDistance;\n        } else if (liClientRect.top < menuClientRect.top) {\n          let scrollDistance = menuClientRect.top - liClientRect.top;\n          this.tribute.menu.scrollTop -= scrollDistance;\n        }\n      } else {\n        li.classList.remove(this.tribute.current.collection.selectClass);\n      }\n    }\n  }\n  getFullHeight(elem, includeMargin) {\n    let height = elem.getBoundingClientRect().height;\n    if (includeMargin) {\n      let style = elem.currentStyle || window.getComputedStyle(elem);\n      return height + parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n    }\n    return height;\n  }\n};\nvar TributeMenuEvents = class {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.menuEvents = this;\n    this.menu = this.tribute.menu;\n  }\n  bind(menu) {\n    this.menuClickEvent = this.tribute.events.click.bind(null, this);\n    this.menuContainerScrollEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.showMenuFor(this.tribute.current.element, false);\n        }\n      },\n      300,\n      false\n    );\n    this.windowResizeEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.range.positionMenuAtCaret(true);\n        }\n      },\n      300,\n      false\n    );\n    this.tribute.range.getDocument().addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    this.tribute.range.getDocument().addEventListener(\"mousedown\", this.menuClickEvent, false);\n    window.addEventListener(\"resize\", this.windowResizeEvent);\n    if (this.menuContainer) {\n      this.menuContainer.addEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n  unbind(menu) {\n    this.tribute.range.getDocument().removeEventListener(\"mousedown\", this.menuClickEvent, false);\n    this.tribute.range.getDocument().removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    window.removeEventListener(\"resize\", this.windowResizeEvent);\n    if (this.menuContainer) {\n      this.menuContainer.removeEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n  debounce(func, wait, immediate) {\n    var timeout;\n    return () => {\n      var context = this, args = arguments;\n      var later = () => {\n        timeout = null;\n        if (!immediate)\n          func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow)\n        func.apply(context, args);\n    };\n  }\n};\nvar TributeRange = class {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.range = this;\n  }\n  getDocument() {\n    let iframe;\n    if (this.tribute.current.collection) {\n      iframe = this.tribute.current.collection.iframe;\n    }\n    if (!iframe) {\n      return document;\n    }\n    return iframe.contentWindow.document;\n  }\n  positionMenuAtCaret(scrollTo) {\n    let context = this.tribute.current, coordinates;\n    let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n    if (typeof info !== \"undefined\") {\n      if (!this.tribute.positionMenu) {\n        this.tribute.menu.style.cssText = `display: block;`;\n        return;\n      }\n      if (!this.isContentEditable(context.element)) {\n        coordinates = this.getTextAreaOrInputUnderlinePosition(\n          this.tribute.current.element,\n          info.mentionPosition\n        );\n      } else {\n        coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n      }\n      this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n                                     left: ${coordinates.left}px;\n                                     right: ${coordinates.right}px;\n                                     bottom: ${coordinates.bottom}px;\n                                     position: absolute;\n                                     display: block;`;\n      if (coordinates.left === \"auto\") {\n        this.tribute.menu.style.left = \"auto\";\n      }\n      if (coordinates.top === \"auto\") {\n        this.tribute.menu.style.top = \"auto\";\n      }\n      if (scrollTo)\n        this.scrollIntoView();\n      window.setTimeout(() => {\n        let menuDimensions = {\n          width: this.tribute.menu.offsetWidth,\n          height: this.tribute.menu.offsetHeight\n        };\n        let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n        let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n        let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n        if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n          this.tribute.menu.style.cssText = \"display: none\";\n          this.positionMenuAtCaret(scrollTo);\n        }\n      }, 0);\n    } else {\n      this.tribute.menu.style.cssText = \"display: none\";\n    }\n  }\n  get menuContainerIsBody() {\n    return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n  }\n  selectElement(targetElement, path, offset) {\n    let range;\n    let elem = targetElement;\n    if (path) {\n      for (var i = 0; i < path.length; i++) {\n        elem = elem.childNodes[path[i]];\n        if (elem === void 0) {\n          return;\n        }\n        while (elem.length < offset) {\n          offset -= elem.length;\n          elem = elem.nextSibling;\n        }\n        if (elem.childNodes.length === 0 && !elem.length) {\n          elem = elem.previousSibling;\n        }\n      }\n    }\n    let sel = this.getWindowSelection();\n    range = this.getDocument().createRange();\n    range.setStart(elem, offset);\n    range.setEnd(elem, offset);\n    range.collapse(true);\n    try {\n      sel.removeAllRanges();\n    } catch (error) {\n    }\n    sel.addRange(range);\n    targetElement.focus();\n  }\n  replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n    let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n    if (info !== void 0) {\n      let context = this.tribute.current;\n      let replaceEvent = new CustomEvent(\"tribute-replaced\", {\n        detail: {\n          item,\n          instance: context,\n          context: info,\n          event: originalEvent\n        }\n      });\n      if (!this.isContentEditable(context.element)) {\n        let myField = this.tribute.current.element;\n        let textSuffix = typeof this.tribute.replaceTextSuffix == \"string\" ? this.tribute.replaceTextSuffix : \" \";\n        text += textSuffix;\n        let startPos = info.mentionPosition;\n        let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n        if (!this.tribute.autocompleteMode) {\n          endPos += info.mentionTriggerChar.length - 1;\n        }\n        myField.value = myField.value.substring(0, startPos) + text + myField.value.substring(endPos, myField.value.length);\n        myField.selectionStart = startPos + text.length;\n        myField.selectionEnd = startPos + text.length;\n      } else {\n        let textSuffix = typeof this.tribute.replaceTextSuffix == \"string\" ? this.tribute.replaceTextSuffix : \" \";\n        text += textSuffix;\n        let endPos = info.mentionPosition + info.mentionText.length;\n        if (!this.tribute.autocompleteMode) {\n          endPos += info.mentionTriggerChar.length;\n        }\n        this.pasteHtml(text, info.mentionPosition, endPos);\n      }\n      context.element.dispatchEvent(new CustomEvent(\"input\", { bubbles: true }));\n      context.element.dispatchEvent(replaceEvent);\n    }\n  }\n  pasteHtml(html, startPos, endPos) {\n    let range, sel;\n    sel = this.getWindowSelection();\n    range = this.getDocument().createRange();\n    range.setStart(sel.anchorNode, startPos);\n    range.setEnd(sel.anchorNode, endPos);\n    range.deleteContents();\n    let el = this.getDocument().createElement(\"div\");\n    el.innerHTML = html;\n    let frag = this.getDocument().createDocumentFragment(), node, lastNode;\n    while (node = el.firstChild) {\n      lastNode = frag.appendChild(node);\n    }\n    range.insertNode(frag);\n    if (lastNode) {\n      range = range.cloneRange();\n      range.setStartAfter(lastNode);\n      range.collapse(true);\n      sel.removeAllRanges();\n      sel.addRange(range);\n    }\n  }\n  getWindowSelection() {\n    if (this.tribute.collection.iframe) {\n      return this.tribute.collection.iframe.contentWindow.getSelection();\n    }\n    return window.getSelection();\n  }\n  getNodePositionInParent(element) {\n    if (element.parentNode === null) {\n      return 0;\n    }\n    for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n      let node = element.parentNode.childNodes[i];\n      if (node === element) {\n        return i;\n      }\n    }\n  }\n  getContentEditableSelectedPath(ctx) {\n    let sel = this.getWindowSelection();\n    let selected = sel.anchorNode;\n    let path = [];\n    let offset;\n    if (selected != null) {\n      let i;\n      let ce = selected.contentEditable;\n      while (selected !== null && ce !== \"true\") {\n        i = this.getNodePositionInParent(selected);\n        path.push(i);\n        selected = selected.parentNode;\n        if (selected !== null) {\n          ce = selected.contentEditable;\n        }\n      }\n      path.reverse();\n      offset = sel.getRangeAt(0).startOffset;\n      return {\n        selected,\n        path,\n        offset\n      };\n    }\n  }\n  getTextPrecedingCurrentSelection() {\n    let context = this.tribute.current, text = \"\";\n    if (!this.isContentEditable(context.element)) {\n      let textComponent = this.tribute.current.element;\n      if (textComponent) {\n        let startPos = textComponent.selectionStart;\n        if (textComponent.value && startPos >= 0) {\n          text = textComponent.value.substring(0, startPos);\n        }\n      }\n    } else {\n      let selectedElem = this.getWindowSelection().anchorNode;\n      if (selectedElem != null) {\n        let workingNodeContent = selectedElem.textContent;\n        let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n        if (workingNodeContent && selectStartOffset >= 0) {\n          text = workingNodeContent.substring(0, selectStartOffset);\n        }\n      }\n    }\n    return text;\n  }\n  getLastWordInText(text) {\n    text = text.replace(/\\u00A0/g, \" \");\n    let wordsArray = text.split(/\\s+/);\n    let worldsCount = wordsArray.length - 1;\n    return wordsArray[worldsCount].trim();\n  }\n  getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n    let ctx = this.tribute.current;\n    let selected, path, offset;\n    if (!this.isContentEditable(ctx.element)) {\n      selected = this.tribute.current.element;\n    } else {\n      let selectionInfo = this.getContentEditableSelectedPath(ctx);\n      if (selectionInfo) {\n        selected = selectionInfo.selected;\n        path = selectionInfo.path;\n        offset = selectionInfo.offset;\n      }\n    }\n    let effectiveRange = this.getTextPrecedingCurrentSelection();\n    let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n    if (isAutocomplete) {\n      return {\n        mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n        mentionText: lastWordOfEffectiveRange,\n        mentionSelectedElement: selected,\n        mentionSelectedPath: path,\n        mentionSelectedOffset: offset\n      };\n    }\n    if (effectiveRange !== void 0 && effectiveRange !== null) {\n      let mostRecentTriggerCharPos = -1;\n      let triggerChar;\n      this.tribute.collection.forEach((config) => {\n        let c = config.trigger;\n        let idx = config.requireLeadingSpace ? this.lastIndexWithLeadingSpace(effectiveRange, c) : effectiveRange.lastIndexOf(c);\n        if (idx > mostRecentTriggerCharPos) {\n          mostRecentTriggerCharPos = idx;\n          triggerChar = c;\n          requireLeadingSpace = config.requireLeadingSpace;\n        }\n      });\n      if (mostRecentTriggerCharPos >= 0 && (mostRecentTriggerCharPos === 0 || !requireLeadingSpace || /[\\xA0\\s]/g.test(\n        effectiveRange.substring(\n          mostRecentTriggerCharPos - 1,\n          mostRecentTriggerCharPos\n        )\n      ))) {\n        let currentTriggerSnippet = effectiveRange.substring(\n          mostRecentTriggerCharPos + triggerChar.length,\n          effectiveRange.length\n        );\n        triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n        let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n        let leadingSpace = currentTriggerSnippet.length > 0 && (firstSnippetChar === \" \" || firstSnippetChar === \" \");\n        if (hasTrailingSpace) {\n          currentTriggerSnippet = currentTriggerSnippet.trim();\n        }\n        let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n        this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n        if (!leadingSpace && (menuAlreadyActive || !regex.test(currentTriggerSnippet))) {\n          return {\n            mentionPosition: mostRecentTriggerCharPos,\n            mentionText: currentTriggerSnippet,\n            mentionSelectedElement: selected,\n            mentionSelectedPath: path,\n            mentionSelectedOffset: offset,\n            mentionTriggerChar: triggerChar\n          };\n        }\n      }\n    }\n  }\n  lastIndexWithLeadingSpace(str, trigger) {\n    let reversedStr = str.split(\"\").reverse().join(\"\");\n    let index = -1;\n    for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n      let firstChar = cidx === str.length - 1;\n      let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n      let match = true;\n      for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n        if (trigger[triggerIdx] !== reversedStr[cidx - triggerIdx]) {\n          match = false;\n          break;\n        }\n      }\n      if (match && (firstChar || leadingSpace)) {\n        index = str.length - 1 - cidx;\n        break;\n      }\n    }\n    return index;\n  }\n  isContentEditable(element) {\n    return element.nodeName !== \"INPUT\" && element.nodeName !== \"TEXTAREA\";\n  }\n  isMenuOffScreen(coordinates, menuDimensions) {\n    let windowWidth = window.innerWidth;\n    let windowHeight = window.innerHeight;\n    let doc = document.documentElement;\n    let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    let menuTop = typeof coordinates.top === \"number\" ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n    let menuRight = typeof coordinates.right === \"number\" ? coordinates.right : coordinates.left + menuDimensions.width;\n    let menuBottom = typeof coordinates.bottom === \"number\" ? coordinates.bottom : coordinates.top + menuDimensions.height;\n    let menuLeft = typeof coordinates.left === \"number\" ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n    return {\n      top: menuTop < Math.floor(windowTop),\n      right: menuRight > Math.ceil(windowLeft + windowWidth),\n      bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n      left: menuLeft < Math.floor(windowLeft)\n    };\n  }\n  getMenuDimensions() {\n    let dimensions = {\n      width: null,\n      height: null\n    };\n    this.tribute.menu.style.cssText = `top: 0px;\n                                 left: 0px;\n                                 position: fixed;\n                                 display: block;\n                                 visibility; hidden;`;\n    dimensions.width = this.tribute.menu.offsetWidth;\n    dimensions.height = this.tribute.menu.offsetHeight;\n    this.tribute.menu.style.cssText = `display: none;`;\n    return dimensions;\n  }\n  getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n    let properties = [\n      \"direction\",\n      \"boxSizing\",\n      \"width\",\n      \"height\",\n      \"overflowX\",\n      \"overflowY\",\n      \"borderTopWidth\",\n      \"borderRightWidth\",\n      \"borderBottomWidth\",\n      \"borderLeftWidth\",\n      \"paddingTop\",\n      \"paddingRight\",\n      \"paddingBottom\",\n      \"paddingLeft\",\n      \"fontStyle\",\n      \"fontVariant\",\n      \"fontWeight\",\n      \"fontStretch\",\n      \"fontSize\",\n      \"fontSizeAdjust\",\n      \"lineHeight\",\n      \"fontFamily\",\n      \"textAlign\",\n      \"textTransform\",\n      \"textIndent\",\n      \"textDecoration\",\n      \"letterSpacing\",\n      \"wordSpacing\"\n    ];\n    let isFirefox = window.mozInnerScreenX !== null;\n    let div = this.getDocument().createElement(\"div\");\n    div.id = \"input-textarea-caret-position-mirror-div\";\n    this.getDocument().body.appendChild(div);\n    let style = div.style;\n    let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n    style.whiteSpace = \"pre-wrap\";\n    if (element.nodeName !== \"INPUT\") {\n      style.wordWrap = \"break-word\";\n    }\n    style.position = \"absolute\";\n    style.visibility = \"hidden\";\n    properties.forEach((prop) => {\n      style[prop] = computed[prop];\n    });\n    if (isFirefox) {\n      style.width = `${parseInt(computed.width) - 2}px`;\n      if (element.scrollHeight > parseInt(computed.height))\n        style.overflowY = \"scroll\";\n    } else {\n      style.overflow = \"hidden\";\n    }\n    div.textContent = element.value.substring(0, position);\n    if (element.nodeName === \"INPUT\") {\n      div.textContent = div.textContent.replace(/\\s/g, \" \");\n    }\n    let span = this.getDocument().createElement(\"span\");\n    span.textContent = element.value.substring(position) || \".\";\n    div.appendChild(span);\n    let rect = element.getBoundingClientRect();\n    let doc = document.documentElement;\n    let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    let top = 0;\n    let left = 0;\n    if (this.menuContainerIsBody) {\n      top = rect.top;\n      left = rect.left;\n    }\n    let coordinates = {\n      top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n      left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n    };\n    let windowWidth = window.innerWidth;\n    let windowHeight = window.innerHeight;\n    let menuDimensions = this.getMenuDimensions();\n    let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n    if (menuIsOffScreen.right) {\n      coordinates.right = windowWidth - coordinates.left;\n      coordinates.left = \"auto\";\n    }\n    let parentHeight = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;\n    if (menuIsOffScreen.bottom) {\n      let parentRect = this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect();\n      let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n      coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n      coordinates.top = \"auto\";\n    }\n    menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n    if (menuIsOffScreen.left) {\n      coordinates.left = windowWidth > menuDimensions.width ? windowLeft + windowWidth - menuDimensions.width : windowLeft;\n      delete coordinates.right;\n    }\n    if (menuIsOffScreen.top) {\n      coordinates.top = windowHeight > menuDimensions.height ? windowTop + windowHeight - menuDimensions.height : windowTop;\n      delete coordinates.bottom;\n    }\n    this.getDocument().body.removeChild(div);\n    return coordinates;\n  }\n  getContentEditableCaretPosition(selectedNodePosition) {\n    let range;\n    let sel = this.getWindowSelection();\n    range = this.getDocument().createRange();\n    range.setStart(sel.anchorNode, selectedNodePosition);\n    range.setEnd(sel.anchorNode, selectedNodePosition);\n    range.collapse(false);\n    let rect = range.getBoundingClientRect();\n    let doc = document.documentElement;\n    let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    let left = rect.left;\n    let top = rect.top;\n    let coordinates = {\n      left: left + windowLeft,\n      top: top + rect.height + windowTop\n    };\n    let windowWidth = window.innerWidth;\n    let windowHeight = window.innerHeight;\n    let menuDimensions = this.getMenuDimensions();\n    let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n    if (menuIsOffScreen.right) {\n      coordinates.left = \"auto\";\n      coordinates.right = windowWidth - rect.left - windowLeft;\n    }\n    let parentHeight = this.tribute.menuContainer ? this.tribute.menuContainer.offsetHeight : this.getDocument().body.offsetHeight;\n    if (menuIsOffScreen.bottom) {\n      let parentRect = this.tribute.menuContainer ? this.tribute.menuContainer.getBoundingClientRect() : this.getDocument().body.getBoundingClientRect();\n      let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n      coordinates.top = \"auto\";\n      coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n    }\n    menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n    if (menuIsOffScreen.left) {\n      coordinates.left = windowWidth > menuDimensions.width ? windowLeft + windowWidth - menuDimensions.width : windowLeft;\n      delete coordinates.right;\n    }\n    if (menuIsOffScreen.top) {\n      coordinates.top = windowHeight > menuDimensions.height ? windowTop + windowHeight - menuDimensions.height : windowTop;\n      delete coordinates.bottom;\n    }\n    if (!this.menuContainerIsBody) {\n      coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n      coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n    }\n    return coordinates;\n  }\n  scrollIntoView(elem) {\n    let reasonableBuffer = 20, clientRect;\n    let maxScrollDisplacement = 100;\n    let e = this.menu;\n    if (typeof e === \"undefined\")\n      return;\n    while (clientRect === void 0 || clientRect.height === 0) {\n      clientRect = e.getBoundingClientRect();\n      if (clientRect.height === 0) {\n        e = e.childNodes[0];\n        if (e === void 0 || !e.getBoundingClientRect) {\n          return;\n        }\n      }\n    }\n    let elemTop = clientRect.top;\n    let elemBottom = elemTop + clientRect.height;\n    if (elemTop < 0) {\n      window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n    } else if (elemBottom > window.innerHeight) {\n      let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n      if (maxY - window.pageYOffset > maxScrollDisplacement) {\n        maxY = window.pageYOffset + maxScrollDisplacement;\n      }\n      let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n      if (targetY > maxY) {\n        targetY = maxY;\n      }\n      window.scrollTo(0, targetY);\n    }\n  }\n};\nvar TributeSearch = class {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.search = this;\n  }\n  simpleFilter(pattern, array) {\n    return array.filter((string) => {\n      return this.test(pattern, string);\n    });\n  }\n  test(pattern, string) {\n    return this.match(pattern, string) !== null;\n  }\n  match(pattern, string, opts) {\n    opts = opts || {};\n    let len = string.length, pre = opts.pre || \"\", post = opts.post || \"\", compareString = opts.caseSensitive && string || string.toLowerCase();\n    if (opts.skip) {\n      return { rendered: string, score: 0 };\n    }\n    pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n    let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n    if (!patternCache) {\n      return null;\n    }\n    return {\n      rendered: this.render(string, patternCache.cache, pre, post),\n      score: patternCache.score\n    };\n  }\n  traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n    if (pattern.length === patternIndex) {\n      return {\n        score: this.calculateScore(patternCache),\n        cache: patternCache.slice()\n      };\n    }\n    if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n      return void 0;\n    }\n    let c = pattern[patternIndex];\n    let index = string.indexOf(c, stringIndex);\n    let best, temp;\n    while (index > -1) {\n      patternCache.push(index);\n      temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n      patternCache.pop();\n      if (!temp) {\n        return best;\n      }\n      if (!best || best.score < temp.score) {\n        best = temp;\n      }\n      index = string.indexOf(c, index + 1);\n    }\n    return best;\n  }\n  calculateScore(patternCache) {\n    let score = 0;\n    let temp = 1;\n    patternCache.forEach((index, i) => {\n      if (i > 0) {\n        if (patternCache[i - 1] + 1 === index) {\n          temp += temp + 1;\n        } else {\n          temp = 1;\n        }\n      }\n      score += temp;\n    });\n    return score;\n  }\n  render(string, indices, pre, post) {\n    var rendered = string.substring(0, indices[0]);\n    indices.forEach((index, i) => {\n      rendered += pre + string[index] + post + string.substring(index + 1, indices[i + 1] ? indices[i + 1] : string.length);\n    });\n    return rendered;\n  }\n  filter(pattern, arr, opts) {\n    opts = opts || {};\n    return arr.reduce((prev, element, idx, arr2) => {\n      let str = element;\n      if (opts.extract) {\n        str = opts.extract(element);\n        if (!str) {\n          str = \"\";\n        }\n      }\n      let rendered = this.match(pattern, str, opts);\n      if (rendered != null) {\n        prev[prev.length] = {\n          string: rendered.rendered,\n          score: rendered.score,\n          index: idx,\n          original: element\n        };\n      }\n      return prev;\n    }, []).sort((a, b) => {\n      let compare = b.score - a.score;\n      if (compare)\n        return compare;\n      return a.index - b.index;\n    });\n  }\n};\nvar Tribute = class _Tribute {\n  constructor({\n    values = null,\n    iframe = null,\n    selectClass = \"highlight\",\n    containerClass = \"tribute-container\",\n    itemClass = \"\",\n    trigger = \"@\",\n    autocompleteMode = false,\n    selectTemplate = null,\n    menuItemTemplate = null,\n    lookup = \"key\",\n    fillAttr = \"value\",\n    collection = null,\n    menuContainer = null,\n    noMatchTemplate = null,\n    requireLeadingSpace = true,\n    allowSpaces = false,\n    replaceTextSuffix = null,\n    positionMenu = true,\n    spaceSelectsMatch = false,\n    searchOpts = {},\n    menuItemLimit = null,\n    menuShowMinLength = 0\n  }) {\n    this.autocompleteMode = autocompleteMode;\n    this.menuSelected = 0;\n    this.current = {};\n    this.inputEvent = false;\n    this.isActive = false;\n    this.menuContainer = menuContainer;\n    this.allowSpaces = allowSpaces;\n    this.replaceTextSuffix = replaceTextSuffix;\n    this.positionMenu = positionMenu;\n    this.hasTrailingSpace = false;\n    this.spaceSelectsMatch = spaceSelectsMatch;\n    if (this.autocompleteMode) {\n      trigger = \"\";\n      allowSpaces = false;\n    }\n    if (values) {\n      this.collection = [\n        {\n          // symbol that starts the lookup\n          trigger,\n          // is it wrapped in an iframe\n          iframe,\n          // class applied to selected item\n          selectClass,\n          // class applied to the Container\n          containerClass,\n          // class applied to each item\n          itemClass,\n          // function called on select that retuns the content to insert\n          selectTemplate: (selectTemplate || _Tribute.defaultSelectTemplate).bind(this),\n          // function called that returns content for an item\n          menuItemTemplate: (menuItemTemplate || _Tribute.defaultMenuItemTemplate).bind(this),\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: ((t) => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\")\n                return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n            return noMatchTemplate || (function() {\n              return \"<li>No Match Found!</li>\";\n            }).bind(this);\n          })(noMatchTemplate),\n          // column to search against in the object\n          lookup,\n          // column that contains the content to insert by default\n          fillAttr,\n          // array of objects or a function returning an array of objects\n          values,\n          requireLeadingSpace,\n          searchOpts,\n          menuItemLimit,\n          menuShowMinLength\n        }\n      ];\n    } else if (collection) {\n      if (this.autocompleteMode)\n        console.warn(\n          \"Tribute in autocomplete mode does not work for collections\"\n        );\n      this.collection = collection.map((item) => {\n        return {\n          trigger: item.trigger || trigger,\n          iframe: item.iframe || iframe,\n          selectClass: item.selectClass || selectClass,\n          containerClass: item.containerClass || containerClass,\n          itemClass: item.itemClass || itemClass,\n          selectTemplate: (item.selectTemplate || _Tribute.defaultSelectTemplate).bind(this),\n          menuItemTemplate: (item.menuItemTemplate || _Tribute.defaultMenuItemTemplate).bind(this),\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: ((t) => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\")\n                return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n            return noMatchTemplate || (function() {\n              return \"<li>No Match Found!</li>\";\n            }).bind(this);\n          })(noMatchTemplate),\n          lookup: item.lookup || lookup,\n          fillAttr: item.fillAttr || fillAttr,\n          values: item.values,\n          requireLeadingSpace: item.requireLeadingSpace,\n          searchOpts: item.searchOpts || searchOpts,\n          menuItemLimit: item.menuItemLimit || menuItemLimit,\n          menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n        };\n      });\n    } else {\n      throw new Error(\"[Tribute] No collection specified.\");\n    }\n    new TributeRange(this);\n    new TributeEvents(this);\n    new TributeMenuEvents(this);\n    new TributeSearch(this);\n  }\n  get isActive() {\n    return this._isActive;\n  }\n  set isActive(val) {\n    if (this._isActive != val) {\n      this._isActive = val;\n      if (this.current.element) {\n        let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n        this.current.element.dispatchEvent(noMatchEvent);\n      }\n    }\n  }\n  static defaultSelectTemplate(item) {\n    if (typeof item === \"undefined\")\n      return `${this.current.collection.trigger}${this.current.mentionText}`;\n    if (this.range.isContentEditable(this.current.element)) {\n      return '<span class=\"tribute-mention\">' + (this.current.collection.trigger + item.original[this.current.collection.fillAttr]) + \"</span>\";\n    }\n    return this.current.collection.trigger + item.original[this.current.collection.fillAttr];\n  }\n  static defaultMenuItemTemplate(matchItem) {\n    return matchItem.string;\n  }\n  static inputTypes() {\n    return [\"TEXTAREA\", \"INPUT\"];\n  }\n  triggers() {\n    return this.collection.map((config) => {\n      return config.trigger;\n    });\n  }\n  attach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n    if (el.constructor === NodeList || el.constructor === HTMLCollection || el.constructor === Array) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._attach(el[i]);\n      }\n    } else {\n      this._attach(el);\n    }\n  }\n  _attach(el) {\n    if (el.hasAttribute(\"data-tribute\")) {\n      console.warn(\"Tribute was already bound to \" + el.nodeName);\n    }\n    this.ensureEditable(el);\n    this.events.bind(el);\n    el.setAttribute(\"data-tribute\", true);\n  }\n  ensureEditable(element) {\n    if (_Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n      if (element.contentEditable) {\n        element.contentEditable = true;\n      } else {\n        throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n      }\n    }\n  }\n  createMenu(containerClass) {\n    let wrapper = this.range.getDocument().createElement(\"div\"), ul = this.range.getDocument().createElement(\"ul\");\n    wrapper.className = containerClass;\n    wrapper.appendChild(ul);\n    if (this.menuContainer) {\n      return this.menuContainer.appendChild(wrapper);\n    }\n    return this.range.getDocument().body.appendChild(wrapper);\n  }\n  showMenuFor(element, scrollTo) {\n    if (this.isActive && this.current.element === element && this.current.mentionText === this.currentMentionTextSnapshot) {\n      return;\n    }\n    this.currentMentionTextSnapshot = this.current.mentionText;\n    if (!this.menu) {\n      this.menu = this.createMenu(this.current.collection.containerClass);\n      element.tributeMenu = this.menu;\n      this.menuEvents.bind(this.menu);\n    }\n    this.isActive = true;\n    this.menuSelected = 0;\n    if (!this.current.mentionText) {\n      this.current.mentionText = \"\";\n    }\n    const processValues = (values) => {\n      if (!this.isActive) {\n        return;\n      }\n      let items = this.search.filter(this.current.mentionText, values, {\n        pre: this.current.collection.searchOpts.pre || \"<span>\",\n        post: this.current.collection.searchOpts.post || \"</span>\",\n        skip: this.current.collection.searchOpts.skip,\n        extract: (el) => {\n          if (typeof this.current.collection.lookup === \"string\") {\n            return el[this.current.collection.lookup];\n          } else if (typeof this.current.collection.lookup === \"function\") {\n            return this.current.collection.lookup(el, this.current.mentionText);\n          } else {\n            throw new Error(\n              \"Invalid lookup attribute, lookup must be string or function.\"\n            );\n          }\n        }\n      });\n      if (this.current.collection.menuItemLimit) {\n        items = items.slice(0, this.current.collection.menuItemLimit);\n      }\n      this.current.filteredItems = items;\n      let ul = this.menu.querySelector(\"ul\");\n      this.range.positionMenuAtCaret(scrollTo);\n      if (!items.length) {\n        let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n          detail: this.menu\n        });\n        this.current.element.dispatchEvent(noMatchEvent);\n        if (typeof this.current.collection.noMatchTemplate === \"function\" && !this.current.collection.noMatchTemplate() || !this.current.collection.noMatchTemplate) {\n          this.hideMenu();\n        } else {\n          typeof this.current.collection.noMatchTemplate === \"function\" ? ul.innerHTML = this.current.collection.noMatchTemplate() : ul.innerHTML = this.current.collection.noMatchTemplate;\n        }\n        return;\n      }\n      ul.innerHTML = \"\";\n      let fragment = this.range.getDocument().createDocumentFragment();\n      items.forEach((item, index) => {\n        let li = this.range.getDocument().createElement(\"li\");\n        li.setAttribute(\"data-index\", index);\n        li.className = this.current.collection.itemClass;\n        li.addEventListener(\"mousemove\", (e) => {\n          let [li2, index2] = this._findLiTarget(e.target);\n          if (e.movementY !== 0) {\n            this.events.setActiveLi(index2);\n          }\n        });\n        if (this.menuSelected === index) {\n          li.classList.add(this.current.collection.selectClass);\n        }\n        li.innerHTML = this.current.collection.menuItemTemplate(item);\n        fragment.appendChild(li);\n      });\n      ul.appendChild(fragment);\n    };\n    if (typeof this.current.collection.values === \"function\") {\n      this.current.collection.values(this.current.mentionText, processValues);\n    } else {\n      processValues(this.current.collection.values);\n    }\n  }\n  _findLiTarget(el) {\n    if (!el)\n      return [];\n    const index = el.getAttribute(\"data-index\");\n    return !index ? this._findLiTarget(el.parentNode) : [el, index];\n  }\n  showMenuForCollection(element, collectionIndex) {\n    if (element !== document.activeElement) {\n      this.placeCaretAtEnd(element);\n    }\n    this.current.collection = this.collection[collectionIndex || 0];\n    this.current.externalTrigger = true;\n    this.current.element = element;\n    if (element.isContentEditable)\n      this.insertTextAtCursor(this.current.collection.trigger);\n    else\n      this.insertAtCaret(element, this.current.collection.trigger);\n    this.showMenuFor(element);\n  }\n  // TODO: make sure this works for inputs/textareas\n  placeCaretAtEnd(el) {\n    el.focus();\n    if (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n      var range = document.createRange();\n      range.selectNodeContents(el);\n      range.collapse(false);\n      var sel = window.getSelection();\n      sel.removeAllRanges();\n      sel.addRange(range);\n    } else if (typeof document.body.createTextRange != \"undefined\") {\n      var textRange = document.body.createTextRange();\n      textRange.moveToElementText(el);\n      textRange.collapse(false);\n      textRange.select();\n    }\n  }\n  // for contenteditable\n  insertTextAtCursor(text) {\n    var sel, range;\n    sel = window.getSelection();\n    range = sel.getRangeAt(0);\n    range.deleteContents();\n    var textNode = document.createTextNode(text);\n    range.insertNode(textNode);\n    range.selectNodeContents(textNode);\n    range.collapse(false);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n  // for regular inputs\n  insertAtCaret(textarea, text) {\n    var scrollPos = textarea.scrollTop;\n    var caretPos = textarea.selectionStart;\n    var front = textarea.value.substring(0, caretPos);\n    var back = textarea.value.substring(\n      textarea.selectionEnd,\n      textarea.value.length\n    );\n    textarea.value = front + text + back;\n    caretPos = caretPos + text.length;\n    textarea.selectionStart = caretPos;\n    textarea.selectionEnd = caretPos;\n    textarea.focus();\n    textarea.scrollTop = scrollPos;\n  }\n  hideMenu() {\n    if (this.menu) {\n      this.menu.style.cssText = \"display: none;\";\n      this.isActive = false;\n      this.menuSelected = 0;\n      this.current = {};\n    }\n  }\n  selectItemAtIndex(index, originalEvent) {\n    index = parseInt(index);\n    if (typeof index !== \"number\" || isNaN(index))\n      return;\n    let item = this.current.filteredItems[index];\n    let content = this.current.collection.selectTemplate(item);\n    if (content !== null)\n      this.replaceText(content, originalEvent, item);\n  }\n  replaceText(content, originalEvent, item) {\n    this.range.replaceTriggerText(content, true, true, originalEvent, item);\n  }\n  _append(collection, newValues, replace) {\n    if (typeof collection.values === \"function\") {\n      throw new Error(\"Unable to append to values, as it is a function.\");\n    } else if (!replace) {\n      collection.values = collection.values.concat(newValues);\n    } else {\n      collection.values = newValues;\n    }\n  }\n  append(collectionIndex, newValues, replace) {\n    let index = parseInt(collectionIndex);\n    if (typeof index !== \"number\")\n      throw new Error(\"please provide an index for the collection to update.\");\n    let collection = this.collection[index];\n    this._append(collection, newValues, replace);\n  }\n  appendCurrent(newValues, replace) {\n    if (this.isActive) {\n      this._append(this.current.collection, newValues, replace);\n    } else {\n      throw new Error(\n        \"No active state. Please use append instead and pass an index.\"\n      );\n    }\n  }\n  detach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n    if (el.constructor === NodeList || el.constructor === HTMLCollection || el.constructor === Array) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._detach(el[i]);\n      }\n    } else {\n      this._detach(el);\n    }\n  }\n  _detach(el) {\n    this.events.unbind(el);\n    if (el.tributeMenu) {\n      this.menuEvents.unbind(el.tributeMenu);\n    }\n    setTimeout(() => {\n      el.removeAttribute(\"data-tribute\");\n      this.isActive = false;\n      if (el.tributeMenu) {\n        el.tributeMenu.remove();\n      }\n    });\n  }\n};\nvar tribute_esm_default = Tribute;\nexport {\n  tribute_esm_default as default\n};\n//# sourceMappingURL=tributejs.js.map\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/trix/dist/trix.esm.min.js\nvar t = \"2.0.8\";\nvar e = \"[data-trix-attachment]\";\nvar i = { preview: { presentation: \"gallery\", caption: { name: true, size: true } }, file: { caption: { size: true } } };\nvar n = { default: { tagName: \"div\", parse: false }, quote: { tagName: \"blockquote\", nestable: true }, heading1: { tagName: \"h1\", terminal: true, breakOnReturn: true, group: false }, code: { tagName: \"pre\", terminal: true, text: { plaintext: true } }, bulletList: { tagName: \"ul\", parse: false }, bullet: { tagName: \"li\", listAttribute: \"bulletList\", group: false, nestable: true, test(t2) {\n  return r(t2.parentNode) === n[this.listAttribute].tagName;\n} }, numberList: { tagName: \"ol\", parse: false }, number: { tagName: \"li\", listAttribute: \"numberList\", group: false, nestable: true, test(t2) {\n  return r(t2.parentNode) === n[this.listAttribute].tagName;\n} }, attachmentGallery: { tagName: \"div\", exclusive: true, terminal: true, parse: false, group: false } };\nvar r = (t2) => {\n  var e2;\n  return null == t2 || null === (e2 = t2.tagName) || void 0 === e2 ? void 0 : e2.toLowerCase();\n};\nvar o = navigator.userAgent.match(/android\\s([0-9]+.*Chrome)/i);\nvar s = o && parseInt(o[1]);\nvar a = { composesExistingText: /Android.*Chrome/.test(navigator.userAgent), recentAndroid: s && s > 12, samsungAndroid: s && navigator.userAgent.match(/Android.*SM-/), forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent), supportsInputEvents: \"undefined\" != typeof InputEvent && [\"data\", \"getTargetRanges\", \"inputType\"].every((t2) => t2 in InputEvent.prototype) };\nvar l = { attachFiles: \"Attach Files\", bold: \"Bold\", bullets: \"Bullets\", byte: \"Byte\", bytes: \"Bytes\", captionPlaceholder: \"Add a caption…\", code: \"Code\", heading1: \"Heading\", indent: \"Increase Level\", italic: \"Italic\", link: \"Link\", numbers: \"Numbers\", outdent: \"Decrease Level\", quote: \"Quote\", redo: \"Redo\", remove: \"Remove\", strike: \"Strikethrough\", undo: \"Undo\", unlink: \"Unlink\", url: \"URL\", urlPlaceholder: \"Enter a URL…\", GB: \"GB\", KB: \"KB\", MB: \"MB\", PB: \"PB\", TB: \"TB\" };\nvar c = [l.bytes, l.KB, l.MB, l.GB, l.TB, l.PB];\nvar h = { prefix: \"IEC\", precision: 2, formatter(t2) {\n  switch (t2) {\n    case 0:\n      return \"0 \".concat(l.bytes);\n    case 1:\n      return \"1 \".concat(l.byte);\n    default:\n      let e2;\n      \"SI\" === this.prefix ? e2 = 1e3 : \"IEC\" === this.prefix && (e2 = 1024);\n      const i2 = Math.floor(Math.log(t2) / Math.log(e2)), n2 = (t2 / Math.pow(e2, i2)).toFixed(this.precision).replace(/0*$/, \"\").replace(/\\.$/, \"\");\n      return \"\".concat(n2, \" \").concat(c[i2]);\n  }\n} };\nvar u = \"\\uFEFF\";\nvar d = \" \";\nvar g = function(t2) {\n  for (const e2 in t2) {\n    const i2 = t2[e2];\n    this[e2] = i2;\n  }\n  return this;\n};\nvar m = document.documentElement;\nvar p = m.matches;\nvar f = function(t2) {\n  let { onElement: e2, matchingSelector: i2, withCallback: n2, inPhase: r2, preventDefault: o2, times: s2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  const a2 = e2 || m, l2 = i2, c2 = \"capturing\" === r2, h2 = function(t3) {\n    null != s2 && 0 == --s2 && h2.destroy();\n    const e3 = A(t3.target, { matchingSelector: l2 });\n    null != e3 && (null == n2 || n2.call(e3, t3, e3), o2 && t3.preventDefault());\n  };\n  return h2.destroy = () => a2.removeEventListener(t2, h2, c2), a2.addEventListener(t2, h2, c2), h2;\n};\nvar b = function(t2) {\n  let { onElement: e2, bubbles: i2, cancelable: n2, attributes: r2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  const o2 = null != e2 ? e2 : m;\n  i2 = false !== i2, n2 = false !== n2;\n  const s2 = document.createEvent(\"Events\");\n  return s2.initEvent(t2, i2, n2), null != r2 && g.call(s2, r2), o2.dispatchEvent(s2);\n};\nvar v = function(t2, e2) {\n  if (1 === (null == t2 ? void 0 : t2.nodeType))\n    return p.call(t2, e2);\n};\nvar A = function(t2) {\n  let { matchingSelector: e2, untilNode: i2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  for (; t2 && t2.nodeType !== Node.ELEMENT_NODE; )\n    t2 = t2.parentNode;\n  if (null != t2) {\n    if (null == e2)\n      return t2;\n    if (t2.closest && null == i2)\n      return t2.closest(e2);\n    for (; t2 && t2 !== i2; ) {\n      if (v(t2, e2))\n        return t2;\n      t2 = t2.parentNode;\n    }\n  }\n};\nvar x = (t2) => document.activeElement !== t2 && y(t2, document.activeElement);\nvar y = function(t2, e2) {\n  if (t2 && e2)\n    for (; e2; ) {\n      if (e2 === t2)\n        return true;\n      e2 = e2.parentNode;\n    }\n};\nvar C = function(t2) {\n  var e2;\n  if (null === (e2 = t2) || void 0 === e2 || !e2.parentNode)\n    return;\n  let i2 = 0;\n  for (t2 = t2.previousSibling; t2; )\n    i2++, t2 = t2.previousSibling;\n  return i2;\n};\nvar R = (t2) => {\n  var e2;\n  return null == t2 || null === (e2 = t2.parentNode) || void 0 === e2 ? void 0 : e2.removeChild(t2);\n};\nvar S = function(t2) {\n  let { onlyNodesOfType: e2, usingFilter: i2, expandEntityReferences: n2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  const r2 = (() => {\n    switch (e2) {\n      case \"element\":\n        return NodeFilter.SHOW_ELEMENT;\n      case \"text\":\n        return NodeFilter.SHOW_TEXT;\n      case \"comment\":\n        return NodeFilter.SHOW_COMMENT;\n      default:\n        return NodeFilter.SHOW_ALL;\n    }\n  })();\n  return document.createTreeWalker(t2, r2, null != i2 ? i2 : null, true === n2);\n};\nvar E = (t2) => {\n  var e2;\n  return null == t2 || null === (e2 = t2.tagName) || void 0 === e2 ? void 0 : e2.toLowerCase();\n};\nvar k = function(t2) {\n  let e2, i2, n2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  \"object\" == typeof t2 ? (n2 = t2, t2 = n2.tagName) : n2 = { attributes: n2 };\n  const r2 = document.createElement(t2);\n  if (null != n2.editable && (null == n2.attributes && (n2.attributes = {}), n2.attributes.contenteditable = n2.editable), n2.attributes)\n    for (e2 in n2.attributes)\n      i2 = n2.attributes[e2], r2.setAttribute(e2, i2);\n  if (n2.style)\n    for (e2 in n2.style)\n      i2 = n2.style[e2], r2.style[e2] = i2;\n  if (n2.data)\n    for (e2 in n2.data)\n      i2 = n2.data[e2], r2.dataset[e2] = i2;\n  return n2.className && n2.className.split(\" \").forEach((t3) => {\n    r2.classList.add(t3);\n  }), n2.textContent && (r2.textContent = n2.textContent), n2.childNodes && [].concat(n2.childNodes).forEach((t3) => {\n    r2.appendChild(t3);\n  }), r2;\n};\nvar L;\nvar D = function() {\n  if (null != L)\n    return L;\n  L = [];\n  for (const t2 in n) {\n    const e2 = n[t2];\n    e2.tagName && L.push(e2.tagName);\n  }\n  return L;\n};\nvar w = (t2) => B(null == t2 ? void 0 : t2.firstChild);\nvar T = function(t2) {\n  let { strict: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { strict: true };\n  return e2 ? B(t2) : B(t2) || !B(t2.firstChild) && function(t3) {\n    return D().includes(E(t3)) && !D().includes(E(t3.firstChild));\n  }(t2);\n};\nvar B = (t2) => F(t2) && \"block\" === (null == t2 ? void 0 : t2.data);\nvar F = (t2) => (null == t2 ? void 0 : t2.nodeType) === Node.COMMENT_NODE;\nvar I = function(t2) {\n  let { name: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  if (t2)\n    return O(t2) ? t2.data === u ? !e2 || t2.parentNode.dataset.trixCursorTarget === e2 : void 0 : I(t2.firstChild);\n};\nvar P = (t2) => v(t2, e);\nvar N = (t2) => O(t2) && \"\" === (null == t2 ? void 0 : t2.data);\nvar O = (t2) => (null == t2 ? void 0 : t2.nodeType) === Node.TEXT_NODE;\nvar M = { level2Enabled: true, getLevel() {\n  return this.level2Enabled && a.supportsInputEvents ? 2 : 0;\n}, pickFiles(t2) {\n  const e2 = k(\"input\", { type: \"file\", multiple: true, hidden: true, id: this.fileInputId });\n  e2.addEventListener(\"change\", () => {\n    t2(e2.files), R(e2);\n  }), R(document.getElementById(this.fileInputId)), document.body.appendChild(e2), e2.click();\n} };\nvar j = { removeBlankTableCells: false, tableCellSeparator: \" | \", tableRowSeparator: \"\\n\" };\nvar W = { bold: { tagName: \"strong\", inheritable: true, parser(t2) {\n  const e2 = window.getComputedStyle(t2);\n  return \"bold\" === e2.fontWeight || e2.fontWeight >= 600;\n} }, italic: { tagName: \"em\", inheritable: true, parser: (t2) => \"italic\" === window.getComputedStyle(t2).fontStyle }, href: { groupTagName: \"a\", parser(t2) {\n  const i2 = \"a:not(\".concat(e, \")\"), n2 = t2.closest(i2);\n  if (n2)\n    return n2.getAttribute(\"href\");\n} }, strike: { tagName: \"del\", inheritable: true }, frozen: { style: { backgroundColor: \"highlight\" } } };\nvar U = { getDefaultHTML: () => '<div class=\"trix-button-row\">\\n      <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"'.concat(l.bold, '\" tabindex=\"-1\">').concat(l.bold, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"').concat(l.italic, '\" tabindex=\"-1\">').concat(l.italic, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"').concat(l.strike, '\" tabindex=\"-1\">').concat(l.strike, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"').concat(l.link, '\" tabindex=\"-1\">').concat(l.link, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"').concat(l.heading1, '\" tabindex=\"-1\">').concat(l.heading1, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"').concat(l.quote, '\" tabindex=\"-1\">').concat(l.quote, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"').concat(l.code, '\" tabindex=\"-1\">').concat(l.code, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"').concat(l.bullets, '\" tabindex=\"-1\">').concat(l.bullets, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"').concat(l.numbers, '\" tabindex=\"-1\">').concat(l.numbers, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"').concat(l.outdent, '\" tabindex=\"-1\">').concat(l.outdent, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"').concat(l.indent, '\" tabindex=\"-1\">').concat(l.indent, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"').concat(l.attachFiles, '\" tabindex=\"-1\">').concat(l.attachFiles, '</button>\\n      </span>\\n\\n      <span class=\"trix-button-group-spacer\"></span>\\n\\n      <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"').concat(l.undo, '\" tabindex=\"-1\">').concat(l.undo, '</button>\\n        <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"').concat(l.redo, '\" tabindex=\"-1\">').concat(l.redo, '</button>\\n      </span>\\n    </div>\\n\\n    <div class=\"trix-dialogs\" data-trix-dialogs>\\n      <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\\n        <div class=\"trix-dialog__link-fields\">\\n          <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"').concat(l.urlPlaceholder, '\" aria-label=\"').concat(l.url, '\" required data-trix-input>\\n          <div class=\"trix-button-group\">\\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"').concat(l.link, '\" data-trix-method=\"setAttribute\">\\n            <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"').concat(l.unlink, '\" data-trix-method=\"removeAttribute\">\\n          </div>\\n        </div>\\n      </div>\\n    </div>') };\nvar q = { interval: 5e3 };\nvar V = Object.freeze({ __proto__: null, attachments: i, blockAttributes: n, browser: a, css: { attachment: \"attachment\", attachmentCaption: \"attachment__caption\", attachmentCaptionEditor: \"attachment__caption-editor\", attachmentMetadata: \"attachment__metadata\", attachmentMetadataContainer: \"attachment__metadata-container\", attachmentName: \"attachment__name\", attachmentProgress: \"attachment__progress\", attachmentSize: \"attachment__size\", attachmentToolbar: \"attachment__toolbar\", attachmentGallery: \"attachment-gallery\" }, fileSize: h, input: M, keyNames: { 8: \"backspace\", 9: \"tab\", 13: \"return\", 27: \"escape\", 37: \"left\", 39: \"right\", 46: \"delete\", 68: \"d\", 72: \"h\", 79: \"o\" }, lang: l, parser: j, textAttributes: W, toolbar: U, undo: q });\nvar z = class {\n  static proxyMethod(t2) {\n    const { name: e2, toMethod: i2, toProperty: n2, optional: r2 } = _(t2);\n    this.prototype[e2] = function() {\n      let t3, o2;\n      var s2, a2;\n      i2 ? o2 = r2 ? null === (s2 = this[i2]) || void 0 === s2 ? void 0 : s2.call(this) : this[i2]() : n2 && (o2 = this[n2]);\n      return r2 ? (t3 = null === (a2 = o2) || void 0 === a2 ? void 0 : a2[e2], t3 ? H.call(t3, o2, arguments) : void 0) : (t3 = o2[e2], H.call(t3, o2, arguments));\n    };\n  }\n};\nvar _ = function(t2) {\n  const e2 = t2.match(J);\n  if (!e2)\n    throw new Error(\"can't parse @proxyMethod expression: \".concat(t2));\n  const i2 = { name: e2[4] };\n  return null != e2[2] ? i2.toMethod = e2[1] : i2.toProperty = e2[1], null != e2[3] && (i2.optional = true), i2;\n};\nvar { apply: H } = Function.prototype;\nvar J = new RegExp(\"^(.+?)(\\\\(\\\\))?(\\\\?)?\\\\.(.+?)$\");\nvar K;\nvar G;\nvar $;\nvar X = class extends z {\n  static box() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n    return t2 instanceof this ? t2 : this.fromUCS2String(null == t2 ? void 0 : t2.toString());\n  }\n  static fromUCS2String(t2) {\n    return new this(t2, tt(t2));\n  }\n  static fromCodepoints(t2) {\n    return new this(et(t2), t2);\n  }\n  constructor(t2, e2) {\n    super(...arguments), this.ucs2String = t2, this.codepoints = e2, this.length = this.codepoints.length, this.ucs2Length = this.ucs2String.length;\n  }\n  offsetToUCS2Offset(t2) {\n    return et(this.codepoints.slice(0, Math.max(0, t2))).length;\n  }\n  offsetFromUCS2Offset(t2) {\n    return tt(this.ucs2String.slice(0, Math.max(0, t2))).length;\n  }\n  slice() {\n    return this.constructor.fromCodepoints(this.codepoints.slice(...arguments));\n  }\n  charAt(t2) {\n    return this.slice(t2, t2 + 1);\n  }\n  isEqualTo(t2) {\n    return this.constructor.box(t2).ucs2String === this.ucs2String;\n  }\n  toJSON() {\n    return this.ucs2String;\n  }\n  getCacheKey() {\n    return this.ucs2String;\n  }\n  toString() {\n    return this.ucs2String;\n  }\n};\nvar Y = 1 === (null === (K = Array.from) || void 0 === K ? void 0 : K.call(Array, \"👼\").length);\nvar Q = null != (null === (G = \" \".codePointAt) || void 0 === G ? void 0 : G.call(\" \", 0));\nvar Z = \" 👼\" === (null === ($ = String.fromCodePoint) || void 0 === $ ? void 0 : $.call(String, 32, 128124));\nvar tt;\nvar et;\ntt = Y && Q ? (t2) => Array.from(t2).map((t3) => t3.codePointAt(0)) : function(t2) {\n  const e2 = [];\n  let i2 = 0;\n  const { length: n2 } = t2;\n  for (; i2 < n2; ) {\n    let r2 = t2.charCodeAt(i2++);\n    if (55296 <= r2 && r2 <= 56319 && i2 < n2) {\n      const e3 = t2.charCodeAt(i2++);\n      56320 == (64512 & e3) ? r2 = ((1023 & r2) << 10) + (1023 & e3) + 65536 : i2--;\n    }\n    e2.push(r2);\n  }\n  return e2;\n}, et = Z ? (t2) => String.fromCodePoint(...Array.from(t2 || [])) : function(t2) {\n  return (() => {\n    const e2 = [];\n    return Array.from(t2).forEach((t3) => {\n      let i2 = \"\";\n      t3 > 65535 && (t3 -= 65536, i2 += String.fromCharCode(t3 >>> 10 & 1023 | 55296), t3 = 56320 | 1023 & t3), e2.push(i2 + String.fromCharCode(t3));\n    }), e2;\n  })().join(\"\");\n};\nvar it = 0;\nvar nt = class extends z {\n  static fromJSONString(t2) {\n    return this.fromJSON(JSON.parse(t2));\n  }\n  constructor() {\n    super(...arguments), this.id = ++it;\n  }\n  hasSameConstructorAs(t2) {\n    return this.constructor === (null == t2 ? void 0 : t2.constructor);\n  }\n  isEqualTo(t2) {\n    return this === t2;\n  }\n  inspect() {\n    const t2 = [], e2 = this.contentsForInspection() || {};\n    for (const i2 in e2) {\n      const n2 = e2[i2];\n      t2.push(\"\".concat(i2, \"=\").concat(n2));\n    }\n    return \"#<\".concat(this.constructor.name, \":\").concat(this.id).concat(t2.length ? \" \".concat(t2.join(\", \")) : \"\", \">\");\n  }\n  contentsForInspection() {\n  }\n  toJSONString() {\n    return JSON.stringify(this);\n  }\n  toUTF16String() {\n    return X.box(this);\n  }\n  getCacheKey() {\n    return this.id.toString();\n  }\n};\nvar rt = function() {\n  let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n  if (t2.length !== e2.length)\n    return false;\n  for (let i2 = 0; i2 < t2.length; i2++) {\n    if (t2[i2] !== e2[i2])\n      return false;\n  }\n  return true;\n};\nvar ot = function(t2) {\n  const e2 = t2.slice(0);\n  for (var i2 = arguments.length, n2 = new Array(i2 > 1 ? i2 - 1 : 0), r2 = 1; r2 < i2; r2++)\n    n2[r2 - 1] = arguments[r2];\n  return e2.splice(...n2), e2;\n};\nvar st = /[\\u05BE\\u05C0\\u05C3\\u05D0-\\u05EA\\u05F0-\\u05F4\\u061B\\u061F\\u0621-\\u063A\\u0640-\\u064A\\u066D\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D5\\u06E5\\u06E6\\u200F\\u202B\\u202E\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE72\\uFE74\\uFE76-\\uFEFC]/;\nvar at = function() {\n  const t2 = k(\"input\", { dir: \"auto\", name: \"x\", dirName: \"x.dir\" }), e2 = k(\"textarea\", { dir: \"auto\", name: \"y\", dirName: \"y.dir\" }), i2 = k(\"form\");\n  i2.appendChild(t2), i2.appendChild(e2);\n  const n2 = function() {\n    try {\n      return new FormData(i2).has(e2.dirName);\n    } catch (t3) {\n      return false;\n    }\n  }(), r2 = function() {\n    try {\n      return t2.matches(\":dir(ltr),:dir(rtl)\");\n    } catch (t3) {\n      return false;\n    }\n  }();\n  return n2 ? function(t3) {\n    return e2.value = t3, new FormData(i2).get(e2.dirName);\n  } : r2 ? function(e3) {\n    return t2.value = e3, t2.matches(\":dir(rtl)\") ? \"rtl\" : \"ltr\";\n  } : function(t3) {\n    const e3 = t3.trim().charAt(0);\n    return st.test(e3) ? \"rtl\" : \"ltr\";\n  };\n}();\nvar lt = null;\nvar ct = null;\nvar ht = null;\nvar ut = null;\nvar dt = () => (lt || (lt = ft().concat(mt())), lt);\nvar gt = (t2) => n[t2];\nvar mt = () => (ct || (ct = Object.keys(n)), ct);\nvar pt = (t2) => W[t2];\nvar ft = () => (ht || (ht = Object.keys(W)), ht);\nvar bt = function(t2, e2) {\n  vt(t2).textContent = e2.replace(/%t/g, t2);\n};\nvar vt = function(t2) {\n  const e2 = document.createElement(\"style\");\n  e2.setAttribute(\"type\", \"text/css\"), e2.setAttribute(\"data-tag-name\", t2.toLowerCase());\n  const i2 = At();\n  return i2 && e2.setAttribute(\"nonce\", i2), document.head.insertBefore(e2, document.head.firstChild), e2;\n};\nvar At = function() {\n  const t2 = xt(\"trix-csp-nonce\") || xt(\"csp-nonce\");\n  if (t2)\n    return t2.getAttribute(\"content\");\n};\nvar xt = (t2) => document.head.querySelector(\"meta[name=\".concat(t2, \"]\"));\nvar yt = { \"application/x-trix-feature-detection\": \"test\" };\nvar Ct = function(t2) {\n  const e2 = t2.getData(\"text/plain\"), i2 = t2.getData(\"text/html\");\n  if (!e2 || !i2)\n    return null == e2 ? void 0 : e2.length;\n  {\n    const { body: t3 } = new DOMParser().parseFromString(i2, \"text/html\");\n    if (t3.textContent === e2)\n      return !t3.querySelector(\"*\");\n  }\n};\nvar Rt = /Mac|^iP/.test(navigator.platform) ? (t2) => t2.metaKey : (t2) => t2.ctrlKey;\nvar St = (t2) => setTimeout(t2, 1);\nvar Et = function() {\n  let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n  const e2 = {};\n  for (const i2 in t2) {\n    const n2 = t2[i2];\n    e2[i2] = n2;\n  }\n  return e2;\n};\nvar kt = function() {\n  let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  if (Object.keys(t2).length !== Object.keys(e2).length)\n    return false;\n  for (const i2 in t2) {\n    if (t2[i2] !== e2[i2])\n      return false;\n  }\n  return true;\n};\nvar Lt = function(t2) {\n  if (null != t2)\n    return Array.isArray(t2) || (t2 = [t2, t2]), [Tt(t2[0]), Tt(null != t2[1] ? t2[1] : t2[0])];\n};\nvar Dt = function(t2) {\n  if (null == t2)\n    return;\n  const [e2, i2] = Lt(t2);\n  return Bt(e2, i2);\n};\nvar wt = function(t2, e2) {\n  if (null == t2 || null == e2)\n    return;\n  const [i2, n2] = Lt(t2), [r2, o2] = Lt(e2);\n  return Bt(i2, r2) && Bt(n2, o2);\n};\nvar Tt = function(t2) {\n  return \"number\" == typeof t2 ? t2 : Et(t2);\n};\nvar Bt = function(t2, e2) {\n  return \"number\" == typeof t2 ? t2 === e2 : kt(t2, e2);\n};\nvar Ft = class extends z {\n  constructor() {\n    super(...arguments), this.update = this.update.bind(this), this.selectionManagers = [];\n  }\n  start() {\n    this.started || (this.started = true, document.addEventListener(\"selectionchange\", this.update, true));\n  }\n  stop() {\n    if (this.started)\n      return this.started = false, document.removeEventListener(\"selectionchange\", this.update, true);\n  }\n  registerSelectionManager(t2) {\n    if (!this.selectionManagers.includes(t2))\n      return this.selectionManagers.push(t2), this.start();\n  }\n  unregisterSelectionManager(t2) {\n    if (this.selectionManagers = this.selectionManagers.filter((e2) => e2 !== t2), 0 === this.selectionManagers.length)\n      return this.stop();\n  }\n  notifySelectionManagersOfSelectionChange() {\n    return this.selectionManagers.map((t2) => t2.selectionDidChange());\n  }\n  update() {\n    this.notifySelectionManagersOfSelectionChange();\n  }\n  reset() {\n    this.update();\n  }\n};\nvar It = new Ft();\nvar Pt = function() {\n  const t2 = window.getSelection();\n  if (t2.rangeCount > 0)\n    return t2;\n};\nvar Nt = function() {\n  var t2;\n  const e2 = null === (t2 = Pt()) || void 0 === t2 ? void 0 : t2.getRangeAt(0);\n  if (e2 && !Mt(e2))\n    return e2;\n};\nvar Ot = function(t2) {\n  const e2 = window.getSelection();\n  return e2.removeAllRanges(), e2.addRange(t2), It.update();\n};\nvar Mt = (t2) => jt(t2.startContainer) || jt(t2.endContainer);\nvar jt = (t2) => !Object.getPrototypeOf(t2);\nvar Wt = (t2) => t2.replace(new RegExp(\"\".concat(u), \"g\"), \"\").replace(new RegExp(\"\".concat(d), \"g\"), \" \");\nvar Ut = new RegExp(\"[^\\\\S\".concat(d, \"]\"));\nvar qt = (t2) => t2.replace(new RegExp(\"\".concat(Ut.source), \"g\"), \" \").replace(/\\ {2,}/g, \" \");\nvar Vt = function(t2, e2) {\n  if (t2.isEqualTo(e2))\n    return [\"\", \"\"];\n  const i2 = zt(t2, e2), { length: n2 } = i2.utf16String;\n  let r2;\n  if (n2) {\n    const { offset: o2 } = i2, s2 = t2.codepoints.slice(0, o2).concat(t2.codepoints.slice(o2 + n2));\n    r2 = zt(e2, X.fromCodepoints(s2));\n  } else\n    r2 = zt(e2, t2);\n  return [i2.utf16String.toString(), r2.utf16String.toString()];\n};\nvar zt = function(t2, e2) {\n  let i2 = 0, n2 = t2.length, r2 = e2.length;\n  for (; i2 < n2 && t2.charAt(i2).isEqualTo(e2.charAt(i2)); )\n    i2++;\n  for (; n2 > i2 + 1 && t2.charAt(n2 - 1).isEqualTo(e2.charAt(r2 - 1)); )\n    n2--, r2--;\n  return { utf16String: t2.slice(i2, n2), offset: i2 };\n};\nvar _t = class __t extends nt {\n  static fromCommonAttributesOfObjects() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    if (!t2.length)\n      return new this();\n    let e2 = Gt(t2[0]), i2 = e2.getKeys();\n    return t2.slice(1).forEach((t3) => {\n      i2 = e2.getKeysCommonToHash(Gt(t3)), e2 = e2.slice(i2);\n    }), e2;\n  }\n  static box(t2) {\n    return Gt(t2);\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    super(...arguments), this.values = Kt(t2);\n  }\n  add(t2, e2) {\n    return this.merge(Ht(t2, e2));\n  }\n  remove(t2) {\n    return new __t(Kt(this.values, t2));\n  }\n  get(t2) {\n    return this.values[t2];\n  }\n  has(t2) {\n    return t2 in this.values;\n  }\n  merge(t2) {\n    return new __t(Jt(this.values, $t(t2)));\n  }\n  slice(t2) {\n    const e2 = {};\n    return Array.from(t2).forEach((t3) => {\n      this.has(t3) && (e2[t3] = this.values[t3]);\n    }), new __t(e2);\n  }\n  getKeys() {\n    return Object.keys(this.values);\n  }\n  getKeysCommonToHash(t2) {\n    return t2 = Gt(t2), this.getKeys().filter((e2) => this.values[e2] === t2.values[e2]);\n  }\n  isEqualTo(t2) {\n    return rt(this.toArray(), Gt(t2).toArray());\n  }\n  isEmpty() {\n    return 0 === this.getKeys().length;\n  }\n  toArray() {\n    if (!this.array) {\n      const t2 = [];\n      for (const e2 in this.values) {\n        const i2 = this.values[e2];\n        t2.push(t2.push(e2, i2));\n      }\n      this.array = t2.slice(0);\n    }\n    return this.array;\n  }\n  toObject() {\n    return Kt(this.values);\n  }\n  toJSON() {\n    return this.toObject();\n  }\n  contentsForInspection() {\n    return { values: JSON.stringify(this.values) };\n  }\n};\nvar Ht = function(t2, e2) {\n  const i2 = {};\n  return i2[t2] = e2, i2;\n};\nvar Jt = function(t2, e2) {\n  const i2 = Kt(t2);\n  for (const t3 in e2) {\n    const n2 = e2[t3];\n    i2[t3] = n2;\n  }\n  return i2;\n};\nvar Kt = function(t2, e2) {\n  const i2 = {};\n  return Object.keys(t2).sort().forEach((n2) => {\n    n2 !== e2 && (i2[n2] = t2[n2]);\n  }), i2;\n};\nvar Gt = function(t2) {\n  return t2 instanceof _t ? t2 : new _t(t2);\n};\nvar $t = function(t2) {\n  return t2 instanceof _t ? t2.values : t2;\n};\nvar Xt = class {\n  static groupObjects() {\n    let t2, e2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], { depth: i2, asTree: n2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    n2 && null == i2 && (i2 = 0);\n    const r2 = [];\n    return Array.from(e2).forEach((e3) => {\n      var o2;\n      if (t2) {\n        var s2, a2, l2;\n        if (null !== (s2 = e3.canBeGrouped) && void 0 !== s2 && s2.call(e3, i2) && null !== (a2 = (l2 = t2[t2.length - 1]).canBeGroupedWith) && void 0 !== a2 && a2.call(l2, e3, i2))\n          return void t2.push(e3);\n        r2.push(new this(t2, { depth: i2, asTree: n2 })), t2 = null;\n      }\n      null !== (o2 = e3.canBeGrouped) && void 0 !== o2 && o2.call(e3, i2) ? t2 = [e3] : r2.push(e3);\n    }), t2 && r2.push(new this(t2, { depth: i2, asTree: n2 })), r2;\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], { depth: e2, asTree: i2 } = arguments.length > 1 ? arguments[1] : void 0;\n    this.objects = t2, i2 && (this.depth = e2, this.objects = this.constructor.groupObjects(this.objects, { asTree: i2, depth: this.depth + 1 }));\n  }\n  getObjects() {\n    return this.objects;\n  }\n  getDepth() {\n    return this.depth;\n  }\n  getCacheKey() {\n    const t2 = [\"objectGroup\"];\n    return Array.from(this.getObjects()).forEach((e2) => {\n      t2.push(e2.getCacheKey());\n    }), t2.join(\"/\");\n  }\n};\nvar Yt = class extends z {\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    super(...arguments), this.objects = {}, Array.from(t2).forEach((t3) => {\n      const e2 = JSON.stringify(t3);\n      null == this.objects[e2] && (this.objects[e2] = t3);\n    });\n  }\n  find(t2) {\n    const e2 = JSON.stringify(t2);\n    return this.objects[e2];\n  }\n};\nvar Qt = class {\n  constructor(t2) {\n    this.reset(t2);\n  }\n  add(t2) {\n    const e2 = Zt(t2);\n    this.elements[e2] = t2;\n  }\n  remove(t2) {\n    const e2 = Zt(t2), i2 = this.elements[e2];\n    if (i2)\n      return delete this.elements[e2], i2;\n  }\n  reset() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    return this.elements = {}, Array.from(t2).forEach((t3) => {\n      this.add(t3);\n    }), t2;\n  }\n};\nvar Zt = (t2) => t2.dataset.trixStoreKey;\nvar te = class extends z {\n  isPerforming() {\n    return true === this.performing;\n  }\n  hasPerformed() {\n    return true === this.performed;\n  }\n  hasSucceeded() {\n    return this.performed && this.succeeded;\n  }\n  hasFailed() {\n    return this.performed && !this.succeeded;\n  }\n  getPromise() {\n    return this.promise || (this.promise = new Promise((t2, e2) => (this.performing = true, this.perform((i2, n2) => {\n      this.succeeded = i2, this.performing = false, this.performed = true, this.succeeded ? t2(n2) : e2(n2);\n    })))), this.promise;\n  }\n  perform(t2) {\n    return t2(false);\n  }\n  release() {\n    var t2, e2;\n    null === (t2 = this.promise) || void 0 === t2 || null === (e2 = t2.cancel) || void 0 === e2 || e2.call(t2), this.promise = null, this.performing = null, this.performed = null, this.succeeded = null;\n  }\n};\nte.proxyMethod(\"getPromise().then\"), te.proxyMethod(\"getPromise().catch\");\nvar ee = class extends z {\n  constructor(t2) {\n    let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    super(...arguments), this.object = t2, this.options = e2, this.childViews = [], this.rootView = this;\n  }\n  getNodes() {\n    return this.nodes || (this.nodes = this.createNodes()), this.nodes.map((t2) => t2.cloneNode(true));\n  }\n  invalidate() {\n    var t2;\n    return this.nodes = null, this.childViews = [], null === (t2 = this.parentView) || void 0 === t2 ? void 0 : t2.invalidate();\n  }\n  invalidateViewForObject(t2) {\n    var e2;\n    return null === (e2 = this.findViewForObject(t2)) || void 0 === e2 ? void 0 : e2.invalidate();\n  }\n  findOrCreateCachedChildView(t2, e2, i2) {\n    let n2 = this.getCachedViewForObject(e2);\n    return n2 ? this.recordChildView(n2) : (n2 = this.createChildView(...arguments), this.cacheViewForObject(n2, e2)), n2;\n  }\n  createChildView(t2, e2) {\n    let i2 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n    e2 instanceof Xt && (i2.viewClass = t2, t2 = ie);\n    const n2 = new t2(e2, i2);\n    return this.recordChildView(n2);\n  }\n  recordChildView(t2) {\n    return t2.parentView = this, t2.rootView = this.rootView, this.childViews.push(t2), t2;\n  }\n  getAllChildViews() {\n    let t2 = [];\n    return this.childViews.forEach((e2) => {\n      t2.push(e2), t2 = t2.concat(e2.getAllChildViews());\n    }), t2;\n  }\n  findElement() {\n    return this.findElementForObject(this.object);\n  }\n  findElementForObject(t2) {\n    const e2 = null == t2 ? void 0 : t2.id;\n    if (e2)\n      return this.rootView.element.querySelector(\"[data-trix-id='\".concat(e2, \"']\"));\n  }\n  findViewForObject(t2) {\n    for (const e2 of this.getAllChildViews())\n      if (e2.object === t2)\n        return e2;\n  }\n  getViewCache() {\n    return this.rootView !== this ? this.rootView.getViewCache() : this.isViewCachingEnabled() ? (this.viewCache || (this.viewCache = {}), this.viewCache) : void 0;\n  }\n  isViewCachingEnabled() {\n    return false !== this.shouldCacheViews;\n  }\n  enableViewCaching() {\n    this.shouldCacheViews = true;\n  }\n  disableViewCaching() {\n    this.shouldCacheViews = false;\n  }\n  getCachedViewForObject(t2) {\n    var e2;\n    return null === (e2 = this.getViewCache()) || void 0 === e2 ? void 0 : e2[t2.getCacheKey()];\n  }\n  cacheViewForObject(t2, e2) {\n    const i2 = this.getViewCache();\n    i2 && (i2[e2.getCacheKey()] = t2);\n  }\n  garbageCollectCachedViews() {\n    const t2 = this.getViewCache();\n    if (t2) {\n      const e2 = this.getAllChildViews().concat(this).map((t3) => t3.object.getCacheKey());\n      for (const i2 in t2)\n        e2.includes(i2) || delete t2[i2];\n    }\n  }\n};\nvar ie = class extends ee {\n  constructor() {\n    super(...arguments), this.objectGroup = this.object, this.viewClass = this.options.viewClass, delete this.options.viewClass;\n  }\n  getChildViews() {\n    return this.childViews.length || Array.from(this.objectGroup.getObjects()).forEach((t2) => {\n      this.findOrCreateCachedChildView(this.viewClass, t2, this.options);\n    }), this.childViews;\n  }\n  createNodes() {\n    const t2 = this.createContainerElement();\n    return this.getChildViews().forEach((e2) => {\n      Array.from(e2.getNodes()).forEach((e3) => {\n        t2.appendChild(e3);\n      });\n    }), [t2];\n  }\n  createContainerElement() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.objectGroup.getDepth();\n    return this.getChildViews()[0].createContainerElement(t2);\n  }\n};\nvar { css: ne } = V;\nvar re = class extends ee {\n  constructor() {\n    super(...arguments), this.attachment = this.object, this.attachment.uploadProgressDelegate = this, this.attachmentPiece = this.options.piece;\n  }\n  createContentNodes() {\n    return [];\n  }\n  createNodes() {\n    let t2;\n    const e2 = t2 = k({ tagName: \"figure\", className: this.getClassName(), data: this.getData(), editable: false }), i2 = this.getHref();\n    return i2 && (t2 = k({ tagName: \"a\", editable: false, attributes: { href: i2, tabindex: -1 } }), e2.appendChild(t2)), this.attachment.hasContent() ? t2.innerHTML = this.attachment.getContent() : this.createContentNodes().forEach((e3) => {\n      t2.appendChild(e3);\n    }), t2.appendChild(this.createCaptionElement()), this.attachment.isPending() && (this.progressElement = k({ tagName: \"progress\", attributes: { class: ne.attachmentProgress, value: this.attachment.getUploadProgress(), max: 100 }, data: { trixMutable: true, trixStoreKey: [\"progressElement\", this.attachment.id].join(\"/\") } }), e2.appendChild(this.progressElement)), [oe(\"left\"), e2, oe(\"right\")];\n  }\n  createCaptionElement() {\n    const t2 = k({ tagName: \"figcaption\", className: ne.attachmentCaption }), e2 = this.attachmentPiece.getCaption();\n    if (e2)\n      t2.classList.add(\"\".concat(ne.attachmentCaption, \"--edited\")), t2.textContent = e2;\n    else {\n      let e3, i2;\n      const n2 = this.getCaptionConfig();\n      if (n2.name && (e3 = this.attachment.getFilename()), n2.size && (i2 = this.attachment.getFormattedFilesize()), e3) {\n        const i3 = k({ tagName: \"span\", className: ne.attachmentName, textContent: e3 });\n        t2.appendChild(i3);\n      }\n      if (i2) {\n        e3 && t2.appendChild(document.createTextNode(\" \"));\n        const n3 = k({ tagName: \"span\", className: ne.attachmentSize, textContent: i2 });\n        t2.appendChild(n3);\n      }\n    }\n    return t2;\n  }\n  getClassName() {\n    const t2 = [ne.attachment, \"\".concat(ne.attachment, \"--\").concat(this.attachment.getType())], e2 = this.attachment.getExtension();\n    return e2 && t2.push(\"\".concat(ne.attachment, \"--\").concat(e2)), t2.join(\" \");\n  }\n  getData() {\n    const t2 = { trixAttachment: JSON.stringify(this.attachment), trixContentType: this.attachment.getContentType(), trixId: this.attachment.id }, { attributes: e2 } = this.attachmentPiece;\n    return e2.isEmpty() || (t2.trixAttributes = JSON.stringify(e2)), this.attachment.isPending() && (t2.trixSerialize = false), t2;\n  }\n  getHref() {\n    if (!se(this.attachment.getContent(), \"a\"))\n      return this.attachment.getHref();\n  }\n  getCaptionConfig() {\n    var t2;\n    const e2 = this.attachment.getType(), n2 = Et(null === (t2 = i[e2]) || void 0 === t2 ? void 0 : t2.caption);\n    return \"file\" === e2 && (n2.name = true), n2;\n  }\n  findProgressElement() {\n    var t2;\n    return null === (t2 = this.findElement()) || void 0 === t2 ? void 0 : t2.querySelector(\"progress\");\n  }\n  attachmentDidChangeUploadProgress() {\n    const t2 = this.attachment.getUploadProgress(), e2 = this.findProgressElement();\n    e2 && (e2.value = t2);\n  }\n};\nvar oe = (t2) => k({ tagName: \"span\", textContent: u, data: { trixCursorTarget: t2, trixSerialize: false } });\nvar se = function(t2, e2) {\n  const i2 = k(\"div\");\n  return i2.innerHTML = t2 || \"\", i2.querySelector(e2);\n};\nvar ae = class extends re {\n  constructor() {\n    super(...arguments), this.attachment.previewDelegate = this;\n  }\n  createContentNodes() {\n    return this.image = k({ tagName: \"img\", attributes: { src: \"\" }, data: { trixMutable: true } }), this.refresh(this.image), [this.image];\n  }\n  createCaptionElement() {\n    const t2 = super.createCaptionElement(...arguments);\n    return t2.textContent || t2.setAttribute(\"data-trix-placeholder\", l.captionPlaceholder), t2;\n  }\n  refresh(t2) {\n    var e2;\n    t2 || (t2 = null === (e2 = this.findElement()) || void 0 === e2 ? void 0 : e2.querySelector(\"img\"));\n    if (t2)\n      return this.updateAttributesForImage(t2);\n  }\n  updateAttributesForImage(t2) {\n    const e2 = this.attachment.getURL(), i2 = this.attachment.getPreviewURL();\n    if (t2.src = i2 || e2, i2 === e2)\n      t2.removeAttribute(\"data-trix-serialized-attributes\");\n    else {\n      const i3 = JSON.stringify({ src: e2 });\n      t2.setAttribute(\"data-trix-serialized-attributes\", i3);\n    }\n    const n2 = this.attachment.getWidth(), r2 = this.attachment.getHeight();\n    null != n2 && (t2.width = n2), null != r2 && (t2.height = r2);\n    const o2 = [\"imageElement\", this.attachment.id, t2.src, t2.width, t2.height].join(\"/\");\n    t2.dataset.trixStoreKey = o2;\n  }\n  attachmentDidChangeAttributes() {\n    return this.refresh(this.image), this.refresh();\n  }\n};\nvar le = class extends ee {\n  constructor() {\n    super(...arguments), this.piece = this.object, this.attributes = this.piece.getAttributes(), this.textConfig = this.options.textConfig, this.context = this.options.context, this.piece.attachment ? this.attachment = this.piece.attachment : this.string = this.piece.toString();\n  }\n  createNodes() {\n    let t2 = this.attachment ? this.createAttachmentNodes() : this.createStringNodes();\n    const e2 = this.createElement();\n    if (e2) {\n      const i2 = function(t3) {\n        for (; null !== (e3 = t3) && void 0 !== e3 && e3.firstElementChild; ) {\n          var e3;\n          t3 = t3.firstElementChild;\n        }\n        return t3;\n      }(e2);\n      Array.from(t2).forEach((t3) => {\n        i2.appendChild(t3);\n      }), t2 = [e2];\n    }\n    return t2;\n  }\n  createAttachmentNodes() {\n    const t2 = this.attachment.isPreviewable() ? ae : re;\n    return this.createChildView(t2, this.piece.attachment, { piece: this.piece }).getNodes();\n  }\n  createStringNodes() {\n    var t2;\n    if (null !== (t2 = this.textConfig) && void 0 !== t2 && t2.plaintext)\n      return [document.createTextNode(this.string)];\n    {\n      const t3 = [], e2 = this.string.split(\"\\n\");\n      for (let i2 = 0; i2 < e2.length; i2++) {\n        const n2 = e2[i2];\n        if (i2 > 0) {\n          const e3 = k(\"br\");\n          t3.push(e3);\n        }\n        if (n2.length) {\n          const e3 = document.createTextNode(this.preserveSpaces(n2));\n          t3.push(e3);\n        }\n      }\n      return t3;\n    }\n  }\n  createElement() {\n    let t2, e2, i2;\n    const n2 = {};\n    for (e2 in this.attributes) {\n      i2 = this.attributes[e2];\n      const o2 = pt(e2);\n      if (o2) {\n        if (o2.tagName) {\n          var r2;\n          const e3 = k(o2.tagName);\n          r2 ? (r2.appendChild(e3), r2 = e3) : t2 = r2 = e3;\n        }\n        if (o2.styleProperty && (n2[o2.styleProperty] = i2), o2.style)\n          for (e2 in o2.style)\n            i2 = o2.style[e2], n2[e2] = i2;\n      }\n    }\n    if (Object.keys(n2).length)\n      for (e2 in t2 || (t2 = k(\"span\")), n2)\n        i2 = n2[e2], t2.style[e2] = i2;\n    return t2;\n  }\n  createContainerElement() {\n    for (const t2 in this.attributes) {\n      const e2 = this.attributes[t2], i2 = pt(t2);\n      if (i2 && i2.groupTagName) {\n        const n2 = {};\n        return n2[t2] = e2, k(i2.groupTagName, n2);\n      }\n    }\n  }\n  preserveSpaces(t2) {\n    return this.context.isLast && (t2 = t2.replace(/\\ $/, d)), t2 = t2.replace(/(\\S)\\ {3}(\\S)/g, \"$1 \".concat(d, \" $2\")).replace(/\\ {2}/g, \"\".concat(d, \" \")).replace(/\\ {2}/g, \" \".concat(d)), (this.context.isFirst || this.context.followsWhitespace) && (t2 = t2.replace(/^\\ /, d)), t2;\n  }\n};\nvar ce = class extends ee {\n  constructor() {\n    super(...arguments), this.text = this.object, this.textConfig = this.options.textConfig;\n  }\n  createNodes() {\n    const t2 = [], e2 = Xt.groupObjects(this.getPieces()), i2 = e2.length - 1;\n    for (let r2 = 0; r2 < e2.length; r2++) {\n      const o2 = e2[r2], s2 = {};\n      0 === r2 && (s2.isFirst = true), r2 === i2 && (s2.isLast = true), he(n2) && (s2.followsWhitespace = true);\n      const a2 = this.findOrCreateCachedChildView(le, o2, { textConfig: this.textConfig, context: s2 });\n      t2.push(...Array.from(a2.getNodes() || []));\n      var n2 = o2;\n    }\n    return t2;\n  }\n  getPieces() {\n    return Array.from(this.text.getPieces()).filter((t2) => !t2.hasAttribute(\"blockBreak\"));\n  }\n};\nvar he = (t2) => /\\s$/.test(null == t2 ? void 0 : t2.toString());\nvar { css: ue } = V;\nvar de = class extends ee {\n  constructor() {\n    super(...arguments), this.block = this.object, this.attributes = this.block.getAttributes();\n  }\n  createNodes() {\n    const t2 = [document.createComment(\"block\")];\n    if (this.block.isEmpty())\n      t2.push(k(\"br\"));\n    else {\n      var e2;\n      const i2 = null === (e2 = gt(this.block.getLastAttribute())) || void 0 === e2 ? void 0 : e2.text, n2 = this.findOrCreateCachedChildView(ce, this.block.text, { textConfig: i2 });\n      t2.push(...Array.from(n2.getNodes() || [])), this.shouldAddExtraNewlineElement() && t2.push(k(\"br\"));\n    }\n    if (this.attributes.length)\n      return t2;\n    {\n      let e3;\n      const { tagName: i2 } = n.default;\n      this.block.isRTL() && (e3 = { dir: \"rtl\" });\n      const r2 = k({ tagName: i2, attributes: e3 });\n      return t2.forEach((t3) => r2.appendChild(t3)), [r2];\n    }\n  }\n  createContainerElement(t2) {\n    let e2, i2;\n    const n2 = this.attributes[t2], { tagName: r2 } = gt(n2);\n    if (0 === t2 && this.block.isRTL() && (e2 = { dir: \"rtl\" }), \"attachmentGallery\" === n2) {\n      const t3 = this.block.getBlockBreakPosition();\n      i2 = \"\".concat(ue.attachmentGallery, \" \").concat(ue.attachmentGallery, \"--\").concat(t3);\n    }\n    return k({ tagName: r2, className: i2, attributes: e2 });\n  }\n  shouldAddExtraNewlineElement() {\n    return /\\n\\n$/.test(this.block.toString());\n  }\n};\nvar ge = class extends ee {\n  static render(t2) {\n    const e2 = k(\"div\"), i2 = new this(t2, { element: e2 });\n    return i2.render(), i2.sync(), e2;\n  }\n  constructor() {\n    super(...arguments), this.element = this.options.element, this.elementStore = new Qt(), this.setDocument(this.object);\n  }\n  setDocument(t2) {\n    t2.isEqualTo(this.document) || (this.document = this.object = t2);\n  }\n  render() {\n    if (this.childViews = [], this.shadowElement = k(\"div\"), !this.document.isEmpty()) {\n      const t2 = Xt.groupObjects(this.document.getBlocks(), { asTree: true });\n      Array.from(t2).forEach((t3) => {\n        const e2 = this.findOrCreateCachedChildView(de, t3);\n        Array.from(e2.getNodes()).map((t4) => this.shadowElement.appendChild(t4));\n      });\n    }\n  }\n  isSynced() {\n    return pe(this.shadowElement, this.element);\n  }\n  sync() {\n    const t2 = this.createDocumentFragmentForSync();\n    for (; this.element.lastChild; )\n      this.element.removeChild(this.element.lastChild);\n    return this.element.appendChild(t2), this.didSync();\n  }\n  didSync() {\n    return this.elementStore.reset(me(this.element)), St(() => this.garbageCollectCachedViews());\n  }\n  createDocumentFragmentForSync() {\n    const t2 = document.createDocumentFragment();\n    return Array.from(this.shadowElement.childNodes).forEach((e2) => {\n      t2.appendChild(e2.cloneNode(true));\n    }), Array.from(me(t2)).forEach((t3) => {\n      const e2 = this.elementStore.remove(t3);\n      e2 && t3.parentNode.replaceChild(e2, t3);\n    }), t2;\n  }\n};\nvar me = (t2) => t2.querySelectorAll(\"[data-trix-store-key]\");\nvar pe = (t2, e2) => fe(t2.innerHTML) === fe(e2.innerHTML);\nvar fe = (t2) => t2.replace(/&nbsp;/g, \" \");\nfunction be(t2) {\n  var e2, i2;\n  function n2(e3, i3) {\n    try {\n      var o2 = t2[e3](i3), s2 = o2.value, a2 = s2 instanceof ve;\n      Promise.resolve(a2 ? s2.v : s2).then(function(i4) {\n        if (a2) {\n          var l2 = \"return\" === e3 ? \"return\" : \"next\";\n          if (!s2.k || i4.done)\n            return n2(l2, i4);\n          i4 = t2[l2](i4).value;\n        }\n        r2(o2.done ? \"return\" : \"normal\", i4);\n      }, function(t3) {\n        n2(\"throw\", t3);\n      });\n    } catch (t3) {\n      r2(\"throw\", t3);\n    }\n  }\n  function r2(t3, r3) {\n    switch (t3) {\n      case \"return\":\n        e2.resolve({ value: r3, done: true });\n        break;\n      case \"throw\":\n        e2.reject(r3);\n        break;\n      default:\n        e2.resolve({ value: r3, done: false });\n    }\n    (e2 = e2.next) ? n2(e2.key, e2.arg) : i2 = null;\n  }\n  this._invoke = function(t3, r3) {\n    return new Promise(function(o2, s2) {\n      var a2 = { key: t3, arg: r3, resolve: o2, reject: s2, next: null };\n      i2 ? i2 = i2.next = a2 : (e2 = i2 = a2, n2(t3, r3));\n    });\n  }, \"function\" != typeof t2.return && (this.return = void 0);\n}\nfunction ve(t2, e2) {\n  this.v = t2, this.k = e2;\n}\nfunction Ae(t2, e2, i2) {\n  return (e2 = xe(e2)) in t2 ? Object.defineProperty(t2, e2, { value: i2, enumerable: true, configurable: true, writable: true }) : t2[e2] = i2, t2;\n}\nfunction xe(t2) {\n  var e2 = function(t3, e3) {\n    if (\"object\" != typeof t3 || null === t3)\n      return t3;\n    var i2 = t3[Symbol.toPrimitive];\n    if (void 0 !== i2) {\n      var n2 = i2.call(t3, e3 || \"default\");\n      if (\"object\" != typeof n2)\n        return n2;\n      throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n    }\n    return (\"string\" === e3 ? String : Number)(t3);\n  }(t2, \"string\");\n  return \"symbol\" == typeof e2 ? e2 : String(e2);\n}\nbe.prototype[\"function\" == typeof Symbol && Symbol.asyncIterator || \"@@asyncIterator\"] = function() {\n  return this;\n}, be.prototype.next = function(t2) {\n  return this._invoke(\"next\", t2);\n}, be.prototype.throw = function(t2) {\n  return this._invoke(\"throw\", t2);\n}, be.prototype.return = function(t2) {\n  return this._invoke(\"return\", t2);\n};\nvar ye = class extends nt {\n  static registerType(t2, e2) {\n    e2.type = t2, this.types[t2] = e2;\n  }\n  static fromJSON(t2) {\n    const e2 = this.types[t2.type];\n    if (e2)\n      return e2.fromJSON(t2);\n  }\n  constructor(t2) {\n    let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    super(...arguments), this.attributes = _t.box(e2);\n  }\n  copyWithAttributes(t2) {\n    return new this.constructor(this.getValue(), t2);\n  }\n  copyWithAdditionalAttributes(t2) {\n    return this.copyWithAttributes(this.attributes.merge(t2));\n  }\n  copyWithoutAttribute(t2) {\n    return this.copyWithAttributes(this.attributes.remove(t2));\n  }\n  copy() {\n    return this.copyWithAttributes(this.attributes);\n  }\n  getAttribute(t2) {\n    return this.attributes.get(t2);\n  }\n  getAttributesHash() {\n    return this.attributes;\n  }\n  getAttributes() {\n    return this.attributes.toObject();\n  }\n  hasAttribute(t2) {\n    return this.attributes.has(t2);\n  }\n  hasSameStringValueAsPiece(t2) {\n    return t2 && this.toString() === t2.toString();\n  }\n  hasSameAttributesAsPiece(t2) {\n    return t2 && (this.attributes === t2.attributes || this.attributes.isEqualTo(t2.attributes));\n  }\n  isBlockBreak() {\n    return false;\n  }\n  isEqualTo(t2) {\n    return super.isEqualTo(...arguments) || this.hasSameConstructorAs(t2) && this.hasSameStringValueAsPiece(t2) && this.hasSameAttributesAsPiece(t2);\n  }\n  isEmpty() {\n    return 0 === this.length;\n  }\n  isSerializable() {\n    return true;\n  }\n  toJSON() {\n    return { type: this.constructor.type, attributes: this.getAttributes() };\n  }\n  contentsForInspection() {\n    return { type: this.constructor.type, attributes: this.attributes.inspect() };\n  }\n  canBeGrouped() {\n    return this.hasAttribute(\"href\");\n  }\n  canBeGroupedWith(t2) {\n    return this.getAttribute(\"href\") === t2.getAttribute(\"href\");\n  }\n  getLength() {\n    return this.length;\n  }\n  canBeConsolidatedWith(t2) {\n    return false;\n  }\n};\nAe(ye, \"types\", {});\nvar Ce = class extends te {\n  constructor(t2) {\n    super(...arguments), this.url = t2;\n  }\n  perform(t2) {\n    const e2 = new Image();\n    e2.onload = () => (e2.width = this.width = e2.naturalWidth, e2.height = this.height = e2.naturalHeight, t2(true, e2)), e2.onerror = () => t2(false), e2.src = this.url;\n  }\n};\nvar Re = class _Re extends nt {\n  static attachmentForFile(t2) {\n    const e2 = new this(this.attributesForFile(t2));\n    return e2.setFile(t2), e2;\n  }\n  static attributesForFile(t2) {\n    return new _t({ filename: t2.name, filesize: t2.size, contentType: t2.type });\n  }\n  static fromJSON(t2) {\n    return new this(t2);\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    super(t2), this.releaseFile = this.releaseFile.bind(this), this.attributes = _t.box(t2), this.didChangeAttributes();\n  }\n  getAttribute(t2) {\n    return this.attributes.get(t2);\n  }\n  hasAttribute(t2) {\n    return this.attributes.has(t2);\n  }\n  getAttributes() {\n    return this.attributes.toObject();\n  }\n  setAttributes() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    const e2 = this.attributes.merge(t2);\n    var i2, n2, r2, o2;\n    if (!this.attributes.isEqualTo(e2))\n      return this.attributes = e2, this.didChangeAttributes(), null === (i2 = this.previewDelegate) || void 0 === i2 || null === (n2 = i2.attachmentDidChangeAttributes) || void 0 === n2 || n2.call(i2, this), null === (r2 = this.delegate) || void 0 === r2 || null === (o2 = r2.attachmentDidChangeAttributes) || void 0 === o2 ? void 0 : o2.call(r2, this);\n  }\n  didChangeAttributes() {\n    if (this.isPreviewable())\n      return this.preloadURL();\n  }\n  isPending() {\n    return null != this.file && !(this.getURL() || this.getHref());\n  }\n  isPreviewable() {\n    return this.attributes.has(\"previewable\") ? this.attributes.get(\"previewable\") : _Re.previewablePattern.test(this.getContentType());\n  }\n  getType() {\n    return this.hasContent() ? \"content\" : this.isPreviewable() ? \"preview\" : \"file\";\n  }\n  getURL() {\n    return this.attributes.get(\"url\");\n  }\n  getHref() {\n    return this.attributes.get(\"href\");\n  }\n  getFilename() {\n    return this.attributes.get(\"filename\") || \"\";\n  }\n  getFilesize() {\n    return this.attributes.get(\"filesize\");\n  }\n  getFormattedFilesize() {\n    const t2 = this.attributes.get(\"filesize\");\n    return \"number\" == typeof t2 ? h.formatter(t2) : \"\";\n  }\n  getExtension() {\n    var t2;\n    return null === (t2 = this.getFilename().match(/\\.(\\w+)$/)) || void 0 === t2 ? void 0 : t2[1].toLowerCase();\n  }\n  getContentType() {\n    return this.attributes.get(\"contentType\");\n  }\n  hasContent() {\n    return this.attributes.has(\"content\");\n  }\n  getContent() {\n    return this.attributes.get(\"content\");\n  }\n  getWidth() {\n    return this.attributes.get(\"width\");\n  }\n  getHeight() {\n    return this.attributes.get(\"height\");\n  }\n  getFile() {\n    return this.file;\n  }\n  setFile(t2) {\n    if (this.file = t2, this.isPreviewable())\n      return this.preloadFile();\n  }\n  releaseFile() {\n    this.releasePreloadedFile(), this.file = null;\n  }\n  getUploadProgress() {\n    return null != this.uploadProgress ? this.uploadProgress : 0;\n  }\n  setUploadProgress(t2) {\n    var e2, i2;\n    if (this.uploadProgress !== t2)\n      return this.uploadProgress = t2, null === (e2 = this.uploadProgressDelegate) || void 0 === e2 || null === (i2 = e2.attachmentDidChangeUploadProgress) || void 0 === i2 ? void 0 : i2.call(e2, this);\n  }\n  toJSON() {\n    return this.getAttributes();\n  }\n  getCacheKey() {\n    return [super.getCacheKey(...arguments), this.attributes.getCacheKey(), this.getPreviewURL()].join(\"/\");\n  }\n  getPreviewURL() {\n    return this.previewURL || this.preloadingURL;\n  }\n  setPreviewURL(t2) {\n    var e2, i2, n2, r2;\n    if (t2 !== this.getPreviewURL())\n      return this.previewURL = t2, null === (e2 = this.previewDelegate) || void 0 === e2 || null === (i2 = e2.attachmentDidChangeAttributes) || void 0 === i2 || i2.call(e2, this), null === (n2 = this.delegate) || void 0 === n2 || null === (r2 = n2.attachmentDidChangePreviewURL) || void 0 === r2 ? void 0 : r2.call(n2, this);\n  }\n  preloadURL() {\n    return this.preload(this.getURL(), this.releaseFile);\n  }\n  preloadFile() {\n    if (this.file)\n      return this.fileObjectURL = URL.createObjectURL(this.file), this.preload(this.fileObjectURL);\n  }\n  releasePreloadedFile() {\n    this.fileObjectURL && (URL.revokeObjectURL(this.fileObjectURL), this.fileObjectURL = null);\n  }\n  preload(t2, e2) {\n    if (t2 && t2 !== this.getPreviewURL()) {\n      this.preloadingURL = t2;\n      return new Ce(t2).then((i2) => {\n        let { width: n2, height: r2 } = i2;\n        return this.getWidth() && this.getHeight() || this.setAttributes({ width: n2, height: r2 }), this.preloadingURL = null, this.setPreviewURL(t2), null == e2 ? void 0 : e2();\n      }).catch(() => (this.preloadingURL = null, null == e2 ? void 0 : e2()));\n    }\n  }\n};\nAe(Re, \"previewablePattern\", /^image(\\/(gif|png|webp|jpe?g)|$)/);\nvar Se = class _Se extends ye {\n  static fromJSON(t2) {\n    return new this(Re.fromJSON(t2.attachment), t2.attributes);\n  }\n  constructor(t2) {\n    super(...arguments), this.attachment = t2, this.length = 1, this.ensureAttachmentExclusivelyHasAttribute(\"href\"), this.attachment.hasContent() || this.removeProhibitedAttributes();\n  }\n  ensureAttachmentExclusivelyHasAttribute(t2) {\n    this.hasAttribute(t2) && (this.attachment.hasAttribute(t2) || this.attachment.setAttributes(this.attributes.slice([t2])), this.attributes = this.attributes.remove(t2));\n  }\n  removeProhibitedAttributes() {\n    const t2 = this.attributes.slice(_Se.permittedAttributes);\n    t2.isEqualTo(this.attributes) || (this.attributes = t2);\n  }\n  getValue() {\n    return this.attachment;\n  }\n  isSerializable() {\n    return !this.attachment.isPending();\n  }\n  getCaption() {\n    return this.attributes.get(\"caption\") || \"\";\n  }\n  isEqualTo(t2) {\n    var e2;\n    return super.isEqualTo(t2) && this.attachment.id === (null == t2 || null === (e2 = t2.attachment) || void 0 === e2 ? void 0 : e2.id);\n  }\n  toString() {\n    return \"\";\n  }\n  toJSON() {\n    const t2 = super.toJSON(...arguments);\n    return t2.attachment = this.attachment, t2;\n  }\n  getCacheKey() {\n    return [super.getCacheKey(...arguments), this.attachment.getCacheKey()].join(\"/\");\n  }\n  toConsole() {\n    return JSON.stringify(this.toString());\n  }\n};\nAe(Se, \"permittedAttributes\", [\"caption\", \"presentation\"]), ye.registerType(\"attachment\", Se);\nvar Ee = class extends ye {\n  static fromJSON(t2) {\n    return new this(t2.string, t2.attributes);\n  }\n  constructor(t2) {\n    super(...arguments), this.string = ((t3) => t3.replace(/\\r\\n?/g, \"\\n\"))(t2), this.length = this.string.length;\n  }\n  getValue() {\n    return this.string;\n  }\n  toString() {\n    return this.string.toString();\n  }\n  isBlockBreak() {\n    return \"\\n\" === this.toString() && true === this.getAttribute(\"blockBreak\");\n  }\n  toJSON() {\n    const t2 = super.toJSON(...arguments);\n    return t2.string = this.string, t2;\n  }\n  canBeConsolidatedWith(t2) {\n    return t2 && this.hasSameConstructorAs(t2) && this.hasSameAttributesAsPiece(t2);\n  }\n  consolidateWith(t2) {\n    return new this.constructor(this.toString() + t2.toString(), this.attributes);\n  }\n  splitAtOffset(t2) {\n    let e2, i2;\n    return 0 === t2 ? (e2 = null, i2 = this) : t2 === this.length ? (e2 = this, i2 = null) : (e2 = new this.constructor(this.string.slice(0, t2), this.attributes), i2 = new this.constructor(this.string.slice(t2), this.attributes)), [e2, i2];\n  }\n  toConsole() {\n    let { string: t2 } = this;\n    return t2.length > 15 && (t2 = t2.slice(0, 14) + \"…\"), JSON.stringify(t2.toString());\n  }\n};\nye.registerType(\"string\", Ee);\nvar ke = class extends nt {\n  static box(t2) {\n    return t2 instanceof this ? t2 : new this(t2);\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    super(...arguments), this.objects = t2.slice(0), this.length = this.objects.length;\n  }\n  indexOf(t2) {\n    return this.objects.indexOf(t2);\n  }\n  splice() {\n    for (var t2 = arguments.length, e2 = new Array(t2), i2 = 0; i2 < t2; i2++)\n      e2[i2] = arguments[i2];\n    return new this.constructor(ot(this.objects, ...e2));\n  }\n  eachObject(t2) {\n    return this.objects.map((e2, i2) => t2(e2, i2));\n  }\n  insertObjectAtIndex(t2, e2) {\n    return this.splice(e2, 0, t2);\n  }\n  insertSplittableListAtIndex(t2, e2) {\n    return this.splice(e2, 0, ...t2.objects);\n  }\n  insertSplittableListAtPosition(t2, e2) {\n    const [i2, n2] = this.splitObjectAtPosition(e2);\n    return new this.constructor(i2).insertSplittableListAtIndex(t2, n2);\n  }\n  editObjectAtIndex(t2, e2) {\n    return this.replaceObjectAtIndex(e2(this.objects[t2]), t2);\n  }\n  replaceObjectAtIndex(t2, e2) {\n    return this.splice(e2, 1, t2);\n  }\n  removeObjectAtIndex(t2) {\n    return this.splice(t2, 1);\n  }\n  getObjectAtIndex(t2) {\n    return this.objects[t2];\n  }\n  getSplittableListInRange(t2) {\n    const [e2, i2, n2] = this.splitObjectsAtRange(t2);\n    return new this.constructor(e2.slice(i2, n2 + 1));\n  }\n  selectSplittableList(t2) {\n    const e2 = this.objects.filter((e3) => t2(e3));\n    return new this.constructor(e2);\n  }\n  removeObjectsInRange(t2) {\n    const [e2, i2, n2] = this.splitObjectsAtRange(t2);\n    return new this.constructor(e2).splice(i2, n2 - i2 + 1);\n  }\n  transformObjectsInRange(t2, e2) {\n    const [i2, n2, r2] = this.splitObjectsAtRange(t2), o2 = i2.map((t3, i3) => n2 <= i3 && i3 <= r2 ? e2(t3) : t3);\n    return new this.constructor(o2);\n  }\n  splitObjectsAtRange(t2) {\n    let e2, [i2, n2, r2] = this.splitObjectAtPosition(De(t2));\n    return [i2, e2] = new this.constructor(i2).splitObjectAtPosition(we(t2) + r2), [i2, n2, e2 - 1];\n  }\n  getObjectAtPosition(t2) {\n    const { index: e2 } = this.findIndexAndOffsetAtPosition(t2);\n    return this.objects[e2];\n  }\n  splitObjectAtPosition(t2) {\n    let e2, i2;\n    const { index: n2, offset: r2 } = this.findIndexAndOffsetAtPosition(t2), o2 = this.objects.slice(0);\n    if (null != n2)\n      if (0 === r2)\n        e2 = n2, i2 = 0;\n      else {\n        const t3 = this.getObjectAtIndex(n2), [s2, a2] = t3.splitAtOffset(r2);\n        o2.splice(n2, 1, s2, a2), e2 = n2 + 1, i2 = s2.getLength() - r2;\n      }\n    else\n      e2 = o2.length, i2 = 0;\n    return [o2, e2, i2];\n  }\n  consolidate() {\n    const t2 = [];\n    let e2 = this.objects[0];\n    return this.objects.slice(1).forEach((i2) => {\n      var n2, r2;\n      null !== (n2 = (r2 = e2).canBeConsolidatedWith) && void 0 !== n2 && n2.call(r2, i2) ? e2 = e2.consolidateWith(i2) : (t2.push(e2), e2 = i2);\n    }), e2 && t2.push(e2), new this.constructor(t2);\n  }\n  consolidateFromIndexToIndex(t2, e2) {\n    const i2 = this.objects.slice(0).slice(t2, e2 + 1), n2 = new this.constructor(i2).consolidate().toArray();\n    return this.splice(t2, i2.length, ...n2);\n  }\n  findIndexAndOffsetAtPosition(t2) {\n    let e2, i2 = 0;\n    for (e2 = 0; e2 < this.objects.length; e2++) {\n      const n2 = i2 + this.objects[e2].getLength();\n      if (i2 <= t2 && t2 < n2)\n        return { index: e2, offset: t2 - i2 };\n      i2 = n2;\n    }\n    return { index: null, offset: null };\n  }\n  findPositionAtIndexAndOffset(t2, e2) {\n    let i2 = 0;\n    for (let n2 = 0; n2 < this.objects.length; n2++) {\n      const r2 = this.objects[n2];\n      if (n2 < t2)\n        i2 += r2.getLength();\n      else if (n2 === t2) {\n        i2 += e2;\n        break;\n      }\n    }\n    return i2;\n  }\n  getEndPosition() {\n    return null == this.endPosition && (this.endPosition = 0, this.objects.forEach((t2) => this.endPosition += t2.getLength())), this.endPosition;\n  }\n  toString() {\n    return this.objects.join(\"\");\n  }\n  toArray() {\n    return this.objects.slice(0);\n  }\n  toJSON() {\n    return this.toArray();\n  }\n  isEqualTo(t2) {\n    return super.isEqualTo(...arguments) || Le(this.objects, null == t2 ? void 0 : t2.objects);\n  }\n  contentsForInspection() {\n    return { objects: \"[\".concat(this.objects.map((t2) => t2.inspect()).join(\", \"), \"]\") };\n  }\n};\nvar Le = function(t2) {\n  let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n  if (t2.length !== e2.length)\n    return false;\n  let i2 = true;\n  for (let n2 = 0; n2 < t2.length; n2++) {\n    const r2 = t2[n2];\n    i2 && !r2.isEqualTo(e2[n2]) && (i2 = false);\n  }\n  return i2;\n};\nvar De = (t2) => t2[0];\nvar we = (t2) => t2[1];\nvar Te = class extends nt {\n  static textForAttachmentWithAttributes(t2, e2) {\n    return new this([new Se(t2, e2)]);\n  }\n  static textForStringWithAttributes(t2, e2) {\n    return new this([new Ee(t2, e2)]);\n  }\n  static fromJSON(t2) {\n    return new this(Array.from(t2).map((t3) => ye.fromJSON(t3)));\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    super(...arguments);\n    const e2 = t2.filter((t3) => !t3.isEmpty());\n    this.pieceList = new ke(e2);\n  }\n  copy() {\n    return this.copyWithPieceList(this.pieceList);\n  }\n  copyWithPieceList(t2) {\n    return new this.constructor(t2.consolidate().toArray());\n  }\n  copyUsingObjectMap(t2) {\n    const e2 = this.getPieces().map((e3) => t2.find(e3) || e3);\n    return new this.constructor(e2);\n  }\n  appendText(t2) {\n    return this.insertTextAtPosition(t2, this.getLength());\n  }\n  insertTextAtPosition(t2, e2) {\n    return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t2.pieceList, e2));\n  }\n  removeTextAtRange(t2) {\n    return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t2));\n  }\n  replaceTextAtRange(t2, e2) {\n    return this.removeTextAtRange(e2).insertTextAtPosition(t2, e2[0]);\n  }\n  moveTextFromRangeToPosition(t2, e2) {\n    if (t2[0] <= e2 && e2 <= t2[1])\n      return;\n    const i2 = this.getTextAtRange(t2), n2 = i2.getLength();\n    return t2[0] < e2 && (e2 -= n2), this.removeTextAtRange(t2).insertTextAtPosition(i2, e2);\n  }\n  addAttributeAtRange(t2, e2, i2) {\n    const n2 = {};\n    return n2[t2] = e2, this.addAttributesAtRange(n2, i2);\n  }\n  addAttributesAtRange(t2, e2) {\n    return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e2, (e3) => e3.copyWithAdditionalAttributes(t2)));\n  }\n  removeAttributeAtRange(t2, e2) {\n    return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e2, (e3) => e3.copyWithoutAttribute(t2)));\n  }\n  setAttributesAtRange(t2, e2) {\n    return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e2, (e3) => e3.copyWithAttributes(t2)));\n  }\n  getAttributesAtPosition(t2) {\n    var e2;\n    return (null === (e2 = this.pieceList.getObjectAtPosition(t2)) || void 0 === e2 ? void 0 : e2.getAttributes()) || {};\n  }\n  getCommonAttributes() {\n    const t2 = Array.from(this.pieceList.toArray()).map((t3) => t3.getAttributes());\n    return _t.fromCommonAttributesOfObjects(t2).toObject();\n  }\n  getCommonAttributesAtRange(t2) {\n    return this.getTextAtRange(t2).getCommonAttributes() || {};\n  }\n  getExpandedRangeForAttributeAtOffset(t2, e2) {\n    let i2, n2 = i2 = e2;\n    const r2 = this.getLength();\n    for (; n2 > 0 && this.getCommonAttributesAtRange([n2 - 1, i2])[t2]; )\n      n2--;\n    for (; i2 < r2 && this.getCommonAttributesAtRange([e2, i2 + 1])[t2]; )\n      i2++;\n    return [n2, i2];\n  }\n  getTextAtRange(t2) {\n    return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t2));\n  }\n  getStringAtRange(t2) {\n    return this.pieceList.getSplittableListInRange(t2).toString();\n  }\n  getStringAtPosition(t2) {\n    return this.getStringAtRange([t2, t2 + 1]);\n  }\n  startsWithString(t2) {\n    return this.getStringAtRange([0, t2.length]) === t2;\n  }\n  endsWithString(t2) {\n    const e2 = this.getLength();\n    return this.getStringAtRange([e2 - t2.length, e2]) === t2;\n  }\n  getAttachmentPieces() {\n    return this.pieceList.toArray().filter((t2) => !!t2.attachment);\n  }\n  getAttachments() {\n    return this.getAttachmentPieces().map((t2) => t2.attachment);\n  }\n  getAttachmentAndPositionById(t2) {\n    let e2 = 0;\n    for (const n2 of this.pieceList.toArray()) {\n      var i2;\n      if ((null === (i2 = n2.attachment) || void 0 === i2 ? void 0 : i2.id) === t2)\n        return { attachment: n2.attachment, position: e2 };\n      e2 += n2.length;\n    }\n    return { attachment: null, position: null };\n  }\n  getAttachmentById(t2) {\n    const { attachment: e2 } = this.getAttachmentAndPositionById(t2);\n    return e2;\n  }\n  getRangeOfAttachment(t2) {\n    const e2 = this.getAttachmentAndPositionById(t2.id), i2 = e2.position;\n    if (t2 = e2.attachment)\n      return [i2, i2 + 1];\n  }\n  updateAttributesForAttachment(t2, e2) {\n    const i2 = this.getRangeOfAttachment(e2);\n    return i2 ? this.addAttributesAtRange(t2, i2) : this;\n  }\n  getLength() {\n    return this.pieceList.getEndPosition();\n  }\n  isEmpty() {\n    return 0 === this.getLength();\n  }\n  isEqualTo(t2) {\n    var e2;\n    return super.isEqualTo(t2) || (null == t2 || null === (e2 = t2.pieceList) || void 0 === e2 ? void 0 : e2.isEqualTo(this.pieceList));\n  }\n  isBlockBreak() {\n    return 1 === this.getLength() && this.pieceList.getObjectAtIndex(0).isBlockBreak();\n  }\n  eachPiece(t2) {\n    return this.pieceList.eachObject(t2);\n  }\n  getPieces() {\n    return this.pieceList.toArray();\n  }\n  getPieceAtPosition(t2) {\n    return this.pieceList.getObjectAtPosition(t2);\n  }\n  contentsForInspection() {\n    return { pieceList: this.pieceList.inspect() };\n  }\n  toSerializableText() {\n    const t2 = this.pieceList.selectSplittableList((t3) => t3.isSerializable());\n    return this.copyWithPieceList(t2);\n  }\n  toString() {\n    return this.pieceList.toString();\n  }\n  toJSON() {\n    return this.pieceList.toJSON();\n  }\n  toConsole() {\n    return JSON.stringify(this.pieceList.toArray().map((t2) => JSON.parse(t2.toConsole())));\n  }\n  getDirection() {\n    return at(this.toString());\n  }\n  isRTL() {\n    return \"rtl\" === this.getDirection();\n  }\n};\nvar Be = class _Be extends nt {\n  static fromJSON(t2) {\n    return new this(Te.fromJSON(t2.text), t2.attributes);\n  }\n  constructor(t2, e2) {\n    super(...arguments), this.text = Fe(t2 || new Te()), this.attributes = e2 || [];\n  }\n  isEmpty() {\n    return this.text.isBlockBreak();\n  }\n  isEqualTo(t2) {\n    return !!super.isEqualTo(t2) || this.text.isEqualTo(null == t2 ? void 0 : t2.text) && rt(this.attributes, null == t2 ? void 0 : t2.attributes);\n  }\n  copyWithText(t2) {\n    return new _Be(t2, this.attributes);\n  }\n  copyWithoutText() {\n    return this.copyWithText(null);\n  }\n  copyWithAttributes(t2) {\n    return new _Be(this.text, t2);\n  }\n  copyWithoutAttributes() {\n    return this.copyWithAttributes(null);\n  }\n  copyUsingObjectMap(t2) {\n    const e2 = t2.find(this.text);\n    return e2 ? this.copyWithText(e2) : this.copyWithText(this.text.copyUsingObjectMap(t2));\n  }\n  addAttribute(t2) {\n    const e2 = this.attributes.concat(je(t2));\n    return this.copyWithAttributes(e2);\n  }\n  removeAttribute(t2) {\n    const { listAttribute: e2 } = gt(t2), i2 = Ue(Ue(this.attributes, t2), e2);\n    return this.copyWithAttributes(i2);\n  }\n  removeLastAttribute() {\n    return this.removeAttribute(this.getLastAttribute());\n  }\n  getLastAttribute() {\n    return We(this.attributes);\n  }\n  getAttributes() {\n    return this.attributes.slice(0);\n  }\n  getAttributeLevel() {\n    return this.attributes.length;\n  }\n  getAttributeAtLevel(t2) {\n    return this.attributes[t2 - 1];\n  }\n  hasAttribute(t2) {\n    return this.attributes.includes(t2);\n  }\n  hasAttributes() {\n    return this.getAttributeLevel() > 0;\n  }\n  getLastNestableAttribute() {\n    return We(this.getNestableAttributes());\n  }\n  getNestableAttributes() {\n    return this.attributes.filter((t2) => gt(t2).nestable);\n  }\n  getNestingLevel() {\n    return this.getNestableAttributes().length;\n  }\n  decreaseNestingLevel() {\n    const t2 = this.getLastNestableAttribute();\n    return t2 ? this.removeAttribute(t2) : this;\n  }\n  increaseNestingLevel() {\n    const t2 = this.getLastNestableAttribute();\n    if (t2) {\n      const e2 = this.attributes.lastIndexOf(t2), i2 = ot(this.attributes, e2 + 1, 0, ...je(t2));\n      return this.copyWithAttributes(i2);\n    }\n    return this;\n  }\n  getListItemAttributes() {\n    return this.attributes.filter((t2) => gt(t2).listAttribute);\n  }\n  isListItem() {\n    var t2;\n    return null === (t2 = gt(this.getLastAttribute())) || void 0 === t2 ? void 0 : t2.listAttribute;\n  }\n  isTerminalBlock() {\n    var t2;\n    return null === (t2 = gt(this.getLastAttribute())) || void 0 === t2 ? void 0 : t2.terminal;\n  }\n  breaksOnReturn() {\n    var t2;\n    return null === (t2 = gt(this.getLastAttribute())) || void 0 === t2 ? void 0 : t2.breakOnReturn;\n  }\n  findLineBreakInDirectionFromPosition(t2, e2) {\n    const i2 = this.toString();\n    let n2;\n    switch (t2) {\n      case \"forward\":\n        n2 = i2.indexOf(\"\\n\", e2);\n        break;\n      case \"backward\":\n        n2 = i2.slice(0, e2).lastIndexOf(\"\\n\");\n    }\n    if (-1 !== n2)\n      return n2;\n  }\n  contentsForInspection() {\n    return { text: this.text.inspect(), attributes: this.attributes };\n  }\n  toString() {\n    return this.text.toString();\n  }\n  toJSON() {\n    return { text: this.text, attributes: this.attributes };\n  }\n  getDirection() {\n    return this.text.getDirection();\n  }\n  isRTL() {\n    return this.text.isRTL();\n  }\n  getLength() {\n    return this.text.getLength();\n  }\n  canBeConsolidatedWith(t2) {\n    return !this.hasAttributes() && !t2.hasAttributes() && this.getDirection() === t2.getDirection();\n  }\n  consolidateWith(t2) {\n    const e2 = Te.textForStringWithAttributes(\"\\n\"), i2 = this.getTextWithoutBlockBreak().appendText(e2);\n    return this.copyWithText(i2.appendText(t2.text));\n  }\n  splitAtOffset(t2) {\n    let e2, i2;\n    return 0 === t2 ? (e2 = null, i2 = this) : t2 === this.getLength() ? (e2 = this, i2 = null) : (e2 = this.copyWithText(this.text.getTextAtRange([0, t2])), i2 = this.copyWithText(this.text.getTextAtRange([t2, this.getLength()]))), [e2, i2];\n  }\n  getBlockBreakPosition() {\n    return this.text.getLength() - 1;\n  }\n  getTextWithoutBlockBreak() {\n    return Oe(this.text) ? this.text.getTextAtRange([0, this.getBlockBreakPosition()]) : this.text.copy();\n  }\n  canBeGrouped(t2) {\n    return this.attributes[t2];\n  }\n  canBeGroupedWith(t2, e2) {\n    const i2 = t2.getAttributes(), r2 = i2[e2], o2 = this.attributes[e2];\n    return o2 === r2 && !(false === gt(o2).group && !(() => {\n      if (!ut) {\n        ut = [];\n        for (const t3 in n) {\n          const { listAttribute: e3 } = n[t3];\n          null != e3 && ut.push(e3);\n        }\n      }\n      return ut;\n    })().includes(i2[e2 + 1])) && (this.getDirection() === t2.getDirection() || t2.isEmpty());\n  }\n};\nvar Fe = function(t2) {\n  return t2 = Ie(t2), t2 = Ne(t2);\n};\nvar Ie = function(t2) {\n  let e2 = false;\n  const i2 = t2.getPieces();\n  let n2 = i2.slice(0, i2.length - 1);\n  const r2 = i2[i2.length - 1];\n  return r2 ? (n2 = n2.map((t3) => t3.isBlockBreak() ? (e2 = true, Me(t3)) : t3), e2 ? new Te([...n2, r2]) : t2) : t2;\n};\nvar Pe = Te.textForStringWithAttributes(\"\\n\", { blockBreak: true });\nvar Ne = function(t2) {\n  return Oe(t2) ? t2 : t2.appendText(Pe);\n};\nvar Oe = function(t2) {\n  const e2 = t2.getLength();\n  if (0 === e2)\n    return false;\n  return t2.getTextAtRange([e2 - 1, e2]).isBlockBreak();\n};\nvar Me = (t2) => t2.copyWithoutAttribute(\"blockBreak\");\nvar je = function(t2) {\n  const { listAttribute: e2 } = gt(t2);\n  return e2 ? [e2, t2] : [t2];\n};\nvar We = (t2) => t2.slice(-1)[0];\nvar Ue = function(t2, e2) {\n  const i2 = t2.lastIndexOf(e2);\n  return -1 === i2 ? t2 : ot(t2, i2, 1);\n};\nvar qe = class extends nt {\n  static fromJSON(t2) {\n    return new this(Array.from(t2).map((t3) => Be.fromJSON(t3)));\n  }\n  static fromString(t2, e2) {\n    const i2 = Te.textForStringWithAttributes(t2, e2);\n    return new this([new Be(i2)]);\n  }\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    super(...arguments), 0 === t2.length && (t2 = [new Be()]), this.blockList = ke.box(t2);\n  }\n  isEmpty() {\n    const t2 = this.getBlockAtIndex(0);\n    return 1 === this.blockList.length && t2.isEmpty() && !t2.hasAttributes();\n  }\n  copy() {\n    const t2 = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray();\n    return new this.constructor(t2);\n  }\n  copyUsingObjectsFromDocument(t2) {\n    const e2 = new Yt(t2.getObjects());\n    return this.copyUsingObjectMap(e2);\n  }\n  copyUsingObjectMap(t2) {\n    const e2 = this.getBlocks().map((e3) => t2.find(e3) || e3.copyUsingObjectMap(t2));\n    return new this.constructor(e2);\n  }\n  copyWithBaseBlockAttributes() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    const e2 = this.getBlocks().map((e3) => {\n      const i2 = t2.concat(e3.getAttributes());\n      return e3.copyWithAttributes(i2);\n    });\n    return new this.constructor(e2);\n  }\n  replaceBlock(t2, e2) {\n    const i2 = this.blockList.indexOf(t2);\n    return -1 === i2 ? this : new this.constructor(this.blockList.replaceObjectAtIndex(e2, i2));\n  }\n  insertDocumentAtRange(t2, e2) {\n    const { blockList: i2 } = t2;\n    e2 = Lt(e2);\n    let [n2] = e2;\n    const { index: r2, offset: o2 } = this.locationFromPosition(n2);\n    let s2 = this;\n    const a2 = this.getBlockAtPosition(n2);\n    return Dt(e2) && a2.isEmpty() && !a2.hasAttributes() ? s2 = new this.constructor(s2.blockList.removeObjectAtIndex(r2)) : a2.getBlockBreakPosition() === o2 && n2++, s2 = s2.removeTextAtRange(e2), new this.constructor(s2.blockList.insertSplittableListAtPosition(i2, n2));\n  }\n  mergeDocumentAtRange(t2, e2) {\n    let i2, n2;\n    e2 = Lt(e2);\n    const [r2] = e2, o2 = this.locationFromPosition(r2), s2 = this.getBlockAtIndex(o2.index).getAttributes(), a2 = t2.getBaseBlockAttributes(), l2 = s2.slice(-a2.length);\n    if (rt(a2, l2)) {\n      const e3 = s2.slice(0, -a2.length);\n      i2 = t2.copyWithBaseBlockAttributes(e3);\n    } else\n      i2 = t2.copy({ consolidateBlocks: true }).copyWithBaseBlockAttributes(s2);\n    const c2 = i2.getBlockCount(), h2 = i2.getBlockAtIndex(0);\n    if (rt(s2, h2.getAttributes())) {\n      const t3 = h2.getTextWithoutBlockBreak();\n      if (n2 = this.insertTextAtRange(t3, e2), c2 > 1) {\n        i2 = new this.constructor(i2.getBlocks().slice(1));\n        const e3 = r2 + t3.getLength();\n        n2 = n2.insertDocumentAtRange(i2, e3);\n      }\n    } else\n      n2 = this.insertDocumentAtRange(i2, e2);\n    return n2;\n  }\n  insertTextAtRange(t2, e2) {\n    e2 = Lt(e2);\n    const [i2] = e2, { index: n2, offset: r2 } = this.locationFromPosition(i2), o2 = this.removeTextAtRange(e2);\n    return new this.constructor(o2.blockList.editObjectAtIndex(n2, (e3) => e3.copyWithText(e3.text.insertTextAtPosition(t2, r2))));\n  }\n  removeTextAtRange(t2) {\n    let e2;\n    t2 = Lt(t2);\n    const [i2, n2] = t2;\n    if (Dt(t2))\n      return this;\n    const [r2, o2] = Array.from(this.locationRangeFromRange(t2)), s2 = r2.index, a2 = r2.offset, l2 = this.getBlockAtIndex(s2), c2 = o2.index, h2 = o2.offset, u2 = this.getBlockAtIndex(c2);\n    if (n2 - i2 == 1 && l2.getBlockBreakPosition() === a2 && u2.getBlockBreakPosition() !== h2 && \"\\n\" === u2.text.getStringAtPosition(h2))\n      e2 = this.blockList.editObjectAtIndex(c2, (t3) => t3.copyWithText(t3.text.removeTextAtRange([h2, h2 + 1])));\n    else {\n      let t3;\n      const i3 = l2.text.getTextAtRange([0, a2]), n3 = u2.text.getTextAtRange([h2, u2.getLength()]), r3 = i3.appendText(n3);\n      t3 = s2 !== c2 && 0 === a2 && l2.getAttributeLevel() >= u2.getAttributeLevel() ? u2.copyWithText(r3) : l2.copyWithText(r3);\n      const o3 = c2 + 1 - s2;\n      e2 = this.blockList.splice(s2, o3, t3);\n    }\n    return new this.constructor(e2);\n  }\n  moveTextFromRangeToPosition(t2, e2) {\n    let i2;\n    t2 = Lt(t2);\n    const [n2, r2] = t2;\n    if (n2 <= e2 && e2 <= r2)\n      return this;\n    let o2 = this.getDocumentAtRange(t2), s2 = this.removeTextAtRange(t2);\n    const a2 = n2 < e2;\n    a2 && (e2 -= o2.getLength());\n    const [l2, ...c2] = o2.getBlocks();\n    return 0 === c2.length ? (i2 = l2.getTextWithoutBlockBreak(), a2 && (e2 += 1)) : i2 = l2.text, s2 = s2.insertTextAtRange(i2, e2), 0 === c2.length ? s2 : (o2 = new this.constructor(c2), e2 += i2.getLength(), s2.insertDocumentAtRange(o2, e2));\n  }\n  addAttributeAtRange(t2, e2, i2) {\n    let { blockList: n2 } = this;\n    return this.eachBlockAtRange(i2, (i3, r2, o2) => n2 = n2.editObjectAtIndex(o2, function() {\n      return gt(t2) ? i3.addAttribute(t2, e2) : r2[0] === r2[1] ? i3 : i3.copyWithText(i3.text.addAttributeAtRange(t2, e2, r2));\n    })), new this.constructor(n2);\n  }\n  addAttribute(t2, e2) {\n    let { blockList: i2 } = this;\n    return this.eachBlock((n2, r2) => i2 = i2.editObjectAtIndex(r2, () => n2.addAttribute(t2, e2))), new this.constructor(i2);\n  }\n  removeAttributeAtRange(t2, e2) {\n    let { blockList: i2 } = this;\n    return this.eachBlockAtRange(e2, function(e3, n2, r2) {\n      gt(t2) ? i2 = i2.editObjectAtIndex(r2, () => e3.removeAttribute(t2)) : n2[0] !== n2[1] && (i2 = i2.editObjectAtIndex(r2, () => e3.copyWithText(e3.text.removeAttributeAtRange(t2, n2))));\n    }), new this.constructor(i2);\n  }\n  updateAttributesForAttachment(t2, e2) {\n    const i2 = this.getRangeOfAttachment(e2), [n2] = Array.from(i2), { index: r2 } = this.locationFromPosition(n2), o2 = this.getTextAtIndex(r2);\n    return new this.constructor(this.blockList.editObjectAtIndex(r2, (i3) => i3.copyWithText(o2.updateAttributesForAttachment(t2, e2))));\n  }\n  removeAttributeForAttachment(t2, e2) {\n    const i2 = this.getRangeOfAttachment(e2);\n    return this.removeAttributeAtRange(t2, i2);\n  }\n  insertBlockBreakAtRange(t2) {\n    let e2;\n    t2 = Lt(t2);\n    const [i2] = t2, { offset: n2 } = this.locationFromPosition(i2), r2 = this.removeTextAtRange(t2);\n    return 0 === n2 && (e2 = [new Be()]), new this.constructor(r2.blockList.insertSplittableListAtPosition(new ke(e2), i2));\n  }\n  applyBlockAttributeAtRange(t2, e2, i2) {\n    const n2 = this.expandRangeToLineBreaksAndSplitBlocks(i2);\n    let r2 = n2.document;\n    i2 = n2.range;\n    const o2 = gt(t2);\n    if (o2.listAttribute) {\n      r2 = r2.removeLastListAttributeAtRange(i2, { exceptAttributeName: t2 });\n      const e3 = r2.convertLineBreaksToBlockBreaksInRange(i2);\n      r2 = e3.document, i2 = e3.range;\n    } else\n      r2 = o2.exclusive ? r2.removeBlockAttributesAtRange(i2) : o2.terminal ? r2.removeLastTerminalAttributeAtRange(i2) : r2.consolidateBlocksAtRange(i2);\n    return r2.addAttributeAtRange(t2, e2, i2);\n  }\n  removeLastListAttributeAtRange(t2) {\n    let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { blockList: i2 } = this;\n    return this.eachBlockAtRange(t2, function(t3, n2, r2) {\n      const o2 = t3.getLastAttribute();\n      o2 && gt(o2).listAttribute && o2 !== e2.exceptAttributeName && (i2 = i2.editObjectAtIndex(r2, () => t3.removeAttribute(o2)));\n    }), new this.constructor(i2);\n  }\n  removeLastTerminalAttributeAtRange(t2) {\n    let { blockList: e2 } = this;\n    return this.eachBlockAtRange(t2, function(t3, i2, n2) {\n      const r2 = t3.getLastAttribute();\n      r2 && gt(r2).terminal && (e2 = e2.editObjectAtIndex(n2, () => t3.removeAttribute(r2)));\n    }), new this.constructor(e2);\n  }\n  removeBlockAttributesAtRange(t2) {\n    let { blockList: e2 } = this;\n    return this.eachBlockAtRange(t2, function(t3, i2, n2) {\n      t3.hasAttributes() && (e2 = e2.editObjectAtIndex(n2, () => t3.copyWithoutAttributes()));\n    }), new this.constructor(e2);\n  }\n  expandRangeToLineBreaksAndSplitBlocks(t2) {\n    let e2;\n    t2 = Lt(t2);\n    let [i2, n2] = t2;\n    const r2 = this.locationFromPosition(i2), o2 = this.locationFromPosition(n2);\n    let s2 = this;\n    const a2 = s2.getBlockAtIndex(r2.index);\n    if (r2.offset = a2.findLineBreakInDirectionFromPosition(\"backward\", r2.offset), null != r2.offset && (e2 = s2.positionFromLocation(r2), s2 = s2.insertBlockBreakAtRange([e2, e2 + 1]), o2.index += 1, o2.offset -= s2.getBlockAtIndex(r2.index).getLength(), r2.index += 1), r2.offset = 0, 0 === o2.offset && o2.index > r2.index)\n      o2.index -= 1, o2.offset = s2.getBlockAtIndex(o2.index).getBlockBreakPosition();\n    else {\n      const t3 = s2.getBlockAtIndex(o2.index);\n      \"\\n\" === t3.text.getStringAtRange([o2.offset - 1, o2.offset]) ? o2.offset -= 1 : o2.offset = t3.findLineBreakInDirectionFromPosition(\"forward\", o2.offset), o2.offset !== t3.getBlockBreakPosition() && (e2 = s2.positionFromLocation(o2), s2 = s2.insertBlockBreakAtRange([e2, e2 + 1]));\n    }\n    return i2 = s2.positionFromLocation(r2), n2 = s2.positionFromLocation(o2), { document: s2, range: t2 = Lt([i2, n2]) };\n  }\n  convertLineBreaksToBlockBreaksInRange(t2) {\n    t2 = Lt(t2);\n    let [e2] = t2;\n    const i2 = this.getStringAtRange(t2).slice(0, -1);\n    let n2 = this;\n    return i2.replace(/.*?\\n/g, function(t3) {\n      e2 += t3.length, n2 = n2.insertBlockBreakAtRange([e2 - 1, e2]);\n    }), { document: n2, range: t2 };\n  }\n  consolidateBlocksAtRange(t2) {\n    t2 = Lt(t2);\n    const [e2, i2] = t2, n2 = this.locationFromPosition(e2).index, r2 = this.locationFromPosition(i2).index;\n    return new this.constructor(this.blockList.consolidateFromIndexToIndex(n2, r2));\n  }\n  getDocumentAtRange(t2) {\n    t2 = Lt(t2);\n    const e2 = this.blockList.getSplittableListInRange(t2).toArray();\n    return new this.constructor(e2);\n  }\n  getStringAtRange(t2) {\n    let e2;\n    const i2 = t2 = Lt(t2);\n    return i2[i2.length - 1] !== this.getLength() && (e2 = -1), this.getDocumentAtRange(t2).toString().slice(0, e2);\n  }\n  getBlockAtIndex(t2) {\n    return this.blockList.getObjectAtIndex(t2);\n  }\n  getBlockAtPosition(t2) {\n    const { index: e2 } = this.locationFromPosition(t2);\n    return this.getBlockAtIndex(e2);\n  }\n  getTextAtIndex(t2) {\n    var e2;\n    return null === (e2 = this.getBlockAtIndex(t2)) || void 0 === e2 ? void 0 : e2.text;\n  }\n  getTextAtPosition(t2) {\n    const { index: e2 } = this.locationFromPosition(t2);\n    return this.getTextAtIndex(e2);\n  }\n  getPieceAtPosition(t2) {\n    const { index: e2, offset: i2 } = this.locationFromPosition(t2);\n    return this.getTextAtIndex(e2).getPieceAtPosition(i2);\n  }\n  getCharacterAtPosition(t2) {\n    const { index: e2, offset: i2 } = this.locationFromPosition(t2);\n    return this.getTextAtIndex(e2).getStringAtRange([i2, i2 + 1]);\n  }\n  getLength() {\n    return this.blockList.getEndPosition();\n  }\n  getBlocks() {\n    return this.blockList.toArray();\n  }\n  getBlockCount() {\n    return this.blockList.length;\n  }\n  getEditCount() {\n    return this.editCount;\n  }\n  eachBlock(t2) {\n    return this.blockList.eachObject(t2);\n  }\n  eachBlockAtRange(t2, e2) {\n    let i2, n2;\n    t2 = Lt(t2);\n    const [r2, o2] = t2, s2 = this.locationFromPosition(r2), a2 = this.locationFromPosition(o2);\n    if (s2.index === a2.index)\n      return i2 = this.getBlockAtIndex(s2.index), n2 = [s2.offset, a2.offset], e2(i2, n2, s2.index);\n    for (let t3 = s2.index; t3 <= a2.index; t3++)\n      if (i2 = this.getBlockAtIndex(t3), i2) {\n        switch (t3) {\n          case s2.index:\n            n2 = [s2.offset, i2.text.getLength()];\n            break;\n          case a2.index:\n            n2 = [0, a2.offset];\n            break;\n          default:\n            n2 = [0, i2.text.getLength()];\n        }\n        e2(i2, n2, t3);\n      }\n  }\n  getCommonAttributesAtRange(t2) {\n    t2 = Lt(t2);\n    const [e2] = t2;\n    if (Dt(t2))\n      return this.getCommonAttributesAtPosition(e2);\n    {\n      const e3 = [], i2 = [];\n      return this.eachBlockAtRange(t2, function(t3, n2) {\n        if (n2[0] !== n2[1])\n          return e3.push(t3.text.getCommonAttributesAtRange(n2)), i2.push(Ve(t3));\n      }), _t.fromCommonAttributesOfObjects(e3).merge(_t.fromCommonAttributesOfObjects(i2)).toObject();\n    }\n  }\n  getCommonAttributesAtPosition(t2) {\n    let e2, i2;\n    const { index: n2, offset: r2 } = this.locationFromPosition(t2), o2 = this.getBlockAtIndex(n2);\n    if (!o2)\n      return {};\n    const s2 = Ve(o2), a2 = o2.text.getAttributesAtPosition(r2), l2 = o2.text.getAttributesAtPosition(r2 - 1), c2 = Object.keys(W).filter((t3) => W[t3].inheritable);\n    for (e2 in l2)\n      i2 = l2[e2], (i2 === a2[e2] || c2.includes(e2)) && (s2[e2] = i2);\n    return s2;\n  }\n  getRangeOfCommonAttributeAtPosition(t2, e2) {\n    const { index: i2, offset: n2 } = this.locationFromPosition(e2), r2 = this.getTextAtIndex(i2), [o2, s2] = Array.from(r2.getExpandedRangeForAttributeAtOffset(t2, n2)), a2 = this.positionFromLocation({ index: i2, offset: o2 }), l2 = this.positionFromLocation({ index: i2, offset: s2 });\n    return Lt([a2, l2]);\n  }\n  getBaseBlockAttributes() {\n    let t2 = this.getBlockAtIndex(0).getAttributes();\n    for (let e2 = 1; e2 < this.getBlockCount(); e2++) {\n      const i2 = this.getBlockAtIndex(e2).getAttributes(), n2 = Math.min(t2.length, i2.length);\n      t2 = (() => {\n        const e3 = [];\n        for (let r2 = 0; r2 < n2 && i2[r2] === t2[r2]; r2++)\n          e3.push(i2[r2]);\n        return e3;\n      })();\n    }\n    return t2;\n  }\n  getAttachmentById(t2) {\n    for (const e2 of this.getAttachments())\n      if (e2.id === t2)\n        return e2;\n  }\n  getAttachmentPieces() {\n    let t2 = [];\n    return this.blockList.eachObject((e2) => {\n      let { text: i2 } = e2;\n      return t2 = t2.concat(i2.getAttachmentPieces());\n    }), t2;\n  }\n  getAttachments() {\n    return this.getAttachmentPieces().map((t2) => t2.attachment);\n  }\n  getRangeOfAttachment(t2) {\n    let e2 = 0;\n    const i2 = this.blockList.toArray();\n    for (let n2 = 0; n2 < i2.length; n2++) {\n      const { text: r2 } = i2[n2], o2 = r2.getRangeOfAttachment(t2);\n      if (o2)\n        return Lt([e2 + o2[0], e2 + o2[1]]);\n      e2 += r2.getLength();\n    }\n  }\n  getLocationRangeOfAttachment(t2) {\n    const e2 = this.getRangeOfAttachment(t2);\n    return this.locationRangeFromRange(e2);\n  }\n  getAttachmentPieceForAttachment(t2) {\n    for (const e2 of this.getAttachmentPieces())\n      if (e2.attachment === t2)\n        return e2;\n  }\n  findRangesForBlockAttribute(t2) {\n    let e2 = 0;\n    const i2 = [];\n    return this.getBlocks().forEach((n2) => {\n      const r2 = n2.getLength();\n      n2.hasAttribute(t2) && i2.push([e2, e2 + r2]), e2 += r2;\n    }), i2;\n  }\n  findRangesForTextAttribute(t2) {\n    let { withValue: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i2 = 0, n2 = [];\n    const r2 = [];\n    return this.getPieces().forEach((o2) => {\n      const s2 = o2.getLength();\n      (function(i3) {\n        return e2 ? i3.getAttribute(t2) === e2 : i3.hasAttribute(t2);\n      })(o2) && (n2[1] === i2 ? n2[1] = i2 + s2 : r2.push(n2 = [i2, i2 + s2])), i2 += s2;\n    }), r2;\n  }\n  locationFromPosition(t2) {\n    const e2 = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, t2));\n    if (null != e2.index)\n      return e2;\n    {\n      const t3 = this.getBlocks();\n      return { index: t3.length - 1, offset: t3[t3.length - 1].getLength() };\n    }\n  }\n  positionFromLocation(t2) {\n    return this.blockList.findPositionAtIndexAndOffset(t2.index, t2.offset);\n  }\n  locationRangeFromPosition(t2) {\n    return Lt(this.locationFromPosition(t2));\n  }\n  locationRangeFromRange(t2) {\n    if (!(t2 = Lt(t2)))\n      return;\n    const [e2, i2] = Array.from(t2), n2 = this.locationFromPosition(e2), r2 = this.locationFromPosition(i2);\n    return Lt([n2, r2]);\n  }\n  rangeFromLocationRange(t2) {\n    let e2;\n    t2 = Lt(t2);\n    const i2 = this.positionFromLocation(t2[0]);\n    return Dt(t2) || (e2 = this.positionFromLocation(t2[1])), Lt([i2, e2]);\n  }\n  isEqualTo(t2) {\n    return this.blockList.isEqualTo(null == t2 ? void 0 : t2.blockList);\n  }\n  getTexts() {\n    return this.getBlocks().map((t2) => t2.text);\n  }\n  getPieces() {\n    const t2 = [];\n    return Array.from(this.getTexts()).forEach((e2) => {\n      t2.push(...Array.from(e2.getPieces() || []));\n    }), t2;\n  }\n  getObjects() {\n    return this.getBlocks().concat(this.getTexts()).concat(this.getPieces());\n  }\n  toSerializableDocument() {\n    const t2 = [];\n    return this.blockList.eachObject((e2) => t2.push(e2.copyWithText(e2.text.toSerializableText()))), new this.constructor(t2);\n  }\n  toString() {\n    return this.blockList.toString();\n  }\n  toJSON() {\n    return this.blockList.toJSON();\n  }\n  toConsole() {\n    return JSON.stringify(this.blockList.toArray().map((t2) => JSON.parse(t2.text.toConsole())));\n  }\n};\nvar Ve = function(t2) {\n  const e2 = {}, i2 = t2.getLastAttribute();\n  return i2 && (e2[i2] = true), e2;\n};\nvar ze = \"style href src width height class\".split(\" \");\nvar _e = \"javascript:\".split(\" \");\nvar He = \"script iframe form\".split(\" \");\nvar Je = class extends z {\n  static sanitize(t2, e2) {\n    const i2 = new this(t2, e2);\n    return i2.sanitize(), i2;\n  }\n  constructor(t2) {\n    let { allowedAttributes: e2, forbiddenProtocols: i2, forbiddenElements: n2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    super(...arguments), this.allowedAttributes = e2 || ze, this.forbiddenProtocols = i2 || _e, this.forbiddenElements = n2 || He, this.body = Ke(t2);\n  }\n  sanitize() {\n    return this.sanitizeElements(), this.normalizeListElementNesting();\n  }\n  getHTML() {\n    return this.body.innerHTML;\n  }\n  getBody() {\n    return this.body;\n  }\n  sanitizeElements() {\n    const t2 = S(this.body), e2 = [];\n    for (; t2.nextNode(); ) {\n      const i2 = t2.currentNode;\n      switch (i2.nodeType) {\n        case Node.ELEMENT_NODE:\n          this.elementIsRemovable(i2) ? e2.push(i2) : this.sanitizeElement(i2);\n          break;\n        case Node.COMMENT_NODE:\n          e2.push(i2);\n      }\n    }\n    return e2.forEach((t3) => R(t3)), this.body;\n  }\n  sanitizeElement(t2) {\n    return t2.hasAttribute(\"href\") && this.forbiddenProtocols.includes(t2.protocol) && t2.removeAttribute(\"href\"), Array.from(t2.attributes).forEach((e2) => {\n      let { name: i2 } = e2;\n      this.allowedAttributes.includes(i2) || 0 === i2.indexOf(\"data-trix\") || t2.removeAttribute(i2);\n    }), t2;\n  }\n  normalizeListElementNesting() {\n    return Array.from(this.body.querySelectorAll(\"ul,ol\")).forEach((t2) => {\n      const e2 = t2.previousElementSibling;\n      e2 && \"li\" === E(e2) && e2.appendChild(t2);\n    }), this.body;\n  }\n  elementIsRemovable(t2) {\n    if ((null == t2 ? void 0 : t2.nodeType) === Node.ELEMENT_NODE)\n      return this.elementIsForbidden(t2) || this.elementIsntSerializable(t2);\n  }\n  elementIsForbidden(t2) {\n    return this.forbiddenElements.includes(E(t2));\n  }\n  elementIsntSerializable(t2) {\n    return \"false\" === t2.getAttribute(\"data-trix-serialize\") && !P(t2);\n  }\n};\nvar Ke = function() {\n  let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n  t2 = t2.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\");\n  const e2 = document.implementation.createHTMLDocument(\"\");\n  return e2.documentElement.innerHTML = t2, Array.from(e2.head.querySelectorAll(\"style\")).forEach((t3) => {\n    e2.body.appendChild(t3);\n  }), e2.body;\n};\nvar Ge = function(t2) {\n  let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n  return { string: t2 = Wt(t2), attributes: e2, type: \"string\" };\n};\nvar $e = (t2, e2) => {\n  try {\n    return JSON.parse(t2.getAttribute(\"data-trix-\".concat(e2)));\n  } catch (t3) {\n    return {};\n  }\n};\nvar Xe = class extends z {\n  static parse(t2, e2) {\n    const i2 = new this(t2, e2);\n    return i2.parse(), i2;\n  }\n  constructor(t2) {\n    let { referenceElement: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    super(...arguments), this.html = t2, this.referenceElement = e2, this.blocks = [], this.blockElements = [], this.processedElements = [];\n  }\n  getDocument() {\n    return qe.fromJSON(this.blocks);\n  }\n  parse() {\n    try {\n      this.createHiddenContainer();\n      const t2 = Je.sanitize(this.html).getHTML();\n      this.containerElement.innerHTML = t2;\n      const e2 = S(this.containerElement, { usingFilter: ti });\n      for (; e2.nextNode(); )\n        this.processNode(e2.currentNode);\n      return this.translateBlockElementMarginsToNewlines();\n    } finally {\n      this.removeHiddenContainer();\n    }\n  }\n  createHiddenContainer() {\n    return this.referenceElement ? (this.containerElement = this.referenceElement.cloneNode(false), this.containerElement.removeAttribute(\"id\"), this.containerElement.setAttribute(\"data-trix-internal\", \"\"), this.containerElement.style.display = \"none\", this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)) : (this.containerElement = k({ tagName: \"div\", style: { display: \"none\" } }), document.body.appendChild(this.containerElement));\n  }\n  removeHiddenContainer() {\n    return R(this.containerElement);\n  }\n  processNode(t2) {\n    switch (t2.nodeType) {\n      case Node.TEXT_NODE:\n        if (!this.isInsignificantTextNode(t2))\n          return this.appendBlockForTextNode(t2), this.processTextNode(t2);\n        break;\n      case Node.ELEMENT_NODE:\n        return this.appendBlockForElement(t2), this.processElement(t2);\n    }\n  }\n  appendBlockForTextNode(t2) {\n    const e2 = t2.parentNode;\n    if (e2 === this.currentBlockElement && this.isBlockElement(t2.previousSibling))\n      return this.appendStringWithAttributes(\"\\n\");\n    if (e2 === this.containerElement || this.isBlockElement(e2)) {\n      var i2;\n      const t3 = this.getBlockAttributes(e2);\n      rt(t3, null === (i2 = this.currentBlock) || void 0 === i2 ? void 0 : i2.attributes) || (this.currentBlock = this.appendBlockForAttributesWithElement(t3, e2), this.currentBlockElement = e2);\n    }\n  }\n  appendBlockForElement(t2) {\n    const e2 = this.isBlockElement(t2), i2 = y(this.currentBlockElement, t2);\n    if (e2 && !this.isBlockElement(t2.firstChild)) {\n      if (!this.isInsignificantTextNode(t2.firstChild) || !this.isBlockElement(t2.firstElementChild)) {\n        const e3 = this.getBlockAttributes(t2);\n        if (t2.firstChild) {\n          if (i2 && rt(e3, this.currentBlock.attributes))\n            return this.appendStringWithAttributes(\"\\n\");\n          this.currentBlock = this.appendBlockForAttributesWithElement(e3, t2), this.currentBlockElement = t2;\n        }\n      }\n    } else if (this.currentBlockElement && !i2 && !e2) {\n      const e3 = this.findParentBlockElement(t2);\n      if (e3)\n        return this.appendBlockForElement(e3);\n      this.currentBlock = this.appendEmptyBlock(), this.currentBlockElement = null;\n    }\n  }\n  findParentBlockElement(t2) {\n    let { parentElement: e2 } = t2;\n    for (; e2 && e2 !== this.containerElement; ) {\n      if (this.isBlockElement(e2) && this.blockElements.includes(e2))\n        return e2;\n      e2 = e2.parentElement;\n    }\n    return null;\n  }\n  processTextNode(t2) {\n    let e2 = t2.data;\n    var i2;\n    Ye(t2.parentNode) || (e2 = qt(e2), ni(null === (i2 = t2.previousSibling) || void 0 === i2 ? void 0 : i2.textContent) && (e2 = ei(e2)));\n    return this.appendStringWithAttributes(e2, this.getTextAttributes(t2.parentNode));\n  }\n  processElement(t2) {\n    let e2;\n    if (P(t2)) {\n      if (e2 = $e(t2, \"attachment\"), Object.keys(e2).length) {\n        const i2 = this.getTextAttributes(t2);\n        this.appendAttachmentWithAttributes(e2, i2), t2.innerHTML = \"\";\n      }\n      return this.processedElements.push(t2);\n    }\n    switch (E(t2)) {\n      case \"br\":\n        return this.isExtraBR(t2) || this.isBlockElement(t2.nextSibling) || this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(t2)), this.processedElements.push(t2);\n      case \"img\":\n        e2 = { url: t2.getAttribute(\"src\"), contentType: \"image\" };\n        const i2 = ((t3) => {\n          const e3 = t3.getAttribute(\"width\"), i3 = t3.getAttribute(\"height\"), n2 = {};\n          return e3 && (n2.width = parseInt(e3, 10)), i3 && (n2.height = parseInt(i3, 10)), n2;\n        })(t2);\n        for (const t3 in i2) {\n          const n2 = i2[t3];\n          e2[t3] = n2;\n        }\n        return this.appendAttachmentWithAttributes(e2, this.getTextAttributes(t2)), this.processedElements.push(t2);\n      case \"tr\":\n        if (this.needsTableSeparator(t2))\n          return this.appendStringWithAttributes(j.tableRowSeparator);\n        break;\n      case \"td\":\n        if (this.needsTableSeparator(t2))\n          return this.appendStringWithAttributes(j.tableCellSeparator);\n    }\n  }\n  appendBlockForAttributesWithElement(t2, e2) {\n    this.blockElements.push(e2);\n    const i2 = function() {\n      return { text: [], attributes: arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {} };\n    }(t2);\n    return this.blocks.push(i2), i2;\n  }\n  appendEmptyBlock() {\n    return this.appendBlockForAttributesWithElement([], null);\n  }\n  appendStringWithAttributes(t2, e2) {\n    return this.appendPiece(Ge(t2, e2));\n  }\n  appendAttachmentWithAttributes(t2, e2) {\n    return this.appendPiece(function(t3) {\n      return { attachment: t3, attributes: arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, type: \"attachment\" };\n    }(t2, e2));\n  }\n  appendPiece(t2) {\n    return 0 === this.blocks.length && this.appendEmptyBlock(), this.blocks[this.blocks.length - 1].text.push(t2);\n  }\n  appendStringToTextAtIndex(t2, e2) {\n    const { text: i2 } = this.blocks[e2], n2 = i2[i2.length - 1];\n    if (\"string\" !== (null == n2 ? void 0 : n2.type))\n      return i2.push(Ge(t2));\n    n2.string += t2;\n  }\n  prependStringToTextAtIndex(t2, e2) {\n    const { text: i2 } = this.blocks[e2], n2 = i2[0];\n    if (\"string\" !== (null == n2 ? void 0 : n2.type))\n      return i2.unshift(Ge(t2));\n    n2.string = t2 + n2.string;\n  }\n  getTextAttributes(t2) {\n    let e2;\n    const i2 = {};\n    for (const n2 in W) {\n      const r2 = W[n2];\n      if (r2.tagName && A(t2, { matchingSelector: r2.tagName, untilNode: this.containerElement }))\n        i2[n2] = true;\n      else if (r2.parser) {\n        if (e2 = r2.parser(t2), e2) {\n          let o2 = false;\n          for (const i3 of this.findBlockElementAncestors(t2))\n            if (r2.parser(i3) === e2) {\n              o2 = true;\n              break;\n            }\n          o2 || (i2[n2] = e2);\n        }\n      } else\n        r2.styleProperty && (e2 = t2.style[r2.styleProperty], e2 && (i2[n2] = e2));\n    }\n    if (P(t2)) {\n      const n2 = $e(t2, \"attributes\");\n      for (const t3 in n2)\n        e2 = n2[t3], i2[t3] = e2;\n    }\n    return i2;\n  }\n  getBlockAttributes(t2) {\n    const e2 = [];\n    for (; t2 && t2 !== this.containerElement; ) {\n      for (const r2 in n) {\n        const o2 = n[r2];\n        var i2;\n        if (false !== o2.parse) {\n          if (E(t2) === o2.tagName)\n            (null !== (i2 = o2.test) && void 0 !== i2 && i2.call(o2, t2) || !o2.test) && (e2.push(r2), o2.listAttribute && e2.push(o2.listAttribute));\n        }\n      }\n      t2 = t2.parentNode;\n    }\n    return e2.reverse();\n  }\n  findBlockElementAncestors(t2) {\n    const e2 = [];\n    for (; t2 && t2 !== this.containerElement; ) {\n      const i2 = E(t2);\n      D().includes(i2) && e2.push(t2), t2 = t2.parentNode;\n    }\n    return e2;\n  }\n  isBlockElement(t2) {\n    if ((null == t2 ? void 0 : t2.nodeType) === Node.ELEMENT_NODE && !P(t2) && !A(t2, { matchingSelector: \"td\", untilNode: this.containerElement }))\n      return D().includes(E(t2)) || \"block\" === window.getComputedStyle(t2).display;\n  }\n  isInsignificantTextNode(t2) {\n    if ((null == t2 ? void 0 : t2.nodeType) !== Node.TEXT_NODE)\n      return;\n    if (!ii(t2.data))\n      return;\n    const { parentNode: e2, previousSibling: i2, nextSibling: n2 } = t2;\n    return Qe(e2.previousSibling) && !this.isBlockElement(e2.previousSibling) || Ye(e2) ? void 0 : !i2 || this.isBlockElement(i2) || !n2 || this.isBlockElement(n2);\n  }\n  isExtraBR(t2) {\n    return \"br\" === E(t2) && this.isBlockElement(t2.parentNode) && t2.parentNode.lastChild === t2;\n  }\n  needsTableSeparator(t2) {\n    if (j.removeBlankTableCells) {\n      var e2;\n      const i2 = null === (e2 = t2.previousSibling) || void 0 === e2 ? void 0 : e2.textContent;\n      return i2 && /\\S/.test(i2);\n    }\n    return t2.previousSibling;\n  }\n  translateBlockElementMarginsToNewlines() {\n    const t2 = this.getMarginOfDefaultBlockElement();\n    for (let e2 = 0; e2 < this.blocks.length; e2++) {\n      const i2 = this.getMarginOfBlockElementAtIndex(e2);\n      i2 && (i2.top > 2 * t2.top && this.prependStringToTextAtIndex(\"\\n\", e2), i2.bottom > 2 * t2.bottom && this.appendStringToTextAtIndex(\"\\n\", e2));\n    }\n  }\n  getMarginOfBlockElementAtIndex(t2) {\n    const e2 = this.blockElements[t2];\n    if (e2 && e2.textContent && !D().includes(E(e2)) && !this.processedElements.includes(e2))\n      return Ze(e2);\n  }\n  getMarginOfDefaultBlockElement() {\n    const t2 = k(n.default.tagName);\n    return this.containerElement.appendChild(t2), Ze(t2);\n  }\n};\nvar Ye = function(t2) {\n  const { whiteSpace: e2 } = window.getComputedStyle(t2);\n  return [\"pre\", \"pre-wrap\", \"pre-line\"].includes(e2);\n};\nvar Qe = (t2) => t2 && !ni(t2.textContent);\nvar Ze = function(t2) {\n  const e2 = window.getComputedStyle(t2);\n  if (\"block\" === e2.display)\n    return { top: parseInt(e2.marginTop), bottom: parseInt(e2.marginBottom) };\n};\nvar ti = function(t2) {\n  return \"style\" === E(t2) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n};\nvar ei = (t2) => t2.replace(new RegExp(\"^\".concat(Ut.source, \"+\")), \"\");\nvar ii = (t2) => new RegExp(\"^\".concat(Ut.source, \"*$\")).test(t2);\nvar ni = (t2) => /\\s$/.test(t2);\nvar ri = [\"contenteditable\", \"data-trix-id\", \"data-trix-store-key\", \"data-trix-mutable\", \"data-trix-placeholder\", \"tabindex\"];\nvar oi = \"data-trix-serialized-attributes\";\nvar si = \"[\".concat(oi, \"]\");\nvar ai = new RegExp(\"<!--block-->\", \"g\");\nvar li = { \"application/json\": function(t2) {\n  let e2;\n  if (t2 instanceof qe)\n    e2 = t2;\n  else {\n    if (!(t2 instanceof HTMLElement))\n      throw new Error(\"unserializable object\");\n    e2 = Xe.parse(t2.innerHTML).getDocument();\n  }\n  return e2.toSerializableDocument().toJSONString();\n}, \"text/html\": function(t2) {\n  let e2;\n  if (t2 instanceof qe)\n    e2 = ge.render(t2);\n  else {\n    if (!(t2 instanceof HTMLElement))\n      throw new Error(\"unserializable object\");\n    e2 = t2.cloneNode(true);\n  }\n  return Array.from(e2.querySelectorAll(\"[data-trix-serialize=false]\")).forEach((t3) => {\n    R(t3);\n  }), ri.forEach((t3) => {\n    Array.from(e2.querySelectorAll(\"[\".concat(t3, \"]\"))).forEach((e3) => {\n      e3.removeAttribute(t3);\n    });\n  }), Array.from(e2.querySelectorAll(si)).forEach((t3) => {\n    try {\n      const e3 = JSON.parse(t3.getAttribute(oi));\n      t3.removeAttribute(oi);\n      for (const i2 in e3) {\n        const n2 = e3[i2];\n        t3.setAttribute(i2, n2);\n      }\n    } catch (t4) {\n    }\n  }), e2.innerHTML.replace(ai, \"\");\n} };\nvar ci = Object.freeze({ __proto__: null });\nvar hi = class extends z {\n  constructor(t2, e2) {\n    super(...arguments), this.attachmentManager = t2, this.attachment = e2, this.id = this.attachment.id, this.file = this.attachment.file;\n  }\n  remove() {\n    return this.attachmentManager.requestRemovalOfAttachment(this.attachment);\n  }\n};\nhi.proxyMethod(\"attachment.getAttribute\"), hi.proxyMethod(\"attachment.hasAttribute\"), hi.proxyMethod(\"attachment.setAttribute\"), hi.proxyMethod(\"attachment.getAttributes\"), hi.proxyMethod(\"attachment.setAttributes\"), hi.proxyMethod(\"attachment.isPending\"), hi.proxyMethod(\"attachment.isPreviewable\"), hi.proxyMethod(\"attachment.getURL\"), hi.proxyMethod(\"attachment.getHref\"), hi.proxyMethod(\"attachment.getFilename\"), hi.proxyMethod(\"attachment.getFilesize\"), hi.proxyMethod(\"attachment.getFormattedFilesize\"), hi.proxyMethod(\"attachment.getExtension\"), hi.proxyMethod(\"attachment.getContentType\"), hi.proxyMethod(\"attachment.getFile\"), hi.proxyMethod(\"attachment.setFile\"), hi.proxyMethod(\"attachment.releaseFile\"), hi.proxyMethod(\"attachment.getUploadProgress\"), hi.proxyMethod(\"attachment.setUploadProgress\");\nvar ui = class extends z {\n  constructor() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n    super(...arguments), this.managedAttachments = {}, Array.from(t2).forEach((t3) => {\n      this.manageAttachment(t3);\n    });\n  }\n  getAttachments() {\n    const t2 = [];\n    for (const e2 in this.managedAttachments) {\n      const i2 = this.managedAttachments[e2];\n      t2.push(i2);\n    }\n    return t2;\n  }\n  manageAttachment(t2) {\n    return this.managedAttachments[t2.id] || (this.managedAttachments[t2.id] = new hi(this, t2)), this.managedAttachments[t2.id];\n  }\n  attachmentIsManaged(t2) {\n    return t2.id in this.managedAttachments;\n  }\n  requestRemovalOfAttachment(t2) {\n    var e2, i2;\n    if (this.attachmentIsManaged(t2))\n      return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.attachmentManagerDidRequestRemovalOfAttachment) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  unmanageAttachment(t2) {\n    const e2 = this.managedAttachments[t2.id];\n    return delete this.managedAttachments[t2.id], e2;\n  }\n};\nvar di = class {\n  constructor(t2) {\n    this.composition = t2, this.document = this.composition.document;\n    const e2 = this.composition.getSelectedRange();\n    this.startPosition = e2[0], this.endPosition = e2[1], this.startLocation = this.document.locationFromPosition(this.startPosition), this.endLocation = this.document.locationFromPosition(this.endPosition), this.block = this.document.getBlockAtIndex(this.endLocation.index), this.breaksOnReturn = this.block.breaksOnReturn(), this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1), this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset);\n  }\n  shouldInsertBlockBreak() {\n    return this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty() ? 0 !== this.startLocation.offset : this.breaksOnReturn && \"\\n\" !== this.nextCharacter;\n  }\n  shouldBreakFormattedBlock() {\n    return this.block.hasAttributes() && !this.block.isListItem() && (this.breaksOnReturn && \"\\n\" === this.nextCharacter || \"\\n\" === this.previousCharacter);\n  }\n  shouldDecreaseListLevel() {\n    return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty();\n  }\n  shouldPrependListItem() {\n    return this.block.isListItem() && 0 === this.startLocation.offset && !this.block.isEmpty();\n  }\n  shouldRemoveLastBlockAttribute() {\n    return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty();\n  }\n};\nvar gi = class extends z {\n  constructor() {\n    super(...arguments), this.document = new qe(), this.attachments = [], this.currentAttributes = {}, this.revision = 0;\n  }\n  setDocument(t2) {\n    var e2, i2;\n    if (!t2.isEqualTo(this.document))\n      return this.document = t2, this.refreshAttachments(), this.revision++, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionDidChangeDocument) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  getSnapshot() {\n    return { document: this.document, selectedRange: this.getSelectedRange() };\n  }\n  loadSnapshot(t2) {\n    var e2, i2, n2, r2;\n    let { document: o2, selectedRange: s2 } = t2;\n    return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionWillLoadSnapshot) || void 0 === i2 || i2.call(e2), this.setDocument(null != o2 ? o2 : new qe()), this.setSelection(null != s2 ? s2 : [0, 0]), null === (n2 = this.delegate) || void 0 === n2 || null === (r2 = n2.compositionDidLoadSnapshot) || void 0 === r2 ? void 0 : r2.call(n2);\n  }\n  insertText(t2) {\n    let { updatePosition: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { updatePosition: true };\n    const i2 = this.getSelectedRange();\n    this.setDocument(this.document.insertTextAtRange(t2, i2));\n    const n2 = i2[0], r2 = n2 + t2.getLength();\n    return e2 && this.setSelection(r2), this.notifyDelegateOfInsertionAtRange([n2, r2]);\n  }\n  insertBlock() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new Be();\n    const e2 = new qe([t2]);\n    return this.insertDocument(e2);\n  }\n  insertDocument() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new qe();\n    const e2 = this.getSelectedRange();\n    this.setDocument(this.document.insertDocumentAtRange(t2, e2));\n    const i2 = e2[0], n2 = i2 + t2.getLength();\n    return this.setSelection(n2), this.notifyDelegateOfInsertionAtRange([i2, n2]);\n  }\n  insertString(t2, e2) {\n    const i2 = this.getCurrentTextAttributes(), n2 = Te.textForStringWithAttributes(t2, i2);\n    return this.insertText(n2, e2);\n  }\n  insertBlockBreak() {\n    const t2 = this.getSelectedRange();\n    this.setDocument(this.document.insertBlockBreakAtRange(t2));\n    const e2 = t2[0], i2 = e2 + 1;\n    return this.setSelection(i2), this.notifyDelegateOfInsertionAtRange([e2, i2]);\n  }\n  insertLineBreak() {\n    const t2 = new di(this);\n    if (t2.shouldDecreaseListLevel())\n      return this.decreaseListLevel(), this.setSelection(t2.startPosition);\n    if (t2.shouldPrependListItem()) {\n      const e2 = new qe([t2.block.copyWithoutText()]);\n      return this.insertDocument(e2);\n    }\n    return t2.shouldInsertBlockBreak() ? this.insertBlockBreak() : t2.shouldRemoveLastBlockAttribute() ? this.removeLastBlockAttribute() : t2.shouldBreakFormattedBlock() ? this.breakFormattedBlock(t2) : this.insertString(\"\\n\");\n  }\n  insertHTML(t2) {\n    const e2 = Xe.parse(t2).getDocument(), i2 = this.getSelectedRange();\n    this.setDocument(this.document.mergeDocumentAtRange(e2, i2));\n    const n2 = i2[0], r2 = n2 + e2.getLength() - 1;\n    return this.setSelection(r2), this.notifyDelegateOfInsertionAtRange([n2, r2]);\n  }\n  replaceHTML(t2) {\n    const e2 = Xe.parse(t2).getDocument().copyUsingObjectsFromDocument(this.document), i2 = this.getLocationRange({ strict: false }), n2 = this.document.rangeFromLocationRange(i2);\n    return this.setDocument(e2), this.setSelection(n2);\n  }\n  insertFile(t2) {\n    return this.insertFiles([t2]);\n  }\n  insertFiles(t2) {\n    const e2 = [];\n    return Array.from(t2).forEach((t3) => {\n      var i2;\n      if (null !== (i2 = this.delegate) && void 0 !== i2 && i2.compositionShouldAcceptFile(t3)) {\n        const i3 = Re.attachmentForFile(t3);\n        e2.push(i3);\n      }\n    }), this.insertAttachments(e2);\n  }\n  insertAttachment(t2) {\n    return this.insertAttachments([t2]);\n  }\n  insertAttachments(t2) {\n    let e2 = new Te();\n    return Array.from(t2).forEach((t3) => {\n      var n2;\n      const r2 = t3.getType(), o2 = null === (n2 = i[r2]) || void 0 === n2 ? void 0 : n2.presentation, s2 = this.getCurrentTextAttributes();\n      o2 && (s2.presentation = o2);\n      const a2 = Te.textForAttachmentWithAttributes(t3, s2);\n      e2 = e2.appendText(a2);\n    }), this.insertText(e2);\n  }\n  shouldManageDeletingInDirection(t2) {\n    const e2 = this.getLocationRange();\n    if (Dt(e2)) {\n      if (\"backward\" === t2 && 0 === e2[0].offset)\n        return true;\n      if (this.shouldManageMovingCursorInDirection(t2))\n        return true;\n    } else if (e2[0].index !== e2[1].index)\n      return true;\n    return false;\n  }\n  deleteInDirection(t2) {\n    let e2, i2, n2, { length: r2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    const o2 = this.getLocationRange();\n    let s2 = this.getSelectedRange();\n    const a2 = Dt(s2);\n    if (a2 ? i2 = \"backward\" === t2 && 0 === o2[0].offset : n2 = o2[0].index !== o2[1].index, i2 && this.canDecreaseBlockAttributeLevel()) {\n      const t3 = this.getBlock();\n      if (t3.isListItem() ? this.decreaseListLevel() : this.decreaseBlockAttributeLevel(), this.setSelection(s2[0]), t3.isEmpty())\n        return false;\n    }\n    return a2 && (s2 = this.getExpandedRangeInDirection(t2, { length: r2 }), \"backward\" === t2 && (e2 = this.getAttachmentAtRange(s2))), e2 ? (this.editAttachment(e2), false) : (this.setDocument(this.document.removeTextAtRange(s2)), this.setSelection(s2[0]), !i2 && !n2 && void 0);\n  }\n  moveTextFromRange(t2) {\n    const [e2] = Array.from(this.getSelectedRange());\n    return this.setDocument(this.document.moveTextFromRangeToPosition(t2, e2)), this.setSelection(e2);\n  }\n  removeAttachment(t2) {\n    const e2 = this.document.getRangeOfAttachment(t2);\n    if (e2)\n      return this.stopEditingAttachment(), this.setDocument(this.document.removeTextAtRange(e2)), this.setSelection(e2[0]);\n  }\n  removeLastBlockAttribute() {\n    const [t2, e2] = Array.from(this.getSelectedRange()), i2 = this.document.getBlockAtPosition(e2);\n    return this.removeCurrentAttribute(i2.getLastAttribute()), this.setSelection(t2);\n  }\n  insertPlaceholder() {\n    return this.placeholderPosition = this.getPosition(), this.insertString(\" \");\n  }\n  selectPlaceholder() {\n    if (null != this.placeholderPosition)\n      return this.setSelectedRange([this.placeholderPosition, this.placeholderPosition + 1]), this.getSelectedRange();\n  }\n  forgetPlaceholder() {\n    this.placeholderPosition = null;\n  }\n  hasCurrentAttribute(t2) {\n    const e2 = this.currentAttributes[t2];\n    return null != e2 && false !== e2;\n  }\n  toggleCurrentAttribute(t2) {\n    const e2 = !this.currentAttributes[t2];\n    return e2 ? this.setCurrentAttribute(t2, e2) : this.removeCurrentAttribute(t2);\n  }\n  canSetCurrentAttribute(t2) {\n    return gt(t2) ? this.canSetCurrentBlockAttribute(t2) : this.canSetCurrentTextAttribute(t2);\n  }\n  canSetCurrentTextAttribute(t2) {\n    const e2 = this.getSelectedDocument();\n    if (e2) {\n      for (const t3 of Array.from(e2.getAttachments()))\n        if (!t3.hasContent())\n          return false;\n      return true;\n    }\n  }\n  canSetCurrentBlockAttribute(t2) {\n    const e2 = this.getBlock();\n    if (e2)\n      return !e2.isTerminalBlock();\n  }\n  setCurrentAttribute(t2, e2) {\n    return gt(t2) ? this.setBlockAttribute(t2, e2) : (this.setTextAttribute(t2, e2), this.currentAttributes[t2] = e2, this.notifyDelegateOfCurrentAttributesChange());\n  }\n  setTextAttribute(t2, e2) {\n    const i2 = this.getSelectedRange();\n    if (!i2)\n      return;\n    const [n2, r2] = Array.from(i2);\n    if (n2 !== r2)\n      return this.setDocument(this.document.addAttributeAtRange(t2, e2, i2));\n    if (\"href\" === t2) {\n      const t3 = Te.textForStringWithAttributes(e2, { href: e2 });\n      return this.insertText(t3);\n    }\n  }\n  setBlockAttribute(t2, e2) {\n    const i2 = this.getSelectedRange();\n    if (this.canSetCurrentAttribute(t2))\n      return this.setDocument(this.document.applyBlockAttributeAtRange(t2, e2, i2)), this.setSelection(i2);\n  }\n  removeCurrentAttribute(t2) {\n    return gt(t2) ? (this.removeBlockAttribute(t2), this.updateCurrentAttributes()) : (this.removeTextAttribute(t2), delete this.currentAttributes[t2], this.notifyDelegateOfCurrentAttributesChange());\n  }\n  removeTextAttribute(t2) {\n    const e2 = this.getSelectedRange();\n    if (e2)\n      return this.setDocument(this.document.removeAttributeAtRange(t2, e2));\n  }\n  removeBlockAttribute(t2) {\n    const e2 = this.getSelectedRange();\n    if (e2)\n      return this.setDocument(this.document.removeAttributeAtRange(t2, e2));\n  }\n  canDecreaseNestingLevel() {\n    var t2;\n    return (null === (t2 = this.getBlock()) || void 0 === t2 ? void 0 : t2.getNestingLevel()) > 0;\n  }\n  canIncreaseNestingLevel() {\n    var t2;\n    const e2 = this.getBlock();\n    if (e2) {\n      if (null === (t2 = gt(e2.getLastNestableAttribute())) || void 0 === t2 || !t2.listAttribute)\n        return e2.getNestingLevel() > 0;\n      {\n        const t3 = this.getPreviousBlock();\n        if (t3)\n          return function() {\n            let t4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n            return rt((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []).slice(0, t4.length), t4);\n          }(t3.getListItemAttributes(), e2.getListItemAttributes());\n      }\n    }\n  }\n  decreaseNestingLevel() {\n    const t2 = this.getBlock();\n    if (t2)\n      return this.setDocument(this.document.replaceBlock(t2, t2.decreaseNestingLevel()));\n  }\n  increaseNestingLevel() {\n    const t2 = this.getBlock();\n    if (t2)\n      return this.setDocument(this.document.replaceBlock(t2, t2.increaseNestingLevel()));\n  }\n  canDecreaseBlockAttributeLevel() {\n    var t2;\n    return (null === (t2 = this.getBlock()) || void 0 === t2 ? void 0 : t2.getAttributeLevel()) > 0;\n  }\n  decreaseBlockAttributeLevel() {\n    var t2;\n    const e2 = null === (t2 = this.getBlock()) || void 0 === t2 ? void 0 : t2.getLastAttribute();\n    if (e2)\n      return this.removeCurrentAttribute(e2);\n  }\n  decreaseListLevel() {\n    let [t2] = Array.from(this.getSelectedRange());\n    const { index: e2 } = this.document.locationFromPosition(t2);\n    let i2 = e2;\n    const n2 = this.getBlock().getAttributeLevel();\n    let r2 = this.document.getBlockAtIndex(i2 + 1);\n    for (; r2 && r2.isListItem() && !(r2.getAttributeLevel() <= n2); )\n      i2++, r2 = this.document.getBlockAtIndex(i2 + 1);\n    t2 = this.document.positionFromLocation({ index: e2, offset: 0 });\n    const o2 = this.document.positionFromLocation({ index: i2, offset: 0 });\n    return this.setDocument(this.document.removeLastListAttributeAtRange([t2, o2]));\n  }\n  updateCurrentAttributes() {\n    const t2 = this.getSelectedRange({ ignoreLock: true });\n    if (t2) {\n      const e2 = this.document.getCommonAttributesAtRange(t2);\n      if (Array.from(dt()).forEach((t3) => {\n        e2[t3] || this.canSetCurrentAttribute(t3) || (e2[t3] = false);\n      }), !kt(e2, this.currentAttributes))\n        return this.currentAttributes = e2, this.notifyDelegateOfCurrentAttributesChange();\n    }\n  }\n  getCurrentAttributes() {\n    return g.call({}, this.currentAttributes);\n  }\n  getCurrentTextAttributes() {\n    const t2 = {};\n    for (const e2 in this.currentAttributes) {\n      const i2 = this.currentAttributes[e2];\n      false !== i2 && pt(e2) && (t2[e2] = i2);\n    }\n    return t2;\n  }\n  freezeSelection() {\n    return this.setCurrentAttribute(\"frozen\", true);\n  }\n  thawSelection() {\n    return this.removeCurrentAttribute(\"frozen\");\n  }\n  hasFrozenSelection() {\n    return this.hasCurrentAttribute(\"frozen\");\n  }\n  setSelection(t2) {\n    var e2;\n    const i2 = this.document.locationRangeFromRange(t2);\n    return null === (e2 = this.delegate) || void 0 === e2 ? void 0 : e2.compositionDidRequestChangingSelectionToLocationRange(i2);\n  }\n  getSelectedRange() {\n    const t2 = this.getLocationRange();\n    if (t2)\n      return this.document.rangeFromLocationRange(t2);\n  }\n  setSelectedRange(t2) {\n    const e2 = this.document.locationRangeFromRange(t2);\n    return this.getSelectionManager().setLocationRange(e2);\n  }\n  getPosition() {\n    const t2 = this.getLocationRange();\n    if (t2)\n      return this.document.positionFromLocation(t2[0]);\n  }\n  getLocationRange(t2) {\n    return this.targetLocationRange ? this.targetLocationRange : this.getSelectionManager().getLocationRange(t2) || Lt({ index: 0, offset: 0 });\n  }\n  withTargetLocationRange(t2, e2) {\n    let i2;\n    this.targetLocationRange = t2;\n    try {\n      i2 = e2();\n    } finally {\n      this.targetLocationRange = null;\n    }\n    return i2;\n  }\n  withTargetRange(t2, e2) {\n    const i2 = this.document.locationRangeFromRange(t2);\n    return this.withTargetLocationRange(i2, e2);\n  }\n  withTargetDOMRange(t2, e2) {\n    const i2 = this.createLocationRangeFromDOMRange(t2, { strict: false });\n    return this.withTargetLocationRange(i2, e2);\n  }\n  getExpandedRangeInDirection(t2) {\n    let { length: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, [i2, n2] = Array.from(this.getSelectedRange());\n    return \"backward\" === t2 ? e2 ? i2 -= e2 : i2 = this.translateUTF16PositionFromOffset(i2, -1) : e2 ? n2 += e2 : n2 = this.translateUTF16PositionFromOffset(n2, 1), Lt([i2, n2]);\n  }\n  shouldManageMovingCursorInDirection(t2) {\n    if (this.editingAttachment)\n      return true;\n    const e2 = this.getExpandedRangeInDirection(t2);\n    return null != this.getAttachmentAtRange(e2);\n  }\n  moveCursorInDirection(t2) {\n    let e2, i2;\n    if (this.editingAttachment)\n      i2 = this.document.getRangeOfAttachment(this.editingAttachment);\n    else {\n      const n2 = this.getSelectedRange();\n      i2 = this.getExpandedRangeInDirection(t2), e2 = !wt(n2, i2);\n    }\n    if (\"backward\" === t2 ? this.setSelectedRange(i2[0]) : this.setSelectedRange(i2[1]), e2) {\n      const t3 = this.getAttachmentAtRange(i2);\n      if (t3)\n        return this.editAttachment(t3);\n    }\n  }\n  expandSelectionInDirection(t2) {\n    let { length: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    const i2 = this.getExpandedRangeInDirection(t2, { length: e2 });\n    return this.setSelectedRange(i2);\n  }\n  expandSelectionForEditing() {\n    if (this.hasCurrentAttribute(\"href\"))\n      return this.expandSelectionAroundCommonAttribute(\"href\");\n  }\n  expandSelectionAroundCommonAttribute(t2) {\n    const e2 = this.getPosition(), i2 = this.document.getRangeOfCommonAttributeAtPosition(t2, e2);\n    return this.setSelectedRange(i2);\n  }\n  selectionContainsAttachments() {\n    var t2;\n    return (null === (t2 = this.getSelectedAttachments()) || void 0 === t2 ? void 0 : t2.length) > 0;\n  }\n  selectionIsInCursorTarget() {\n    return this.editingAttachment || this.positionIsCursorTarget(this.getPosition());\n  }\n  positionIsCursorTarget(t2) {\n    const e2 = this.document.locationFromPosition(t2);\n    if (e2)\n      return this.locationIsCursorTarget(e2);\n  }\n  positionIsBlockBreak(t2) {\n    var e2;\n    return null === (e2 = this.document.getPieceAtPosition(t2)) || void 0 === e2 ? void 0 : e2.isBlockBreak();\n  }\n  getSelectedDocument() {\n    const t2 = this.getSelectedRange();\n    if (t2)\n      return this.document.getDocumentAtRange(t2);\n  }\n  getSelectedAttachments() {\n    var t2;\n    return null === (t2 = this.getSelectedDocument()) || void 0 === t2 ? void 0 : t2.getAttachments();\n  }\n  getAttachments() {\n    return this.attachments.slice(0);\n  }\n  refreshAttachments() {\n    const t2 = this.document.getAttachments(), { added: e2, removed: i2 } = function() {\n      let t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];\n      const i3 = [], n2 = [], r2 = /* @__PURE__ */ new Set();\n      t3.forEach((t4) => {\n        r2.add(t4);\n      });\n      const o2 = /* @__PURE__ */ new Set();\n      return e3.forEach((t4) => {\n        o2.add(t4), r2.has(t4) || i3.push(t4);\n      }), t3.forEach((t4) => {\n        o2.has(t4) || n2.push(t4);\n      }), { added: i3, removed: n2 };\n    }(this.attachments, t2);\n    return this.attachments = t2, Array.from(i2).forEach((t3) => {\n      var e3, i3;\n      t3.delegate = null, null === (e3 = this.delegate) || void 0 === e3 || null === (i3 = e3.compositionDidRemoveAttachment) || void 0 === i3 || i3.call(e3, t3);\n    }), (() => {\n      const t3 = [];\n      return Array.from(e2).forEach((e3) => {\n        var i3, n2;\n        e3.delegate = this, t3.push(null === (i3 = this.delegate) || void 0 === i3 || null === (n2 = i3.compositionDidAddAttachment) || void 0 === n2 ? void 0 : n2.call(i3, e3));\n      }), t3;\n    })();\n  }\n  attachmentDidChangeAttributes(t2) {\n    var e2, i2;\n    return this.revision++, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionDidEditAttachment) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  attachmentDidChangePreviewURL(t2) {\n    var e2, i2;\n    return this.revision++, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionDidChangeAttachmentPreviewURL) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  editAttachment(t2, e2) {\n    var i2, n2;\n    if (t2 !== this.editingAttachment)\n      return this.stopEditingAttachment(), this.editingAttachment = t2, null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.compositionDidStartEditingAttachment) || void 0 === n2 ? void 0 : n2.call(i2, this.editingAttachment, e2);\n  }\n  stopEditingAttachment() {\n    var t2, e2;\n    this.editingAttachment && (null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.compositionDidStopEditingAttachment) || void 0 === e2 || e2.call(t2, this.editingAttachment), this.editingAttachment = null);\n  }\n  updateAttributesForAttachment(t2, e2) {\n    return this.setDocument(this.document.updateAttributesForAttachment(t2, e2));\n  }\n  removeAttributeForAttachment(t2, e2) {\n    return this.setDocument(this.document.removeAttributeForAttachment(t2, e2));\n  }\n  breakFormattedBlock(t2) {\n    let { document: e2 } = t2;\n    const { block: i2 } = t2;\n    let n2 = t2.startPosition, r2 = [n2 - 1, n2];\n    i2.getBlockBreakPosition() === t2.startLocation.offset ? (i2.breaksOnReturn() && \"\\n\" === t2.nextCharacter ? n2 += 1 : e2 = e2.removeTextAtRange(r2), r2 = [n2, n2]) : \"\\n\" === t2.nextCharacter ? \"\\n\" === t2.previousCharacter ? r2 = [n2 - 1, n2 + 1] : (r2 = [n2, n2 + 1], n2 += 1) : t2.startLocation.offset - 1 != 0 && (n2 += 1);\n    const o2 = new qe([i2.removeLastAttribute().copyWithoutText()]);\n    return this.setDocument(e2.insertDocumentAtRange(o2, r2)), this.setSelection(n2);\n  }\n  getPreviousBlock() {\n    const t2 = this.getLocationRange();\n    if (t2) {\n      const { index: e2 } = t2[0];\n      if (e2 > 0)\n        return this.document.getBlockAtIndex(e2 - 1);\n    }\n  }\n  getBlock() {\n    const t2 = this.getLocationRange();\n    if (t2)\n      return this.document.getBlockAtIndex(t2[0].index);\n  }\n  getAttachmentAtRange(t2) {\n    const e2 = this.document.getDocumentAtRange(t2);\n    if (e2.toString() === \"\".concat(\"\", \"\\n\"))\n      return e2.getAttachments()[0];\n  }\n  notifyDelegateOfCurrentAttributesChange() {\n    var t2, e2;\n    return null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.compositionDidChangeCurrentAttributes) || void 0 === e2 ? void 0 : e2.call(t2, this.currentAttributes);\n  }\n  notifyDelegateOfInsertionAtRange(t2) {\n    var e2, i2;\n    return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionDidPerformInsertionAtRange) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  translateUTF16PositionFromOffset(t2, e2) {\n    const i2 = this.document.toUTF16String(), n2 = i2.offsetFromUCS2Offset(t2);\n    return i2.offsetToUCS2Offset(n2 + e2);\n  }\n};\ngi.proxyMethod(\"getSelectionManager().getPointRange\"), gi.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\"), gi.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\"), gi.proxyMethod(\"getSelectionManager().locationIsCursorTarget\"), gi.proxyMethod(\"getSelectionManager().selectionIsExpanded\"), gi.proxyMethod(\"delegate?.getSelectionManager\");\nvar mi = class extends z {\n  constructor(t2) {\n    super(...arguments), this.composition = t2, this.undoEntries = [], this.redoEntries = [];\n  }\n  recordUndoEntry(t2) {\n    let { context: e2, consolidatable: i2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    const n2 = this.undoEntries.slice(-1)[0];\n    if (!i2 || !pi(n2, t2, e2)) {\n      const i3 = this.createEntry({ description: t2, context: e2 });\n      this.undoEntries.push(i3), this.redoEntries = [];\n    }\n  }\n  undo() {\n    const t2 = this.undoEntries.pop();\n    if (t2) {\n      const e2 = this.createEntry(t2);\n      return this.redoEntries.push(e2), this.composition.loadSnapshot(t2.snapshot);\n    }\n  }\n  redo() {\n    const t2 = this.redoEntries.pop();\n    if (t2) {\n      const e2 = this.createEntry(t2);\n      return this.undoEntries.push(e2), this.composition.loadSnapshot(t2.snapshot);\n    }\n  }\n  canUndo() {\n    return this.undoEntries.length > 0;\n  }\n  canRedo() {\n    return this.redoEntries.length > 0;\n  }\n  createEntry() {\n    let { description: t2, context: e2 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    return { description: null == t2 ? void 0 : t2.toString(), context: JSON.stringify(e2), snapshot: this.composition.getSnapshot() };\n  }\n};\nvar pi = (t2, e2, i2) => (null == t2 ? void 0 : t2.description) === (null == e2 ? void 0 : e2.toString()) && (null == t2 ? void 0 : t2.context) === JSON.stringify(i2);\nvar fi = \"attachmentGallery\";\nvar bi = class {\n  constructor(t2) {\n    this.document = t2.document, this.selectedRange = t2.selectedRange;\n  }\n  perform() {\n    return this.removeBlockAttribute(), this.applyBlockAttribute();\n  }\n  getSnapshot() {\n    return { document: this.document, selectedRange: this.selectedRange };\n  }\n  removeBlockAttribute() {\n    return this.findRangesOfBlocks().map((t2) => this.document = this.document.removeAttributeAtRange(fi, t2));\n  }\n  applyBlockAttribute() {\n    let t2 = 0;\n    this.findRangesOfPieces().forEach((e2) => {\n      e2[1] - e2[0] > 1 && (e2[0] += t2, e2[1] += t2, \"\\n\" !== this.document.getCharacterAtPosition(e2[1]) && (this.document = this.document.insertBlockBreakAtRange(e2[1]), e2[1] < this.selectedRange[1] && this.moveSelectedRangeForward(), e2[1]++, t2++), 0 !== e2[0] && \"\\n\" !== this.document.getCharacterAtPosition(e2[0] - 1) && (this.document = this.document.insertBlockBreakAtRange(e2[0]), e2[0] < this.selectedRange[0] && this.moveSelectedRangeForward(), e2[0]++, t2++), this.document = this.document.applyBlockAttributeAtRange(fi, true, e2));\n    });\n  }\n  findRangesOfBlocks() {\n    return this.document.findRangesForBlockAttribute(fi);\n  }\n  findRangesOfPieces() {\n    return this.document.findRangesForTextAttribute(\"presentation\", { withValue: \"gallery\" });\n  }\n  moveSelectedRangeForward() {\n    this.selectedRange[0] += 1, this.selectedRange[1] += 1;\n  }\n};\nvar vi = function(t2) {\n  const e2 = new bi(t2);\n  return e2.perform(), e2.getSnapshot();\n};\nvar Ai = [vi];\nvar xi = class {\n  constructor(t2, e2, i2) {\n    this.insertFiles = this.insertFiles.bind(this), this.composition = t2, this.selectionManager = e2, this.element = i2, this.undoManager = new mi(this.composition), this.filters = Ai.slice(0);\n  }\n  loadDocument(t2) {\n    return this.loadSnapshot({ document: t2, selectedRange: [0, 0] });\n  }\n  loadHTML() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\";\n    const e2 = Xe.parse(t2, { referenceElement: this.element }).getDocument();\n    return this.loadDocument(e2);\n  }\n  loadJSON(t2) {\n    let { document: e2, selectedRange: i2 } = t2;\n    return e2 = qe.fromJSON(e2), this.loadSnapshot({ document: e2, selectedRange: i2 });\n  }\n  loadSnapshot(t2) {\n    return this.undoManager = new mi(this.composition), this.composition.loadSnapshot(t2);\n  }\n  getDocument() {\n    return this.composition.document;\n  }\n  getSelectedDocument() {\n    return this.composition.getSelectedDocument();\n  }\n  getSnapshot() {\n    return this.composition.getSnapshot();\n  }\n  toJSON() {\n    return this.getSnapshot();\n  }\n  deleteInDirection(t2) {\n    return this.composition.deleteInDirection(t2);\n  }\n  insertAttachment(t2) {\n    return this.composition.insertAttachment(t2);\n  }\n  insertAttachments(t2) {\n    return this.composition.insertAttachments(t2);\n  }\n  insertDocument(t2) {\n    return this.composition.insertDocument(t2);\n  }\n  insertFile(t2) {\n    return this.composition.insertFile(t2);\n  }\n  insertFiles(t2) {\n    return this.composition.insertFiles(t2);\n  }\n  insertHTML(t2) {\n    return this.composition.insertHTML(t2);\n  }\n  insertString(t2) {\n    return this.composition.insertString(t2);\n  }\n  insertText(t2) {\n    return this.composition.insertText(t2);\n  }\n  insertLineBreak() {\n    return this.composition.insertLineBreak();\n  }\n  getSelectedRange() {\n    return this.composition.getSelectedRange();\n  }\n  getPosition() {\n    return this.composition.getPosition();\n  }\n  getClientRectAtPosition(t2) {\n    const e2 = this.getDocument().locationRangeFromRange([t2, t2 + 1]);\n    return this.selectionManager.getClientRectAtLocationRange(e2);\n  }\n  expandSelectionInDirection(t2) {\n    return this.composition.expandSelectionInDirection(t2);\n  }\n  moveCursorInDirection(t2) {\n    return this.composition.moveCursorInDirection(t2);\n  }\n  setSelectedRange(t2) {\n    return this.composition.setSelectedRange(t2);\n  }\n  activateAttribute(t2) {\n    let e2 = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1];\n    return this.composition.setCurrentAttribute(t2, e2);\n  }\n  attributeIsActive(t2) {\n    return this.composition.hasCurrentAttribute(t2);\n  }\n  canActivateAttribute(t2) {\n    return this.composition.canSetCurrentAttribute(t2);\n  }\n  deactivateAttribute(t2) {\n    return this.composition.removeCurrentAttribute(t2);\n  }\n  canDecreaseNestingLevel() {\n    return this.composition.canDecreaseNestingLevel();\n  }\n  canIncreaseNestingLevel() {\n    return this.composition.canIncreaseNestingLevel();\n  }\n  decreaseNestingLevel() {\n    if (this.canDecreaseNestingLevel())\n      return this.composition.decreaseNestingLevel();\n  }\n  increaseNestingLevel() {\n    if (this.canIncreaseNestingLevel())\n      return this.composition.increaseNestingLevel();\n  }\n  canRedo() {\n    return this.undoManager.canRedo();\n  }\n  canUndo() {\n    return this.undoManager.canUndo();\n  }\n  recordUndoEntry(t2) {\n    let { context: e2, consolidatable: i2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n    return this.undoManager.recordUndoEntry(t2, { context: e2, consolidatable: i2 });\n  }\n  redo() {\n    if (this.canRedo())\n      return this.undoManager.redo();\n  }\n  undo() {\n    if (this.canUndo())\n      return this.undoManager.undo();\n  }\n};\nvar yi = class {\n  constructor(t2) {\n    this.element = t2;\n  }\n  findLocationFromContainerAndOffset(t2, e2) {\n    let { strict: i2 } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { strict: true }, n2 = 0, r2 = false;\n    const o2 = { index: 0, offset: 0 }, s2 = this.findAttachmentElementParentForNode(t2);\n    s2 && (t2 = s2.parentNode, e2 = C(s2));\n    const a2 = S(this.element, { usingFilter: Ei });\n    for (; a2.nextNode(); ) {\n      const s3 = a2.currentNode;\n      if (s3 === t2 && O(t2)) {\n        I(s3) || (o2.offset += e2);\n        break;\n      }\n      if (s3.parentNode === t2) {\n        if (n2++ === e2)\n          break;\n      } else if (!y(t2, s3) && n2 > 0)\n        break;\n      T(s3, { strict: i2 }) ? (r2 && o2.index++, o2.offset = 0, r2 = true) : o2.offset += Ci(s3);\n    }\n    return o2;\n  }\n  findContainerAndOffsetFromLocation(t2) {\n    let e2, i2;\n    if (0 === t2.index && 0 === t2.offset) {\n      for (e2 = this.element, i2 = 0; e2.firstChild; )\n        if (e2 = e2.firstChild, w(e2)) {\n          i2 = 1;\n          break;\n        }\n      return [e2, i2];\n    }\n    let [n2, r2] = this.findNodeAndOffsetFromLocation(t2);\n    if (n2) {\n      if (O(n2))\n        0 === Ci(n2) ? (e2 = n2.parentNode.parentNode, i2 = C(n2.parentNode), I(n2, { name: \"right\" }) && i2++) : (e2 = n2, i2 = t2.offset - r2);\n      else {\n        if (e2 = n2.parentNode, !T(n2.previousSibling) && !w(e2))\n          for (; n2 === e2.lastChild && (n2 = e2, e2 = e2.parentNode, !w(e2)); )\n            ;\n        i2 = C(n2), 0 !== t2.offset && i2++;\n      }\n      return [e2, i2];\n    }\n  }\n  findNodeAndOffsetFromLocation(t2) {\n    let e2, i2, n2 = 0;\n    for (const r2 of this.getSignificantNodesForIndex(t2.index)) {\n      const o2 = Ci(r2);\n      if (t2.offset <= n2 + o2)\n        if (O(r2)) {\n          if (e2 = r2, i2 = n2, t2.offset === i2 && I(e2))\n            break;\n        } else\n          e2 || (e2 = r2, i2 = n2);\n      if (n2 += o2, n2 > t2.offset)\n        break;\n    }\n    return [e2, i2];\n  }\n  findAttachmentElementParentForNode(t2) {\n    for (; t2 && t2 !== this.element; ) {\n      if (P(t2))\n        return t2;\n      t2 = t2.parentNode;\n    }\n  }\n  getSignificantNodesForIndex(t2) {\n    const e2 = [], i2 = S(this.element, { usingFilter: Ri });\n    let n2 = false;\n    for (; i2.nextNode(); ) {\n      const o2 = i2.currentNode;\n      var r2;\n      if (B(o2)) {\n        if (null != r2 ? r2++ : r2 = 0, r2 === t2)\n          n2 = true;\n        else if (n2)\n          break;\n      } else\n        n2 && e2.push(o2);\n    }\n    return e2;\n  }\n};\nvar Ci = function(t2) {\n  if (t2.nodeType === Node.TEXT_NODE) {\n    if (I(t2))\n      return 0;\n    return t2.textContent.length;\n  }\n  return \"br\" === E(t2) || P(t2) ? 1 : 0;\n};\nvar Ri = function(t2) {\n  return Si(t2) === NodeFilter.FILTER_ACCEPT ? Ei(t2) : NodeFilter.FILTER_REJECT;\n};\nvar Si = function(t2) {\n  return N(t2) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n};\nvar Ei = function(t2) {\n  return P(t2.parentNode) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n};\nvar ki = class {\n  createDOMRangeFromPoint(t2) {\n    let e2, { x: i2, y: n2 } = t2;\n    if (document.caretPositionFromPoint) {\n      const { offsetNode: t3, offset: r2 } = document.caretPositionFromPoint(i2, n2);\n      return e2 = document.createRange(), e2.setStart(t3, r2), e2;\n    }\n    if (document.caretRangeFromPoint)\n      return document.caretRangeFromPoint(i2, n2);\n    if (document.body.createTextRange) {\n      const t3 = Nt();\n      try {\n        const t4 = document.body.createTextRange();\n        t4.moveToPoint(i2, n2), t4.select();\n      } catch (t4) {\n      }\n      return e2 = Nt(), Ot(t3), e2;\n    }\n  }\n  getClientRectsForDOMRange(t2) {\n    const e2 = Array.from(t2.getClientRects());\n    return [e2[0], e2[e2.length - 1]];\n  }\n};\nvar Li = class extends z {\n  constructor(t2) {\n    super(...arguments), this.didMouseDown = this.didMouseDown.bind(this), this.selectionDidChange = this.selectionDidChange.bind(this), this.element = t2, this.locationMapper = new yi(this.element), this.pointMapper = new ki(), this.lockCount = 0, f(\"mousedown\", { onElement: this.element, withCallback: this.didMouseDown });\n  }\n  getLocationRange() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    return false === t2.strict ? this.createLocationRangeFromDOMRange(Nt()) : t2.ignoreLock ? this.currentLocationRange : this.lockedLocationRange ? this.lockedLocationRange : this.currentLocationRange;\n  }\n  setLocationRange(t2) {\n    if (this.lockedLocationRange)\n      return;\n    t2 = Lt(t2);\n    const e2 = this.createDOMRangeFromLocationRange(t2);\n    e2 && (Ot(e2), this.updateCurrentLocationRange(t2));\n  }\n  setLocationRangeFromPointRange(t2) {\n    t2 = Lt(t2);\n    const e2 = this.getLocationAtPoint(t2[0]), i2 = this.getLocationAtPoint(t2[1]);\n    this.setLocationRange([e2, i2]);\n  }\n  getClientRectAtLocationRange(t2) {\n    const e2 = this.createDOMRangeFromLocationRange(t2);\n    if (e2)\n      return this.getClientRectsForDOMRange(e2)[1];\n  }\n  locationIsCursorTarget(t2) {\n    const e2 = Array.from(this.findNodeAndOffsetFromLocation(t2))[0];\n    return I(e2);\n  }\n  lock() {\n    0 == this.lockCount++ && (this.updateCurrentLocationRange(), this.lockedLocationRange = this.getLocationRange());\n  }\n  unlock() {\n    if (0 == --this.lockCount) {\n      const { lockedLocationRange: t2 } = this;\n      if (this.lockedLocationRange = null, null != t2)\n        return this.setLocationRange(t2);\n    }\n  }\n  clearSelection() {\n    var t2;\n    return null === (t2 = Pt()) || void 0 === t2 ? void 0 : t2.removeAllRanges();\n  }\n  selectionIsCollapsed() {\n    var t2;\n    return true === (null === (t2 = Nt()) || void 0 === t2 ? void 0 : t2.collapsed);\n  }\n  selectionIsExpanded() {\n    return !this.selectionIsCollapsed();\n  }\n  createLocationRangeFromDOMRange(t2, e2) {\n    if (null == t2 || !this.domRangeWithinElement(t2))\n      return;\n    const i2 = this.findLocationFromContainerAndOffset(t2.startContainer, t2.startOffset, e2);\n    if (!i2)\n      return;\n    const n2 = t2.collapsed ? void 0 : this.findLocationFromContainerAndOffset(t2.endContainer, t2.endOffset, e2);\n    return Lt([i2, n2]);\n  }\n  didMouseDown() {\n    return this.pauseTemporarily();\n  }\n  pauseTemporarily() {\n    let t2;\n    this.paused = true;\n    const e2 = () => {\n      if (this.paused = false, clearTimeout(i2), Array.from(t2).forEach((t3) => {\n        t3.destroy();\n      }), y(document, this.element))\n        return this.selectionDidChange();\n    }, i2 = setTimeout(e2, 200);\n    t2 = [\"mousemove\", \"keydown\"].map((t3) => f(t3, { onElement: document, withCallback: e2 }));\n  }\n  selectionDidChange() {\n    if (!this.paused && !x(this.element))\n      return this.updateCurrentLocationRange();\n  }\n  updateCurrentLocationRange(t2) {\n    var e2, i2;\n    if ((null != t2 ? t2 : t2 = this.createLocationRangeFromDOMRange(Nt())) && !wt(t2, this.currentLocationRange))\n      return this.currentLocationRange = t2, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.locationRangeDidChange) || void 0 === i2 ? void 0 : i2.call(e2, this.currentLocationRange.slice(0));\n  }\n  createDOMRangeFromLocationRange(t2) {\n    const e2 = this.findContainerAndOffsetFromLocation(t2[0]), i2 = Dt(t2) ? e2 : this.findContainerAndOffsetFromLocation(t2[1]) || e2;\n    if (null != e2 && null != i2) {\n      const t3 = document.createRange();\n      return t3.setStart(...Array.from(e2 || [])), t3.setEnd(...Array.from(i2 || [])), t3;\n    }\n  }\n  getLocationAtPoint(t2) {\n    const e2 = this.createDOMRangeFromPoint(t2);\n    var i2;\n    if (e2)\n      return null === (i2 = this.createLocationRangeFromDOMRange(e2)) || void 0 === i2 ? void 0 : i2[0];\n  }\n  domRangeWithinElement(t2) {\n    return t2.collapsed ? y(this.element, t2.startContainer) : y(this.element, t2.startContainer) && y(this.element, t2.endContainer);\n  }\n};\nLi.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\"), Li.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\"), Li.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\"), Li.proxyMethod(\"pointMapper.createDOMRangeFromPoint\"), Li.proxyMethod(\"pointMapper.getClientRectsForDOMRange\");\nvar Di = Object.freeze({ __proto__: null, Attachment: Re, AttachmentManager: ui, AttachmentPiece: Se, Block: Be, Composition: gi, Document: qe, Editor: xi, HTMLParser: Xe, HTMLSanitizer: Je, LineBreakInsertion: di, LocationMapper: yi, ManagedAttachment: hi, Piece: ye, PointMapper: ki, SelectionManager: Li, SplittableList: ke, StringPiece: Ee, Text: Te, UndoManager: mi });\nvar wi = Object.freeze({ __proto__: null, ObjectView: ee, AttachmentView: re, BlockView: de, DocumentView: ge, PieceView: le, PreviewableAttachmentView: ae, TextView: ce });\nvar { lang: Ti, css: Bi, keyNames: Fi } = V;\nvar Ii = function(t2) {\n  return function() {\n    const e2 = t2.apply(this, arguments);\n    e2.do(), this.undos || (this.undos = []), this.undos.push(e2.undo);\n  };\n};\nvar Pi = class extends z {\n  constructor(t2, e2, i2) {\n    let n2 = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};\n    super(...arguments), Ae(this, \"makeElementMutable\", Ii(() => ({ do: () => {\n      this.element.dataset.trixMutable = true;\n    }, undo: () => delete this.element.dataset.trixMutable }))), Ae(this, \"addToolbar\", Ii(() => {\n      const t3 = k({ tagName: \"div\", className: Bi.attachmentToolbar, data: { trixMutable: true }, childNodes: k({ tagName: \"div\", className: \"trix-button-row\", childNodes: k({ tagName: \"span\", className: \"trix-button-group trix-button-group--actions\", childNodes: k({ tagName: \"button\", className: \"trix-button trix-button--remove\", textContent: Ti.remove, attributes: { title: Ti.remove }, data: { trixAction: \"remove\" } }) }) }) });\n      return this.attachment.isPreviewable() && t3.appendChild(k({ tagName: \"div\", className: Bi.attachmentMetadataContainer, childNodes: k({ tagName: \"span\", className: Bi.attachmentMetadata, childNodes: [k({ tagName: \"span\", className: Bi.attachmentName, textContent: this.attachment.getFilename(), attributes: { title: this.attachment.getFilename() } }), k({ tagName: \"span\", className: Bi.attachmentSize, textContent: this.attachment.getFormattedFilesize() })] }) })), f(\"click\", { onElement: t3, withCallback: this.didClickToolbar }), f(\"click\", { onElement: t3, matchingSelector: \"[data-trix-action]\", withCallback: this.didClickActionButton }), b(\"trix-attachment-before-toolbar\", { onElement: this.element, attributes: { toolbar: t3, attachment: this.attachment } }), { do: () => this.element.appendChild(t3), undo: () => R(t3) };\n    })), Ae(this, \"installCaptionEditor\", Ii(() => {\n      const t3 = k({ tagName: \"textarea\", className: Bi.attachmentCaptionEditor, attributes: { placeholder: Ti.captionPlaceholder }, data: { trixMutable: true } });\n      t3.value = this.attachmentPiece.getCaption();\n      const e3 = t3.cloneNode();\n      e3.classList.add(\"trix-autoresize-clone\"), e3.tabIndex = -1;\n      const i3 = function() {\n        e3.value = t3.value, t3.style.height = e3.scrollHeight + \"px\";\n      };\n      f(\"input\", { onElement: t3, withCallback: i3 }), f(\"input\", { onElement: t3, withCallback: this.didInputCaption }), f(\"keydown\", { onElement: t3, withCallback: this.didKeyDownCaption }), f(\"change\", { onElement: t3, withCallback: this.didChangeCaption }), f(\"blur\", { onElement: t3, withCallback: this.didBlurCaption });\n      const n3 = this.element.querySelector(\"figcaption\"), r2 = n3.cloneNode();\n      return { do: () => {\n        if (n3.style.display = \"none\", r2.appendChild(t3), r2.appendChild(e3), r2.classList.add(\"\".concat(Bi.attachmentCaption, \"--editing\")), n3.parentElement.insertBefore(r2, n3), i3(), this.options.editCaption)\n          return St(() => t3.focus());\n      }, undo() {\n        R(r2), n3.style.display = null;\n      } };\n    })), this.didClickToolbar = this.didClickToolbar.bind(this), this.didClickActionButton = this.didClickActionButton.bind(this), this.didKeyDownCaption = this.didKeyDownCaption.bind(this), this.didInputCaption = this.didInputCaption.bind(this), this.didChangeCaption = this.didChangeCaption.bind(this), this.didBlurCaption = this.didBlurCaption.bind(this), this.attachmentPiece = t2, this.element = e2, this.container = i2, this.options = n2, this.attachment = this.attachmentPiece.attachment, \"a\" === E(this.element) && (this.element = this.element.firstChild), this.install();\n  }\n  install() {\n    this.makeElementMutable(), this.addToolbar(), this.attachment.isPreviewable() && this.installCaptionEditor();\n  }\n  uninstall() {\n    var t2;\n    let e2 = this.undos.pop();\n    for (this.savePendingCaption(); e2; )\n      e2(), e2 = this.undos.pop();\n    null === (t2 = this.delegate) || void 0 === t2 || t2.didUninstallAttachmentEditor(this);\n  }\n  savePendingCaption() {\n    if (null != this.pendingCaption) {\n      const r2 = this.pendingCaption;\n      var t2, e2, i2, n2;\n      if (this.pendingCaption = null, r2)\n        null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.attachmentEditorDidRequestUpdatingAttributesForAttachment) || void 0 === e2 || e2.call(t2, { caption: r2 }, this.attachment);\n      else\n        null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.attachmentEditorDidRequestRemovingAttributeForAttachment) || void 0 === n2 || n2.call(i2, \"caption\", this.attachment);\n    }\n  }\n  didClickToolbar(t2) {\n    return t2.preventDefault(), t2.stopPropagation();\n  }\n  didClickActionButton(t2) {\n    var e2;\n    if (\"remove\" === t2.target.getAttribute(\"data-trix-action\"))\n      return null === (e2 = this.delegate) || void 0 === e2 ? void 0 : e2.attachmentEditorDidRequestRemovalOfAttachment(this.attachment);\n  }\n  didKeyDownCaption(t2) {\n    var e2, i2;\n    if (\"return\" === Fi[t2.keyCode])\n      return t2.preventDefault(), this.savePendingCaption(), null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.attachmentEditorDidRequestDeselectingAttachment) || void 0 === i2 ? void 0 : i2.call(e2, this.attachment);\n  }\n  didInputCaption(t2) {\n    this.pendingCaption = t2.target.value.replace(/\\s/g, \" \").trim();\n  }\n  didChangeCaption(t2) {\n    return this.savePendingCaption();\n  }\n  didBlurCaption(t2) {\n    return this.savePendingCaption();\n  }\n};\nvar Ni = class extends z {\n  constructor(t2, i2) {\n    super(...arguments), this.didFocus = this.didFocus.bind(this), this.didBlur = this.didBlur.bind(this), this.didClickAttachment = this.didClickAttachment.bind(this), this.element = t2, this.composition = i2, this.documentView = new ge(this.composition.document, { element: this.element }), f(\"focus\", { onElement: this.element, withCallback: this.didFocus }), f(\"blur\", { onElement: this.element, withCallback: this.didBlur }), f(\"click\", { onElement: this.element, matchingSelector: \"a[contenteditable=false]\", preventDefault: true }), f(\"mousedown\", { onElement: this.element, matchingSelector: e, withCallback: this.didClickAttachment }), f(\"click\", { onElement: this.element, matchingSelector: \"a\".concat(e), preventDefault: true });\n  }\n  didFocus(t2) {\n    var e2;\n    const i2 = () => {\n      var t3, e3;\n      if (!this.focused)\n        return this.focused = true, null === (t3 = this.delegate) || void 0 === t3 || null === (e3 = t3.compositionControllerDidFocus) || void 0 === e3 ? void 0 : e3.call(t3);\n    };\n    return (null === (e2 = this.blurPromise) || void 0 === e2 ? void 0 : e2.then(i2)) || i2();\n  }\n  didBlur(t2) {\n    this.blurPromise = new Promise((t3) => St(() => {\n      var e2, i2;\n      x(this.element) || (this.focused = null, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionControllerDidBlur) || void 0 === i2 || i2.call(e2));\n      return this.blurPromise = null, t3();\n    }));\n  }\n  didClickAttachment(t2, e2) {\n    var i2, n2;\n    const r2 = this.findAttachmentForElement(e2), o2 = !!A(t2.target, { matchingSelector: \"figcaption\" });\n    return null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.compositionControllerDidSelectAttachment) || void 0 === n2 ? void 0 : n2.call(i2, r2, { editCaption: o2 });\n  }\n  getSerializableElement() {\n    return this.isEditingAttachment() ? this.documentView.shadowElement : this.element;\n  }\n  render() {\n    var t2, e2, i2, n2, r2, o2;\n    (this.revision !== this.composition.revision && (this.documentView.setDocument(this.composition.document), this.documentView.render(), this.revision = this.composition.revision), this.canSyncDocumentView() && !this.documentView.isSynced()) && (null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.compositionControllerWillSyncDocumentView) || void 0 === n2 || n2.call(i2), this.documentView.sync(), null === (r2 = this.delegate) || void 0 === r2 || null === (o2 = r2.compositionControllerDidSyncDocumentView) || void 0 === o2 || o2.call(r2));\n    return null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.compositionControllerDidRender) || void 0 === e2 ? void 0 : e2.call(t2);\n  }\n  rerenderViewForObject(t2) {\n    return this.invalidateViewForObject(t2), this.render();\n  }\n  invalidateViewForObject(t2) {\n    return this.documentView.invalidateViewForObject(t2);\n  }\n  isViewCachingEnabled() {\n    return this.documentView.isViewCachingEnabled();\n  }\n  enableViewCaching() {\n    return this.documentView.enableViewCaching();\n  }\n  disableViewCaching() {\n    return this.documentView.disableViewCaching();\n  }\n  refreshViewCache() {\n    return this.documentView.garbageCollectCachedViews();\n  }\n  isEditingAttachment() {\n    return !!this.attachmentEditor;\n  }\n  installAttachmentEditorForAttachment(t2, e2) {\n    var i2;\n    if ((null === (i2 = this.attachmentEditor) || void 0 === i2 ? void 0 : i2.attachment) === t2)\n      return;\n    const n2 = this.documentView.findElementForObject(t2);\n    if (!n2)\n      return;\n    this.uninstallAttachmentEditor();\n    const r2 = this.composition.document.getAttachmentPieceForAttachment(t2);\n    this.attachmentEditor = new Pi(r2, n2, this.element, e2), this.attachmentEditor.delegate = this;\n  }\n  uninstallAttachmentEditor() {\n    var t2;\n    return null === (t2 = this.attachmentEditor) || void 0 === t2 ? void 0 : t2.uninstall();\n  }\n  didUninstallAttachmentEditor() {\n    return this.attachmentEditor = null, this.render();\n  }\n  attachmentEditorDidRequestUpdatingAttributesForAttachment(t2, e2) {\n    var i2, n2;\n    return null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.compositionControllerWillUpdateAttachment) || void 0 === n2 || n2.call(i2, e2), this.composition.updateAttributesForAttachment(t2, e2);\n  }\n  attachmentEditorDidRequestRemovingAttributeForAttachment(t2, e2) {\n    var i2, n2;\n    return null === (i2 = this.delegate) || void 0 === i2 || null === (n2 = i2.compositionControllerWillUpdateAttachment) || void 0 === n2 || n2.call(i2, e2), this.composition.removeAttributeForAttachment(t2, e2);\n  }\n  attachmentEditorDidRequestRemovalOfAttachment(t2) {\n    var e2, i2;\n    return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionControllerDidRequestRemovalOfAttachment) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  attachmentEditorDidRequestDeselectingAttachment(t2) {\n    var e2, i2;\n    return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.compositionControllerDidRequestDeselectingAttachment) || void 0 === i2 ? void 0 : i2.call(e2, t2);\n  }\n  canSyncDocumentView() {\n    return !this.isEditingAttachment();\n  }\n  findAttachmentForElement(t2) {\n    return this.composition.document.getAttachmentById(parseInt(t2.dataset.trixId, 10));\n  }\n};\nvar Oi = class extends z {\n};\nvar Mi = \"data-trix-mutable\";\nvar ji = \"[\".concat(Mi, \"]\");\nvar Wi = { attributes: true, childList: true, characterData: true, characterDataOldValue: true, subtree: true };\nvar Ui = class extends z {\n  constructor(t2) {\n    super(t2), this.didMutate = this.didMutate.bind(this), this.element = t2, this.observer = new window.MutationObserver(this.didMutate), this.start();\n  }\n  start() {\n    return this.reset(), this.observer.observe(this.element, Wi);\n  }\n  stop() {\n    return this.observer.disconnect();\n  }\n  didMutate(t2) {\n    var e2, i2;\n    if (this.mutations.push(...Array.from(this.findSignificantMutations(t2) || [])), this.mutations.length)\n      return null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.elementDidMutate) || void 0 === i2 || i2.call(e2, this.getMutationSummary()), this.reset();\n  }\n  reset() {\n    this.mutations = [];\n  }\n  findSignificantMutations(t2) {\n    return t2.filter((t3) => this.mutationIsSignificant(t3));\n  }\n  mutationIsSignificant(t2) {\n    if (this.nodeIsMutable(t2.target))\n      return false;\n    for (const e2 of Array.from(this.nodesModifiedByMutation(t2)))\n      if (this.nodeIsSignificant(e2))\n        return true;\n    return false;\n  }\n  nodeIsSignificant(t2) {\n    return t2 !== this.element && !this.nodeIsMutable(t2) && !N(t2);\n  }\n  nodeIsMutable(t2) {\n    return A(t2, { matchingSelector: ji });\n  }\n  nodesModifiedByMutation(t2) {\n    const e2 = [];\n    switch (t2.type) {\n      case \"attributes\":\n        t2.attributeName !== Mi && e2.push(t2.target);\n        break;\n      case \"characterData\":\n        e2.push(t2.target.parentNode), e2.push(t2.target);\n        break;\n      case \"childList\":\n        e2.push(...Array.from(t2.addedNodes || [])), e2.push(...Array.from(t2.removedNodes || []));\n    }\n    return e2;\n  }\n  getMutationSummary() {\n    return this.getTextMutationSummary();\n  }\n  getTextMutationSummary() {\n    const { additions: t2, deletions: e2 } = this.getTextChangesFromCharacterData(), i2 = this.getTextChangesFromChildList();\n    Array.from(i2.additions).forEach((e3) => {\n      Array.from(t2).includes(e3) || t2.push(e3);\n    }), e2.push(...Array.from(i2.deletions || []));\n    const n2 = {}, r2 = t2.join(\"\");\n    r2 && (n2.textAdded = r2);\n    const o2 = e2.join(\"\");\n    return o2 && (n2.textDeleted = o2), n2;\n  }\n  getMutationsByType(t2) {\n    return Array.from(this.mutations).filter((e2) => e2.type === t2);\n  }\n  getTextChangesFromChildList() {\n    let t2, e2;\n    const i2 = [], n2 = [];\n    Array.from(this.getMutationsByType(\"childList\")).forEach((t3) => {\n      i2.push(...Array.from(t3.addedNodes || [])), n2.push(...Array.from(t3.removedNodes || []));\n    });\n    0 === i2.length && 1 === n2.length && B(n2[0]) ? (t2 = [], e2 = [\"\\n\"]) : (t2 = qi(i2), e2 = qi(n2));\n    return { additions: t2.filter((t3, i3) => t3 !== e2[i3]).map(Wt), deletions: e2.filter((e3, i3) => e3 !== t2[i3]).map(Wt) };\n  }\n  getTextChangesFromCharacterData() {\n    let t2, e2;\n    const i2 = this.getMutationsByType(\"characterData\");\n    if (i2.length) {\n      const n2 = i2[0], r2 = i2[i2.length - 1], o2 = function(t3, e3) {\n        let i3, n3;\n        return t3 = X.box(t3), (e3 = X.box(e3)).length < t3.length ? [n3, i3] = Vt(t3, e3) : [i3, n3] = Vt(e3, t3), { added: i3, removed: n3 };\n      }(Wt(n2.oldValue), Wt(r2.target.data));\n      t2 = o2.added, e2 = o2.removed;\n    }\n    return { additions: t2 ? [t2] : [], deletions: e2 ? [e2] : [] };\n  }\n};\nvar qi = function() {\n  let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];\n  const e2 = [];\n  for (const i2 of Array.from(t2))\n    switch (i2.nodeType) {\n      case Node.TEXT_NODE:\n        e2.push(i2.data);\n        break;\n      case Node.ELEMENT_NODE:\n        \"br\" === E(i2) ? e2.push(\"\\n\") : e2.push(...Array.from(qi(i2.childNodes) || []));\n    }\n  return e2;\n};\nvar Vi = class extends te {\n  constructor(t2) {\n    super(...arguments), this.file = t2;\n  }\n  perform(t2) {\n    const e2 = new FileReader();\n    return e2.onerror = () => t2(false), e2.onload = () => {\n      e2.onerror = null;\n      try {\n        e2.abort();\n      } catch (t3) {\n      }\n      return t2(true, this.file);\n    }, e2.readAsArrayBuffer(this.file);\n  }\n};\nvar zi = class {\n  constructor(t2) {\n    this.element = t2;\n  }\n  shouldIgnore(t2) {\n    return !!a.samsungAndroid && (this.previousEvent = this.event, this.event = t2, this.checkSamsungKeyboardBuggyModeStart(), this.checkSamsungKeyboardBuggyModeEnd(), this.buggyMode);\n  }\n  checkSamsungKeyboardBuggyModeStart() {\n    this.insertingLongTextAfterUnidentifiedChar() && _i(this.element.innerText, this.event.data) && (this.buggyMode = true, this.event.preventDefault());\n  }\n  checkSamsungKeyboardBuggyModeEnd() {\n    this.buggyMode && \"insertText\" !== this.event.inputType && (this.buggyMode = false);\n  }\n  insertingLongTextAfterUnidentifiedChar() {\n    var t2;\n    return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && (null === (t2 = this.event.data) || void 0 === t2 ? void 0 : t2.length) > 50;\n  }\n  isBeforeInputInsertText() {\n    return \"beforeinput\" === this.event.type && \"insertText\" === this.event.inputType;\n  }\n  previousEventWasUnidentifiedKeydown() {\n    var t2, e2;\n    return \"keydown\" === (null === (t2 = this.previousEvent) || void 0 === t2 ? void 0 : t2.type) && \"Unidentified\" === (null === (e2 = this.previousEvent) || void 0 === e2 ? void 0 : e2.key);\n  }\n};\nvar _i = (t2, e2) => Ji(t2) === Ji(e2);\nvar Hi = new RegExp(\"(\".concat(\"\", \"|\").concat(u, \"|\").concat(d, \"|\\\\s)+\"), \"g\");\nvar Ji = (t2) => t2.replace(Hi, \" \").trim();\nvar Ki = class extends z {\n  constructor(t2) {\n    super(...arguments), this.element = t2, this.mutationObserver = new Ui(this.element), this.mutationObserver.delegate = this, this.flakyKeyboardDetector = new zi(this.element);\n    for (const t3 in this.constructor.events)\n      f(t3, { onElement: this.element, withCallback: this.handlerFor(t3) });\n  }\n  elementDidMutate(t2) {\n  }\n  editorWillSyncDocumentView() {\n    return this.mutationObserver.stop();\n  }\n  editorDidSyncDocumentView() {\n    return this.mutationObserver.start();\n  }\n  requestRender() {\n    var t2, e2;\n    return null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.inputControllerDidRequestRender) || void 0 === e2 ? void 0 : e2.call(t2);\n  }\n  requestReparse() {\n    var t2, e2;\n    return null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.inputControllerDidRequestReparse) || void 0 === e2 || e2.call(t2), this.requestRender();\n  }\n  attachFiles(t2) {\n    const e2 = Array.from(t2).map((t3) => new Vi(t3));\n    return Promise.all(e2).then((t3) => {\n      this.handleInput(function() {\n        var e3, i2;\n        return null === (e3 = this.delegate) || void 0 === e3 || e3.inputControllerWillAttachFiles(), null === (i2 = this.responder) || void 0 === i2 || i2.insertFiles(t3), this.requestRender();\n      });\n    });\n  }\n  handlerFor(t2) {\n    return (e2) => {\n      e2.defaultPrevented || this.handleInput(() => {\n        if (!x(this.element)) {\n          if (this.flakyKeyboardDetector.shouldIgnore(e2))\n            return;\n          this.eventName = t2, this.constructor.events[t2].call(this, e2);\n        }\n      });\n    };\n  }\n  handleInput(t2) {\n    try {\n      var e2;\n      null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillHandleInput(), t2.call(this);\n    } finally {\n      var i2;\n      null === (i2 = this.delegate) || void 0 === i2 || i2.inputControllerDidHandleInput();\n    }\n  }\n  createLinkHTML(t2, e2) {\n    const i2 = document.createElement(\"a\");\n    return i2.href = t2, i2.textContent = e2 || t2, i2.outerHTML;\n  }\n};\nvar Gi;\nAe(Ki, \"events\", {});\nvar { browser: $i, keyNames: Xi } = V;\nvar Yi = 0;\nvar Qi = class extends Ki {\n  constructor() {\n    super(...arguments), this.resetInputSummary();\n  }\n  setInputSummary() {\n    let t2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n    this.inputSummary.eventName = this.eventName;\n    for (const e2 in t2) {\n      const i2 = t2[e2];\n      this.inputSummary[e2] = i2;\n    }\n    return this.inputSummary;\n  }\n  resetInputSummary() {\n    this.inputSummary = {};\n  }\n  reset() {\n    return this.resetInputSummary(), It.reset();\n  }\n  elementDidMutate(t2) {\n    var e2, i2;\n    return this.isComposing() ? null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.inputControllerDidAllowUnhandledInput) || void 0 === i2 ? void 0 : i2.call(e2) : this.handleInput(function() {\n      return this.mutationIsSignificant(t2) && (this.mutationIsExpected(t2) ? this.requestRender() : this.requestReparse()), this.reset();\n    });\n  }\n  mutationIsExpected(t2) {\n    let { textAdded: e2, textDeleted: i2 } = t2;\n    if (this.inputSummary.preferDocument)\n      return true;\n    const n2 = null != e2 ? e2 === this.inputSummary.textAdded : !this.inputSummary.textAdded, r2 = null != i2 ? this.inputSummary.didDelete : !this.inputSummary.didDelete, o2 = [\"\\n\", \" \\n\"].includes(e2) && !n2, s2 = \"\\n\" === i2 && !r2;\n    if (o2 && !s2 || s2 && !o2) {\n      const t3 = this.getSelectedRange();\n      if (t3) {\n        var a2;\n        const i3 = o2 ? e2.replace(/\\n$/, \"\").length || -1 : (null == e2 ? void 0 : e2.length) || 1;\n        if (null !== (a2 = this.responder) && void 0 !== a2 && a2.positionIsBlockBreak(t3[1] + i3))\n          return true;\n      }\n    }\n    return n2 && r2;\n  }\n  mutationIsSignificant(t2) {\n    var e2;\n    const i2 = Object.keys(t2).length > 0, n2 = \"\" === (null === (e2 = this.compositionInput) || void 0 === e2 ? void 0 : e2.getEndData());\n    return i2 || !n2;\n  }\n  getCompositionInput() {\n    if (this.isComposing())\n      return this.compositionInput;\n    this.compositionInput = new rn(this);\n  }\n  isComposing() {\n    return this.compositionInput && !this.compositionInput.isEnded();\n  }\n  deleteInDirection(t2, e2) {\n    var i2;\n    return false !== (null === (i2 = this.responder) || void 0 === i2 ? void 0 : i2.deleteInDirection(t2)) ? this.setInputSummary({ didDelete: true }) : e2 ? (e2.preventDefault(), this.requestRender()) : void 0;\n  }\n  serializeSelectionToDataTransfer(t2) {\n    var e2;\n    if (!function(t3) {\n      if (null == t3 || !t3.setData)\n        return false;\n      for (const e3 in yt) {\n        const i3 = yt[e3];\n        try {\n          if (t3.setData(e3, i3), !t3.getData(e3) === i3)\n            return false;\n        } catch (t4) {\n          return false;\n        }\n      }\n      return true;\n    }(t2))\n      return;\n    const i2 = null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.getSelectedDocument().toSerializableDocument();\n    return t2.setData(\"application/x-trix-document\", JSON.stringify(i2)), t2.setData(\"text/html\", ge.render(i2).innerHTML), t2.setData(\"text/plain\", i2.toString().replace(/\\n$/, \"\")), true;\n  }\n  canAcceptDataTransfer(t2) {\n    const e2 = {};\n    return Array.from((null == t2 ? void 0 : t2.types) || []).forEach((t3) => {\n      e2[t3] = true;\n    }), e2.Files || e2[\"application/x-trix-document\"] || e2[\"text/html\"] || e2[\"text/plain\"];\n  }\n  getPastedHTMLUsingHiddenElement(t2) {\n    const e2 = this.getSelectedRange(), i2 = { position: \"absolute\", left: \"\".concat(window.pageXOffset, \"px\"), top: \"\".concat(window.pageYOffset, \"px\"), opacity: 0 }, n2 = k({ style: i2, tagName: \"div\", editable: true });\n    return document.body.appendChild(n2), n2.focus(), requestAnimationFrame(() => {\n      const i3 = n2.innerHTML;\n      return R(n2), this.setSelectedRange(e2), t2(i3);\n    });\n  }\n};\nAe(Qi, \"events\", { keydown(t2) {\n  this.isComposing() || this.resetInputSummary(), this.inputSummary.didInput = true;\n  const e2 = Xi[t2.keyCode];\n  if (e2) {\n    var i2;\n    let n3 = this.keys;\n    [\"ctrl\", \"alt\", \"shift\", \"meta\"].forEach((e3) => {\n      var i3;\n      t2[\"\".concat(e3, \"Key\")] && (\"ctrl\" === e3 && (e3 = \"control\"), n3 = null === (i3 = n3) || void 0 === i3 ? void 0 : i3[e3]);\n    }), null != (null === (i2 = n3) || void 0 === i2 ? void 0 : i2[e2]) && (this.setInputSummary({ keyName: e2 }), It.reset(), n3[e2].call(this, t2));\n  }\n  if (Rt(t2)) {\n    const e3 = String.fromCharCode(t2.keyCode).toLowerCase();\n    if (e3) {\n      var n2;\n      const i3 = [\"alt\", \"shift\"].map((e4) => {\n        if (t2[\"\".concat(e4, \"Key\")])\n          return e4;\n      }).filter((t3) => t3);\n      i3.push(e3), null !== (n2 = this.delegate) && void 0 !== n2 && n2.inputControllerDidReceiveKeyboardCommand(i3) && t2.preventDefault();\n    }\n  }\n}, keypress(t2) {\n  if (null != this.inputSummary.eventName)\n    return;\n  if (t2.metaKey)\n    return;\n  if (t2.ctrlKey && !t2.altKey)\n    return;\n  const e2 = en(t2);\n  var i2, n2;\n  return e2 ? (null === (i2 = this.delegate) || void 0 === i2 || i2.inputControllerWillPerformTyping(), null === (n2 = this.responder) || void 0 === n2 || n2.insertString(e2), this.setInputSummary({ textAdded: e2, didDelete: this.selectionIsExpanded() })) : void 0;\n}, textInput(t2) {\n  const { data: e2 } = t2, { textAdded: i2 } = this.inputSummary;\n  if (i2 && i2 !== e2 && i2.toUpperCase() === e2) {\n    var n2;\n    const t3 = this.getSelectedRange();\n    return this.setSelectedRange([t3[0], t3[1] + i2.length]), null === (n2 = this.responder) || void 0 === n2 || n2.insertString(e2), this.setInputSummary({ textAdded: e2 }), this.setSelectedRange(t3);\n  }\n}, dragenter(t2) {\n  t2.preventDefault();\n}, dragstart(t2) {\n  var e2, i2;\n  return this.serializeSelectionToDataTransfer(t2.dataTransfer), this.draggedRange = this.getSelectedRange(), null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.inputControllerDidStartDrag) || void 0 === i2 ? void 0 : i2.call(e2);\n}, dragover(t2) {\n  if (this.draggedRange || this.canAcceptDataTransfer(t2.dataTransfer)) {\n    t2.preventDefault();\n    const n2 = { x: t2.clientX, y: t2.clientY };\n    var e2, i2;\n    if (!kt(n2, this.draggingPoint))\n      return this.draggingPoint = n2, null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.inputControllerDidReceiveDragOverPoint) || void 0 === i2 ? void 0 : i2.call(e2, this.draggingPoint);\n  }\n}, dragend(t2) {\n  var e2, i2;\n  null === (e2 = this.delegate) || void 0 === e2 || null === (i2 = e2.inputControllerDidCancelDrag) || void 0 === i2 || i2.call(e2), this.draggedRange = null, this.draggingPoint = null;\n}, drop(t2) {\n  var e2, i2;\n  t2.preventDefault();\n  const n2 = null === (e2 = t2.dataTransfer) || void 0 === e2 ? void 0 : e2.files, r2 = t2.dataTransfer.getData(\"application/x-trix-document\"), o2 = { x: t2.clientX, y: t2.clientY };\n  if (null === (i2 = this.responder) || void 0 === i2 || i2.setLocationRangeFromPointRange(o2), null != n2 && n2.length)\n    this.attachFiles(n2);\n  else if (this.draggedRange) {\n    var s2, a2;\n    null === (s2 = this.delegate) || void 0 === s2 || s2.inputControllerWillMoveText(), null === (a2 = this.responder) || void 0 === a2 || a2.moveTextFromRange(this.draggedRange), this.draggedRange = null, this.requestRender();\n  } else if (r2) {\n    var l2;\n    const t3 = qe.fromJSONString(r2);\n    null === (l2 = this.responder) || void 0 === l2 || l2.insertDocument(t3), this.requestRender();\n  }\n  this.draggedRange = null, this.draggingPoint = null;\n}, cut(t2) {\n  var e2, i2;\n  if (null !== (e2 = this.responder) && void 0 !== e2 && e2.selectionIsExpanded() && (this.serializeSelectionToDataTransfer(t2.clipboardData) && t2.preventDefault(), null === (i2 = this.delegate) || void 0 === i2 || i2.inputControllerWillCutText(), this.deleteInDirection(\"backward\"), t2.defaultPrevented))\n    return this.requestRender();\n}, copy(t2) {\n  var e2;\n  null !== (e2 = this.responder) && void 0 !== e2 && e2.selectionIsExpanded() && this.serializeSelectionToDataTransfer(t2.clipboardData) && t2.preventDefault();\n}, paste(t2) {\n  const e2 = t2.clipboardData || t2.testClipboardData, i2 = { clipboard: e2 };\n  if (!e2 || nn(t2))\n    return void this.getPastedHTMLUsingHiddenElement((t3) => {\n      var e3, n3, r3;\n      return i2.type = \"text/html\", i2.html = t3, null === (e3 = this.delegate) || void 0 === e3 || e3.inputControllerWillPaste(i2), null === (n3 = this.responder) || void 0 === n3 || n3.insertHTML(i2.html), this.requestRender(), null === (r3 = this.delegate) || void 0 === r3 ? void 0 : r3.inputControllerDidPaste(i2);\n    });\n  const n2 = e2.getData(\"URL\"), r2 = e2.getData(\"text/html\"), o2 = e2.getData(\"public.url-name\");\n  if (n2) {\n    var s2, a2, l2;\n    let t3;\n    i2.type = \"text/html\", t3 = o2 ? qt(o2).trim() : n2, i2.html = this.createLinkHTML(n2, t3), null === (s2 = this.delegate) || void 0 === s2 || s2.inputControllerWillPaste(i2), this.setInputSummary({ textAdded: t3, didDelete: this.selectionIsExpanded() }), null === (a2 = this.responder) || void 0 === a2 || a2.insertHTML(i2.html), this.requestRender(), null === (l2 = this.delegate) || void 0 === l2 || l2.inputControllerDidPaste(i2);\n  } else if (Ct(e2)) {\n    var c2, h2, u2;\n    i2.type = \"text/plain\", i2.string = e2.getData(\"text/plain\"), null === (c2 = this.delegate) || void 0 === c2 || c2.inputControllerWillPaste(i2), this.setInputSummary({ textAdded: i2.string, didDelete: this.selectionIsExpanded() }), null === (h2 = this.responder) || void 0 === h2 || h2.insertString(i2.string), this.requestRender(), null === (u2 = this.delegate) || void 0 === u2 || u2.inputControllerDidPaste(i2);\n  } else if (r2) {\n    var d2, g2, m2;\n    i2.type = \"text/html\", i2.html = r2, null === (d2 = this.delegate) || void 0 === d2 || d2.inputControllerWillPaste(i2), null === (g2 = this.responder) || void 0 === g2 || g2.insertHTML(i2.html), this.requestRender(), null === (m2 = this.delegate) || void 0 === m2 || m2.inputControllerDidPaste(i2);\n  } else if (Array.from(e2.types).includes(\"Files\")) {\n    var p2, f2;\n    const t3 = null === (p2 = e2.items) || void 0 === p2 || null === (p2 = p2[0]) || void 0 === p2 || null === (f2 = p2.getAsFile) || void 0 === f2 ? void 0 : f2.call(p2);\n    if (t3) {\n      var b2, v2, A2;\n      const e3 = Zi(t3);\n      !t3.name && e3 && (t3.name = \"pasted-file-\".concat(++Yi, \".\").concat(e3)), i2.type = \"File\", i2.file = t3, null === (b2 = this.delegate) || void 0 === b2 || b2.inputControllerWillAttachFiles(), null === (v2 = this.responder) || void 0 === v2 || v2.insertFile(i2.file), this.requestRender(), null === (A2 = this.delegate) || void 0 === A2 || A2.inputControllerDidPaste(i2);\n    }\n  }\n  t2.preventDefault();\n}, compositionstart(t2) {\n  return this.getCompositionInput().start(t2.data);\n}, compositionupdate(t2) {\n  return this.getCompositionInput().update(t2.data);\n}, compositionend(t2) {\n  return this.getCompositionInput().end(t2.data);\n}, beforeinput(t2) {\n  this.inputSummary.didInput = true;\n}, input(t2) {\n  return this.inputSummary.didInput = true, t2.stopPropagation();\n} }), Ae(Qi, \"keys\", { backspace(t2) {\n  var e2;\n  return null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t2);\n}, delete(t2) {\n  var e2;\n  return null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t2);\n}, return(t2) {\n  var e2, i2;\n  return this.setInputSummary({ preferDocument: true }), null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), null === (i2 = this.responder) || void 0 === i2 ? void 0 : i2.insertLineBreak();\n}, tab(t2) {\n  var e2, i2;\n  null !== (e2 = this.responder) && void 0 !== e2 && e2.canIncreaseNestingLevel() && (null === (i2 = this.responder) || void 0 === i2 || i2.increaseNestingLevel(), this.requestRender(), t2.preventDefault());\n}, left(t2) {\n  var e2;\n  if (this.selectionIsInCursorTarget())\n    return t2.preventDefault(), null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.moveCursorInDirection(\"backward\");\n}, right(t2) {\n  var e2;\n  if (this.selectionIsInCursorTarget())\n    return t2.preventDefault(), null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.moveCursorInDirection(\"forward\");\n}, control: { d(t2) {\n  var e2;\n  return null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t2);\n}, h(t2) {\n  var e2;\n  return null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t2);\n}, o(t2) {\n  var e2, i2;\n  return t2.preventDefault(), null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), null === (i2 = this.responder) || void 0 === i2 || i2.insertString(\"\\n\", { updatePosition: false }), this.requestRender();\n} }, shift: { return(t2) {\n  var e2, i2;\n  null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), null === (i2 = this.responder) || void 0 === i2 || i2.insertString(\"\\n\"), this.requestRender(), t2.preventDefault();\n}, tab(t2) {\n  var e2, i2;\n  null !== (e2 = this.responder) && void 0 !== e2 && e2.canDecreaseNestingLevel() && (null === (i2 = this.responder) || void 0 === i2 || i2.decreaseNestingLevel(), this.requestRender(), t2.preventDefault());\n}, left(t2) {\n  if (this.selectionIsInCursorTarget())\n    return t2.preventDefault(), this.expandSelectionInDirection(\"backward\");\n}, right(t2) {\n  if (this.selectionIsInCursorTarget())\n    return t2.preventDefault(), this.expandSelectionInDirection(\"forward\");\n} }, alt: { backspace(t2) {\n  var e2;\n  return this.setInputSummary({ preferDocument: false }), null === (e2 = this.delegate) || void 0 === e2 ? void 0 : e2.inputControllerWillPerformTyping();\n} }, meta: { backspace(t2) {\n  var e2;\n  return this.setInputSummary({ preferDocument: false }), null === (e2 = this.delegate) || void 0 === e2 ? void 0 : e2.inputControllerWillPerformTyping();\n} } }), Qi.proxyMethod(\"responder?.getSelectedRange\"), Qi.proxyMethod(\"responder?.setSelectedRange\"), Qi.proxyMethod(\"responder?.expandSelectionInDirection\"), Qi.proxyMethod(\"responder?.selectionIsInCursorTarget\"), Qi.proxyMethod(\"responder?.selectionIsExpanded\");\nvar Zi = (t2) => {\n  var e2;\n  return null === (e2 = t2.type) || void 0 === e2 || null === (e2 = e2.match(/\\/(\\w+)$/)) || void 0 === e2 ? void 0 : e2[1];\n};\nvar tn = !(null === (Gi = \" \".codePointAt) || void 0 === Gi || !Gi.call(\" \", 0));\nvar en = function(t2) {\n  if (t2.key && tn && t2.key.codePointAt(0) === t2.keyCode)\n    return t2.key;\n  {\n    let e2;\n    if (null === t2.which ? e2 = t2.keyCode : 0 !== t2.which && 0 !== t2.charCode && (e2 = t2.charCode), null != e2 && \"escape\" !== Xi[e2])\n      return X.fromCodepoints([e2]).toString();\n  }\n};\nvar nn = function(t2) {\n  const e2 = t2.clipboardData;\n  if (e2) {\n    if (e2.types.includes(\"text/html\")) {\n      for (const t3 of e2.types) {\n        const i2 = /^CorePasteboardFlavorType/.test(t3), n2 = /^dyn\\./.test(t3) && e2.getData(t3);\n        if (i2 || n2)\n          return true;\n      }\n      return false;\n    }\n    {\n      const t3 = e2.types.includes(\"com.apple.webarchive\"), i2 = e2.types.includes(\"com.apple.flat-rtfd\");\n      return t3 || i2;\n    }\n  }\n};\nvar rn = class extends z {\n  constructor(t2) {\n    super(...arguments), this.inputController = t2, this.responder = this.inputController.responder, this.delegate = this.inputController.delegate, this.inputSummary = this.inputController.inputSummary, this.data = {};\n  }\n  start(t2) {\n    if (this.data.start = t2, this.isSignificant()) {\n      var e2, i2;\n      if (\"keypress\" === this.inputSummary.eventName && this.inputSummary.textAdded)\n        null === (i2 = this.responder) || void 0 === i2 || i2.deleteInDirection(\"left\");\n      this.selectionIsExpanded() || (this.insertPlaceholder(), this.requestRender()), this.range = null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.getSelectedRange();\n    }\n  }\n  update(t2) {\n    if (this.data.update = t2, this.isSignificant()) {\n      const t3 = this.selectPlaceholder();\n      t3 && (this.forgetPlaceholder(), this.range = t3);\n    }\n  }\n  end(t2) {\n    return this.data.end = t2, this.isSignificant() ? (this.forgetPlaceholder(), this.canApplyToDocument() ? (this.setInputSummary({ preferDocument: true, didInput: false }), null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), null === (i2 = this.responder) || void 0 === i2 || i2.setSelectedRange(this.range), null === (n2 = this.responder) || void 0 === n2 || n2.insertString(this.data.end), null === (r2 = this.responder) || void 0 === r2 ? void 0 : r2.setSelectedRange(this.range[0] + this.data.end.length)) : null != this.data.start || null != this.data.update ? (this.requestReparse(), this.inputController.reset()) : void 0) : this.inputController.reset();\n    var e2, i2, n2, r2;\n  }\n  getEndData() {\n    return this.data.end;\n  }\n  isEnded() {\n    return null != this.getEndData();\n  }\n  isSignificant() {\n    return !$i.composesExistingText || this.inputSummary.didInput;\n  }\n  canApplyToDocument() {\n    var t2, e2;\n    return 0 === (null === (t2 = this.data.start) || void 0 === t2 ? void 0 : t2.length) && (null === (e2 = this.data.end) || void 0 === e2 ? void 0 : e2.length) > 0 && this.range;\n  }\n};\nrn.proxyMethod(\"inputController.setInputSummary\"), rn.proxyMethod(\"inputController.requestRender\"), rn.proxyMethod(\"inputController.requestReparse\"), rn.proxyMethod(\"responder?.selectionIsExpanded\"), rn.proxyMethod(\"responder?.insertPlaceholder\"), rn.proxyMethod(\"responder?.selectPlaceholder\"), rn.proxyMethod(\"responder?.forgetPlaceholder\");\nvar on = class extends Ki {\n  constructor() {\n    super(...arguments), this.render = this.render.bind(this);\n  }\n  elementDidMutate() {\n    return this.scheduledRender ? this.composing ? null === (t2 = this.delegate) || void 0 === t2 || null === (e2 = t2.inputControllerDidAllowUnhandledInput) || void 0 === e2 ? void 0 : e2.call(t2) : void 0 : this.reparse();\n    var t2, e2;\n  }\n  scheduleRender() {\n    return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render);\n  }\n  render() {\n    var t2, e2;\n    (cancelAnimationFrame(this.scheduledRender), this.scheduledRender = null, this.composing) || (null === (e2 = this.delegate) || void 0 === e2 || e2.render());\n    null === (t2 = this.afterRender) || void 0 === t2 || t2.call(this), this.afterRender = null;\n  }\n  reparse() {\n    var t2;\n    return null === (t2 = this.delegate) || void 0 === t2 ? void 0 : t2.reparse();\n  }\n  insertString() {\n    var t2;\n    let e2 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : \"\", i2 = arguments.length > 1 ? arguments[1] : void 0;\n    return null === (t2 = this.delegate) || void 0 === t2 || t2.inputControllerWillPerformTyping(), this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.insertString(e2, i2);\n    });\n  }\n  toggleAttributeIfSupported(t2) {\n    var e2;\n    if (dt().includes(t2))\n      return null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformFormatting(t2), this.withTargetDOMRange(function() {\n        var e3;\n        return null === (e3 = this.responder) || void 0 === e3 ? void 0 : e3.toggleCurrentAttribute(t2);\n      });\n  }\n  activateAttributeIfSupported(t2, e2) {\n    var i2;\n    if (dt().includes(t2))\n      return null === (i2 = this.delegate) || void 0 === i2 || i2.inputControllerWillPerformFormatting(t2), this.withTargetDOMRange(function() {\n        var i3;\n        return null === (i3 = this.responder) || void 0 === i3 ? void 0 : i3.setCurrentAttribute(t2, e2);\n      });\n  }\n  deleteInDirection(t2) {\n    let { recordUndoEntry: e2 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { recordUndoEntry: true };\n    var i2;\n    e2 && (null === (i2 = this.delegate) || void 0 === i2 || i2.inputControllerWillPerformTyping());\n    const n2 = () => {\n      var e3;\n      return null === (e3 = this.responder) || void 0 === e3 ? void 0 : e3.deleteInDirection(t2);\n    }, r2 = this.getTargetDOMRange({ minLength: 2 });\n    return r2 ? this.withTargetDOMRange(r2, n2) : n2();\n  }\n  withTargetDOMRange(t2, e2) {\n    var i2;\n    return \"function\" == typeof t2 && (e2 = t2, t2 = this.getTargetDOMRange()), t2 ? null === (i2 = this.responder) || void 0 === i2 ? void 0 : i2.withTargetDOMRange(t2, e2.bind(this)) : (It.reset(), e2.call(this));\n  }\n  getTargetDOMRange() {\n    var t2, e2;\n    let { minLength: i2 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : { minLength: 0 };\n    const n2 = null === (t2 = (e2 = this.event).getTargetRanges) || void 0 === t2 ? void 0 : t2.call(e2);\n    if (n2 && n2.length) {\n      const t3 = sn(n2[0]);\n      if (0 === i2 || t3.toString().length >= i2)\n        return t3;\n    }\n  }\n  withEvent(t2, e2) {\n    let i2;\n    this.event = t2;\n    try {\n      i2 = e2.call(this);\n    } finally {\n      this.event = null;\n    }\n    return i2;\n  }\n};\nAe(on, \"events\", { keydown(t2) {\n  if (Rt(t2)) {\n    var e2;\n    const i2 = hn(t2);\n    null !== (e2 = this.delegate) && void 0 !== e2 && e2.inputControllerDidReceiveKeyboardCommand(i2) && t2.preventDefault();\n  } else {\n    let e3 = t2.key;\n    t2.altKey && (e3 += \"+Alt\"), t2.shiftKey && (e3 += \"+Shift\");\n    const i2 = this.constructor.keys[e3];\n    if (i2)\n      return this.withEvent(t2, i2);\n  }\n}, paste(t2) {\n  var e2;\n  let i2;\n  const n2 = null === (e2 = t2.clipboardData) || void 0 === e2 ? void 0 : e2.getData(\"URL\");\n  return ln(t2) ? (t2.preventDefault(), this.attachFiles(t2.clipboardData.files)) : cn(t2) ? (t2.preventDefault(), i2 = { type: \"text/plain\", string: t2.clipboardData.getData(\"text/plain\") }, null === (r2 = this.delegate) || void 0 === r2 || r2.inputControllerWillPaste(i2), null === (o2 = this.responder) || void 0 === o2 || o2.insertString(i2.string), this.render(), null === (s2 = this.delegate) || void 0 === s2 ? void 0 : s2.inputControllerDidPaste(i2)) : n2 ? (t2.preventDefault(), i2 = { type: \"text/html\", html: this.createLinkHTML(n2) }, null === (a2 = this.delegate) || void 0 === a2 || a2.inputControllerWillPaste(i2), null === (l2 = this.responder) || void 0 === l2 || l2.insertHTML(i2.html), this.render(), null === (c2 = this.delegate) || void 0 === c2 ? void 0 : c2.inputControllerDidPaste(i2)) : void 0;\n  var r2, o2, s2, a2, l2, c2;\n}, beforeinput(t2) {\n  const e2 = this.constructor.inputTypes[t2.inputType];\n  e2 && (this.withEvent(t2, e2), this.scheduleRender());\n}, input(t2) {\n  It.reset();\n}, dragstart(t2) {\n  var e2, i2;\n  null !== (e2 = this.responder) && void 0 !== e2 && e2.selectionContainsAttachments() && (t2.dataTransfer.setData(\"application/x-trix-dragging\", true), this.dragging = { range: null === (i2 = this.responder) || void 0 === i2 ? void 0 : i2.getSelectedRange(), point: un(t2) });\n}, dragenter(t2) {\n  an(t2) && t2.preventDefault();\n}, dragover(t2) {\n  if (this.dragging) {\n    t2.preventDefault();\n    const i2 = un(t2);\n    var e2;\n    if (!kt(i2, this.dragging.point))\n      return this.dragging.point = i2, null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.setLocationRangeFromPointRange(i2);\n  } else\n    an(t2) && t2.preventDefault();\n}, drop(t2) {\n  var e2, i2;\n  if (this.dragging)\n    return t2.preventDefault(), null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillMoveText(), null === (i2 = this.responder) || void 0 === i2 || i2.moveTextFromRange(this.dragging.range), this.dragging = null, this.scheduleRender();\n  if (an(t2)) {\n    var n2;\n    t2.preventDefault();\n    const e3 = un(t2);\n    return null === (n2 = this.responder) || void 0 === n2 || n2.setLocationRangeFromPointRange(e3), this.attachFiles(t2.dataTransfer.files);\n  }\n}, dragend() {\n  var t2;\n  this.dragging && (null === (t2 = this.responder) || void 0 === t2 || t2.setSelectedRange(this.dragging.range), this.dragging = null);\n}, compositionend(t2) {\n  this.composing && (this.composing = false, a.recentAndroid || this.scheduleRender());\n} }), Ae(on, \"keys\", { ArrowLeft() {\n  var t2, e2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.shouldManageMovingCursorInDirection(\"backward\"))\n    return this.event.preventDefault(), null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.moveCursorInDirection(\"backward\");\n}, ArrowRight() {\n  var t2, e2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.shouldManageMovingCursorInDirection(\"forward\"))\n    return this.event.preventDefault(), null === (e2 = this.responder) || void 0 === e2 ? void 0 : e2.moveCursorInDirection(\"forward\");\n}, Backspace() {\n  var t2, e2, i2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.shouldManageDeletingInDirection(\"backward\"))\n    return this.event.preventDefault(), null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillPerformTyping(), null === (i2 = this.responder) || void 0 === i2 || i2.deleteInDirection(\"backward\"), this.render();\n}, Tab() {\n  var t2, e2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.canIncreaseNestingLevel())\n    return this.event.preventDefault(), null === (e2 = this.responder) || void 0 === e2 || e2.increaseNestingLevel(), this.render();\n}, \"Tab+Shift\"() {\n  var t2, e2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.canDecreaseNestingLevel())\n    return this.event.preventDefault(), null === (e2 = this.responder) || void 0 === e2 || e2.decreaseNestingLevel(), this.render();\n} }), Ae(on, \"inputTypes\", { deleteByComposition() {\n  return this.deleteInDirection(\"backward\", { recordUndoEntry: false });\n}, deleteByCut() {\n  return this.deleteInDirection(\"backward\");\n}, deleteByDrag() {\n  return this.event.preventDefault(), this.withTargetDOMRange(function() {\n    var t2;\n    this.deleteByDragRange = null === (t2 = this.responder) || void 0 === t2 ? void 0 : t2.getSelectedRange();\n  });\n}, deleteCompositionText() {\n  return this.deleteInDirection(\"backward\", { recordUndoEntry: false });\n}, deleteContent() {\n  return this.deleteInDirection(\"backward\");\n}, deleteContentBackward() {\n  return this.deleteInDirection(\"backward\");\n}, deleteContentForward() {\n  return this.deleteInDirection(\"forward\");\n}, deleteEntireSoftLine() {\n  return this.deleteInDirection(\"forward\");\n}, deleteHardLineBackward() {\n  return this.deleteInDirection(\"backward\");\n}, deleteHardLineForward() {\n  return this.deleteInDirection(\"forward\");\n}, deleteSoftLineBackward() {\n  return this.deleteInDirection(\"backward\");\n}, deleteSoftLineForward() {\n  return this.deleteInDirection(\"forward\");\n}, deleteWordBackward() {\n  return this.deleteInDirection(\"backward\");\n}, deleteWordForward() {\n  return this.deleteInDirection(\"forward\");\n}, formatBackColor() {\n  return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data);\n}, formatBold() {\n  return this.toggleAttributeIfSupported(\"bold\");\n}, formatFontColor() {\n  return this.activateAttributeIfSupported(\"color\", this.event.data);\n}, formatFontName() {\n  return this.activateAttributeIfSupported(\"font\", this.event.data);\n}, formatIndent() {\n  var t2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.canIncreaseNestingLevel())\n    return this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.increaseNestingLevel();\n    });\n}, formatItalic() {\n  return this.toggleAttributeIfSupported(\"italic\");\n}, formatJustifyCenter() {\n  return this.toggleAttributeIfSupported(\"justifyCenter\");\n}, formatJustifyFull() {\n  return this.toggleAttributeIfSupported(\"justifyFull\");\n}, formatJustifyLeft() {\n  return this.toggleAttributeIfSupported(\"justifyLeft\");\n}, formatJustifyRight() {\n  return this.toggleAttributeIfSupported(\"justifyRight\");\n}, formatOutdent() {\n  var t2;\n  if (null !== (t2 = this.responder) && void 0 !== t2 && t2.canDecreaseNestingLevel())\n    return this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.decreaseNestingLevel();\n    });\n}, formatRemove() {\n  this.withTargetDOMRange(function() {\n    for (const i2 in null === (t2 = this.responder) || void 0 === t2 ? void 0 : t2.getCurrentAttributes()) {\n      var t2, e2;\n      null === (e2 = this.responder) || void 0 === e2 || e2.removeCurrentAttribute(i2);\n    }\n  });\n}, formatSetBlockTextDirection() {\n  return this.activateAttributeIfSupported(\"blockDir\", this.event.data);\n}, formatSetInlineTextDirection() {\n  return this.activateAttributeIfSupported(\"textDir\", this.event.data);\n}, formatStrikeThrough() {\n  return this.toggleAttributeIfSupported(\"strike\");\n}, formatSubscript() {\n  return this.toggleAttributeIfSupported(\"sub\");\n}, formatSuperscript() {\n  return this.toggleAttributeIfSupported(\"sup\");\n}, formatUnderline() {\n  return this.toggleAttributeIfSupported(\"underline\");\n}, historyRedo() {\n  var t2;\n  return null === (t2 = this.delegate) || void 0 === t2 ? void 0 : t2.inputControllerWillPerformRedo();\n}, historyUndo() {\n  var t2;\n  return null === (t2 = this.delegate) || void 0 === t2 ? void 0 : t2.inputControllerWillPerformUndo();\n}, insertCompositionText() {\n  return this.composing = true, this.insertString(this.event.data);\n}, insertFromComposition() {\n  return this.composing = false, this.insertString(this.event.data);\n}, insertFromDrop() {\n  const t2 = this.deleteByDragRange;\n  var e2;\n  if (t2)\n    return this.deleteByDragRange = null, null === (e2 = this.delegate) || void 0 === e2 || e2.inputControllerWillMoveText(), this.withTargetDOMRange(function() {\n      var e3;\n      return null === (e3 = this.responder) || void 0 === e3 ? void 0 : e3.moveTextFromRange(t2);\n    });\n}, insertFromPaste() {\n  var t2;\n  const { dataTransfer: e2 } = this.event, i2 = { dataTransfer: e2 }, n2 = e2.getData(\"URL\"), r2 = e2.getData(\"text/html\");\n  if (n2) {\n    var o2;\n    let t3;\n    this.event.preventDefault(), i2.type = \"text/html\";\n    const r3 = e2.getData(\"public.url-name\");\n    t3 = r3 ? qt(r3).trim() : n2, i2.html = this.createLinkHTML(n2, t3), null === (o2 = this.delegate) || void 0 === o2 || o2.inputControllerWillPaste(i2), this.withTargetDOMRange(function() {\n      var t4;\n      return null === (t4 = this.responder) || void 0 === t4 ? void 0 : t4.insertHTML(i2.html);\n    }), this.afterRender = () => {\n      var t4;\n      return null === (t4 = this.delegate) || void 0 === t4 ? void 0 : t4.inputControllerDidPaste(i2);\n    };\n  } else if (Ct(e2)) {\n    var s2;\n    i2.type = \"text/plain\", i2.string = e2.getData(\"text/plain\"), null === (s2 = this.delegate) || void 0 === s2 || s2.inputControllerWillPaste(i2), this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.insertString(i2.string);\n    }), this.afterRender = () => {\n      var t3;\n      return null === (t3 = this.delegate) || void 0 === t3 ? void 0 : t3.inputControllerDidPaste(i2);\n    };\n  } else if (r2) {\n    var a2;\n    this.event.preventDefault(), i2.type = \"text/html\", i2.html = r2, null === (a2 = this.delegate) || void 0 === a2 || a2.inputControllerWillPaste(i2), this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.insertHTML(i2.html);\n    }), this.afterRender = () => {\n      var t3;\n      return null === (t3 = this.delegate) || void 0 === t3 ? void 0 : t3.inputControllerDidPaste(i2);\n    };\n  } else if (null !== (t2 = e2.files) && void 0 !== t2 && t2.length) {\n    var l2;\n    i2.type = \"File\", i2.file = e2.files[0], null === (l2 = this.delegate) || void 0 === l2 || l2.inputControllerWillPaste(i2), this.withTargetDOMRange(function() {\n      var t3;\n      return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.insertFile(i2.file);\n    }), this.afterRender = () => {\n      var t3;\n      return null === (t3 = this.delegate) || void 0 === t3 ? void 0 : t3.inputControllerDidPaste(i2);\n    };\n  }\n}, insertFromYank() {\n  return this.insertString(this.event.data);\n}, insertLineBreak() {\n  return this.insertString(\"\\n\");\n}, insertLink() {\n  return this.activateAttributeIfSupported(\"href\", this.event.data);\n}, insertOrderedList() {\n  return this.toggleAttributeIfSupported(\"number\");\n}, insertParagraph() {\n  var t2;\n  return null === (t2 = this.delegate) || void 0 === t2 || t2.inputControllerWillPerformTyping(), this.withTargetDOMRange(function() {\n    var t3;\n    return null === (t3 = this.responder) || void 0 === t3 ? void 0 : t3.insertLineBreak();\n  });\n}, insertReplacementText() {\n  return this.insertString(this.event.dataTransfer.getData(\"text/plain\"), { updatePosition: false });\n}, insertText() {\n  var t2;\n  return this.insertString(this.event.data || (null === (t2 = this.event.dataTransfer) || void 0 === t2 ? void 0 : t2.getData(\"text/plain\")));\n}, insertTranspose() {\n  return this.insertString(this.event.data);\n}, insertUnorderedList() {\n  return this.toggleAttributeIfSupported(\"bullet\");\n} });\nvar sn = function(t2) {\n  const e2 = document.createRange();\n  return e2.setStart(t2.startContainer, t2.startOffset), e2.setEnd(t2.endContainer, t2.endOffset), e2;\n};\nvar an = (t2) => {\n  var e2;\n  return Array.from((null === (e2 = t2.dataTransfer) || void 0 === e2 ? void 0 : e2.types) || []).includes(\"Files\");\n};\nvar ln = function(t2) {\n  const e2 = t2.clipboardData;\n  if (e2)\n    return e2.types.includes(\"Files\") && 1 === e2.types.length && e2.files.length >= 1;\n};\nvar cn = function(t2) {\n  const e2 = t2.clipboardData;\n  if (e2)\n    return e2.types.includes(\"text/plain\") && 1 === e2.types.length;\n};\nvar hn = function(t2) {\n  const e2 = [];\n  return t2.altKey && e2.push(\"alt\"), t2.shiftKey && e2.push(\"shift\"), e2.push(t2.key), e2;\n};\nvar un = (t2) => ({ x: t2.clientX, y: t2.clientY });\nvar dn = \"[data-trix-attribute]\";\nvar gn = \"[data-trix-action]\";\nvar mn = \"\".concat(dn, \", \").concat(gn);\nvar pn = \"[data-trix-dialog]\";\nvar fn = \"\".concat(pn, \"[data-trix-active]\");\nvar bn = \"\".concat(pn, \" [data-trix-method]\");\nvar vn = \"\".concat(pn, \" [data-trix-input]\");\nvar An = (t2, e2) => (e2 || (e2 = yn(t2)), t2.querySelector(\"[data-trix-input][name='\".concat(e2, \"']\")));\nvar xn = (t2) => t2.getAttribute(\"data-trix-action\");\nvar yn = (t2) => t2.getAttribute(\"data-trix-attribute\") || t2.getAttribute(\"data-trix-dialog-attribute\");\nvar Cn = class extends z {\n  constructor(t2) {\n    super(t2), this.didClickActionButton = this.didClickActionButton.bind(this), this.didClickAttributeButton = this.didClickAttributeButton.bind(this), this.didClickDialogButton = this.didClickDialogButton.bind(this), this.didKeyDownDialogInput = this.didKeyDownDialogInput.bind(this), this.element = t2, this.attributes = {}, this.actions = {}, this.resetDialogInputs(), f(\"mousedown\", { onElement: this.element, matchingSelector: gn, withCallback: this.didClickActionButton }), f(\"mousedown\", { onElement: this.element, matchingSelector: dn, withCallback: this.didClickAttributeButton }), f(\"click\", { onElement: this.element, matchingSelector: mn, preventDefault: true }), f(\"click\", { onElement: this.element, matchingSelector: bn, withCallback: this.didClickDialogButton }), f(\"keydown\", { onElement: this.element, matchingSelector: vn, withCallback: this.didKeyDownDialogInput });\n  }\n  didClickActionButton(t2, e2) {\n    var i2;\n    null === (i2 = this.delegate) || void 0 === i2 || i2.toolbarDidClickButton(), t2.preventDefault();\n    const n2 = xn(e2);\n    return this.getDialog(n2) ? this.toggleDialog(n2) : null === (r2 = this.delegate) || void 0 === r2 ? void 0 : r2.toolbarDidInvokeAction(n2);\n    var r2;\n  }\n  didClickAttributeButton(t2, e2) {\n    var i2;\n    null === (i2 = this.delegate) || void 0 === i2 || i2.toolbarDidClickButton(), t2.preventDefault();\n    const n2 = yn(e2);\n    var r2;\n    this.getDialog(n2) ? this.toggleDialog(n2) : null === (r2 = this.delegate) || void 0 === r2 || r2.toolbarDidToggleAttribute(n2);\n    return this.refreshAttributeButtons();\n  }\n  didClickDialogButton(t2, e2) {\n    const i2 = A(e2, { matchingSelector: pn });\n    return this[e2.getAttribute(\"data-trix-method\")].call(this, i2);\n  }\n  didKeyDownDialogInput(t2, e2) {\n    if (13 === t2.keyCode) {\n      t2.preventDefault();\n      const i2 = e2.getAttribute(\"name\"), n2 = this.getDialog(i2);\n      this.setAttribute(n2);\n    }\n    if (27 === t2.keyCode)\n      return t2.preventDefault(), this.hideDialog();\n  }\n  updateActions(t2) {\n    return this.actions = t2, this.refreshActionButtons();\n  }\n  refreshActionButtons() {\n    return this.eachActionButton((t2, e2) => {\n      t2.disabled = false === this.actions[e2];\n    });\n  }\n  eachActionButton(t2) {\n    return Array.from(this.element.querySelectorAll(gn)).map((e2) => t2(e2, xn(e2)));\n  }\n  updateAttributes(t2) {\n    return this.attributes = t2, this.refreshAttributeButtons();\n  }\n  refreshAttributeButtons() {\n    return this.eachAttributeButton((t2, e2) => (t2.disabled = false === this.attributes[e2], this.attributes[e2] || this.dialogIsVisible(e2) ? (t2.setAttribute(\"data-trix-active\", \"\"), t2.classList.add(\"trix-active\")) : (t2.removeAttribute(\"data-trix-active\"), t2.classList.remove(\"trix-active\"))));\n  }\n  eachAttributeButton(t2) {\n    return Array.from(this.element.querySelectorAll(dn)).map((e2) => t2(e2, yn(e2)));\n  }\n  applyKeyboardCommand(t2) {\n    const e2 = JSON.stringify(t2.sort());\n    for (const t3 of Array.from(this.element.querySelectorAll(\"[data-trix-key]\"))) {\n      const i2 = t3.getAttribute(\"data-trix-key\").split(\"+\");\n      if (JSON.stringify(i2.sort()) === e2)\n        return b(\"mousedown\", { onElement: t3 }), true;\n    }\n    return false;\n  }\n  dialogIsVisible(t2) {\n    const e2 = this.getDialog(t2);\n    if (e2)\n      return e2.hasAttribute(\"data-trix-active\");\n  }\n  toggleDialog(t2) {\n    return this.dialogIsVisible(t2) ? this.hideDialog() : this.showDialog(t2);\n  }\n  showDialog(t2) {\n    var e2, i2;\n    this.hideDialog(), null === (e2 = this.delegate) || void 0 === e2 || e2.toolbarWillShowDialog();\n    const n2 = this.getDialog(t2);\n    n2.setAttribute(\"data-trix-active\", \"\"), n2.classList.add(\"trix-active\"), Array.from(n2.querySelectorAll(\"input[disabled]\")).forEach((t3) => {\n      t3.removeAttribute(\"disabled\");\n    });\n    const r2 = yn(n2);\n    if (r2) {\n      const e3 = An(n2, t2);\n      e3 && (e3.value = this.attributes[r2] || \"\", e3.select());\n    }\n    return null === (i2 = this.delegate) || void 0 === i2 ? void 0 : i2.toolbarDidShowDialog(t2);\n  }\n  setAttribute(t2) {\n    const e2 = yn(t2), i2 = An(t2, e2);\n    return i2.willValidate && !i2.checkValidity() ? (i2.setAttribute(\"data-trix-validate\", \"\"), i2.classList.add(\"trix-validate\"), i2.focus()) : (null === (n2 = this.delegate) || void 0 === n2 || n2.toolbarDidUpdateAttribute(e2, i2.value), this.hideDialog());\n    var n2;\n  }\n  removeAttribute(t2) {\n    var e2;\n    const i2 = yn(t2);\n    return null === (e2 = this.delegate) || void 0 === e2 || e2.toolbarDidRemoveAttribute(i2), this.hideDialog();\n  }\n  hideDialog() {\n    const t2 = this.element.querySelector(fn);\n    var e2;\n    if (t2)\n      return t2.removeAttribute(\"data-trix-active\"), t2.classList.remove(\"trix-active\"), this.resetDialogInputs(), null === (e2 = this.delegate) || void 0 === e2 ? void 0 : e2.toolbarDidHideDialog(((t3) => t3.getAttribute(\"data-trix-dialog\"))(t2));\n  }\n  resetDialogInputs() {\n    Array.from(this.element.querySelectorAll(vn)).forEach((t2) => {\n      t2.setAttribute(\"disabled\", \"disabled\"), t2.removeAttribute(\"data-trix-validate\"), t2.classList.remove(\"trix-validate\");\n    });\n  }\n  getDialog(t2) {\n    return this.element.querySelector(\"[data-trix-dialog=\".concat(t2, \"]\"));\n  }\n};\nvar Rn = class extends Oi {\n  constructor(t2) {\n    let { editorElement: e2, document: i2, html: n2 } = t2;\n    super(...arguments), this.editorElement = e2, this.selectionManager = new Li(this.editorElement), this.selectionManager.delegate = this, this.composition = new gi(), this.composition.delegate = this, this.attachmentManager = new ui(this.composition.getAttachments()), this.attachmentManager.delegate = this, this.inputController = 2 === M.getLevel() ? new on(this.editorElement) : new Qi(this.editorElement), this.inputController.delegate = this, this.inputController.responder = this.composition, this.compositionController = new Ni(this.editorElement, this.composition), this.compositionController.delegate = this, this.toolbarController = new Cn(this.editorElement.toolbarElement), this.toolbarController.delegate = this, this.editor = new xi(this.composition, this.selectionManager, this.editorElement), i2 ? this.editor.loadDocument(i2) : this.editor.loadHTML(n2);\n  }\n  registerSelectionManager() {\n    return It.registerSelectionManager(this.selectionManager);\n  }\n  unregisterSelectionManager() {\n    return It.unregisterSelectionManager(this.selectionManager);\n  }\n  render() {\n    return this.compositionController.render();\n  }\n  reparse() {\n    return this.composition.replaceHTML(this.editorElement.innerHTML);\n  }\n  compositionDidChangeDocument(t2) {\n    if (this.notifyEditorElement(\"document-change\"), !this.handlingInput)\n      return this.render();\n  }\n  compositionDidChangeCurrentAttributes(t2) {\n    return this.currentAttributes = t2, this.toolbarController.updateAttributes(this.currentAttributes), this.updateCurrentActions(), this.notifyEditorElement(\"attributes-change\", { attributes: this.currentAttributes });\n  }\n  compositionDidPerformInsertionAtRange(t2) {\n    this.pasting && (this.pastedRange = t2);\n  }\n  compositionShouldAcceptFile(t2) {\n    return this.notifyEditorElement(\"file-accept\", { file: t2 });\n  }\n  compositionDidAddAttachment(t2) {\n    const e2 = this.attachmentManager.manageAttachment(t2);\n    return this.notifyEditorElement(\"attachment-add\", { attachment: e2 });\n  }\n  compositionDidEditAttachment(t2) {\n    this.compositionController.rerenderViewForObject(t2);\n    const e2 = this.attachmentManager.manageAttachment(t2);\n    return this.notifyEditorElement(\"attachment-edit\", { attachment: e2 }), this.notifyEditorElement(\"change\");\n  }\n  compositionDidChangeAttachmentPreviewURL(t2) {\n    return this.compositionController.invalidateViewForObject(t2), this.notifyEditorElement(\"change\");\n  }\n  compositionDidRemoveAttachment(t2) {\n    const e2 = this.attachmentManager.unmanageAttachment(t2);\n    return this.notifyEditorElement(\"attachment-remove\", { attachment: e2 });\n  }\n  compositionDidStartEditingAttachment(t2, e2) {\n    return this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(t2), this.compositionController.installAttachmentEditorForAttachment(t2, e2), this.selectionManager.setLocationRange(this.attachmentLocationRange);\n  }\n  compositionDidStopEditingAttachment(t2) {\n    this.compositionController.uninstallAttachmentEditor(), this.attachmentLocationRange = null;\n  }\n  compositionDidRequestChangingSelectionToLocationRange(t2) {\n    if (!this.loadingSnapshot || this.isFocused())\n      return this.requestedLocationRange = t2, this.compositionRevisionWhenLocationRangeRequested = this.composition.revision, this.handlingInput ? void 0 : this.render();\n  }\n  compositionWillLoadSnapshot() {\n    this.loadingSnapshot = true;\n  }\n  compositionDidLoadSnapshot() {\n    this.compositionController.refreshViewCache(), this.render(), this.loadingSnapshot = false;\n  }\n  getSelectionManager() {\n    return this.selectionManager;\n  }\n  attachmentManagerDidRequestRemovalOfAttachment(t2) {\n    return this.removeAttachment(t2);\n  }\n  compositionControllerWillSyncDocumentView() {\n    return this.inputController.editorWillSyncDocumentView(), this.selectionManager.lock(), this.selectionManager.clearSelection();\n  }\n  compositionControllerDidSyncDocumentView() {\n    return this.inputController.editorDidSyncDocumentView(), this.selectionManager.unlock(), this.updateCurrentActions(), this.notifyEditorElement(\"sync\");\n  }\n  compositionControllerDidRender() {\n    this.requestedLocationRange && (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision && this.selectionManager.setLocationRange(this.requestedLocationRange), this.requestedLocationRange = null, this.compositionRevisionWhenLocationRangeRequested = null), this.renderedCompositionRevision !== this.composition.revision && (this.runEditorFilters(), this.composition.updateCurrentAttributes(), this.notifyEditorElement(\"render\")), this.renderedCompositionRevision = this.composition.revision;\n  }\n  compositionControllerDidFocus() {\n    return this.isFocusedInvisibly() && this.setLocationRange({ index: 0, offset: 0 }), this.toolbarController.hideDialog(), this.notifyEditorElement(\"focus\");\n  }\n  compositionControllerDidBlur() {\n    return this.notifyEditorElement(\"blur\");\n  }\n  compositionControllerDidSelectAttachment(t2, e2) {\n    return this.toolbarController.hideDialog(), this.composition.editAttachment(t2, e2);\n  }\n  compositionControllerDidRequestDeselectingAttachment(t2) {\n    const e2 = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(t2);\n    return this.selectionManager.setLocationRange(e2[1]);\n  }\n  compositionControllerWillUpdateAttachment(t2) {\n    return this.editor.recordUndoEntry(\"Edit Attachment\", { context: t2.id, consolidatable: true });\n  }\n  compositionControllerDidRequestRemovalOfAttachment(t2) {\n    return this.removeAttachment(t2);\n  }\n  inputControllerWillHandleInput() {\n    this.handlingInput = true, this.requestedRender = false;\n  }\n  inputControllerDidRequestRender() {\n    this.requestedRender = true;\n  }\n  inputControllerDidHandleInput() {\n    if (this.handlingInput = false, this.requestedRender)\n      return this.requestedRender = false, this.render();\n  }\n  inputControllerDidAllowUnhandledInput() {\n    return this.notifyEditorElement(\"change\");\n  }\n  inputControllerDidRequestReparse() {\n    return this.reparse();\n  }\n  inputControllerWillPerformTyping() {\n    return this.recordTypingUndoEntry();\n  }\n  inputControllerWillPerformFormatting(t2) {\n    return this.recordFormattingUndoEntry(t2);\n  }\n  inputControllerWillCutText() {\n    return this.editor.recordUndoEntry(\"Cut\");\n  }\n  inputControllerWillPaste(t2) {\n    return this.editor.recordUndoEntry(\"Paste\"), this.pasting = true, this.notifyEditorElement(\"before-paste\", { paste: t2 });\n  }\n  inputControllerDidPaste(t2) {\n    return t2.range = this.pastedRange, this.pastedRange = null, this.pasting = null, this.notifyEditorElement(\"paste\", { paste: t2 });\n  }\n  inputControllerWillMoveText() {\n    return this.editor.recordUndoEntry(\"Move\");\n  }\n  inputControllerWillAttachFiles() {\n    return this.editor.recordUndoEntry(\"Drop Files\");\n  }\n  inputControllerWillPerformUndo() {\n    return this.editor.undo();\n  }\n  inputControllerWillPerformRedo() {\n    return this.editor.redo();\n  }\n  inputControllerDidReceiveKeyboardCommand(t2) {\n    return this.toolbarController.applyKeyboardCommand(t2);\n  }\n  inputControllerDidStartDrag() {\n    this.locationRangeBeforeDrag = this.selectionManager.getLocationRange();\n  }\n  inputControllerDidReceiveDragOverPoint(t2) {\n    return this.selectionManager.setLocationRangeFromPointRange(t2);\n  }\n  inputControllerDidCancelDrag() {\n    this.selectionManager.setLocationRange(this.locationRangeBeforeDrag), this.locationRangeBeforeDrag = null;\n  }\n  locationRangeDidChange(t2) {\n    return this.composition.updateCurrentAttributes(), this.updateCurrentActions(), this.attachmentLocationRange && !wt(this.attachmentLocationRange, t2) && this.composition.stopEditingAttachment(), this.notifyEditorElement(\"selection-change\");\n  }\n  toolbarDidClickButton() {\n    if (!this.getLocationRange())\n      return this.setLocationRange({ index: 0, offset: 0 });\n  }\n  toolbarDidInvokeAction(t2) {\n    return this.invokeAction(t2);\n  }\n  toolbarDidToggleAttribute(t2) {\n    if (this.recordFormattingUndoEntry(t2), this.composition.toggleCurrentAttribute(t2), this.render(), !this.selectionFrozen)\n      return this.editorElement.focus();\n  }\n  toolbarDidUpdateAttribute(t2, e2) {\n    if (this.recordFormattingUndoEntry(t2), this.composition.setCurrentAttribute(t2, e2), this.render(), !this.selectionFrozen)\n      return this.editorElement.focus();\n  }\n  toolbarDidRemoveAttribute(t2) {\n    if (this.recordFormattingUndoEntry(t2), this.composition.removeCurrentAttribute(t2), this.render(), !this.selectionFrozen)\n      return this.editorElement.focus();\n  }\n  toolbarWillShowDialog(t2) {\n    return this.composition.expandSelectionForEditing(), this.freezeSelection();\n  }\n  toolbarDidShowDialog(t2) {\n    return this.notifyEditorElement(\"toolbar-dialog-show\", { dialogName: t2 });\n  }\n  toolbarDidHideDialog(t2) {\n    return this.thawSelection(), this.editorElement.focus(), this.notifyEditorElement(\"toolbar-dialog-hide\", { dialogName: t2 });\n  }\n  freezeSelection() {\n    if (!this.selectionFrozen)\n      return this.selectionManager.lock(), this.composition.freezeSelection(), this.selectionFrozen = true, this.render();\n  }\n  thawSelection() {\n    if (this.selectionFrozen)\n      return this.composition.thawSelection(), this.selectionManager.unlock(), this.selectionFrozen = false, this.render();\n  }\n  canInvokeAction(t2) {\n    return !!this.actionIsExternal(t2) || !(null === (e2 = this.actions[t2]) || void 0 === e2 || null === (e2 = e2.test) || void 0 === e2 || !e2.call(this));\n    var e2;\n  }\n  invokeAction(t2) {\n    return this.actionIsExternal(t2) ? this.notifyEditorElement(\"action-invoke\", { actionName: t2 }) : null === (e2 = this.actions[t2]) || void 0 === e2 || null === (e2 = e2.perform) || void 0 === e2 ? void 0 : e2.call(this);\n    var e2;\n  }\n  actionIsExternal(t2) {\n    return /^x-./.test(t2);\n  }\n  getCurrentActions() {\n    const t2 = {};\n    for (const e2 in this.actions)\n      t2[e2] = this.canInvokeAction(e2);\n    return t2;\n  }\n  updateCurrentActions() {\n    const t2 = this.getCurrentActions();\n    if (!kt(t2, this.currentActions))\n      return this.currentActions = t2, this.toolbarController.updateActions(this.currentActions), this.notifyEditorElement(\"actions-change\", { actions: this.currentActions });\n  }\n  runEditorFilters() {\n    let t2 = this.composition.getSnapshot();\n    if (Array.from(this.editor.filters).forEach((e3) => {\n      const { document: i3, selectedRange: n2 } = t2;\n      t2 = e3.call(this.editor, t2) || {}, t2.document || (t2.document = i3), t2.selectedRange || (t2.selectedRange = n2);\n    }), e2 = t2, i2 = this.composition.getSnapshot(), !wt(e2.selectedRange, i2.selectedRange) || !e2.document.isEqualTo(i2.document))\n      return this.composition.loadSnapshot(t2);\n    var e2, i2;\n  }\n  updateInputElement() {\n    const t2 = function(t3, e2) {\n      const i2 = li[e2];\n      if (i2)\n        return i2(t3);\n      throw new Error(\"unknown content type: \".concat(e2));\n    }(this.compositionController.getSerializableElement(), \"text/html\");\n    return this.editorElement.setInputElementValue(t2);\n  }\n  notifyEditorElement(t2, e2) {\n    switch (t2) {\n      case \"document-change\":\n        this.documentChangedSinceLastRender = true;\n        break;\n      case \"render\":\n        this.documentChangedSinceLastRender && (this.documentChangedSinceLastRender = false, this.notifyEditorElement(\"change\"));\n        break;\n      case \"change\":\n      case \"attachment-add\":\n      case \"attachment-edit\":\n      case \"attachment-remove\":\n        this.updateInputElement();\n    }\n    return this.editorElement.notify(t2, e2);\n  }\n  removeAttachment(t2) {\n    return this.editor.recordUndoEntry(\"Delete Attachment\"), this.composition.removeAttachment(t2), this.render();\n  }\n  recordFormattingUndoEntry(t2) {\n    const e2 = gt(t2), i2 = this.selectionManager.getLocationRange();\n    if (e2 || !Dt(i2))\n      return this.editor.recordUndoEntry(\"Formatting\", { context: this.getUndoContext(), consolidatable: true });\n  }\n  recordTypingUndoEntry() {\n    return this.editor.recordUndoEntry(\"Typing\", { context: this.getUndoContext(this.currentAttributes), consolidatable: true });\n  }\n  getUndoContext() {\n    for (var t2 = arguments.length, e2 = new Array(t2), i2 = 0; i2 < t2; i2++)\n      e2[i2] = arguments[i2];\n    return [this.getLocationContext(), this.getTimeContext(), ...Array.from(e2)];\n  }\n  getLocationContext() {\n    const t2 = this.selectionManager.getLocationRange();\n    return Dt(t2) ? t2[0].index : t2;\n  }\n  getTimeContext() {\n    return q.interval > 0 ? Math.floor((/* @__PURE__ */ new Date()).getTime() / q.interval) : 0;\n  }\n  isFocused() {\n    var t2;\n    return this.editorElement === (null === (t2 = this.editorElement.ownerDocument) || void 0 === t2 ? void 0 : t2.activeElement);\n  }\n  isFocusedInvisibly() {\n    return this.isFocused() && !this.getLocationRange();\n  }\n  get actions() {\n    return this.constructor.actions;\n  }\n};\nAe(Rn, \"actions\", { undo: { test() {\n  return this.editor.canUndo();\n}, perform() {\n  return this.editor.undo();\n} }, redo: { test() {\n  return this.editor.canRedo();\n}, perform() {\n  return this.editor.redo();\n} }, link: { test() {\n  return this.editor.canActivateAttribute(\"href\");\n} }, increaseNestingLevel: { test() {\n  return this.editor.canIncreaseNestingLevel();\n}, perform() {\n  return this.editor.increaseNestingLevel() && this.render();\n} }, decreaseNestingLevel: { test() {\n  return this.editor.canDecreaseNestingLevel();\n}, perform() {\n  return this.editor.decreaseNestingLevel() && this.render();\n} }, attachFiles: { test: () => true, perform() {\n  return M.pickFiles(this.editor.insertFiles);\n} } }), Rn.proxyMethod(\"getSelectionManager().setLocationRange\"), Rn.proxyMethod(\"getSelectionManager().getLocationRange\");\nvar Sn = Object.freeze({ __proto__: null, AttachmentEditorController: Pi, CompositionController: Ni, Controller: Oi, EditorController: Rn, InputController: Ki, Level0InputController: Qi, Level2InputController: on, ToolbarController: Cn });\nvar En = Object.freeze({ __proto__: null, MutationObserver: Ui, SelectionChangeObserver: Ft });\nvar kn = Object.freeze({ __proto__: null, FileVerificationOperation: Vi, ImagePreloadOperation: Ce });\nbt(\"trix-toolbar\", \"%t {\\n  display: block;\\n}\\n\\n%t {\\n  white-space: nowrap;\\n}\\n\\n%t [data-trix-dialog] {\\n  display: none;\\n}\\n\\n%t [data-trix-dialog][data-trix-active] {\\n  display: block;\\n}\\n\\n%t [data-trix-dialog] [data-trix-validate]:invalid {\\n  background-color: #ffdddd;\\n}\");\nvar Ln = class extends HTMLElement {\n  connectedCallback() {\n    \"\" === this.innerHTML && (this.innerHTML = U.getDefaultHTML());\n  }\n};\nvar Dn = 0;\nvar wn = function(t2) {\n  if (!t2.hasAttribute(\"contenteditable\"))\n    return t2.setAttribute(\"contenteditable\", \"\"), function(t3) {\n      let e2 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n      return e2.times = 1, f(t3, e2);\n    }(\"focus\", { onElement: t2, withCallback: () => Tn(t2) });\n};\nvar Tn = function(t2) {\n  return Bn(t2), Fn(t2);\n};\nvar Bn = function(t2) {\n  var e2, i2;\n  if (null !== (e2 = (i2 = document).queryCommandSupported) && void 0 !== e2 && e2.call(i2, \"enableObjectResizing\"))\n    return document.execCommand(\"enableObjectResizing\", false, false), f(\"mscontrolselect\", { onElement: t2, preventDefault: true });\n};\nvar Fn = function(t2) {\n  var e2, i2;\n  if (null !== (e2 = (i2 = document).queryCommandSupported) && void 0 !== e2 && e2.call(i2, \"DefaultParagraphSeparator\")) {\n    const { tagName: t3 } = n.default;\n    if ([\"div\", \"p\"].includes(t3))\n      return document.execCommand(\"DefaultParagraphSeparator\", false, t3);\n  }\n};\nvar In = a.forcesObjectResizing ? { display: \"inline\", width: \"auto\" } : { display: \"inline-block\", width: \"1px\" };\nbt(\"trix-editor\", \"%t {\\n    display: block;\\n}\\n\\n%t:empty:not(:focus)::before {\\n    content: attr(placeholder);\\n    color: graytext;\\n    cursor: text;\\n    pointer-events: none;\\n    white-space: pre-line;\\n}\\n\\n%t a[contenteditable=false] {\\n    cursor: text;\\n}\\n\\n%t img {\\n    max-width: 100%;\\n    height: auto;\\n}\\n\\n%t \".concat(e, \" figcaption textarea {\\n    resize: none;\\n}\\n\\n%t \").concat(e, \" figcaption textarea.trix-autoresize-clone {\\n    position: absolute;\\n    left: -9999px;\\n    max-height: 0px;\\n}\\n\\n%t \").concat(e, \" figcaption[data-trix-placeholder]:empty::before {\\n    content: attr(data-trix-placeholder);\\n    color: graytext;\\n}\\n\\n%t [data-trix-cursor-target] {\\n    display: \").concat(In.display, \" !important;\\n    width: \").concat(In.width, \" !important;\\n    padding: 0 !important;\\n    margin: 0 !important;\\n    border: none !important;\\n}\\n\\n%t [data-trix-cursor-target=left] {\\n    vertical-align: top !important;\\n    margin-left: -1px !important;\\n}\\n\\n%t [data-trix-cursor-target=right] {\\n    vertical-align: bottom !important;\\n    margin-right: -1px !important;\\n}\"));\nvar Pn = class extends HTMLElement {\n  get trixId() {\n    return this.hasAttribute(\"trix-id\") ? this.getAttribute(\"trix-id\") : (this.setAttribute(\"trix-id\", ++Dn), this.trixId);\n  }\n  get labels() {\n    const t2 = [];\n    this.id && this.ownerDocument && t2.push(...Array.from(this.ownerDocument.querySelectorAll(\"label[for='\".concat(this.id, \"']\")) || []));\n    const e2 = A(this, { matchingSelector: \"label\" });\n    return e2 && [this, null].includes(e2.control) && t2.push(e2), t2;\n  }\n  get toolbarElement() {\n    var t2;\n    if (this.hasAttribute(\"toolbar\"))\n      return null === (t2 = this.ownerDocument) || void 0 === t2 ? void 0 : t2.getElementById(this.getAttribute(\"toolbar\"));\n    if (this.parentNode) {\n      const t3 = \"trix-toolbar-\".concat(this.trixId);\n      this.setAttribute(\"toolbar\", t3);\n      const e2 = k(\"trix-toolbar\", { id: t3 });\n      return this.parentNode.insertBefore(e2, this), e2;\n    }\n  }\n  get form() {\n    var t2;\n    return null === (t2 = this.inputElement) || void 0 === t2 ? void 0 : t2.form;\n  }\n  get inputElement() {\n    var t2;\n    if (this.hasAttribute(\"input\"))\n      return null === (t2 = this.ownerDocument) || void 0 === t2 ? void 0 : t2.getElementById(this.getAttribute(\"input\"));\n    if (this.parentNode) {\n      const t3 = \"trix-input-\".concat(this.trixId);\n      this.setAttribute(\"input\", t3);\n      const e2 = k(\"input\", { type: \"hidden\", id: t3 });\n      return this.parentNode.insertBefore(e2, this.nextElementSibling), e2;\n    }\n  }\n  get editor() {\n    var t2;\n    return null === (t2 = this.editorController) || void 0 === t2 ? void 0 : t2.editor;\n  }\n  get name() {\n    var t2;\n    return null === (t2 = this.inputElement) || void 0 === t2 ? void 0 : t2.name;\n  }\n  get value() {\n    var t2;\n    return null === (t2 = this.inputElement) || void 0 === t2 ? void 0 : t2.value;\n  }\n  set value(t2) {\n    var e2;\n    this.defaultValue = t2, null === (e2 = this.editor) || void 0 === e2 || e2.loadHTML(this.defaultValue);\n  }\n  notify(t2, e2) {\n    if (this.editorController)\n      return b(\"trix-\".concat(t2), { onElement: this, attributes: e2 });\n  }\n  setInputElementValue(t2) {\n    this.inputElement && (this.inputElement.value = t2);\n  }\n  connectedCallback() {\n    this.hasAttribute(\"data-trix-internal\") || (wn(this), function(t2) {\n      if (!t2.hasAttribute(\"role\"))\n        t2.setAttribute(\"role\", \"textbox\");\n    }(this), function(t2) {\n      if (t2.hasAttribute(\"aria-label\") || t2.hasAttribute(\"aria-labelledby\"))\n        return;\n      const e2 = function() {\n        const e3 = Array.from(t2.labels).map((e4) => {\n          if (!e4.contains(t2))\n            return e4.textContent;\n        }).filter((t3) => t3), i2 = e3.join(\" \");\n        return i2 ? t2.setAttribute(\"aria-label\", i2) : t2.removeAttribute(\"aria-label\");\n      };\n      e2(), f(\"focus\", { onElement: t2, withCallback: e2 });\n    }(this), this.editorController || (b(\"trix-before-initialize\", { onElement: this }), this.editorController = new Rn({ editorElement: this, html: this.defaultValue = this.value }), requestAnimationFrame(() => b(\"trix-initialize\", { onElement: this }))), this.editorController.registerSelectionManager(), this.registerResetListener(), this.registerClickListener(), function(t2) {\n      if (!document.querySelector(\":focus\") && t2.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === t2)\n        t2.focus();\n    }(this));\n  }\n  disconnectedCallback() {\n    var t2;\n    return null === (t2 = this.editorController) || void 0 === t2 || t2.unregisterSelectionManager(), this.unregisterResetListener(), this.unregisterClickListener();\n  }\n  registerResetListener() {\n    return this.resetListener = this.resetBubbled.bind(this), window.addEventListener(\"reset\", this.resetListener, false);\n  }\n  unregisterResetListener() {\n    return window.removeEventListener(\"reset\", this.resetListener, false);\n  }\n  registerClickListener() {\n    return this.clickListener = this.clickBubbled.bind(this), window.addEventListener(\"click\", this.clickListener, false);\n  }\n  unregisterClickListener() {\n    return window.removeEventListener(\"click\", this.clickListener, false);\n  }\n  resetBubbled(t2) {\n    if (!t2.defaultPrevented && t2.target === this.form)\n      return this.reset();\n  }\n  clickBubbled(t2) {\n    if (t2.defaultPrevented)\n      return;\n    if (this.contains(t2.target))\n      return;\n    const e2 = A(t2.target, { matchingSelector: \"label\" });\n    return e2 && Array.from(this.labels).includes(e2) ? this.focus() : void 0;\n  }\n  reset() {\n    this.value = this.defaultValue;\n  }\n};\nvar Nn = { VERSION: t, config: V, core: ci, models: Di, views: wi, controllers: Sn, observers: En, operations: kn, elements: Object.freeze({ __proto__: null, TrixEditorElement: Pn, TrixToolbarElement: Ln }), filters: Object.freeze({ __proto__: null, Filter: bi, attachmentGalleryFilter: vi }) };\nObject.assign(Nn, Di), window.Trix = Nn, setTimeout(function() {\n  customElements.get(\"trix-toolbar\") || customElements.define(\"trix-toolbar\", Ln), customElements.get(\"trix-editor\") || customElements.define(\"trix-editor\", Pn);\n}, 0);\nexport {\n  Nn as default\n};\n//# sourceMappingURL=trix.js.map\n","// node_modules/@rails/actiontext/app/assets/javascripts/actiontext.esm.js\nvar sparkMd5 = {\n  exports: {}\n};\n(function(module, exports) {\n  (function(factory) {\n    {\n      module.exports = factory();\n    }\n  })(function(undefined$1) {\n    var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n    function md5cycle(x, k) {\n      var a = x[0], b = x[1], c = x[2], d = x[3];\n      a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[10] - 42063 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n      a = (a << 7 | a >>> 25) + b | 0;\n      d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n      d = (d << 12 | d >>> 20) + a | 0;\n      c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n      c = (c << 17 | c >>> 15) + d | 0;\n      b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n      b = (b << 22 | b >>> 10) + c | 0;\n      a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n      a = (a << 5 | a >>> 27) + b | 0;\n      d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n      d = (d << 9 | d >>> 23) + a | 0;\n      c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n      c = (c << 14 | c >>> 18) + d | 0;\n      b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n      b = (b << 20 | b >>> 12) + c | 0;\n      a += (b ^ c ^ d) + k[5] - 378558 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n      a = (a << 4 | a >>> 28) + b | 0;\n      d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n      d = (d << 11 | d >>> 21) + a | 0;\n      c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n      c = (c << 16 | c >>> 16) + d | 0;\n      b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n      b = (b << 23 | b >>> 9) + c | 0;\n      a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n      a = (a << 6 | a >>> 26) + b | 0;\n      d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n      d = (d << 10 | d >>> 22) + a | 0;\n      c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n      c = (c << 15 | c >>> 17) + d | 0;\n      b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n      b = (b << 21 | b >>> 11) + c | 0;\n      x[0] = a + x[0] | 0;\n      x[1] = b + x[1] | 0;\n      x[2] = c + x[2] | 0;\n      x[3] = d + x[3] | 0;\n    }\n    function md5blk(s) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n      }\n      return md5blks;\n    }\n    function md5blk_array(a) {\n      var md5blks = [], i;\n      for (i = 0; i < 64; i += 4) {\n        md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n      }\n      return md5blks;\n    }\n    function md51(s) {\n      var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk(s.substring(i - 64, i)));\n      }\n      s = s.substring(i - 64);\n      length = s.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function md51_array(a) {\n      var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;\n      for (i = 64; i <= n; i += 64) {\n        md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n      }\n      a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n      length = a.length;\n      tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= a[i] << (i % 4 << 3);\n      }\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(state, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = n * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(state, tail);\n      return state;\n    }\n    function rhex(n) {\n      var s = \"\", j;\n      for (j = 0; j < 4; j += 1) {\n        s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n      }\n      return s;\n    }\n    function hex(x) {\n      var i;\n      for (i = 0; i < x.length; i += 1) {\n        x[i] = rhex(x[i]);\n      }\n      return x.join(\"\");\n    }\n    if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\")\n      ;\n    if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n      (function() {\n        function clamp(val, length) {\n          val = val | 0 || 0;\n          if (val < 0) {\n            return Math.max(val + length, 0);\n          }\n          return Math.min(val, length);\n        }\n        ArrayBuffer.prototype.slice = function(from, to) {\n          var length = this.byteLength, begin = clamp(from, length), end = length, num, target, targetArray, sourceArray;\n          if (to !== undefined$1) {\n            end = clamp(to, length);\n          }\n          if (begin > end) {\n            return new ArrayBuffer(0);\n          }\n          num = end - begin;\n          target = new ArrayBuffer(num);\n          targetArray = new Uint8Array(target);\n          sourceArray = new Uint8Array(this, begin, num);\n          targetArray.set(sourceArray);\n          return target;\n        };\n      })();\n    }\n    function toUtf8(str) {\n      if (/[\\u0080-\\uFFFF]/.test(str)) {\n        str = unescape(encodeURIComponent(str));\n      }\n      return str;\n    }\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n      var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;\n      for (i = 0; i < length; i += 1) {\n        arr[i] = str.charCodeAt(i);\n      }\n      return returnUInt8Array ? arr : buff;\n    }\n    function arrayBuffer2Utf8Str(buff) {\n      return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n      var result = new Uint8Array(first.byteLength + second.byteLength);\n      result.set(new Uint8Array(first));\n      result.set(new Uint8Array(second), first.byteLength);\n      return returnUInt8Array ? result : result.buffer;\n    }\n    function hexToBinaryString(hex2) {\n      var bytes = [], length = hex2.length, x;\n      for (x = 0; x < length - 1; x += 2) {\n        bytes.push(parseInt(hex2.substr(x, 2), 16));\n      }\n      return String.fromCharCode.apply(String, bytes);\n    }\n    function SparkMD52() {\n      this.reset();\n    }\n    SparkMD52.prototype.append = function(str) {\n      this.appendBinary(toUtf8(str));\n      return this;\n    };\n    SparkMD52.prototype.appendBinary = function(contents) {\n      this._buff += contents;\n      this._length += contents.length;\n      var length = this._buff.length, i;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n      }\n      this._buff = this._buff.substring(i - 64);\n      return this;\n    };\n    SparkMD52.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD52.prototype.reset = function() {\n      this._buff = \"\";\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD52.prototype.getState = function() {\n      return {\n        buff: this._buff,\n        length: this._length,\n        hash: this._hash.slice()\n      };\n    };\n    SparkMD52.prototype.setState = function(state) {\n      this._buff = state.buff;\n      this._length = state.length;\n      this._hash = state.hash;\n      return this;\n    };\n    SparkMD52.prototype.destroy = function() {\n      delete this._hash;\n      delete this._buff;\n      delete this._length;\n    };\n    SparkMD52.prototype._finish = function(tail, length) {\n      var i = length, tmp, lo, hi;\n      tail[i >> 2] |= 128 << (i % 4 << 3);\n      if (i > 55) {\n        md5cycle(this._hash, tail);\n        for (i = 0; i < 16; i += 1) {\n          tail[i] = 0;\n        }\n      }\n      tmp = this._length * 8;\n      tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n      lo = parseInt(tmp[2], 16);\n      hi = parseInt(tmp[1], 16) || 0;\n      tail[14] = lo;\n      tail[15] = hi;\n      md5cycle(this._hash, tail);\n    };\n    SparkMD52.hash = function(str, raw) {\n      return SparkMD52.hashBinary(toUtf8(str), raw);\n    };\n    SparkMD52.hashBinary = function(content, raw) {\n      var hash = md51(content), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    SparkMD52.ArrayBuffer = function() {\n      this.reset();\n    };\n    SparkMD52.ArrayBuffer.prototype.append = function(arr) {\n      var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;\n      this._length += arr.byteLength;\n      for (i = 64; i <= length; i += 64) {\n        md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n      }\n      this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n      return this;\n    };\n    SparkMD52.ArrayBuffer.prototype.end = function(raw) {\n      var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret;\n      for (i = 0; i < length; i += 1) {\n        tail[i >> 2] |= buff[i] << (i % 4 << 3);\n      }\n      this._finish(tail, length);\n      ret = hex(this._hash);\n      if (raw) {\n        ret = hexToBinaryString(ret);\n      }\n      this.reset();\n      return ret;\n    };\n    SparkMD52.ArrayBuffer.prototype.reset = function() {\n      this._buff = new Uint8Array(0);\n      this._length = 0;\n      this._hash = [1732584193, -271733879, -1732584194, 271733878];\n      return this;\n    };\n    SparkMD52.ArrayBuffer.prototype.getState = function() {\n      var state = SparkMD52.prototype.getState.call(this);\n      state.buff = arrayBuffer2Utf8Str(state.buff);\n      return state;\n    };\n    SparkMD52.ArrayBuffer.prototype.setState = function(state) {\n      state.buff = utf8Str2ArrayBuffer(state.buff, true);\n      return SparkMD52.prototype.setState.call(this, state);\n    };\n    SparkMD52.ArrayBuffer.prototype.destroy = SparkMD52.prototype.destroy;\n    SparkMD52.ArrayBuffer.prototype._finish = SparkMD52.prototype._finish;\n    SparkMD52.ArrayBuffer.hash = function(arr, raw) {\n      var hash = md51_array(new Uint8Array(arr)), ret = hex(hash);\n      return raw ? hexToBinaryString(ret) : ret;\n    };\n    return SparkMD52;\n  });\n})(sparkMd5);\nvar SparkMD5 = sparkMd5.exports;\nvar fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\nvar FileChecksum = class _FileChecksum {\n  static create(file, callback) {\n    const instance = new _FileChecksum(file);\n    instance.create(callback);\n  }\n  constructor(file) {\n    this.file = file;\n    this.chunkSize = 2097152;\n    this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n    this.chunkIndex = 0;\n  }\n  create(callback) {\n    this.callback = callback;\n    this.md5Buffer = new SparkMD5.ArrayBuffer();\n    this.fileReader = new FileReader();\n    this.fileReader.addEventListener(\"load\", (event) => this.fileReaderDidLoad(event));\n    this.fileReader.addEventListener(\"error\", (event) => this.fileReaderDidError(event));\n    this.readNextChunk();\n  }\n  fileReaderDidLoad(event) {\n    this.md5Buffer.append(event.target.result);\n    if (!this.readNextChunk()) {\n      const binaryDigest = this.md5Buffer.end(true);\n      const base64digest = btoa(binaryDigest);\n      this.callback(null, base64digest);\n    }\n  }\n  fileReaderDidError(event) {\n    this.callback(`Error reading ${this.file.name}`);\n  }\n  readNextChunk() {\n    if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n      const start2 = this.chunkIndex * this.chunkSize;\n      const end = Math.min(start2 + this.chunkSize, this.file.size);\n      const bytes = fileSlice.call(this.file, start2, end);\n      this.fileReader.readAsArrayBuffer(bytes);\n      this.chunkIndex++;\n      return true;\n    } else {\n      return false;\n    }\n  }\n};\nfunction getMetaValue(name) {\n  const element = findElement(document.head, `meta[name=\"${name}\"]`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\nfunction findElements(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  const elements = root.querySelectorAll(selector);\n  return toArray(elements);\n}\nfunction findElement(root, selector) {\n  if (typeof root == \"string\") {\n    selector = root;\n    root = document;\n  }\n  return root.querySelector(selector);\n}\nfunction dispatchEvent(element, type, eventInit = {}) {\n  const { disabled } = element;\n  const { bubbles, cancelable, detail } = eventInit;\n  const event = document.createEvent(\"Event\");\n  event.initEvent(type, bubbles || true, cancelable || true);\n  event.detail = detail || {};\n  try {\n    element.disabled = false;\n    element.dispatchEvent(event);\n  } finally {\n    element.disabled = disabled;\n  }\n  return event;\n}\nfunction toArray(value) {\n  if (Array.isArray(value)) {\n    return value;\n  } else if (Array.from) {\n    return Array.from(value);\n  } else {\n    return [].slice.call(value);\n  }\n}\nvar BlobRecord = class {\n  constructor(file, checksum, url, customHeaders = {}) {\n    this.file = file;\n    this.attributes = {\n      filename: file.name,\n      content_type: file.type || \"application/octet-stream\",\n      byte_size: file.size,\n      checksum\n    };\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"POST\", url, true);\n    this.xhr.responseType = \"json\";\n    this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n    this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n    this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n    Object.keys(customHeaders).forEach((headerKey) => {\n      this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);\n    });\n    const csrfToken = getMetaValue(\"csrf-token\");\n    if (csrfToken != void 0) {\n      this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n    }\n    this.xhr.addEventListener(\"load\", (event) => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", (event) => this.requestDidError(event));\n  }\n  get status() {\n    return this.xhr.status;\n  }\n  get response() {\n    const { responseType, response } = this.xhr;\n    if (responseType == \"json\") {\n      return response;\n    } else {\n      return JSON.parse(response);\n    }\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(JSON.stringify({\n      blob: this.attributes\n    }));\n  }\n  requestDidLoad(event) {\n    if (this.status >= 200 && this.status < 300) {\n      const { response } = this;\n      const { direct_upload } = response;\n      delete response.direct_upload;\n      this.attributes = response;\n      this.directUploadData = direct_upload;\n      this.callback(null, this.toJSON());\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error creating Blob for \"${this.file.name}\". Status: ${this.status}`);\n  }\n  toJSON() {\n    const result = {};\n    for (const key in this.attributes) {\n      result[key] = this.attributes[key];\n    }\n    return result;\n  }\n};\nvar BlobUpload = class {\n  constructor(blob) {\n    this.blob = blob;\n    this.file = blob.file;\n    const { url, headers } = blob.directUploadData;\n    this.xhr = new XMLHttpRequest();\n    this.xhr.open(\"PUT\", url, true);\n    this.xhr.responseType = \"text\";\n    for (const key in headers) {\n      this.xhr.setRequestHeader(key, headers[key]);\n    }\n    this.xhr.addEventListener(\"load\", (event) => this.requestDidLoad(event));\n    this.xhr.addEventListener(\"error\", (event) => this.requestDidError(event));\n  }\n  create(callback) {\n    this.callback = callback;\n    this.xhr.send(this.file.slice());\n  }\n  requestDidLoad(event) {\n    const { status, response } = this.xhr;\n    if (status >= 200 && status < 300) {\n      this.callback(null, response);\n    } else {\n      this.requestDidError(event);\n    }\n  }\n  requestDidError(event) {\n    this.callback(`Error storing \"${this.file.name}\". Status: ${this.xhr.status}`);\n  }\n};\nvar id = 0;\nvar DirectUpload = class {\n  constructor(file, url, delegate, customHeaders = {}) {\n    this.id = ++id;\n    this.file = file;\n    this.url = url;\n    this.delegate = delegate;\n    this.customHeaders = customHeaders;\n  }\n  create(callback) {\n    FileChecksum.create(this.file, (error, checksum) => {\n      if (error) {\n        callback(error);\n        return;\n      }\n      const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);\n      notify(this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n      blob.create((error2) => {\n        if (error2) {\n          callback(error2);\n        } else {\n          const upload = new BlobUpload(blob);\n          notify(this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n          upload.create((error3) => {\n            if (error3) {\n              callback(error3);\n            } else {\n              callback(null, blob.toJSON());\n            }\n          });\n        }\n      });\n    });\n  }\n};\nfunction notify(object, methodName, ...messages) {\n  if (object && typeof object[methodName] == \"function\") {\n    return object[methodName](...messages);\n  }\n}\nvar DirectUploadController = class {\n  constructor(input, file) {\n    this.input = input;\n    this.file = file;\n    this.directUpload = new DirectUpload(this.file, this.url, this);\n    this.dispatch(\"initialize\");\n  }\n  start(callback) {\n    const hiddenInput = document.createElement(\"input\");\n    hiddenInput.type = \"hidden\";\n    hiddenInput.name = this.input.name;\n    this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n    this.dispatch(\"start\");\n    this.directUpload.create((error, attributes) => {\n      if (error) {\n        hiddenInput.parentNode.removeChild(hiddenInput);\n        this.dispatchError(error);\n      } else {\n        hiddenInput.value = attributes.signed_id;\n      }\n      this.dispatch(\"end\");\n      callback(error);\n    });\n  }\n  uploadRequestDidProgress(event) {\n    const progress = event.loaded / event.total * 100;\n    if (progress) {\n      this.dispatch(\"progress\", {\n        progress\n      });\n    }\n  }\n  get url() {\n    return this.input.getAttribute(\"data-direct-upload-url\");\n  }\n  dispatch(name, detail = {}) {\n    detail.file = this.file;\n    detail.id = this.directUpload.id;\n    return dispatchEvent(this.input, `direct-upload:${name}`, {\n      detail\n    });\n  }\n  dispatchError(error) {\n    const event = this.dispatch(\"error\", {\n      error\n    });\n    if (!event.defaultPrevented) {\n      alert(error);\n    }\n  }\n  directUploadWillCreateBlobWithXHR(xhr) {\n    this.dispatch(\"before-blob-request\", {\n      xhr\n    });\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    this.dispatch(\"before-storage-request\", {\n      xhr\n    });\n    xhr.upload.addEventListener(\"progress\", (event) => this.uploadRequestDidProgress(event));\n  }\n};\nvar inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\nvar DirectUploadsController = class {\n  constructor(form) {\n    this.form = form;\n    this.inputs = findElements(form, inputSelector).filter((input) => input.files.length);\n  }\n  start(callback) {\n    const controllers = this.createDirectUploadControllers();\n    const startNextController = () => {\n      const controller = controllers.shift();\n      if (controller) {\n        controller.start((error) => {\n          if (error) {\n            callback(error);\n            this.dispatch(\"end\");\n          } else {\n            startNextController();\n          }\n        });\n      } else {\n        callback();\n        this.dispatch(\"end\");\n      }\n    };\n    this.dispatch(\"start\");\n    startNextController();\n  }\n  createDirectUploadControllers() {\n    const controllers = [];\n    this.inputs.forEach((input) => {\n      toArray(input.files).forEach((file) => {\n        const controller = new DirectUploadController(input, file);\n        controllers.push(controller);\n      });\n    });\n    return controllers;\n  }\n  dispatch(name, detail = {}) {\n    return dispatchEvent(this.form, `direct-uploads:${name}`, {\n      detail\n    });\n  }\n};\nvar processingAttribute = \"data-direct-uploads-processing\";\nvar submitButtonsByForm = /* @__PURE__ */ new WeakMap();\nvar started = false;\nfunction start() {\n  if (!started) {\n    started = true;\n    document.addEventListener(\"click\", didClick, true);\n    document.addEventListener(\"submit\", didSubmitForm, true);\n    document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n  }\n}\nfunction didClick(event) {\n  const button = event.target.closest(\"button, input\");\n  if (button && button.type === \"submit\" && button.form) {\n    submitButtonsByForm.set(button.form, button);\n  }\n}\nfunction didSubmitForm(event) {\n  handleFormSubmissionEvent(event);\n}\nfunction didSubmitRemoteElement(event) {\n  if (event.target.tagName == \"FORM\") {\n    handleFormSubmissionEvent(event);\n  }\n}\nfunction handleFormSubmissionEvent(event) {\n  const form = event.target;\n  if (form.hasAttribute(processingAttribute)) {\n    event.preventDefault();\n    return;\n  }\n  const controller = new DirectUploadsController(form);\n  const { inputs } = controller;\n  if (inputs.length) {\n    event.preventDefault();\n    form.setAttribute(processingAttribute, \"\");\n    inputs.forEach(disable);\n    controller.start((error) => {\n      form.removeAttribute(processingAttribute);\n      if (error) {\n        inputs.forEach(enable);\n      } else {\n        submitForm(form);\n      }\n    });\n  }\n}\nfunction submitForm(form) {\n  let button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n  if (button) {\n    const { disabled } = button;\n    button.disabled = false;\n    button.focus();\n    button.click();\n    button.disabled = disabled;\n  } else {\n    button = document.createElement(\"input\");\n    button.type = \"submit\";\n    button.style.display = \"none\";\n    form.appendChild(button);\n    button.click();\n    form.removeChild(button);\n  }\n  submitButtonsByForm.delete(form);\n}\nfunction disable(input) {\n  input.disabled = true;\n}\nfunction enable(input) {\n  input.disabled = false;\n}\nfunction autostart() {\n  if (window.ActiveStorage) {\n    start();\n  }\n}\nsetTimeout(autostart, 1);\nvar AttachmentUpload = class {\n  constructor(attachment, element) {\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n  start() {\n    this.directUpload.create(this.directUploadDidComplete.bind(this));\n  }\n  directUploadWillStoreFileWithXHR(xhr) {\n    xhr.upload.addEventListener(\"progress\", (event) => {\n      const progress = event.loaded / event.total * 100;\n      this.attachment.setUploadProgress(progress);\n    });\n  }\n  directUploadDidComplete(error, attributes) {\n    if (error) {\n      throw new Error(`Direct upload failed: ${error}`);\n    }\n    this.attachment.setAttributes({\n      sgid: attributes.attachable_sgid,\n      url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n    });\n  }\n  createBlobUrl(signedId, filename) {\n    return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n  }\n  get directUploadUrl() {\n    return this.element.dataset.directUploadUrl;\n  }\n  get blobUrlTemplate() {\n    return this.element.dataset.blobUrlTemplate;\n  }\n};\naddEventListener(\"trix-attachment-add\", (event) => {\n  const { attachment, target } = event;\n  if (attachment.file) {\n    const upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n});\n//# sourceMappingURL=@rails_actiontext.js.map\n","import Tribute from 'tributejs'\n\nimport \"trix\"\nimport \"@rails/actiontext\"\n\n// only show the editor tool bar when the user is editing the field.\n// inspired by https://github.com/basecamp/trix/issues/343 and `app/assets/stylesheets/account/fields/trix_editor.scss`\n\n$(document).on('trix-initialize', function() {\n  addEventListener(\"trix-focus\", updateTrixToolbarVisability);\n  addEventListener(\"trix-blur\", updateTrixToolbarVisability);\n  updateTrixToolbarVisability();\n  initializeTribute();\n})\n\nfunction updateTrixToolbarVisability() {\n  $(\"trix-editor\").each(function (index, editorElement) {\n    var toolbarElement = editorElement.toolbarElement;\n    if (editorElement == document.activeElement) {\n      $(toolbarElement).addClass('visible');\n    } else {\n      // don't hide the toolbar if we've unfocused to focus on the link dialog.\n      if (!toolbarElement.contains(document.activeElement)) {\n        $(toolbarElement).removeClass('visible');\n      }\n    }\n  });\n}\n\nfunction initializeTribute() {\n  $('trix-editor').each(function(index) {\n    var editor = this.editor;\n\n    var mentionConfig = {\n      trigger: '@',\n      values: JSON.parse(editor.element.dataset.mentions),\n      selectTemplate: function (item) {\n        item = item.original;\n        return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n      },\n      menuItemTemplate: function (item) {\n        return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n      },\n      requireLeadingSpace: true,\n      replaceTextSuffix: ''\n    }\n\n    var topicConfig = {\n      trigger: '#',\n      values: JSON.parse(editor.element.dataset.topics),\n      selectTemplate: function (item) {\n        item = item.original;\n        return '<a href=\"' + item.protocol + '://' + item.model + '/' + item.id + '\">' + item.label + '</a>';\n      },\n      menuItemTemplate: function (item) {\n        return '<img src=\"' + item.original.photo + '\" /> ' + item.string;\n      },\n      requireLeadingSpace: true,\n      replaceTextSuffix: ''\n    }\n\n    var tribute = new Tribute({\n      collection: [topicConfig, mentionConfig],\n    });\n\n    tribute.attach(this);\n\n  })\n}\n","$(document).on('turbo:load', function() {\n  var endDateContainer = $('#end-date-container');\n  var endDateInput = $('#member_experience_end_date');\n\n  function toggleEndDateContainer(hide) {\n    if (hide) {\n      endDateInput.val('');\n      endDateContainer.hide();\n    } else {\n      endDateContainer.show();\n    }\n  }\n\n  function handleCurrentPositionChange(event) {\n    var value = event.target.value;\n    toggleEndDateContainer(value === 'true');\n  }\n\n  var currentPositionYesButton = $('#member_experience_current_position_true');\n  var currentPositionNoButton = $('#member_experience_current_position_false');\n  var currentPositionInput = $(\"input[name='member_experience[current_position]']\");\n\n  currentPositionInput.change(handleCurrentPositionChange);\n\n  if (currentPositionYesButton.prop('checked')) {\n    toggleEndDateContainer(true);\n  }\n\n  if (currentPositionNoButton.prop('checked')) {\n    toggleEndDateContainer(false);\n  }\n})\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/atoa/atoa.js\nvar require_atoa = __commonJS({\n  \"node_modules/atoa/atoa.js\"(exports, module) {\n    module.exports = function atoa(a, n) {\n      return Array.prototype.slice.call(a, n);\n    };\n  }\n});\n\n// node_modules/ticky/ticky-browser.js\nvar require_ticky_browser = __commonJS({\n  \"node_modules/ticky/ticky-browser.js\"(exports, module) {\n    var si = typeof setImmediate === \"function\";\n    var tick;\n    if (si) {\n      tick = function(fn) {\n        setImmediate(fn);\n      };\n    } else {\n      tick = function(fn) {\n        setTimeout(fn, 0);\n      };\n    }\n    module.exports = tick;\n  }\n});\n\n// node_modules/contra/debounce.js\nvar require_debounce = __commonJS({\n  \"node_modules/contra/debounce.js\"(exports, module) {\n    \"use strict\";\n    var ticky = require_ticky_browser();\n    module.exports = function debounce(fn, args, ctx) {\n      if (!fn) {\n        return;\n      }\n      ticky(function run() {\n        fn.apply(ctx || null, args || []);\n      });\n    };\n  }\n});\n\n// node_modules/contra/emitter.js\nvar require_emitter = __commonJS({\n  \"node_modules/contra/emitter.js\"(exports, module) {\n    \"use strict\";\n    var atoa = require_atoa();\n    var debounce = require_debounce();\n    module.exports = function emitter(thing, options) {\n      var opts = options || {};\n      var evt = {};\n      if (thing === void 0) {\n        thing = {};\n      }\n      thing.on = function(type, fn) {\n        if (!evt[type]) {\n          evt[type] = [fn];\n        } else {\n          evt[type].push(fn);\n        }\n        return thing;\n      };\n      thing.once = function(type, fn) {\n        fn._once = true;\n        thing.on(type, fn);\n        return thing;\n      };\n      thing.off = function(type, fn) {\n        var c = arguments.length;\n        if (c === 1) {\n          delete evt[type];\n        } else if (c === 0) {\n          evt = {};\n        } else {\n          var et = evt[type];\n          if (!et) {\n            return thing;\n          }\n          et.splice(et.indexOf(fn), 1);\n        }\n        return thing;\n      };\n      thing.emit = function() {\n        var args = atoa(arguments);\n        return thing.emitterSnapshot(args.shift()).apply(this, args);\n      };\n      thing.emitterSnapshot = function(type) {\n        var et = (evt[type] || []).slice(0);\n        return function() {\n          var args = atoa(arguments);\n          var ctx = this || thing;\n          if (type === \"error\" && opts.throws !== false && !et.length) {\n            throw args.length === 1 ? args[0] : args;\n          }\n          et.forEach(function emitter2(listen) {\n            if (opts.async) {\n              debounce(listen, args, ctx);\n            } else {\n              listen.apply(ctx, args);\n            }\n            if (listen._once) {\n              thing.off(type, listen);\n            }\n          });\n          return thing;\n        };\n      };\n      return thing;\n    };\n  }\n});\n\n// node_modules/custom-event/index.js\nvar require_custom_event = __commonJS({\n  \"node_modules/custom-event/index.js\"(exports, module) {\n    var NativeCustomEvent = global.CustomEvent;\n    function useNative() {\n      try {\n        var p = new NativeCustomEvent(\"cat\", { detail: { foo: \"bar\" } });\n        return \"cat\" === p.type && \"bar\" === p.detail.foo;\n      } catch (e) {\n      }\n      return false;\n    }\n    module.exports = useNative() ? NativeCustomEvent : (\n      // IE >= 9\n      \"undefined\" !== typeof document && \"function\" === typeof document.createEvent ? function CustomEvent(type, params) {\n        var e = document.createEvent(\"CustomEvent\");\n        if (params) {\n          e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n        } else {\n          e.initCustomEvent(type, false, false, void 0);\n        }\n        return e;\n      } : (\n        // IE <= 8\n        function CustomEvent(type, params) {\n          var e = document.createEventObject();\n          e.type = type;\n          if (params) {\n            e.bubbles = Boolean(params.bubbles);\n            e.cancelable = Boolean(params.cancelable);\n            e.detail = params.detail;\n          } else {\n            e.bubbles = false;\n            e.cancelable = false;\n            e.detail = void 0;\n          }\n          return e;\n        }\n      )\n    );\n  }\n});\n\n// node_modules/crossvent/src/eventmap.js\nvar require_eventmap = __commonJS({\n  \"node_modules/crossvent/src/eventmap.js\"(exports, module) {\n    \"use strict\";\n    var eventmap = [];\n    var eventname = \"\";\n    var ron = /^on/;\n    for (eventname in global) {\n      if (ron.test(eventname)) {\n        eventmap.push(eventname.slice(2));\n      }\n    }\n    module.exports = eventmap;\n  }\n});\n\n// node_modules/crossvent/src/crossvent.js\nvar require_crossvent = __commonJS({\n  \"node_modules/crossvent/src/crossvent.js\"(exports, module) {\n    \"use strict\";\n    var customEvent = require_custom_event();\n    var eventmap = require_eventmap();\n    var doc = global.document;\n    var addEvent = addEventEasy;\n    var removeEvent = removeEventEasy;\n    var hardCache = [];\n    if (!global.addEventListener) {\n      addEvent = addEventHard;\n      removeEvent = removeEventHard;\n    }\n    module.exports = {\n      add: addEvent,\n      remove: removeEvent,\n      fabricate: fabricateEvent\n    };\n    function addEventEasy(el, type, fn, capturing) {\n      return el.addEventListener(type, fn, capturing);\n    }\n    function addEventHard(el, type, fn) {\n      return el.attachEvent(\"on\" + type, wrap(el, type, fn));\n    }\n    function removeEventEasy(el, type, fn, capturing) {\n      return el.removeEventListener(type, fn, capturing);\n    }\n    function removeEventHard(el, type, fn) {\n      var listener = unwrap(el, type, fn);\n      if (listener) {\n        return el.detachEvent(\"on\" + type, listener);\n      }\n    }\n    function fabricateEvent(el, type, model) {\n      var e = eventmap.indexOf(type) === -1 ? makeCustomEvent() : makeClassicEvent();\n      if (el.dispatchEvent) {\n        el.dispatchEvent(e);\n      } else {\n        el.fireEvent(\"on\" + type, e);\n      }\n      function makeClassicEvent() {\n        var e2;\n        if (doc.createEvent) {\n          e2 = doc.createEvent(\"Event\");\n          e2.initEvent(type, true, true);\n        } else if (doc.createEventObject) {\n          e2 = doc.createEventObject();\n        }\n        return e2;\n      }\n      function makeCustomEvent() {\n        return new customEvent(type, { detail: model });\n      }\n    }\n    function wrapperFactory(el, type, fn) {\n      return function wrapper(originalEvent) {\n        var e = originalEvent || global.event;\n        e.target = e.target || e.srcElement;\n        e.preventDefault = e.preventDefault || function preventDefault() {\n          e.returnValue = false;\n        };\n        e.stopPropagation = e.stopPropagation || function stopPropagation() {\n          e.cancelBubble = true;\n        };\n        e.which = e.which || e.keyCode;\n        fn.call(el, e);\n      };\n    }\n    function wrap(el, type, fn) {\n      var wrapper = unwrap(el, type, fn) || wrapperFactory(el, type, fn);\n      hardCache.push({\n        wrapper,\n        element: el,\n        type,\n        fn\n      });\n      return wrapper;\n    }\n    function unwrap(el, type, fn) {\n      var i = find(el, type, fn);\n      if (i) {\n        var wrapper = hardCache[i].wrapper;\n        hardCache.splice(i, 1);\n        return wrapper;\n      }\n    }\n    function find(el, type, fn) {\n      var i, item;\n      for (i = 0; i < hardCache.length; i++) {\n        item = hardCache[i];\n        if (item.element === el && item.type === type && item.fn === fn) {\n          return i;\n        }\n      }\n    }\n  }\n});\n\n// node_modules/dragula/classes.js\nvar require_classes = __commonJS({\n  \"node_modules/dragula/classes.js\"(exports, module) {\n    \"use strict\";\n    var cache = {};\n    var start = \"(?:^|\\\\s)\";\n    var end = \"(?:\\\\s|$)\";\n    function lookupClass(className) {\n      var cached = cache[className];\n      if (cached) {\n        cached.lastIndex = 0;\n      } else {\n        cache[className] = cached = new RegExp(start + className + end, \"g\");\n      }\n      return cached;\n    }\n    function addClass(el, className) {\n      var current = el.className;\n      if (!current.length) {\n        el.className = className;\n      } else if (!lookupClass(className).test(current)) {\n        el.className += \" \" + className;\n      }\n    }\n    function rmClass(el, className) {\n      el.className = el.className.replace(lookupClass(className), \" \").trim();\n    }\n    module.exports = {\n      add: addClass,\n      rm: rmClass\n    };\n  }\n});\n\n// node_modules/dragula/dragula.js\nvar require_dragula = __commonJS({\n  \"node_modules/dragula/dragula.js\"(exports, module) {\n    var emitter = require_emitter();\n    var crossvent = require_crossvent();\n    var classes = require_classes();\n    var doc = document;\n    var documentElement = doc.documentElement;\n    function dragula(initialContainers, options) {\n      var len = arguments.length;\n      if (len === 1 && Array.isArray(initialContainers) === false) {\n        options = initialContainers;\n        initialContainers = [];\n      }\n      var _mirror;\n      var _source;\n      var _item;\n      var _offsetX;\n      var _offsetY;\n      var _moveX;\n      var _moveY;\n      var _initialSibling;\n      var _currentSibling;\n      var _copy;\n      var _renderTimer;\n      var _lastDropTarget = null;\n      var _grabbed;\n      var o = options || {};\n      if (o.moves === void 0) {\n        o.moves = always;\n      }\n      if (o.accepts === void 0) {\n        o.accepts = always;\n      }\n      if (o.invalid === void 0) {\n        o.invalid = invalidTarget;\n      }\n      if (o.containers === void 0) {\n        o.containers = initialContainers || [];\n      }\n      if (o.isContainer === void 0) {\n        o.isContainer = never;\n      }\n      if (o.copy === void 0) {\n        o.copy = false;\n      }\n      if (o.copySortSource === void 0) {\n        o.copySortSource = false;\n      }\n      if (o.revertOnSpill === void 0) {\n        o.revertOnSpill = false;\n      }\n      if (o.removeOnSpill === void 0) {\n        o.removeOnSpill = false;\n      }\n      if (o.direction === void 0) {\n        o.direction = \"vertical\";\n      }\n      if (o.ignoreInputTextSelection === void 0) {\n        o.ignoreInputTextSelection = true;\n      }\n      if (o.mirrorContainer === void 0) {\n        o.mirrorContainer = doc.body;\n      }\n      var drake = emitter({\n        containers: o.containers,\n        start: manualStart,\n        end,\n        cancel,\n        remove,\n        destroy,\n        canMove,\n        dragging: false\n      });\n      if (o.removeOnSpill === true) {\n        drake.on(\"over\", spillOver).on(\"out\", spillOut);\n      }\n      events();\n      return drake;\n      function isContainer(el) {\n        return drake.containers.indexOf(el) !== -1 || o.isContainer(el);\n      }\n      function events(remove2) {\n        var op = remove2 ? \"remove\" : \"add\";\n        touchy(documentElement, op, \"mousedown\", grab);\n        touchy(documentElement, op, \"mouseup\", release);\n      }\n      function eventualMovements(remove2) {\n        var op = remove2 ? \"remove\" : \"add\";\n        touchy(documentElement, op, \"mousemove\", startBecauseMouseMoved);\n      }\n      function movements(remove2) {\n        var op = remove2 ? \"remove\" : \"add\";\n        crossvent[op](documentElement, \"selectstart\", preventGrabbed);\n        crossvent[op](documentElement, \"click\", preventGrabbed);\n      }\n      function destroy() {\n        events(true);\n        release({});\n      }\n      function preventGrabbed(e) {\n        if (_grabbed) {\n          e.preventDefault();\n        }\n      }\n      function grab(e) {\n        _moveX = e.clientX;\n        _moveY = e.clientY;\n        var ignore = whichMouseButton(e) !== 1 || e.metaKey || e.ctrlKey;\n        if (ignore) {\n          return;\n        }\n        var item = e.target;\n        var context = canStart(item);\n        if (!context) {\n          return;\n        }\n        _grabbed = context;\n        eventualMovements();\n        if (e.type === \"mousedown\") {\n          if (isInput(item)) {\n            item.focus();\n          } else {\n            e.preventDefault();\n          }\n        }\n      }\n      function startBecauseMouseMoved(e) {\n        if (!_grabbed) {\n          return;\n        }\n        if (whichMouseButton(e) === 0) {\n          release({});\n          return;\n        }\n        if (e.clientX !== void 0 && Math.abs(e.clientX - _moveX) <= (o.slideFactorX || 0) && (e.clientY !== void 0 && Math.abs(e.clientY - _moveY) <= (o.slideFactorY || 0))) {\n          return;\n        }\n        if (o.ignoreInputTextSelection) {\n          var clientX = getCoord(\"clientX\", e) || 0;\n          var clientY = getCoord(\"clientY\", e) || 0;\n          var elementBehindCursor = doc.elementFromPoint(clientX, clientY);\n          if (isInput(elementBehindCursor)) {\n            return;\n          }\n        }\n        var grabbed = _grabbed;\n        eventualMovements(true);\n        movements();\n        end();\n        start(grabbed);\n        var offset = getOffset(_item);\n        _offsetX = getCoord(\"pageX\", e) - offset.left;\n        _offsetY = getCoord(\"pageY\", e) - offset.top;\n        classes.add(_copy || _item, \"gu-transit\");\n        renderMirrorImage();\n        drag(e);\n      }\n      function canStart(item) {\n        if (drake.dragging && _mirror) {\n          return;\n        }\n        if (isContainer(item)) {\n          return;\n        }\n        var handle = item;\n        while (getParent(item) && isContainer(getParent(item)) === false) {\n          if (o.invalid(item, handle)) {\n            return;\n          }\n          item = getParent(item);\n          if (!item) {\n            return;\n          }\n        }\n        var source = getParent(item);\n        if (!source) {\n          return;\n        }\n        if (o.invalid(item, handle)) {\n          return;\n        }\n        var movable = o.moves(item, source, handle, nextEl(item));\n        if (!movable) {\n          return;\n        }\n        return {\n          item,\n          source\n        };\n      }\n      function canMove(item) {\n        return !!canStart(item);\n      }\n      function manualStart(item) {\n        var context = canStart(item);\n        if (context) {\n          start(context);\n        }\n      }\n      function start(context) {\n        if (isCopy(context.item, context.source)) {\n          _copy = context.item.cloneNode(true);\n          drake.emit(\"cloned\", _copy, context.item, \"copy\");\n        }\n        _source = context.source;\n        _item = context.item;\n        _initialSibling = _currentSibling = nextEl(context.item);\n        drake.dragging = true;\n        drake.emit(\"drag\", _item, _source);\n      }\n      function invalidTarget() {\n        return false;\n      }\n      function end() {\n        if (!drake.dragging) {\n          return;\n        }\n        var item = _copy || _item;\n        drop(item, getParent(item));\n      }\n      function ungrab() {\n        _grabbed = false;\n        eventualMovements(true);\n        movements(true);\n      }\n      function release(e) {\n        ungrab();\n        if (!drake.dragging) {\n          return;\n        }\n        var item = _copy || _item;\n        var clientX = getCoord(\"clientX\", e) || 0;\n        var clientY = getCoord(\"clientY\", e) || 0;\n        var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n        var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n        if (dropTarget && (_copy && o.copySortSource || (!_copy || dropTarget !== _source))) {\n          drop(item, dropTarget);\n        } else if (o.removeOnSpill) {\n          remove();\n        } else {\n          cancel();\n        }\n      }\n      function drop(item, target) {\n        var parent = getParent(item);\n        if (_copy && o.copySortSource && target === _source) {\n          parent.removeChild(_item);\n        }\n        if (isInitialPlacement(target)) {\n          drake.emit(\"cancel\", item, _source, _source);\n        } else {\n          drake.emit(\"drop\", item, target, _source, _currentSibling);\n        }\n        cleanup();\n      }\n      function remove() {\n        if (!drake.dragging) {\n          return;\n        }\n        var item = _copy || _item;\n        var parent = getParent(item);\n        if (parent) {\n          parent.removeChild(item);\n        }\n        drake.emit(_copy ? \"cancel\" : \"remove\", item, parent, _source);\n        cleanup();\n      }\n      function cancel(revert) {\n        if (!drake.dragging) {\n          return;\n        }\n        var reverts = arguments.length > 0 ? revert : o.revertOnSpill;\n        var item = _copy || _item;\n        var parent = getParent(item);\n        var initial = isInitialPlacement(parent);\n        if (initial === false && reverts) {\n          if (_copy) {\n            if (parent) {\n              parent.removeChild(_copy);\n            }\n          } else {\n            _source.insertBefore(item, _initialSibling);\n          }\n        }\n        if (initial || reverts) {\n          drake.emit(\"cancel\", item, _source, _source);\n        } else {\n          drake.emit(\"drop\", item, parent, _source, _currentSibling);\n        }\n        cleanup();\n      }\n      function cleanup() {\n        var item = _copy || _item;\n        ungrab();\n        removeMirrorImage();\n        if (item) {\n          classes.rm(item, \"gu-transit\");\n        }\n        if (_renderTimer) {\n          clearTimeout(_renderTimer);\n        }\n        drake.dragging = false;\n        if (_lastDropTarget) {\n          drake.emit(\"out\", item, _lastDropTarget, _source);\n        }\n        drake.emit(\"dragend\", item);\n        _source = _item = _copy = _initialSibling = _currentSibling = _renderTimer = _lastDropTarget = null;\n      }\n      function isInitialPlacement(target, s) {\n        var sibling;\n        if (s !== void 0) {\n          sibling = s;\n        } else if (_mirror) {\n          sibling = _currentSibling;\n        } else {\n          sibling = nextEl(_copy || _item);\n        }\n        return target === _source && sibling === _initialSibling;\n      }\n      function findDropTarget(elementBehindCursor, clientX, clientY) {\n        var target = elementBehindCursor;\n        while (target && !accepted()) {\n          target = getParent(target);\n        }\n        return target;\n        function accepted() {\n          var droppable = isContainer(target);\n          if (droppable === false) {\n            return false;\n          }\n          var immediate = getImmediateChild(target, elementBehindCursor);\n          var reference = getReference(target, immediate, clientX, clientY);\n          var initial = isInitialPlacement(target, reference);\n          if (initial) {\n            return true;\n          }\n          return o.accepts(_item, target, _source, reference);\n        }\n      }\n      function drag(e) {\n        if (!_mirror) {\n          return;\n        }\n        e.preventDefault();\n        var clientX = getCoord(\"clientX\", e) || 0;\n        var clientY = getCoord(\"clientY\", e) || 0;\n        var x = clientX - _offsetX;\n        var y = clientY - _offsetY;\n        _mirror.style.left = x + \"px\";\n        _mirror.style.top = y + \"px\";\n        var item = _copy || _item;\n        var elementBehindCursor = getElementBehindPoint(_mirror, clientX, clientY);\n        var dropTarget = findDropTarget(elementBehindCursor, clientX, clientY);\n        var changed = dropTarget !== null && dropTarget !== _lastDropTarget;\n        if (changed || dropTarget === null) {\n          out();\n          _lastDropTarget = dropTarget;\n          over();\n        }\n        var parent = getParent(item);\n        if (dropTarget === _source && _copy && !o.copySortSource) {\n          if (parent) {\n            parent.removeChild(item);\n          }\n          return;\n        }\n        var reference;\n        var immediate = getImmediateChild(dropTarget, elementBehindCursor);\n        if (immediate !== null) {\n          reference = getReference(dropTarget, immediate, clientX, clientY);\n        } else if (o.revertOnSpill === true && !_copy) {\n          reference = _initialSibling;\n          dropTarget = _source;\n        } else {\n          if (_copy && parent) {\n            parent.removeChild(item);\n          }\n          return;\n        }\n        if (reference === null && changed || reference !== item && reference !== nextEl(item)) {\n          _currentSibling = reference;\n          dropTarget.insertBefore(item, reference);\n          drake.emit(\"shadow\", item, dropTarget, _source);\n        }\n        function moved(type) {\n          drake.emit(type, item, _lastDropTarget, _source);\n        }\n        function over() {\n          if (changed) {\n            moved(\"over\");\n          }\n        }\n        function out() {\n          if (_lastDropTarget) {\n            moved(\"out\");\n          }\n        }\n      }\n      function spillOver(el) {\n        classes.rm(el, \"gu-hide\");\n      }\n      function spillOut(el) {\n        if (drake.dragging) {\n          classes.add(el, \"gu-hide\");\n        }\n      }\n      function renderMirrorImage() {\n        if (_mirror) {\n          return;\n        }\n        var rect = _item.getBoundingClientRect();\n        _mirror = _item.cloneNode(true);\n        _mirror.style.width = getRectWidth(rect) + \"px\";\n        _mirror.style.height = getRectHeight(rect) + \"px\";\n        classes.rm(_mirror, \"gu-transit\");\n        classes.add(_mirror, \"gu-mirror\");\n        o.mirrorContainer.appendChild(_mirror);\n        touchy(documentElement, \"add\", \"mousemove\", drag);\n        classes.add(o.mirrorContainer, \"gu-unselectable\");\n        drake.emit(\"cloned\", _mirror, _item, \"mirror\");\n      }\n      function removeMirrorImage() {\n        if (_mirror) {\n          classes.rm(o.mirrorContainer, \"gu-unselectable\");\n          touchy(documentElement, \"remove\", \"mousemove\", drag);\n          getParent(_mirror).removeChild(_mirror);\n          _mirror = null;\n        }\n      }\n      function getImmediateChild(dropTarget, target) {\n        var immediate = target;\n        while (immediate !== dropTarget && getParent(immediate) !== dropTarget) {\n          immediate = getParent(immediate);\n        }\n        if (immediate === documentElement) {\n          return null;\n        }\n        return immediate;\n      }\n      function getReference(dropTarget, target, x, y) {\n        var horizontal = o.direction === \"horizontal\";\n        var reference = target !== dropTarget ? inside() : outside();\n        return reference;\n        function outside() {\n          var len2 = dropTarget.children.length;\n          var i;\n          var el;\n          var rect;\n          for (i = 0; i < len2; i++) {\n            el = dropTarget.children[i];\n            rect = el.getBoundingClientRect();\n            if (horizontal && rect.left + rect.width / 2 > x) {\n              return el;\n            }\n            if (!horizontal && rect.top + rect.height / 2 > y) {\n              return el;\n            }\n          }\n          return null;\n        }\n        function inside() {\n          var rect = target.getBoundingClientRect();\n          if (horizontal) {\n            return resolve(x > rect.left + getRectWidth(rect) / 2);\n          }\n          return resolve(y > rect.top + getRectHeight(rect) / 2);\n        }\n        function resolve(after) {\n          return after ? nextEl(target) : target;\n        }\n      }\n      function isCopy(item, container) {\n        return typeof o.copy === \"boolean\" ? o.copy : o.copy(item, container);\n      }\n    }\n    function touchy(el, op, type, fn) {\n      var touch = {\n        mouseup: \"touchend\",\n        mousedown: \"touchstart\",\n        mousemove: \"touchmove\"\n      };\n      var pointers = {\n        mouseup: \"pointerup\",\n        mousedown: \"pointerdown\",\n        mousemove: \"pointermove\"\n      };\n      var microsoft = {\n        mouseup: \"MSPointerUp\",\n        mousedown: \"MSPointerDown\",\n        mousemove: \"MSPointerMove\"\n      };\n      if (global.navigator.pointerEnabled) {\n        crossvent[op](el, pointers[type], fn);\n      } else if (global.navigator.msPointerEnabled) {\n        crossvent[op](el, microsoft[type], fn);\n      } else {\n        crossvent[op](el, touch[type], fn);\n        crossvent[op](el, type, fn);\n      }\n    }\n    function whichMouseButton(e) {\n      if (e.touches !== void 0) {\n        return e.touches.length;\n      }\n      if (e.which !== void 0 && e.which !== 0) {\n        return e.which;\n      }\n      if (e.buttons !== void 0) {\n        return e.buttons;\n      }\n      var button = e.button;\n      if (button !== void 0) {\n        return button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0;\n      }\n    }\n    function getOffset(el) {\n      var rect = el.getBoundingClientRect();\n      return {\n        left: rect.left + getScroll(\"scrollLeft\", \"pageXOffset\"),\n        top: rect.top + getScroll(\"scrollTop\", \"pageYOffset\")\n      };\n    }\n    function getScroll(scrollProp, offsetProp) {\n      if (typeof global[offsetProp] !== \"undefined\") {\n        return global[offsetProp];\n      }\n      if (documentElement.clientHeight) {\n        return documentElement[scrollProp];\n      }\n      return doc.body[scrollProp];\n    }\n    function getElementBehindPoint(point, x, y) {\n      point = point || {};\n      var state = point.className || \"\";\n      var el;\n      point.className += \" gu-hide\";\n      el = doc.elementFromPoint(x, y);\n      point.className = state;\n      return el;\n    }\n    function never() {\n      return false;\n    }\n    function always() {\n      return true;\n    }\n    function getRectWidth(rect) {\n      return rect.width || rect.right - rect.left;\n    }\n    function getRectHeight(rect) {\n      return rect.height || rect.bottom - rect.top;\n    }\n    function getParent(el) {\n      return el.parentNode === doc ? null : el.parentNode;\n    }\n    function isInput(el) {\n      return el.tagName === \"INPUT\" || el.tagName === \"TEXTAREA\" || el.tagName === \"SELECT\" || isEditable(el);\n    }\n    function isEditable(el) {\n      if (!el) {\n        return false;\n      }\n      if (el.contentEditable === \"false\") {\n        return false;\n      }\n      if (el.contentEditable === \"true\") {\n        return true;\n      }\n      return isEditable(getParent(el));\n    }\n    function nextEl(el) {\n      return el.nextElementSibling || manually();\n      function manually() {\n        var sibling = el;\n        do {\n          sibling = sibling.nextSibling;\n        } while (sibling && sibling.nodeType !== 1);\n        return sibling;\n      }\n    }\n    function getEventHost(e) {\n      if (e.targetTouches && e.targetTouches.length) {\n        return e.targetTouches[0];\n      }\n      if (e.changedTouches && e.changedTouches.length) {\n        return e.changedTouches[0];\n      }\n      return e;\n    }\n    function getCoord(coord, e) {\n      var host = getEventHost(e);\n      var missMap = {\n        pageX: \"clientX\",\n        // IE8\n        pageY: \"clientY\"\n        // IE8\n      };\n      if (coord in missMap && !(coord in host) && missMap[coord] in host) {\n        coord = missMap[coord];\n      }\n      return host[coord];\n    }\n    module.exports = dragula;\n  }\n});\nexport default require_dragula();\n//# sourceMappingURL=dragula.js.map\n","import 'dragula/dist/dragula.min.css';\nimport dragula from 'dragula';\n\nfunction saveSortOrder($container) {\n  var idsInOrder = $container.find('> *').map(function(index,element) { return parseInt($(element).attr('data-id')); }).toArray();\n  $.post($container.attr('data-reorder'), {ids_in_order: idsInOrder}, function() {\n    if ($container.closest('.opened-modally').length) {\n      refreshModalBase();\n    }\n  });\n}\n\nfunction enableSortable($scope) {\n  setTimeout(function() {\n    var selector = '[data-reorder]';\n    var $reorderable = $scope.find(selector).addBack(selector);\n    console.log(\"enabling sort on array of \" + $reorderable.length);\n\n    $reorderable.each(function (index, container) {\n\n      var $container = $(container);\n\n      // enable drag-and-drop reordering.\n      var dragulaObj = dragula([container], {\n        moves: function(el, container, handle) {\n          var $handles = $(el).find('.reorder-handle')\n          if ($handles.length) {\n            return !!$(handle).closest('.reorder-handle').length\n          } else {\n            if (!$(handle).closest('.undraggable').length) {\n              return $(handle).closest('[data-reorder]')[0] == container;\n            } else {\n              return false;\n            }\n          }\n        },\n        accepts: function (el, target, source, sibling) {\n          if ($(sibling).hasClass('undraggable') && $(sibling).prev().hasClass('undraggable')) {\n            return false;\n          } else {\n            return true;\n          }\n        },\n      }).on('drop', function (el) {\n\n        // save order here.\n        saveSortOrder($container);\n\n      }).on('over', function (el, container) {\n\n        // deselect any text fields, or else things go slow!\n        $(document.activeElement).blur();\n\n      });\n\n    });\n  }, 500);\n}\n\n$(document).on('turbo:load', function() {\n  console.log(\"🍩 Sortable: Enabling on <body> after a Turbo load.\")\n  enableSortable($('body'));\n})\n\n$(document).on('sprinkles:update', function(event) {\n  console.log(\"🍩 Sortable: Enabling on the following element after a Sprinkles content update:\")\n  console.log(event.target);\n  enableSortable($(event.target));\n})\n","import \"dragula/dist/dragula.min.css\"\n\nimport dragula from 'dragula';\n\nfunction saveAssignments($container) {\n  var parents = $container.find('[data-reassignment-parent]').map(function(index,element) { return parseInt($(element).attr('data-id')); }).toArray();\n  var assignmentsById = {}\n  $.each(parents, function(_, parentId) {\n    assignmentsById[parentId] = $container.find(\"[data-reassignment-parent]\").filter(\"[data-id='\" + parentId + \"']\").find(\"[data-reassignable]\").map(function(index,element) { return parseInt($(element).attr('data-id')); }).toArray();\n  });\n  $.post($container.attr('data-reassign'), {assignments_by_id: assignmentsById, dispatched_at: new Date().getTime()});\n}\n\nfunction enableReassignable($scope) {\n  setTimeout(function() {\n    var selector = '[data-reassign]';\n    var $reassignable = $scope.find(selector).addBack(selector);\n\n    $reassignable.each(function (_, container) {\n\n      console.log(\"🍩 Reassignable 💬 Found the following container:\")\n      console.log(container);\n\n      var $container = $(container);\n      var dragulaObj = dragula($container.find('[data-reassignment-parent]').toArray(), {\n        moves: function(el, container, handle) {\n          if ($(handle).hasClass('undraggable') || ($(handle).closest('.undraggable').length > 0)) {\n            return false;\n          }\n          return !!$(handle).closest('[data-reassignable]').length;\n        },\n        accepts: function (el, target, source, sibling) {\n          if ($(sibling).hasClass('undraggable') && $(sibling).prev().hasClass('undraggable')) {\n            return false;\n          } else {\n            return true;\n          }\n        },\n      }).on('drag', function (el) {\n        $reassignable.addClass('show-reassignable-targets')\n      }).on('drop', function (el) {\n        $reassignable.removeClass('show-reassignable-targets')\n        saveAssignments($container);\n      }).on('cancel', function (el) {\n        $reassignable.removeClass('show-reassignable-targets')\n        saveAssignments($container);\n      }).on('over', function (el, container) {\n        $(document.activeElement).blur();\n      });\n    });\n  }, 500);\n}\n\n$(document).on('turbo:load', function() {\n  console.log(\"🍩 Reassignable: Enabling on <body> after a Turbo load.\")\n  enableReassignable($('body'));\n})\n\n$(document).on('sprinkles:update', function(event) {\n  console.log(\"🍩 Reassignable: Enabling on the following element after a Sprinkles content update:\")\n  console.log(event.target);\n  enableReassignable($(event.target));\n})\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/@hotwired/stimulus/dist/stimulus.js\nvar EventListener = class {\n  constructor(eventTarget, eventName, eventOptions) {\n    this.eventTarget = eventTarget;\n    this.eventName = eventName;\n    this.eventOptions = eventOptions;\n    this.unorderedBindings = /* @__PURE__ */ new Set();\n  }\n  connect() {\n    this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n  }\n  disconnect() {\n    this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n  }\n  bindingConnected(binding) {\n    this.unorderedBindings.add(binding);\n  }\n  bindingDisconnected(binding) {\n    this.unorderedBindings.delete(binding);\n  }\n  handleEvent(event) {\n    const extendedEvent = extendEvent(event);\n    for (const binding of this.bindings) {\n      if (extendedEvent.immediatePropagationStopped) {\n        break;\n      } else {\n        binding.handleEvent(extendedEvent);\n      }\n    }\n  }\n  hasBindings() {\n    return this.unorderedBindings.size > 0;\n  }\n  get bindings() {\n    return Array.from(this.unorderedBindings).sort((left, right) => {\n      const leftIndex = left.index, rightIndex = right.index;\n      return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n    });\n  }\n};\nfunction extendEvent(event) {\n  if (\"immediatePropagationStopped\" in event) {\n    return event;\n  } else {\n    const { stopImmediatePropagation } = event;\n    return Object.assign(event, {\n      immediatePropagationStopped: false,\n      stopImmediatePropagation() {\n        this.immediatePropagationStopped = true;\n        stopImmediatePropagation.call(this);\n      }\n    });\n  }\n}\nvar Dispatcher = class {\n  constructor(application) {\n    this.application = application;\n    this.eventListenerMaps = /* @__PURE__ */ new Map();\n    this.started = false;\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.eventListeners.forEach((eventListener) => eventListener.connect());\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n    }\n  }\n  get eventListeners() {\n    return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n  }\n  bindingConnected(binding) {\n    this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n  }\n  bindingDisconnected(binding, clearEventListeners = false) {\n    this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    if (clearEventListeners)\n      this.clearEventListenersForBinding(binding);\n  }\n  handleError(error2, message, detail = {}) {\n    this.application.handleError(error2, `Error ${message}`, detail);\n  }\n  clearEventListenersForBinding(binding) {\n    const eventListener = this.fetchEventListenerForBinding(binding);\n    if (!eventListener.hasBindings()) {\n      eventListener.disconnect();\n      this.removeMappedEventListenerFor(binding);\n    }\n  }\n  removeMappedEventListenerFor(binding) {\n    const { eventTarget, eventName, eventOptions } = binding;\n    const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n    const cacheKey = this.cacheKey(eventName, eventOptions);\n    eventListenerMap.delete(cacheKey);\n    if (eventListenerMap.size == 0)\n      this.eventListenerMaps.delete(eventTarget);\n  }\n  fetchEventListenerForBinding(binding) {\n    const { eventTarget, eventName, eventOptions } = binding;\n    return this.fetchEventListener(eventTarget, eventName, eventOptions);\n  }\n  fetchEventListener(eventTarget, eventName, eventOptions) {\n    const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n    const cacheKey = this.cacheKey(eventName, eventOptions);\n    let eventListener = eventListenerMap.get(cacheKey);\n    if (!eventListener) {\n      eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n      eventListenerMap.set(cacheKey, eventListener);\n    }\n    return eventListener;\n  }\n  createEventListener(eventTarget, eventName, eventOptions) {\n    const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n    if (this.started) {\n      eventListener.connect();\n    }\n    return eventListener;\n  }\n  fetchEventListenerMapForEventTarget(eventTarget) {\n    let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n    if (!eventListenerMap) {\n      eventListenerMap = /* @__PURE__ */ new Map();\n      this.eventListenerMaps.set(eventTarget, eventListenerMap);\n    }\n    return eventListenerMap;\n  }\n  cacheKey(eventName, eventOptions) {\n    const parts = [eventName];\n    Object.keys(eventOptions).sort().forEach((key) => {\n      parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n    });\n    return parts.join(\":\");\n  }\n};\nvar defaultActionDescriptorFilters = {\n  stop({ event, value }) {\n    if (value)\n      event.stopPropagation();\n    return true;\n  },\n  prevent({ event, value }) {\n    if (value)\n      event.preventDefault();\n    return true;\n  },\n  self({ event, value, element }) {\n    if (value) {\n      return element === event.target;\n    } else {\n      return true;\n    }\n  }\n};\nvar descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n  const source = descriptorString.trim();\n  const matches = source.match(descriptorPattern) || [];\n  let eventName = matches[2];\n  let keyFilter = matches[3];\n  if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n    eventName += `.${keyFilter}`;\n    keyFilter = \"\";\n  }\n  return {\n    eventTarget: parseEventTarget(matches[4]),\n    eventName,\n    eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n    identifier: matches[5],\n    methodName: matches[6],\n    keyFilter: matches[1] || keyFilter\n  };\n}\nfunction parseEventTarget(eventTargetName) {\n  if (eventTargetName == \"window\") {\n    return window;\n  } else if (eventTargetName == \"document\") {\n    return document;\n  }\n}\nfunction parseEventOptions(eventOptions) {\n  return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n  if (eventTarget == window) {\n    return \"window\";\n  } else if (eventTarget == document) {\n    return \"document\";\n  }\n}\nfunction camelize(value) {\n  return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n  return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n  return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n  return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n  return value.match(/[^\\s]+/g) || [];\n}\nfunction isSomething(object) {\n  return object !== null && object !== void 0;\n}\nfunction hasProperty(object, property) {\n  return Object.prototype.hasOwnProperty.call(object, property);\n}\nvar allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nvar Action = class {\n  constructor(element, index, descriptor, schema) {\n    this.element = element;\n    this.index = index;\n    this.eventTarget = descriptor.eventTarget || element;\n    this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n    this.eventOptions = descriptor.eventOptions || {};\n    this.identifier = descriptor.identifier || error(\"missing identifier\");\n    this.methodName = descriptor.methodName || error(\"missing method name\");\n    this.keyFilter = descriptor.keyFilter || \"\";\n    this.schema = schema;\n  }\n  static forToken(token, schema) {\n    return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n  }\n  toString() {\n    const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n    const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n    return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n  }\n  shouldIgnoreKeyboardEvent(event) {\n    if (!this.keyFilter) {\n      return false;\n    }\n    const filters = this.keyFilter.split(\"+\");\n    if (this.keyFilterDissatisfied(event, filters)) {\n      return true;\n    }\n    const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n    if (!standardFilter) {\n      return false;\n    }\n    if (!hasProperty(this.keyMappings, standardFilter)) {\n      error(`contains unknown key filter: ${this.keyFilter}`);\n    }\n    return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n  }\n  shouldIgnoreMouseEvent(event) {\n    if (!this.keyFilter) {\n      return false;\n    }\n    const filters = [this.keyFilter];\n    if (this.keyFilterDissatisfied(event, filters)) {\n      return true;\n    }\n    return false;\n  }\n  get params() {\n    const params = {};\n    const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n    for (const { name, value } of Array.from(this.element.attributes)) {\n      const match = name.match(pattern);\n      const key = match && match[1];\n      if (key) {\n        params[camelize(key)] = typecast(value);\n      }\n    }\n    return params;\n  }\n  get eventTargetName() {\n    return stringifyEventTarget(this.eventTarget);\n  }\n  get keyMappings() {\n    return this.schema.keyMappings;\n  }\n  keyFilterDissatisfied(event, filters) {\n    const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n    return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n  }\n};\nvar defaultEventNames = {\n  a: () => \"click\",\n  button: () => \"click\",\n  form: () => \"submit\",\n  details: () => \"toggle\",\n  input: (e) => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n  select: () => \"change\",\n  textarea: () => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n  const tagName = element.tagName.toLowerCase();\n  if (tagName in defaultEventNames) {\n    return defaultEventNames[tagName](element);\n  }\n}\nfunction error(message) {\n  throw new Error(message);\n}\nfunction typecast(value) {\n  try {\n    return JSON.parse(value);\n  } catch (o_O) {\n    return value;\n  }\n}\nvar Binding = class {\n  constructor(context, action) {\n    this.context = context;\n    this.action = action;\n  }\n  get index() {\n    return this.action.index;\n  }\n  get eventTarget() {\n    return this.action.eventTarget;\n  }\n  get eventOptions() {\n    return this.action.eventOptions;\n  }\n  get identifier() {\n    return this.context.identifier;\n  }\n  handleEvent(event) {\n    const actionEvent = this.prepareActionEvent(event);\n    if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n      this.invokeWithEvent(actionEvent);\n    }\n  }\n  get eventName() {\n    return this.action.eventName;\n  }\n  get method() {\n    const method = this.controller[this.methodName];\n    if (typeof method == \"function\") {\n      return method;\n    }\n    throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n  }\n  applyEventModifiers(event) {\n    const { element } = this.action;\n    const { actionDescriptorFilters } = this.context.application;\n    const { controller } = this.context;\n    let passes = true;\n    for (const [name, value] of Object.entries(this.eventOptions)) {\n      if (name in actionDescriptorFilters) {\n        const filter = actionDescriptorFilters[name];\n        passes = passes && filter({ name, value, event, element, controller });\n      } else {\n        continue;\n      }\n    }\n    return passes;\n  }\n  prepareActionEvent(event) {\n    return Object.assign(event, { params: this.action.params });\n  }\n  invokeWithEvent(event) {\n    const { target, currentTarget } = event;\n    try {\n      this.method.call(this.controller, event);\n      this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n    } catch (error2) {\n      const { identifier, controller, element, index } = this;\n      const detail = { identifier, controller, element, index, event };\n      this.context.handleError(error2, `invoking action \"${this.action}\"`, detail);\n    }\n  }\n  willBeInvokedByEvent(event) {\n    const eventTarget = event.target;\n    if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n      return false;\n    }\n    if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n      return false;\n    }\n    if (this.element === eventTarget) {\n      return true;\n    } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n      return this.scope.containsElement(eventTarget);\n    } else {\n      return this.scope.containsElement(this.action.element);\n    }\n  }\n  get controller() {\n    return this.context.controller;\n  }\n  get methodName() {\n    return this.action.methodName;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get scope() {\n    return this.context.scope;\n  }\n};\nvar ElementObserver = class {\n  constructor(element, delegate) {\n    this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n    this.element = element;\n    this.started = false;\n    this.delegate = delegate;\n    this.elements = /* @__PURE__ */ new Set();\n    this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.mutationObserver.observe(this.element, this.mutationObserverInit);\n      this.refresh();\n    }\n  }\n  pause(callback) {\n    if (this.started) {\n      this.mutationObserver.disconnect();\n      this.started = false;\n    }\n    callback();\n    if (!this.started) {\n      this.mutationObserver.observe(this.element, this.mutationObserverInit);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.mutationObserver.takeRecords();\n      this.mutationObserver.disconnect();\n      this.started = false;\n    }\n  }\n  refresh() {\n    if (this.started) {\n      const matches = new Set(this.matchElementsInTree());\n      for (const element of Array.from(this.elements)) {\n        if (!matches.has(element)) {\n          this.removeElement(element);\n        }\n      }\n      for (const element of Array.from(matches)) {\n        this.addElement(element);\n      }\n    }\n  }\n  processMutations(mutations) {\n    if (this.started) {\n      for (const mutation of mutations) {\n        this.processMutation(mutation);\n      }\n    }\n  }\n  processMutation(mutation) {\n    if (mutation.type == \"attributes\") {\n      this.processAttributeChange(mutation.target, mutation.attributeName);\n    } else if (mutation.type == \"childList\") {\n      this.processRemovedNodes(mutation.removedNodes);\n      this.processAddedNodes(mutation.addedNodes);\n    }\n  }\n  processAttributeChange(element, attributeName) {\n    if (this.elements.has(element)) {\n      if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n        this.delegate.elementAttributeChanged(element, attributeName);\n      } else {\n        this.removeElement(element);\n      }\n    } else if (this.matchElement(element)) {\n      this.addElement(element);\n    }\n  }\n  processRemovedNodes(nodes) {\n    for (const node of Array.from(nodes)) {\n      const element = this.elementFromNode(node);\n      if (element) {\n        this.processTree(element, this.removeElement);\n      }\n    }\n  }\n  processAddedNodes(nodes) {\n    for (const node of Array.from(nodes)) {\n      const element = this.elementFromNode(node);\n      if (element && this.elementIsActive(element)) {\n        this.processTree(element, this.addElement);\n      }\n    }\n  }\n  matchElement(element) {\n    return this.delegate.matchElement(element);\n  }\n  matchElementsInTree(tree = this.element) {\n    return this.delegate.matchElementsInTree(tree);\n  }\n  processTree(tree, processor) {\n    for (const element of this.matchElementsInTree(tree)) {\n      processor.call(this, element);\n    }\n  }\n  elementFromNode(node) {\n    if (node.nodeType == Node.ELEMENT_NODE) {\n      return node;\n    }\n  }\n  elementIsActive(element) {\n    if (element.isConnected != this.element.isConnected) {\n      return false;\n    } else {\n      return this.element.contains(element);\n    }\n  }\n  addElement(element) {\n    if (!this.elements.has(element)) {\n      if (this.elementIsActive(element)) {\n        this.elements.add(element);\n        if (this.delegate.elementMatched) {\n          this.delegate.elementMatched(element);\n        }\n      }\n    }\n  }\n  removeElement(element) {\n    if (this.elements.has(element)) {\n      this.elements.delete(element);\n      if (this.delegate.elementUnmatched) {\n        this.delegate.elementUnmatched(element);\n      }\n    }\n  }\n};\nvar AttributeObserver = class {\n  constructor(element, attributeName, delegate) {\n    this.attributeName = attributeName;\n    this.delegate = delegate;\n    this.elementObserver = new ElementObserver(element, this);\n  }\n  get element() {\n    return this.elementObserver.element;\n  }\n  get selector() {\n    return `[${this.attributeName}]`;\n  }\n  start() {\n    this.elementObserver.start();\n  }\n  pause(callback) {\n    this.elementObserver.pause(callback);\n  }\n  stop() {\n    this.elementObserver.stop();\n  }\n  refresh() {\n    this.elementObserver.refresh();\n  }\n  get started() {\n    return this.elementObserver.started;\n  }\n  matchElement(element) {\n    return element.hasAttribute(this.attributeName);\n  }\n  matchElementsInTree(tree) {\n    const match = this.matchElement(tree) ? [tree] : [];\n    const matches = Array.from(tree.querySelectorAll(this.selector));\n    return match.concat(matches);\n  }\n  elementMatched(element) {\n    if (this.delegate.elementMatchedAttribute) {\n      this.delegate.elementMatchedAttribute(element, this.attributeName);\n    }\n  }\n  elementUnmatched(element) {\n    if (this.delegate.elementUnmatchedAttribute) {\n      this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n    }\n  }\n  elementAttributeChanged(element, attributeName) {\n    if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n      this.delegate.elementAttributeValueChanged(element, attributeName);\n    }\n  }\n};\nfunction add(map, key, value) {\n  fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n  fetch(map, key).delete(value);\n  prune(map, key);\n}\nfunction fetch(map, key) {\n  let values = map.get(key);\n  if (!values) {\n    values = /* @__PURE__ */ new Set();\n    map.set(key, values);\n  }\n  return values;\n}\nfunction prune(map, key) {\n  const values = map.get(key);\n  if (values != null && values.size == 0) {\n    map.delete(key);\n  }\n}\nvar Multimap = class {\n  constructor() {\n    this.valuesByKey = /* @__PURE__ */ new Map();\n  }\n  get keys() {\n    return Array.from(this.valuesByKey.keys());\n  }\n  get values() {\n    const sets = Array.from(this.valuesByKey.values());\n    return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n  }\n  get size() {\n    const sets = Array.from(this.valuesByKey.values());\n    return sets.reduce((size, set) => size + set.size, 0);\n  }\n  add(key, value) {\n    add(this.valuesByKey, key, value);\n  }\n  delete(key, value) {\n    del(this.valuesByKey, key, value);\n  }\n  has(key, value) {\n    const values = this.valuesByKey.get(key);\n    return values != null && values.has(value);\n  }\n  hasKey(key) {\n    return this.valuesByKey.has(key);\n  }\n  hasValue(value) {\n    const sets = Array.from(this.valuesByKey.values());\n    return sets.some((set) => set.has(value));\n  }\n  getValuesForKey(key) {\n    const values = this.valuesByKey.get(key);\n    return values ? Array.from(values) : [];\n  }\n  getKeysForValue(value) {\n    return Array.from(this.valuesByKey).filter(([_key, values]) => values.has(value)).map(([key, _values]) => key);\n  }\n};\nvar IndexedMultimap = class extends Multimap {\n  constructor() {\n    super();\n    this.keysByValue = /* @__PURE__ */ new Map();\n  }\n  get values() {\n    return Array.from(this.keysByValue.keys());\n  }\n  add(key, value) {\n    super.add(key, value);\n    add(this.keysByValue, value, key);\n  }\n  delete(key, value) {\n    super.delete(key, value);\n    del(this.keysByValue, value, key);\n  }\n  hasValue(value) {\n    return this.keysByValue.has(value);\n  }\n  getKeysForValue(value) {\n    const set = this.keysByValue.get(value);\n    return set ? Array.from(set) : [];\n  }\n};\nvar SelectorObserver = class {\n  constructor(element, selector, delegate, details) {\n    this._selector = selector;\n    this.details = details;\n    this.elementObserver = new ElementObserver(element, this);\n    this.delegate = delegate;\n    this.matchesByElement = new Multimap();\n  }\n  get started() {\n    return this.elementObserver.started;\n  }\n  get selector() {\n    return this._selector;\n  }\n  set selector(selector) {\n    this._selector = selector;\n    this.refresh();\n  }\n  start() {\n    this.elementObserver.start();\n  }\n  pause(callback) {\n    this.elementObserver.pause(callback);\n  }\n  stop() {\n    this.elementObserver.stop();\n  }\n  refresh() {\n    this.elementObserver.refresh();\n  }\n  get element() {\n    return this.elementObserver.element;\n  }\n  matchElement(element) {\n    const { selector } = this;\n    if (selector) {\n      const matches = element.matches(selector);\n      if (this.delegate.selectorMatchElement) {\n        return matches && this.delegate.selectorMatchElement(element, this.details);\n      }\n      return matches;\n    } else {\n      return false;\n    }\n  }\n  matchElementsInTree(tree) {\n    const { selector } = this;\n    if (selector) {\n      const match = this.matchElement(tree) ? [tree] : [];\n      const matches = Array.from(tree.querySelectorAll(selector)).filter((match2) => this.matchElement(match2));\n      return match.concat(matches);\n    } else {\n      return [];\n    }\n  }\n  elementMatched(element) {\n    const { selector } = this;\n    if (selector) {\n      this.selectorMatched(element, selector);\n    }\n  }\n  elementUnmatched(element) {\n    const selectors = this.matchesByElement.getKeysForValue(element);\n    for (const selector of selectors) {\n      this.selectorUnmatched(element, selector);\n    }\n  }\n  elementAttributeChanged(element, _attributeName) {\n    const { selector } = this;\n    if (selector) {\n      const matches = this.matchElement(element);\n      const matchedBefore = this.matchesByElement.has(selector, element);\n      if (matches && !matchedBefore) {\n        this.selectorMatched(element, selector);\n      } else if (!matches && matchedBefore) {\n        this.selectorUnmatched(element, selector);\n      }\n    }\n  }\n  selectorMatched(element, selector) {\n    this.delegate.selectorMatched(element, selector, this.details);\n    this.matchesByElement.add(selector, element);\n  }\n  selectorUnmatched(element, selector) {\n    this.delegate.selectorUnmatched(element, selector, this.details);\n    this.matchesByElement.delete(selector, element);\n  }\n};\nvar StringMapObserver = class {\n  constructor(element, delegate) {\n    this.element = element;\n    this.delegate = delegate;\n    this.started = false;\n    this.stringMap = /* @__PURE__ */ new Map();\n    this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n      this.refresh();\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.mutationObserver.takeRecords();\n      this.mutationObserver.disconnect();\n      this.started = false;\n    }\n  }\n  refresh() {\n    if (this.started) {\n      for (const attributeName of this.knownAttributeNames) {\n        this.refreshAttribute(attributeName, null);\n      }\n    }\n  }\n  processMutations(mutations) {\n    if (this.started) {\n      for (const mutation of mutations) {\n        this.processMutation(mutation);\n      }\n    }\n  }\n  processMutation(mutation) {\n    const attributeName = mutation.attributeName;\n    if (attributeName) {\n      this.refreshAttribute(attributeName, mutation.oldValue);\n    }\n  }\n  refreshAttribute(attributeName, oldValue) {\n    const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n    if (key != null) {\n      if (!this.stringMap.has(attributeName)) {\n        this.stringMapKeyAdded(key, attributeName);\n      }\n      const value = this.element.getAttribute(attributeName);\n      if (this.stringMap.get(attributeName) != value) {\n        this.stringMapValueChanged(value, key, oldValue);\n      }\n      if (value == null) {\n        const oldValue2 = this.stringMap.get(attributeName);\n        this.stringMap.delete(attributeName);\n        if (oldValue2)\n          this.stringMapKeyRemoved(key, attributeName, oldValue2);\n      } else {\n        this.stringMap.set(attributeName, value);\n      }\n    }\n  }\n  stringMapKeyAdded(key, attributeName) {\n    if (this.delegate.stringMapKeyAdded) {\n      this.delegate.stringMapKeyAdded(key, attributeName);\n    }\n  }\n  stringMapValueChanged(value, key, oldValue) {\n    if (this.delegate.stringMapValueChanged) {\n      this.delegate.stringMapValueChanged(value, key, oldValue);\n    }\n  }\n  stringMapKeyRemoved(key, attributeName, oldValue) {\n    if (this.delegate.stringMapKeyRemoved) {\n      this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n    }\n  }\n  get knownAttributeNames() {\n    return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n  }\n  get currentAttributeNames() {\n    return Array.from(this.element.attributes).map((attribute) => attribute.name);\n  }\n  get recordedAttributeNames() {\n    return Array.from(this.stringMap.keys());\n  }\n};\nvar TokenListObserver = class {\n  constructor(element, attributeName, delegate) {\n    this.attributeObserver = new AttributeObserver(element, attributeName, this);\n    this.delegate = delegate;\n    this.tokensByElement = new Multimap();\n  }\n  get started() {\n    return this.attributeObserver.started;\n  }\n  start() {\n    this.attributeObserver.start();\n  }\n  pause(callback) {\n    this.attributeObserver.pause(callback);\n  }\n  stop() {\n    this.attributeObserver.stop();\n  }\n  refresh() {\n    this.attributeObserver.refresh();\n  }\n  get element() {\n    return this.attributeObserver.element;\n  }\n  get attributeName() {\n    return this.attributeObserver.attributeName;\n  }\n  elementMatchedAttribute(element) {\n    this.tokensMatched(this.readTokensForElement(element));\n  }\n  elementAttributeValueChanged(element) {\n    const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n    this.tokensUnmatched(unmatchedTokens);\n    this.tokensMatched(matchedTokens);\n  }\n  elementUnmatchedAttribute(element) {\n    this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n  }\n  tokensMatched(tokens) {\n    tokens.forEach((token) => this.tokenMatched(token));\n  }\n  tokensUnmatched(tokens) {\n    tokens.forEach((token) => this.tokenUnmatched(token));\n  }\n  tokenMatched(token) {\n    this.delegate.tokenMatched(token);\n    this.tokensByElement.add(token.element, token);\n  }\n  tokenUnmatched(token) {\n    this.delegate.tokenUnmatched(token);\n    this.tokensByElement.delete(token.element, token);\n  }\n  refreshTokensForElement(element) {\n    const previousTokens = this.tokensByElement.getValuesForKey(element);\n    const currentTokens = this.readTokensForElement(element);\n    const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n    if (firstDifferingIndex == -1) {\n      return [[], []];\n    } else {\n      return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n    }\n  }\n  readTokensForElement(element) {\n    const attributeName = this.attributeName;\n    const tokenString = element.getAttribute(attributeName) || \"\";\n    return parseTokenString(tokenString, element, attributeName);\n  }\n};\nfunction parseTokenString(tokenString, element, attributeName) {\n  return tokenString.trim().split(/\\s+/).filter((content) => content.length).map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n  const length = Math.max(left.length, right.length);\n  return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n  return left && right && left.index == right.index && left.content == right.content;\n}\nvar ValueListObserver = class {\n  constructor(element, attributeName, delegate) {\n    this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n    this.delegate = delegate;\n    this.parseResultsByToken = /* @__PURE__ */ new WeakMap();\n    this.valuesByTokenByElement = /* @__PURE__ */ new WeakMap();\n  }\n  get started() {\n    return this.tokenListObserver.started;\n  }\n  start() {\n    this.tokenListObserver.start();\n  }\n  stop() {\n    this.tokenListObserver.stop();\n  }\n  refresh() {\n    this.tokenListObserver.refresh();\n  }\n  get element() {\n    return this.tokenListObserver.element;\n  }\n  get attributeName() {\n    return this.tokenListObserver.attributeName;\n  }\n  tokenMatched(token) {\n    const { element } = token;\n    const { value } = this.fetchParseResultForToken(token);\n    if (value) {\n      this.fetchValuesByTokenForElement(element).set(token, value);\n      this.delegate.elementMatchedValue(element, value);\n    }\n  }\n  tokenUnmatched(token) {\n    const { element } = token;\n    const { value } = this.fetchParseResultForToken(token);\n    if (value) {\n      this.fetchValuesByTokenForElement(element).delete(token);\n      this.delegate.elementUnmatchedValue(element, value);\n    }\n  }\n  fetchParseResultForToken(token) {\n    let parseResult = this.parseResultsByToken.get(token);\n    if (!parseResult) {\n      parseResult = this.parseToken(token);\n      this.parseResultsByToken.set(token, parseResult);\n    }\n    return parseResult;\n  }\n  fetchValuesByTokenForElement(element) {\n    let valuesByToken = this.valuesByTokenByElement.get(element);\n    if (!valuesByToken) {\n      valuesByToken = /* @__PURE__ */ new Map();\n      this.valuesByTokenByElement.set(element, valuesByToken);\n    }\n    return valuesByToken;\n  }\n  parseToken(token) {\n    try {\n      const value = this.delegate.parseValueForToken(token);\n      return { value };\n    } catch (error2) {\n      return { error: error2 };\n    }\n  }\n};\nvar BindingObserver = class {\n  constructor(context, delegate) {\n    this.context = context;\n    this.delegate = delegate;\n    this.bindingsByAction = /* @__PURE__ */ new Map();\n  }\n  start() {\n    if (!this.valueListObserver) {\n      this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n      this.valueListObserver.start();\n    }\n  }\n  stop() {\n    if (this.valueListObserver) {\n      this.valueListObserver.stop();\n      delete this.valueListObserver;\n      this.disconnectAllActions();\n    }\n  }\n  get element() {\n    return this.context.element;\n  }\n  get identifier() {\n    return this.context.identifier;\n  }\n  get actionAttribute() {\n    return this.schema.actionAttribute;\n  }\n  get schema() {\n    return this.context.schema;\n  }\n  get bindings() {\n    return Array.from(this.bindingsByAction.values());\n  }\n  connectAction(action) {\n    const binding = new Binding(this.context, action);\n    this.bindingsByAction.set(action, binding);\n    this.delegate.bindingConnected(binding);\n  }\n  disconnectAction(action) {\n    const binding = this.bindingsByAction.get(action);\n    if (binding) {\n      this.bindingsByAction.delete(action);\n      this.delegate.bindingDisconnected(binding);\n    }\n  }\n  disconnectAllActions() {\n    this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n    this.bindingsByAction.clear();\n  }\n  parseValueForToken(token) {\n    const action = Action.forToken(token, this.schema);\n    if (action.identifier == this.identifier) {\n      return action;\n    }\n  }\n  elementMatchedValue(element, action) {\n    this.connectAction(action);\n  }\n  elementUnmatchedValue(element, action) {\n    this.disconnectAction(action);\n  }\n};\nvar ValueObserver = class {\n  constructor(context, receiver) {\n    this.context = context;\n    this.receiver = receiver;\n    this.stringMapObserver = new StringMapObserver(this.element, this);\n    this.valueDescriptorMap = this.controller.valueDescriptorMap;\n  }\n  start() {\n    this.stringMapObserver.start();\n    this.invokeChangedCallbacksForDefaultValues();\n  }\n  stop() {\n    this.stringMapObserver.stop();\n  }\n  get element() {\n    return this.context.element;\n  }\n  get controller() {\n    return this.context.controller;\n  }\n  getStringMapKeyForAttribute(attributeName) {\n    if (attributeName in this.valueDescriptorMap) {\n      return this.valueDescriptorMap[attributeName].name;\n    }\n  }\n  stringMapKeyAdded(key, attributeName) {\n    const descriptor = this.valueDescriptorMap[attributeName];\n    if (!this.hasValue(key)) {\n      this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n    }\n  }\n  stringMapValueChanged(value, name, oldValue) {\n    const descriptor = this.valueDescriptorNameMap[name];\n    if (value === null)\n      return;\n    if (oldValue === null) {\n      oldValue = descriptor.writer(descriptor.defaultValue);\n    }\n    this.invokeChangedCallback(name, value, oldValue);\n  }\n  stringMapKeyRemoved(key, attributeName, oldValue) {\n    const descriptor = this.valueDescriptorNameMap[key];\n    if (this.hasValue(key)) {\n      this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n    } else {\n      this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n    }\n  }\n  invokeChangedCallbacksForDefaultValues() {\n    for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n      if (defaultValue != void 0 && !this.controller.data.has(key)) {\n        this.invokeChangedCallback(name, writer(defaultValue), void 0);\n      }\n    }\n  }\n  invokeChangedCallback(name, rawValue, rawOldValue) {\n    const changedMethodName = `${name}Changed`;\n    const changedMethod = this.receiver[changedMethodName];\n    if (typeof changedMethod == \"function\") {\n      const descriptor = this.valueDescriptorNameMap[name];\n      try {\n        const value = descriptor.reader(rawValue);\n        let oldValue = rawOldValue;\n        if (rawOldValue) {\n          oldValue = descriptor.reader(rawOldValue);\n        }\n        changedMethod.call(this.receiver, value, oldValue);\n      } catch (error2) {\n        if (error2 instanceof TypeError) {\n          error2.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error2.message}`;\n        }\n        throw error2;\n      }\n    }\n  }\n  get valueDescriptors() {\n    const { valueDescriptorMap } = this;\n    return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n  }\n  get valueDescriptorNameMap() {\n    const descriptors = {};\n    Object.keys(this.valueDescriptorMap).forEach((key) => {\n      const descriptor = this.valueDescriptorMap[key];\n      descriptors[descriptor.name] = descriptor;\n    });\n    return descriptors;\n  }\n  hasValue(attributeName) {\n    const descriptor = this.valueDescriptorNameMap[attributeName];\n    const hasMethodName = `has${capitalize(descriptor.name)}`;\n    return this.receiver[hasMethodName];\n  }\n};\nvar TargetObserver = class {\n  constructor(context, delegate) {\n    this.context = context;\n    this.delegate = delegate;\n    this.targetsByName = new Multimap();\n  }\n  start() {\n    if (!this.tokenListObserver) {\n      this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n      this.tokenListObserver.start();\n    }\n  }\n  stop() {\n    if (this.tokenListObserver) {\n      this.disconnectAllTargets();\n      this.tokenListObserver.stop();\n      delete this.tokenListObserver;\n    }\n  }\n  tokenMatched({ element, content: name }) {\n    if (this.scope.containsElement(element)) {\n      this.connectTarget(element, name);\n    }\n  }\n  tokenUnmatched({ element, content: name }) {\n    this.disconnectTarget(element, name);\n  }\n  connectTarget(element, name) {\n    var _a;\n    if (!this.targetsByName.has(name, element)) {\n      this.targetsByName.add(name, element);\n      (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n    }\n  }\n  disconnectTarget(element, name) {\n    var _a;\n    if (this.targetsByName.has(name, element)) {\n      this.targetsByName.delete(name, element);\n      (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n    }\n  }\n  disconnectAllTargets() {\n    for (const name of this.targetsByName.keys) {\n      for (const element of this.targetsByName.getValuesForKey(name)) {\n        this.disconnectTarget(element, name);\n      }\n    }\n  }\n  get attributeName() {\n    return `data-${this.context.identifier}-target`;\n  }\n  get element() {\n    return this.context.element;\n  }\n  get scope() {\n    return this.context.scope;\n  }\n};\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n  const ancestors = getAncestorsForConstructor(constructor);\n  return Array.from(ancestors.reduce((values, constructor2) => {\n    getOwnStaticArrayValues(constructor2, propertyName).forEach((name) => values.add(name));\n    return values;\n  }, /* @__PURE__ */ new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n  const ancestors = getAncestorsForConstructor(constructor);\n  return ancestors.reduce((pairs, constructor2) => {\n    pairs.push(...getOwnStaticObjectPairs(constructor2, propertyName));\n    return pairs;\n  }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n  const ancestors = [];\n  while (constructor) {\n    ancestors.push(constructor);\n    constructor = Object.getPrototypeOf(constructor);\n  }\n  return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n  const definition = constructor[propertyName];\n  return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n  const definition = constructor[propertyName];\n  return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\nvar OutletObserver = class {\n  constructor(context, delegate) {\n    this.started = false;\n    this.context = context;\n    this.delegate = delegate;\n    this.outletsByName = new Multimap();\n    this.outletElementsByName = new Multimap();\n    this.selectorObserverMap = /* @__PURE__ */ new Map();\n    this.attributeObserverMap = /* @__PURE__ */ new Map();\n  }\n  start() {\n    if (!this.started) {\n      this.outletDefinitions.forEach((outletName) => {\n        this.setupSelectorObserverForOutlet(outletName);\n        this.setupAttributeObserverForOutlet(outletName);\n      });\n      this.started = true;\n      this.dependentContexts.forEach((context) => context.refresh());\n    }\n  }\n  refresh() {\n    this.selectorObserverMap.forEach((observer) => observer.refresh());\n    this.attributeObserverMap.forEach((observer) => observer.refresh());\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      this.disconnectAllOutlets();\n      this.stopSelectorObservers();\n      this.stopAttributeObservers();\n    }\n  }\n  stopSelectorObservers() {\n    if (this.selectorObserverMap.size > 0) {\n      this.selectorObserverMap.forEach((observer) => observer.stop());\n      this.selectorObserverMap.clear();\n    }\n  }\n  stopAttributeObservers() {\n    if (this.attributeObserverMap.size > 0) {\n      this.attributeObserverMap.forEach((observer) => observer.stop());\n      this.attributeObserverMap.clear();\n    }\n  }\n  selectorMatched(element, _selector, { outletName }) {\n    const outlet = this.getOutlet(element, outletName);\n    if (outlet) {\n      this.connectOutlet(outlet, element, outletName);\n    }\n  }\n  selectorUnmatched(element, _selector, { outletName }) {\n    const outlet = this.getOutletFromMap(element, outletName);\n    if (outlet) {\n      this.disconnectOutlet(outlet, element, outletName);\n    }\n  }\n  selectorMatchElement(element, { outletName }) {\n    const selector = this.selector(outletName);\n    const hasOutlet = this.hasOutlet(element, outletName);\n    const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n    if (selector) {\n      return hasOutlet && hasOutletController && element.matches(selector);\n    } else {\n      return false;\n    }\n  }\n  elementMatchedAttribute(_element, attributeName) {\n    const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n    if (outletName) {\n      this.updateSelectorObserverForOutlet(outletName);\n    }\n  }\n  elementAttributeValueChanged(_element, attributeName) {\n    const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n    if (outletName) {\n      this.updateSelectorObserverForOutlet(outletName);\n    }\n  }\n  elementUnmatchedAttribute(_element, attributeName) {\n    const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n    if (outletName) {\n      this.updateSelectorObserverForOutlet(outletName);\n    }\n  }\n  connectOutlet(outlet, element, outletName) {\n    var _a;\n    if (!this.outletElementsByName.has(outletName, element)) {\n      this.outletsByName.add(outletName, outlet);\n      this.outletElementsByName.add(outletName, element);\n      (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n    }\n  }\n  disconnectOutlet(outlet, element, outletName) {\n    var _a;\n    if (this.outletElementsByName.has(outletName, element)) {\n      this.outletsByName.delete(outletName, outlet);\n      this.outletElementsByName.delete(outletName, element);\n      (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n    }\n  }\n  disconnectAllOutlets() {\n    for (const outletName of this.outletElementsByName.keys) {\n      for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n        for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n          this.disconnectOutlet(outlet, element, outletName);\n        }\n      }\n    }\n  }\n  updateSelectorObserverForOutlet(outletName) {\n    const observer = this.selectorObserverMap.get(outletName);\n    if (observer) {\n      observer.selector = this.selector(outletName);\n    }\n  }\n  setupSelectorObserverForOutlet(outletName) {\n    const selector = this.selector(outletName);\n    const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n    this.selectorObserverMap.set(outletName, selectorObserver);\n    selectorObserver.start();\n  }\n  setupAttributeObserverForOutlet(outletName) {\n    const attributeName = this.attributeNameForOutletName(outletName);\n    const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n    this.attributeObserverMap.set(outletName, attributeObserver);\n    attributeObserver.start();\n  }\n  selector(outletName) {\n    return this.scope.outlets.getSelectorForOutletName(outletName);\n  }\n  attributeNameForOutletName(outletName) {\n    return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n  }\n  getOutletNameFromOutletAttributeName(attributeName) {\n    return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n  }\n  get outletDependencies() {\n    const dependencies = new Multimap();\n    this.router.modules.forEach((module) => {\n      const constructor = module.definition.controllerConstructor;\n      const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n      outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n    });\n    return dependencies;\n  }\n  get outletDefinitions() {\n    return this.outletDependencies.getKeysForValue(this.identifier);\n  }\n  get dependentControllerIdentifiers() {\n    return this.outletDependencies.getValuesForKey(this.identifier);\n  }\n  get dependentContexts() {\n    const identifiers = this.dependentControllerIdentifiers;\n    return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n  }\n  hasOutlet(element, outletName) {\n    return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n  }\n  getOutlet(element, outletName) {\n    return this.application.getControllerForElementAndIdentifier(element, outletName);\n  }\n  getOutletFromMap(element, outletName) {\n    return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n  }\n  get scope() {\n    return this.context.scope;\n  }\n  get schema() {\n    return this.context.schema;\n  }\n  get identifier() {\n    return this.context.identifier;\n  }\n  get application() {\n    return this.context.application;\n  }\n  get router() {\n    return this.application.router;\n  }\n};\nvar Context = class {\n  constructor(module, scope) {\n    this.logDebugActivity = (functionName, detail = {}) => {\n      const { identifier, controller, element } = this;\n      detail = Object.assign({ identifier, controller, element }, detail);\n      this.application.logDebugActivity(this.identifier, functionName, detail);\n    };\n    this.module = module;\n    this.scope = scope;\n    this.controller = new module.controllerConstructor(this);\n    this.bindingObserver = new BindingObserver(this, this.dispatcher);\n    this.valueObserver = new ValueObserver(this, this.controller);\n    this.targetObserver = new TargetObserver(this, this);\n    this.outletObserver = new OutletObserver(this, this);\n    try {\n      this.controller.initialize();\n      this.logDebugActivity(\"initialize\");\n    } catch (error2) {\n      this.handleError(error2, \"initializing controller\");\n    }\n  }\n  connect() {\n    this.bindingObserver.start();\n    this.valueObserver.start();\n    this.targetObserver.start();\n    this.outletObserver.start();\n    try {\n      this.controller.connect();\n      this.logDebugActivity(\"connect\");\n    } catch (error2) {\n      this.handleError(error2, \"connecting controller\");\n    }\n  }\n  refresh() {\n    this.outletObserver.refresh();\n  }\n  disconnect() {\n    try {\n      this.controller.disconnect();\n      this.logDebugActivity(\"disconnect\");\n    } catch (error2) {\n      this.handleError(error2, \"disconnecting controller\");\n    }\n    this.outletObserver.stop();\n    this.targetObserver.stop();\n    this.valueObserver.stop();\n    this.bindingObserver.stop();\n  }\n  get application() {\n    return this.module.application;\n  }\n  get identifier() {\n    return this.module.identifier;\n  }\n  get schema() {\n    return this.application.schema;\n  }\n  get dispatcher() {\n    return this.application.dispatcher;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get parentElement() {\n    return this.element.parentElement;\n  }\n  handleError(error2, message, detail = {}) {\n    const { identifier, controller, element } = this;\n    detail = Object.assign({ identifier, controller, element }, detail);\n    this.application.handleError(error2, `Error ${message}`, detail);\n  }\n  targetConnected(element, name) {\n    this.invokeControllerMethod(`${name}TargetConnected`, element);\n  }\n  targetDisconnected(element, name) {\n    this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n  }\n  outletConnected(outlet, element, name) {\n    this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n  }\n  outletDisconnected(outlet, element, name) {\n    this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n  }\n  invokeControllerMethod(methodName, ...args) {\n    const controller = this.controller;\n    if (typeof controller[methodName] == \"function\") {\n      controller[methodName](...args);\n    }\n  }\n};\nfunction bless(constructor) {\n  return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n  const shadowConstructor = extend(constructor);\n  const shadowProperties = getShadowProperties(constructor.prototype, properties);\n  Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n  return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n  const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n  return blessings.reduce((blessedProperties, blessing) => {\n    const properties = blessing(constructor);\n    for (const key in properties) {\n      const descriptor = blessedProperties[key] || {};\n      blessedProperties[key] = Object.assign(descriptor, properties[key]);\n    }\n    return blessedProperties;\n  }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n  return getOwnKeys(properties).reduce((shadowProperties, key) => {\n    const descriptor = getShadowedDescriptor(prototype, properties, key);\n    if (descriptor) {\n      Object.assign(shadowProperties, { [key]: descriptor });\n    }\n    return shadowProperties;\n  }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n  const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n  const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n  if (!shadowedByValue) {\n    const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n    if (shadowingDescriptor) {\n      descriptor.get = shadowingDescriptor.get || descriptor.get;\n      descriptor.set = shadowingDescriptor.set || descriptor.set;\n    }\n    return descriptor;\n  }\n}\nvar getOwnKeys = (() => {\n  if (typeof Object.getOwnPropertySymbols == \"function\") {\n    return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n  } else {\n    return Object.getOwnPropertyNames;\n  }\n})();\nvar extend = (() => {\n  function extendWithReflect(constructor) {\n    function extended() {\n      return Reflect.construct(constructor, arguments, new.target);\n    }\n    extended.prototype = Object.create(constructor.prototype, {\n      constructor: { value: extended }\n    });\n    Reflect.setPrototypeOf(extended, constructor);\n    return extended;\n  }\n  function testReflectExtension() {\n    const a = function() {\n      this.a.call(this);\n    };\n    const b = extendWithReflect(a);\n    b.prototype.a = function() {\n    };\n    return new b();\n  }\n  try {\n    testReflectExtension();\n    return extendWithReflect;\n  } catch (error2) {\n    return (constructor) => class extended extends constructor {\n    };\n  }\n})();\nfunction blessDefinition(definition) {\n  return {\n    identifier: definition.identifier,\n    controllerConstructor: bless(definition.controllerConstructor)\n  };\n}\nvar Module = class {\n  constructor(application, definition) {\n    this.application = application;\n    this.definition = blessDefinition(definition);\n    this.contextsByScope = /* @__PURE__ */ new WeakMap();\n    this.connectedContexts = /* @__PURE__ */ new Set();\n  }\n  get identifier() {\n    return this.definition.identifier;\n  }\n  get controllerConstructor() {\n    return this.definition.controllerConstructor;\n  }\n  get contexts() {\n    return Array.from(this.connectedContexts);\n  }\n  connectContextForScope(scope) {\n    const context = this.fetchContextForScope(scope);\n    this.connectedContexts.add(context);\n    context.connect();\n  }\n  disconnectContextForScope(scope) {\n    const context = this.contextsByScope.get(scope);\n    if (context) {\n      this.connectedContexts.delete(context);\n      context.disconnect();\n    }\n  }\n  fetchContextForScope(scope) {\n    let context = this.contextsByScope.get(scope);\n    if (!context) {\n      context = new Context(this, scope);\n      this.contextsByScope.set(scope, context);\n    }\n    return context;\n  }\n};\nvar ClassMap = class {\n  constructor(scope) {\n    this.scope = scope;\n  }\n  has(name) {\n    return this.data.has(this.getDataKey(name));\n  }\n  get(name) {\n    return this.getAll(name)[0];\n  }\n  getAll(name) {\n    const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n    return tokenize(tokenString);\n  }\n  getAttributeName(name) {\n    return this.data.getAttributeNameForKey(this.getDataKey(name));\n  }\n  getDataKey(name) {\n    return `${name}-class`;\n  }\n  get data() {\n    return this.scope.data;\n  }\n};\nvar DataMap = class {\n  constructor(scope) {\n    this.scope = scope;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get identifier() {\n    return this.scope.identifier;\n  }\n  get(key) {\n    const name = this.getAttributeNameForKey(key);\n    return this.element.getAttribute(name);\n  }\n  set(key, value) {\n    const name = this.getAttributeNameForKey(key);\n    this.element.setAttribute(name, value);\n    return this.get(key);\n  }\n  has(key) {\n    const name = this.getAttributeNameForKey(key);\n    return this.element.hasAttribute(name);\n  }\n  delete(key) {\n    if (this.has(key)) {\n      const name = this.getAttributeNameForKey(key);\n      this.element.removeAttribute(name);\n      return true;\n    } else {\n      return false;\n    }\n  }\n  getAttributeNameForKey(key) {\n    return `data-${this.identifier}-${dasherize(key)}`;\n  }\n};\nvar Guide = class {\n  constructor(logger) {\n    this.warnedKeysByObject = /* @__PURE__ */ new WeakMap();\n    this.logger = logger;\n  }\n  warn(object, key, message) {\n    let warnedKeys = this.warnedKeysByObject.get(object);\n    if (!warnedKeys) {\n      warnedKeys = /* @__PURE__ */ new Set();\n      this.warnedKeysByObject.set(object, warnedKeys);\n    }\n    if (!warnedKeys.has(key)) {\n      warnedKeys.add(key);\n      this.logger.warn(message, object);\n    }\n  }\n};\nfunction attributeValueContainsToken(attributeName, token) {\n  return `[${attributeName}~=\"${token}\"]`;\n}\nvar TargetSet = class {\n  constructor(scope) {\n    this.scope = scope;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get identifier() {\n    return this.scope.identifier;\n  }\n  get schema() {\n    return this.scope.schema;\n  }\n  has(targetName) {\n    return this.find(targetName) != null;\n  }\n  find(...targetNames) {\n    return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), void 0);\n  }\n  findAll(...targetNames) {\n    return targetNames.reduce((targets, targetName) => [\n      ...targets,\n      ...this.findAllTargets(targetName),\n      ...this.findAllLegacyTargets(targetName)\n    ], []);\n  }\n  findTarget(targetName) {\n    const selector = this.getSelectorForTargetName(targetName);\n    return this.scope.findElement(selector);\n  }\n  findAllTargets(targetName) {\n    const selector = this.getSelectorForTargetName(targetName);\n    return this.scope.findAllElements(selector);\n  }\n  getSelectorForTargetName(targetName) {\n    const attributeName = this.schema.targetAttributeForScope(this.identifier);\n    return attributeValueContainsToken(attributeName, targetName);\n  }\n  findLegacyTarget(targetName) {\n    const selector = this.getLegacySelectorForTargetName(targetName);\n    return this.deprecate(this.scope.findElement(selector), targetName);\n  }\n  findAllLegacyTargets(targetName) {\n    const selector = this.getLegacySelectorForTargetName(targetName);\n    return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n  }\n  getLegacySelectorForTargetName(targetName) {\n    const targetDescriptor = `${this.identifier}.${targetName}`;\n    return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n  }\n  deprecate(element, targetName) {\n    if (element) {\n      const { identifier } = this;\n      const attributeName = this.schema.targetAttribute;\n      const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n      this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n    }\n    return element;\n  }\n  get guide() {\n    return this.scope.guide;\n  }\n};\nvar OutletSet = class {\n  constructor(scope, controllerElement) {\n    this.scope = scope;\n    this.controllerElement = controllerElement;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get identifier() {\n    return this.scope.identifier;\n  }\n  get schema() {\n    return this.scope.schema;\n  }\n  has(outletName) {\n    return this.find(outletName) != null;\n  }\n  find(...outletNames) {\n    return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), void 0);\n  }\n  findAll(...outletNames) {\n    return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n  }\n  getSelectorForOutletName(outletName) {\n    const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n    return this.controllerElement.getAttribute(attributeName);\n  }\n  findOutlet(outletName) {\n    const selector = this.getSelectorForOutletName(outletName);\n    if (selector)\n      return this.findElement(selector, outletName);\n  }\n  findAllOutlets(outletName) {\n    const selector = this.getSelectorForOutletName(outletName);\n    return selector ? this.findAllElements(selector, outletName) : [];\n  }\n  findElement(selector, outletName) {\n    const elements = this.scope.queryElements(selector);\n    return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n  }\n  findAllElements(selector, outletName) {\n    const elements = this.scope.queryElements(selector);\n    return elements.filter((element) => this.matchesElement(element, selector, outletName));\n  }\n  matchesElement(element, selector, outletName) {\n    const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n    return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n  }\n};\nvar Scope = class _Scope {\n  constructor(schema, element, identifier, logger) {\n    this.targets = new TargetSet(this);\n    this.classes = new ClassMap(this);\n    this.data = new DataMap(this);\n    this.containsElement = (element2) => {\n      return element2.closest(this.controllerSelector) === this.element;\n    };\n    this.schema = schema;\n    this.element = element;\n    this.identifier = identifier;\n    this.guide = new Guide(logger);\n    this.outlets = new OutletSet(this.documentScope, element);\n  }\n  findElement(selector) {\n    return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n  }\n  findAllElements(selector) {\n    return [\n      ...this.element.matches(selector) ? [this.element] : [],\n      ...this.queryElements(selector).filter(this.containsElement)\n    ];\n  }\n  queryElements(selector) {\n    return Array.from(this.element.querySelectorAll(selector));\n  }\n  get controllerSelector() {\n    return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n  }\n  get isDocumentScope() {\n    return this.element === document.documentElement;\n  }\n  get documentScope() {\n    return this.isDocumentScope ? this : new _Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n  }\n};\nvar ScopeObserver = class {\n  constructor(element, schema, delegate) {\n    this.element = element;\n    this.schema = schema;\n    this.delegate = delegate;\n    this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n    this.scopesByIdentifierByElement = /* @__PURE__ */ new WeakMap();\n    this.scopeReferenceCounts = /* @__PURE__ */ new WeakMap();\n  }\n  start() {\n    this.valueListObserver.start();\n  }\n  stop() {\n    this.valueListObserver.stop();\n  }\n  get controllerAttribute() {\n    return this.schema.controllerAttribute;\n  }\n  parseValueForToken(token) {\n    const { element, content: identifier } = token;\n    return this.parseValueForElementAndIdentifier(element, identifier);\n  }\n  parseValueForElementAndIdentifier(element, identifier) {\n    const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n    let scope = scopesByIdentifier.get(identifier);\n    if (!scope) {\n      scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n      scopesByIdentifier.set(identifier, scope);\n    }\n    return scope;\n  }\n  elementMatchedValue(element, value) {\n    const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n    this.scopeReferenceCounts.set(value, referenceCount);\n    if (referenceCount == 1) {\n      this.delegate.scopeConnected(value);\n    }\n  }\n  elementUnmatchedValue(element, value) {\n    const referenceCount = this.scopeReferenceCounts.get(value);\n    if (referenceCount) {\n      this.scopeReferenceCounts.set(value, referenceCount - 1);\n      if (referenceCount == 1) {\n        this.delegate.scopeDisconnected(value);\n      }\n    }\n  }\n  fetchScopesByIdentifierForElement(element) {\n    let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n    if (!scopesByIdentifier) {\n      scopesByIdentifier = /* @__PURE__ */ new Map();\n      this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n    }\n    return scopesByIdentifier;\n  }\n};\nvar Router = class {\n  constructor(application) {\n    this.application = application;\n    this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n    this.scopesByIdentifier = new Multimap();\n    this.modulesByIdentifier = /* @__PURE__ */ new Map();\n  }\n  get element() {\n    return this.application.element;\n  }\n  get schema() {\n    return this.application.schema;\n  }\n  get logger() {\n    return this.application.logger;\n  }\n  get controllerAttribute() {\n    return this.schema.controllerAttribute;\n  }\n  get modules() {\n    return Array.from(this.modulesByIdentifier.values());\n  }\n  get contexts() {\n    return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n  }\n  start() {\n    this.scopeObserver.start();\n  }\n  stop() {\n    this.scopeObserver.stop();\n  }\n  loadDefinition(definition) {\n    this.unloadIdentifier(definition.identifier);\n    const module = new Module(this.application, definition);\n    this.connectModule(module);\n    const afterLoad = definition.controllerConstructor.afterLoad;\n    if (afterLoad) {\n      afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n    }\n  }\n  unloadIdentifier(identifier) {\n    const module = this.modulesByIdentifier.get(identifier);\n    if (module) {\n      this.disconnectModule(module);\n    }\n  }\n  getContextForElementAndIdentifier(element, identifier) {\n    const module = this.modulesByIdentifier.get(identifier);\n    if (module) {\n      return module.contexts.find((context) => context.element == element);\n    }\n  }\n  proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n    const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n    if (scope) {\n      this.scopeObserver.elementMatchedValue(scope.element, scope);\n    } else {\n      console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n    }\n  }\n  handleError(error2, message, detail) {\n    this.application.handleError(error2, message, detail);\n  }\n  createScopeForElementAndIdentifier(element, identifier) {\n    return new Scope(this.schema, element, identifier, this.logger);\n  }\n  scopeConnected(scope) {\n    this.scopesByIdentifier.add(scope.identifier, scope);\n    const module = this.modulesByIdentifier.get(scope.identifier);\n    if (module) {\n      module.connectContextForScope(scope);\n    }\n  }\n  scopeDisconnected(scope) {\n    this.scopesByIdentifier.delete(scope.identifier, scope);\n    const module = this.modulesByIdentifier.get(scope.identifier);\n    if (module) {\n      module.disconnectContextForScope(scope);\n    }\n  }\n  connectModule(module) {\n    this.modulesByIdentifier.set(module.identifier, module);\n    const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n    scopes.forEach((scope) => module.connectContextForScope(scope));\n  }\n  disconnectModule(module) {\n    this.modulesByIdentifier.delete(module.identifier);\n    const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n    scopes.forEach((scope) => module.disconnectContextForScope(scope));\n  }\n};\nvar defaultSchema = {\n  controllerAttribute: \"data-controller\",\n  actionAttribute: \"data-action\",\n  targetAttribute: \"data-target\",\n  targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n  outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n  keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n])))\n};\nfunction objectFromEntries(array) {\n  return array.reduce((memo, [k, v]) => Object.assign(Object.assign({}, memo), { [k]: v }), {});\n}\nvar Application = class {\n  constructor(element = document.documentElement, schema = defaultSchema) {\n    this.logger = console;\n    this.debug = false;\n    this.logDebugActivity = (identifier, functionName, detail = {}) => {\n      if (this.debug) {\n        this.logFormattedMessage(identifier, functionName, detail);\n      }\n    };\n    this.element = element;\n    this.schema = schema;\n    this.dispatcher = new Dispatcher(this);\n    this.router = new Router(this);\n    this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n  }\n  static start(element, schema) {\n    const application = new this(element, schema);\n    application.start();\n    return application;\n  }\n  async start() {\n    await domReady();\n    this.logDebugActivity(\"application\", \"starting\");\n    this.dispatcher.start();\n    this.router.start();\n    this.logDebugActivity(\"application\", \"start\");\n  }\n  stop() {\n    this.logDebugActivity(\"application\", \"stopping\");\n    this.dispatcher.stop();\n    this.router.stop();\n    this.logDebugActivity(\"application\", \"stop\");\n  }\n  register(identifier, controllerConstructor) {\n    this.load({ identifier, controllerConstructor });\n  }\n  registerActionOption(name, filter) {\n    this.actionDescriptorFilters[name] = filter;\n  }\n  load(head, ...rest) {\n    const definitions = Array.isArray(head) ? head : [head, ...rest];\n    definitions.forEach((definition) => {\n      if (definition.controllerConstructor.shouldLoad) {\n        this.router.loadDefinition(definition);\n      }\n    });\n  }\n  unload(head, ...rest) {\n    const identifiers = Array.isArray(head) ? head : [head, ...rest];\n    identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n  }\n  get controllers() {\n    return this.router.contexts.map((context) => context.controller);\n  }\n  getControllerForElementAndIdentifier(element, identifier) {\n    const context = this.router.getContextForElementAndIdentifier(element, identifier);\n    return context ? context.controller : null;\n  }\n  handleError(error2, message, detail) {\n    var _a;\n    this.logger.error(`%s\n\n%o\n\n%o`, message, error2, detail);\n    (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error2);\n  }\n  logFormattedMessage(identifier, functionName, detail = {}) {\n    detail = Object.assign({ application: this }, detail);\n    this.logger.groupCollapsed(`${identifier} #${functionName}`);\n    this.logger.log(\"details:\", Object.assign({}, detail));\n    this.logger.groupEnd();\n  }\n};\nfunction domReady() {\n  return new Promise((resolve) => {\n    if (document.readyState == \"loading\") {\n      document.addEventListener(\"DOMContentLoaded\", () => resolve());\n    } else {\n      resolve();\n    }\n  });\n}\nfunction ClassPropertiesBlessing(constructor) {\n  const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n  return classes.reduce((properties, classDefinition) => {\n    return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n  }, {});\n}\nfunction propertiesForClassDefinition(key) {\n  return {\n    [`${key}Class`]: {\n      get() {\n        const { classes } = this;\n        if (classes.has(key)) {\n          return classes.get(key);\n        } else {\n          const attribute = classes.getAttributeName(key);\n          throw new Error(`Missing attribute \"${attribute}\"`);\n        }\n      }\n    },\n    [`${key}Classes`]: {\n      get() {\n        return this.classes.getAll(key);\n      }\n    },\n    [`has${capitalize(key)}Class`]: {\n      get() {\n        return this.classes.has(key);\n      }\n    }\n  };\n}\nfunction OutletPropertiesBlessing(constructor) {\n  const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n  return outlets.reduce((properties, outletDefinition) => {\n    return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n  }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n  return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n  let outletController = getOutletController(controller, element, outletName);\n  if (outletController)\n    return outletController;\n  controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n  outletController = getOutletController(controller, element, outletName);\n  if (outletController)\n    return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n  const camelizedName = namespaceCamelize(name);\n  return {\n    [`${camelizedName}Outlet`]: {\n      get() {\n        const outletElement = this.outlets.find(name);\n        const selector = this.outlets.getSelectorForOutletName(name);\n        if (outletElement) {\n          const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n          if (outletController)\n            return outletController;\n          throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n        }\n        throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n      }\n    },\n    [`${camelizedName}Outlets`]: {\n      get() {\n        const outlets = this.outlets.findAll(name);\n        if (outlets.length > 0) {\n          return outlets.map((outletElement) => {\n            const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n            if (outletController)\n              return outletController;\n            console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n          }).filter((controller) => controller);\n        }\n        return [];\n      }\n    },\n    [`${camelizedName}OutletElement`]: {\n      get() {\n        const outletElement = this.outlets.find(name);\n        const selector = this.outlets.getSelectorForOutletName(name);\n        if (outletElement) {\n          return outletElement;\n        } else {\n          throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n        }\n      }\n    },\n    [`${camelizedName}OutletElements`]: {\n      get() {\n        return this.outlets.findAll(name);\n      }\n    },\n    [`has${capitalize(camelizedName)}Outlet`]: {\n      get() {\n        return this.outlets.has(name);\n      }\n    }\n  };\n}\nfunction TargetPropertiesBlessing(constructor) {\n  const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n  return targets.reduce((properties, targetDefinition) => {\n    return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n  }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n  return {\n    [`${name}Target`]: {\n      get() {\n        const target = this.targets.find(name);\n        if (target) {\n          return target;\n        } else {\n          throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n        }\n      }\n    },\n    [`${name}Targets`]: {\n      get() {\n        return this.targets.findAll(name);\n      }\n    },\n    [`has${capitalize(name)}Target`]: {\n      get() {\n        return this.targets.has(name);\n      }\n    }\n  };\n}\nfunction ValuePropertiesBlessing(constructor) {\n  const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n  const propertyDescriptorMap = {\n    valueDescriptorMap: {\n      get() {\n        return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n          const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n          const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n          return Object.assign(result, { [attributeName]: valueDescriptor });\n        }, {});\n      }\n    }\n  };\n  return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n    return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n  }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n  const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n  const { key, name, reader: read, writer: write } = definition;\n  return {\n    [name]: {\n      get() {\n        const value = this.data.get(key);\n        if (value !== null) {\n          return read(value);\n        } else {\n          return definition.defaultValue;\n        }\n      },\n      set(value) {\n        if (value === void 0) {\n          this.data.delete(key);\n        } else {\n          this.data.set(key, write(value));\n        }\n      }\n    },\n    [`has${capitalize(name)}`]: {\n      get() {\n        return this.data.has(key) || definition.hasCustomDefaultValue;\n      }\n    }\n  };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n  return valueDescriptorForTokenAndTypeDefinition({\n    controller,\n    token,\n    typeDefinition\n  });\n}\nfunction parseValueTypeConstant(constant) {\n  switch (constant) {\n    case Array:\n      return \"array\";\n    case Boolean:\n      return \"boolean\";\n    case Number:\n      return \"number\";\n    case Object:\n      return \"object\";\n    case String:\n      return \"string\";\n  }\n}\nfunction parseValueTypeDefault(defaultValue) {\n  switch (typeof defaultValue) {\n    case \"boolean\":\n      return \"boolean\";\n    case \"number\":\n      return \"number\";\n    case \"string\":\n      return \"string\";\n  }\n  if (Array.isArray(defaultValue))\n    return \"array\";\n  if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n    return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n  const { controller, token, typeObject } = payload;\n  const hasType = isSomething(typeObject.type);\n  const hasDefault = isSomething(typeObject.default);\n  const fullObject = hasType && hasDefault;\n  const onlyType = hasType && !hasDefault;\n  const onlyDefault = !hasType && hasDefault;\n  const typeFromObject = parseValueTypeConstant(typeObject.type);\n  const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n  if (onlyType)\n    return typeFromObject;\n  if (onlyDefault)\n    return typeFromDefaultValue;\n  if (typeFromObject !== typeFromDefaultValue) {\n    const propertyPath = controller ? `${controller}.${token}` : token;\n    throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n  }\n  if (fullObject)\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n  const { controller, token, typeDefinition } = payload;\n  const typeObject = { controller, token, typeObject: typeDefinition };\n  const typeFromObject = parseValueTypeObject(typeObject);\n  const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n  const typeFromConstant = parseValueTypeConstant(typeDefinition);\n  const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n  if (type)\n    return type;\n  const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n  throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n  const constant = parseValueTypeConstant(typeDefinition);\n  if (constant)\n    return defaultValuesByType[constant];\n  const hasDefault = hasProperty(typeDefinition, \"default\");\n  const hasType = hasProperty(typeDefinition, \"type\");\n  const typeObject = typeDefinition;\n  if (hasDefault)\n    return typeObject.default;\n  if (hasType) {\n    const { type } = typeObject;\n    const constantFromType = parseValueTypeConstant(type);\n    if (constantFromType)\n      return defaultValuesByType[constantFromType];\n  }\n  return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n  const { token, typeDefinition } = payload;\n  const key = `${dasherize(token)}-value`;\n  const type = parseValueTypeDefinition(payload);\n  return {\n    type,\n    key,\n    name: camelize(key),\n    get defaultValue() {\n      return defaultValueForDefinition(typeDefinition);\n    },\n    get hasCustomDefaultValue() {\n      return parseValueTypeDefault(typeDefinition) !== void 0;\n    },\n    reader: readers[type],\n    writer: writers[type] || writers.default\n  };\n}\nvar defaultValuesByType = {\n  get array() {\n    return [];\n  },\n  boolean: false,\n  number: 0,\n  get object() {\n    return {};\n  },\n  string: \"\"\n};\nvar readers = {\n  array(value) {\n    const array = JSON.parse(value);\n    if (!Array.isArray(array)) {\n      throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n    }\n    return array;\n  },\n  boolean(value) {\n    return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n  },\n  number(value) {\n    return Number(value.replace(/_/g, \"\"));\n  },\n  object(value) {\n    const object = JSON.parse(value);\n    if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n      throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n    }\n    return object;\n  },\n  string(value) {\n    return value;\n  }\n};\nvar writers = {\n  default: writeString,\n  array: writeJSON,\n  object: writeJSON\n};\nfunction writeJSON(value) {\n  return JSON.stringify(value);\n}\nfunction writeString(value) {\n  return `${value}`;\n}\nvar Controller = class {\n  constructor(context) {\n    this.context = context;\n  }\n  static get shouldLoad() {\n    return true;\n  }\n  static afterLoad(_identifier, _application) {\n    return;\n  }\n  get application() {\n    return this.context.application;\n  }\n  get scope() {\n    return this.context.scope;\n  }\n  get element() {\n    return this.scope.element;\n  }\n  get identifier() {\n    return this.scope.identifier;\n  }\n  get targets() {\n    return this.scope.targets;\n  }\n  get outlets() {\n    return this.scope.outlets;\n  }\n  get classes() {\n    return this.scope.classes;\n  }\n  get data() {\n    return this.scope.data;\n  }\n  initialize() {\n  }\n  connect() {\n  }\n  disconnect() {\n  }\n  dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n    const type = prefix ? `${prefix}:${eventName}` : eventName;\n    const event = new CustomEvent(type, { detail, bubbles, cancelable });\n    target.dispatchEvent(event);\n    return event;\n  }\n};\nController.blessings = [\n  ClassPropertiesBlessing,\n  TargetPropertiesBlessing,\n  ValuePropertiesBlessing,\n  OutletPropertiesBlessing\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\nexport {\n  Application,\n  AttributeObserver,\n  Context,\n  Controller,\n  ElementObserver,\n  IndexedMultimap,\n  Multimap,\n  SelectorObserver,\n  StringMapObserver,\n  TokenListObserver,\n  ValueListObserver,\n  add,\n  defaultSchema,\n  del,\n  fetch,\n  prune\n};\n//# sourceMappingURL=@hotwired_stimulus.js.map\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = []\n\n  toggle(event) {\n    const parent = event.currentTarget.closest(\".accordion-section\")\n    parent.querySelectorAll(\".toggleable\").forEach((toggleable) => {\n      toggleable.classList.toggle(\"hidden\")\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"slide\"\n  ]\n  static values = {\n    resizeTarget: String\n  }\n\n  connect() {\n    this.currentPosition = 0\n    this.setEqualSlideHeight()\n    this.updateSlides()\n  }\n\n  goToPreviousSlide(event) {\n    event.preventDefault()\n\n    if (this.currentPosition === 0) {\n      this.currentPosition = this.slideTargets.length - 1\n    } else {\n      this.currentPosition--\n    }\n\n    this.updateSlides()\n  }\n\n  goToNextSlide(event) {\n    event.preventDefault()\n\n    if (this.currentPosition === (this.slideTargets.length - 1)) {\n      this.currentPosition = 0\n    } else {\n      this.currentPosition++\n    }\n\n    this.updateSlides()\n  }\n\n  updateSlides() {\n    this.slideTargets.filter((slide, index) => {\n      if (index === this.currentPosition) {\n        slide.classList.remove(\"hidden\", \"slide-offset\")\n        slide.querySelectorAll(\".dot\").forEach((dot, index) => {\n          if (index === this.currentPosition) {\n            dot.classList.add(\"bg-lime\", \"h-3\", \"w-3\")\n            dot.classList.remove(\"bg-gray-300\", \"h-2\", \"w-2\")\n          } else {\n            dot.classList.add(\"bg-gray-300\", \"h-2\", \"w-2\")\n            dot.classList.remove(\"bg-lime\", \"h-3\", \"w-3\")\n          }\n        })\n      } else {\n        slide.classList.add(\"hidden\")\n      }\n    })\n  }\n\n  setEqualSlideHeight() {\n    let greaterHeight = 0\n    const resizeTarget = this.resizeTargetValue\n\n    this.slideTargets.forEach(slide => {\n      if ($(slide).find(this.resizeTargetValue).height() > greaterHeight) {\n        greaterHeight = $(slide).find(resizeTarget).height()\n      }\n    })\n\n    this.slideTargets.forEach(slide => {\n      $(slide).find(resizeTarget).height(greaterHeight)\n    })\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['source', 'input', 'button']\n\n  copy() {\n    this.inputTarget.value = this.sourceTarget.innerText\n    this.inputTarget.select()\n    document.execCommand('copy')\n    this.buttonTarget.innerHTML = '<i id=\"copied\" class=\"fas fa-check w-4 h-4 block text-green-600\"></i>'\n    setTimeout(function () {\n      document.getElementById('copied').innerHTML = '<i class=\"far fa-copy w-4 h-4 block text-gray-600\"></i>'\n    }, 1500)\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"shadowField\" ]\n\n  clickShadowField(event) {\n    // we have to stop safari from doing what we originally expected.\n    event.preventDefault();\n\n    // then we need to manually click the hidden checkbox or radio button ourselves.\n    this.shadowFieldTarget.click()\n  }\n}\n","// node_modules/@ckeditor/ckeditor5-utils/src/ckeditorerror.js\nvar DOCUMENTATION_URL = \"https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html\";\nvar CKEditorError = class _CKEditorError extends Error {\n  /**\n   * Creates an instance of the CKEditorError class.\n   *\n   * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added\n   * to the thrown error's `message`.\n   * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog}\n   * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also\n   * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization).\n   * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility\n   * to check if the object works as the context.\n   * @param data Additional data describing the error. A stringified version of this object\n   * will be appended to the error message, so the data are quickly visible in the console. The original\n   * data object will also be later available under the {@link #data} property.\n   */\n  constructor(errorName, context, data) {\n    super(getErrorMessage(errorName, data));\n    this.name = \"CKEditorError\";\n    this.context = context;\n    this.data = data;\n  }\n  /**\n   * Checks if the error is of the `CKEditorError` type.\n   */\n  is(type) {\n    return type === \"CKEditorError\";\n  }\n  /**\n   * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one.\n   * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case\n   * of a {@link module:utils/ckeditorerror~CKEditorError} error.\n   *\n   * @param err The error to rethrow.\n   * @param context An object connected through properties with the editor instance. This context will be used\n   * by the watchdog to verify which editor should be restarted.\n   */\n  static rethrowUnexpectedError(err, context) {\n    if (err.is && err.is(\"CKEditorError\")) {\n      throw err;\n    }\n    const error = new _CKEditorError(err.message, context);\n    error.stack = err.stack;\n    throw error;\n  }\n};\nfunction logWarning(errorName, data) {\n  console.warn(...formatConsoleArguments(errorName, data));\n}\nfunction getLinkToDocumentationMessage(errorName) {\n  return `\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`;\n}\nfunction getErrorMessage(errorName, data) {\n  const processedObjects = /* @__PURE__ */ new WeakSet();\n  const circularReferencesReplacer = (key, value) => {\n    if (typeof value === \"object\" && value !== null) {\n      if (processedObjects.has(value)) {\n        return `[object ${value.constructor.name}]`;\n      }\n      processedObjects.add(value);\n    }\n    return value;\n  };\n  const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : \"\";\n  const documentationLink = getLinkToDocumentationMessage(errorName);\n  return errorName + stringifiedData + documentationLink;\n}\nfunction formatConsoleArguments(errorName, data) {\n  const documentationMessage = getLinkToDocumentationMessage(errorName);\n  return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage];\n}\n\n// node_modules/lodash-es/isObject.js\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == \"object\" || type == \"function\");\n}\nvar isObject_default = isObject;\n\n// node_modules/lodash-es/isObjectLike.js\nfunction isObjectLike(value) {\n  return value != null && typeof value == \"object\";\n}\nvar isObjectLike_default = isObjectLike;\n\n// node_modules/lodash-es/_freeGlobal.js\nvar freeGlobal = typeof global == \"object\" && global && global.Object === Object && global;\nvar freeGlobal_default = freeGlobal;\n\n// node_modules/lodash-es/_root.js\nvar freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\nvar root = freeGlobal_default || freeSelf || Function(\"return this\")();\nvar root_default = root;\n\n// node_modules/lodash-es/_Symbol.js\nvar Symbol2 = root_default.Symbol;\nvar Symbol_default = Symbol2;\n\n// node_modules/lodash-es/_getRawTag.js\nvar objectProto = Object.prototype;\nvar hasOwnProperty = objectProto.hasOwnProperty;\nvar nativeObjectToString = objectProto.toString;\nvar symToStringTag = Symbol_default ? Symbol_default.toStringTag : void 0;\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag];\n  try {\n    value[symToStringTag] = void 0;\n    var unmasked = true;\n  } catch (e) {\n  }\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\nvar getRawTag_default = getRawTag;\n\n// node_modules/lodash-es/_objectToString.js\nvar objectProto2 = Object.prototype;\nvar nativeObjectToString2 = objectProto2.toString;\nfunction objectToString(value) {\n  return nativeObjectToString2.call(value);\n}\nvar objectToString_default = objectToString;\n\n// node_modules/lodash-es/_baseGetTag.js\nvar nullTag = \"[object Null]\";\nvar undefinedTag = \"[object Undefined]\";\nvar symToStringTag2 = Symbol_default ? Symbol_default.toStringTag : void 0;\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === void 0 ? undefinedTag : nullTag;\n  }\n  return symToStringTag2 && symToStringTag2 in Object(value) ? getRawTag_default(value) : objectToString_default(value);\n}\nvar baseGetTag_default = baseGetTag;\n\n// node_modules/lodash-es/_overArg.js\nfunction overArg(func, transform4) {\n  return function(arg) {\n    return func(transform4(arg));\n  };\n}\nvar overArg_default = overArg;\n\n// node_modules/lodash-es/_getPrototype.js\nvar getPrototype = overArg_default(Object.getPrototypeOf, Object);\nvar getPrototype_default = getPrototype;\n\n// node_modules/lodash-es/isPlainObject.js\nvar objectTag = \"[object Object]\";\nvar funcProto = Function.prototype;\nvar objectProto3 = Object.prototype;\nvar funcToString = funcProto.toString;\nvar hasOwnProperty2 = objectProto3.hasOwnProperty;\nvar objectCtorString = funcToString.call(Object);\nfunction isPlainObject(value) {\n  if (!isObjectLike_default(value) || baseGetTag_default(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype_default(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty2.call(proto, \"constructor\") && proto.constructor;\n  return typeof Ctor == \"function\" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n}\nvar isPlainObject_default = isPlainObject;\n\n// node_modules/lodash-es/isElement.js\nfunction isElement(value) {\n  return isObjectLike_default(value) && value.nodeType === 1 && !isPlainObject_default(value);\n}\nvar isElement_default = isElement;\n\n// node_modules/lodash-es/isSymbol.js\nvar symbolTag = \"[object Symbol]\";\nfunction isSymbol(value) {\n  return typeof value == \"symbol\" || isObjectLike_default(value) && baseGetTag_default(value) == symbolTag;\n}\nvar isSymbol_default = isSymbol;\n\n// node_modules/lodash-es/_arrayMap.js\nfunction arrayMap(array, iteratee) {\n  var index = -1, length = array == null ? 0 : array.length, result = Array(length);\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\nvar arrayMap_default = arrayMap;\n\n// node_modules/lodash-es/isArray.js\nvar isArray = Array.isArray;\nvar isArray_default = isArray;\n\n// node_modules/lodash-es/_baseToString.js\nvar INFINITY = 1 / 0;\nvar symbolProto = Symbol_default ? Symbol_default.prototype : void 0;\nvar symbolToString = symbolProto ? symbolProto.toString : void 0;\nfunction baseToString(value) {\n  if (typeof value == \"string\") {\n    return value;\n  }\n  if (isArray_default(value)) {\n    return arrayMap_default(value, baseToString) + \"\";\n  }\n  if (isSymbol_default(value)) {\n    return symbolToString ? symbolToString.call(value) : \"\";\n  }\n  var result = value + \"\";\n  return result == \"0\" && 1 / value == -INFINITY ? \"-0\" : result;\n}\nvar baseToString_default = baseToString;\n\n// node_modules/lodash-es/_trimmedEndIndex.js\nvar reWhitespace = /\\s/;\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n  while (index-- && reWhitespace.test(string.charAt(index))) {\n  }\n  return index;\n}\nvar trimmedEndIndex_default = trimmedEndIndex;\n\n// node_modules/lodash-es/_baseTrim.js\nvar reTrimStart = /^\\s+/;\nfunction baseTrim(string) {\n  return string ? string.slice(0, trimmedEndIndex_default(string) + 1).replace(reTrimStart, \"\") : string;\n}\nvar baseTrim_default = baseTrim;\n\n// node_modules/lodash-es/toNumber.js\nvar NAN = 0 / 0;\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\nvar reIsBinary = /^0b[01]+$/i;\nvar reIsOctal = /^0o[0-7]+$/i;\nvar freeParseInt = parseInt;\nfunction toNumber(value) {\n  if (typeof value == \"number\") {\n    return value;\n  }\n  if (isSymbol_default(value)) {\n    return NAN;\n  }\n  if (isObject_default(value)) {\n    var other = typeof value.valueOf == \"function\" ? value.valueOf() : value;\n    value = isObject_default(other) ? other + \"\" : other;\n  }\n  if (typeof value != \"string\") {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim_default(value);\n  var isBinary = reIsBinary.test(value);\n  return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\nvar toNumber_default = toNumber;\n\n// node_modules/lodash-es/identity.js\nfunction identity(value) {\n  return value;\n}\nvar identity_default = identity;\n\n// node_modules/lodash-es/isFunction.js\nvar asyncTag = \"[object AsyncFunction]\";\nvar funcTag = \"[object Function]\";\nvar genTag = \"[object GeneratorFunction]\";\nvar proxyTag = \"[object Proxy]\";\nfunction isFunction(value) {\n  if (!isObject_default(value)) {\n    return false;\n  }\n  var tag = baseGetTag_default(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar isFunction_default = isFunction;\n\n// node_modules/lodash-es/_coreJsData.js\nvar coreJsData = root_default[\"__core-js_shared__\"];\nvar coreJsData_default = coreJsData;\n\n// node_modules/lodash-es/_isMasked.js\nvar maskSrcKey = function() {\n  var uid2 = /[^.]+$/.exec(coreJsData_default && coreJsData_default.keys && coreJsData_default.keys.IE_PROTO || \"\");\n  return uid2 ? \"Symbol(src)_1.\" + uid2 : \"\";\n}();\nfunction isMasked(func) {\n  return !!maskSrcKey && maskSrcKey in func;\n}\nvar isMasked_default = isMasked;\n\n// node_modules/lodash-es/_toSource.js\nvar funcProto2 = Function.prototype;\nvar funcToString2 = funcProto2.toString;\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString2.call(func);\n    } catch (e) {\n    }\n    try {\n      return func + \"\";\n    } catch (e) {\n    }\n  }\n  return \"\";\n}\nvar toSource_default = toSource;\n\n// node_modules/lodash-es/_baseIsNative.js\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\nvar funcProto3 = Function.prototype;\nvar objectProto4 = Object.prototype;\nvar funcToString3 = funcProto3.toString;\nvar hasOwnProperty3 = objectProto4.hasOwnProperty;\nvar reIsNative = RegExp(\n  \"^\" + funcToString3.call(hasOwnProperty3).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction baseIsNative(value) {\n  if (!isObject_default(value) || isMasked_default(value)) {\n    return false;\n  }\n  var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource_default(value));\n}\nvar baseIsNative_default = baseIsNative;\n\n// node_modules/lodash-es/_getValue.js\nfunction getValue(object, key) {\n  return object == null ? void 0 : object[key];\n}\nvar getValue_default = getValue;\n\n// node_modules/lodash-es/_getNative.js\nfunction getNative(object, key) {\n  var value = getValue_default(object, key);\n  return baseIsNative_default(value) ? value : void 0;\n}\nvar getNative_default = getNative;\n\n// node_modules/lodash-es/_WeakMap.js\nvar WeakMap2 = getNative_default(root_default, \"WeakMap\");\nvar WeakMap_default = WeakMap2;\n\n// node_modules/lodash-es/_baseCreate.js\nvar objectCreate = Object.create;\nvar baseCreate = /* @__PURE__ */ function() {\n  function object() {\n  }\n  return function(proto) {\n    if (!isObject_default(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object();\n    object.prototype = void 0;\n    return result;\n  };\n}();\nvar baseCreate_default = baseCreate;\n\n// node_modules/lodash-es/_apply.js\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0:\n      return func.call(thisArg);\n    case 1:\n      return func.call(thisArg, args[0]);\n    case 2:\n      return func.call(thisArg, args[0], args[1]);\n    case 3:\n      return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\nvar apply_default = apply;\n\n// node_modules/lodash-es/_copyArray.js\nfunction copyArray(source, array) {\n  var index = -1, length = source.length;\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\nvar copyArray_default = copyArray;\n\n// node_modules/lodash-es/_shortOut.js\nvar HOT_COUNT = 800;\nvar HOT_SPAN = 16;\nvar nativeNow = Date.now;\nfunction shortOut(func) {\n  var count2 = 0, lastCalled = 0;\n  return function() {\n    var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count2 >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count2 = 0;\n    }\n    return func.apply(void 0, arguments);\n  };\n}\nvar shortOut_default = shortOut;\n\n// node_modules/lodash-es/constant.js\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\nvar constant_default = constant;\n\n// node_modules/lodash-es/_defineProperty.js\nvar defineProperty = function() {\n  try {\n    var func = getNative_default(Object, \"defineProperty\");\n    func({}, \"\", {});\n    return func;\n  } catch (e) {\n  }\n}();\nvar defineProperty_default = defineProperty;\n\n// node_modules/lodash-es/_baseSetToString.js\nvar baseSetToString = !defineProperty_default ? identity_default : function(func, string) {\n  return defineProperty_default(func, \"toString\", {\n    \"configurable\": true,\n    \"enumerable\": false,\n    \"value\": constant_default(string),\n    \"writable\": true\n  });\n};\nvar baseSetToString_default = baseSetToString;\n\n// node_modules/lodash-es/_setToString.js\nvar setToString = shortOut_default(baseSetToString_default);\nvar setToString_default = setToString;\n\n// node_modules/lodash-es/_arrayEach.js\nfunction arrayEach(array, iteratee) {\n  var index = -1, length = array == null ? 0 : array.length;\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\nvar arrayEach_default = arrayEach;\n\n// node_modules/lodash-es/_isIndex.js\nvar MAX_SAFE_INTEGER = 9007199254740991;\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);\n}\nvar isIndex_default = isIndex;\n\n// node_modules/lodash-es/_baseAssignValue.js\nfunction baseAssignValue(object, key, value) {\n  if (key == \"__proto__\" && defineProperty_default) {\n    defineProperty_default(object, key, {\n      \"configurable\": true,\n      \"enumerable\": true,\n      \"value\": value,\n      \"writable\": true\n    });\n  } else {\n    object[key] = value;\n  }\n}\nvar baseAssignValue_default = baseAssignValue;\n\n// node_modules/lodash-es/eq.js\nfunction eq(value, other) {\n  return value === other || value !== value && other !== other;\n}\nvar eq_default = eq;\n\n// node_modules/lodash-es/_assignValue.js\nvar objectProto5 = Object.prototype;\nvar hasOwnProperty4 = objectProto5.hasOwnProperty;\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty4.call(object, key) && eq_default(objValue, value)) || value === void 0 && !(key in object)) {\n    baseAssignValue_default(object, key, value);\n  }\n}\nvar assignValue_default = assignValue;\n\n// node_modules/lodash-es/_copyObject.js\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n  var index = -1, length = props.length;\n  while (++index < length) {\n    var key = props[index];\n    var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\n    if (newValue === void 0) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue_default(object, key, newValue);\n    } else {\n      assignValue_default(object, key, newValue);\n    }\n  }\n  return object;\n}\nvar copyObject_default = copyObject;\n\n// node_modules/lodash-es/_overRest.js\nvar nativeMax = Math.max;\nfunction overRest(func, start, transform4) {\n  start = nativeMax(start === void 0 ? func.length - 1 : start, 0);\n  return function() {\n    var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length);\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform4(array);\n    return apply_default(func, this, otherArgs);\n  };\n}\nvar overRest_default = overRest;\n\n// node_modules/lodash-es/_baseRest.js\nfunction baseRest(func, start) {\n  return setToString_default(overRest_default(func, start, identity_default), func + \"\");\n}\nvar baseRest_default = baseRest;\n\n// node_modules/lodash-es/isLength.js\nvar MAX_SAFE_INTEGER2 = 9007199254740991;\nfunction isLength(value) {\n  return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER2;\n}\nvar isLength_default = isLength;\n\n// node_modules/lodash-es/isArrayLike.js\nfunction isArrayLike(value) {\n  return value != null && isLength_default(value.length) && !isFunction_default(value);\n}\nvar isArrayLike_default = isArrayLike;\n\n// node_modules/lodash-es/_isIterateeCall.js\nfunction isIterateeCall(value, index, object) {\n  if (!isObject_default(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == \"number\" ? isArrayLike_default(object) && isIndex_default(index, object.length) : type == \"string\" && index in object) {\n    return eq_default(object[index], value);\n  }\n  return false;\n}\nvar isIterateeCall_default = isIterateeCall;\n\n// node_modules/lodash-es/_createAssigner.js\nfunction createAssigner(assigner) {\n  return baseRest_default(function(object, sources) {\n    var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n    customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n    if (guard && isIterateeCall_default(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? void 0 : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\nvar createAssigner_default = createAssigner;\n\n// node_modules/lodash-es/_isPrototype.js\nvar objectProto6 = Object.prototype;\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto6;\n  return value === proto;\n}\nvar isPrototype_default = isPrototype;\n\n// node_modules/lodash-es/_baseTimes.js\nfunction baseTimes(n, iteratee) {\n  var index = -1, result = Array(n);\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\nvar baseTimes_default = baseTimes;\n\n// node_modules/lodash-es/_baseIsArguments.js\nvar argsTag = \"[object Arguments]\";\nfunction baseIsArguments(value) {\n  return isObjectLike_default(value) && baseGetTag_default(value) == argsTag;\n}\nvar baseIsArguments_default = baseIsArguments;\n\n// node_modules/lodash-es/isArguments.js\nvar objectProto7 = Object.prototype;\nvar hasOwnProperty5 = objectProto7.hasOwnProperty;\nvar propertyIsEnumerable = objectProto7.propertyIsEnumerable;\nvar isArguments = baseIsArguments_default(/* @__PURE__ */ function() {\n  return arguments;\n}()) ? baseIsArguments_default : function(value) {\n  return isObjectLike_default(value) && hasOwnProperty5.call(value, \"callee\") && !propertyIsEnumerable.call(value, \"callee\");\n};\nvar isArguments_default = isArguments;\n\n// node_modules/lodash-es/stubFalse.js\nfunction stubFalse() {\n  return false;\n}\nvar stubFalse_default = stubFalse;\n\n// node_modules/lodash-es/isBuffer.js\nvar freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports = freeModule && freeModule.exports === freeExports;\nvar Buffer = moduleExports ? root_default.Buffer : void 0;\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0;\nvar isBuffer = nativeIsBuffer || stubFalse_default;\nvar isBuffer_default = isBuffer;\n\n// node_modules/lodash-es/_baseIsTypedArray.js\nvar argsTag2 = \"[object Arguments]\";\nvar arrayTag = \"[object Array]\";\nvar boolTag = \"[object Boolean]\";\nvar dateTag = \"[object Date]\";\nvar errorTag = \"[object Error]\";\nvar funcTag2 = \"[object Function]\";\nvar mapTag = \"[object Map]\";\nvar numberTag = \"[object Number]\";\nvar objectTag2 = \"[object Object]\";\nvar regexpTag = \"[object RegExp]\";\nvar setTag = \"[object Set]\";\nvar stringTag = \"[object String]\";\nvar weakMapTag = \"[object WeakMap]\";\nvar arrayBufferTag = \"[object ArrayBuffer]\";\nvar dataViewTag = \"[object DataView]\";\nvar float32Tag = \"[object Float32Array]\";\nvar float64Tag = \"[object Float64Array]\";\nvar int8Tag = \"[object Int8Array]\";\nvar int16Tag = \"[object Int16Array]\";\nvar int32Tag = \"[object Int32Array]\";\nvar uint8Tag = \"[object Uint8Array]\";\nvar uint8ClampedTag = \"[object Uint8ClampedArray]\";\nvar uint16Tag = \"[object Uint16Array]\";\nvar uint32Tag = \"[object Uint32Array]\";\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag2] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag2] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag2] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\nfunction baseIsTypedArray(value) {\n  return isObjectLike_default(value) && isLength_default(value.length) && !!typedArrayTags[baseGetTag_default(value)];\n}\nvar baseIsTypedArray_default = baseIsTypedArray;\n\n// node_modules/lodash-es/_baseUnary.js\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\nvar baseUnary_default = baseUnary;\n\n// node_modules/lodash-es/_nodeUtil.js\nvar freeExports2 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule2 = freeExports2 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports2 = freeModule2 && freeModule2.exports === freeExports2;\nvar freeProcess = moduleExports2 && freeGlobal_default.process;\nvar nodeUtil = function() {\n  try {\n    var types = freeModule2 && freeModule2.require && freeModule2.require(\"util\").types;\n    if (types) {\n      return types;\n    }\n    return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n  } catch (e) {\n  }\n}();\nvar nodeUtil_default = nodeUtil;\n\n// node_modules/lodash-es/isTypedArray.js\nvar nodeIsTypedArray = nodeUtil_default && nodeUtil_default.isTypedArray;\nvar isTypedArray = nodeIsTypedArray ? baseUnary_default(nodeIsTypedArray) : baseIsTypedArray_default;\nvar isTypedArray_default = isTypedArray;\n\n// node_modules/lodash-es/_arrayLikeKeys.js\nvar objectProto8 = Object.prototype;\nvar hasOwnProperty6 = objectProto8.hasOwnProperty;\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray_default(value), isArg = !isArr && isArguments_default(value), isBuff = !isArr && !isArg && isBuffer_default(value), isType = !isArr && !isArg && !isBuff && isTypedArray_default(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes_default(value.length, String) : [], length = result.length;\n  for (var key in value) {\n    if ((inherited || hasOwnProperty6.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n    (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n    isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n    isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n    isIndex_default(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar arrayLikeKeys_default = arrayLikeKeys;\n\n// node_modules/lodash-es/_nativeKeys.js\nvar nativeKeys = overArg_default(Object.keys, Object);\nvar nativeKeys_default = nativeKeys;\n\n// node_modules/lodash-es/_baseKeys.js\nvar objectProto9 = Object.prototype;\nvar hasOwnProperty7 = objectProto9.hasOwnProperty;\nfunction baseKeys(object) {\n  if (!isPrototype_default(object)) {\n    return nativeKeys_default(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty7.call(object, key) && key != \"constructor\") {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar baseKeys_default = baseKeys;\n\n// node_modules/lodash-es/keys.js\nfunction keys(object) {\n  return isArrayLike_default(object) ? arrayLikeKeys_default(object) : baseKeys_default(object);\n}\nvar keys_default = keys;\n\n// node_modules/lodash-es/_nativeKeysIn.js\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar nativeKeysIn_default = nativeKeysIn;\n\n// node_modules/lodash-es/_baseKeysIn.js\nvar objectProto10 = Object.prototype;\nvar hasOwnProperty8 = objectProto10.hasOwnProperty;\nfunction baseKeysIn(object) {\n  if (!isObject_default(object)) {\n    return nativeKeysIn_default(object);\n  }\n  var isProto = isPrototype_default(object), result = [];\n  for (var key in object) {\n    if (!(key == \"constructor\" && (isProto || !hasOwnProperty8.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\nvar baseKeysIn_default = baseKeysIn;\n\n// node_modules/lodash-es/keysIn.js\nfunction keysIn(object) {\n  return isArrayLike_default(object) ? arrayLikeKeys_default(object, true) : baseKeysIn_default(object);\n}\nvar keysIn_default = keysIn;\n\n// node_modules/lodash-es/assignIn.js\nvar assignIn = createAssigner_default(function(object, source) {\n  copyObject_default(source, keysIn_default(source), object);\n});\nvar assignIn_default = assignIn;\n\n// node_modules/lodash-es/_isKey.js\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\nvar reIsPlainProp = /^\\w*$/;\nfunction isKey(value, object) {\n  if (isArray_default(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == \"number\" || type == \"symbol\" || type == \"boolean\" || value == null || isSymbol_default(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n}\nvar isKey_default = isKey;\n\n// node_modules/lodash-es/_nativeCreate.js\nvar nativeCreate = getNative_default(Object, \"create\");\nvar nativeCreate_default = nativeCreate;\n\n// node_modules/lodash-es/_hashClear.js\nfunction hashClear() {\n  this.__data__ = nativeCreate_default ? nativeCreate_default(null) : {};\n  this.size = 0;\n}\nvar hashClear_default = hashClear;\n\n// node_modules/lodash-es/_hashDelete.js\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar hashDelete_default = hashDelete;\n\n// node_modules/lodash-es/_hashGet.js\nvar HASH_UNDEFINED = \"__lodash_hash_undefined__\";\nvar objectProto11 = Object.prototype;\nvar hasOwnProperty9 = objectProto11.hasOwnProperty;\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate_default) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? void 0 : result;\n  }\n  return hasOwnProperty9.call(data, key) ? data[key] : void 0;\n}\nvar hashGet_default = hashGet;\n\n// node_modules/lodash-es/_hashHas.js\nvar objectProto12 = Object.prototype;\nvar hasOwnProperty10 = objectProto12.hasOwnProperty;\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate_default ? data[key] !== void 0 : hasOwnProperty10.call(data, key);\n}\nvar hashHas_default = hashHas;\n\n// node_modules/lodash-es/_hashSet.js\nvar HASH_UNDEFINED2 = \"__lodash_hash_undefined__\";\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = nativeCreate_default && value === void 0 ? HASH_UNDEFINED2 : value;\n  return this;\n}\nvar hashSet_default = hashSet;\n\n// node_modules/lodash-es/_Hash.js\nfunction Hash(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nHash.prototype.clear = hashClear_default;\nHash.prototype[\"delete\"] = hashDelete_default;\nHash.prototype.get = hashGet_default;\nHash.prototype.has = hashHas_default;\nHash.prototype.set = hashSet_default;\nvar Hash_default = Hash;\n\n// node_modules/lodash-es/_listCacheClear.js\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\nvar listCacheClear_default = listCacheClear;\n\n// node_modules/lodash-es/_assocIndexOf.js\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq_default(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\nvar assocIndexOf_default = assocIndexOf;\n\n// node_modules/lodash-es/_listCacheDelete.js\nvar arrayProto = Array.prototype;\nvar splice = arrayProto.splice;\nfunction listCacheDelete(key) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\nvar listCacheDelete_default = listCacheDelete;\n\n// node_modules/lodash-es/_listCacheGet.js\nfunction listCacheGet(key) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\n  return index < 0 ? void 0 : data[index][1];\n}\nvar listCacheGet_default = listCacheGet;\n\n// node_modules/lodash-es/_listCacheHas.js\nfunction listCacheHas(key) {\n  return assocIndexOf_default(this.__data__, key) > -1;\n}\nvar listCacheHas_default = listCacheHas;\n\n// node_modules/lodash-es/_listCacheSet.js\nfunction listCacheSet(key, value) {\n  var data = this.__data__, index = assocIndexOf_default(data, key);\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\nvar listCacheSet_default = listCacheSet;\n\n// node_modules/lodash-es/_ListCache.js\nfunction ListCache(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nListCache.prototype.clear = listCacheClear_default;\nListCache.prototype[\"delete\"] = listCacheDelete_default;\nListCache.prototype.get = listCacheGet_default;\nListCache.prototype.has = listCacheHas_default;\nListCache.prototype.set = listCacheSet_default;\nvar ListCache_default = ListCache;\n\n// node_modules/lodash-es/_Map.js\nvar Map2 = getNative_default(root_default, \"Map\");\nvar Map_default = Map2;\n\n// node_modules/lodash-es/_mapCacheClear.js\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    \"hash\": new Hash_default(),\n    \"map\": new (Map_default || ListCache_default)(),\n    \"string\": new Hash_default()\n  };\n}\nvar mapCacheClear_default = mapCacheClear;\n\n// node_modules/lodash-es/_isKeyable.js\nfunction isKeyable(value) {\n  var type = typeof value;\n  return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n}\nvar isKeyable_default = isKeyable;\n\n// node_modules/lodash-es/_getMapData.js\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable_default(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n}\nvar getMapData_default = getMapData;\n\n// node_modules/lodash-es/_mapCacheDelete.js\nfunction mapCacheDelete(key) {\n  var result = getMapData_default(this, key)[\"delete\"](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\nvar mapCacheDelete_default = mapCacheDelete;\n\n// node_modules/lodash-es/_mapCacheGet.js\nfunction mapCacheGet(key) {\n  return getMapData_default(this, key).get(key);\n}\nvar mapCacheGet_default = mapCacheGet;\n\n// node_modules/lodash-es/_mapCacheHas.js\nfunction mapCacheHas(key) {\n  return getMapData_default(this, key).has(key);\n}\nvar mapCacheHas_default = mapCacheHas;\n\n// node_modules/lodash-es/_mapCacheSet.js\nfunction mapCacheSet(key, value) {\n  var data = getMapData_default(this, key), size = data.size;\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\nvar mapCacheSet_default = mapCacheSet;\n\n// node_modules/lodash-es/_MapCache.js\nfunction MapCache(entries) {\n  var index = -1, length = entries == null ? 0 : entries.length;\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\nMapCache.prototype.clear = mapCacheClear_default;\nMapCache.prototype[\"delete\"] = mapCacheDelete_default;\nMapCache.prototype.get = mapCacheGet_default;\nMapCache.prototype.has = mapCacheHas_default;\nMapCache.prototype.set = mapCacheSet_default;\nvar MapCache_default = MapCache;\n\n// node_modules/lodash-es/memoize.js\nvar FUNC_ERROR_TEXT = \"Expected a function\";\nfunction memoize(func, resolver) {\n  if (typeof func != \"function\" || resolver != null && typeof resolver != \"function\") {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache_default)();\n  return memoized;\n}\nmemoize.Cache = MapCache_default;\nvar memoize_default = memoize;\n\n// node_modules/lodash-es/_memoizeCapped.js\nvar MAX_MEMOIZE_SIZE = 500;\nfunction memoizeCapped(func) {\n  var result = memoize_default(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n  var cache = result.cache;\n  return result;\n}\nvar memoizeCapped_default = memoizeCapped;\n\n// node_modules/lodash-es/_stringToPath.js\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g;\nvar stringToPath = memoizeCapped_default(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46) {\n    result.push(\"\");\n  }\n  string.replace(rePropName, function(match, number, quote2, subString) {\n    result.push(quote2 ? subString.replace(reEscapeChar, \"$1\") : number || match);\n  });\n  return result;\n});\nvar stringToPath_default = stringToPath;\n\n// node_modules/lodash-es/toString.js\nfunction toString(value) {\n  return value == null ? \"\" : baseToString_default(value);\n}\nvar toString_default = toString;\n\n// node_modules/lodash-es/_castPath.js\nfunction castPath(value, object) {\n  if (isArray_default(value)) {\n    return value;\n  }\n  return isKey_default(value, object) ? [value] : stringToPath_default(toString_default(value));\n}\nvar castPath_default = castPath;\n\n// node_modules/lodash-es/_toKey.js\nvar INFINITY2 = 1 / 0;\nfunction toKey(value) {\n  if (typeof value == \"string\" || isSymbol_default(value)) {\n    return value;\n  }\n  var result = value + \"\";\n  return result == \"0\" && 1 / value == -INFINITY2 ? \"-0\" : result;\n}\nvar toKey_default = toKey;\n\n// node_modules/lodash-es/_baseGet.js\nfunction baseGet(object, path) {\n  path = castPath_default(path, object);\n  var index = 0, length = path.length;\n  while (object != null && index < length) {\n    object = object[toKey_default(path[index++])];\n  }\n  return index && index == length ? object : void 0;\n}\nvar baseGet_default = baseGet;\n\n// node_modules/lodash-es/get.js\nfunction get(object, path, defaultValue) {\n  var result = object == null ? void 0 : baseGet_default(object, path);\n  return result === void 0 ? defaultValue : result;\n}\nvar get_default = get;\n\n// node_modules/lodash-es/_arrayPush.js\nfunction arrayPush(array, values) {\n  var index = -1, length = values.length, offset = array.length;\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\nvar arrayPush_default = arrayPush;\n\n// node_modules/lodash-es/_baseSlice.js\nfunction baseSlice(array, start, end) {\n  var index = -1, length = array.length;\n  if (start < 0) {\n    start = -start > length ? 0 : length + start;\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : end - start >>> 0;\n  start >>>= 0;\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\nvar baseSlice_default = baseSlice;\n\n// node_modules/lodash-es/_castSlice.js\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === void 0 ? length : end;\n  return !start && end >= length ? array : baseSlice_default(array, start, end);\n}\nvar castSlice_default = castSlice;\n\n// node_modules/lodash-es/_hasUnicode.js\nvar rsAstralRange = \"\\\\ud800-\\\\udfff\";\nvar rsComboMarksRange = \"\\\\u0300-\\\\u036f\";\nvar reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\";\nvar rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\";\nvar rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\nvar rsVarRange = \"\\\\ufe0e\\\\ufe0f\";\nvar rsZWJ = \"\\\\u200d\";\nvar reHasUnicode = RegExp(\"[\" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + \"]\");\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\nvar hasUnicode_default = hasUnicode;\n\n// node_modules/lodash-es/_asciiToArray.js\nfunction asciiToArray(string) {\n  return string.split(\"\");\n}\nvar asciiToArray_default = asciiToArray;\n\n// node_modules/lodash-es/_unicodeToArray.js\nvar rsAstralRange2 = \"\\\\ud800-\\\\udfff\";\nvar rsComboMarksRange2 = \"\\\\u0300-\\\\u036f\";\nvar reComboHalfMarksRange2 = \"\\\\ufe20-\\\\ufe2f\";\nvar rsComboSymbolsRange2 = \"\\\\u20d0-\\\\u20ff\";\nvar rsComboRange2 = rsComboMarksRange2 + reComboHalfMarksRange2 + rsComboSymbolsRange2;\nvar rsVarRange2 = \"\\\\ufe0e\\\\ufe0f\";\nvar rsAstral = \"[\" + rsAstralRange2 + \"]\";\nvar rsCombo = \"[\" + rsComboRange2 + \"]\";\nvar rsFitz = \"\\\\ud83c[\\\\udffb-\\\\udfff]\";\nvar rsModifier = \"(?:\" + rsCombo + \"|\" + rsFitz + \")\";\nvar rsNonAstral = \"[^\" + rsAstralRange2 + \"]\";\nvar rsRegional = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\";\nvar rsSurrPair = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\";\nvar rsZWJ2 = \"\\\\u200d\";\nvar reOptMod = rsModifier + \"?\";\nvar rsOptVar = \"[\" + rsVarRange2 + \"]?\";\nvar rsOptJoin = \"(?:\" + rsZWJ2 + \"(?:\" + [rsNonAstral, rsRegional, rsSurrPair].join(\"|\") + \")\" + rsOptVar + reOptMod + \")*\";\nvar rsSeq = rsOptVar + reOptMod + rsOptJoin;\nvar rsSymbol = \"(?:\" + [rsNonAstral + rsCombo + \"?\", rsCombo, rsRegional, rsSurrPair, rsAstral].join(\"|\") + \")\";\nvar reUnicode = RegExp(rsFitz + \"(?=\" + rsFitz + \")|\" + rsSymbol + rsSeq, \"g\");\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\nvar unicodeToArray_default = unicodeToArray;\n\n// node_modules/lodash-es/_stringToArray.js\nfunction stringToArray(string) {\n  return hasUnicode_default(string) ? unicodeToArray_default(string) : asciiToArray_default(string);\n}\nvar stringToArray_default = stringToArray;\n\n// node_modules/lodash-es/_createCaseFirst.js\nfunction createCaseFirst(methodName) {\n  return function(string) {\n    string = toString_default(string);\n    var strSymbols = hasUnicode_default(string) ? stringToArray_default(string) : void 0;\n    var chr = strSymbols ? strSymbols[0] : string.charAt(0);\n    var trailing = strSymbols ? castSlice_default(strSymbols, 1).join(\"\") : string.slice(1);\n    return chr[methodName]() + trailing;\n  };\n}\nvar createCaseFirst_default = createCaseFirst;\n\n// node_modules/lodash-es/upperFirst.js\nvar upperFirst = createCaseFirst_default(\"toUpperCase\");\nvar upperFirst_default = upperFirst;\n\n// node_modules/lodash-es/_stackClear.js\nfunction stackClear() {\n  this.__data__ = new ListCache_default();\n  this.size = 0;\n}\nvar stackClear_default = stackClear;\n\n// node_modules/lodash-es/_stackDelete.js\nfunction stackDelete(key) {\n  var data = this.__data__, result = data[\"delete\"](key);\n  this.size = data.size;\n  return result;\n}\nvar stackDelete_default = stackDelete;\n\n// node_modules/lodash-es/_stackGet.js\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\nvar stackGet_default = stackGet;\n\n// node_modules/lodash-es/_stackHas.js\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\nvar stackHas_default = stackHas;\n\n// node_modules/lodash-es/_stackSet.js\nvar LARGE_ARRAY_SIZE = 200;\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache_default) {\n    var pairs = data.__data__;\n    if (!Map_default || pairs.length < LARGE_ARRAY_SIZE - 1) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache_default(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\nvar stackSet_default = stackSet;\n\n// node_modules/lodash-es/_Stack.js\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache_default(entries);\n  this.size = data.size;\n}\nStack.prototype.clear = stackClear_default;\nStack.prototype[\"delete\"] = stackDelete_default;\nStack.prototype.get = stackGet_default;\nStack.prototype.has = stackHas_default;\nStack.prototype.set = stackSet_default;\nvar Stack_default = Stack;\n\n// node_modules/lodash-es/_baseAssign.js\nfunction baseAssign(object, source) {\n  return object && copyObject_default(source, keys_default(source), object);\n}\nvar baseAssign_default = baseAssign;\n\n// node_modules/lodash-es/_baseAssignIn.js\nfunction baseAssignIn(object, source) {\n  return object && copyObject_default(source, keysIn_default(source), object);\n}\nvar baseAssignIn_default = baseAssignIn;\n\n// node_modules/lodash-es/_cloneBuffer.js\nvar freeExports3 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\nvar freeModule3 = freeExports3 && typeof module == \"object\" && module && !module.nodeType && module;\nvar moduleExports3 = freeModule3 && freeModule3.exports === freeExports3;\nvar Buffer2 = moduleExports3 ? root_default.Buffer : void 0;\nvar allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n  buffer.copy(result);\n  return result;\n}\nvar cloneBuffer_default = cloneBuffer;\n\n// node_modules/lodash-es/_arrayFilter.js\nfunction arrayFilter(array, predicate) {\n  var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\nvar arrayFilter_default = arrayFilter;\n\n// node_modules/lodash-es/stubArray.js\nfunction stubArray() {\n  return [];\n}\nvar stubArray_default = stubArray;\n\n// node_modules/lodash-es/_getSymbols.js\nvar objectProto13 = Object.prototype;\nvar propertyIsEnumerable2 = objectProto13.propertyIsEnumerable;\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\nvar getSymbols = !nativeGetSymbols ? stubArray_default : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter_default(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable2.call(object, symbol);\n  });\n};\nvar getSymbols_default = getSymbols;\n\n// node_modules/lodash-es/_copySymbols.js\nfunction copySymbols(source, object) {\n  return copyObject_default(source, getSymbols_default(source), object);\n}\nvar copySymbols_default = copySymbols;\n\n// node_modules/lodash-es/_getSymbolsIn.js\nvar nativeGetSymbols2 = Object.getOwnPropertySymbols;\nvar getSymbolsIn = !nativeGetSymbols2 ? stubArray_default : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush_default(result, getSymbols_default(object));\n    object = getPrototype_default(object);\n  }\n  return result;\n};\nvar getSymbolsIn_default = getSymbolsIn;\n\n// node_modules/lodash-es/_copySymbolsIn.js\nfunction copySymbolsIn(source, object) {\n  return copyObject_default(source, getSymbolsIn_default(source), object);\n}\nvar copySymbolsIn_default = copySymbolsIn;\n\n// node_modules/lodash-es/_baseGetAllKeys.js\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray_default(object) ? result : arrayPush_default(result, symbolsFunc(object));\n}\nvar baseGetAllKeys_default = baseGetAllKeys;\n\n// node_modules/lodash-es/_getAllKeys.js\nfunction getAllKeys(object) {\n  return baseGetAllKeys_default(object, keys_default, getSymbols_default);\n}\nvar getAllKeys_default = getAllKeys;\n\n// node_modules/lodash-es/_getAllKeysIn.js\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys_default(object, keysIn_default, getSymbolsIn_default);\n}\nvar getAllKeysIn_default = getAllKeysIn;\n\n// node_modules/lodash-es/_DataView.js\nvar DataView = getNative_default(root_default, \"DataView\");\nvar DataView_default = DataView;\n\n// node_modules/lodash-es/_Promise.js\nvar Promise2 = getNative_default(root_default, \"Promise\");\nvar Promise_default = Promise2;\n\n// node_modules/lodash-es/_Set.js\nvar Set2 = getNative_default(root_default, \"Set\");\nvar Set_default = Set2;\n\n// node_modules/lodash-es/_getTag.js\nvar mapTag2 = \"[object Map]\";\nvar objectTag3 = \"[object Object]\";\nvar promiseTag = \"[object Promise]\";\nvar setTag2 = \"[object Set]\";\nvar weakMapTag2 = \"[object WeakMap]\";\nvar dataViewTag2 = \"[object DataView]\";\nvar dataViewCtorString = toSource_default(DataView_default);\nvar mapCtorString = toSource_default(Map_default);\nvar promiseCtorString = toSource_default(Promise_default);\nvar setCtorString = toSource_default(Set_default);\nvar weakMapCtorString = toSource_default(WeakMap_default);\nvar getTag = baseGetTag_default;\nif (DataView_default && getTag(new DataView_default(new ArrayBuffer(1))) != dataViewTag2 || Map_default && getTag(new Map_default()) != mapTag2 || Promise_default && getTag(Promise_default.resolve()) != promiseTag || Set_default && getTag(new Set_default()) != setTag2 || WeakMap_default && getTag(new WeakMap_default()) != weakMapTag2) {\n  getTag = function(value) {\n    var result = baseGetTag_default(value), Ctor = result == objectTag3 ? value.constructor : void 0, ctorString = Ctor ? toSource_default(Ctor) : \"\";\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString:\n          return dataViewTag2;\n        case mapCtorString:\n          return mapTag2;\n        case promiseCtorString:\n          return promiseTag;\n        case setCtorString:\n          return setTag2;\n        case weakMapCtorString:\n          return weakMapTag2;\n      }\n    }\n    return result;\n  };\n}\nvar getTag_default = getTag;\n\n// node_modules/lodash-es/_initCloneArray.js\nvar objectProto14 = Object.prototype;\nvar hasOwnProperty11 = objectProto14.hasOwnProperty;\nfunction initCloneArray(array) {\n  var length = array.length, result = new array.constructor(length);\n  if (length && typeof array[0] == \"string\" && hasOwnProperty11.call(array, \"index\")) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\nvar initCloneArray_default = initCloneArray;\n\n// node_modules/lodash-es/_Uint8Array.js\nvar Uint8Array = root_default.Uint8Array;\nvar Uint8Array_default = Uint8Array;\n\n// node_modules/lodash-es/_cloneArrayBuffer.js\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array_default(result).set(new Uint8Array_default(arrayBuffer));\n  return result;\n}\nvar cloneArrayBuffer_default = cloneArrayBuffer;\n\n// node_modules/lodash-es/_cloneDataView.js\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer_default(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\nvar cloneDataView_default = cloneDataView;\n\n// node_modules/lodash-es/_cloneRegExp.js\nvar reFlags = /\\w*$/;\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\nvar cloneRegExp_default = cloneRegExp;\n\n// node_modules/lodash-es/_cloneSymbol.js\nvar symbolProto2 = Symbol_default ? Symbol_default.prototype : void 0;\nvar symbolValueOf = symbolProto2 ? symbolProto2.valueOf : void 0;\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\nvar cloneSymbol_default = cloneSymbol;\n\n// node_modules/lodash-es/_cloneTypedArray.js\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer_default(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\nvar cloneTypedArray_default = cloneTypedArray;\n\n// node_modules/lodash-es/_initCloneByTag.js\nvar boolTag2 = \"[object Boolean]\";\nvar dateTag2 = \"[object Date]\";\nvar mapTag3 = \"[object Map]\";\nvar numberTag2 = \"[object Number]\";\nvar regexpTag2 = \"[object RegExp]\";\nvar setTag3 = \"[object Set]\";\nvar stringTag2 = \"[object String]\";\nvar symbolTag2 = \"[object Symbol]\";\nvar arrayBufferTag2 = \"[object ArrayBuffer]\";\nvar dataViewTag3 = \"[object DataView]\";\nvar float32Tag2 = \"[object Float32Array]\";\nvar float64Tag2 = \"[object Float64Array]\";\nvar int8Tag2 = \"[object Int8Array]\";\nvar int16Tag2 = \"[object Int16Array]\";\nvar int32Tag2 = \"[object Int32Array]\";\nvar uint8Tag2 = \"[object Uint8Array]\";\nvar uint8ClampedTag2 = \"[object Uint8ClampedArray]\";\nvar uint16Tag2 = \"[object Uint16Array]\";\nvar uint32Tag2 = \"[object Uint32Array]\";\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag2:\n      return cloneArrayBuffer_default(object);\n    case boolTag2:\n    case dateTag2:\n      return new Ctor(+object);\n    case dataViewTag3:\n      return cloneDataView_default(object, isDeep);\n    case float32Tag2:\n    case float64Tag2:\n    case int8Tag2:\n    case int16Tag2:\n    case int32Tag2:\n    case uint8Tag2:\n    case uint8ClampedTag2:\n    case uint16Tag2:\n    case uint32Tag2:\n      return cloneTypedArray_default(object, isDeep);\n    case mapTag3:\n      return new Ctor();\n    case numberTag2:\n    case stringTag2:\n      return new Ctor(object);\n    case regexpTag2:\n      return cloneRegExp_default(object);\n    case setTag3:\n      return new Ctor();\n    case symbolTag2:\n      return cloneSymbol_default(object);\n  }\n}\nvar initCloneByTag_default = initCloneByTag;\n\n// node_modules/lodash-es/_initCloneObject.js\nfunction initCloneObject(object) {\n  return typeof object.constructor == \"function\" && !isPrototype_default(object) ? baseCreate_default(getPrototype_default(object)) : {};\n}\nvar initCloneObject_default = initCloneObject;\n\n// node_modules/lodash-es/_baseIsMap.js\nvar mapTag4 = \"[object Map]\";\nfunction baseIsMap(value) {\n  return isObjectLike_default(value) && getTag_default(value) == mapTag4;\n}\nvar baseIsMap_default = baseIsMap;\n\n// node_modules/lodash-es/isMap.js\nvar nodeIsMap = nodeUtil_default && nodeUtil_default.isMap;\nvar isMap = nodeIsMap ? baseUnary_default(nodeIsMap) : baseIsMap_default;\nvar isMap_default = isMap;\n\n// node_modules/lodash-es/_baseIsSet.js\nvar setTag4 = \"[object Set]\";\nfunction baseIsSet(value) {\n  return isObjectLike_default(value) && getTag_default(value) == setTag4;\n}\nvar baseIsSet_default = baseIsSet;\n\n// node_modules/lodash-es/isSet.js\nvar nodeIsSet = nodeUtil_default && nodeUtil_default.isSet;\nvar isSet = nodeIsSet ? baseUnary_default(nodeIsSet) : baseIsSet_default;\nvar isSet_default = isSet;\n\n// node_modules/lodash-es/_baseClone.js\nvar CLONE_DEEP_FLAG = 1;\nvar CLONE_FLAT_FLAG = 2;\nvar CLONE_SYMBOLS_FLAG = 4;\nvar argsTag3 = \"[object Arguments]\";\nvar arrayTag2 = \"[object Array]\";\nvar boolTag3 = \"[object Boolean]\";\nvar dateTag3 = \"[object Date]\";\nvar errorTag2 = \"[object Error]\";\nvar funcTag3 = \"[object Function]\";\nvar genTag2 = \"[object GeneratorFunction]\";\nvar mapTag5 = \"[object Map]\";\nvar numberTag3 = \"[object Number]\";\nvar objectTag4 = \"[object Object]\";\nvar regexpTag3 = \"[object RegExp]\";\nvar setTag5 = \"[object Set]\";\nvar stringTag3 = \"[object String]\";\nvar symbolTag3 = \"[object Symbol]\";\nvar weakMapTag3 = \"[object WeakMap]\";\nvar arrayBufferTag3 = \"[object ArrayBuffer]\";\nvar dataViewTag4 = \"[object DataView]\";\nvar float32Tag3 = \"[object Float32Array]\";\nvar float64Tag3 = \"[object Float64Array]\";\nvar int8Tag3 = \"[object Int8Array]\";\nvar int16Tag3 = \"[object Int16Array]\";\nvar int32Tag3 = \"[object Int32Array]\";\nvar uint8Tag3 = \"[object Uint8Array]\";\nvar uint8ClampedTag3 = \"[object Uint8ClampedArray]\";\nvar uint16Tag3 = \"[object Uint16Array]\";\nvar uint32Tag3 = \"[object Uint32Array]\";\nvar cloneableTags = {};\ncloneableTags[argsTag3] = cloneableTags[arrayTag2] = cloneableTags[arrayBufferTag3] = cloneableTags[dataViewTag4] = cloneableTags[boolTag3] = cloneableTags[dateTag3] = cloneableTags[float32Tag3] = cloneableTags[float64Tag3] = cloneableTags[int8Tag3] = cloneableTags[int16Tag3] = cloneableTags[int32Tag3] = cloneableTags[mapTag5] = cloneableTags[numberTag3] = cloneableTags[objectTag4] = cloneableTags[regexpTag3] = cloneableTags[setTag5] = cloneableTags[stringTag3] = cloneableTags[symbolTag3] = cloneableTags[uint8Tag3] = cloneableTags[uint8ClampedTag3] = cloneableTags[uint16Tag3] = cloneableTags[uint32Tag3] = true;\ncloneableTags[errorTag2] = cloneableTags[funcTag3] = cloneableTags[weakMapTag3] = false;\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== void 0) {\n    return result;\n  }\n  if (!isObject_default(value)) {\n    return value;\n  }\n  var isArr = isArray_default(value);\n  if (isArr) {\n    result = initCloneArray_default(value);\n    if (!isDeep) {\n      return copyArray_default(value, result);\n    }\n  } else {\n    var tag = getTag_default(value), isFunc = tag == funcTag3 || tag == genTag2;\n    if (isBuffer_default(value)) {\n      return cloneBuffer_default(value, isDeep);\n    }\n    if (tag == objectTag4 || tag == argsTag3 || isFunc && !object) {\n      result = isFlat || isFunc ? {} : initCloneObject_default(value);\n      if (!isDeep) {\n        return isFlat ? copySymbolsIn_default(value, baseAssignIn_default(result, value)) : copySymbols_default(value, baseAssign_default(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag_default(value, tag, isDeep);\n    }\n  }\n  stack || (stack = new Stack_default());\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n  if (isSet_default(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap_default(value)) {\n    value.forEach(function(subValue, key2) {\n      result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n    });\n  }\n  var keysFunc = isFull ? isFlat ? getAllKeysIn_default : getAllKeys_default : isFlat ? keysIn_default : keys_default;\n  var props = isArr ? void 0 : keysFunc(value);\n  arrayEach_default(props || value, function(subValue, key2) {\n    if (props) {\n      key2 = subValue;\n      subValue = value[key2];\n    }\n    assignValue_default(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n  });\n  return result;\n}\nvar baseClone_default = baseClone;\n\n// node_modules/lodash-es/clone.js\nvar CLONE_SYMBOLS_FLAG2 = 4;\nfunction clone(value) {\n  return baseClone_default(value, CLONE_SYMBOLS_FLAG2);\n}\nvar clone_default = clone;\n\n// node_modules/lodash-es/cloneDeep.js\nvar CLONE_DEEP_FLAG2 = 1;\nvar CLONE_SYMBOLS_FLAG3 = 4;\nfunction cloneDeep(value) {\n  return baseClone_default(value, CLONE_DEEP_FLAG2 | CLONE_SYMBOLS_FLAG3);\n}\nvar cloneDeep_default = cloneDeep;\n\n// node_modules/lodash-es/cloneDeepWith.js\nvar CLONE_DEEP_FLAG3 = 1;\nvar CLONE_SYMBOLS_FLAG4 = 4;\nfunction cloneDeepWith(value, customizer) {\n  customizer = typeof customizer == \"function\" ? customizer : void 0;\n  return baseClone_default(value, CLONE_DEEP_FLAG3 | CLONE_SYMBOLS_FLAG4, customizer);\n}\nvar cloneDeepWith_default = cloneDeepWith;\n\n// node_modules/lodash-es/_setCacheAdd.js\nvar HASH_UNDEFINED3 = \"__lodash_hash_undefined__\";\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED3);\n  return this;\n}\nvar setCacheAdd_default = setCacheAdd;\n\n// node_modules/lodash-es/_setCacheHas.js\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\nvar setCacheHas_default = setCacheHas;\n\n// node_modules/lodash-es/_SetCache.js\nfunction SetCache(values) {\n  var index = -1, length = values == null ? 0 : values.length;\n  this.__data__ = new MapCache_default();\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd_default;\nSetCache.prototype.has = setCacheHas_default;\nvar SetCache_default = SetCache;\n\n// node_modules/lodash-es/_arraySome.js\nfunction arraySome(array, predicate) {\n  var index = -1, length = array == null ? 0 : array.length;\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar arraySome_default = arraySome;\n\n// node_modules/lodash-es/_cacheHas.js\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\nvar cacheHas_default = cacheHas;\n\n// node_modules/lodash-es/_equalArrays.js\nvar COMPARE_PARTIAL_FLAG = 1;\nvar COMPARE_UNORDERED_FLAG = 2;\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache_default() : void 0;\n  stack.set(array, other);\n  stack.set(other, array);\n  while (++index < arrLength) {\n    var arrValue = array[index], othValue = other[index];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== void 0) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    if (seen) {\n      if (!arraySome_default(other, function(othValue2, othIndex) {\n        if (!cacheHas_default(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n          return seen.push(othIndex);\n        }\n      })) {\n        result = false;\n        break;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n      result = false;\n      break;\n    }\n  }\n  stack[\"delete\"](array);\n  stack[\"delete\"](other);\n  return result;\n}\nvar equalArrays_default = equalArrays;\n\n// node_modules/lodash-es/_mapToArray.js\nfunction mapToArray(map) {\n  var index = -1, result = Array(map.size);\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\nvar mapToArray_default = mapToArray;\n\n// node_modules/lodash-es/_setToArray.js\nfunction setToArray(set2) {\n  var index = -1, result = Array(set2.size);\n  set2.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\nvar setToArray_default = setToArray;\n\n// node_modules/lodash-es/_equalByTag.js\nvar COMPARE_PARTIAL_FLAG2 = 1;\nvar COMPARE_UNORDERED_FLAG2 = 2;\nvar boolTag4 = \"[object Boolean]\";\nvar dateTag4 = \"[object Date]\";\nvar errorTag3 = \"[object Error]\";\nvar mapTag6 = \"[object Map]\";\nvar numberTag4 = \"[object Number]\";\nvar regexpTag4 = \"[object RegExp]\";\nvar setTag6 = \"[object Set]\";\nvar stringTag4 = \"[object String]\";\nvar symbolTag4 = \"[object Symbol]\";\nvar arrayBufferTag4 = \"[object ArrayBuffer]\";\nvar dataViewTag5 = \"[object DataView]\";\nvar symbolProto3 = Symbol_default ? Symbol_default.prototype : void 0;\nvar symbolValueOf2 = symbolProto3 ? symbolProto3.valueOf : void 0;\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag5:\n      if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n    case arrayBufferTag4:\n      if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array_default(object), new Uint8Array_default(other))) {\n        return false;\n      }\n      return true;\n    case boolTag4:\n    case dateTag4:\n    case numberTag4:\n      return eq_default(+object, +other);\n    case errorTag3:\n      return object.name == other.name && object.message == other.message;\n    case regexpTag4:\n    case stringTag4:\n      return object == other + \"\";\n    case mapTag6:\n      var convert = mapToArray_default;\n    case setTag6:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG2;\n      convert || (convert = setToArray_default);\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG2;\n      stack.set(object, other);\n      var result = equalArrays_default(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack[\"delete\"](object);\n      return result;\n    case symbolTag4:\n      if (symbolValueOf2) {\n        return symbolValueOf2.call(object) == symbolValueOf2.call(other);\n      }\n  }\n  return false;\n}\nvar equalByTag_default = equalByTag;\n\n// node_modules/lodash-es/_equalObjects.js\nvar COMPARE_PARTIAL_FLAG3 = 1;\nvar objectProto15 = Object.prototype;\nvar hasOwnProperty12 = objectProto15.hasOwnProperty;\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG3, objProps = getAllKeys_default(object), objLength = objProps.length, othProps = getAllKeys_default(other), othLength = othProps.length;\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty12.call(other, key))) {\n      return false;\n    }\n  }\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key], othValue = other[key];\n    if (customizer) {\n      var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n    }\n    if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == \"constructor\");\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor, othCtor = other.constructor;\n    if (objCtor != othCtor && (\"constructor\" in object && \"constructor\" in other) && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack[\"delete\"](object);\n  stack[\"delete\"](other);\n  return result;\n}\nvar equalObjects_default = equalObjects;\n\n// node_modules/lodash-es/_baseIsEqualDeep.js\nvar COMPARE_PARTIAL_FLAG4 = 1;\nvar argsTag4 = \"[object Arguments]\";\nvar arrayTag3 = \"[object Array]\";\nvar objectTag5 = \"[object Object]\";\nvar objectProto16 = Object.prototype;\nvar hasOwnProperty13 = objectProto16.hasOwnProperty;\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray_default(object), othIsArr = isArray_default(other), objTag = objIsArr ? arrayTag3 : getTag_default(object), othTag = othIsArr ? arrayTag3 : getTag_default(other);\n  objTag = objTag == argsTag4 ? objectTag5 : objTag;\n  othTag = othTag == argsTag4 ? objectTag5 : othTag;\n  var objIsObj = objTag == objectTag5, othIsObj = othTag == objectTag5, isSameTag = objTag == othTag;\n  if (isSameTag && isBuffer_default(object)) {\n    if (!isBuffer_default(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack_default());\n    return objIsArr || isTypedArray_default(object) ? equalArrays_default(object, other, bitmask, customizer, equalFunc, stack) : equalByTag_default(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG4)) {\n    var objIsWrapped = objIsObj && hasOwnProperty13.call(object, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty13.call(other, \"__wrapped__\");\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n      stack || (stack = new Stack_default());\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack_default());\n  return equalObjects_default(object, other, bitmask, customizer, equalFunc, stack);\n}\nvar baseIsEqualDeep_default = baseIsEqualDeep;\n\n// node_modules/lodash-es/_baseIsEqual.js\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || !isObjectLike_default(value) && !isObjectLike_default(other)) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep_default(value, other, bitmask, customizer, baseIsEqual, stack);\n}\nvar baseIsEqual_default = baseIsEqual;\n\n// node_modules/lodash-es/_createBaseFor.js\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\nvar createBaseFor_default = createBaseFor;\n\n// node_modules/lodash-es/_baseFor.js\nvar baseFor = createBaseFor_default();\nvar baseFor_default = baseFor;\n\n// node_modules/lodash-es/now.js\nvar now = function() {\n  return root_default.Date.now();\n};\nvar now_default = now;\n\n// node_modules/lodash-es/debounce.js\nvar FUNC_ERROR_TEXT2 = \"Expected a function\";\nvar nativeMax2 = Math.max;\nvar nativeMin = Math.min;\nfunction debounce(func, wait2, options) {\n  var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;\n  if (typeof func != \"function\") {\n    throw new TypeError(FUNC_ERROR_TEXT2);\n  }\n  wait2 = toNumber_default(wait2) || 0;\n  if (isObject_default(options)) {\n    leading = !!options.leading;\n    maxing = \"maxWait\" in options;\n    maxWait = maxing ? nativeMax2(toNumber_default(options.maxWait) || 0, wait2) : maxWait;\n    trailing = \"trailing\" in options ? !!options.trailing : trailing;\n  }\n  function invokeFunc(time) {\n    var args = lastArgs, thisArg = lastThis;\n    lastArgs = lastThis = void 0;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n  function leadingEdge(time) {\n    lastInvokeTime = time;\n    timerId = setTimeout(timerExpired, wait2);\n    return leading ? invokeFunc(time) : result;\n  }\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait2 - timeSinceLastCall;\n    return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n  }\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;\n    return lastCallTime === void 0 || timeSinceLastCall >= wait2 || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n  }\n  function timerExpired() {\n    var time = now_default();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n  function trailingEdge(time) {\n    timerId = void 0;\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = void 0;\n    return result;\n  }\n  function cancel2() {\n    if (timerId !== void 0) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = void 0;\n  }\n  function flush() {\n    return timerId === void 0 ? result : trailingEdge(now_default());\n  }\n  function debounced() {\n    var time = now_default(), isInvoking = shouldInvoke(time);\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n    if (isInvoking) {\n      if (timerId === void 0) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        clearTimeout(timerId);\n        timerId = setTimeout(timerExpired, wait2);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === void 0) {\n      timerId = setTimeout(timerExpired, wait2);\n    }\n    return result;\n  }\n  debounced.cancel = cancel2;\n  debounced.flush = flush;\n  return debounced;\n}\nvar debounce_default = debounce;\n\n// node_modules/lodash-es/_assignMergeValue.js\nfunction assignMergeValue(object, key, value) {\n  if (value !== void 0 && !eq_default(object[key], value) || value === void 0 && !(key in object)) {\n    baseAssignValue_default(object, key, value);\n  }\n}\nvar assignMergeValue_default = assignMergeValue;\n\n// node_modules/lodash-es/isArrayLikeObject.js\nfunction isArrayLikeObject(value) {\n  return isObjectLike_default(value) && isArrayLike_default(value);\n}\nvar isArrayLikeObject_default = isArrayLikeObject;\n\n// node_modules/lodash-es/_safeGet.js\nfunction safeGet(object, key) {\n  if (key === \"constructor\" && typeof object[key] === \"function\") {\n    return;\n  }\n  if (key == \"__proto__\") {\n    return;\n  }\n  return object[key];\n}\nvar safeGet_default = safeGet;\n\n// node_modules/lodash-es/toPlainObject.js\nfunction toPlainObject(value) {\n  return copyObject_default(value, keysIn_default(value));\n}\nvar toPlainObject_default = toPlainObject;\n\n// node_modules/lodash-es/_baseMergeDeep.js\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet_default(object, key), srcValue = safeGet_default(source, key), stacked = stack.get(srcValue);\n  if (stacked) {\n    assignMergeValue_default(object, key, stacked);\n    return;\n  }\n  var newValue = customizer ? customizer(objValue, srcValue, key + \"\", object, source, stack) : void 0;\n  var isCommon = newValue === void 0;\n  if (isCommon) {\n    var isArr = isArray_default(srcValue), isBuff = !isArr && isBuffer_default(srcValue), isTyped = !isArr && !isBuff && isTypedArray_default(srcValue);\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray_default(objValue)) {\n        newValue = objValue;\n      } else if (isArrayLikeObject_default(objValue)) {\n        newValue = copyArray_default(objValue);\n      } else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer_default(srcValue, true);\n      } else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray_default(srcValue, true);\n      } else {\n        newValue = [];\n      }\n    } else if (isPlainObject_default(srcValue) || isArguments_default(srcValue)) {\n      newValue = objValue;\n      if (isArguments_default(objValue)) {\n        newValue = toPlainObject_default(objValue);\n      } else if (!isObject_default(objValue) || isFunction_default(objValue)) {\n        newValue = initCloneObject_default(srcValue);\n      }\n    } else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack[\"delete\"](srcValue);\n  }\n  assignMergeValue_default(object, key, newValue);\n}\nvar baseMergeDeep_default = baseMergeDeep;\n\n// node_modules/lodash-es/_baseMerge.js\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor_default(source, function(srcValue, key) {\n    stack || (stack = new Stack_default());\n    if (isObject_default(srcValue)) {\n      baseMergeDeep_default(object, source, key, srcIndex, baseMerge, customizer, stack);\n    } else {\n      var newValue = customizer ? customizer(safeGet_default(object, key), srcValue, key + \"\", object, source, stack) : void 0;\n      if (newValue === void 0) {\n        newValue = srcValue;\n      }\n      assignMergeValue_default(object, key, newValue);\n    }\n  }, keysIn_default);\n}\nvar baseMerge_default = baseMerge;\n\n// node_modules/lodash-es/last.js\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : void 0;\n}\nvar last_default = last;\n\n// node_modules/lodash-es/escapeRegExp.js\nvar reRegExpChar2 = /[\\\\^$.*+?()[\\]{}|]/g;\nvar reHasRegExpChar = RegExp(reRegExpChar2.source);\nfunction escapeRegExp(string) {\n  string = toString_default(string);\n  return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar2, \"\\\\$&\") : string;\n}\nvar escapeRegExp_default = escapeRegExp;\n\n// node_modules/lodash-es/isString.js\nvar stringTag5 = \"[object String]\";\nfunction isString(value) {\n  return typeof value == \"string\" || !isArray_default(value) && isObjectLike_default(value) && baseGetTag_default(value) == stringTag5;\n}\nvar isString_default = isString;\n\n// node_modules/lodash-es/_parent.js\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet_default(object, baseSlice_default(path, 0, -1));\n}\nvar parent_default = parent;\n\n// node_modules/lodash-es/isEqual.js\nfunction isEqual(value, other) {\n  return baseIsEqual_default(value, other);\n}\nvar isEqual_default = isEqual;\n\n// node_modules/lodash-es/isEqualWith.js\nfunction isEqualWith(value, other, customizer) {\n  customizer = typeof customizer == \"function\" ? customizer : void 0;\n  var result = customizer ? customizer(value, other) : void 0;\n  return result === void 0 ? baseIsEqual_default(value, other, void 0, customizer) : !!result;\n}\nvar isEqualWith_default = isEqualWith;\n\n// node_modules/lodash-es/merge.js\nvar merge = createAssigner_default(function(object, source, srcIndex) {\n  baseMerge_default(object, source, srcIndex);\n});\nvar merge_default = merge;\n\n// node_modules/lodash-es/_baseUnset.js\nfunction baseUnset(object, path) {\n  path = castPath_default(path, object);\n  object = parent_default(object, path);\n  return object == null || delete object[toKey_default(last_default(path))];\n}\nvar baseUnset_default = baseUnset;\n\n// node_modules/lodash-es/_baseSet.js\nfunction baseSet(object, path, value, customizer) {\n  if (!isObject_default(object)) {\n    return object;\n  }\n  path = castPath_default(path, object);\n  var index = -1, length = path.length, lastIndex = length - 1, nested = object;\n  while (nested != null && ++index < length) {\n    var key = toKey_default(path[index]), newValue = value;\n    if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n      return object;\n    }\n    if (index != lastIndex) {\n      var objValue = nested[key];\n      newValue = customizer ? customizer(objValue, key, nested) : void 0;\n      if (newValue === void 0) {\n        newValue = isObject_default(objValue) ? objValue : isIndex_default(path[index + 1]) ? [] : {};\n      }\n    }\n    assignValue_default(nested, key, newValue);\n    nested = nested[key];\n  }\n  return object;\n}\nvar baseSet_default = baseSet;\n\n// node_modules/lodash-es/set.js\nfunction set(object, path, value) {\n  return object == null ? object : baseSet_default(object, path, value);\n}\nvar set_default = set;\n\n// node_modules/lodash-es/throttle.js\nvar FUNC_ERROR_TEXT3 = \"Expected a function\";\nfunction throttle(func, wait2, options) {\n  var leading = true, trailing = true;\n  if (typeof func != \"function\") {\n    throw new TypeError(FUNC_ERROR_TEXT3);\n  }\n  if (isObject_default(options)) {\n    leading = \"leading\" in options ? !!options.leading : leading;\n    trailing = \"trailing\" in options ? !!options.trailing : trailing;\n  }\n  return debounce_default(func, wait2, {\n    \"leading\": leading,\n    \"maxWait\": wait2,\n    \"trailing\": trailing\n  });\n}\nvar throttle_default = throttle;\n\n// node_modules/lodash-es/unset.js\nfunction unset(object, path) {\n  return object == null ? true : baseUnset_default(object, path);\n}\nvar unset_default = unset;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/getdatafromelement.js\nfunction getDataFromElement(el) {\n  if (el instanceof HTMLTextAreaElement) {\n    return el.value;\n  }\n  return el.innerHTML;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/env.js\nfunction getUserAgent() {\n  try {\n    return navigator.userAgent.toLowerCase();\n  } catch (e) {\n    return \"\";\n  }\n}\nvar userAgent = getUserAgent();\nvar env = {\n  isMac: isMac(userAgent),\n  isWindows: isWindows(userAgent),\n  isGecko: isGecko(userAgent),\n  isSafari: isSafari(userAgent),\n  isiOS: isiOS(userAgent),\n  isAndroid: isAndroid(userAgent),\n  isBlink: isBlink(userAgent),\n  features: {\n    isRegExpUnicodePropertySupported: isRegExpUnicodePropertySupported()\n  }\n};\nvar env_default = env;\nfunction isMac(userAgent2) {\n  return userAgent2.indexOf(\"macintosh\") > -1;\n}\nfunction isWindows(userAgent2) {\n  return userAgent2.indexOf(\"windows\") > -1;\n}\nfunction isGecko(userAgent2) {\n  return !!userAgent2.match(/gecko\\/\\d+/);\n}\nfunction isSafari(userAgent2) {\n  return userAgent2.indexOf(\" applewebkit/\") > -1 && userAgent2.indexOf(\"chrome\") === -1;\n}\nfunction isiOS(userAgent2) {\n  return !!userAgent2.match(/iphone|ipad/i) || isMac(userAgent2) && navigator.maxTouchPoints > 0;\n}\nfunction isAndroid(userAgent2) {\n  return userAgent2.indexOf(\"android\") > -1;\n}\nfunction isBlink(userAgent2) {\n  return userAgent2.indexOf(\"chrome/\") > -1 && userAgent2.indexOf(\"edge/\") < 0;\n}\nfunction isRegExpUnicodePropertySupported() {\n  let isSupported = false;\n  try {\n    isSupported = \"ć\".search(new RegExp(\"[\\\\p{L}]\", \"u\")) === 0;\n  } catch (error) {\n  }\n  return isSupported;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/fastdiff.js\nfunction fastDiff(a, b, cmp, atomicChanges) {\n  cmp = cmp || function(a2, b2) {\n    return a2 === b2;\n  };\n  const arrayA = Array.isArray(a) ? a : Array.prototype.slice.call(a);\n  const arrayB = Array.isArray(b) ? b : Array.prototype.slice.call(b);\n  const changeIndexes = findChangeBoundaryIndexes(arrayA, arrayB, cmp);\n  const result = atomicChanges ? changeIndexesToAtomicChanges(changeIndexes, arrayB.length) : changeIndexesToChanges(arrayB, changeIndexes);\n  return result;\n}\nfunction findChangeBoundaryIndexes(arr1, arr2, cmp) {\n  const firstIndex = findFirstDifferenceIndex(arr1, arr2, cmp);\n  if (firstIndex === -1) {\n    return { firstIndex: -1, lastIndexOld: -1, lastIndexNew: -1 };\n  }\n  const oldArrayReversed = cutAndReverse(arr1, firstIndex);\n  const newArrayReversed = cutAndReverse(arr2, firstIndex);\n  const lastIndex = findFirstDifferenceIndex(oldArrayReversed, newArrayReversed, cmp);\n  const lastIndexOld = arr1.length - lastIndex;\n  const lastIndexNew = arr2.length - lastIndex;\n  return { firstIndex, lastIndexOld, lastIndexNew };\n}\nfunction findFirstDifferenceIndex(arr1, arr2, cmp) {\n  for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {\n    if (arr1[i] === void 0 || arr2[i] === void 0 || !cmp(arr1[i], arr2[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\nfunction cutAndReverse(arr, howMany) {\n  return arr.slice(howMany).reverse();\n}\nfunction changeIndexesToChanges(newArray, changeIndexes) {\n  const result = [];\n  const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n  if (lastIndexNew - firstIndex > 0) {\n    result.push({\n      index: firstIndex,\n      type: \"insert\",\n      values: newArray.slice(firstIndex, lastIndexNew)\n    });\n  }\n  if (lastIndexOld - firstIndex > 0) {\n    result.push({\n      index: firstIndex + (lastIndexNew - firstIndex),\n      type: \"delete\",\n      howMany: lastIndexOld - firstIndex\n    });\n  }\n  return result;\n}\nfunction changeIndexesToAtomicChanges(changeIndexes, newLength) {\n  const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes;\n  if (firstIndex === -1) {\n    return Array(newLength).fill(\"equal\");\n  }\n  let result = [];\n  if (firstIndex > 0) {\n    result = result.concat(Array(firstIndex).fill(\"equal\"));\n  }\n  if (lastIndexNew - firstIndex > 0) {\n    result = result.concat(Array(lastIndexNew - firstIndex).fill(\"insert\"));\n  }\n  if (lastIndexOld - firstIndex > 0) {\n    result = result.concat(Array(lastIndexOld - firstIndex).fill(\"delete\"));\n  }\n  if (lastIndexNew < newLength) {\n    result = result.concat(Array(newLength - lastIndexNew).fill(\"equal\"));\n  }\n  return result;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/diff.js\nfunction diff(a, b, cmp) {\n  cmp = cmp || function(a2, b2) {\n    return a2 === b2;\n  };\n  const aLength = a.length;\n  const bLength = b.length;\n  if (aLength > 200 || bLength > 200 || aLength + bLength > 300) {\n    return diff.fastDiff(a, b, cmp, true);\n  }\n  let _insert2, _delete;\n  if (bLength < aLength) {\n    const tmp = a;\n    a = b;\n    b = tmp;\n    _insert2 = \"delete\";\n    _delete = \"insert\";\n  } else {\n    _insert2 = \"insert\";\n    _delete = \"delete\";\n  }\n  const m = a.length;\n  const n = b.length;\n  const delta = n - m;\n  const es = {};\n  const fp = {};\n  function snake(k2) {\n    const y1 = (fp[k2 - 1] !== void 0 ? fp[k2 - 1] : -1) + 1;\n    const y2 = fp[k2 + 1] !== void 0 ? fp[k2 + 1] : -1;\n    const dir = y1 > y2 ? -1 : 1;\n    if (es[k2 + dir]) {\n      es[k2] = es[k2 + dir].slice(0);\n    }\n    if (!es[k2]) {\n      es[k2] = [];\n    }\n    es[k2].push(y1 > y2 ? _insert2 : _delete);\n    let y = Math.max(y1, y2);\n    let x = y - k2;\n    while (x < m && y < n && cmp(a[x], b[y])) {\n      x++;\n      y++;\n      es[k2].push(\"equal\");\n    }\n    return y;\n  }\n  let p = 0;\n  let k;\n  do {\n    for (k = -p; k < delta; k++) {\n      fp[k] = snake(k);\n    }\n    for (k = delta + p; k > delta; k--) {\n      fp[k] = snake(k);\n    }\n    fp[delta] = snake(delta);\n    p++;\n  } while (fp[delta] !== n);\n  return es[delta].slice(1);\n}\ndiff.fastDiff = fastDiff;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/spy.js\nfunction spy() {\n  return function spy2() {\n    spy2.called = true;\n  };\n}\nvar spy_default = spy;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/eventinfo.js\nvar EventInfo = class {\n  /**\n   * @param source The emitter.\n   * @param name The event name.\n   */\n  constructor(source, name) {\n    this.source = source;\n    this.name = name;\n    this.path = [];\n    this.stop = spy_default();\n    this.off = spy_default();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/uid.js\nvar HEX_NUMBERS = new Array(256).fill(\"\").map((_, index) => (\"0\" + index.toString(16)).slice(-2));\nfunction uid() {\n  const r1 = Math.random() * 4294967296 >>> 0;\n  const r2 = Math.random() * 4294967296 >>> 0;\n  const r3 = Math.random() * 4294967296 >>> 0;\n  const r4 = Math.random() * 4294967296 >>> 0;\n  return \"e\" + HEX_NUMBERS[r1 >> 0 & 255] + HEX_NUMBERS[r1 >> 8 & 255] + HEX_NUMBERS[r1 >> 16 & 255] + HEX_NUMBERS[r1 >> 24 & 255] + HEX_NUMBERS[r2 >> 0 & 255] + HEX_NUMBERS[r2 >> 8 & 255] + HEX_NUMBERS[r2 >> 16 & 255] + HEX_NUMBERS[r2 >> 24 & 255] + HEX_NUMBERS[r3 >> 0 & 255] + HEX_NUMBERS[r3 >> 8 & 255] + HEX_NUMBERS[r3 >> 16 & 255] + HEX_NUMBERS[r3 >> 24 & 255] + HEX_NUMBERS[r4 >> 0 & 255] + HEX_NUMBERS[r4 >> 8 & 255] + HEX_NUMBERS[r4 >> 16 & 255] + HEX_NUMBERS[r4 >> 24 & 255];\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/priorities.js\nvar priorities = {\n  get(priority = \"normal\") {\n    if (typeof priority != \"number\") {\n      return this[priority] || this.normal;\n    } else {\n      return priority;\n    }\n  },\n  highest: 1e5,\n  high: 1e3,\n  normal: 0,\n  low: -1e3,\n  lowest: -1e5\n};\nvar priorities_default = priorities;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js\nfunction insertToPriorityArray(objects, objectToInsert) {\n  const priority = priorities_default.get(objectToInsert.priority);\n  for (let i = 0; i < objects.length; i++) {\n    if (priorities_default.get(objects[i].priority) < priority) {\n      objects.splice(i, 0, objectToInsert);\n      return;\n    }\n  }\n  objects.push(objectToInsert);\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/version.js\nvar version = \"41.0.0\";\nvar releaseDate = new Date(2024, 0, 17);\nif (globalThis.CKEDITOR_VERSION) {\n  throw new CKEditorError(\"ckeditor-duplicated-modules\", null);\n} else {\n  globalThis.CKEDITOR_VERSION = version;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/emittermixin.js\nvar _listeningTo = Symbol(\"listeningTo\");\nvar _emitterId = Symbol(\"emitterId\");\nvar _delegations = Symbol(\"delegations\");\nvar defaultEmitterClass = EmitterMixin(Object);\nfunction EmitterMixin(base) {\n  if (!base) {\n    return defaultEmitterClass;\n  }\n  class Mixin extends base {\n    on(event, callback, options) {\n      this.listenTo(this, event, callback, options);\n    }\n    once(event, callback, options) {\n      let wasFired = false;\n      const onceCallback = (event2, ...args) => {\n        if (!wasFired) {\n          wasFired = true;\n          event2.off();\n          callback.call(this, event2, ...args);\n        }\n      };\n      this.listenTo(this, event, onceCallback, options);\n    }\n    off(event, callback) {\n      this.stopListening(this, event, callback);\n    }\n    listenTo(emitter, event, callback, options = {}) {\n      let emitterInfo, eventCallbacks;\n      if (!this[_listeningTo]) {\n        this[_listeningTo] = {};\n      }\n      const emitters = this[_listeningTo];\n      if (!_getEmitterId(emitter)) {\n        _setEmitterId(emitter);\n      }\n      const emitterId = _getEmitterId(emitter);\n      if (!(emitterInfo = emitters[emitterId])) {\n        emitterInfo = emitters[emitterId] = {\n          emitter,\n          callbacks: {}\n        };\n      }\n      if (!(eventCallbacks = emitterInfo.callbacks[event])) {\n        eventCallbacks = emitterInfo.callbacks[event] = [];\n      }\n      eventCallbacks.push(callback);\n      addEventListener(this, emitter, event, callback, options);\n    }\n    stopListening(emitter, event, callback) {\n      const emitters = this[_listeningTo];\n      let emitterId = emitter && _getEmitterId(emitter);\n      const emitterInfo = emitters && emitterId ? emitters[emitterId] : void 0;\n      const eventCallbacks = emitterInfo && event ? emitterInfo.callbacks[event] : void 0;\n      if (!emitters || emitter && !emitterInfo || event && !eventCallbacks) {\n        return;\n      }\n      if (callback) {\n        removeEventListener(this, emitter, event, callback);\n        const index = eventCallbacks.indexOf(callback);\n        if (index !== -1) {\n          if (eventCallbacks.length === 1) {\n            delete emitterInfo.callbacks[event];\n          } else {\n            removeEventListener(this, emitter, event, callback);\n          }\n        }\n      } else if (eventCallbacks) {\n        while (callback = eventCallbacks.pop()) {\n          removeEventListener(this, emitter, event, callback);\n        }\n        delete emitterInfo.callbacks[event];\n      } else if (emitterInfo) {\n        for (event in emitterInfo.callbacks) {\n          this.stopListening(emitter, event);\n        }\n        delete emitters[emitterId];\n      } else {\n        for (emitterId in emitters) {\n          this.stopListening(emitters[emitterId].emitter);\n        }\n        delete this[_listeningTo];\n      }\n    }\n    fire(eventOrInfo, ...args) {\n      try {\n        const eventInfo = eventOrInfo instanceof EventInfo ? eventOrInfo : new EventInfo(this, eventOrInfo);\n        const event = eventInfo.name;\n        let callbacks = getCallbacksForEvent(this, event);\n        eventInfo.path.push(this);\n        if (callbacks) {\n          const callbackArgs = [eventInfo, ...args];\n          callbacks = Array.from(callbacks);\n          for (let i = 0; i < callbacks.length; i++) {\n            callbacks[i].callback.apply(this, callbackArgs);\n            if (eventInfo.off.called) {\n              delete eventInfo.off.called;\n              this._removeEventListener(event, callbacks[i].callback);\n            }\n            if (eventInfo.stop.called) {\n              break;\n            }\n          }\n        }\n        const delegations = this[_delegations];\n        if (delegations) {\n          const destinations = delegations.get(event);\n          const passAllDestinations = delegations.get(\"*\");\n          if (destinations) {\n            fireDelegatedEvents(destinations, eventInfo, args);\n          }\n          if (passAllDestinations) {\n            fireDelegatedEvents(passAllDestinations, eventInfo, args);\n          }\n        }\n        return eventInfo.return;\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n    delegate(...events) {\n      return {\n        to: (emitter, nameOrFunction) => {\n          if (!this[_delegations]) {\n            this[_delegations] = /* @__PURE__ */ new Map();\n          }\n          events.forEach((eventName) => {\n            const destinations = this[_delegations].get(eventName);\n            if (!destinations) {\n              this[_delegations].set(eventName, /* @__PURE__ */ new Map([[emitter, nameOrFunction]]));\n            } else {\n              destinations.set(emitter, nameOrFunction);\n            }\n          });\n        }\n      };\n    }\n    stopDelegating(event, emitter) {\n      if (!this[_delegations]) {\n        return;\n      }\n      if (!event) {\n        this[_delegations].clear();\n      } else if (!emitter) {\n        this[_delegations].delete(event);\n      } else {\n        const destinations = this[_delegations].get(event);\n        if (destinations) {\n          destinations.delete(emitter);\n        }\n      }\n    }\n    _addEventListener(event, callback, options) {\n      createEventNamespace(this, event);\n      const lists = getCallbacksListsForNamespace(this, event);\n      const priority = priorities_default.get(options.priority);\n      const callbackDefinition = {\n        callback,\n        priority\n      };\n      for (const callbacks of lists) {\n        insertToPriorityArray(callbacks, callbackDefinition);\n      }\n    }\n    _removeEventListener(event, callback) {\n      const lists = getCallbacksListsForNamespace(this, event);\n      for (const callbacks of lists) {\n        for (let i = 0; i < callbacks.length; i++) {\n          if (callbacks[i].callback == callback) {\n            callbacks.splice(i, 1);\n            i--;\n          }\n        }\n      }\n    }\n  }\n  return Mixin;\n}\n[\n  \"on\",\n  \"once\",\n  \"off\",\n  \"listenTo\",\n  \"stopListening\",\n  \"fire\",\n  \"delegate\",\n  \"stopDelegating\",\n  \"_addEventListener\",\n  \"_removeEventListener\"\n].forEach((key) => {\n  EmitterMixin[key] = defaultEmitterClass.prototype[key];\n});\nfunction _getEmitterListenedTo(listeningEmitter, listenedToEmitterId) {\n  const listeningTo = listeningEmitter[_listeningTo];\n  if (listeningTo && listeningTo[listenedToEmitterId]) {\n    return listeningTo[listenedToEmitterId].emitter;\n  }\n  return null;\n}\nfunction _setEmitterId(emitter, id) {\n  if (!emitter[_emitterId]) {\n    emitter[_emitterId] = id || uid();\n  }\n}\nfunction _getEmitterId(emitter) {\n  return emitter[_emitterId];\n}\nfunction getEvents(source) {\n  if (!source._events) {\n    Object.defineProperty(source, \"_events\", {\n      value: {}\n    });\n  }\n  return source._events;\n}\nfunction makeEventNode() {\n  return {\n    callbacks: [],\n    childEvents: []\n  };\n}\nfunction createEventNamespace(source, eventName) {\n  const events = getEvents(source);\n  if (events[eventName]) {\n    return;\n  }\n  let name = eventName;\n  let childEventName = null;\n  const newEventNodes = [];\n  while (name !== \"\") {\n    if (events[name]) {\n      break;\n    }\n    events[name] = makeEventNode();\n    newEventNodes.push(events[name]);\n    if (childEventName) {\n      events[name].childEvents.push(childEventName);\n    }\n    childEventName = name;\n    name = name.substr(0, name.lastIndexOf(\":\"));\n  }\n  if (name !== \"\") {\n    for (const node of newEventNodes) {\n      node.callbacks = events[name].callbacks.slice();\n    }\n    events[name].childEvents.push(childEventName);\n  }\n}\nfunction getCallbacksListsForNamespace(source, eventName) {\n  const eventNode = getEvents(source)[eventName];\n  if (!eventNode) {\n    return [];\n  }\n  let callbacksLists = [eventNode.callbacks];\n  for (let i = 0; i < eventNode.childEvents.length; i++) {\n    const childCallbacksLists = getCallbacksListsForNamespace(source, eventNode.childEvents[i]);\n    callbacksLists = callbacksLists.concat(childCallbacksLists);\n  }\n  return callbacksLists;\n}\nfunction getCallbacksForEvent(source, eventName) {\n  let event;\n  if (!source._events || !(event = source._events[eventName]) || !event.callbacks.length) {\n    if (eventName.indexOf(\":\") > -1) {\n      return getCallbacksForEvent(source, eventName.substr(0, eventName.lastIndexOf(\":\")));\n    } else {\n      return null;\n    }\n  }\n  return event.callbacks;\n}\nfunction fireDelegatedEvents(destinations, eventInfo, fireArgs) {\n  for (let [emitter, name] of destinations) {\n    if (!name) {\n      name = eventInfo.name;\n    } else if (typeof name == \"function\") {\n      name = name(eventInfo.name);\n    }\n    const delegatedInfo = new EventInfo(eventInfo.source, name);\n    delegatedInfo.path = [...eventInfo.path];\n    emitter.fire(delegatedInfo, ...fireArgs);\n  }\n}\nfunction addEventListener(listener, emitter, event, callback, options) {\n  if (emitter._addEventListener) {\n    emitter._addEventListener(event, callback, options);\n  } else {\n    listener._addEventListener.call(emitter, event, callback, options);\n  }\n}\nfunction removeEventListener(listener, emitter, event, callback) {\n  if (emitter._removeEventListener) {\n    emitter._removeEventListener(event, callback);\n  } else {\n    listener._removeEventListener.call(emitter, event, callback);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/observablemixin.js\nvar observablePropertiesSymbol = Symbol(\"observableProperties\");\nvar boundObservablesSymbol = Symbol(\"boundObservables\");\nvar boundPropertiesSymbol = Symbol(\"boundProperties\");\nvar decoratedMethods = Symbol(\"decoratedMethods\");\nvar decoratedOriginal = Symbol(\"decoratedOriginal\");\nvar defaultObservableClass = ObservableMixin(EmitterMixin());\nfunction ObservableMixin(base) {\n  if (!base) {\n    return defaultObservableClass;\n  }\n  class Mixin extends base {\n    set(name, value) {\n      if (isObject_default(name)) {\n        Object.keys(name).forEach((property) => {\n          this.set(property, name[property]);\n        }, this);\n        return;\n      }\n      initObservable(this);\n      const properties = this[observablePropertiesSymbol];\n      if (name in this && !properties.has(name)) {\n        throw new CKEditorError(\"observable-set-cannot-override\", this);\n      }\n      Object.defineProperty(this, name, {\n        enumerable: true,\n        configurable: true,\n        get() {\n          return properties.get(name);\n        },\n        set(value2) {\n          const oldValue = properties.get(name);\n          let newValue = this.fire(`set:${name}`, name, value2, oldValue);\n          if (newValue === void 0) {\n            newValue = value2;\n          }\n          if (oldValue !== newValue || !properties.has(name)) {\n            properties.set(name, newValue);\n            this.fire(`change:${name}`, name, newValue, oldValue);\n          }\n        }\n      });\n      this[name] = value;\n    }\n    bind(...bindProperties) {\n      if (!bindProperties.length || !isStringArray(bindProperties)) {\n        throw new CKEditorError(\"observable-bind-wrong-properties\", this);\n      }\n      if (new Set(bindProperties).size !== bindProperties.length) {\n        throw new CKEditorError(\"observable-bind-duplicate-properties\", this);\n      }\n      initObservable(this);\n      const boundProperties = this[boundPropertiesSymbol];\n      bindProperties.forEach((propertyName) => {\n        if (boundProperties.has(propertyName)) {\n          throw new CKEditorError(\"observable-bind-rebind\", this);\n        }\n      });\n      const bindings = /* @__PURE__ */ new Map();\n      bindProperties.forEach((a) => {\n        const binding = { property: a, to: [] };\n        boundProperties.set(a, binding);\n        bindings.set(a, binding);\n      });\n      return {\n        to: bindTo,\n        toMany: bindToMany,\n        _observable: this,\n        _bindProperties: bindProperties,\n        _to: [],\n        _bindings: bindings\n      };\n    }\n    unbind(...unbindProperties) {\n      if (!this[observablePropertiesSymbol]) {\n        return;\n      }\n      const boundProperties = this[boundPropertiesSymbol];\n      const boundObservables = this[boundObservablesSymbol];\n      if (unbindProperties.length) {\n        if (!isStringArray(unbindProperties)) {\n          throw new CKEditorError(\"observable-unbind-wrong-properties\", this);\n        }\n        unbindProperties.forEach((propertyName) => {\n          const binding = boundProperties.get(propertyName);\n          if (!binding) {\n            return;\n          }\n          binding.to.forEach(([toObservable, toProperty]) => {\n            const toProperties = boundObservables.get(toObservable);\n            const toPropertyBindings = toProperties[toProperty];\n            toPropertyBindings.delete(binding);\n            if (!toPropertyBindings.size) {\n              delete toProperties[toProperty];\n            }\n            if (!Object.keys(toProperties).length) {\n              boundObservables.delete(toObservable);\n              this.stopListening(toObservable, \"change\");\n            }\n          });\n          boundProperties.delete(propertyName);\n        });\n      } else {\n        boundObservables.forEach((bindings, boundObservable) => {\n          this.stopListening(boundObservable, \"change\");\n        });\n        boundObservables.clear();\n        boundProperties.clear();\n      }\n    }\n    decorate(methodName) {\n      initObservable(this);\n      const originalMethod = this[methodName];\n      if (!originalMethod) {\n        throw new CKEditorError(\"observablemixin-cannot-decorate-undefined\", this, { object: this, methodName });\n      }\n      this.on(methodName, (evt, args) => {\n        evt.return = originalMethod.apply(this, args);\n      });\n      this[methodName] = function(...args) {\n        return this.fire(methodName, args);\n      };\n      this[methodName][decoratedOriginal] = originalMethod;\n      if (!this[decoratedMethods]) {\n        this[decoratedMethods] = [];\n      }\n      this[decoratedMethods].push(methodName);\n    }\n    // Override the EmitterMixin stopListening method to be able to clean (and restore) decorated methods.\n    // This is needed in case of:\n    //  1. Have x.foo() decorated.\n    //  2. Call x.stopListening()\n    //  3. Call x.foo(). Problem: nothing happens (the original foo() method is not executed)\n    stopListening(emitter, event, callback) {\n      if (!emitter && this[decoratedMethods]) {\n        for (const methodName of this[decoratedMethods]) {\n          this[methodName] = this[methodName][decoratedOriginal];\n        }\n        delete this[decoratedMethods];\n      }\n      super.stopListening(emitter, event, callback);\n    }\n  }\n  return Mixin;\n}\n[\n  \"set\",\n  \"bind\",\n  \"unbind\",\n  \"decorate\",\n  \"on\",\n  \"once\",\n  \"off\",\n  \"listenTo\",\n  \"stopListening\",\n  \"fire\",\n  \"delegate\",\n  \"stopDelegating\",\n  \"_addEventListener\",\n  \"_removeEventListener\"\n].forEach((key) => {\n  ObservableMixin[key] = defaultObservableClass.prototype[key];\n});\nfunction initObservable(observable) {\n  if (observable[observablePropertiesSymbol]) {\n    return;\n  }\n  Object.defineProperty(observable, observablePropertiesSymbol, {\n    value: /* @__PURE__ */ new Map()\n  });\n  Object.defineProperty(observable, boundObservablesSymbol, {\n    value: /* @__PURE__ */ new Map()\n  });\n  Object.defineProperty(observable, boundPropertiesSymbol, {\n    value: /* @__PURE__ */ new Map()\n  });\n}\nfunction bindTo(...args) {\n  const parsedArgs = parseBindToArgs(...args);\n  const bindingsKeys = Array.from(this._bindings.keys());\n  const numberOfBindings = bindingsKeys.length;\n  if (!parsedArgs.callback && parsedArgs.to.length > 1) {\n    throw new CKEditorError(\"observable-bind-to-no-callback\", this);\n  }\n  if (numberOfBindings > 1 && parsedArgs.callback) {\n    throw new CKEditorError(\"observable-bind-to-extra-callback\", this);\n  }\n  parsedArgs.to.forEach((to) => {\n    if (to.properties.length && to.properties.length !== numberOfBindings) {\n      throw new CKEditorError(\"observable-bind-to-properties-length\", this);\n    }\n    if (!to.properties.length) {\n      to.properties = this._bindProperties;\n    }\n  });\n  this._to = parsedArgs.to;\n  if (parsedArgs.callback) {\n    this._bindings.get(bindingsKeys[0]).callback = parsedArgs.callback;\n  }\n  attachBindToListeners(this._observable, this._to);\n  updateBindToBound(this);\n  this._bindProperties.forEach((propertyName) => {\n    updateBoundObservableProperty(this._observable, propertyName);\n  });\n}\nfunction bindToMany(observables, attribute, callback) {\n  if (this._bindings.size > 1) {\n    throw new CKEditorError(\"observable-bind-to-many-not-one-binding\", this);\n  }\n  this.to(\n    ...getBindingTargets(observables, attribute),\n    // ...using given callback to parse attribute values.\n    callback\n  );\n}\nfunction getBindingTargets(observables, attribute) {\n  const observableAndAttributePairs = observables.map((observable) => [observable, attribute]);\n  return Array.prototype.concat.apply([], observableAndAttributePairs);\n}\nfunction isStringArray(arr) {\n  return arr.every((a) => typeof a == \"string\");\n}\nfunction parseBindToArgs(...args) {\n  if (!args.length) {\n    throw new CKEditorError(\"observable-bind-to-parse-error\", null);\n  }\n  const parsed = { to: [] };\n  let lastObservable;\n  if (typeof args[args.length - 1] == \"function\") {\n    parsed.callback = args.pop();\n  }\n  args.forEach((a) => {\n    if (typeof a == \"string\") {\n      lastObservable.properties.push(a);\n    } else if (typeof a == \"object\") {\n      lastObservable = { observable: a, properties: [] };\n      parsed.to.push(lastObservable);\n    } else {\n      throw new CKEditorError(\"observable-bind-to-parse-error\", null);\n    }\n  });\n  return parsed;\n}\nfunction updateBoundObservables(observable, binding, toObservable, toPropertyName) {\n  const boundObservables = observable[boundObservablesSymbol];\n  const bindingsToObservable = boundObservables.get(toObservable);\n  const bindings = bindingsToObservable || {};\n  if (!bindings[toPropertyName]) {\n    bindings[toPropertyName] = /* @__PURE__ */ new Set();\n  }\n  bindings[toPropertyName].add(binding);\n  if (!bindingsToObservable) {\n    boundObservables.set(toObservable, bindings);\n  }\n}\nfunction updateBindToBound(chain) {\n  let toProperty;\n  chain._bindings.forEach((binding, propertyName) => {\n    chain._to.forEach((to) => {\n      toProperty = to.properties[binding.callback ? 0 : chain._bindProperties.indexOf(propertyName)];\n      binding.to.push([to.observable, toProperty]);\n      updateBoundObservables(chain._observable, binding, to.observable, toProperty);\n    });\n  });\n}\nfunction updateBoundObservableProperty(observable, propertyName) {\n  const boundProperties = observable[boundPropertiesSymbol];\n  const binding = boundProperties.get(propertyName);\n  let propertyValue;\n  if (binding.callback) {\n    propertyValue = binding.callback.apply(observable, binding.to.map((to) => to[0][to[1]]));\n  } else {\n    propertyValue = binding.to[0];\n    propertyValue = propertyValue[0][propertyValue[1]];\n  }\n  if (Object.prototype.hasOwnProperty.call(observable, propertyName)) {\n    observable[propertyName] = propertyValue;\n  } else {\n    observable.set(propertyName, propertyValue);\n  }\n}\nfunction attachBindToListeners(observable, toBindings) {\n  toBindings.forEach((to) => {\n    const boundObservables = observable[boundObservablesSymbol];\n    let bindings;\n    if (!boundObservables.get(to.observable)) {\n      observable.listenTo(to.observable, \"change\", (evt, propertyName) => {\n        bindings = boundObservables.get(to.observable)[propertyName];\n        if (bindings) {\n          bindings.forEach((binding) => {\n            updateBoundObservableProperty(observable, binding.property);\n          });\n        }\n      });\n    }\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/elementreplacer.js\nvar ElementReplacer = class {\n  constructor() {\n    this._replacedElements = [];\n  }\n  /**\n   * Hides the `element` and, if specified, inserts the the given element next to it.\n   *\n   * The effect of this method can be reverted by {@link #restore}.\n   *\n   * @param element The element to replace.\n   * @param newElement The replacement element. If not passed, then the `element` will just be hidden.\n   */\n  replace(element, newElement) {\n    this._replacedElements.push({ element, newElement });\n    element.style.display = \"none\";\n    if (newElement) {\n      element.parentNode.insertBefore(newElement, element.nextSibling);\n    }\n  }\n  /**\n   * Restores what {@link #replace} did.\n   */\n  restore() {\n    this._replacedElements.forEach(({ element, newElement }) => {\n      element.style.display = \"\";\n      if (newElement) {\n        newElement.remove();\n      }\n    });\n    this._replacedElements = [];\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/count.js\nfunction count(iterable) {\n  let count2 = 0;\n  for (const _ of iterable) {\n    count2++;\n  }\n  return count2;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/comparearrays.js\nfunction compareArrays(a, b) {\n  const minLen = Math.min(a.length, b.length);\n  for (let i = 0; i < minLen; i++) {\n    if (a[i] != b[i]) {\n      return i;\n    }\n  }\n  if (a.length == b.length) {\n    return \"same\";\n  } else if (a.length < b.length) {\n    return \"prefix\";\n  } else {\n    return \"extension\";\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/isiterable.js\nfunction isIterable(value) {\n  return !!(value && value[Symbol.iterator]);\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/createelement.js\nfunction createElement(doc, name, attributes = {}, children = []) {\n  const namespace = attributes && attributes.xmlns;\n  const element = namespace ? doc.createElementNS(namespace, name) : doc.createElement(name);\n  for (const key in attributes) {\n    element.setAttribute(key, attributes[key]);\n  }\n  if (isString_default(children) || !isIterable(children)) {\n    children = [children];\n  }\n  for (let child of children) {\n    if (isString_default(child)) {\n      child = doc.createTextNode(child);\n    }\n    element.appendChild(child);\n  }\n  return element;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/config.js\nvar Config = class {\n  /**\n   * Creates an instance of the {@link ~Config} class.\n   *\n   * @param configurations The initial configurations to be set. Usually, provided by the user.\n   * @param defaultConfigurations The default configurations. Usually, provided by the system.\n   */\n  constructor(configurations, defaultConfigurations) {\n    this._config = {};\n    if (defaultConfigurations) {\n      this.define(cloneConfig(defaultConfigurations));\n    }\n    if (configurations) {\n      this._setObjectToTarget(this._config, configurations);\n    }\n  }\n  set(name, value) {\n    this._setToTarget(this._config, name, value);\n  }\n  define(name, value) {\n    const isDefine = true;\n    this._setToTarget(this._config, name, value, isDefine);\n  }\n  /**\n   * Gets the value for a configuration entry.\n   *\n   * ```ts\n   * config.get( 'name' );\n   * ```\n   *\n   * Deep configurations can be retrieved by separating each part with a dot.\n   *\n   * ```ts\n   * config.get( 'toolbar.collapsed' );\n   * ```\n   *\n   * @param name The configuration name. Configuration names are case-sensitive.\n   * @returns The configuration value or `undefined` if the configuration entry was not found.\n   */\n  get(name) {\n    return this._getFromSource(this._config, name);\n  }\n  /**\n   * Iterates over all top level configuration names.\n   */\n  *names() {\n    for (const name of Object.keys(this._config)) {\n      yield name;\n    }\n  }\n  /**\n   * Saves passed configuration to the specified target (nested object).\n   *\n   * @param target Nested config object.\n   * @param name The configuration name or an object from which take properties as\n   * configuration entries. Configuration names are case-sensitive.\n   * @param value The configuration value. Used if a name is passed.\n   * @param isDefine Define if passed configuration should overwrite existing one.\n   */\n  _setToTarget(target, name, value, isDefine = false) {\n    if (isPlainObject_default(name)) {\n      this._setObjectToTarget(target, name, isDefine);\n      return;\n    }\n    const parts = name.split(\".\");\n    name = parts.pop();\n    for (const part of parts) {\n      if (!isPlainObject_default(target[part])) {\n        target[part] = {};\n      }\n      target = target[part];\n    }\n    if (isPlainObject_default(value)) {\n      if (!isPlainObject_default(target[name])) {\n        target[name] = {};\n      }\n      target = target[name];\n      this._setObjectToTarget(target, value, isDefine);\n      return;\n    }\n    if (isDefine && typeof target[name] != \"undefined\") {\n      return;\n    }\n    target[name] = value;\n  }\n  /**\n   * Get specified configuration from specified source (nested object).\n   *\n   * @param source level of nested object.\n   * @param name The configuration name. Configuration names are case-sensitive.\n   * @returns The configuration value or `undefined` if the configuration entry was not found.\n   */\n  _getFromSource(source, name) {\n    const parts = name.split(\".\");\n    name = parts.pop();\n    for (const part of parts) {\n      if (!isPlainObject_default(source[part])) {\n        source = null;\n        break;\n      }\n      source = source[part];\n    }\n    return source ? cloneConfig(source[name]) : void 0;\n  }\n  /**\n   * Iterates through passed object and calls {@link #_setToTarget} method with object key and value for each property.\n   *\n   * @param target Nested config object.\n   * @param configuration Configuration data set\n   * @param isDefine Defines if passed configuration is default configuration or not.\n   */\n  _setObjectToTarget(target, configuration, isDefine) {\n    Object.keys(configuration).forEach((key) => {\n      this._setToTarget(target, key, configuration[key], isDefine);\n    });\n  }\n};\nfunction cloneConfig(source) {\n  return cloneDeepWith_default(source, leaveItemReferences);\n}\nfunction leaveItemReferences(value) {\n  return isElement_default(value) || typeof value === \"function\" ? value : void 0;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/isnode.js\nfunction isNode(obj) {\n  if (obj) {\n    if (obj.defaultView) {\n      return obj instanceof obj.defaultView.Document;\n    } else if (obj.ownerDocument && obj.ownerDocument.defaultView) {\n      return obj instanceof obj.ownerDocument.defaultView.Node;\n    }\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/iswindow.js\nfunction isWindow(obj) {\n  const stringifiedObject = Object.prototype.toString.apply(obj);\n  if (stringifiedObject == \"[object Window]\") {\n    return true;\n  }\n  if (stringifiedObject == \"[object global]\") {\n    return true;\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/emittermixin.js\nvar defaultEmitterClass2 = DomEmitterMixin(EmitterMixin());\nfunction DomEmitterMixin(base) {\n  if (!base) {\n    return defaultEmitterClass2;\n  }\n  class Mixin extends base {\n    listenTo(emitter, event, callback, options = {}) {\n      if (isNode(emitter) || isWindow(emitter)) {\n        const proxyOptions = {\n          capture: !!options.useCapture,\n          passive: !!options.usePassive\n        };\n        const proxyEmitter = this._getProxyEmitter(emitter, proxyOptions) || new ProxyEmitter(emitter, proxyOptions);\n        this.listenTo(proxyEmitter, event, callback, options);\n      } else {\n        super.listenTo(emitter, event, callback, options);\n      }\n    }\n    stopListening(emitter, event, callback) {\n      if (isNode(emitter) || isWindow(emitter)) {\n        const proxyEmitters = this._getAllProxyEmitters(emitter);\n        for (const proxy of proxyEmitters) {\n          this.stopListening(proxy, event, callback);\n        }\n      } else {\n        super.stopListening(emitter, event, callback);\n      }\n    }\n    /**\n     * Retrieves ProxyEmitter instance for given DOM Node residing in this Host and given options.\n     *\n     * @param node DOM Node of the ProxyEmitter.\n     * @param options Additional options.\n     * @param options.useCapture Indicates that events of this type will be dispatched to the registered\n     * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n     * @param options.usePassive Indicates that the function specified by listener will never call preventDefault()\n     * and prevents blocking browser's main thread by this event handler.\n     * @returns ProxyEmitter instance bound to the DOM Node.\n     */\n    _getProxyEmitter(node, options) {\n      return _getEmitterListenedTo(this, getProxyEmitterId(node, options));\n    }\n    /**\n     * Retrieves all the ProxyEmitter instances for given DOM Node residing in this Host.\n     *\n     * @param node DOM Node of the ProxyEmitter.\n     */\n    _getAllProxyEmitters(node) {\n      return [\n        { capture: false, passive: false },\n        { capture: false, passive: true },\n        { capture: true, passive: false },\n        { capture: true, passive: true }\n      ].map((options) => this._getProxyEmitter(node, options)).filter((proxy) => !!proxy);\n    }\n  }\n  return Mixin;\n}\n[\n  \"_getProxyEmitter\",\n  \"_getAllProxyEmitters\",\n  \"on\",\n  \"once\",\n  \"off\",\n  \"listenTo\",\n  \"stopListening\",\n  \"fire\",\n  \"delegate\",\n  \"stopDelegating\",\n  \"_addEventListener\",\n  \"_removeEventListener\"\n].forEach((key) => {\n  DomEmitterMixin[key] = defaultEmitterClass2.prototype[key];\n});\nvar ProxyEmitter = class extends EmitterMixin() {\n  /**\n   * @param node DOM Node that fires events.\n   * @param options Additional options.\n   * @param options.useCapture Indicates that events of this type will be dispatched to the registered\n   * listener before being dispatched to any EventTarget beneath it in the DOM tree.\n   * @param options.usePassive Indicates that the function specified by listener will never call preventDefault()\n   * and prevents blocking browser's main thread by this event handler.\n   */\n  constructor(node, options) {\n    super();\n    _setEmitterId(this, getProxyEmitterId(node, options));\n    this._domNode = node;\n    this._options = options;\n  }\n  /**\n   * Registers a callback function to be executed when an event is fired.\n   *\n   * It attaches a native DOM listener to the DOM Node. When fired,\n   * a corresponding Emitter event will also fire with DOM Event object as an argument.\n   *\n   * **Note**: This is automatically called by the\n   * {@link module:utils/emittermixin~Emitter#listenTo `Emitter#listenTo()`}.\n   *\n   * @param event The name of the event.\n   */\n  attach(event) {\n    if (this._domListeners && this._domListeners[event]) {\n      return;\n    }\n    const domListener = this._createDomListener(event);\n    this._domNode.addEventListener(event, domListener, this._options);\n    if (!this._domListeners) {\n      this._domListeners = {};\n    }\n    this._domListeners[event] = domListener;\n  }\n  /**\n   * Stops executing the callback on the given event.\n   *\n   * **Note**: This is automatically called by the\n   * {@link module:utils/emittermixin~Emitter#stopListening `Emitter#stopListening()`}.\n   *\n   * @param event The name of the event.\n   */\n  detach(event) {\n    let events;\n    if (this._domListeners[event] && (!(events = this._events[event]) || !events.callbacks.length)) {\n      this._domListeners[event].removeListener();\n    }\n  }\n  /**\n   * Adds callback to emitter for given event.\n   *\n   * @internal\n   * @param event The name of the event.\n   * @param callback The function to be called on event.\n   * @param options Additional options.\n   */\n  _addEventListener(event, callback, options) {\n    this.attach(event);\n    EmitterMixin().prototype._addEventListener.call(this, event, callback, options);\n  }\n  /**\n   * Removes callback from emitter for given event.\n   *\n   * @internal\n   * @param event The name of the event.\n   * @param callback The function to stop being called.\n   */\n  _removeEventListener(event, callback) {\n    EmitterMixin().prototype._removeEventListener.call(this, event, callback);\n    this.detach(event);\n  }\n  /**\n   * Creates a native DOM listener callback. When the native DOM event\n   * is fired it will fire corresponding event on this ProxyEmitter.\n   * Note: A native DOM Event is passed as an argument.\n   *\n   * @param event The name of the event.\n   * @returns The DOM listener callback.\n   */\n  _createDomListener(event) {\n    const domListener = (domEvt) => {\n      this.fire(event, domEvt);\n    };\n    domListener.removeListener = () => {\n      this._domNode.removeEventListener(event, domListener, this._options);\n      delete this._domListeners[event];\n    };\n    return domListener;\n  }\n};\nfunction getNodeUID(node) {\n  return node[\"data-ck-expando\"] || (node[\"data-ck-expando\"] = uid());\n}\nfunction getProxyEmitterId(node, options) {\n  let id = getNodeUID(node);\n  for (const option of Object.keys(options).sort()) {\n    if (options[option]) {\n      id += \"-\" + option;\n    }\n  }\n  return id;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/global.js\nvar globalVar;\ntry {\n  globalVar = { window, document };\n} catch (e) {\n  globalVar = { window: {}, document: {} };\n}\nvar global_default = globalVar;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/getancestors.js\nfunction getAncestors(node) {\n  const nodes = [];\n  let currentNode = node;\n  while (currentNode && currentNode.nodeType != Node.DOCUMENT_NODE) {\n    nodes.unshift(currentNode);\n    currentNode = currentNode.parentNode;\n  }\n  return nodes;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/getborderwidths.js\nfunction getBorderWidths(element) {\n  const style = element.ownerDocument.defaultView.getComputedStyle(element);\n  return {\n    top: parseInt(style.borderTopWidth, 10),\n    right: parseInt(style.borderRightWidth, 10),\n    bottom: parseInt(style.borderBottomWidth, 10),\n    left: parseInt(style.borderLeftWidth, 10)\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/istext.js\nfunction isText(obj) {\n  return Object.prototype.toString.call(obj) == \"[object Text]\";\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/isrange.js\nfunction isRange(obj) {\n  return Object.prototype.toString.apply(obj) == \"[object Range]\";\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/getpositionedancestor.js\nfunction getPositionedAncestor(element) {\n  if (!element || !element.parentNode) {\n    return null;\n  }\n  if (element.offsetParent === global_default.document.body) {\n    return null;\n  }\n  return element.offsetParent;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/rect.js\nvar rectProperties = [\"top\", \"right\", \"bottom\", \"left\", \"width\", \"height\"];\nvar Rect = class _Rect {\n  /**\n   * Creates an instance of rect.\n   *\n   * ```ts\n   * // Rect of an HTMLElement.\n   * const rectA = new Rect( document.body );\n   *\n   * // Rect of a DOM Range.\n   * const rectB = new Rect( document.getSelection().getRangeAt( 0 ) );\n   *\n   * // Rect of a window (web browser viewport).\n   * const rectC = new Rect( window );\n   *\n   * // Rect out of an object.\n   * const rectD = new Rect( { top: 0, right: 10, bottom: 10, left: 0, width: 10, height: 10 } );\n   *\n   * // Rect out of another Rect instance.\n   * const rectE = new Rect( rectD );\n   *\n   * // Rect out of a ClientRect.\n   * const rectF = new Rect( document.body.getClientRects().item( 0 ) );\n   * ```\n   *\n   * **Note**: By default a rect of an HTML element includes its CSS borders and scrollbars (if any)\n   * ant the rect of a `window` includes scrollbars too. Use {@link #excludeScrollbarsAndBorders}\n   * to get the inner part of the rect.\n   *\n   * @param source A source object to create the rect.\n   */\n  constructor(source) {\n    const isSourceRange = isRange(source);\n    Object.defineProperty(this, \"_source\", {\n      // If the source is a Rect instance, copy it's #_source.\n      value: source._source || source,\n      writable: true,\n      enumerable: false\n    });\n    if (isDomElement(source) || isSourceRange) {\n      if (isSourceRange) {\n        const rangeRects = _Rect.getDomRangeRects(source);\n        copyRectProperties(this, _Rect.getBoundingRect(rangeRects));\n      } else {\n        copyRectProperties(this, source.getBoundingClientRect());\n      }\n    } else if (isWindow(source)) {\n      const { innerWidth, innerHeight } = source;\n      copyRectProperties(this, {\n        top: 0,\n        right: innerWidth,\n        bottom: innerHeight,\n        left: 0,\n        width: innerWidth,\n        height: innerHeight\n      });\n    } else {\n      copyRectProperties(this, source);\n    }\n  }\n  /**\n   * Returns a clone of the rect.\n   *\n   * @returns A cloned rect.\n   */\n  clone() {\n    return new _Rect(this);\n  }\n  /**\n   * Moves the rect so that its upper–left corner lands in desired `[ x, y ]` location.\n   *\n   * @param x Desired horizontal location.\n   * @param y Desired vertical location.\n   * @returns A rect which has been moved.\n   */\n  moveTo(x, y) {\n    this.top = y;\n    this.right = x + this.width;\n    this.bottom = y + this.height;\n    this.left = x;\n    return this;\n  }\n  /**\n   * Moves the rect in–place by a dedicated offset.\n   *\n   * @param x A horizontal offset.\n   * @param y A vertical offset\n   * @returns A rect which has been moved.\n   */\n  moveBy(x, y) {\n    this.top += y;\n    this.right += x;\n    this.left += x;\n    this.bottom += y;\n    return this;\n  }\n  /**\n   * Returns a new rect a a result of intersection with another rect.\n   */\n  getIntersection(anotherRect) {\n    const rect = {\n      top: Math.max(this.top, anotherRect.top),\n      right: Math.min(this.right, anotherRect.right),\n      bottom: Math.min(this.bottom, anotherRect.bottom),\n      left: Math.max(this.left, anotherRect.left),\n      width: 0,\n      height: 0\n    };\n    rect.width = rect.right - rect.left;\n    rect.height = rect.bottom - rect.top;\n    if (rect.width < 0 || rect.height < 0) {\n      return null;\n    } else {\n      const newRect = new _Rect(rect);\n      newRect._source = this._source;\n      return newRect;\n    }\n  }\n  /**\n   * Returns the area of intersection with another rect.\n   *\n   * @returns Area of intersection.\n   */\n  getIntersectionArea(anotherRect) {\n    const rect = this.getIntersection(anotherRect);\n    if (rect) {\n      return rect.getArea();\n    } else {\n      return 0;\n    }\n  }\n  /**\n   * Returns the area of the rect.\n   */\n  getArea() {\n    return this.width * this.height;\n  }\n  /**\n   * Returns a new rect, a part of the original rect, which is actually visible to the user and is relative to the,`body`,\n   * e.g. an original rect cropped by parent element rects which have `overflow` set in CSS\n   * other than `\"visible\"`.\n   *\n   * If there's no such visible rect, which is when the rect is limited by one or many of\n   * the ancestors, `null` is returned.\n   *\n   * **Note**: This method does not consider the boundaries of the viewport (window).\n   * To get a rect cropped by all ancestors and the viewport, use an intersection such as:\n   *\n   * ```ts\n   * const visibleInViewportRect = new Rect( window ).getIntersection( new Rect( source ).getVisible() );\n   * ```\n   *\n   * @returns A visible rect instance or `null`, if there's none.\n   */\n  getVisible() {\n    const source = this._source;\n    let visibleRect = this.clone();\n    if (isBody(source)) {\n      return visibleRect;\n    }\n    let child = source;\n    let parent2 = source.parentNode || source.commonAncestorContainer;\n    let absolutelyPositionedChildElement;\n    while (parent2 && !isBody(parent2)) {\n      const isParentOverflowVisible = getElementOverflow(parent2) === \"visible\";\n      if (child instanceof HTMLElement && getElementPosition(child) === \"absolute\") {\n        absolutelyPositionedChildElement = child;\n      }\n      const parentElementPosition = getElementPosition(parent2);\n      if (isParentOverflowVisible || absolutelyPositionedChildElement && (parentElementPosition === \"relative\" && isParentOverflowVisible || parentElementPosition !== \"relative\")) {\n        child = parent2;\n        parent2 = parent2.parentNode;\n        continue;\n      }\n      const parentRect = new _Rect(parent2);\n      const intersectionRect = visibleRect.getIntersection(parentRect);\n      if (intersectionRect) {\n        if (intersectionRect.getArea() < visibleRect.getArea()) {\n          visibleRect = intersectionRect;\n        }\n      } else {\n        return null;\n      }\n      child = parent2;\n      parent2 = parent2.parentNode;\n    }\n    return visibleRect;\n  }\n  /**\n   * Checks if all property values ({@link #top}, {@link #left}, {@link #right},\n   * {@link #bottom}, {@link #width} and {@link #height}) are the equal in both rect\n   * instances.\n   *\n   * @param anotherRect A rect instance to compare with.\n   * @returns `true` when Rects are equal. `false` otherwise.\n   */\n  isEqual(anotherRect) {\n    for (const prop of rectProperties) {\n      if (this[prop] !== anotherRect[prop]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Checks whether a rect fully contains another rect instance.\n   *\n   * @param anotherRect\n   * @returns `true` if contains, `false` otherwise.\n   */\n  contains(anotherRect) {\n    const intersectRect = this.getIntersection(anotherRect);\n    return !!(intersectRect && intersectRect.isEqual(anotherRect));\n  }\n  /**\n   * Recalculates screen coordinates to coordinates relative to the positioned ancestor offset.\n   */\n  toAbsoluteRect() {\n    const { scrollX, scrollY } = global_default.window;\n    const absoluteRect = this.clone().moveBy(scrollX, scrollY);\n    if (isDomElement(absoluteRect._source)) {\n      const positionedAncestor = getPositionedAncestor(absoluteRect._source);\n      if (positionedAncestor) {\n        shiftRectToCompensatePositionedAncestor(absoluteRect, positionedAncestor);\n      }\n    }\n    return absoluteRect;\n  }\n  /**\n   * Excludes scrollbars and CSS borders from the rect.\n   *\n   * * Borders are removed when {@link #_source} is an HTML element.\n   * * Scrollbars are excluded from HTML elements and the `window`.\n   *\n   * @returns A rect which has been updated.\n   */\n  excludeScrollbarsAndBorders() {\n    const source = this._source;\n    let scrollBarWidth, scrollBarHeight, direction;\n    if (isWindow(source)) {\n      scrollBarWidth = source.innerWidth - source.document.documentElement.clientWidth;\n      scrollBarHeight = source.innerHeight - source.document.documentElement.clientHeight;\n      direction = source.getComputedStyle(source.document.documentElement).direction;\n    } else {\n      const borderWidths = getBorderWidths(source);\n      scrollBarWidth = source.offsetWidth - source.clientWidth - borderWidths.left - borderWidths.right;\n      scrollBarHeight = source.offsetHeight - source.clientHeight - borderWidths.top - borderWidths.bottom;\n      direction = source.ownerDocument.defaultView.getComputedStyle(source).direction;\n      this.left += borderWidths.left;\n      this.top += borderWidths.top;\n      this.right -= borderWidths.right;\n      this.bottom -= borderWidths.bottom;\n      this.width = this.right - this.left;\n      this.height = this.bottom - this.top;\n    }\n    this.width -= scrollBarWidth;\n    if (direction === \"ltr\") {\n      this.right -= scrollBarWidth;\n    } else {\n      this.left += scrollBarWidth;\n    }\n    this.height -= scrollBarHeight;\n    this.bottom -= scrollBarHeight;\n    return this;\n  }\n  /**\n   * Returns an array of rects of the given native DOM Range.\n   *\n   * @param range A native DOM range.\n   * @returns DOM Range rects.\n   */\n  static getDomRangeRects(range) {\n    const rects = [];\n    const clientRects = Array.from(range.getClientRects());\n    if (clientRects.length) {\n      for (const rect of clientRects) {\n        rects.push(new _Rect(rect));\n      }\n    } else {\n      let startContainer = range.startContainer;\n      if (isText(startContainer)) {\n        startContainer = startContainer.parentNode;\n      }\n      const rect = new _Rect(startContainer.getBoundingClientRect());\n      rect.right = rect.left;\n      rect.width = 0;\n      rects.push(rect);\n    }\n    return rects;\n  }\n  /**\n   * Returns a bounding rectangle that contains all the given `rects`.\n   *\n   * @param rects A list of rectangles that should be contained in the result rectangle.\n   * @returns Bounding rectangle or `null` if no `rects` were given.\n   */\n  static getBoundingRect(rects) {\n    const boundingRectData = {\n      left: Number.POSITIVE_INFINITY,\n      top: Number.POSITIVE_INFINITY,\n      right: Number.NEGATIVE_INFINITY,\n      bottom: Number.NEGATIVE_INFINITY,\n      width: 0,\n      height: 0\n    };\n    let rectangleCount = 0;\n    for (const rect of rects) {\n      rectangleCount++;\n      boundingRectData.left = Math.min(boundingRectData.left, rect.left);\n      boundingRectData.top = Math.min(boundingRectData.top, rect.top);\n      boundingRectData.right = Math.max(boundingRectData.right, rect.right);\n      boundingRectData.bottom = Math.max(boundingRectData.bottom, rect.bottom);\n    }\n    if (rectangleCount == 0) {\n      return null;\n    }\n    boundingRectData.width = boundingRectData.right - boundingRectData.left;\n    boundingRectData.height = boundingRectData.bottom - boundingRectData.top;\n    return new _Rect(boundingRectData);\n  }\n};\nfunction copyRectProperties(rect, source) {\n  for (const p of rectProperties) {\n    rect[p] = source[p];\n  }\n}\nfunction isBody(value) {\n  if (!isDomElement(value)) {\n    return false;\n  }\n  return value === value.ownerDocument.body;\n}\nfunction isDomElement(value) {\n  return value !== null && typeof value === \"object\" && value.nodeType === 1 && typeof value.getBoundingClientRect === \"function\";\n}\nfunction getElementPosition(element) {\n  return element instanceof HTMLElement ? element.ownerDocument.defaultView.getComputedStyle(element).position : \"static\";\n}\nfunction getElementOverflow(element) {\n  return element instanceof HTMLElement ? element.ownerDocument.defaultView.getComputedStyle(element).overflow : \"visible\";\n}\nfunction shiftRectToCompensatePositionedAncestor(rect, positionedElementAncestor) {\n  const ancestorPosition = new Rect(positionedElementAncestor);\n  const ancestorBorderWidths = getBorderWidths(positionedElementAncestor);\n  let moveX = 0;\n  let moveY = 0;\n  moveX -= ancestorPosition.left;\n  moveY -= ancestorPosition.top;\n  moveX += positionedElementAncestor.scrollLeft;\n  moveY += positionedElementAncestor.scrollTop;\n  moveX -= ancestorBorderWidths.left;\n  moveY -= ancestorBorderWidths.top;\n  rect.moveBy(moveX, moveY);\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/resizeobserver.js\nvar ResizeObserver = class _ResizeObserver {\n  /**\n   * Creates an instance of the `ResizeObserver` class.\n   *\n   * @param element A DOM element that is to be observed for resizing. Note that\n   * the element must be visible (i.e. not detached from DOM) for the observer to work.\n   * @param callback A function called when the observed element was resized. It passes\n   * the [`ResizeObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry)\n   * object with information about the resize event.\n   */\n  constructor(element, callback) {\n    if (!_ResizeObserver._observerInstance) {\n      _ResizeObserver._createObserver();\n    }\n    this._element = element;\n    this._callback = callback;\n    _ResizeObserver._addElementCallback(element, callback);\n    _ResizeObserver._observerInstance.observe(element);\n  }\n  /**\n   * The element observed by this observer.\n   */\n  get element() {\n    return this._element;\n  }\n  /**\n   * Destroys the observer which disables the `callback` passed to the {@link #constructor}.\n   */\n  destroy() {\n    _ResizeObserver._deleteElementCallback(this._element, this._callback);\n  }\n  /**\n   * Registers a new resize callback for the DOM element.\n   */\n  static _addElementCallback(element, callback) {\n    if (!_ResizeObserver._elementCallbacks) {\n      _ResizeObserver._elementCallbacks = /* @__PURE__ */ new Map();\n    }\n    let callbacks = _ResizeObserver._elementCallbacks.get(element);\n    if (!callbacks) {\n      callbacks = /* @__PURE__ */ new Set();\n      _ResizeObserver._elementCallbacks.set(element, callbacks);\n    }\n    callbacks.add(callback);\n  }\n  /**\n   * Removes a resize callback from the DOM element. If no callbacks are left\n   * for the element, it removes the element from the native observer.\n   */\n  static _deleteElementCallback(element, callback) {\n    const callbacks = _ResizeObserver._getElementCallbacks(element);\n    if (callbacks) {\n      callbacks.delete(callback);\n      if (!callbacks.size) {\n        _ResizeObserver._elementCallbacks.delete(element);\n        _ResizeObserver._observerInstance.unobserve(element);\n      }\n    }\n    if (_ResizeObserver._elementCallbacks && !_ResizeObserver._elementCallbacks.size) {\n      _ResizeObserver._observerInstance = null;\n      _ResizeObserver._elementCallbacks = null;\n    }\n  }\n  /**\n   * Returns are registered resize callbacks for the DOM element.\n   */\n  static _getElementCallbacks(element) {\n    if (!_ResizeObserver._elementCallbacks) {\n      return null;\n    }\n    return _ResizeObserver._elementCallbacks.get(element);\n  }\n  /**\n   * Creates the single native observer shared across all `ResizeObserver` instances.\n   */\n  static _createObserver() {\n    _ResizeObserver._observerInstance = new global_default.window.ResizeObserver((entries) => {\n      for (const entry of entries) {\n        const callbacks = _ResizeObserver._getElementCallbacks(entry.target);\n        if (callbacks) {\n          for (const callback of callbacks) {\n            callback(entry);\n          }\n        }\n      }\n    });\n  }\n};\nResizeObserver._observerInstance = null;\nResizeObserver._elementCallbacks = null;\nvar resizeobserver_default = ResizeObserver;\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/setdatainelement.js\nfunction setDataInElement(el, data) {\n  if (el instanceof HTMLTextAreaElement) {\n    el.value = data;\n  }\n  el.innerHTML = data;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/tounit.js\nfunction toUnit(unit) {\n  return (value) => value + unit;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/indexof.js\nfunction indexOf(node) {\n  let index = 0;\n  while (node.previousSibling) {\n    node = node.previousSibling;\n    index++;\n  }\n  return index;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/insertat.js\nfunction insertAt(parentElement, index, nodeToInsert) {\n  parentElement.insertBefore(nodeToInsert, parentElement.childNodes[index] || null);\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/iscomment.js\nfunction isComment(obj) {\n  return obj && obj.nodeType === Node.COMMENT_NODE;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/isvalidattributename.js\nfunction isValidAttributeName(name) {\n  try {\n    global_default.document.createAttribute(name);\n  } catch (error) {\n    return false;\n  }\n  return true;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/isvisible.js\nfunction isVisible(element) {\n  return !!(element && element.getClientRects && element.getClientRects().length);\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/position.js\nfunction getOptimalPosition({ element, target, positions, limiter, fitInViewport, viewportOffsetConfig }) {\n  if (isFunction_default(target)) {\n    target = target();\n  }\n  if (isFunction_default(limiter)) {\n    limiter = limiter();\n  }\n  const positionedElementAncestor = getPositionedAncestor(element);\n  const constrainedViewportRect = getConstrainedViewportRect(viewportOffsetConfig);\n  const elementRect = new Rect(element);\n  const visibleTargetRect = getVisibleViewportIntersectionRect(target, constrainedViewportRect);\n  let bestPosition;\n  if (!visibleTargetRect || !constrainedViewportRect.getIntersection(visibleTargetRect)) {\n    return null;\n  }\n  const positionOptions = {\n    targetRect: visibleTargetRect,\n    elementRect,\n    positionedElementAncestor,\n    viewportRect: constrainedViewportRect\n  };\n  if (!limiter && !fitInViewport) {\n    bestPosition = new PositionObject(positions[0], positionOptions);\n  } else {\n    if (limiter) {\n      const visibleLimiterRect = getVisibleViewportIntersectionRect(limiter, constrainedViewportRect);\n      if (visibleLimiterRect) {\n        positionOptions.limiterRect = visibleLimiterRect;\n      }\n    }\n    bestPosition = getBestPosition(positions, positionOptions);\n  }\n  return bestPosition;\n}\nfunction getVisibleViewportIntersectionRect(source, viewportRect) {\n  const visibleSourceRect = new Rect(source).getVisible();\n  if (!visibleSourceRect) {\n    return null;\n  }\n  return visibleSourceRect.getIntersection(viewportRect);\n}\nfunction getConstrainedViewportRect(viewportOffsetConfig) {\n  viewportOffsetConfig = Object.assign({ top: 0, bottom: 0, left: 0, right: 0 }, viewportOffsetConfig);\n  const viewportRect = new Rect(global_default.window);\n  viewportRect.top += viewportOffsetConfig.top;\n  viewportRect.height -= viewportOffsetConfig.top;\n  viewportRect.bottom -= viewportOffsetConfig.bottom;\n  viewportRect.height -= viewportOffsetConfig.bottom;\n  return viewportRect;\n}\nfunction getBestPosition(positions, options) {\n  const { elementRect } = options;\n  const elementRectArea = elementRect.getArea();\n  const positionInstances = positions.map((positioningFunction) => new PositionObject(positioningFunction, options)).filter((position) => !!position.name);\n  let maxFitFactor = 0;\n  let bestPosition = null;\n  for (const position of positionInstances) {\n    const { limiterIntersectionArea, viewportIntersectionArea } = position;\n    if (limiterIntersectionArea === elementRectArea) {\n      return position;\n    }\n    const fitFactor = viewportIntersectionArea ** 2 + limiterIntersectionArea ** 2;\n    if (fitFactor > maxFitFactor) {\n      maxFitFactor = fitFactor;\n      bestPosition = position;\n    }\n  }\n  return bestPosition;\n}\nvar PositionObject = class {\n  /**\n   * Creates an instance of the {@link module:utils/dom/position~PositionObject} class.\n   *\n   * @param positioningFunction function The function that defines the expected\n   * coordinates the positioned element should move to.\n   * @param options options object.\n   * @param options.elementRect The positioned element rect.\n   * @param options.targetRect The target element rect.\n   * @param options.viewportRect The viewport rect.\n   * @param options.limiterRect The limiter rect.\n   * @param options.positionedElementAncestor Nearest element ancestor element which CSS position is not \"static\".\n   */\n  constructor(positioningFunction, options) {\n    const positioningFunctionOutput = positioningFunction(options.targetRect, options.elementRect, options.viewportRect, options.limiterRect);\n    if (!positioningFunctionOutput) {\n      return;\n    }\n    const { left, top, name, config } = positioningFunctionOutput;\n    this.name = name;\n    this.config = config;\n    this._positioningFunctionCoordinates = { left, top };\n    this._options = options;\n  }\n  /**\n   * The left value in pixels in the CSS `position: absolute` coordinate system.\n   * Set it on the positioned element in DOM to move it to the position.\n   */\n  get left() {\n    return this._absoluteRect.left;\n  }\n  /**\n   * The top value in pixels in the CSS `position: absolute` coordinate system.\n   * Set it on the positioned element in DOM to move it to the position.\n   */\n  get top() {\n    return this._absoluteRect.top;\n  }\n  /**\n   * An intersection area between positioned element and limiter within viewport constraints.\n   */\n  get limiterIntersectionArea() {\n    const limiterRect = this._options.limiterRect;\n    if (limiterRect) {\n      return limiterRect.getIntersectionArea(this._rect);\n    }\n    return 0;\n  }\n  /**\n   * An intersection area between positioned element and viewport.\n   */\n  get viewportIntersectionArea() {\n    const viewportRect = this._options.viewportRect;\n    return viewportRect.getIntersectionArea(this._rect);\n  }\n  /**\n   * An already positioned element rect. A clone of the element rect passed to the constructor\n   * but placed in the viewport according to the positioning function.\n   */\n  get _rect() {\n    if (this._cachedRect) {\n      return this._cachedRect;\n    }\n    this._cachedRect = this._options.elementRect.clone().moveTo(this._positioningFunctionCoordinates.left, this._positioningFunctionCoordinates.top);\n    return this._cachedRect;\n  }\n  /**\n   * An already absolutely positioned element rect. See ({@link #_rect}).\n   */\n  get _absoluteRect() {\n    if (this._cachedAbsoluteRect) {\n      return this._cachedAbsoluteRect;\n    }\n    this._cachedAbsoluteRect = this._rect.toAbsoluteRect();\n    return this._cachedAbsoluteRect;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/remove.js\nfunction remove(node) {\n  const parent2 = node.parentNode;\n  if (parent2) {\n    parent2.removeChild(node);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/dom/scroll.js\nfunction scrollViewportToShowTarget({ target, viewportOffset = 0, ancestorOffset = 0, alignToTop, forceScroll }) {\n  const targetWindow = getWindow(target);\n  let currentWindow = targetWindow;\n  let currentFrame = null;\n  viewportOffset = normalizeViewportOffset(viewportOffset);\n  while (currentWindow) {\n    let firstAncestorToScroll;\n    if (currentWindow == targetWindow) {\n      firstAncestorToScroll = getParentElement(target);\n    } else {\n      firstAncestorToScroll = getParentElement(currentFrame);\n    }\n    scrollAncestorsToShowRect({\n      parent: firstAncestorToScroll,\n      getRect: () => {\n        return getRectRelativeToWindow(target, currentWindow);\n      },\n      alignToTop,\n      ancestorOffset,\n      forceScroll\n    });\n    const targetRect = getRectRelativeToWindow(target, currentWindow);\n    scrollWindowToShowRect({\n      window: currentWindow,\n      rect: targetRect,\n      viewportOffset,\n      alignToTop,\n      forceScroll\n    });\n    if (currentWindow.parent != currentWindow) {\n      currentFrame = currentWindow.frameElement;\n      currentWindow = currentWindow.parent;\n      if (!currentFrame) {\n        return;\n      }\n    } else {\n      currentWindow = null;\n    }\n  }\n}\nfunction scrollWindowToShowRect({ window: window2, rect, alignToTop, forceScroll, viewportOffset }) {\n  const targetShiftedDownRect = rect.clone().moveBy(0, viewportOffset.bottom);\n  const targetShiftedUpRect = rect.clone().moveBy(0, -viewportOffset.top);\n  const viewportRect = new Rect(window2).excludeScrollbarsAndBorders();\n  const rects = [targetShiftedUpRect, targetShiftedDownRect];\n  const forceScrollToTop = alignToTop && forceScroll;\n  const allRectsFitInViewport = rects.every((rect2) => viewportRect.contains(rect2));\n  let { scrollX, scrollY } = window2;\n  const initialScrollX = scrollX;\n  const initialScrollY = scrollY;\n  if (forceScrollToTop) {\n    scrollY -= viewportRect.top - rect.top + viewportOffset.top;\n  } else if (!allRectsFitInViewport) {\n    if (isAbove(targetShiftedUpRect, viewportRect)) {\n      scrollY -= viewportRect.top - rect.top + viewportOffset.top;\n    } else if (isBelow(targetShiftedDownRect, viewportRect)) {\n      if (alignToTop) {\n        scrollY += rect.top - viewportRect.top - viewportOffset.top;\n      } else {\n        scrollY += rect.bottom - viewportRect.bottom + viewportOffset.bottom;\n      }\n    }\n  }\n  if (!allRectsFitInViewport) {\n    if (isLeftOf(rect, viewportRect)) {\n      scrollX -= viewportRect.left - rect.left + viewportOffset.left;\n    } else if (isRightOf(rect, viewportRect)) {\n      scrollX += rect.right - viewportRect.right + viewportOffset.right;\n    }\n  }\n  if (scrollX != initialScrollX || scrollY !== initialScrollY) {\n    window2.scrollTo(scrollX, scrollY);\n  }\n}\nfunction scrollAncestorsToShowRect({ parent: parent2, getRect, alignToTop, forceScroll, ancestorOffset = 0, limiterElement }) {\n  const parentWindow = getWindow(parent2);\n  const forceScrollToTop = alignToTop && forceScroll;\n  let parentRect, targetRect, targetFitsInTarget;\n  const limiter = limiterElement || parentWindow.document.body;\n  while (parent2 != limiter) {\n    targetRect = getRect();\n    parentRect = new Rect(parent2).excludeScrollbarsAndBorders();\n    targetFitsInTarget = parentRect.contains(targetRect);\n    if (forceScrollToTop) {\n      parent2.scrollTop -= parentRect.top - targetRect.top + ancestorOffset;\n    } else if (!targetFitsInTarget) {\n      if (isAbove(targetRect, parentRect)) {\n        parent2.scrollTop -= parentRect.top - targetRect.top + ancestorOffset;\n      } else if (isBelow(targetRect, parentRect)) {\n        if (alignToTop) {\n          parent2.scrollTop += targetRect.top - parentRect.top - ancestorOffset;\n        } else {\n          parent2.scrollTop += targetRect.bottom - parentRect.bottom + ancestorOffset;\n        }\n      }\n    }\n    if (!targetFitsInTarget) {\n      if (isLeftOf(targetRect, parentRect)) {\n        parent2.scrollLeft -= parentRect.left - targetRect.left + ancestorOffset;\n      } else if (isRightOf(targetRect, parentRect)) {\n        parent2.scrollLeft += targetRect.right - parentRect.right + ancestorOffset;\n      }\n    }\n    parent2 = parent2.parentNode;\n  }\n}\nfunction isBelow(firstRect, secondRect) {\n  return firstRect.bottom > secondRect.bottom;\n}\nfunction isAbove(firstRect, secondRect) {\n  return firstRect.top < secondRect.top;\n}\nfunction isLeftOf(firstRect, secondRect) {\n  return firstRect.left < secondRect.left;\n}\nfunction isRightOf(firstRect, secondRect) {\n  return firstRect.right > secondRect.right;\n}\nfunction getWindow(elementOrRange) {\n  if (isRange(elementOrRange)) {\n    return elementOrRange.startContainer.ownerDocument.defaultView;\n  } else {\n    return elementOrRange.ownerDocument.defaultView;\n  }\n}\nfunction getParentElement(elementOrRange) {\n  if (isRange(elementOrRange)) {\n    let parent2 = elementOrRange.commonAncestorContainer;\n    if (isText(parent2)) {\n      parent2 = parent2.parentNode;\n    }\n    return parent2;\n  } else {\n    return elementOrRange.parentNode;\n  }\n}\nfunction getRectRelativeToWindow(target, relativeWindow) {\n  const targetWindow = getWindow(target);\n  const rect = new Rect(target);\n  if (targetWindow === relativeWindow) {\n    return rect;\n  } else {\n    let currentWindow = targetWindow;\n    while (currentWindow != relativeWindow) {\n      const frame = currentWindow.frameElement;\n      const frameRect = new Rect(frame).excludeScrollbarsAndBorders();\n      rect.moveBy(frameRect.left, frameRect.top);\n      currentWindow = currentWindow.parent;\n    }\n  }\n  return rect;\n}\nfunction normalizeViewportOffset(viewportOffset) {\n  if (typeof viewportOffset === \"number\") {\n    return {\n      top: viewportOffset,\n      bottom: viewportOffset,\n      left: viewportOffset,\n      right: viewportOffset\n    };\n  }\n  return viewportOffset;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/keyboard.js\nvar modifiersToGlyphsMac = {\n  ctrl: \"⌃\",\n  cmd: \"⌘\",\n  alt: \"⌥\",\n  shift: \"⇧\"\n};\nvar modifiersToGlyphsNonMac = {\n  ctrl: \"Ctrl+\",\n  alt: \"Alt+\",\n  shift: \"Shift+\"\n};\nvar keyCodes = generateKnownKeyCodes();\nvar keyCodeNames = Object.fromEntries(Object.entries(keyCodes).map(([name, code]) => [code, name.charAt(0).toUpperCase() + name.slice(1)]));\nfunction getCode(key) {\n  let keyCode;\n  if (typeof key == \"string\") {\n    keyCode = keyCodes[key.toLowerCase()];\n    if (!keyCode) {\n      throw new CKEditorError(\"keyboard-unknown-key\", null, { key });\n    }\n  } else {\n    keyCode = key.keyCode + (key.altKey ? keyCodes.alt : 0) + (key.ctrlKey ? keyCodes.ctrl : 0) + (key.shiftKey ? keyCodes.shift : 0) + (key.metaKey ? keyCodes.cmd : 0);\n  }\n  return keyCode;\n}\nfunction parseKeystroke(keystroke) {\n  if (typeof keystroke == \"string\") {\n    keystroke = splitKeystrokeText(keystroke);\n  }\n  return keystroke.map((key) => typeof key == \"string\" ? getEnvKeyCode(key) : key).reduce((key, sum) => sum + key, 0);\n}\nfunction getEnvKeystrokeText(keystroke) {\n  let keystrokeCode = parseKeystroke(keystroke);\n  const modifiersToGlyphs = Object.entries(env_default.isMac || env_default.isiOS ? modifiersToGlyphsMac : modifiersToGlyphsNonMac);\n  const modifiers = modifiersToGlyphs.reduce((modifiers2, [name, glyph]) => {\n    if ((keystrokeCode & keyCodes[name]) != 0) {\n      keystrokeCode &= ~keyCodes[name];\n      modifiers2 += glyph;\n    }\n    return modifiers2;\n  }, \"\");\n  return modifiers + (keystrokeCode ? keyCodeNames[keystrokeCode] : \"\");\n}\nfunction isArrowKeyCode(keyCode) {\n  return keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup || keyCode == keyCodes.arrowdown;\n}\nfunction getLocalizedArrowKeyCodeDirection(keyCode, contentLanguageDirection) {\n  const isLtrContent = contentLanguageDirection === \"ltr\";\n  switch (keyCode) {\n    case keyCodes.arrowleft:\n      return isLtrContent ? \"left\" : \"right\";\n    case keyCodes.arrowright:\n      return isLtrContent ? \"right\" : \"left\";\n    case keyCodes.arrowup:\n      return \"up\";\n    case keyCodes.arrowdown:\n      return \"down\";\n  }\n}\nfunction getEnvKeyCode(key) {\n  if (key.endsWith(\"!\")) {\n    return getCode(key.slice(0, -1));\n  }\n  const code = getCode(key);\n  return (env_default.isMac || env_default.isiOS) && code == keyCodes.ctrl ? keyCodes.cmd : code;\n}\nfunction isForwardArrowKeyCode(keyCode, contentLanguageDirection) {\n  const localizedKeyCodeDirection = getLocalizedArrowKeyCodeDirection(keyCode, contentLanguageDirection);\n  return localizedKeyCodeDirection === \"down\" || localizedKeyCodeDirection === \"right\";\n}\nfunction generateKnownKeyCodes() {\n  const keyCodes2 = {\n    arrowleft: 37,\n    arrowup: 38,\n    arrowright: 39,\n    arrowdown: 40,\n    backspace: 8,\n    delete: 46,\n    enter: 13,\n    space: 32,\n    esc: 27,\n    tab: 9,\n    // The idea about these numbers is that they do not collide with any real key codes, so we can use them\n    // like bit masks.\n    ctrl: 1114112,\n    shift: 2228224,\n    alt: 4456448,\n    cmd: 8912896\n  };\n  for (let code = 65; code <= 90; code++) {\n    const letter = String.fromCharCode(code);\n    keyCodes2[letter.toLowerCase()] = code;\n  }\n  for (let code = 48; code <= 57; code++) {\n    keyCodes2[code - 48] = code;\n  }\n  for (let code = 112; code <= 123; code++) {\n    keyCodes2[\"f\" + (code - 111)] = code;\n  }\n  for (const char of \"`-=[];',./\\\\\") {\n    keyCodes2[char] = char.charCodeAt(0);\n  }\n  return keyCodes2;\n}\nfunction splitKeystrokeText(keystroke) {\n  return keystroke.split(\"+\").map((key) => key.trim());\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/language.js\nvar RTL_LANGUAGE_CODES = [\n  \"ar\",\n  \"ara\",\n  \"fa\",\n  \"per\",\n  \"fas\",\n  \"he\",\n  \"heb\",\n  \"ku\",\n  \"kur\",\n  \"ug\",\n  \"uig\"\n  // Uighur, Uyghur\n];\nfunction getLanguageDirection(languageCode) {\n  return RTL_LANGUAGE_CODES.includes(languageCode) ? \"rtl\" : \"ltr\";\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/toarray.js\nfunction toArray(data) {\n  return Array.isArray(data) ? data : [data];\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/translation-service.js\nif (!global_default.window.CKEDITOR_TRANSLATIONS) {\n  global_default.window.CKEDITOR_TRANSLATIONS = {};\n}\nfunction _translate(language, message, quantity = 1) {\n  if (typeof quantity !== \"number\") {\n    throw new CKEditorError(\"translation-service-quantity-not-a-number\", null, { quantity });\n  }\n  const numberOfLanguages = getNumberOfLanguages();\n  if (numberOfLanguages === 1) {\n    language = Object.keys(global_default.window.CKEDITOR_TRANSLATIONS)[0];\n  }\n  const messageId = message.id || message.string;\n  if (numberOfLanguages === 0 || !hasTranslation(language, messageId)) {\n    if (quantity !== 1) {\n      return message.plural;\n    }\n    return message.string;\n  }\n  const dictionary = global_default.window.CKEDITOR_TRANSLATIONS[language].dictionary;\n  const getPluralForm = global_default.window.CKEDITOR_TRANSLATIONS[language].getPluralForm || ((n) => n === 1 ? 0 : 1);\n  const translation = dictionary[messageId];\n  if (typeof translation === \"string\") {\n    return translation;\n  }\n  const pluralFormIndex = Number(getPluralForm(quantity));\n  return translation[pluralFormIndex];\n}\nfunction hasTranslation(language, messageId) {\n  return !!global_default.window.CKEDITOR_TRANSLATIONS[language] && !!global_default.window.CKEDITOR_TRANSLATIONS[language].dictionary[messageId];\n}\nfunction getNumberOfLanguages() {\n  return Object.keys(global_default.window.CKEDITOR_TRANSLATIONS).length;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/locale.js\nvar Locale = class {\n  /**\n   * Creates a new instance of the locale class. Learn more about\n   * {@glink features/ui-language configuring the language of the editor}.\n   *\n   * @param options Locale configuration.\n   * @param options.uiLanguage The editor UI language code in the\n   * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. See {@link #uiLanguage}.\n   * @param options.contentLanguage The editor content language code in the\n   * [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format. If not specified, the same as `options.language`.\n   * See {@link #contentLanguage}.\n   */\n  constructor({ uiLanguage = \"en\", contentLanguage } = {}) {\n    this.uiLanguage = uiLanguage;\n    this.contentLanguage = contentLanguage || this.uiLanguage;\n    this.uiLanguageDirection = getLanguageDirection(this.uiLanguage);\n    this.contentLanguageDirection = getLanguageDirection(this.contentLanguage);\n    this.t = (message, values) => this._t(message, values);\n  }\n  /**\n   * The editor UI language code in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.\n   *\n   * **Note**: This property was deprecated. Please use {@link #uiLanguage} and {@link #contentLanguage}\n   * properties instead.\n   *\n   * @deprecated\n   */\n  get language() {\n    console.warn(\"locale-deprecated-language-property: The Locale#language property has been deprecated and will be removed in the near future. Please use #uiLanguage and #contentLanguage properties instead.\");\n    return this.uiLanguage;\n  }\n  /**\n   * An unbound version of the {@link #t} method.\n   */\n  _t(message, values = []) {\n    values = toArray(values);\n    if (typeof message === \"string\") {\n      message = { string: message };\n    }\n    const hasPluralForm = !!message.plural;\n    const quantity = hasPluralForm ? values[0] : 1;\n    const translatedString = _translate(this.uiLanguage, message, quantity);\n    return interpolateString(translatedString, values);\n  }\n};\nfunction interpolateString(string, values) {\n  return string.replace(/%(\\d+)/g, (match, index) => {\n    return index < values.length ? values[index] : match;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/collection.js\nvar Collection = class extends EmitterMixin() {\n  constructor(initialItemsOrOptions = {}, options = {}) {\n    super();\n    const hasInitialItems = isIterable(initialItemsOrOptions);\n    if (!hasInitialItems) {\n      options = initialItemsOrOptions;\n    }\n    this._items = [];\n    this._itemMap = /* @__PURE__ */ new Map();\n    this._idProperty = options.idProperty || \"id\";\n    this._bindToExternalToInternalMap = /* @__PURE__ */ new WeakMap();\n    this._bindToInternalToExternalMap = /* @__PURE__ */ new WeakMap();\n    this._skippedIndexesFromExternal = [];\n    if (hasInitialItems) {\n      for (const item of initialItemsOrOptions) {\n        this._items.push(item);\n        this._itemMap.set(this._getItemIdBeforeAdding(item), item);\n      }\n    }\n  }\n  /**\n   * The number of items available in the collection.\n   */\n  get length() {\n    return this._items.length;\n  }\n  /**\n   * Returns the first item from the collection or null when collection is empty.\n   */\n  get first() {\n    return this._items[0] || null;\n  }\n  /**\n   * Returns the last item from the collection or null when collection is empty.\n   */\n  get last() {\n    return this._items[this.length - 1] || null;\n  }\n  /**\n   * Adds an item into the collection.\n   *\n   * If the item does not have an id, then it will be automatically generated and set on the item.\n   *\n   * @param item\n   * @param index The position of the item in the collection. The item\n   * is pushed to the collection when `index` not specified.\n   * @fires add\n   * @fires change\n   */\n  add(item, index) {\n    return this.addMany([item], index);\n  }\n  /**\n   * Adds multiple items into the collection.\n   *\n   * Any item not containing an id will get an automatically generated one.\n   *\n   * @param items\n   * @param index The position of the insertion. Items will be appended if no `index` is specified.\n   * @fires add\n   * @fires change\n   */\n  addMany(items, index) {\n    if (index === void 0) {\n      index = this._items.length;\n    } else if (index > this._items.length || index < 0) {\n      throw new CKEditorError(\"collection-add-item-invalid-index\", this);\n    }\n    let offset = 0;\n    for (const item of items) {\n      const itemId = this._getItemIdBeforeAdding(item);\n      const currentItemIndex = index + offset;\n      this._items.splice(currentItemIndex, 0, item);\n      this._itemMap.set(itemId, item);\n      this.fire(\"add\", item, currentItemIndex);\n      offset++;\n    }\n    this.fire(\"change\", {\n      added: items,\n      removed: [],\n      index\n    });\n    return this;\n  }\n  /**\n   * Gets an item by its ID or index.\n   *\n   * @param idOrIndex The item ID or index in the collection.\n   * @returns The requested item or `null` if such item does not exist.\n   */\n  get(idOrIndex) {\n    let item;\n    if (typeof idOrIndex == \"string\") {\n      item = this._itemMap.get(idOrIndex);\n    } else if (typeof idOrIndex == \"number\") {\n      item = this._items[idOrIndex];\n    } else {\n      throw new CKEditorError(\"collection-get-invalid-arg\", this);\n    }\n    return item || null;\n  }\n  /**\n   * Returns a Boolean indicating whether the collection contains an item.\n   *\n   * @param itemOrId The item or its ID in the collection.\n   * @returns `true` if the collection contains the item, `false` otherwise.\n   */\n  has(itemOrId) {\n    if (typeof itemOrId == \"string\") {\n      return this._itemMap.has(itemOrId);\n    } else {\n      const idProperty = this._idProperty;\n      const id = itemOrId[idProperty];\n      return id && this._itemMap.has(id);\n    }\n  }\n  /**\n   * Gets an index of an item in the collection.\n   * When an item is not defined in the collection, the index will equal -1.\n   *\n   * @param itemOrId The item or its ID in the collection.\n   * @returns The index of a given item.\n   */\n  getIndex(itemOrId) {\n    let item;\n    if (typeof itemOrId == \"string\") {\n      item = this._itemMap.get(itemOrId);\n    } else {\n      item = itemOrId;\n    }\n    return item ? this._items.indexOf(item) : -1;\n  }\n  /**\n   * Removes an item from the collection.\n   *\n   * @param subject The item to remove, its ID or index in the collection.\n   * @returns The removed item.\n   * @fires remove\n   * @fires change\n   */\n  remove(subject) {\n    const [item, index] = this._remove(subject);\n    this.fire(\"change\", {\n      added: [],\n      removed: [item],\n      index\n    });\n    return item;\n  }\n  /**\n   * Executes the callback for each item in the collection and composes an array or values returned by this callback.\n   *\n   * @typeParam U The result type of the callback.\n   * @param callback\n   * @param ctx Context in which the `callback` will be called.\n   * @returns The result of mapping.\n   */\n  map(callback, ctx) {\n    return this._items.map(callback, ctx);\n  }\n  /**\n   * Performs the specified action for each item in the collection.\n   *\n   * @param ctx Context in which the `callback` will be called.\n   */\n  forEach(callback, ctx) {\n    this._items.forEach(callback, ctx);\n  }\n  /**\n   * Finds the first item in the collection for which the `callback` returns a true value.\n   *\n   * @param callback\n   * @param ctx Context in which the `callback` will be called.\n   * @returns The item for which `callback` returned a true value.\n   */\n  find(callback, ctx) {\n    return this._items.find(callback, ctx);\n  }\n  /**\n   * Returns an array with items for which the `callback` returned a true value.\n   *\n   * @param callback\n   * @param ctx Context in which the `callback` will be called.\n   * @returns The array with matching items.\n   */\n  filter(callback, ctx) {\n    return this._items.filter(callback, ctx);\n  }\n  /**\n   * Removes all items from the collection and destroys the binding created using\n   * {@link #bindTo}.\n   *\n   * @fires remove\n   * @fires change\n   */\n  clear() {\n    if (this._bindToCollection) {\n      this.stopListening(this._bindToCollection);\n      this._bindToCollection = null;\n    }\n    const removedItems = Array.from(this._items);\n    while (this.length) {\n      this._remove(0);\n    }\n    this.fire(\"change\", {\n      added: [],\n      removed: removedItems,\n      index: 0\n    });\n  }\n  /**\n   * Binds and synchronizes the collection with another one.\n   *\n   * The binding can be a simple factory:\n   *\n   * ```ts\n   * class FactoryClass {\n   * \tpublic label: string;\n   *\n   * \tconstructor( data: { label: string } ) {\n   * \t\tthis.label = data.label;\n   * \t}\n   * }\n   *\n   * const source = new Collection<{ label: string }>( { idProperty: 'label' } );\n   * const target = new Collection<FactoryClass>();\n   *\n   * target.bindTo( source ).as( FactoryClass );\n   *\n   * source.add( { label: 'foo' } );\n   * source.add( { label: 'bar' } );\n   *\n   * console.log( target.length ); // 2\n   * console.log( target.get( 1 ).label ); // 'bar'\n   *\n   * source.remove( 0 );\n   * console.log( target.length ); // 1\n   * console.log( target.get( 0 ).label ); // 'bar'\n   * ```\n   *\n   * or the factory driven by a custom callback:\n   *\n   * ```ts\n   * class FooClass {\n   * \tpublic label: string;\n   *\n   * \tconstructor( data: { label: string } ) {\n   * \t\tthis.label = data.label;\n   * \t}\n   * }\n   *\n   * class BarClass {\n   * \tpublic label: string;\n   *\n   * \tconstructor( data: { label: string } ) {\n   * \t\tthis.label = data.label;\n   * \t}\n   * }\n   *\n   * const source = new Collection<{ label: string }>( { idProperty: 'label' } );\n   * const target = new Collection<FooClass | BarClass>();\n   *\n   * target.bindTo( source ).using( ( item ) => {\n   * \tif ( item.label == 'foo' ) {\n   * \t\treturn new FooClass( item );\n   * \t} else {\n   * \t\treturn new BarClass( item );\n   * \t}\n   * } );\n   *\n   * source.add( { label: 'foo' } );\n   * source.add( { label: 'bar' } );\n   *\n   * console.log( target.length ); // 2\n   * console.log( target.get( 0 ) instanceof FooClass ); // true\n   * console.log( target.get( 1 ) instanceof BarClass ); // true\n   * ```\n   *\n   * or the factory out of property name:\n   *\n   * ```ts\n   * const source = new Collection<{ nested: { value: string } }>();\n   * const target = new Collection<{ value: string }>();\n   *\n   * target.bindTo( source ).using( 'nested' );\n   *\n   * source.add( { nested: { value: 'foo' } } );\n   * source.add( { nested: { value: 'bar' } } );\n   *\n   * console.log( target.length ); // 2\n   * console.log( target.get( 0 ).value ); // 'foo'\n   * console.log( target.get( 1 ).value ); // 'bar'\n   * ```\n   *\n   * It's possible to skip specified items by returning null value:\n   *\n   * ```ts\n   * const source = new Collection<{ hidden: boolean }>();\n   * const target = new Collection<{ hidden: boolean }>();\n   *\n   * target.bindTo( source ).using( item => {\n   * \tif ( item.hidden ) {\n   * \t\treturn null;\n   * \t}\n   *\n   * \treturn item;\n   * } );\n   *\n   * source.add( { hidden: true } );\n   * source.add( { hidden: false } );\n   *\n   * console.log( source.length ); // 2\n   * console.log( target.length ); // 1\n   * ```\n   *\n   * **Note**: {@link #clear} can be used to break the binding.\n   *\n   * @typeParam S The type of `externalCollection` element.\n   * @param externalCollection A collection to be bound.\n   * @returns The binding chain object.\n   */\n  bindTo(externalCollection) {\n    if (this._bindToCollection) {\n      throw new CKEditorError(\"collection-bind-to-rebind\", this);\n    }\n    this._bindToCollection = externalCollection;\n    return {\n      as: (Class) => {\n        this._setUpBindToBinding((item) => new Class(item));\n      },\n      using: (callbackOrProperty) => {\n        if (typeof callbackOrProperty == \"function\") {\n          this._setUpBindToBinding(callbackOrProperty);\n        } else {\n          this._setUpBindToBinding((item) => item[callbackOrProperty]);\n        }\n      }\n    };\n  }\n  /**\n   * Finalizes and activates a binding initiated by {@link #bindTo}.\n   *\n   * @param factory A function which produces collection items.\n   */\n  _setUpBindToBinding(factory) {\n    const externalCollection = this._bindToCollection;\n    const addItem = (evt, externalItem, index) => {\n      const isExternalBoundToThis = externalCollection._bindToCollection == this;\n      const externalItemBound = externalCollection._bindToInternalToExternalMap.get(externalItem);\n      if (isExternalBoundToThis && externalItemBound) {\n        this._bindToExternalToInternalMap.set(externalItem, externalItemBound);\n        this._bindToInternalToExternalMap.set(externalItemBound, externalItem);\n      } else {\n        const item = factory(externalItem);\n        if (!item) {\n          this._skippedIndexesFromExternal.push(index);\n          return;\n        }\n        let finalIndex = index;\n        for (const skipped of this._skippedIndexesFromExternal) {\n          if (index > skipped) {\n            finalIndex--;\n          }\n        }\n        for (const skipped of externalCollection._skippedIndexesFromExternal) {\n          if (finalIndex >= skipped) {\n            finalIndex++;\n          }\n        }\n        this._bindToExternalToInternalMap.set(externalItem, item);\n        this._bindToInternalToExternalMap.set(item, externalItem);\n        this.add(item, finalIndex);\n        for (let i = 0; i < externalCollection._skippedIndexesFromExternal.length; i++) {\n          if (finalIndex <= externalCollection._skippedIndexesFromExternal[i]) {\n            externalCollection._skippedIndexesFromExternal[i]++;\n          }\n        }\n      }\n    };\n    for (const externalItem of externalCollection) {\n      addItem(null, externalItem, externalCollection.getIndex(externalItem));\n    }\n    this.listenTo(externalCollection, \"add\", addItem);\n    this.listenTo(externalCollection, \"remove\", (evt, externalItem, index) => {\n      const item = this._bindToExternalToInternalMap.get(externalItem);\n      if (item) {\n        this.remove(item);\n      }\n      this._skippedIndexesFromExternal = this._skippedIndexesFromExternal.reduce((result, skipped) => {\n        if (index < skipped) {\n          result.push(skipped - 1);\n        }\n        if (index > skipped) {\n          result.push(skipped);\n        }\n        return result;\n      }, []);\n    });\n  }\n  /**\n   * Returns an unique id property for a given `item`.\n   *\n   * The method will generate new id and assign it to the `item` if it doesn't have any.\n   *\n   * @param item Item to be added.\n   */\n  _getItemIdBeforeAdding(item) {\n    const idProperty = this._idProperty;\n    let itemId;\n    if (idProperty in item) {\n      itemId = item[idProperty];\n      if (typeof itemId != \"string\") {\n        throw new CKEditorError(\"collection-add-invalid-id\", this);\n      }\n      if (this.get(itemId)) {\n        throw new CKEditorError(\"collection-add-item-already-exists\", this);\n      }\n    } else {\n      item[idProperty] = itemId = uid();\n    }\n    return itemId;\n  }\n  /**\n   * Core {@link #remove} method implementation shared in other functions.\n   *\n   * In contrast this method **does not** fire the {@link #event:change} event.\n   *\n   * @param subject The item to remove, its id or index in the collection.\n   * @returns Returns an array with the removed item and its index.\n   * @fires remove\n   */\n  _remove(subject) {\n    let index, id, item;\n    let itemDoesNotExist = false;\n    const idProperty = this._idProperty;\n    if (typeof subject == \"string\") {\n      id = subject;\n      item = this._itemMap.get(id);\n      itemDoesNotExist = !item;\n      if (item) {\n        index = this._items.indexOf(item);\n      }\n    } else if (typeof subject == \"number\") {\n      index = subject;\n      item = this._items[index];\n      itemDoesNotExist = !item;\n      if (item) {\n        id = item[idProperty];\n      }\n    } else {\n      item = subject;\n      id = item[idProperty];\n      index = this._items.indexOf(item);\n      itemDoesNotExist = index == -1 || !this._itemMap.get(id);\n    }\n    if (itemDoesNotExist) {\n      throw new CKEditorError(\"collection-remove-404\", this);\n    }\n    this._items.splice(index, 1);\n    this._itemMap.delete(id);\n    const externalItem = this._bindToInternalToExternalMap.get(item);\n    this._bindToInternalToExternalMap.delete(item);\n    this._bindToExternalToInternalMap.delete(externalItem);\n    this.fire(\"remove\", item, index);\n    return [item, index];\n  }\n  /**\n   * Iterable interface.\n   */\n  [Symbol.iterator]() {\n    return this._items[Symbol.iterator]();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/first.js\nfunction first(iterator) {\n  const iteratorItem = iterator.next();\n  if (iteratorItem.done) {\n    return null;\n  }\n  return iteratorItem.value;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/focustracker.js\nvar FocusTracker = class extends DomEmitterMixin(ObservableMixin()) {\n  constructor() {\n    super();\n    this._elements = /* @__PURE__ */ new Set();\n    this._nextEventLoopTimeout = null;\n    this.set(\"isFocused\", false);\n    this.set(\"focusedElement\", null);\n  }\n  /**\n   * Starts tracking the specified element.\n   */\n  add(element) {\n    if (this._elements.has(element)) {\n      throw new CKEditorError(\"focustracker-add-element-already-exist\", this);\n    }\n    this.listenTo(element, \"focus\", () => this._focus(element), { useCapture: true });\n    this.listenTo(element, \"blur\", () => this._blur(), { useCapture: true });\n    this._elements.add(element);\n  }\n  /**\n   * Stops tracking the specified element and stops listening on this element.\n   */\n  remove(element) {\n    if (element === this.focusedElement) {\n      this._blur();\n    }\n    if (this._elements.has(element)) {\n      this.stopListening(element);\n      this._elements.delete(element);\n    }\n  }\n  /**\n   * Destroys the focus tracker by:\n   * - Disabling all event listeners attached to tracked elements.\n   * - Removing all tracked elements that were previously added.\n   */\n  destroy() {\n    this.stopListening();\n  }\n  /**\n   * Stores currently focused element and set {@link #isFocused} as `true`.\n   */\n  _focus(element) {\n    clearTimeout(this._nextEventLoopTimeout);\n    this.focusedElement = element;\n    this.isFocused = true;\n  }\n  /**\n   * Clears currently focused element and set {@link #isFocused} as `false`.\n   * This method uses `setTimeout` to change order of fires `blur` and `focus` events.\n   */\n  _blur() {\n    clearTimeout(this._nextEventLoopTimeout);\n    this._nextEventLoopTimeout = setTimeout(() => {\n      this.focusedElement = null;\n      this.isFocused = false;\n    }, 0);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/keystrokehandler.js\nvar KeystrokeHandler = class {\n  /**\n   * Creates an instance of the keystroke handler.\n   */\n  constructor() {\n    this._listener = new (DomEmitterMixin())();\n  }\n  /**\n   * Starts listening for `keydown` events from a given emitter.\n   */\n  listenTo(emitter) {\n    this._listener.listenTo(emitter, \"keydown\", (evt, keyEvtData) => {\n      this._listener.fire(\"_keydown:\" + getCode(keyEvtData), keyEvtData);\n    });\n  }\n  /**\n   * Registers a handler for the specified keystroke.\n   *\n   * @param keystroke Keystroke defined in a format accepted by\n   * the {@link module:utils/keyboard~parseKeystroke} function.\n   * @param callback A function called with the\n   * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n   * a helper function to call both `preventDefault()` and `stopPropagation()` on the underlying event.\n   * @param options Additional options.\n   * @param options.priority The priority of the keystroke\n   * callback. The higher the priority value the sooner the callback will be executed. Keystrokes having the same priority\n   * are called in the order they were added.\n   */\n  set(keystroke, callback, options = {}) {\n    const keyCode = parseKeystroke(keystroke);\n    const priority = options.priority;\n    this._listener.listenTo(this._listener, \"_keydown:\" + keyCode, (evt, keyEvtData) => {\n      callback(keyEvtData, () => {\n        keyEvtData.preventDefault();\n        keyEvtData.stopPropagation();\n        evt.stop();\n      });\n      evt.return = true;\n    }, { priority });\n  }\n  /**\n   * Triggers a keystroke handler for a specified key combination, if such a keystroke was {@link #set defined}.\n   *\n   * @param keyEvtData Key event data.\n   * @returns Whether the keystroke was handled.\n   */\n  press(keyEvtData) {\n    return !!this._listener.fire(\"_keydown:\" + getCode(keyEvtData), keyEvtData);\n  }\n  /**\n   * Stops listening to `keydown` events from the given emitter.\n   */\n  stopListening(emitter) {\n    this._listener.stopListening(emitter);\n  }\n  /**\n   * Destroys the keystroke handler.\n   */\n  destroy() {\n    this.stopListening();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-utils/src/objecttomap.js\nfunction objectToMap(obj) {\n  const map = /* @__PURE__ */ new Map();\n  for (const key in obj) {\n    map.set(key, obj[key]);\n  }\n  return map;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/tomap.js\nfunction toMap(data) {\n  if (isIterable(data)) {\n    return new Map(data);\n  } else {\n    return objectToMap(data);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/splicearray.js\nvar BIG_CHUNK_SIZE = 1e4;\nfunction spliceArray(target, source, start, count2) {\n  if (Math.max(source.length, target.length) > BIG_CHUNK_SIZE) {\n    return target.slice(0, start).concat(source).concat(target.slice(start + count2, target.length));\n  } else {\n    const newTarget = Array.from(target);\n    newTarget.splice(start, count2, ...source);\n    return newTarget;\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/delay.js\nfunction delay(func, wait2) {\n  let timer;\n  function delayed(...args) {\n    delayed.cancel();\n    timer = setTimeout(() => func(...args), wait2);\n  }\n  delayed.cancel = () => {\n    clearTimeout(timer);\n  };\n  return delayed;\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/verifylicense.js\nfunction verifyLicense(token) {\n  function oldTokenCheck(token2) {\n    if (token2.length >= 40 && token2.length <= 255) {\n      return \"VALID\";\n    } else {\n      return \"INVALID\";\n    }\n  }\n  if (!token) {\n    return \"INVALID\";\n  }\n  let decryptedData = \"\";\n  try {\n    decryptedData = atob(token);\n  } catch (e) {\n    return \"INVALID\";\n  }\n  const splittedDecryptedData = decryptedData.split(\"-\");\n  const firstElement = splittedDecryptedData[0];\n  const secondElement = splittedDecryptedData[1];\n  if (!secondElement) {\n    return oldTokenCheck(token);\n  }\n  try {\n    atob(secondElement);\n  } catch (e) {\n    try {\n      atob(firstElement);\n      if (!atob(firstElement).length) {\n        return oldTokenCheck(token);\n      }\n    } catch (e2) {\n      return oldTokenCheck(token);\n    }\n  }\n  if (firstElement.length < 40 || firstElement.length > 255) {\n    return \"INVALID\";\n  }\n  let decryptedSecondElement = \"\";\n  try {\n    atob(firstElement);\n    decryptedSecondElement = atob(secondElement);\n  } catch (e) {\n    return \"INVALID\";\n  }\n  if (decryptedSecondElement.length !== 8) {\n    return \"INVALID\";\n  }\n  const year = Number(decryptedSecondElement.substring(0, 4));\n  const monthIndex = Number(decryptedSecondElement.substring(4, 6)) - 1;\n  const day = Number(decryptedSecondElement.substring(6, 8));\n  const date = new Date(year, monthIndex, day);\n  if (date < releaseDate || isNaN(Number(date))) {\n    return \"INVALID\";\n  }\n  return \"VALID\";\n}\n\n// node_modules/@ckeditor/ckeditor5-utils/src/unicode.js\nfunction isCombiningMark(character) {\n  return !!character && character.length == 1 && /[\\u0300-\\u036f\\u1ab0-\\u1aff\\u1dc0-\\u1dff\\u20d0-\\u20ff\\ufe20-\\ufe2f]/.test(character);\n}\nfunction isHighSurrogateHalf(character) {\n  return !!character && character.length == 1 && /[\\ud800-\\udbff]/.test(character);\n}\nfunction isLowSurrogateHalf(character) {\n  return !!character && character.length == 1 && /[\\udc00-\\udfff]/.test(character);\n}\nfunction isInsideSurrogatePair(string, offset) {\n  return isHighSurrogateHalf(string.charAt(offset - 1)) && isLowSurrogateHalf(string.charAt(offset));\n}\nfunction isInsideCombinedSymbol(string, offset) {\n  return isCombiningMark(string.charAt(offset));\n}\nvar EMOJI_PATTERN = buildEmojiRegexp();\nfunction isInsideEmojiSequence(string, offset) {\n  const matches = String(string).matchAll(EMOJI_PATTERN);\n  return Array.from(matches).some((match) => match.index < offset && offset < match.index + match[0].length);\n}\nfunction buildEmojiRegexp() {\n  const parts = [\n    // Emoji Tag Sequence (ETS)\n    new RegExp(\"\\\\p{Emoji}[\\\\u{E0020}-\\\\u{E007E}]+\\\\u{E007F}\", \"u\"),\n    // Emoji Keycap Sequence\n    new RegExp(\"\\\\p{Emoji}\\\\u{FE0F}?\\\\u{20E3}\", \"u\"),\n    // Emoji Presentation Sequence\n    new RegExp(\"\\\\p{Emoji}\\\\u{FE0F}\", \"u\"),\n    // Single-Character Emoji / Emoji Modifier Sequence\n    new RegExp(\"(?=\\\\p{General_Category=Other_Symbol})\\\\p{Emoji}\\\\p{Emoji_Modifier}*\", \"u\")\n  ];\n  const flagSequence = new RegExp(\"\\\\p{Regional_Indicator}{2}\", \"u\").source;\n  const emoji = \"(?:\" + parts.map((part) => part.source).join(\"|\") + \")\";\n  const sequence = `${flagSequence}|${emoji}(?:‍${emoji})*`;\n  return new RegExp(sequence, \"ug\");\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/plugin.js\nvar Plugin = class extends ObservableMixin() {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super();\n    this._disableStack = /* @__PURE__ */ new Set();\n    this.editor = editor;\n    this.set(\"isEnabled\", true);\n  }\n  /**\n   * Disables the plugin.\n   *\n   * Plugin may be disabled by multiple features or algorithms (at once). When disabling a plugin, unique id should be passed\n   * (e.g. feature name). The same identifier should be used when {@link #clearForceDisabled enabling back} the plugin.\n   * The plugin becomes enabled only after all features {@link #clearForceDisabled enabled it back}.\n   *\n   * Disabling and enabling a plugin:\n   *\n   * ```ts\n   * plugin.isEnabled; // -> true\n   * plugin.forceDisabled( 'MyFeature' );\n   * plugin.isEnabled; // -> false\n   * plugin.clearForceDisabled( 'MyFeature' );\n   * plugin.isEnabled; // -> true\n   * ```\n   *\n   * Plugin disabled by multiple features:\n   *\n   * ```ts\n   * plugin.forceDisabled( 'MyFeature' );\n   * plugin.forceDisabled( 'OtherFeature' );\n   * plugin.clearForceDisabled( 'MyFeature' );\n   * plugin.isEnabled; // -> false\n   * plugin.clearForceDisabled( 'OtherFeature' );\n   * plugin.isEnabled; // -> true\n   * ```\n   *\n   * Multiple disabling with the same identifier is redundant:\n   *\n   * ```ts\n   * plugin.forceDisabled( 'MyFeature' );\n   * plugin.forceDisabled( 'MyFeature' );\n   * plugin.clearForceDisabled( 'MyFeature' );\n   * plugin.isEnabled; // -> true\n   * ```\n   *\n   * **Note:** some plugins or algorithms may have more complex logic when it comes to enabling or disabling certain plugins,\n   * so the plugin might be still disabled after {@link #clearForceDisabled} was used.\n   *\n   * @param id Unique identifier for disabling. Use the same id when {@link #clearForceDisabled enabling back} the plugin.\n   */\n  forceDisabled(id) {\n    this._disableStack.add(id);\n    if (this._disableStack.size == 1) {\n      this.on(\"set:isEnabled\", forceDisable, { priority: \"highest\" });\n      this.isEnabled = false;\n    }\n  }\n  /**\n   * Clears forced disable previously set through {@link #forceDisabled}. See {@link #forceDisabled}.\n   *\n   * @param id Unique identifier, equal to the one passed in {@link #forceDisabled} call.\n   */\n  clearForceDisabled(id) {\n    this._disableStack.delete(id);\n    if (this._disableStack.size == 0) {\n      this.off(\"set:isEnabled\", forceDisable);\n      this.isEnabled = true;\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this.stopListening();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get isContextPlugin() {\n    return false;\n  }\n};\nfunction forceDisable(evt) {\n  evt.return = false;\n  evt.stop();\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/plugincollection.js\nvar PluginCollection = class extends EmitterMixin() {\n  /**\n   * Creates an instance of the plugin collection class.\n   * Allows loading and initializing plugins and their dependencies.\n   * Allows providing a list of already loaded plugins. These plugins will not be destroyed along with this collection.\n   *\n   * @param availablePlugins Plugins (constructors) which the collection will be able to use\n   * when {@link module:core/plugincollection~PluginCollection#init} is used with the plugin names (strings, instead of constructors).\n   * Usually, the editor will pass its built-in plugins to the collection so they can later be\n   * used in `config.plugins` or `config.removePlugins` by names.\n   * @param contextPlugins A list of already initialized plugins represented by a `[ PluginConstructor, pluginInstance ]` pair.\n   */\n  constructor(context, availablePlugins = [], contextPlugins = []) {\n    super();\n    this._plugins = /* @__PURE__ */ new Map();\n    this._context = context;\n    this._availablePlugins = /* @__PURE__ */ new Map();\n    for (const PluginConstructor of availablePlugins) {\n      if (PluginConstructor.pluginName) {\n        this._availablePlugins.set(PluginConstructor.pluginName, PluginConstructor);\n      }\n    }\n    this._contextPlugins = /* @__PURE__ */ new Map();\n    for (const [PluginConstructor, pluginInstance] of contextPlugins) {\n      this._contextPlugins.set(PluginConstructor, pluginInstance);\n      this._contextPlugins.set(pluginInstance, PluginConstructor);\n      if (PluginConstructor.pluginName) {\n        this._availablePlugins.set(PluginConstructor.pluginName, PluginConstructor);\n      }\n    }\n  }\n  /**\n   * Iterable interface.\n   *\n   * Returns `[ PluginConstructor, pluginInstance ]` pairs.\n   */\n  *[Symbol.iterator]() {\n    for (const entry of this._plugins) {\n      if (typeof entry[0] == \"function\") {\n        yield entry;\n      }\n    }\n  }\n  /**\n   * Gets the plugin instance by its constructor or name.\n   *\n   * ```ts\n   * // Check if 'Clipboard' plugin was loaded.\n   * if ( editor.plugins.has( 'ClipboardPipeline' ) ) {\n   * \t// Get clipboard plugin instance\n   * \tconst clipboard = editor.plugins.get( 'ClipboardPipeline' );\n   *\n   * \tthis.listenTo( clipboard, 'inputTransformation', ( evt, data ) => {\n   * \t\t// Do something on clipboard input.\n   * \t} );\n   * }\n   * ```\n   *\n   * **Note**: This method will throw an error if a plugin is not loaded. Use `{@link #has editor.plugins.has()}`\n   * to check if a plugin is available.\n   *\n   * @param key The plugin constructor or {@link module:core/plugin~PluginStaticMembers#pluginName name}.\n   */\n  get(key) {\n    const plugin = this._plugins.get(key);\n    if (!plugin) {\n      let pluginName = key;\n      if (typeof key == \"function\") {\n        pluginName = key.pluginName || key.name;\n      }\n      throw new CKEditorError(\"plugincollection-plugin-not-loaded\", this._context, { plugin: pluginName });\n    }\n    return plugin;\n  }\n  /**\n   * Checks if a plugin is loaded.\n   *\n   * ```ts\n   * // Check if the 'Clipboard' plugin was loaded.\n   * if ( editor.plugins.has( 'ClipboardPipeline' ) ) {\n   * \t// Now use the clipboard plugin instance:\n   * \tconst clipboard = editor.plugins.get( 'ClipboardPipeline' );\n   *\n   * \t// ...\n   * }\n   * ```\n   *\n   * @param key The plugin constructor or {@link module:core/plugin~PluginStaticMembers#pluginName name}.\n   */\n  has(key) {\n    return this._plugins.has(key);\n  }\n  /**\n   * Initializes a set of plugins and adds them to the collection.\n   *\n   * @param plugins An array of {@link module:core/plugin~PluginInterface plugin constructors}\n   * or {@link module:core/plugin~PluginStaticMembers#pluginName plugin names}.\n   * @param pluginsToRemove Names of the plugins or plugin constructors\n   * that should not be loaded (despite being specified in the `plugins` array).\n   * @param pluginsSubstitutions An array of {@link module:core/plugin~PluginInterface plugin constructors}\n   * that will be used to replace plugins of the same names that were passed in `plugins` or that are in their dependency tree.\n   * A useful option for replacing built-in plugins while creating tests (for mocking their APIs). Plugins that will be replaced\n   * must follow these rules:\n   *   * The new plugin must be a class.\n   *   * The new plugin must be named.\n   *   * Both plugins must not depend on other plugins.\n   * @returns A promise which gets resolved once all plugins are loaded and available in the collection.\n   */\n  init(plugins, pluginsToRemove = [], pluginsSubstitutions = []) {\n    const that = this;\n    const context = this._context;\n    findAvailablePluginConstructors(plugins);\n    validatePlugins(plugins);\n    const pluginsToLoad = plugins.filter((plugin) => !isPluginRemoved(plugin, pluginsToRemove));\n    const pluginConstructors = [...getPluginConstructors(pluginsToLoad)];\n    substitutePlugins(pluginConstructors, pluginsSubstitutions);\n    const pluginInstances = loadPlugins(pluginConstructors);\n    return initPlugins(pluginInstances, \"init\").then(() => initPlugins(pluginInstances, \"afterInit\")).then(() => pluginInstances);\n    function isPluginConstructor(plugin) {\n      return typeof plugin === \"function\";\n    }\n    function isContextPlugin(plugin) {\n      return isPluginConstructor(plugin) && !!plugin.isContextPlugin;\n    }\n    function isPluginRemoved(plugin, pluginsToRemove2) {\n      return pluginsToRemove2.some((removedPlugin) => {\n        if (removedPlugin === plugin) {\n          return true;\n        }\n        if (getPluginName(plugin) === removedPlugin) {\n          return true;\n        }\n        if (getPluginName(removedPlugin) === plugin) {\n          return true;\n        }\n        return false;\n      });\n    }\n    function getPluginName(plugin) {\n      return isPluginConstructor(plugin) ? plugin.pluginName || plugin.name : plugin;\n    }\n    function findAvailablePluginConstructors(plugins2, processed = /* @__PURE__ */ new Set()) {\n      plugins2.forEach((plugin) => {\n        if (!isPluginConstructor(plugin)) {\n          return;\n        }\n        if (processed.has(plugin)) {\n          return;\n        }\n        processed.add(plugin);\n        if (plugin.pluginName && !that._availablePlugins.has(plugin.pluginName)) {\n          that._availablePlugins.set(plugin.pluginName, plugin);\n        }\n        if (plugin.requires) {\n          findAvailablePluginConstructors(plugin.requires, processed);\n        }\n      });\n    }\n    function getPluginConstructors(plugins2, processed = /* @__PURE__ */ new Set()) {\n      return plugins2.map((plugin) => {\n        return isPluginConstructor(plugin) ? plugin : that._availablePlugins.get(plugin);\n      }).reduce((result, plugin) => {\n        if (processed.has(plugin)) {\n          return result;\n        }\n        processed.add(plugin);\n        if (plugin.requires) {\n          validatePlugins(plugin.requires, plugin);\n          getPluginConstructors(plugin.requires, processed).forEach((plugin2) => result.add(plugin2));\n        }\n        return result.add(plugin);\n      }, /* @__PURE__ */ new Set());\n    }\n    function validatePlugins(plugins2, parentPluginConstructor = null) {\n      plugins2.map((plugin) => {\n        return isPluginConstructor(plugin) ? plugin : that._availablePlugins.get(plugin) || plugin;\n      }).forEach((plugin) => {\n        checkMissingPlugin(plugin, parentPluginConstructor);\n        checkContextPlugin(plugin, parentPluginConstructor);\n        checkRemovedPlugin(plugin, parentPluginConstructor);\n      });\n    }\n    function checkMissingPlugin(plugin, parentPluginConstructor) {\n      if (isPluginConstructor(plugin)) {\n        return;\n      }\n      if (parentPluginConstructor) {\n        throw new CKEditorError(\"plugincollection-soft-required\", context, { missingPlugin: plugin, requiredBy: getPluginName(parentPluginConstructor) });\n      }\n      throw new CKEditorError(\"plugincollection-plugin-not-found\", context, { plugin });\n    }\n    function checkContextPlugin(plugin, parentPluginConstructor) {\n      if (!isContextPlugin(parentPluginConstructor)) {\n        return;\n      }\n      if (isContextPlugin(plugin)) {\n        return;\n      }\n      throw new CKEditorError(\"plugincollection-context-required\", context, { plugin: getPluginName(plugin), requiredBy: getPluginName(parentPluginConstructor) });\n    }\n    function checkRemovedPlugin(plugin, parentPluginConstructor) {\n      if (!parentPluginConstructor) {\n        return;\n      }\n      if (!isPluginRemoved(plugin, pluginsToRemove)) {\n        return;\n      }\n      throw new CKEditorError(\"plugincollection-required\", context, { plugin: getPluginName(plugin), requiredBy: getPluginName(parentPluginConstructor) });\n    }\n    function loadPlugins(pluginConstructors2) {\n      return pluginConstructors2.map((PluginConstructor) => {\n        let pluginInstance = that._contextPlugins.get(PluginConstructor);\n        pluginInstance = pluginInstance || new PluginConstructor(context);\n        that._add(PluginConstructor, pluginInstance);\n        return pluginInstance;\n      });\n    }\n    function initPlugins(pluginInstances2, method) {\n      return pluginInstances2.reduce((promise, plugin) => {\n        if (!plugin[method]) {\n          return promise;\n        }\n        if (that._contextPlugins.has(plugin)) {\n          return promise;\n        }\n        return promise.then(plugin[method].bind(plugin));\n      }, Promise.resolve());\n    }\n    function substitutePlugins(pluginConstructors2, pluginsSubstitutions2) {\n      for (const pluginItem of pluginsSubstitutions2) {\n        if (typeof pluginItem != \"function\") {\n          throw new CKEditorError(\"plugincollection-replace-plugin-invalid-type\", null, { pluginItem });\n        }\n        const pluginName = pluginItem.pluginName;\n        if (!pluginName) {\n          throw new CKEditorError(\"plugincollection-replace-plugin-missing-name\", null, { pluginItem });\n        }\n        if (pluginItem.requires && pluginItem.requires.length) {\n          throw new CKEditorError(\"plugincollection-plugin-for-replacing-cannot-have-dependencies\", null, { pluginName });\n        }\n        const pluginToReplace = that._availablePlugins.get(pluginName);\n        if (!pluginToReplace) {\n          throw new CKEditorError(\"plugincollection-plugin-for-replacing-not-exist\", null, { pluginName });\n        }\n        const indexInPluginConstructors = pluginConstructors2.indexOf(pluginToReplace);\n        if (indexInPluginConstructors === -1) {\n          if (that._contextPlugins.has(pluginToReplace)) {\n            return;\n          }\n          throw new CKEditorError(\"plugincollection-plugin-for-replacing-not-loaded\", null, { pluginName });\n        }\n        if (pluginToReplace.requires && pluginToReplace.requires.length) {\n          throw new CKEditorError(\"plugincollection-replaced-plugin-cannot-have-dependencies\", null, { pluginName });\n        }\n        pluginConstructors2.splice(indexInPluginConstructors, 1, pluginItem);\n        that._availablePlugins.set(pluginName, pluginItem);\n      }\n    }\n  }\n  /**\n   * Destroys all loaded plugins.\n   */\n  destroy() {\n    const promises = [];\n    for (const [, pluginInstance] of this) {\n      if (typeof pluginInstance.destroy == \"function\" && !this._contextPlugins.has(pluginInstance)) {\n        promises.push(pluginInstance.destroy());\n      }\n    }\n    return Promise.all(promises);\n  }\n  /**\n   * Adds the plugin to the collection. Exposed mainly for testing purposes.\n   *\n   * @param PluginConstructor The plugin constructor.\n   * @param plugin The instance of the plugin.\n   */\n  _add(PluginConstructor, plugin) {\n    this._plugins.set(PluginConstructor, plugin);\n    const pluginName = PluginConstructor.pluginName;\n    if (!pluginName) {\n      return;\n    }\n    if (this._plugins.has(pluginName)) {\n      throw new CKEditorError(\"plugincollection-plugin-name-conflict\", null, { pluginName, plugin1: this._plugins.get(pluginName).constructor, plugin2: PluginConstructor });\n    }\n    this._plugins.set(pluginName, plugin);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/context.js\nvar Context = class {\n  /**\n   * Creates a context instance with a given configuration.\n   *\n   * Usually not to be used directly. See the static {@link module:core/context~Context.create `create()`} method.\n   *\n   * @param config The context configuration.\n   */\n  constructor(config) {\n    this._contextOwner = null;\n    this.config = new Config(config, this.constructor.defaultConfig);\n    const availablePlugins = this.constructor.builtinPlugins;\n    this.config.define(\"plugins\", availablePlugins);\n    this.plugins = new PluginCollection(this, availablePlugins);\n    const languageConfig = this.config.get(\"language\") || {};\n    this.locale = new Locale({\n      uiLanguage: typeof languageConfig === \"string\" ? languageConfig : languageConfig.ui,\n      contentLanguage: this.config.get(\"language.content\")\n    });\n    this.t = this.locale.t;\n    this.editors = new Collection();\n  }\n  /**\n   * Loads and initializes plugins specified in the configuration.\n   *\n   * @returns A promise which resolves once the initialization is completed, providing an array of loaded plugins.\n   */\n  initPlugins() {\n    const plugins = this.config.get(\"plugins\") || [];\n    const substitutePlugins = this.config.get(\"substitutePlugins\") || [];\n    for (const Plugin2 of plugins.concat(substitutePlugins)) {\n      if (typeof Plugin2 != \"function\") {\n        throw new CKEditorError(\"context-initplugins-constructor-only\", null, { Plugin: Plugin2 });\n      }\n      if (Plugin2.isContextPlugin !== true) {\n        throw new CKEditorError(\"context-initplugins-invalid-plugin\", null, { Plugin: Plugin2 });\n      }\n    }\n    return this.plugins.init(plugins, [], substitutePlugins);\n  }\n  /**\n   * Destroys the context instance and all editors used with the context,\n   * releasing all resources used by the context.\n   *\n   * @returns A promise that resolves once the context instance is fully destroyed.\n   */\n  destroy() {\n    return Promise.all(Array.from(this.editors, (editor) => editor.destroy())).then(() => this.plugins.destroy());\n  }\n  /**\n   * Adds a reference to the editor which is used with this context.\n   *\n   * When the given editor has created the context, the reference to this editor will be stored\n   * as a {@link ~Context#_contextOwner}.\n   *\n   * This method should only be used by the editor.\n   *\n   * @internal\n   * @param isContextOwner Stores the given editor as a context owner.\n   */\n  _addEditor(editor, isContextOwner) {\n    if (this._contextOwner) {\n      throw new CKEditorError(\"context-addeditor-private-context\");\n    }\n    this.editors.add(editor);\n    if (isContextOwner) {\n      this._contextOwner = editor;\n    }\n  }\n  /**\n   * Removes a reference to the editor which was used with this context.\n   * When the context was created by the given editor, the context will be destroyed.\n   *\n   * This method should only be used by the editor.\n   *\n   * @internal\n   * @return A promise that resolves once the editor is removed from the context or when the context was destroyed.\n   */\n  _removeEditor(editor) {\n    if (this.editors.has(editor)) {\n      this.editors.remove(editor);\n    }\n    if (this._contextOwner === editor) {\n      return this.destroy();\n    }\n    return Promise.resolve();\n  }\n  /**\n   * Returns the context configuration which will be copied to the editors created using this context.\n   *\n   * The configuration returned by this method has the plugins configuration removed &ndash; plugins are shared with all editors\n   * through another mechanism.\n   *\n   * This method should only be used by the editor.\n   *\n   * @internal\n   * @returns Configuration as a plain object.\n   */\n  _getEditorConfig() {\n    const result = {};\n    for (const name of this.config.names()) {\n      if (![\"plugins\", \"removePlugins\", \"extraPlugins\"].includes(name)) {\n        result[name] = this.config.get(name);\n      }\n    }\n    return result;\n  }\n  /**\n   * Creates and initializes a new context instance.\n   *\n   * ```ts\n   * const commonConfig = { ... }; // Configuration for all the plugins and editors.\n   * const editorPlugins = [ ... ]; // Regular plugins here.\n   *\n   * Context\n   * \t.create( {\n   * \t\t// Only context plugins here.\n   * \t\tplugins: [ ... ],\n   *\n   * \t\t// Configure the language for all the editors (it cannot be overwritten).\n   * \t\tlanguage: { ... },\n   *\n   * \t\t// Configuration for context plugins.\n   * \t\tcomments: { ... },\n   * \t\t...\n   *\n   * \t\t// Default configuration for editor plugins.\n   * \t\ttoolbar: { ... },\n   * \t\timage: { ... },\n   * \t\t...\n   * \t} )\n   * \t.then( context => {\n   * \t\tconst promises = [];\n   *\n   * \t\tpromises.push( ClassicEditor.create(\n   * \t\t\tdocument.getElementById( 'editor1' ),\n   * \t\t\t{\n   * \t\t\t\teditorPlugins,\n   * \t\t\t\tcontext\n   * \t\t\t}\n   * \t\t) );\n   *\n   * \t\tpromises.push( ClassicEditor.create(\n   * \t\t\tdocument.getElementById( 'editor2' ),\n   * \t\t\t{\n   * \t\t\t\teditorPlugins,\n   * \t\t\t\tcontext,\n   * \t\t\t\ttoolbar: { ... } // You can overwrite the configuration of the context.\n   * \t\t\t}\n   * \t\t) );\n   *\n   * \t\treturn Promise.all( promises );\n   * \t} );\n   * ```\n   *\n   * @param config The context configuration.\n   * @returns A promise resolved once the context is ready. The promise resolves with the created context instance.\n   */\n  static create(config) {\n    return new Promise((resolve) => {\n      const context = new this(config);\n      resolve(context.initPlugins().then(() => context));\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/contextplugin.js\nvar ContextPlugin = class extends ObservableMixin() {\n  /**\n   * Creates a new plugin instance.\n   */\n  constructor(context) {\n    super();\n    this.context = context;\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this.stopListening();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get isContextPlugin() {\n    return true;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/placeholder.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-engine/theme/placeholder.css\";\nvar documentPlaceholders = /* @__PURE__ */ new WeakMap();\nvar hasDisplayedPlaceholderDeprecationWarning = false;\nfunction enablePlaceholder({ view, element, text: text2, isDirectHost = true, keepOnFocus = false }) {\n  const doc = view.document;\n  if (!documentPlaceholders.has(doc)) {\n    documentPlaceholders.set(doc, /* @__PURE__ */ new Map());\n    doc.registerPostFixer((writer) => updateDocumentPlaceholders(doc, writer));\n    doc.on(\"change:isComposing\", () => {\n      view.change((writer) => updateDocumentPlaceholders(doc, writer));\n    }, { priority: \"high\" });\n  }\n  if (element.is(\"editableElement\")) {\n    element.on(\"change:placeholder\", (evtInfo, evt, text3) => {\n      setPlaceholder(text3);\n    });\n  }\n  if (element.placeholder) {\n    setPlaceholder(element.placeholder);\n  } else if (text2) {\n    setPlaceholder(text2);\n  }\n  if (text2) {\n    showPlaceholderTextDeprecationWarning();\n  }\n  function setPlaceholder(text3) {\n    documentPlaceholders.get(doc).set(element, {\n      text: text3,\n      isDirectHost,\n      keepOnFocus,\n      hostElement: isDirectHost ? element : null\n    });\n    view.change((writer) => updateDocumentPlaceholders(doc, writer));\n  }\n}\nfunction showPlaceholder(writer, element) {\n  if (!element.hasClass(\"ck-placeholder\")) {\n    writer.addClass(\"ck-placeholder\", element);\n    return true;\n  }\n  return false;\n}\nfunction hidePlaceholder(writer, element) {\n  if (element.hasClass(\"ck-placeholder\")) {\n    writer.removeClass(\"ck-placeholder\", element);\n    return true;\n  }\n  return false;\n}\nfunction needsPlaceholder(element, keepOnFocus) {\n  if (!element.isAttached()) {\n    return false;\n  }\n  const hasContent = Array.from(element.getChildren()).some((element2) => !element2.is(\"uiElement\"));\n  if (hasContent) {\n    return false;\n  }\n  const doc = element.document;\n  const viewSelection = doc.selection;\n  const selectionAnchor = viewSelection.anchor;\n  if (doc.isComposing && selectionAnchor && selectionAnchor.parent === element) {\n    return false;\n  }\n  if (keepOnFocus) {\n    return true;\n  }\n  if (!doc.isFocused) {\n    return true;\n  }\n  return !!selectionAnchor && selectionAnchor.parent !== element;\n}\nfunction updateDocumentPlaceholders(doc, writer) {\n  const placeholders = documentPlaceholders.get(doc);\n  const directHostElements = [];\n  let wasViewModified = false;\n  for (const [element, config] of placeholders) {\n    if (config.isDirectHost) {\n      directHostElements.push(element);\n      if (updatePlaceholder(writer, element, config)) {\n        wasViewModified = true;\n      }\n    }\n  }\n  for (const [element, config] of placeholders) {\n    if (config.isDirectHost) {\n      continue;\n    }\n    const hostElement = getChildPlaceholderHostSubstitute(element);\n    if (!hostElement) {\n      continue;\n    }\n    if (directHostElements.includes(hostElement)) {\n      continue;\n    }\n    config.hostElement = hostElement;\n    if (updatePlaceholder(writer, element, config)) {\n      wasViewModified = true;\n    }\n  }\n  return wasViewModified;\n}\nfunction updatePlaceholder(writer, element, config) {\n  const { text: text2, isDirectHost, hostElement } = config;\n  let wasViewModified = false;\n  if (hostElement.getAttribute(\"data-placeholder\") !== text2) {\n    writer.setAttribute(\"data-placeholder\", text2, hostElement);\n    wasViewModified = true;\n  }\n  const isOnlyChild = isDirectHost || element.childCount == 1;\n  if (isOnlyChild && needsPlaceholder(hostElement, config.keepOnFocus)) {\n    if (showPlaceholder(writer, hostElement)) {\n      wasViewModified = true;\n    }\n  } else if (hidePlaceholder(writer, hostElement)) {\n    wasViewModified = true;\n  }\n  return wasViewModified;\n}\nfunction getChildPlaceholderHostSubstitute(parent2) {\n  if (parent2.childCount) {\n    const firstChild = parent2.getChild(0);\n    if (firstChild.is(\"element\") && !firstChild.is(\"uiElement\") && !firstChild.is(\"attributeElement\")) {\n      return firstChild;\n    }\n  }\n  return null;\n}\nfunction showPlaceholderTextDeprecationWarning() {\n  if (!hasDisplayedPlaceholderDeprecationWarning) {\n    logWarning(\"enableplaceholder-deprecated-text-option\");\n  }\n  hasDisplayedPlaceholderDeprecationWarning = true;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/typecheckable.js\nvar TypeCheckable = class {\n  /* istanbul ignore next -- @preserve */\n  is() {\n    throw new Error(\"is() method is abstract\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/node.js\nvar Node2 = class extends EmitterMixin(TypeCheckable) {\n  /**\n   * Creates a tree view node.\n   *\n   * @param document The document instance to which this node belongs.\n   */\n  constructor(document2) {\n    super();\n    this.document = document2;\n    this.parent = null;\n  }\n  /**\n   * Index of the node in the parent element or null if the node has no parent.\n   *\n   * Accessing this property throws an error if this node's parent element does not contain it.\n   * This means that view tree got broken.\n   */\n  get index() {\n    let pos;\n    if (!this.parent) {\n      return null;\n    }\n    if ((pos = this.parent.getChildIndex(this)) == -1) {\n      throw new CKEditorError(\"view-node-not-found-in-parent\", this);\n    }\n    return pos;\n  }\n  /**\n   * Node's next sibling, or `null` if it is the last child.\n   */\n  get nextSibling() {\n    const index = this.index;\n    return index !== null && this.parent.getChild(index + 1) || null;\n  }\n  /**\n   * Node's previous sibling, or `null` if it is the first child.\n   */\n  get previousSibling() {\n    const index = this.index;\n    return index !== null && this.parent.getChild(index - 1) || null;\n  }\n  /**\n   * Top-most ancestor of the node. If the node has no parent it is the root itself.\n   */\n  get root() {\n    let root2 = this;\n    while (root2.parent) {\n      root2 = root2.parent;\n    }\n    return root2;\n  }\n  /**\n   * Returns true if the node is in a tree rooted in the document (is a descendant of one of its roots).\n   */\n  isAttached() {\n    return this.root.is(\"rootElement\");\n  }\n  /**\n   * Gets a path to the node. The path is an array containing indices of consecutive ancestors of this node,\n   * beginning from {@link module:engine/view/node~Node#root root}, down to this node's index.\n   *\n   * ```ts\n   * const abc = downcastWriter.createText( 'abc' );\n   * const foo = downcastWriter.createText( 'foo' );\n   * const h1 = downcastWriter.createElement( 'h1', null, downcastWriter.createText( 'header' ) );\n   * const p = downcastWriter.createElement( 'p', null, [ abc, foo ] );\n   * const div = downcastWriter.createElement( 'div', null, [ h1, p ] );\n   * foo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n   * h1.getPath(); // Returns [ 0 ].\n   * div.getPath(); // Returns [].\n   * ```\n   *\n   * @returns The path.\n   */\n  getPath() {\n    const path = [];\n    let node = this;\n    while (node.parent) {\n      path.unshift(node.index);\n      node = node.parent;\n    }\n    return path;\n  }\n  /**\n   * Returns ancestors array of this node.\n   *\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` this node will be also included in parent's array.\n   * @param options.parentFirst When set to `true`, array will be sorted from node's parent to root element,\n   * otherwise root element will be the first item in the array.\n   * @returns Array with ancestors.\n   */\n  getAncestors(options = {}) {\n    const ancestors = [];\n    let parent2 = options.includeSelf ? this : this.parent;\n    while (parent2) {\n      ancestors[options.parentFirst ? \"push\" : \"unshift\"](parent2);\n      parent2 = parent2.parent;\n    }\n    return ancestors;\n  }\n  /**\n   * Returns a {@link module:engine/view/element~Element} or {@link module:engine/view/documentfragment~DocumentFragment}\n   * which is a common ancestor of both nodes.\n   *\n   * @param node The second node.\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` both nodes will be considered \"ancestors\" too.\n   * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n   */\n  getCommonAncestor(node, options = {}) {\n    const ancestorsA = this.getAncestors(options);\n    const ancestorsB = node.getAncestors(options);\n    let i = 0;\n    while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n      i++;\n    }\n    return i === 0 ? null : ancestorsA[i - 1];\n  }\n  /**\n   * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n   * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n   *\n   * @param node Node to compare with.\n   */\n  isBefore(node) {\n    if (this == node) {\n      return false;\n    }\n    if (this.root !== node.root) {\n      return false;\n    }\n    const thisPath = this.getPath();\n    const nodePath = node.getPath();\n    const result = compareArrays(thisPath, nodePath);\n    switch (result) {\n      case \"prefix\":\n        return true;\n      case \"extension\":\n        return false;\n      default:\n        return thisPath[result] < nodePath[result];\n    }\n  }\n  /**\n   * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n   * in different {@link module:engine/view/documentfragment~DocumentFragment}s).\n   *\n   * @param node Node to compare with.\n   */\n  isAfter(node) {\n    if (this == node) {\n      return false;\n    }\n    if (this.root !== node.root) {\n      return false;\n    }\n    return !this.isBefore(node);\n  }\n  /**\n   * Removes node from parent.\n   *\n   * @internal\n   */\n  _remove() {\n    this.parent._removeChildren(this.index);\n  }\n  /**\n   * @internal\n   * @param type Type of the change.\n   * @param node Changed node.\n   * @fires change\n   */\n  _fireChange(type, node) {\n    this.fire(`change:${type}`, node);\n    if (this.parent) {\n      this.parent._fireChange(type, node);\n    }\n  }\n  /**\n   * Custom toJSON method to solve child-parent circular dependencies.\n   *\n   * @returns Clone of this object with the parent property removed.\n   */\n  toJSON() {\n    const json = clone_default(this);\n    delete json.parent;\n    return json;\n  }\n};\nNode2.prototype.is = function(type) {\n  return type === \"node\" || type === \"view:node\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/text.js\nvar Text = class _Text extends Node2 {\n  /**\n   * Creates a tree view text node.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createText\n   * @internal\n   * @param document The document instance to which this text node belongs.\n   * @param data The text's data.\n   */\n  constructor(document2, data) {\n    super(document2);\n    this._textData = data;\n  }\n  /**\n   * The text content.\n   */\n  get data() {\n    return this._textData;\n  }\n  /**\n   * The `_data` property is controlled by a getter and a setter.\n   *\n   * The getter is required when using the addition assignment operator on protected property:\n   *\n   * ```ts\n   * const foo = downcastWriter.createText( 'foo' );\n   * const bar = downcastWriter.createText( 'bar' );\n   *\n   * foo._data += bar.data;   // executes: `foo._data = foo._data + bar.data`\n   * console.log( foo.data ); // prints: 'foobar'\n   * ```\n   *\n   * If the protected getter didn't exist, `foo._data` will return `undefined` and result of the merge will be invalid.\n   *\n   * The setter sets data and fires the {@link module:engine/view/node~Node#event:change:text change event}.\n   *\n   * @internal\n   */\n  get _data() {\n    return this.data;\n  }\n  set _data(data) {\n    this._fireChange(\"text\", this);\n    this._textData = data;\n  }\n  /**\n   * Checks if this text node is similar to other text node.\n   * Both nodes should have the same data to be considered as similar.\n   *\n   * @param otherNode Node to check if it is same as this node.\n   */\n  isSimilar(otherNode) {\n    if (!(otherNode instanceof _Text)) {\n      return false;\n    }\n    return this === otherNode || this.data === otherNode.data;\n  }\n  /**\n   * Clones this node.\n   *\n   * @internal\n   * @returns Text node that is a clone of this node.\n   */\n  _clone() {\n    return new _Text(this.document, this.data);\n  }\n};\nText.prototype.is = function(type) {\n  return type === \"$text\" || type === \"view:$text\" || // This are legacy values kept for backward compatibility.\n  type === \"text\" || type === \"view:text\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n  type === \"node\" || type === \"view:node\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/textproxy.js\nvar TextProxy = class extends TypeCheckable {\n  /**\n   * Creates a text proxy.\n   *\n   * @internal\n   * @param textNode Text node which part is represented by this text proxy.\n   * @param offsetInText Offset in {@link module:engine/view/textproxy~TextProxy#textNode text node}\n   * from which the text proxy starts.\n   * @param length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n   * @constructor\n   */\n  constructor(textNode, offsetInText, length) {\n    super();\n    this.textNode = textNode;\n    if (offsetInText < 0 || offsetInText > textNode.data.length) {\n      throw new CKEditorError(\"view-textproxy-wrong-offsetintext\", this);\n    }\n    if (length < 0 || offsetInText + length > textNode.data.length) {\n      throw new CKEditorError(\"view-textproxy-wrong-length\", this);\n    }\n    this.data = textNode.data.substring(offsetInText, offsetInText + length);\n    this.offsetInText = offsetInText;\n  }\n  /**\n   * Offset size of this node.\n   */\n  get offsetSize() {\n    return this.data.length;\n  }\n  /**\n   * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/view/text~Text text node}\n   * (`true`) or the whole text node (`false`).\n   *\n   * This is `false` when text proxy starts at the very beginning of {@link module:engine/view/textproxy~TextProxy#textNode textNode}\n   * ({@link module:engine/view/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n   * text node size.\n   */\n  get isPartial() {\n    return this.data.length !== this.textNode.data.length;\n  }\n  /**\n   * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n   */\n  get parent() {\n    return this.textNode.parent;\n  }\n  /**\n   * Root of this text proxy, which is same as root of text node represented by this text proxy.\n   */\n  get root() {\n    return this.textNode.root;\n  }\n  /**\n   * {@link module:engine/view/document~Document View document} that owns this text proxy, or `null` if the text proxy is inside\n   * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n   */\n  get document() {\n    return this.textNode.document;\n  }\n  /**\n   * Returns ancestors array of this text proxy.\n   *\n   * @param options Options object.\n   * @param options.includeSelf When set to `true`, textNode will be also included in parent's array.\n   * @param options.parentFirst When set to `true`, array will be sorted from text proxy parent to\n   * root element, otherwise root element will be the first item in the array.\n   * @returns Array with ancestors.\n   */\n  getAncestors(options = {}) {\n    const ancestors = [];\n    let parent2 = options.includeSelf ? this.textNode : this.parent;\n    while (parent2 !== null) {\n      ancestors[options.parentFirst ? \"push\" : \"unshift\"](parent2);\n      parent2 = parent2.parent;\n    }\n    return ancestors;\n  }\n};\nTextProxy.prototype.is = function(type) {\n  return type === \"$textProxy\" || type === \"view:$textProxy\" || // This are legacy values kept for backward compatibility.\n  type === \"textProxy\" || type === \"view:textProxy\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/matcher.js\nvar Matcher = class {\n  /**\n   * Creates new instance of Matcher.\n   *\n   * @param pattern Match patterns. See {@link module:engine/view/matcher~Matcher#add add method} for more information.\n   */\n  constructor(...pattern) {\n    this._patterns = [];\n    this.add(...pattern);\n  }\n  /**\n   * Adds pattern or patterns to matcher instance.\n   *\n   * ```ts\n   * // String.\n   * matcher.add( 'div' );\n   *\n   * // Regular expression.\n   * matcher.add( /^\\w/ );\n   *\n   * // Single class.\n   * matcher.add( {\n   * \tclasses: 'foobar'\n   * } );\n   * ```\n   *\n   * See {@link module:engine/view/matcher~MatcherPattern} for more examples.\n   *\n   * Multiple patterns can be added in one call:\n   *\n   * ```ts\n   * matcher.add( 'div', { classes: 'foobar' } );\n   * ```\n   *\n   * @param pattern Object describing pattern details. If string or regular expression\n   * is provided it will be used to match element's name. Pattern can be also provided in a form\n   * of a function - then this function will be called with each {@link module:engine/view/element~Element element} as a parameter.\n   * Function's return value will be stored under `match` key of the object returned from\n   * {@link module:engine/view/matcher~Matcher#match match} or {@link module:engine/view/matcher~Matcher#matchAll matchAll} methods.\n   */\n  add(...pattern) {\n    for (let item of pattern) {\n      if (typeof item == \"string\" || item instanceof RegExp) {\n        item = { name: item };\n      }\n      this._patterns.push(item);\n    }\n  }\n  /**\n   * Matches elements for currently stored patterns. Returns match information about first found\n   * {@link module:engine/view/element~Element element}, otherwise returns `null`.\n   *\n   * Example of returned object:\n   *\n   * ```ts\n   * {\n   * \telement: <instance of found element>,\n   * \tpattern: <pattern used to match found element>,\n   * \tmatch: {\n   * \t\tname: true,\n   * \t\tattributes: [ 'title', 'href' ],\n   * \t\tclasses: [ 'foo' ],\n   * \t\tstyles: [ 'color', 'position' ]\n   * \t}\n   * }\n   * ```\n   *\n   * @see module:engine/view/matcher~Matcher#add\n   * @see module:engine/view/matcher~Matcher#matchAll\n   * @param element View element to match against stored patterns.\n   */\n  match(...element) {\n    for (const singleElement of element) {\n      for (const pattern of this._patterns) {\n        const match = isElementMatching(singleElement, pattern);\n        if (match) {\n          return {\n            element: singleElement,\n            pattern,\n            match\n          };\n        }\n      }\n    }\n    return null;\n  }\n  /**\n   * Matches elements for currently stored patterns. Returns array of match information with all found\n   * {@link module:engine/view/element~Element elements}. If no element is found - returns `null`.\n   *\n   * @see module:engine/view/matcher~Matcher#add\n   * @see module:engine/view/matcher~Matcher#match\n   * @param element View element to match against stored patterns.\n   * @returns Array with match information about found elements or `null`. For more information\n   * see {@link module:engine/view/matcher~Matcher#match match method} description.\n   */\n  matchAll(...element) {\n    const results = [];\n    for (const singleElement of element) {\n      for (const pattern of this._patterns) {\n        const match = isElementMatching(singleElement, pattern);\n        if (match) {\n          results.push({\n            element: singleElement,\n            pattern,\n            match\n          });\n        }\n      }\n    }\n    return results.length > 0 ? results : null;\n  }\n  /**\n   * Returns the name of the element to match if there is exactly one pattern added to the matcher instance\n   * and it matches element name defined by `string` (not `RegExp`). Otherwise, returns `null`.\n   *\n   * @returns Element name trying to match.\n   */\n  getElementName() {\n    if (this._patterns.length !== 1) {\n      return null;\n    }\n    const pattern = this._patterns[0];\n    const name = pattern.name;\n    return typeof pattern != \"function\" && name && !(name instanceof RegExp) ? name : null;\n  }\n};\nfunction isElementMatching(element, pattern) {\n  if (typeof pattern == \"function\") {\n    return pattern(element);\n  }\n  const match = {};\n  if (pattern.name) {\n    match.name = matchName(pattern.name, element.name);\n    if (!match.name) {\n      return null;\n    }\n  }\n  if (pattern.attributes) {\n    match.attributes = matchAttributes(pattern.attributes, element);\n    if (!match.attributes) {\n      return null;\n    }\n  }\n  if (pattern.classes) {\n    match.classes = matchClasses(pattern.classes, element);\n    if (!match.classes) {\n      return null;\n    }\n  }\n  if (pattern.styles) {\n    match.styles = matchStyles(pattern.styles, element);\n    if (!match.styles) {\n      return null;\n    }\n  }\n  return match;\n}\nfunction matchName(pattern, name) {\n  if (pattern instanceof RegExp) {\n    return !!name.match(pattern);\n  }\n  return pattern === name;\n}\nfunction matchPatterns(patterns, keys2, valueGetter) {\n  const normalizedPatterns = normalizePatterns(patterns);\n  const normalizedItems = Array.from(keys2);\n  const match = [];\n  normalizedPatterns.forEach(([patternKey, patternValue]) => {\n    normalizedItems.forEach((itemKey) => {\n      if (isKeyMatched(patternKey, itemKey) && isValueMatched(patternValue, itemKey, valueGetter)) {\n        match.push(itemKey);\n      }\n    });\n  });\n  if (!normalizedPatterns.length || match.length < normalizedPatterns.length) {\n    return void 0;\n  }\n  return match;\n}\nfunction normalizePatterns(patterns) {\n  if (Array.isArray(patterns)) {\n    return patterns.map((pattern) => {\n      if (isPlainObject_default(pattern)) {\n        if (pattern.key === void 0 || pattern.value === void 0) {\n          logWarning(\"matcher-pattern-missing-key-or-value\", pattern);\n        }\n        return [pattern.key, pattern.value];\n      }\n      return [pattern, true];\n    });\n  }\n  if (isPlainObject_default(patterns)) {\n    return Object.entries(patterns);\n  }\n  return [[patterns, true]];\n}\nfunction isKeyMatched(patternKey, itemKey) {\n  return patternKey === true || patternKey === itemKey || patternKey instanceof RegExp && itemKey.match(patternKey);\n}\nfunction isValueMatched(patternValue, itemKey, valueGetter) {\n  if (patternValue === true) {\n    return true;\n  }\n  const itemValue = valueGetter(itemKey);\n  return patternValue === itemValue || patternValue instanceof RegExp && !!String(itemValue).match(patternValue);\n}\nfunction matchAttributes(patterns, element) {\n  const attributeKeys = new Set(element.getAttributeKeys());\n  if (isPlainObject_default(patterns)) {\n    if (patterns.style !== void 0) {\n      logWarning(\"matcher-pattern-deprecated-attributes-style-key\", patterns);\n    }\n    if (patterns.class !== void 0) {\n      logWarning(\"matcher-pattern-deprecated-attributes-class-key\", patterns);\n    }\n  } else {\n    attributeKeys.delete(\"style\");\n    attributeKeys.delete(\"class\");\n  }\n  return matchPatterns(patterns, attributeKeys, (key) => element.getAttribute(key));\n}\nfunction matchClasses(patterns, element) {\n  return matchPatterns(\n    patterns,\n    element.getClassNames(),\n    /* istanbul ignore next -- @preserve */\n    () => {\n    }\n  );\n}\nfunction matchStyles(patterns, element) {\n  return matchPatterns(patterns, element.getStyleNames(true), (key) => element.getStyle(key));\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/stylesmap.js\nvar StylesMap = class {\n  /**\n   * Creates Styles instance.\n   */\n  constructor(styleProcessor) {\n    this._styles = {};\n    this._styleProcessor = styleProcessor;\n  }\n  /**\n   * Returns true if style map has no styles set.\n   */\n  get isEmpty() {\n    const entries = Object.entries(this._styles);\n    return !entries.length;\n  }\n  /**\n   * Number of styles defined.\n   */\n  get size() {\n    if (this.isEmpty) {\n      return 0;\n    }\n    return this.getStyleNames().length;\n  }\n  /**\n   * Set styles map to a new value.\n   *\n   * ```ts\n   * styles.setTo( 'border:1px solid blue;margin-top:1px;' );\n   * ```\n   */\n  setTo(inlineStyle) {\n    this.clear();\n    const parsedStyles = parseInlineStyles(inlineStyle);\n    for (const [key, value] of parsedStyles) {\n      this._styleProcessor.toNormalizedForm(key, value, this._styles);\n    }\n  }\n  /**\n   * Checks if a given style is set.\n   *\n   * ```ts\n   * styles.setTo( 'margin-left:1px;' );\n   *\n   * styles.has( 'margin-left' );    // -> true\n   * styles.has( 'padding' );        // -> false\n   * ```\n   *\n   * **Note**: This check supports normalized style names.\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * styles.setTo( 'margin:2px;' );\n   *\n   * styles.has( 'margin' );         // -> true\n   * styles.has( 'margin-top' );     // -> true\n   * styles.has( 'margin-left' );    // -> true\n   *\n   * styles.remove( 'margin-top' );\n   *\n   * styles.has( 'margin' );         // -> false\n   * styles.has( 'margin-top' );     // -> false\n   * styles.has( 'margin-left' );    // -> true\n   * ```\n   *\n   * @param name Style name.\n   */\n  has(name) {\n    if (this.isEmpty) {\n      return false;\n    }\n    const styles = this._styleProcessor.getReducedForm(name, this._styles);\n    const propertyDescriptor = styles.find(([property]) => property === name);\n    return Array.isArray(propertyDescriptor);\n  }\n  set(nameOrObject, valueOrObject) {\n    if (isObject_default(nameOrObject)) {\n      for (const [key, value] of Object.entries(nameOrObject)) {\n        this._styleProcessor.toNormalizedForm(key, value, this._styles);\n      }\n    } else {\n      this._styleProcessor.toNormalizedForm(nameOrObject, valueOrObject, this._styles);\n    }\n  }\n  /**\n   * Removes given style.\n   *\n   * ```ts\n   * styles.setTo( 'background:#f00;margin-right:2px;' );\n   *\n   * styles.remove( 'background' );\n   *\n   * styles.toString();   // -> 'margin-right:2px;'\n   * ```\n   *\n   * ***Note**:* This method uses {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules\n   * enabled style processor rules} to normalize passed values.\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * styles.setTo( 'margin:1px' );\n   *\n   * styles.remove( 'margin-top' );\n   * styles.remove( 'margin-right' );\n   *\n   * styles.toString(); // -> 'margin-bottom:1px;margin-left:1px;'\n   * ```\n   *\n   * @param name Style name.\n   */\n  remove(name) {\n    const path = toPath(name);\n    unset_default(this._styles, path);\n    delete this._styles[name];\n    this._cleanEmptyObjectsOnPath(path);\n  }\n  /**\n   * Returns a normalized style object or a single value.\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * const styles = new Styles();\n   * styles.setTo( 'margin:1px 2px 3em;' );\n   *\n   * styles.getNormalized( 'margin' );\n   * // will log:\n   * // {\n   * //     top: '1px',\n   * //     right: '2px',\n   * //     bottom: '3em',\n   * //     left: '2px'     // normalized value from margin shorthand\n   * // }\n   *\n   * styles.getNormalized( 'margin-left' ); // -> '2px'\n   * ```\n   *\n   * **Note**: This method will only return normalized styles if a style processor was defined.\n   *\n   * @param name Style name.\n   */\n  getNormalized(name) {\n    return this._styleProcessor.getNormalized(name, this._styles);\n  }\n  /**\n   * Returns a normalized style string. Styles are sorted by name.\n   *\n   * ```ts\n   * styles.set( 'margin' , '1px' );\n   * styles.set( 'background', '#f00' );\n   *\n   * styles.toString(); // -> 'background:#f00;margin:1px;'\n   * ```\n   *\n   * **Note**: This method supports normalized styles if defined.\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * styles.set( 'margin' , '1px' );\n   * styles.set( 'background', '#f00' );\n   * styles.remove( 'margin-top' );\n   * styles.remove( 'margin-right' );\n   *\n   * styles.toString(); // -> 'background:#f00;margin-bottom:1px;margin-left:1px;'\n   * ```\n   */\n  toString() {\n    if (this.isEmpty) {\n      return \"\";\n    }\n    return this._getStylesEntries().map((arr) => arr.join(\":\")).sort().join(\";\") + \";\";\n  }\n  /**\n   * Returns property as a value string or undefined if property is not set.\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * const styles = new Styles();\n   * styles.setTo( 'margin:1px;' );\n   * styles.set( 'margin-bottom', '3em' );\n   *\n   * styles.getAsString( 'margin' ); // -> 'margin: 1px 1px 3em;'\n   * ```\n   *\n   * Note, however, that all sub-values must be set for the longhand property name to return a value:\n   *\n   * ```ts\n   * const styles = new Styles();\n   * styles.setTo( 'margin:1px;' );\n   * styles.remove( 'margin-bottom' );\n   *\n   * styles.getAsString( 'margin' ); // -> undefined\n   * ```\n   *\n   * In the above scenario, it is not possible to return a `margin` value, so `undefined` is returned.\n   * Instead, you should use:\n   *\n   * ```ts\n   * const styles = new Styles();\n   * styles.setTo( 'margin:1px;' );\n   * styles.remove( 'margin-bottom' );\n   *\n   * for ( const styleName of styles.getStyleNames() ) {\n   * \tconsole.log( styleName, styles.getAsString( styleName ) );\n   * }\n   * // 'margin-top', '1px'\n   * // 'margin-right', '1px'\n   * // 'margin-left', '1px'\n   * ```\n   *\n   * In general, it is recommend to iterate over style names like in the example above. This way, you will always get all\n   * the currently set style values. So, if all the 4 margin values would be set\n   * the for-of loop above would yield only `'margin'`, `'1px'`:\n   *\n   * ```ts\n   * const styles = new Styles();\n   * styles.setTo( 'margin:1px;' );\n   *\n   * for ( const styleName of styles.getStyleNames() ) {\n   * \tconsole.log( styleName, styles.getAsString( styleName ) );\n   * }\n   * // 'margin', '1px'\n   * ```\n   *\n   * **Note**: To get a normalized version of a longhand property use the {@link #getNormalized `#getNormalized()`} method.\n   */\n  getAsString(propertyName) {\n    if (this.isEmpty) {\n      return;\n    }\n    if (this._styles[propertyName] && !isObject_default(this._styles[propertyName])) {\n      return this._styles[propertyName];\n    }\n    const styles = this._styleProcessor.getReducedForm(propertyName, this._styles);\n    const propertyDescriptor = styles.find(([property]) => property === propertyName);\n    if (Array.isArray(propertyDescriptor)) {\n      return propertyDescriptor[1];\n    }\n  }\n  /**\n   * Returns all style properties names as they would appear when using {@link #toString `#toString()`}.\n   *\n   * When `expand` is set to true and there's a shorthand style property set, it will also return all equivalent styles:\n   *\n   * ```ts\n   * stylesMap.setTo( 'margin: 1em' )\n   * ```\n   *\n   * will be expanded to:\n   *\n   * ```ts\n   * [ 'margin', 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ]\n   * ```\n   *\n   * @param expand Expand shorthand style properties and all return equivalent style representations.\n   */\n  getStyleNames(expand = false) {\n    if (this.isEmpty) {\n      return [];\n    }\n    if (expand) {\n      return this._styleProcessor.getStyleNames(this._styles);\n    }\n    const entries = this._getStylesEntries();\n    return entries.map(([key]) => key);\n  }\n  /**\n   * Removes all styles.\n   */\n  clear() {\n    this._styles = {};\n  }\n  /**\n   * Returns normalized styles entries for further processing.\n   */\n  _getStylesEntries() {\n    const parsed = [];\n    const keys2 = Object.keys(this._styles);\n    for (const key of keys2) {\n      parsed.push(...this._styleProcessor.getReducedForm(key, this._styles));\n    }\n    return parsed;\n  }\n  /**\n   * Removes empty objects upon removing an entry from internal object.\n   */\n  _cleanEmptyObjectsOnPath(path) {\n    const pathParts = path.split(\".\");\n    const isChildPath = pathParts.length > 1;\n    if (!isChildPath) {\n      return;\n    }\n    const parentPath = pathParts.splice(0, pathParts.length - 1).join(\".\");\n    const parentObject = get_default(this._styles, parentPath);\n    if (!parentObject) {\n      return;\n    }\n    const isParentEmpty = !Object.keys(parentObject).length;\n    if (isParentEmpty) {\n      this.remove(parentPath);\n    }\n  }\n};\nvar StylesProcessor = class {\n  /**\n   * Creates StylesProcessor instance.\n   *\n   * @internal\n   */\n  constructor() {\n    this._normalizers = /* @__PURE__ */ new Map();\n    this._extractors = /* @__PURE__ */ new Map();\n    this._reducers = /* @__PURE__ */ new Map();\n    this._consumables = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Parse style string value to a normalized object and appends it to styles object.\n   *\n   * ```ts\n   * const styles = {};\n   *\n   * stylesProcessor.toNormalizedForm( 'margin', '1px', styles );\n   *\n   * // styles will consist: { margin: { top: '1px', right: '1px', bottom: '1px', left: '1px; } }\n   * ```\n   *\n   * **Note**: To define normalizer callbacks use {@link #setNormalizer}.\n   *\n   * @param name Name of style property.\n   * @param propertyValue Value of style property.\n   * @param styles Object holding normalized styles.\n   */\n  toNormalizedForm(name, propertyValue, styles) {\n    if (isObject_default(propertyValue)) {\n      appendStyleValue(styles, toPath(name), propertyValue);\n      return;\n    }\n    if (this._normalizers.has(name)) {\n      const normalizer = this._normalizers.get(name);\n      const { path, value } = normalizer(propertyValue);\n      appendStyleValue(styles, path, value);\n    } else {\n      appendStyleValue(styles, name, propertyValue);\n    }\n  }\n  /**\n   * Returns a normalized version of a style property.\n   *\n   * ```ts\n   * const styles = {\n   * \tmargin: { top: '1px', right: '1px', bottom: '1px', left: '1px; },\n   * \tbackground: { color: '#f00' }\n   * };\n   *\n   * stylesProcessor.getNormalized( 'background' );\n   * // will return: { color: '#f00' }\n   *\n   * stylesProcessor.getNormalized( 'margin-top' );\n   * // will return: '1px'\n   * ```\n   *\n   * **Note**: In some cases extracting single value requires defining an extractor callback {@link #setExtractor}.\n   *\n   * @param name Name of style property.\n   * @param styles Object holding normalized styles.\n   */\n  getNormalized(name, styles) {\n    if (!name) {\n      return merge_default({}, styles);\n    }\n    if (styles[name] !== void 0) {\n      return styles[name];\n    }\n    if (this._extractors.has(name)) {\n      const extractor = this._extractors.get(name);\n      if (typeof extractor === \"string\") {\n        return get_default(styles, extractor);\n      }\n      const value = extractor(name, styles);\n      if (value) {\n        return value;\n      }\n    }\n    return get_default(styles, toPath(name));\n  }\n  /**\n   * Returns a reduced form of style property form normalized object.\n   *\n   * For default margin reducer, the below code:\n   *\n   * ```ts\n   * stylesProcessor.getReducedForm( 'margin', {\n   * \tmargin: { top: '1px', right: '1px', bottom: '2px', left: '1px; }\n   * } );\n   * ```\n   *\n   * will return:\n   *\n   * ```ts\n   * [\n   * \t[ 'margin', '1px 1px 2px' ]\n   * ]\n   * ```\n   *\n   * because it might be represented as a shorthand 'margin' value. However if one of margin long hand values is missing it should return:\n   *\n   * ```ts\n   * [\n   * \t[ 'margin-top', '1px' ],\n   * \t[ 'margin-right', '1px' ],\n   * \t[ 'margin-bottom', '2px' ]\n   * \t// the 'left' value is missing - cannot use 'margin' shorthand.\n   * ]\n   * ```\n   *\n   * **Note**: To define reducer callbacks use {@link #setReducer}.\n   *\n   * @param name Name of style property.\n   */\n  getReducedForm(name, styles) {\n    const normalizedValue = this.getNormalized(name, styles);\n    if (normalizedValue === void 0) {\n      return [];\n    }\n    if (this._reducers.has(name)) {\n      const reducer = this._reducers.get(name);\n      return reducer(normalizedValue);\n    }\n    return [[name, normalizedValue]];\n  }\n  /**\n   * Return all style properties. Also expand shorthand properties (e.g. `margin`, `background`) if respective extractor is available.\n   *\n   * @param styles Object holding normalized styles.\n   */\n  getStyleNames(styles) {\n    const expandedStyleNames = Array.from(this._consumables.keys()).filter((name) => {\n      const style = this.getNormalized(name, styles);\n      if (style && typeof style == \"object\") {\n        return Object.keys(style).length;\n      }\n      return style;\n    });\n    const styleNamesKeysSet = /* @__PURE__ */ new Set([\n      ...expandedStyleNames,\n      ...Object.keys(styles)\n    ]);\n    return Array.from(styleNamesKeysSet);\n  }\n  /**\n   * Returns related style names.\n   *\n   * ```ts\n   * stylesProcessor.getRelatedStyles( 'margin' );\n   * // will return: [ 'margin-top', 'margin-right', 'margin-bottom', 'margin-left' ];\n   *\n   * stylesProcessor.getRelatedStyles( 'margin-top' );\n   * // will return: [ 'margin' ];\n   * ```\n   *\n   * **Note**: To define new style relations load an existing style processor or use\n   * {@link module:engine/view/stylesmap~StylesProcessor#setStyleRelation `StylesProcessor.setStyleRelation()`}.\n   */\n  getRelatedStyles(name) {\n    return this._consumables.get(name) || [];\n  }\n  /**\n   * Adds a normalizer method for a style property.\n   *\n   * A normalizer returns describing how the value should be normalized.\n   *\n   * For instance 'margin' style is a shorthand for four margin values:\n   *\n   * - 'margin-top'\n   * - 'margin-right'\n   * - 'margin-bottom'\n   * - 'margin-left'\n   *\n   * and can be written in various ways if some values are equal to others. For instance `'margin: 1px 2em;'` is a shorthand for\n   * `'margin-top: 1px;margin-right: 2em;margin-bottom: 1px;margin-left: 2em'`.\n   *\n   * A normalizer should parse various margin notations as a single object:\n   *\n   * ```ts\n   * const styles = {\n   * \tmargin: {\n   * \t\ttop: '1px',\n   * \t\tright: '2em',\n   * \t\tbottom: '1px',\n   * \t\tleft: '2em'\n   * \t}\n   * };\n   * ```\n   *\n   * Thus a normalizer for 'margin' style should return an object defining style path and value to store:\n   *\n   * ```ts\n   * const returnValue = {\n   * \tpath: 'margin',\n   * \tvalue: {\n   * \t\ttop: '1px',\n   * \t\tright: '2em',\n   * \t\tbottom: '1px',\n   * \t\tleft: '2em'\n   * \t}\n   * };\n   * ```\n   *\n   * Additionally to fully support all margin notations there should be also defined 4 normalizers for longhand margin notations. Below\n   * is an example for 'margin-top' style property normalizer:\n   *\n   * ```ts\n   * stylesProcessor.setNormalizer( 'margin-top', valueString => {\n   * \treturn {\n   * \t\tpath: 'margin.top',\n   * \t\tvalue: valueString\n   * \t}\n   * } );\n   * ```\n   */\n  setNormalizer(name, callback) {\n    this._normalizers.set(name, callback);\n  }\n  /**\n   * Adds a extractor callback for a style property.\n   *\n   * Most normalized style values are stored as one level objects. It is assumed that `'margin-top'` style will be stored as:\n   *\n   * ```ts\n   * const styles = {\n   * \tmargin: {\n   * \t\ttop: 'value'\n   * \t}\n   * }\n   * ```\n   *\n   * However, some styles can have conflicting notations and thus it might be harder to extract a style value from shorthand. For instance\n   * the 'border-top-style' can be defined using `'border-top:solid'`, `'border-style:solid none none none'` or by `'border:solid'`\n   * shorthands. The default border styles processors stores styles as:\n   *\n   * ```ts\n   * const styles = {\n   * \tborder: {\n   * \t\tstyle: {\n   * \t\t\ttop: 'solid'\n   * \t\t}\n   * \t}\n   * }\n   * ```\n   *\n   * as it is better to modify border style independently from other values. On the other part the output of the border might be\n   * desired as `border-top`, `border-left`, etc notation.\n   *\n   * In the above example an extractor should return a side border value that combines style, color and width:\n   *\n   * ```ts\n   * styleProcessor.setExtractor( 'border-top', styles => {\n   * \treturn {\n   * \t\tcolor: styles.border.color.top,\n   * \t\tstyle: styles.border.style.top,\n   * \t\twidth: styles.border.width.top\n   * \t}\n   * } );\n   * ```\n   *\n   * @param callbackOrPath Callback that return a requested value or path string for single values.\n   */\n  setExtractor(name, callbackOrPath) {\n    this._extractors.set(name, callbackOrPath);\n  }\n  /**\n   * Adds a reducer callback for a style property.\n   *\n   * Reducer returns a minimal notation for given style name. For longhand properties it is not required to write a reducer as\n   * by default the direct value from style path is taken.\n   *\n   * For shorthand styles a reducer should return minimal style notation either by returning single name-value tuple or multiple tuples\n   * if a shorthand cannot be used. For instance for a margin shorthand a reducer might return:\n   *\n   * ```ts\n   * const marginShortHandTuple = [\n   * \t[ 'margin', '1px 1px 2px' ]\n   * ];\n   * ```\n   *\n   * or a longhand tuples for defined values:\n   *\n   * ```ts\n   * // Considering margin.bottom and margin.left are undefined.\n   * const marginLonghandsTuples = [\n   * \t[ 'margin-top', '1px' ],\n   * \t[ 'margin-right', '1px' ]\n   * ];\n   * ```\n   *\n   * A reducer obtains a normalized style value:\n   *\n   * ```ts\n   * // Simplified reducer that always outputs 4 values which are always present:\n   * stylesProcessor.setReducer( 'margin', margin => {\n   * \treturn [\n   * \t\t[ 'margin', `${ margin.top } ${ margin.right } ${ margin.bottom } ${ margin.left }` ]\n   * \t]\n   * } );\n   * ```\n   */\n  setReducer(name, callback) {\n    this._reducers.set(name, callback);\n  }\n  /**\n   * Defines a style shorthand relation to other style notations.\n   *\n   * ```ts\n   * stylesProcessor.setStyleRelation( 'margin', [\n   * \t'margin-top',\n   * \t'margin-right',\n   * \t'margin-bottom',\n   * \t'margin-left'\n   * ] );\n   * ```\n   *\n   * This enables expanding of style names for shorthands. For instance, if defined,\n   * {@link module:engine/conversion/viewconsumable~ViewConsumable view consumable} items are automatically created\n   * for long-hand margin style notation alongside the `'margin'` item.\n   *\n   * This means that when an element being converted has a style `margin`, a converter for `margin-left` will work just\n   * fine since the view consumable will contain a consumable `margin-left` item (thanks to the relation) and\n   * `element.getStyle( 'margin-left' )` will work as well assuming that the style processor was correctly configured.\n   * However, once `margin-left` is consumed, `margin` will not be consumable anymore.\n   */\n  setStyleRelation(shorthandName, styleNames) {\n    this._mapStyleNames(shorthandName, styleNames);\n    for (const alsoName of styleNames) {\n      this._mapStyleNames(alsoName, [shorthandName]);\n    }\n  }\n  /**\n   * Set two-way binding of style names.\n   */\n  _mapStyleNames(name, styleNames) {\n    if (!this._consumables.has(name)) {\n      this._consumables.set(name, []);\n    }\n    this._consumables.get(name).push(...styleNames);\n  }\n};\nfunction parseInlineStyles(stylesString) {\n  let quoteType = null;\n  let propertyNameStart = 0;\n  let propertyValueStart = 0;\n  let propertyName = null;\n  const stylesMap = /* @__PURE__ */ new Map();\n  if (stylesString === \"\") {\n    return stylesMap;\n  }\n  if (stylesString.charAt(stylesString.length - 1) != \";\") {\n    stylesString = stylesString + \";\";\n  }\n  for (let i = 0; i < stylesString.length; i++) {\n    const char = stylesString.charAt(i);\n    if (quoteType === null) {\n      switch (char) {\n        case \":\":\n          if (!propertyName) {\n            propertyName = stylesString.substr(propertyNameStart, i - propertyNameStart);\n            propertyValueStart = i + 1;\n          }\n          break;\n        case '\"':\n        case \"'\":\n          quoteType = char;\n          break;\n        case \";\": {\n          const propertyValue = stylesString.substr(propertyValueStart, i - propertyValueStart);\n          if (propertyName) {\n            stylesMap.set(propertyName.trim(), propertyValue.trim());\n          }\n          propertyName = null;\n          propertyNameStart = i + 1;\n          break;\n        }\n      }\n    } else if (char === quoteType) {\n      quoteType = null;\n    }\n  }\n  return stylesMap;\n}\nfunction toPath(name) {\n  return name.replace(\"-\", \".\");\n}\nfunction appendStyleValue(stylesObject, nameOrPath, valueOrObject) {\n  let valueToSet = valueOrObject;\n  if (isObject_default(valueOrObject)) {\n    valueToSet = merge_default({}, get_default(stylesObject, nameOrPath), valueOrObject);\n  }\n  set_default(stylesObject, nameOrPath, valueToSet);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/element.js\nvar Element = class _Element extends Node2 {\n  /**\n   * Creates a view element.\n   *\n   * Attributes can be passed in various formats:\n   *\n   * ```ts\n   * new Element( viewDocument, 'div', { class: 'editor', contentEditable: 'true' } ); // object\n   * new Element( viewDocument, 'div', [ [ 'class', 'editor' ], [ 'contentEditable', 'true' ] ] ); // map-like iterator\n   * new Element( viewDocument, 'div', mapOfAttributes ); // map\n   * ```\n   *\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attrs, children) {\n    super(document2);\n    this._unsafeAttributesToRender = [];\n    this._customProperties = /* @__PURE__ */ new Map();\n    this.name = name;\n    this._attrs = parseAttributes(attrs);\n    this._children = [];\n    if (children) {\n      this._insertChild(0, children);\n    }\n    this._classes = /* @__PURE__ */ new Set();\n    if (this._attrs.has(\"class\")) {\n      const classString = this._attrs.get(\"class\");\n      parseClasses(this._classes, classString);\n      this._attrs.delete(\"class\");\n    }\n    this._styles = new StylesMap(this.document.stylesProcessor);\n    if (this._attrs.has(\"style\")) {\n      this._styles.setTo(this._attrs.get(\"style\"));\n      this._attrs.delete(\"style\");\n    }\n  }\n  /**\n   * Number of element's children.\n   */\n  get childCount() {\n    return this._children.length;\n  }\n  /**\n   * Is `true` if there are no nodes inside this element, `false` otherwise.\n   */\n  get isEmpty() {\n    return this._children.length === 0;\n  }\n  /**\n   * Gets child at the given index.\n   *\n   * @param index Index of child.\n   * @returns Child node.\n   */\n  getChild(index) {\n    return this._children[index];\n  }\n  /**\n   * Gets index of the given child node. Returns `-1` if child node is not found.\n   *\n   * @param node Child node.\n   * @returns Index of the child node.\n   */\n  getChildIndex(node) {\n    return this._children.indexOf(node);\n  }\n  /**\n   * Gets child nodes iterator.\n   *\n   * @returns Child nodes iterator.\n   */\n  getChildren() {\n    return this._children[Symbol.iterator]();\n  }\n  /**\n   * Returns an iterator that contains the keys for attributes. Order of inserting attributes is not preserved.\n   *\n   * @returns Keys for attributes.\n   */\n  *getAttributeKeys() {\n    if (this._classes.size > 0) {\n      yield \"class\";\n    }\n    if (!this._styles.isEmpty) {\n      yield \"style\";\n    }\n    yield* this._attrs.keys();\n  }\n  /**\n   * Returns iterator that iterates over this element's attributes.\n   *\n   * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n   * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n   */\n  *getAttributes() {\n    yield* this._attrs.entries();\n    if (this._classes.size > 0) {\n      yield [\"class\", this.getAttribute(\"class\")];\n    }\n    if (!this._styles.isEmpty) {\n      yield [\"style\", this.getAttribute(\"style\")];\n    }\n  }\n  /**\n   * Gets attribute by key. If attribute is not present - returns undefined.\n   *\n   * @param key Attribute key.\n   * @returns Attribute value.\n   */\n  getAttribute(key) {\n    if (key == \"class\") {\n      if (this._classes.size > 0) {\n        return [...this._classes].join(\" \");\n      }\n      return void 0;\n    }\n    if (key == \"style\") {\n      const inlineStyle = this._styles.toString();\n      return inlineStyle == \"\" ? void 0 : inlineStyle;\n    }\n    return this._attrs.get(key);\n  }\n  /**\n   * Returns a boolean indicating whether an attribute with the specified key exists in the element.\n   *\n   * @param key Attribute key.\n   * @returns `true` if attribute with the specified key exists in the element, `false` otherwise.\n   */\n  hasAttribute(key) {\n    if (key == \"class\") {\n      return this._classes.size > 0;\n    }\n    if (key == \"style\") {\n      return !this._styles.isEmpty;\n    }\n    return this._attrs.has(key);\n  }\n  /**\n   * Checks if this element is similar to other element.\n   * Both elements should have the same name and attributes to be considered as similar. Two similar elements\n   * can contain different set of children nodes.\n   */\n  isSimilar(otherElement) {\n    if (!(otherElement instanceof _Element)) {\n      return false;\n    }\n    if (this === otherElement) {\n      return true;\n    }\n    if (this.name != otherElement.name) {\n      return false;\n    }\n    if (this._attrs.size !== otherElement._attrs.size || this._classes.size !== otherElement._classes.size || this._styles.size !== otherElement._styles.size) {\n      return false;\n    }\n    for (const [key, value] of this._attrs) {\n      if (!otherElement._attrs.has(key) || otherElement._attrs.get(key) !== value) {\n        return false;\n      }\n    }\n    for (const className of this._classes) {\n      if (!otherElement._classes.has(className)) {\n        return false;\n      }\n    }\n    for (const property of this._styles.getStyleNames()) {\n      if (!otherElement._styles.has(property) || otherElement._styles.getAsString(property) !== this._styles.getAsString(property)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns true if class is present.\n   * If more then one class is provided - returns true only when all classes are present.\n   *\n   * ```ts\n   * element.hasClass( 'foo' ); // Returns true if 'foo' class is present.\n   * element.hasClass( 'foo', 'bar' ); // Returns true if 'foo' and 'bar' classes are both present.\n   * ```\n   */\n  hasClass(...className) {\n    for (const name of className) {\n      if (!this._classes.has(name)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns iterator that contains all class names.\n   */\n  getClassNames() {\n    return this._classes.keys();\n  }\n  /**\n   * Returns style value for the given property mae.\n   * If the style does not exist `undefined` is returned.\n   *\n   * **Note**: This method can work with normalized style names if\n   * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n   * See {@link module:engine/view/stylesmap~StylesMap#getAsString `StylesMap#getAsString()`} for details.\n   *\n   * For an element with style set to `'margin:1px'`:\n   *\n   * ```ts\n   * // Enable 'margin' shorthand processing:\n   * editor.data.addStyleProcessorRules( addMarginRules );\n   *\n   * const element = view.change( writer => {\n   * \tconst element = writer.createElement();\n   * \twriter.setStyle( 'margin', '1px' );\n   * \twriter.setStyle( 'margin-bottom', '3em' );\n   *\n   * \treturn element;\n   * } );\n   *\n   * element.getStyle( 'margin' ); // -> 'margin: 1px 1px 3em;'\n   * ```\n   */\n  getStyle(property) {\n    return this._styles.getAsString(property);\n  }\n  /**\n   * Returns a normalized style object or single style value.\n   *\n   * For an element with style set to: margin:1px 2px 3em;\n   *\n   * ```ts\n   * element.getNormalizedStyle( 'margin' ) );\n   * ```\n   *\n   * will return:\n   *\n   * ```ts\n   * {\n   * \ttop: '1px',\n   * \tright: '2px',\n   * \tbottom: '3em',\n   * \tleft: '2px'    // a normalized value from margin shorthand\n   * }\n   * ```\n   *\n   * and reading for single style value:\n   *\n   * ```ts\n   * styles.getNormalizedStyle( 'margin-left' );\n   * ```\n   *\n   * Will return a `2px` string.\n   *\n   * **Note**: This method will return normalized values only if\n   * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n   * See {@link module:engine/view/stylesmap~StylesMap#getNormalized `StylesMap#getNormalized()`} for details.\n   *\n   * @param property Name of CSS property\n   */\n  getNormalizedStyle(property) {\n    return this._styles.getNormalized(property);\n  }\n  /**\n   * Returns iterator that contains all style names.\n   *\n   * @param expand Expand shorthand style properties and return all equivalent style representations.\n   */\n  getStyleNames(expand) {\n    return this._styles.getStyleNames(expand);\n  }\n  /**\n   * Returns true if style keys are present.\n   * If more then one style property is provided - returns true only when all properties are present.\n   *\n   * ```ts\n   * element.hasStyle( 'color' ); // Returns true if 'border-top' style is present.\n   * element.hasStyle( 'color', 'border-top' ); // Returns true if 'color' and 'border-top' styles are both present.\n   * ```\n   */\n  hasStyle(...property) {\n    for (const name of property) {\n      if (!this._styles.has(name)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns ancestor element that match specified pattern.\n   * Provided patterns should be compatible with {@link module:engine/view/matcher~Matcher Matcher} as it is used internally.\n   *\n   * @see module:engine/view/matcher~Matcher\n   * @param patterns Patterns used to match correct ancestor. See {@link module:engine/view/matcher~Matcher}.\n   * @returns Found element or `null` if no matching ancestor was found.\n   */\n  findAncestor(...patterns) {\n    const matcher = new Matcher(...patterns);\n    let parent2 = this.parent;\n    while (parent2 && !parent2.is(\"documentFragment\")) {\n      if (matcher.match(parent2)) {\n        return parent2;\n      }\n      parent2 = parent2.parent;\n    }\n    return null;\n  }\n  /**\n   * Returns the custom property value for the given key.\n   */\n  getCustomProperty(key) {\n    return this._customProperties.get(key);\n  }\n  /**\n   * Returns an iterator which iterates over this element's custom properties.\n   * Iterator provides `[ key, value ]` pairs for each stored property.\n   */\n  *getCustomProperties() {\n    yield* this._customProperties.entries();\n  }\n  /**\n   * Returns identity string based on element's name, styles, classes and other attributes.\n   * Two elements that {@link #isSimilar are similar} will have same identity string.\n   * It has the following format:\n   *\n   * ```ts\n   * 'name class=\"class1,class2\" style=\"style1:value1;style2:value2\" attr1=\"val1\" attr2=\"val2\"'\n   * ```\n   *\n   * For example:\n   *\n   * ```ts\n   * const element = writer.createContainerElement( 'foo', {\n   * \tbanana: '10',\n   * \tapple: '20',\n   * \tstyle: 'color: red; border-color: white;',\n   * \tclass: 'baz'\n   * } );\n   *\n   * // returns 'foo class=\"baz\" style=\"border-color:white;color:red\" apple=\"20\" banana=\"10\"'\n   * element.getIdentity();\n   * ```\n   *\n   * **Note**: Classes, styles and other attributes are sorted alphabetically.\n   */\n  getIdentity() {\n    const classes = Array.from(this._classes).sort().join(\",\");\n    const styles = this._styles.toString();\n    const attributes = Array.from(this._attrs).map((i) => `${i[0]}=\"${i[1]}\"`).sort().join(\" \");\n    return this.name + (classes == \"\" ? \"\" : ` class=\"${classes}\"`) + (!styles ? \"\" : ` style=\"${styles}\"`) + (attributes == \"\" ? \"\" : ` ${attributes}`);\n  }\n  /**\n   * Decides whether an unsafe attribute is whitelisted and should be rendered in the editing pipeline even though filtering mechanisms\n   * like {@link module:engine/view/domconverter~DomConverter#shouldRenderAttribute} say it should not.\n   *\n   * Unsafe attribute names can be specified when creating an element via {@link module:engine/view/downcastwriter~DowncastWriter}.\n   *\n   * @param attributeName The name of the attribute to be checked.\n   */\n  shouldRenderUnsafeAttribute(attributeName) {\n    return this._unsafeAttributesToRender.includes(attributeName);\n  }\n  /**\n   * Clones provided element.\n   *\n   * @internal\n   * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n   * element will be cloned without any children.\n   * @returns Clone of this element.\n   */\n  _clone(deep = false) {\n    const childrenClone = [];\n    if (deep) {\n      for (const child of this.getChildren()) {\n        childrenClone.push(child._clone(deep));\n      }\n    }\n    const cloned = new this.constructor(this.document, this.name, this._attrs, childrenClone);\n    cloned._classes = new Set(this._classes);\n    cloned._styles.set(this._styles.getNormalized());\n    cloned._customProperties = new Map(this._customProperties);\n    cloned.getFillerOffset = this.getFillerOffset;\n    cloned._unsafeAttributesToRender = this._unsafeAttributesToRender;\n    return cloned;\n  }\n  /**\n   * {@link module:engine/view/element~Element#_insertChild Insert} a child node or a list of child nodes at the end of this node\n   * and sets the parent of these nodes to this element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#insert\n   * @internal\n   * @param items Items to be inserted.\n   * @fires change\n   * @returns Number of appended nodes.\n   */\n  _appendChild(items) {\n    return this._insertChild(this.childCount, items);\n  }\n  /**\n   * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n   * this element.\n   *\n   * @internal\n   * @see module:engine/view/downcastwriter~DowncastWriter#insert\n   * @param index Position where nodes should be inserted.\n   * @param items Items to be inserted.\n   * @fires change\n   * @returns Number of inserted nodes.\n   */\n  _insertChild(index, items) {\n    this._fireChange(\"children\", this);\n    let count2 = 0;\n    const nodes = normalize(this.document, items);\n    for (const node of nodes) {\n      if (node.parent !== null) {\n        node._remove();\n      }\n      node.parent = this;\n      node.document = this.document;\n      this._children.splice(index, 0, node);\n      index++;\n      count2++;\n    }\n    return count2;\n  }\n  /**\n   * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#remove\n   * @internal\n   * @param index Number of the first node to remove.\n   * @param howMany Number of nodes to remove.\n   * @fires change\n   * @returns The array of removed nodes.\n   */\n  _removeChildren(index, howMany = 1) {\n    this._fireChange(\"children\", this);\n    for (let i = index; i < index + howMany; i++) {\n      this._children[i].parent = null;\n    }\n    return this._children.splice(index, howMany);\n  }\n  /**\n   * Adds or overwrite attribute with a specified key and value.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#setAttribute\n   * @internal\n   * @param key Attribute key.\n   * @param value Attribute value.\n   * @fires change\n   */\n  _setAttribute(key, value) {\n    const stringValue = String(value);\n    this._fireChange(\"attributes\", this);\n    if (key == \"class\") {\n      parseClasses(this._classes, stringValue);\n    } else if (key == \"style\") {\n      this._styles.setTo(stringValue);\n    } else {\n      this._attrs.set(key, stringValue);\n    }\n  }\n  /**\n   * Removes attribute from the element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#removeAttribute\n   * @internal\n   * @param key Attribute key.\n   * @returns Returns true if an attribute existed and has been removed.\n   * @fires change\n   */\n  _removeAttribute(key) {\n    this._fireChange(\"attributes\", this);\n    if (key == \"class\") {\n      if (this._classes.size > 0) {\n        this._classes.clear();\n        return true;\n      }\n      return false;\n    }\n    if (key == \"style\") {\n      if (!this._styles.isEmpty) {\n        this._styles.clear();\n        return true;\n      }\n      return false;\n    }\n    return this._attrs.delete(key);\n  }\n  /**\n   * Adds specified class.\n   *\n   * ```ts\n   * element._addClass( 'foo' ); // Adds 'foo' class.\n   * element._addClass( [ 'foo', 'bar' ] ); // Adds 'foo' and 'bar' classes.\n   * ```\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#addClass\n   * @internal\n   * @fires change\n   */\n  _addClass(className) {\n    this._fireChange(\"attributes\", this);\n    for (const name of toArray(className)) {\n      this._classes.add(name);\n    }\n  }\n  /**\n   * Removes specified class.\n   *\n   * ```ts\n   * element._removeClass( 'foo' );  // Removes 'foo' class.\n   * element._removeClass( [ 'foo', 'bar' ] ); // Removes both 'foo' and 'bar' classes.\n   * ```\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#removeClass\n   * @internal\n   * @fires change\n   */\n  _removeClass(className) {\n    this._fireChange(\"attributes\", this);\n    for (const name of toArray(className)) {\n      this._classes.delete(name);\n    }\n  }\n  _setStyle(property, value) {\n    this._fireChange(\"attributes\", this);\n    if (typeof property != \"string\") {\n      this._styles.set(property);\n    } else {\n      this._styles.set(property, value);\n    }\n  }\n  /**\n   * Removes specified style.\n   *\n   * ```ts\n   * element._removeStyle( 'color' );  // Removes 'color' style.\n   * element._removeStyle( [ 'color', 'border-top' ] ); // Removes both 'color' and 'border-top' styles.\n   * ```\n   *\n   * **Note**: This method can work with normalized style names if\n   * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n   * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#removeStyle\n   * @internal\n   * @fires change\n   */\n  _removeStyle(property) {\n    this._fireChange(\"attributes\", this);\n    for (const name of toArray(property)) {\n      this._styles.remove(name);\n    }\n  }\n  /**\n   * Sets a custom property. Unlike attributes, custom properties are not rendered to the DOM,\n   * so they can be used to add special data to elements.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#setCustomProperty\n   * @internal\n   */\n  _setCustomProperty(key, value) {\n    this._customProperties.set(key, value);\n  }\n  /**\n   * Removes the custom property stored under the given key.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#removeCustomProperty\n   * @internal\n   * @returns Returns true if property was removed.\n   */\n  _removeCustomProperty(key) {\n    return this._customProperties.delete(key);\n  }\n};\nElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"element\" || type === \"view:element\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"element\" || type === \"view:element\");\n  }\n};\nfunction parseAttributes(attrs) {\n  const attrsMap = toMap(attrs);\n  for (const [key, value] of attrsMap) {\n    if (value === null) {\n      attrsMap.delete(key);\n    } else if (typeof value != \"string\") {\n      attrsMap.set(key, String(value));\n    }\n  }\n  return attrsMap;\n}\nfunction parseClasses(classesSet, classesString) {\n  const classArray = classesString.split(/\\s+/);\n  classesSet.clear();\n  classArray.forEach((name) => classesSet.add(name));\n}\nfunction normalize(document2, nodes) {\n  if (typeof nodes == \"string\") {\n    return [new Text(document2, nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n  return Array.from(nodes).map((node) => {\n    if (typeof node == \"string\") {\n      return new Text(document2, node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(document2, node.data);\n    }\n    return node;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/containerelement.js\nvar ContainerElement = class extends Element {\n  /**\n   * Creates a container element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createContainerElement\n   * @see module:engine/view/element~Element\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attrs, children) {\n    super(document2, name, attrs, children);\n    this.getFillerOffset = getFillerOffset;\n  }\n};\nContainerElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"containerElement\" || type === \"view:containerElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"containerElement\" || type === \"view:containerElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\");\n  }\n};\nfunction getFillerOffset() {\n  const children = [...this.getChildren()];\n  const lastChild = children[this.childCount - 1];\n  if (lastChild && lastChild.is(\"element\", \"br\")) {\n    return this.childCount;\n  }\n  for (const child of children) {\n    if (!child.is(\"uiElement\")) {\n      return null;\n    }\n  }\n  return this.childCount;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/editableelement.js\nvar EditableElement = class extends ObservableMixin(ContainerElement) {\n  /**\n   * Creates an editable element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createEditableElement\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attributes, children) {\n    super(document2, name, attributes, children);\n    this.set(\"isReadOnly\", false);\n    this.set(\"isFocused\", false);\n    this.set(\"placeholder\", void 0);\n    this.bind(\"isReadOnly\").to(document2);\n    this.bind(\"isFocused\").to(document2, \"isFocused\", (isFocused) => isFocused && document2.selection.editableElement == this);\n    this.listenTo(document2.selection, \"change\", () => {\n      this.isFocused = document2.isFocused && document2.selection.editableElement == this;\n    });\n  }\n  destroy() {\n    this.stopListening();\n  }\n};\nEditableElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"editableElement\" || type === \"view:editableElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"containerElement\" || type === \"view:containerElement\" || type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"editableElement\" || type === \"view:editableElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"containerElement\" || type === \"view:containerElement\" || type === \"element\" || type === \"view:element\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/rooteditableelement.js\nvar rootNameSymbol = Symbol(\"rootName\");\nvar RootEditableElement = class extends EditableElement {\n  /**\n   * Creates root editable element.\n   *\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   */\n  constructor(document2, name) {\n    super(document2, name);\n    this.rootName = \"main\";\n  }\n  /**\n   * Name of this root inside {@link module:engine/view/document~Document} that is an owner of this root. If no\n   * other name is set, `main` name is used.\n   *\n   * @readonly\n   */\n  get rootName() {\n    return this.getCustomProperty(rootNameSymbol);\n  }\n  set rootName(rootName) {\n    this._setCustomProperty(rootNameSymbol, rootName);\n  }\n  /**\n   * Overrides old element name and sets new one.\n   * This is needed because view roots are created before they are attached to the DOM.\n   * The name of the root element is temporary at this stage. It has to be changed when the\n   * view root element is attached to the DOM element.\n   *\n   * @internal\n   * @param name The new name of element.\n   */\n  set _name(name) {\n    this.name = name;\n  }\n};\nRootEditableElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"rootElement\" || type === \"view:rootElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"editableElement\" || type === \"view:editableElement\" || type === \"containerElement\" || type === \"view:containerElement\" || type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"rootElement\" || type === \"view:rootElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"editableElement\" || type === \"view:editableElement\" || type === \"containerElement\" || type === \"view:containerElement\" || type === \"element\" || type === \"view:element\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/treewalker.js\nvar TreeWalker = class {\n  /**\n   * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n   *\n   * @param options Object with configuration.\n   */\n  constructor(options = {}) {\n    if (!options.boundaries && !options.startPosition) {\n      throw new CKEditorError(\"view-tree-walker-no-start-position\", null);\n    }\n    if (options.direction && options.direction != \"forward\" && options.direction != \"backward\") {\n      throw new CKEditorError(\"view-tree-walker-unknown-direction\", options.startPosition, { direction: options.direction });\n    }\n    this.boundaries = options.boundaries || null;\n    if (options.startPosition) {\n      this._position = Position._createAt(options.startPosition);\n    } else {\n      this._position = Position._createAt(options.boundaries[options.direction == \"backward\" ? \"end\" : \"start\"]);\n    }\n    this.direction = options.direction || \"forward\";\n    this.singleCharacters = !!options.singleCharacters;\n    this.shallow = !!options.shallow;\n    this.ignoreElementEnd = !!options.ignoreElementEnd;\n    this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n    this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n  }\n  /**\n   * Iterable interface.\n   */\n  [Symbol.iterator]() {\n    return this;\n  }\n  /**\n   * Iterator position. If start position is not defined then position depends on {@link #direction}. If direction is\n   * `'forward'` position starts form the beginning, when direction is `'backward'` position starts from the end.\n   */\n  get position() {\n    return this._position;\n  }\n  /**\n   * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n   *\n   * For example:\n   *\n   * ```ts\n   * walker.skip( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n   * walker.skip( value => true ); // Move the position to the end: <p>{}foo</p> -> <p>foo</p>[]\n   * walker.skip( value => false ); // Do not move the position.\n   * ```\n   *\n   * @param skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n   * return `true` if the value should be skipped or `false` if not.\n   */\n  skip(skip) {\n    let nextResult;\n    let prevPosition;\n    do {\n      prevPosition = this.position;\n      nextResult = this.next();\n    } while (!nextResult.done && skip(nextResult.value));\n    if (!nextResult.done) {\n      this._position = prevPosition;\n    }\n  }\n  /**\n   * Gets the next tree walker's value.\n   *\n   * @returns Object implementing iterator interface, returning\n   * information about taken step.\n   */\n  next() {\n    if (this.direction == \"forward\") {\n      return this._next();\n    } else {\n      return this._previous();\n    }\n  }\n  /**\n   * Makes a step forward in view. Moves the {@link #position} to the next position and returns the encountered value.\n   */\n  _next() {\n    let position = this.position.clone();\n    const previousPosition = this.position;\n    const parent2 = position.parent;\n    if (parent2.parent === null && position.offset === parent2.childCount) {\n      return { done: true, value: void 0 };\n    }\n    if (parent2 === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n      return { done: true, value: void 0 };\n    }\n    let node;\n    if (parent2 instanceof Text) {\n      if (position.isAtEnd) {\n        this._position = Position._createAfter(parent2);\n        return this._next();\n      }\n      node = parent2.data[position.offset];\n    } else {\n      node = parent2.getChild(position.offset);\n    }\n    if (node instanceof Element) {\n      if (!this.shallow) {\n        position = new Position(node, 0);\n      } else {\n        if (this.boundaries && this.boundaries.end.isBefore(position)) {\n          return { done: true, value: void 0 };\n        }\n        position.offset++;\n      }\n      this._position = position;\n      return this._formatReturnValue(\"elementStart\", node, previousPosition, position, 1);\n    }\n    if (node instanceof Text) {\n      if (this.singleCharacters) {\n        position = new Position(node, 0);\n        this._position = position;\n        return this._next();\n      }\n      let charactersCount = node.data.length;\n      let item;\n      if (node == this._boundaryEndParent) {\n        charactersCount = this.boundaries.end.offset;\n        item = new TextProxy(node, 0, charactersCount);\n        position = Position._createAfter(item);\n      } else {\n        item = new TextProxy(node, 0, node.data.length);\n        position.offset++;\n      }\n      this._position = position;\n      return this._formatReturnValue(\"text\", item, previousPosition, position, charactersCount);\n    }\n    if (typeof node == \"string\") {\n      let textLength;\n      if (this.singleCharacters) {\n        textLength = 1;\n      } else {\n        const endOffset = parent2 === this._boundaryEndParent ? this.boundaries.end.offset : parent2.data.length;\n        textLength = endOffset - position.offset;\n      }\n      const textProxy = new TextProxy(parent2, position.offset, textLength);\n      position.offset += textLength;\n      this._position = position;\n      return this._formatReturnValue(\"text\", textProxy, previousPosition, position, textLength);\n    }\n    position = Position._createAfter(parent2);\n    this._position = position;\n    if (this.ignoreElementEnd) {\n      return this._next();\n    }\n    return this._formatReturnValue(\"elementEnd\", parent2, previousPosition, position);\n  }\n  /**\n   * Makes a step backward in view. Moves the {@link #position} to the previous position and returns the encountered value.\n   */\n  _previous() {\n    let position = this.position.clone();\n    const previousPosition = this.position;\n    const parent2 = position.parent;\n    if (parent2.parent === null && position.offset === 0) {\n      return { done: true, value: void 0 };\n    }\n    if (parent2 == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n      return { done: true, value: void 0 };\n    }\n    let node;\n    if (parent2 instanceof Text) {\n      if (position.isAtStart) {\n        this._position = Position._createBefore(parent2);\n        return this._previous();\n      }\n      node = parent2.data[position.offset - 1];\n    } else {\n      node = parent2.getChild(position.offset - 1);\n    }\n    if (node instanceof Element) {\n      if (this.shallow) {\n        position.offset--;\n        this._position = position;\n        return this._formatReturnValue(\"elementStart\", node, previousPosition, position, 1);\n      }\n      position = new Position(node, node.childCount);\n      this._position = position;\n      if (this.ignoreElementEnd) {\n        return this._previous();\n      }\n      return this._formatReturnValue(\"elementEnd\", node, previousPosition, position);\n    }\n    if (node instanceof Text) {\n      if (this.singleCharacters) {\n        position = new Position(node, node.data.length);\n        this._position = position;\n        return this._previous();\n      }\n      let charactersCount = node.data.length;\n      let item;\n      if (node == this._boundaryStartParent) {\n        const offset = this.boundaries.start.offset;\n        item = new TextProxy(node, offset, node.data.length - offset);\n        charactersCount = item.data.length;\n        position = Position._createBefore(item);\n      } else {\n        item = new TextProxy(node, 0, node.data.length);\n        position.offset--;\n      }\n      this._position = position;\n      return this._formatReturnValue(\"text\", item, previousPosition, position, charactersCount);\n    }\n    if (typeof node == \"string\") {\n      let textLength;\n      if (!this.singleCharacters) {\n        const startOffset = parent2 === this._boundaryStartParent ? this.boundaries.start.offset : 0;\n        textLength = position.offset - startOffset;\n      } else {\n        textLength = 1;\n      }\n      position.offset -= textLength;\n      const textProxy = new TextProxy(parent2, position.offset, textLength);\n      this._position = position;\n      return this._formatReturnValue(\"text\", textProxy, previousPosition, position, textLength);\n    }\n    position = Position._createBefore(parent2);\n    this._position = position;\n    return this._formatReturnValue(\"elementStart\", parent2, previousPosition, position, 1);\n  }\n  /**\n   * Format returned data and adjust `previousPosition` and `nextPosition` if reach the bound of the {@link module:engine/view/text~Text}.\n   *\n   * @param type Type of step.\n   * @param item Item between old and new position.\n   * @param previousPosition Previous position of iterator.\n   * @param nextPosition Next position of iterator.\n   * @param length Length of the item.\n   */\n  _formatReturnValue(type, item, previousPosition, nextPosition, length) {\n    if (item instanceof TextProxy) {\n      if (item.offsetInText + item.data.length == item.textNode.data.length) {\n        if (this.direction == \"forward\" && !(this.boundaries && this.boundaries.end.isEqual(this.position))) {\n          nextPosition = Position._createAfter(item.textNode);\n          this._position = nextPosition;\n        } else {\n          previousPosition = Position._createAfter(item.textNode);\n        }\n      }\n      if (item.offsetInText === 0) {\n        if (this.direction == \"backward\" && !(this.boundaries && this.boundaries.start.isEqual(this.position))) {\n          nextPosition = Position._createBefore(item.textNode);\n          this._position = nextPosition;\n        } else {\n          previousPosition = Position._createBefore(item.textNode);\n        }\n      }\n    }\n    return {\n      done: false,\n      value: {\n        type,\n        item,\n        previousPosition,\n        nextPosition,\n        length\n      }\n    };\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/position.js\nvar Position = class _Position extends TypeCheckable {\n  /**\n   * Creates a position.\n   *\n   * @param parent Position parent.\n   * @param offset Position offset.\n   */\n  constructor(parent2, offset) {\n    super();\n    this.parent = parent2;\n    this.offset = offset;\n  }\n  /**\n   * Node directly after the position. Equals `null` when there is no node after position or position is located\n   * inside text node.\n   */\n  get nodeAfter() {\n    if (this.parent.is(\"$text\")) {\n      return null;\n    }\n    return this.parent.getChild(this.offset) || null;\n  }\n  /**\n   * Node directly before the position. Equals `null` when there is no node before position or position is located\n   * inside text node.\n   */\n  get nodeBefore() {\n    if (this.parent.is(\"$text\")) {\n      return null;\n    }\n    return this.parent.getChild(this.offset - 1) || null;\n  }\n  /**\n   * Is `true` if position is at the beginning of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n   */\n  get isAtStart() {\n    return this.offset === 0;\n  }\n  /**\n   * Is `true` if position is at the end of its {@link module:engine/view/position~Position#parent parent}, `false` otherwise.\n   */\n  get isAtEnd() {\n    const endOffset = this.parent.is(\"$text\") ? this.parent.data.length : this.parent.childCount;\n    return this.offset === endOffset;\n  }\n  /**\n   * Position's root, that is the root of the position's parent element.\n   */\n  get root() {\n    return this.parent.root;\n  }\n  /**\n   * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this position, or `null` if\n   * position is not inside an editable element.\n   */\n  get editableElement() {\n    let editable = this.parent;\n    while (!(editable instanceof EditableElement)) {\n      if (editable.parent) {\n        editable = editable.parent;\n      } else {\n        return null;\n      }\n    }\n    return editable;\n  }\n  /**\n   * Returns a new instance of Position with offset incremented by `shift` value.\n   *\n   * @param shift How position offset should get changed. Accepts negative values.\n   * @returns Shifted position.\n   */\n  getShiftedBy(shift) {\n    const shifted = _Position._createAt(this);\n    const offset = shifted.offset + shift;\n    shifted.offset = offset < 0 ? 0 : offset;\n    return shifted;\n  }\n  /**\n   * Gets the farthest position which matches the callback using\n   * {@link module:engine/view/treewalker~TreeWalker TreeWalker}.\n   *\n   * For example:\n   *\n   * ```ts\n   * getLastMatchingPosition( value => value.type == 'text' ); // <p>{}foo</p> -> <p>foo[]</p>\n   * getLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } ); // <p>foo[]</p> -> <p>{}foo</p>\n   * getLastMatchingPosition( value => false ); // Do not move the position.\n   * ```\n   *\n   * @param skip Callback function. Gets {@link module:engine/view/treewalker~TreeWalkerValue} and should\n   * return `true` if the value should be skipped or `false` if not.\n   * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n   * @returns The position after the last item which matches the `skip` callback test.\n   */\n  getLastMatchingPosition(skip, options = {}) {\n    options.startPosition = this;\n    const treeWalker = new TreeWalker(options);\n    treeWalker.skip(skip);\n    return treeWalker.position;\n  }\n  /**\n   * Returns ancestors array of this position, that is this position's parent and it's ancestors.\n   *\n   * @returns Array with ancestors.\n   */\n  getAncestors() {\n    if (this.parent.is(\"documentFragment\")) {\n      return [this.parent];\n    } else {\n      return this.parent.getAncestors({ includeSelf: true });\n    }\n  }\n  /**\n   * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n   * which is a common ancestor of both positions.\n   */\n  getCommonAncestor(position) {\n    const ancestorsA = this.getAncestors();\n    const ancestorsB = position.getAncestors();\n    let i = 0;\n    while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n      i++;\n    }\n    return i === 0 ? null : ancestorsA[i - 1];\n  }\n  /**\n   * Checks whether this position equals given position.\n   *\n   * @param otherPosition Position to compare with.\n   * @returns True if positions are same.\n   */\n  isEqual(otherPosition) {\n    return this.parent == otherPosition.parent && this.offset == otherPosition.offset;\n  }\n  /**\n   * Checks whether this position is located before given position. When method returns `false` it does not mean that\n   * this position is after give one. Two positions may be located inside separate roots and in that situation this\n   * method will still return `false`.\n   *\n   * @see module:engine/view/position~Position#isAfter\n   * @see module:engine/view/position~Position#compareWith\n   * @param otherPosition Position to compare with.\n   * @returns Returns `true` if this position is before given position.\n   */\n  isBefore(otherPosition) {\n    return this.compareWith(otherPosition) == \"before\";\n  }\n  /**\n   * Checks whether this position is located after given position. When method returns `false` it does not mean that\n   * this position is before give one. Two positions may be located inside separate roots and in that situation this\n   * method will still return `false`.\n   *\n   * @see module:engine/view/position~Position#isBefore\n   * @see module:engine/view/position~Position#compareWith\n   * @param otherPosition Position to compare with.\n   * @returns Returns `true` if this position is after given position.\n   */\n  isAfter(otherPosition) {\n    return this.compareWith(otherPosition) == \"after\";\n  }\n  /**\n   * Checks whether this position is before, after or in same position that other position. Two positions may be also\n   * different when they are located in separate roots.\n   *\n   * @param otherPosition Position to compare with.\n   */\n  compareWith(otherPosition) {\n    if (this.root !== otherPosition.root) {\n      return \"different\";\n    }\n    if (this.isEqual(otherPosition)) {\n      return \"same\";\n    }\n    const thisPath = this.parent.is(\"node\") ? this.parent.getPath() : [];\n    const otherPath = otherPosition.parent.is(\"node\") ? otherPosition.parent.getPath() : [];\n    thisPath.push(this.offset);\n    otherPath.push(otherPosition.offset);\n    const result = compareArrays(thisPath, otherPath);\n    switch (result) {\n      case \"prefix\":\n        return \"before\";\n      case \"extension\":\n        return \"after\";\n      default:\n        return thisPath[result] < otherPath[result] ? \"before\" : \"after\";\n    }\n  }\n  /**\n   * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this positions as a start position.\n   *\n   * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}\n   */\n  getWalker(options = {}) {\n    options.startPosition = this;\n    return new TreeWalker(options);\n  }\n  /**\n   * Clones this position.\n   */\n  clone() {\n    return new _Position(this.parent, this.offset);\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/view/position~Position position},\n   * * parent element and offset (offset defaults to `0`),\n   * * parent element and `'end'` (sets position at the end of that element),\n   * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n   *\n   * This method is a shortcut to other constructors such as:\n   *\n   * * {@link module:engine/view/position~Position._createBefore},\n   * * {@link module:engine/view/position~Position._createAfter}.\n   *\n   * @internal\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  static _createAt(itemOrPosition, offset) {\n    if (itemOrPosition instanceof _Position) {\n      return new this(itemOrPosition.parent, itemOrPosition.offset);\n    } else {\n      const node = itemOrPosition;\n      if (offset == \"end\") {\n        offset = node.is(\"$text\") ? node.data.length : node.childCount;\n      } else if (offset == \"before\") {\n        return this._createBefore(node);\n      } else if (offset == \"after\") {\n        return this._createAfter(node);\n      } else if (offset !== 0 && !offset) {\n        throw new CKEditorError(\"view-createpositionat-offset-required\", node);\n      }\n      return new _Position(node, offset);\n    }\n  }\n  /**\n   * Creates a new position after given view item.\n   *\n   * @internal\n   * @param item View item after which the position should be located.\n   */\n  static _createAfter(item) {\n    if (item.is(\"$textProxy\")) {\n      return new _Position(item.textNode, item.offsetInText + item.data.length);\n    }\n    if (!item.parent) {\n      throw new CKEditorError(\"view-position-after-root\", item, { root: item });\n    }\n    return new _Position(item.parent, item.index + 1);\n  }\n  /**\n   * Creates a new position before given view item.\n   *\n   * @internal\n   * @param item View item before which the position should be located.\n   */\n  static _createBefore(item) {\n    if (item.is(\"$textProxy\")) {\n      return new _Position(item.textNode, item.offsetInText);\n    }\n    if (!item.parent) {\n      throw new CKEditorError(\"view-position-before-root\", item, { root: item });\n    }\n    return new _Position(item.parent, item.index);\n  }\n};\nPosition.prototype.is = function(type) {\n  return type === \"position\" || type === \"view:position\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/range.js\nvar Range = class _Range extends TypeCheckable {\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * **Note:** Constructor creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n   *\n   * @param start Start position.\n   * @param end End position. If not set, range will be collapsed at the `start` position.\n   */\n  constructor(start, end = null) {\n    super();\n    this.start = start.clone();\n    this.end = end ? end.clone() : start.clone();\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n   * them together with additional information like length or {@link module:engine/view/position~Position positions},\n   * grouped as {@link module:engine/view/treewalker~TreeWalkerValue}.\n   *\n   * This iterator uses {@link module:engine/view/treewalker~TreeWalker TreeWalker} with `boundaries` set to this range and\n   * `ignoreElementEnd` option\n   * set to `true`.\n   */\n  *[Symbol.iterator]() {\n    yield* new TreeWalker({ boundaries: this, ignoreElementEnd: true });\n  }\n  /**\n   * Returns whether the range is collapsed, that is it start and end positions are equal.\n   */\n  get isCollapsed() {\n    return this.start.isEqual(this.end);\n  }\n  /**\n   * Returns whether this range is flat, that is if {@link module:engine/view/range~Range#start start} position and\n   * {@link module:engine/view/range~Range#end end} position are in the same {@link module:engine/view/position~Position#parent parent}.\n   */\n  get isFlat() {\n    return this.start.parent === this.end.parent;\n  }\n  /**\n   * Range root element.\n   */\n  get root() {\n    return this.start.root;\n  }\n  /**\n   * Creates a maximal range that has the same content as this range but is expanded in both ways (at the beginning\n   * and at the end).\n   *\n   * For example:\n   *\n   * ```html\n   * <p>Foo</p><p><b>{Bar}</b></p> -> <p>Foo</p>[<p><b>Bar</b>]</p>\n   * <p><b>foo</b>{bar}<span></span></p> -> <p><b>foo[</b>bar<span></span>]</p>\n   * ```\n   *\n   * Note that in the sample above:\n   *\n   * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n   * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n   * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n   *\n   * @returns Enlarged range.\n   */\n  getEnlarged() {\n    let start = this.start.getLastMatchingPosition(enlargeTrimSkip, { direction: \"backward\" });\n    let end = this.end.getLastMatchingPosition(enlargeTrimSkip);\n    if (start.parent.is(\"$text\") && start.isAtStart) {\n      start = Position._createBefore(start.parent);\n    }\n    if (end.parent.is(\"$text\") && end.isAtEnd) {\n      end = Position._createAfter(end.parent);\n    }\n    return new _Range(start, end);\n  }\n  /**\n   * Creates a minimum range that has the same content as this range but is trimmed in both ways (at the beginning\n   * and at the end).\n   *\n   * For example:\n   *\n   * ```html\n   * <p>Foo</p>[<p><b>Bar</b>]</p> -> <p>Foo</p><p><b>{Bar}</b></p>\n   * <p><b>foo[</b>bar<span></span>]</p> -> <p><b>foo</b>{bar}<span></span></p>\n   * ```\n   *\n   * Note that in the sample above:\n   *\n   * - `<p>` have type of {@link module:engine/view/containerelement~ContainerElement},\n   * - `<b>` have type of {@link module:engine/view/attributeelement~AttributeElement},\n   * - `<span>` have type of {@link module:engine/view/uielement~UIElement}.\n   *\n   * @returns Shrunk range.\n   */\n  getTrimmed() {\n    let start = this.start.getLastMatchingPosition(enlargeTrimSkip);\n    if (start.isAfter(this.end) || start.isEqual(this.end)) {\n      return new _Range(start, start);\n    }\n    let end = this.end.getLastMatchingPosition(enlargeTrimSkip, { direction: \"backward\" });\n    const nodeAfterStart = start.nodeAfter;\n    const nodeBeforeEnd = end.nodeBefore;\n    if (nodeAfterStart && nodeAfterStart.is(\"$text\")) {\n      start = new Position(nodeAfterStart, 0);\n    }\n    if (nodeBeforeEnd && nodeBeforeEnd.is(\"$text\")) {\n      end = new Position(nodeBeforeEnd, nodeBeforeEnd.data.length);\n    }\n    return new _Range(start, end);\n  }\n  /**\n   * Two ranges are equal if their start and end positions are equal.\n   *\n   * @param otherRange Range to compare with.\n   * @returns `true` if ranges are equal, `false` otherwise\n   */\n  isEqual(otherRange) {\n    return this == otherRange || this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end);\n  }\n  /**\n   * Checks whether this range contains given {@link module:engine/view/position~Position position}.\n   *\n   * @param position Position to check.\n   * @returns `true` if given {@link module:engine/view/position~Position position} is contained in this range, `false` otherwise.\n   */\n  containsPosition(position) {\n    return position.isAfter(this.start) && position.isBefore(this.end);\n  }\n  /**\n   * Checks whether this range contains given {@link module:engine/view/range~Range range}.\n   *\n   * @param otherRange Range to check.\n   * @param loose Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n   * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n   * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n   * @returns `true` if given {@link module:engine/view/range~Range range} boundaries are contained by this range, `false`\n   * otherwise.\n   */\n  containsRange(otherRange, loose = false) {\n    if (otherRange.isCollapsed) {\n      loose = false;\n    }\n    const containsStart = this.containsPosition(otherRange.start) || loose && this.start.isEqual(otherRange.start);\n    const containsEnd = this.containsPosition(otherRange.end) || loose && this.end.isEqual(otherRange.end);\n    return containsStart && containsEnd;\n  }\n  /**\n   * Computes which part(s) of this {@link module:engine/view/range~Range range} is not a part of given\n   * {@link module:engine/view/range~Range range}.\n   * Returned array contains zero, one or two {@link module:engine/view/range~Range ranges}.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let foo = downcastWriter.createText( 'foo' );\n   * let img = downcastWriter.createContainerElement( 'img' );\n   * let bar = downcastWriter.createText( 'bar' );\n   * let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n   *\n   * let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n   * let otherRange = view.createRange( // \"oo\", img, \"ba\" are in range.\n   * \tview.createPositionAt( foo, 1 ),\n   * \tview.createPositionAt( bar, 2 )\n   * );\n   * let transformed = range.getDifference( otherRange );\n   * // transformed array has no ranges because `otherRange` contains `range`\n   *\n   * otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n   * transformed = range.getDifference( otherRange );\n   * // transformed array has one range: from ( p, 2 ) to ( bar, 1 )\n   *\n   * otherRange = view.createRange( view.createPositionAt( p, 1 ), view.createPositionAt( p, 2 ) ); // img is in range.\n   * transformed = range.getDifference( otherRange );\n   * // transformed array has two ranges: from ( foo, 1 ) to ( p, 1 ) and from ( p, 2 ) to ( bar, 1 )\n   * ```\n   *\n   * @param otherRange Range to differentiate against.\n   * @returns The difference between ranges.\n   */\n  getDifference(otherRange) {\n    const ranges = [];\n    if (this.isIntersecting(otherRange)) {\n      if (this.containsPosition(otherRange.start)) {\n        ranges.push(new _Range(this.start, otherRange.start));\n      }\n      if (this.containsPosition(otherRange.end)) {\n        ranges.push(new _Range(otherRange.end, this.end));\n      }\n    } else {\n      ranges.push(this.clone());\n    }\n    return ranges;\n  }\n  /**\n   * Returns an intersection of this {@link module:engine/view/range~Range range} and given {@link module:engine/view/range~Range range}.\n   * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let foo = downcastWriter.createText( 'foo' );\n   * let img = downcastWriter.createContainerElement( 'img' );\n   * let bar = downcastWriter.createText( 'bar' );\n   * let p = downcastWriter.createContainerElement( 'p', null, [ foo, img, bar ] );\n   *\n   * let range = view.createRange( view.createPositionAt( foo, 2 ), view.createPositionAt( bar, 1 ); // \"o\", img, \"b\" are in range.\n   * let otherRange = view.createRange( view.createPositionAt( foo, 1 ), view.createPositionAt( p, 2 ); // \"oo\", img are in range.\n   * let transformed = range.getIntersection( otherRange ); // range from ( foo, 1 ) to ( p, 2 ).\n   *\n   * otherRange = view.createRange( view.createPositionAt( bar, 1 ), view.createPositionAt( bar, 3 ); \"ar\" is in range.\n   * transformed = range.getIntersection( otherRange ); // null - no common part.\n   * ```\n   *\n   * @param otherRange Range to check for intersection.\n   * @returns A common part of given ranges or `null` if ranges have no common part.\n   */\n  getIntersection(otherRange) {\n    if (this.isIntersecting(otherRange)) {\n      let commonRangeStart = this.start;\n      let commonRangeEnd = this.end;\n      if (this.containsPosition(otherRange.start)) {\n        commonRangeStart = otherRange.start;\n      }\n      if (this.containsPosition(otherRange.end)) {\n        commonRangeEnd = otherRange.end;\n      }\n      return new _Range(commonRangeStart, commonRangeEnd);\n    }\n    return null;\n  }\n  /**\n   * Creates a {@link module:engine/view/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n   *\n   * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n   */\n  getWalker(options = {}) {\n    options.boundaries = this;\n    return new TreeWalker(options);\n  }\n  /**\n   * Returns a {@link module:engine/view/node~Node} or {@link module:engine/view/documentfragment~DocumentFragment}\n   * which is a common ancestor of range's both ends (in which the entire range is contained).\n   */\n  getCommonAncestor() {\n    return this.start.getCommonAncestor(this.end);\n  }\n  /**\n   * Returns an {@link module:engine/view/element~Element Element} contained by the range.\n   * The element will be returned when it is the **only** node within the range and **fully–contained**\n   * at the same time.\n   */\n  getContainedElement() {\n    if (this.isCollapsed) {\n      return null;\n    }\n    let nodeAfterStart = this.start.nodeAfter;\n    let nodeBeforeEnd = this.end.nodeBefore;\n    if (this.start.parent.is(\"$text\") && this.start.isAtEnd && this.start.parent.nextSibling) {\n      nodeAfterStart = this.start.parent.nextSibling;\n    }\n    if (this.end.parent.is(\"$text\") && this.end.isAtStart && this.end.parent.previousSibling) {\n      nodeBeforeEnd = this.end.parent.previousSibling;\n    }\n    if (nodeAfterStart && nodeAfterStart.is(\"element\") && nodeAfterStart === nodeBeforeEnd) {\n      return nodeAfterStart;\n    }\n    return null;\n  }\n  /**\n   * Clones this range.\n   */\n  clone() {\n    return new _Range(this.start, this.end);\n  }\n  /**\n   * Returns an iterator that iterates over all {@link module:engine/view/item~Item view items} that are in this range and returns\n   * them.\n   *\n   * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n   * set to `true`. However it returns only {@link module:engine/view/item~Item items},\n   * not {@link module:engine/view/treewalker~TreeWalkerValue}.\n   *\n   * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n   * a full list of available options.\n   *\n   * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n   */\n  *getItems(options = {}) {\n    options.boundaries = this;\n    options.ignoreElementEnd = true;\n    const treeWalker = new TreeWalker(options);\n    for (const value of treeWalker) {\n      yield value.item;\n    }\n  }\n  /**\n   * Returns an iterator that iterates over all {@link module:engine/view/position~Position positions} that are boundaries or\n   * contained in this range.\n   *\n   * This method uses {@link module:engine/view/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n   * {@link module:engine/view/position~Position positions}, not {@link module:engine/view/treewalker~TreeWalkerValue}.\n   *\n   * You may specify additional options for the tree walker. See {@link module:engine/view/treewalker~TreeWalker} for\n   * a full list of available options.\n   *\n   * @param options Object with configuration options. See {@link module:engine/view/treewalker~TreeWalker}.\n   */\n  *getPositions(options = {}) {\n    options.boundaries = this;\n    const treeWalker = new TreeWalker(options);\n    yield treeWalker.position;\n    for (const value of treeWalker) {\n      yield value.nextPosition;\n    }\n  }\n  /**\n   * Checks and returns whether this range intersects with the given range.\n   *\n   * @param otherRange Range to compare with.\n   * @returns True if ranges intersect.\n   */\n  isIntersecting(otherRange) {\n    return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n  }\n  /**\n   * Creates a range from the given parents and offsets.\n   *\n   * @internal\n   * @param startElement Start position parent element.\n   * @param startOffset Start position offset.\n   * @param endElement End position parent element.\n   * @param endOffset End position offset.\n   * @returns Created range.\n   */\n  static _createFromParentsAndOffsets(startElement, startOffset, endElement, endOffset) {\n    return new this(new Position(startElement, startOffset), new Position(endElement, endOffset));\n  }\n  /**\n   * Creates a new range, spreading from specified {@link module:engine/view/position~Position position} to a position moved by\n   * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n   *\n   * @internal\n   * @param position Beginning of the range.\n   * @param shift How long the range should be.\n   */\n  static _createFromPositionAndShift(position, shift) {\n    const start = position;\n    const end = position.getShiftedBy(shift);\n    return shift > 0 ? new this(start, end) : new this(end, start);\n  }\n  /**\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * @internal\n   * @param element Element which is a parent for the range.\n   */\n  static _createIn(element) {\n    return this._createFromParentsAndOffsets(element, 0, element, element.childCount);\n  }\n  /**\n   * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n   *\n   * @internal\n   */\n  static _createOn(item) {\n    const size = item.is(\"$textProxy\") ? item.offsetSize : 1;\n    return this._createFromPositionAndShift(Position._createBefore(item), size);\n  }\n};\nRange.prototype.is = function(type) {\n  return type === \"range\" || type === \"view:range\";\n};\nfunction enlargeTrimSkip(value) {\n  if (value.item.is(\"attributeElement\") || value.item.is(\"uiElement\")) {\n    return true;\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/selection.js\nvar Selection = class _Selection extends EmitterMixin(TypeCheckable) {\n  /**\n   * Creates new selection instance.\n   *\n   * **Note**: The selection constructor is available as a factory method:\n   *\n   * * {@link module:engine/view/view~View#createSelection `View#createSelection()`},\n   * * {@link module:engine/view/upcastwriter~UpcastWriter#createSelection `UpcastWriter#createSelection()`}.\n   *\n   * ```ts\n   * // Creates empty selection without ranges.\n   * const selection = writer.createSelection();\n   *\n   * // Creates selection at the given range.\n   * const range = writer.createRange( start, end );\n   * const selection = writer.createSelection( range );\n   *\n   * // Creates selection at the given ranges\n   * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   * const selection = writer.createSelection( ranges );\n   *\n   * // Creates selection from the other selection.\n   * const otherSelection = writer.createSelection();\n   * const selection = writer.createSelection( otherSelection );\n   *\n   * // Creates selection from the document selection.\n   * const selection = writer.createSelection( editor.editing.view.document.selection );\n   *\n   * // Creates selection at the given position.\n   * const position = writer.createPositionFromPath( root, path );\n   * const selection = writer.createSelection( position );\n   *\n   * // Creates collapsed selection at the position of given item and offset.\n   * const paragraph = writer.createContainerElement( 'paragraph' );\n   * const selection = writer.createSelection( paragraph, offset );\n   *\n   * // Creates a range inside an {@link module:engine/view/element~Element element} which starts before the\n   * // first child of that element and ends after the last child of that element.\n   * const selection = writer.createSelection( paragraph, 'in' );\n   *\n   * // Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends\n   * // just after the item.\n   * const selection = writer.createSelection( paragraph, 'on' );\n   * ```\n   *\n   * `Selection`'s constructor allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   * ```ts\n   * // Creates backward selection.\n   * const selection = writer.createSelection( range, { backward: true } );\n   * ```\n   *\n   * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n   * (and be  properly handled by screen readers).\n   *\n   * ```ts\n   * // Creates fake selection with label.\n   * const selection = writer.createSelection( range, { fake: true, label: 'foo' } );\n   * ```\n   *\n   * @internal\n   */\n  constructor(...args) {\n    super();\n    this._ranges = [];\n    this._lastRangeBackward = false;\n    this._isFake = false;\n    this._fakeSelectionLabel = \"\";\n    if (args.length) {\n      this.setTo(...args);\n    }\n  }\n  /**\n   * Returns true if selection instance is marked as `fake`.\n   *\n   * @see #setTo\n   */\n  get isFake() {\n    return this._isFake;\n  }\n  /**\n   * Returns fake selection label.\n   *\n   * @see #setTo\n   */\n  get fakeSelectionLabel() {\n    return this._fakeSelectionLabel;\n  }\n  /**\n   * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n   * {@link #focus focus} they define the direction of selection, which is important\n   * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n   * It may be a bit unintuitive when there are multiple ranges in selection.\n   *\n   * @see #focus\n   */\n  get anchor() {\n    if (!this._ranges.length) {\n      return null;\n    }\n    const range = this._ranges[this._ranges.length - 1];\n    const anchor = this._lastRangeBackward ? range.end : range.start;\n    return anchor.clone();\n  }\n  /**\n   * Selection focus. Focus is a position where the selection ends.\n   *\n   * @see #anchor\n   */\n  get focus() {\n    if (!this._ranges.length) {\n      return null;\n    }\n    const range = this._ranges[this._ranges.length - 1];\n    const focus = this._lastRangeBackward ? range.start : range.end;\n    return focus.clone();\n  }\n  /**\n   * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n   * collapsed.\n   */\n  get isCollapsed() {\n    return this.rangeCount === 1 && this._ranges[0].isCollapsed;\n  }\n  /**\n   * Returns number of ranges in selection.\n   */\n  get rangeCount() {\n    return this._ranges.length;\n  }\n  /**\n   * Specifies whether the {@link #focus} precedes {@link #anchor}.\n   */\n  get isBackward() {\n    return !this.isCollapsed && this._lastRangeBackward;\n  }\n  /**\n   * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n   * if the selection is not inside an editable element.\n   */\n  get editableElement() {\n    if (this.anchor) {\n      return this.anchor.editableElement;\n    }\n    return null;\n  }\n  /**\n   * Returns an iterable that contains copies of all ranges added to the selection.\n   */\n  *getRanges() {\n    for (const range of this._ranges) {\n      yield range.clone();\n    }\n  }\n  /**\n   * Returns copy of the first range in the selection. First range is the one which\n   * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n   * position of all other ranges (not to confuse with the first range added to the selection).\n   * Returns `null` if no ranges are added to selection.\n   */\n  getFirstRange() {\n    let first2 = null;\n    for (const range of this._ranges) {\n      if (!first2 || range.start.isBefore(first2.start)) {\n        first2 = range;\n      }\n    }\n    return first2 ? first2.clone() : null;\n  }\n  /**\n   * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n   * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n   * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n   */\n  getLastRange() {\n    let last2 = null;\n    for (const range of this._ranges) {\n      if (!last2 || range.end.isAfter(last2.end)) {\n        last2 = range;\n      }\n    }\n    return last2 ? last2.clone() : null;\n  }\n  /**\n   * Returns copy of the first position in the selection. First position is the position that\n   * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n   * Returns `null` if no ranges are added to selection.\n   */\n  getFirstPosition() {\n    const firstRange = this.getFirstRange();\n    return firstRange ? firstRange.start.clone() : null;\n  }\n  /**\n   * Returns copy of the last position in the selection. Last position is the position that\n   * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n   * Returns `null` if no ranges are added to selection.\n   */\n  getLastPosition() {\n    const lastRange = this.getLastRange();\n    return lastRange ? lastRange.end.clone() : null;\n  }\n  /**\n   * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n   * same number of ranges and all ranges from one selection equal to a range from other selection.\n   *\n   * @param otherSelection Selection to compare with.\n   * @returns `true` if selections are equal, `false` otherwise.\n   */\n  isEqual(otherSelection) {\n    if (this.isFake != otherSelection.isFake) {\n      return false;\n    }\n    if (this.isFake && this.fakeSelectionLabel != otherSelection.fakeSelectionLabel) {\n      return false;\n    }\n    if (this.rangeCount != otherSelection.rangeCount) {\n      return false;\n    } else if (this.rangeCount === 0) {\n      return true;\n    }\n    if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n      return false;\n    }\n    for (const thisRange of this._ranges) {\n      let found = false;\n      for (const otherRange of otherSelection._ranges) {\n        if (thisRange.isEqual(otherRange)) {\n          found = true;\n          break;\n        }\n      }\n      if (!found) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n   * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n   * equal to any trimmed range from other selection.\n   *\n   * @param otherSelection Selection to compare with.\n   * @returns `true` if selections are similar, `false` otherwise.\n   */\n  isSimilar(otherSelection) {\n    if (this.isBackward != otherSelection.isBackward) {\n      return false;\n    }\n    const numOfRangesA = count(this.getRanges());\n    const numOfRangesB = count(otherSelection.getRanges());\n    if (numOfRangesA != numOfRangesB) {\n      return false;\n    }\n    if (numOfRangesA == 0) {\n      return true;\n    }\n    for (let rangeA of this.getRanges()) {\n      rangeA = rangeA.getTrimmed();\n      let found = false;\n      for (let rangeB of otherSelection.getRanges()) {\n        rangeB = rangeB.getTrimmed();\n        if (rangeA.start.isEqual(rangeB.start) && rangeA.end.isEqual(rangeB.end)) {\n          found = true;\n          break;\n        }\n      }\n      if (!found) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n   * one range in the selection, and that range contains exactly one element.\n   * Returns `null` if there is no selected element.\n   */\n  getSelectedElement() {\n    if (this.rangeCount !== 1) {\n      return null;\n    }\n    return this.getFirstRange().getContainedElement();\n  }\n  /**\n   * Sets this selection's ranges and direction to the specified location based on the given\n   * {@link module:engine/view/selection~Selectable selectable}.\n   *\n   * ```ts\n   * // Sets selection to the given range.\n   * const range = writer.createRange( start, end );\n   * selection.setTo( range );\n   *\n   * // Sets selection to given ranges.\n   * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   * selection.setTo( range );\n   *\n   * // Sets selection to the other selection.\n   * const otherSelection = writer.createSelection();\n   * selection.setTo( otherSelection );\n   *\n   * // Sets selection to contents of DocumentSelection.\n   * selection.setTo( editor.editing.view.document.selection );\n   *\n   * // Sets collapsed selection at the given position.\n   * const position = writer.createPositionAt( root, path );\n   * selection.setTo( position );\n   *\n   * // Sets collapsed selection at the position of given item and offset.\n   * selection.setTo( paragraph, offset );\n   * ```\n   *\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * ```ts\n   * selection.setTo( paragraph, 'in' );\n   * ```\n   *\n   * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n   *\n   * ```ts\n   * selection.setTo( paragraph, 'on' );\n   *\n   * // Clears selection. Removes all ranges.\n   * selection.setTo( null );\n   * ```\n   *\n   * `Selection#setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   * ```ts\n   * // Sets selection as backward.\n   * selection.setTo( range, { backward: true } );\n   * ```\n   *\n   * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM\n   * (and be  properly handled by screen readers).\n   *\n   * ```ts\n   * // Creates fake selection with label.\n   * selection.setTo( range, { fake: true, label: 'foo' } );\n   * ```\n   *\n   * @fires change\n   */\n  setTo(...args) {\n    let [selectable, placeOrOffset, options] = args;\n    if (typeof placeOrOffset == \"object\") {\n      options = placeOrOffset;\n      placeOrOffset = void 0;\n    }\n    if (selectable === null) {\n      this._setRanges([]);\n      this._setFakeOptions(options);\n    } else if (selectable instanceof _Selection || selectable instanceof DocumentSelection) {\n      this._setRanges(selectable.getRanges(), selectable.isBackward);\n      this._setFakeOptions({ fake: selectable.isFake, label: selectable.fakeSelectionLabel });\n    } else if (selectable instanceof Range) {\n      this._setRanges([selectable], options && options.backward);\n      this._setFakeOptions(options);\n    } else if (selectable instanceof Position) {\n      this._setRanges([new Range(selectable)]);\n      this._setFakeOptions(options);\n    } else if (selectable instanceof Node2) {\n      const backward = !!options && !!options.backward;\n      let range;\n      if (placeOrOffset === void 0) {\n        throw new CKEditorError(\"view-selection-setto-required-second-parameter\", this);\n      } else if (placeOrOffset == \"in\") {\n        range = Range._createIn(selectable);\n      } else if (placeOrOffset == \"on\") {\n        range = Range._createOn(selectable);\n      } else {\n        range = new Range(Position._createAt(selectable, placeOrOffset));\n      }\n      this._setRanges([range], backward);\n      this._setFakeOptions(options);\n    } else if (isIterable(selectable)) {\n      this._setRanges(selectable, options && options.backward);\n      this._setFakeOptions(options);\n    } else {\n      throw new CKEditorError(\"view-selection-setto-not-selectable\", this);\n    }\n    this.fire(\"change\");\n  }\n  /**\n   * Moves {@link #focus} to the specified location.\n   *\n   * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n   * parameters.\n   *\n   * @fires change\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  setFocus(itemOrPosition, offset) {\n    if (this.anchor === null) {\n      throw new CKEditorError(\"view-selection-setfocus-no-ranges\", this);\n    }\n    const newFocus = Position._createAt(itemOrPosition, offset);\n    if (newFocus.compareWith(this.focus) == \"same\") {\n      return;\n    }\n    const anchor = this.anchor;\n    this._ranges.pop();\n    if (newFocus.compareWith(anchor) == \"before\") {\n      this._addRange(new Range(newFocus, anchor), true);\n    } else {\n      this._addRange(new Range(anchor, newFocus));\n    }\n    this.fire(\"change\");\n  }\n  /**\n   * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n   * is treated like the last added range and is used to set {@link #anchor anchor} and {@link #focus focus}.\n   * Accepts a flag describing in which way the selection is made.\n   *\n   * @param newRanges Iterable object of ranges to set.\n   * @param isLastBackward Flag describing if last added range was selected forward - from start to end\n   * (`false`) or backward - from end to start (`true`). Defaults to `false`.\n   */\n  _setRanges(newRanges, isLastBackward = false) {\n    newRanges = Array.from(newRanges);\n    this._ranges = [];\n    for (const range of newRanges) {\n      this._addRange(range);\n    }\n    this._lastRangeBackward = !!isLastBackward;\n  }\n  /**\n   * Sets this selection instance to be marked as `fake`. A fake selection does not render as browser native selection\n   * over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to\n   * the user and selection over elements can be represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be\n   * properly handled by screen readers).\n   */\n  _setFakeOptions(options = {}) {\n    this._isFake = !!options.fake;\n    this._fakeSelectionLabel = options.fake ? options.label || \"\" : \"\";\n  }\n  /**\n   * Adds a range to the selection. Added range is copied. This means that passed range is not saved in the\n   * selection instance and you can safely operate on it.\n   *\n   * Accepts a flag describing in which way the selection is made - passed range might be selected from\n   * {@link module:engine/view/range~Range#start start} to {@link module:engine/view/range~Range#end end}\n   * or from {@link module:engine/view/range~Range#end end} to {@link module:engine/view/range~Range#start start}.\n   * The flag is used to set {@link #anchor anchor} and {@link #focus focus} properties.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n   * with ranges already stored in Selection instance.\n   */\n  _addRange(range, isBackward = false) {\n    if (!(range instanceof Range)) {\n      throw new CKEditorError(\"view-selection-add-range-not-range\", this);\n    }\n    this._pushRange(range);\n    this._lastRangeBackward = !!isBackward;\n  }\n  /**\n   * Adds range to selection - creates copy of given range so it can be safely used and modified.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-selection-range-intersects` if added range intersects\n   * with ranges already stored in selection instance.\n   */\n  _pushRange(range) {\n    for (const storedRange of this._ranges) {\n      if (range.isIntersecting(storedRange)) {\n        throw new CKEditorError(\"view-selection-range-intersects\", this, { addedRange: range, intersectingRange: storedRange });\n      }\n    }\n    this._ranges.push(new Range(range.start, range.end));\n  }\n};\nSelection.prototype.is = function(type) {\n  return type === \"selection\" || type === \"view:selection\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/documentselection.js\nvar DocumentSelection = class extends EmitterMixin(TypeCheckable) {\n  constructor(...args) {\n    super();\n    this._selection = new Selection();\n    this._selection.delegate(\"change\").to(this);\n    if (args.length) {\n      this._selection.setTo(...args);\n    }\n  }\n  /**\n   * Returns true if selection instance is marked as `fake`.\n   *\n   * @see #_setTo\n   */\n  get isFake() {\n    return this._selection.isFake;\n  }\n  /**\n   * Returns fake selection label.\n   *\n   * @see #_setTo\n   */\n  get fakeSelectionLabel() {\n    return this._selection.fakeSelectionLabel;\n  }\n  /**\n   * Selection anchor. Anchor may be described as a position where the selection starts. Together with\n   * {@link #focus focus} they define the direction of selection, which is important\n   * when expanding/shrinking selection. Anchor is always the start or end of the most recent added range.\n   * It may be a bit unintuitive when there are multiple ranges in selection.\n   *\n   * @see #focus\n   */\n  get anchor() {\n    return this._selection.anchor;\n  }\n  /**\n   * Selection focus. Focus is a position where the selection ends.\n   *\n   * @see #anchor\n   */\n  get focus() {\n    return this._selection.focus;\n  }\n  /**\n   * Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n   * collapsed.\n   */\n  get isCollapsed() {\n    return this._selection.isCollapsed;\n  }\n  /**\n   * Returns number of ranges in selection.\n   */\n  get rangeCount() {\n    return this._selection.rangeCount;\n  }\n  /**\n   * Specifies whether the {@link #focus} precedes {@link #anchor}.\n   */\n  get isBackward() {\n    return this._selection.isBackward;\n  }\n  /**\n   * {@link module:engine/view/editableelement~EditableElement EditableElement} instance that contains this selection, or `null`\n   * if the selection is not inside an editable element.\n   */\n  get editableElement() {\n    return this._selection.editableElement;\n  }\n  /**\n   * Used for the compatibility with the {@link module:engine/view/selection~Selection#isEqual} method.\n   *\n   * @internal\n   */\n  get _ranges() {\n    return this._selection._ranges;\n  }\n  /**\n   * Returns an iterable that contains copies of all ranges added to the selection.\n   */\n  *getRanges() {\n    yield* this._selection.getRanges();\n  }\n  /**\n   * Returns copy of the first range in the selection. First range is the one which\n   * {@link module:engine/view/range~Range#start start} position {@link module:engine/view/position~Position#isBefore is before} start\n   * position of all other ranges (not to confuse with the first range added to the selection).\n   * Returns `null` if no ranges are added to selection.\n   */\n  getFirstRange() {\n    return this._selection.getFirstRange();\n  }\n  /**\n   * Returns copy of the last range in the selection. Last range is the one which {@link module:engine/view/range~Range#end end}\n   * position {@link module:engine/view/position~Position#isAfter is after} end position of all other ranges (not to confuse\n   * with the last range added to the selection). Returns `null` if no ranges are added to selection.\n   */\n  getLastRange() {\n    return this._selection.getLastRange();\n  }\n  /**\n   * Returns copy of the first position in the selection. First position is the position that\n   * {@link module:engine/view/position~Position#isBefore is before} any other position in the selection ranges.\n   * Returns `null` if no ranges are added to selection.\n   */\n  getFirstPosition() {\n    return this._selection.getFirstPosition();\n  }\n  /**\n   * Returns copy of the last position in the selection. Last position is the position that\n   * {@link module:engine/view/position~Position#isAfter is after} any other position in the selection ranges.\n   * Returns `null` if no ranges are added to selection.\n   */\n  getLastPosition() {\n    return this._selection.getLastPosition();\n  }\n  /**\n   * Returns the selected element. {@link module:engine/view/element~Element Element} is considered as selected if there is only\n   * one range in the selection, and that range contains exactly one element.\n   * Returns `null` if there is no selected element.\n   */\n  getSelectedElement() {\n    return this._selection.getSelectedElement();\n  }\n  /**\n   * Checks whether, this selection is equal to given selection. Selections are equal if they have same directions,\n   * same number of ranges and all ranges from one selection equal to a range from other selection.\n   *\n   * @param otherSelection Selection to compare with.\n   * @returns `true` if selections are equal, `false` otherwise.\n   */\n  isEqual(otherSelection) {\n    return this._selection.isEqual(otherSelection);\n  }\n  /**\n   * Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same\n   * number of ranges, and all {@link module:engine/view/range~Range#getTrimmed trimmed} ranges from one selection are\n   * equal to any trimmed range from other selection.\n   *\n   * @param otherSelection Selection to compare with.\n   * @returns `true` if selections are similar, `false` otherwise.\n   */\n  isSimilar(otherSelection) {\n    return this._selection.isSimilar(otherSelection);\n  }\n  /**\n   * Sets this selection's ranges and direction to the specified location based on the given\n   * {@link module:engine/view/selection~Selectable selectable}.\n   *\n   * ```ts\n   * // Sets selection to the given range.\n   * const range = writer.createRange( start, end );\n   * documentSelection._setTo( range );\n   *\n   * // Sets selection to given ranges.\n   * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( start2, end2 ) ];\n   * documentSelection._setTo( range );\n   *\n   * // Sets selection to the other selection.\n   * const otherSelection = writer.createSelection();\n   * documentSelection._setTo( otherSelection );\n   *\n   * // Sets collapsed selection at the given position.\n   * const position = writer.createPositionAt( root, offset );\n   * documentSelection._setTo( position );\n   *\n   * // Sets collapsed selection at the position of given item and offset.\n   * documentSelection._setTo( paragraph, offset );\n   * ```\n   *\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * ```ts\n   * documentSelection._setTo( paragraph, 'in' );\n   * ```\n   *\n   * Creates a range on an {@link module:engine/view/item~Item item} which starts before the item and ends just after the item.\n   *\n   * ```ts\n   * documentSelection._setTo( paragraph, 'on' );\n   *\n   * // Clears selection. Removes all ranges.\n   * documentSelection._setTo( null );\n   * ```\n   *\n   * `Selection#_setTo()` method allow passing additional options (`backward`, `fake` and `label`) as the last argument.\n   *\n   * ```ts\n   * // Sets selection as backward.\n   * documentSelection._setTo( range, { backward: true } );\n   * ```\n   *\n   * Fake selection does not render as browser native selection over selected elements and is hidden to the user.\n   * This way, no native selection UI artifacts are displayed to the user and selection over elements can be\n   * represented in other way, for example by applying proper CSS class.\n   *\n   * Additionally fake's selection label can be provided. It will be used to des cribe fake selection in DOM\n   * (and be  properly handled by screen readers).\n   *\n   * ```ts\n   * // Creates fake selection with label.\n   * documentSelection._setTo( range, { fake: true, label: 'foo' } );\n   * ```\n   *\n   * @internal\n   * @fires change\n   */\n  _setTo(...args) {\n    this._selection.setTo(...args);\n  }\n  /**\n   * Moves {@link #focus} to the specified location.\n   *\n   * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n   * parameters.\n   *\n   * @internal\n   * @fires change\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  _setFocus(itemOrPosition, offset) {\n    this._selection.setFocus(itemOrPosition, offset);\n  }\n};\nDocumentSelection.prototype.is = function(type) {\n  return type === \"selection\" || type == \"documentSelection\" || type == \"view:selection\" || type == \"view:documentSelection\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/bubblingeventinfo.js\nvar BubblingEventInfo = class extends EventInfo {\n  /**\n   * @param source The emitter.\n   * @param name The event name.\n   * @param startRange The view range that the bubbling should start from.\n   */\n  constructor(source, name, startRange) {\n    super(source, name);\n    this.startRange = startRange;\n    this._eventPhase = \"none\";\n    this._currentTarget = null;\n  }\n  /**\n   * The current event phase.\n   */\n  get eventPhase() {\n    return this._eventPhase;\n  }\n  /**\n   * The current bubbling target.\n   */\n  get currentTarget() {\n    return this._currentTarget;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/bubblingemittermixin.js\nvar contextsSymbol = Symbol(\"bubbling contexts\");\nfunction BubblingEmitterMixin(base) {\n  class Mixin extends base {\n    fire(eventOrInfo, ...eventArgs) {\n      try {\n        const eventInfo = eventOrInfo instanceof EventInfo ? eventOrInfo : new EventInfo(this, eventOrInfo);\n        const eventContexts = getBubblingContexts(this);\n        if (!eventContexts.size) {\n          return;\n        }\n        updateEventInfo(eventInfo, \"capturing\", this);\n        if (fireListenerFor(eventContexts, \"$capture\", eventInfo, ...eventArgs)) {\n          return eventInfo.return;\n        }\n        const startRange = eventInfo.startRange || this.selection.getFirstRange();\n        const selectedElement = startRange ? startRange.getContainedElement() : null;\n        const isCustomContext = selectedElement ? Boolean(getCustomContext(eventContexts, selectedElement)) : false;\n        let node = selectedElement || getDeeperRangeParent(startRange);\n        updateEventInfo(eventInfo, \"atTarget\", node);\n        if (!isCustomContext) {\n          if (fireListenerFor(eventContexts, \"$text\", eventInfo, ...eventArgs)) {\n            return eventInfo.return;\n          }\n          updateEventInfo(eventInfo, \"bubbling\", node);\n        }\n        while (node) {\n          if (node.is(\"rootElement\")) {\n            if (fireListenerFor(eventContexts, \"$root\", eventInfo, ...eventArgs)) {\n              return eventInfo.return;\n            }\n          } else if (node.is(\"element\")) {\n            if (fireListenerFor(eventContexts, node.name, eventInfo, ...eventArgs)) {\n              return eventInfo.return;\n            }\n          }\n          if (fireListenerFor(eventContexts, node, eventInfo, ...eventArgs)) {\n            return eventInfo.return;\n          }\n          node = node.parent;\n          updateEventInfo(eventInfo, \"bubbling\", node);\n        }\n        updateEventInfo(eventInfo, \"bubbling\", this);\n        fireListenerFor(eventContexts, \"$document\", eventInfo, ...eventArgs);\n        return eventInfo.return;\n      } catch (err) {\n        CKEditorError.rethrowUnexpectedError(err, this);\n      }\n    }\n    _addEventListener(event, callback, options) {\n      const contexts = toArray(options.context || \"$document\");\n      const eventContexts = getBubblingContexts(this);\n      for (const context of contexts) {\n        let emitter = eventContexts.get(context);\n        if (!emitter) {\n          emitter = new (EmitterMixin())();\n          eventContexts.set(context, emitter);\n        }\n        this.listenTo(emitter, event, callback, options);\n      }\n    }\n    _removeEventListener(event, callback) {\n      const eventContexts = getBubblingContexts(this);\n      for (const emitter of eventContexts.values()) {\n        this.stopListening(emitter, event, callback);\n      }\n    }\n  }\n  return Mixin;\n}\n{\n  const mixin = BubblingEmitterMixin(Object);\n  [\"fire\", \"_addEventListener\", \"_removeEventListener\"].forEach((key) => {\n    BubblingEmitterMixin[key] = mixin.prototype[key];\n  });\n}\nfunction updateEventInfo(eventInfo, eventPhase, currentTarget) {\n  if (eventInfo instanceof BubblingEventInfo) {\n    eventInfo._eventPhase = eventPhase;\n    eventInfo._currentTarget = currentTarget;\n  }\n}\nfunction fireListenerFor(eventContexts, context, eventInfo, ...eventArgs) {\n  const emitter = typeof context == \"string\" ? eventContexts.get(context) : getCustomContext(eventContexts, context);\n  if (!emitter) {\n    return false;\n  }\n  emitter.fire(eventInfo, ...eventArgs);\n  return eventInfo.stop.called;\n}\nfunction getCustomContext(eventContexts, node) {\n  for (const [context, emitter] of eventContexts) {\n    if (typeof context == \"function\" && context(node)) {\n      return emitter;\n    }\n  }\n  return null;\n}\nfunction getBubblingContexts(source) {\n  if (!source[contextsSymbol]) {\n    source[contextsSymbol] = /* @__PURE__ */ new Map();\n  }\n  return source[contextsSymbol];\n}\nfunction getDeeperRangeParent(range) {\n  if (!range) {\n    return null;\n  }\n  const startParent = range.start.parent;\n  const endParent = range.end.parent;\n  const startPath = startParent.getPath();\n  const endPath = endParent.getPath();\n  return startPath.length > endPath.length ? startParent : endParent;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/document.js\nvar Document = class extends BubblingEmitterMixin(ObservableMixin()) {\n  /**\n   * Creates a Document instance.\n   *\n   * @param stylesProcessor The styles processor instance.\n   */\n  constructor(stylesProcessor) {\n    super();\n    this._postFixers = /* @__PURE__ */ new Set();\n    this.selection = new DocumentSelection();\n    this.roots = new Collection({ idProperty: \"rootName\" });\n    this.stylesProcessor = stylesProcessor;\n    this.set(\"isReadOnly\", false);\n    this.set(\"isFocused\", false);\n    this.set(\"isSelecting\", false);\n    this.set(\"isComposing\", false);\n  }\n  /**\n   * Gets a {@link module:engine/view/document~Document#roots view root element} with the specified name. If the name is not\n   * specific \"main\" root is returned.\n   *\n   * @param name Name of the root.\n   * @returns The view root element with the specified name or null when there is no root of given name.\n   */\n  getRoot(name = \"main\") {\n    return this.roots.get(name);\n  }\n  /**\n   * Allows registering post-fixer callbacks. A post-fixers mechanism allows to update the view tree just before it is rendered\n   * to the DOM.\n   *\n   * Post-fixers are executed right after all changes from the outermost change block were applied but\n   * before the {@link module:engine/view/view~View#event:render render event} is fired. If a post-fixer callback made\n   * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n   * not be fixed in the new document tree state.\n   *\n   * View post-fixers are useful when you want to apply some fixes whenever the view structure changes. Keep in mind that\n   * changes executed in a view post-fixer should not break model-view mapping.\n   *\n   * The types of changes which should be safe:\n   *\n   * * adding or removing attribute from elements,\n   * * changes inside of {@link module:engine/view/uielement~UIElement UI elements},\n   * * {@link module:engine/controller/editingcontroller~EditingController#reconvertItem marking some of the model elements to be\n   * re-converted}.\n   *\n   * Try to avoid changes which touch view structure:\n   *\n   * * you should not add or remove nor wrap or unwrap any view elements,\n   * * you should not change the editor data model in a view post-fixer.\n   *\n   * As a parameter, a post-fixer callback receives a {@link module:engine/view/downcastwriter~DowncastWriter downcast writer}.\n   *\n   * Typically, a post-fixer will look like this:\n   *\n   * ```ts\n   * editor.editing.view.document.registerPostFixer( writer => {\n   * \tif ( checkSomeCondition() ) {\n   * \t\twriter.doSomething();\n   *\n   * \t\t// Let other post-fixers know that something changed.\n   * \t\treturn true;\n   * \t}\n   *\n   * \treturn false;\n   * } );\n   * ```\n   *\n   * Note that nothing happens right after you register a post-fixer (e.g. execute such a code in the console).\n   * That is because adding a post-fixer does not execute it.\n   * The post-fixer will be executed as soon as any change in the document needs to cause its rendering.\n   * If you want to re-render the editor's view after registering the post-fixer then you should do it manually by calling\n   * {@link module:engine/view/view~View#forceRender `view.forceRender()`}.\n   *\n   * If you need to register a callback which is executed when DOM elements are already updated,\n   * use {@link module:engine/view/view~View#event:render render event}.\n   */\n  registerPostFixer(postFixer) {\n    this._postFixers.add(postFixer);\n  }\n  /**\n   * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n   */\n  destroy() {\n    this.roots.forEach((root2) => root2.destroy());\n    this.stopListening();\n  }\n  /**\n   * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n   *\n   * @internal\n   */\n  _callPostFixers(writer) {\n    let wasFixed = false;\n    do {\n      for (const callback of this._postFixers) {\n        wasFixed = callback(writer);\n        if (wasFixed) {\n          break;\n        }\n      }\n    } while (wasFixed);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/attributeelement.js\nvar DEFAULT_PRIORITY = 10;\nvar AttributeElement = class extends Element {\n  /**\n   * Creates an attribute element.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createAttributeElement\n   * @see module:engine/view/element~Element\n   * @protected\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attrs, children) {\n    super(document2, name, attrs, children);\n    this._priority = DEFAULT_PRIORITY;\n    this._id = null;\n    this._clonesGroup = null;\n    this.getFillerOffset = getFillerOffset2;\n  }\n  /**\n   * Element priority. Decides in what order elements are wrapped by {@link module:engine/view/downcastwriter~DowncastWriter}.\n   */\n  get priority() {\n    return this._priority;\n  }\n  /**\n   * Element identifier. If set, it is used by {@link module:engine/view/element~Element#isSimilar},\n   * and then two elements are considered similar if, and only if they have the same `id`.\n   */\n  get id() {\n    return this._id;\n  }\n  /**\n   * Returns all {@link module:engine/view/attributeelement~AttributeElement attribute elements} that has the\n   * same {@link module:engine/view/attributeelement~AttributeElement#id id} and are in the view tree (were not removed).\n   *\n   * Note: If this element has been removed from the tree, returned set will not include it.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError attribute-element-get-elements-with-same-id-no-id}\n   * if this element has no `id`.\n   *\n   * @returns Set containing all the attribute elements\n   * with the same `id` that were added and not removed from the view tree.\n   */\n  getElementsWithSameId() {\n    if (this.id === null) {\n      throw new CKEditorError(\"attribute-element-get-elements-with-same-id-no-id\", this);\n    }\n    return new Set(this._clonesGroup);\n  }\n  /**\n   * Checks if this element is similar to other element.\n   *\n   * If none of elements has set {@link module:engine/view/attributeelement~AttributeElement#id}, then both elements\n   * should have the same name, attributes and priority to be considered as similar. Two similar elements can contain\n   * different set of children nodes.\n   *\n   * If at least one element has {@link module:engine/view/attributeelement~AttributeElement#id} set, then both\n   * elements have to have the same {@link module:engine/view/attributeelement~AttributeElement#id} value to be\n   * considered similar.\n   *\n   * Similarity is important for {@link module:engine/view/downcastwriter~DowncastWriter}. For example:\n   *\n   * * two following similar elements can be merged together into one, longer element,\n   * * {@link module:engine/view/downcastwriter~DowncastWriter#unwrap} checks similarity of passed element and processed element to\n   * decide whether processed element should be unwrapped,\n   * * etc.\n   */\n  isSimilar(otherElement) {\n    if (this.id !== null || otherElement.id !== null) {\n      return this.id === otherElement.id;\n    }\n    return super.isSimilar(otherElement) && this.priority == otherElement.priority;\n  }\n  /**\n   * Clones provided element with priority.\n   *\n   * @internal\n   * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n   * element will be cloned without any children.\n   * @returns Clone of this element.\n   */\n  _clone(deep = false) {\n    const cloned = super._clone(deep);\n    cloned._priority = this._priority;\n    cloned._id = this._id;\n    return cloned;\n  }\n};\nAttributeElement.DEFAULT_PRIORITY = DEFAULT_PRIORITY;\nvar attributeelement_default = AttributeElement;\nAttributeElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"attributeElement\" || type === \"view:attributeElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"attributeElement\" || type === \"view:attributeElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\");\n  }\n};\nfunction getFillerOffset2() {\n  if (nonUiChildrenCount(this)) {\n    return null;\n  }\n  let element = this.parent;\n  while (element && element.is(\"attributeElement\")) {\n    if (nonUiChildrenCount(element) > 1) {\n      return null;\n    }\n    element = element.parent;\n  }\n  if (!element || nonUiChildrenCount(element) > 1) {\n    return null;\n  }\n  return this.childCount;\n}\nfunction nonUiChildrenCount(element) {\n  return Array.from(element.getChildren()).filter((element2) => !element2.is(\"uiElement\")).length;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/emptyelement.js\nvar EmptyElement = class extends Element {\n  /**\n   * Creates new instance of EmptyElement.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` when third parameter is passed,\n   * to inform that usage of EmptyElement is incorrect (adding child nodes to EmptyElement is forbidden).\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createEmptyElement\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attributes, children) {\n    super(document2, name, attributes, children);\n    this.getFillerOffset = getFillerOffset3;\n  }\n  /**\n   * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-emptyelement-cannot-add` to prevent\n   * adding any child nodes to EmptyElement.\n   *\n   * @internal\n   */\n  _insertChild(index, items) {\n    if (items && (items instanceof Node2 || Array.from(items).length > 0)) {\n      throw new CKEditorError(\"view-emptyelement-cannot-add\", [this, items]);\n    }\n    return 0;\n  }\n};\nEmptyElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"emptyElement\" || type === \"view:emptyElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"emptyElement\" || type === \"view:emptyElement\" || type === \"element\" || type === \"view:element\");\n  }\n};\nfunction getFillerOffset3() {\n  return null;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/uielement.js\nvar UIElement = class extends Element {\n  /**\n   * Creates new instance of UIElement.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` when third parameter is passed,\n   * to inform that usage of UIElement is incorrect (adding child nodes to UIElement is forbidden).\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createUIElement\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attrs, children) {\n    super(document2, name, attrs, children);\n    this.getFillerOffset = getFillerOffset4;\n  }\n  /**\n   * Overrides {@link module:engine/view/element~Element#_insertChild} method.\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-uielement-cannot-add` to prevent adding any child nodes\n   * to UIElement.\n   *\n   * @internal\n   */\n  _insertChild(index, items) {\n    if (items && (items instanceof Node2 || Array.from(items).length > 0)) {\n      throw new CKEditorError(\"view-uielement-cannot-add\", [this, items]);\n    }\n    return 0;\n  }\n  /**\n   * Renders this {@link module:engine/view/uielement~UIElement} to DOM. This method is called by\n   * {@link module:engine/view/domconverter~DomConverter}.\n   * Do not use inheritance to create custom rendering method, replace `render()` method instead:\n   *\n   * ```ts\n   * const myUIElement = downcastWriter.createUIElement( 'span' );\n   * myUIElement.render = function( domDocument, domConverter ) {\n   * \tconst domElement = this.toDomElement( domDocument );\n   *\n   * \tdomConverter.setContentOf( domElement, '<b>this is ui element</b>' );\n   *\n   * \treturn domElement;\n   * };\n   * ```\n   *\n   * If changes in your UI element should trigger some editor UI update you should call\n   * the {@link module:ui/editorui/editorui~EditorUI#update `editor.ui.update()`} method\n   * after rendering your UI element.\n   *\n   * @param domConverter Instance of the DomConverter used to optimize the output.\n   */\n  render(domDocument, domConverter) {\n    return this.toDomElement(domDocument);\n  }\n  /**\n   * Creates DOM element based on this view UIElement.\n   * Note that each time this method is called new DOM element is created.\n   */\n  toDomElement(domDocument) {\n    const domElement = domDocument.createElement(this.name);\n    for (const key of this.getAttributeKeys()) {\n      domElement.setAttribute(key, this.getAttribute(key));\n    }\n    return domElement;\n  }\n};\nUIElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"uiElement\" || type === \"view:uiElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"uiElement\" || type === \"view:uiElement\" || type === \"element\" || type === \"view:element\");\n  }\n};\nfunction injectUiElementHandling(view) {\n  view.document.on(\"arrowKey\", (evt, data) => jumpOverUiElement(evt, data, view.domConverter), { priority: \"low\" });\n}\nfunction getFillerOffset4() {\n  return null;\n}\nfunction jumpOverUiElement(evt, data, domConverter) {\n  if (data.keyCode == keyCodes.arrowright) {\n    const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n    const domSelectionCollapsed = domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed;\n    if (domSelectionCollapsed || data.shiftKey) {\n      const domParent = domSelection.focusNode;\n      const domOffset = domSelection.focusOffset;\n      const viewPosition = domConverter.domPositionToView(domParent, domOffset);\n      if (viewPosition === null) {\n        return;\n      }\n      let jumpedOverAnyUiElement = false;\n      const nextViewPosition = viewPosition.getLastMatchingPosition((value) => {\n        if (value.item.is(\"uiElement\")) {\n          jumpedOverAnyUiElement = true;\n        }\n        if (value.item.is(\"uiElement\") || value.item.is(\"attributeElement\")) {\n          return true;\n        }\n        return false;\n      });\n      if (jumpedOverAnyUiElement) {\n        const newDomPosition = domConverter.viewPositionToDom(nextViewPosition);\n        if (domSelectionCollapsed) {\n          domSelection.collapse(newDomPosition.parent, newDomPosition.offset);\n        } else {\n          domSelection.extend(newDomPosition.parent, newDomPosition.offset);\n        }\n      }\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/rawelement.js\nvar RawElement = class extends Element {\n  /**\n   * Creates a new instance of a raw element.\n   *\n   * Throws the `view-rawelement-cannot-add` {@link module:utils/ckeditorerror~CKEditorError CKEditorError} when the `children`\n   * parameter is passed to inform that the usage of `RawElement` is incorrect (adding child nodes to `RawElement` is forbidden).\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#createRawElement\n   * @internal\n   * @param document The document instance to which this element belongs.\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   */\n  constructor(document2, name, attrs, children) {\n    super(document2, name, attrs, children);\n    this.getFillerOffset = getFillerOffset5;\n  }\n  /**\n   * Overrides the {@link module:engine/view/element~Element#_insertChild} method.\n   * Throws the `view-rawelement-cannot-add` {@link module:utils/ckeditorerror~CKEditorError CKEditorError} to prevent\n   * adding any child nodes to a raw element.\n   *\n   * @internal\n   */\n  _insertChild(index, items) {\n    if (items && (items instanceof Node2 || Array.from(items).length > 0)) {\n      throw new CKEditorError(\"view-rawelement-cannot-add\", [this, items]);\n    }\n    return 0;\n  }\n  /**\n   * This allows rendering the children of a {@link module:engine/view/rawelement~RawElement} on the DOM level.\n   * This method is called by the {@link module:engine/view/domconverter~DomConverter} with the raw DOM element\n   * passed as an argument, leaving the number and shape of the children up to the integrator.\n   *\n   * This method **must be defined** for the raw element to work:\n   *\n   * ```ts\n   * const myRawElement = downcastWriter.createRawElement( 'div' );\n   *\n   * myRawElement.render = function( domElement, domConverter ) {\n   * \tdomConverter.setContentOf( domElement, '<b>This is the raw content of myRawElement.</b>' );\n   * };\n   * ```\n   *\n   * @param domElement The native DOM element representing the raw view element.\n   * @param domConverter Instance of the DomConverter used to optimize the output.\n   */\n  render(domElement, domConverter) {\n  }\n};\nRawElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"rawElement\" || type === \"view:rawElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === this.name || type === \"view:\" + this.name || type === \"element\" || type === \"view:element\" || type === \"node\" || type === \"view:node\";\n  } else {\n    return name === this.name && (type === \"rawElement\" || type === \"view:rawElement\" || type === \"element\" || type === \"view:element\");\n  }\n};\nfunction getFillerOffset5() {\n  return null;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/documentfragment.js\nvar DocumentFragment = class extends EmitterMixin(TypeCheckable) {\n  /**\n   * Creates new DocumentFragment instance.\n   *\n   * @internal\n   * @param document The document to which this document fragment belongs.\n   * @param children A list of nodes to be inserted into the created document fragment.\n   */\n  constructor(document2, children) {\n    super();\n    this._children = [];\n    this._customProperties = /* @__PURE__ */ new Map();\n    this.document = document2;\n    if (children) {\n      this._insertChild(0, children);\n    }\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over nodes added to this document fragment.\n   */\n  [Symbol.iterator]() {\n    return this._children[Symbol.iterator]();\n  }\n  /**\n   * Number of child nodes in this document fragment.\n   */\n  get childCount() {\n    return this._children.length;\n  }\n  /**\n   * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n   */\n  get isEmpty() {\n    return this.childCount === 0;\n  }\n  /**\n   * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n   */\n  get root() {\n    return this;\n  }\n  /**\n   * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n   */\n  get parent() {\n    return null;\n  }\n  /**\n   * Artificial element name. Returns `undefined`. Added for compatibility reasons.\n   */\n  get name() {\n    return void 0;\n  }\n  /**\n   * Artificial element getFillerOffset. Returns `undefined`. Added for compatibility reasons.\n   */\n  get getFillerOffset() {\n    return void 0;\n  }\n  /**\n   * Returns the custom property value for the given key.\n   */\n  getCustomProperty(key) {\n    return this._customProperties.get(key);\n  }\n  /**\n   * Returns an iterator which iterates over this document fragment's custom properties.\n   * Iterator provides `[ key, value ]` pairs for each stored property.\n   */\n  *getCustomProperties() {\n    yield* this._customProperties.entries();\n  }\n  /**\n   * {@link module:engine/view/documentfragment~DocumentFragment#_insertChild Insert} a child node or a list of child nodes at the end\n   * and sets the parent of these nodes to this fragment.\n   *\n   * @internal\n   * @param items Items to be inserted.\n   * @returns Number of appended nodes.\n   */\n  _appendChild(items) {\n    return this._insertChild(this.childCount, items);\n  }\n  /**\n   * Gets child at the given index.\n   *\n   * @param index Index of child.\n   * @returns Child node.\n   */\n  getChild(index) {\n    return this._children[index];\n  }\n  /**\n   * Gets index of the given child node. Returns `-1` if child node is not found.\n   *\n   * @param node Child node.\n   * @returns Index of the child node.\n   */\n  getChildIndex(node) {\n    return this._children.indexOf(node);\n  }\n  /**\n   * Gets child nodes iterator.\n   *\n   * @returns Child nodes iterator.\n   */\n  getChildren() {\n    return this._children[Symbol.iterator]();\n  }\n  /**\n   * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n   * this fragment.\n   *\n   * @internal\n   * @param index Position where nodes should be inserted.\n   * @param items Items to be inserted.\n   * @returns Number of inserted nodes.\n   */\n  _insertChild(index, items) {\n    this._fireChange(\"children\", this);\n    let count2 = 0;\n    const nodes = normalize2(this.document, items);\n    for (const node of nodes) {\n      if (node.parent !== null) {\n        node._remove();\n      }\n      node.parent = this;\n      this._children.splice(index, 0, node);\n      index++;\n      count2++;\n    }\n    return count2;\n  }\n  /**\n   * Removes number of child nodes starting at the given index and set the parent of these nodes to `null`.\n   *\n   * @internal\n   * @param index Number of the first node to remove.\n   * @param howMany Number of nodes to remove.\n   * @returns The array of removed nodes.\n   */\n  _removeChildren(index, howMany = 1) {\n    this._fireChange(\"children\", this);\n    for (let i = index; i < index + howMany; i++) {\n      this._children[i].parent = null;\n    }\n    return this._children.splice(index, howMany);\n  }\n  /**\n   * Fires `change` event with given type of the change.\n   *\n   * @internal\n   * @param type Type of the change.\n   * @param node Changed node.\n   */\n  _fireChange(type, node) {\n    this.fire(\"change:\" + type, node);\n  }\n  /**\n   * Sets a custom property. They can be used to add special data to elements.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#setCustomProperty\n   * @internal\n   */\n  _setCustomProperty(key, value) {\n    this._customProperties.set(key, value);\n  }\n  /**\n   * Removes the custom property stored under the given key.\n   *\n   * @see module:engine/view/downcastwriter~DowncastWriter#removeCustomProperty\n   * @internal\n   * @returns Returns true if property was removed.\n   */\n  _removeCustomProperty(key) {\n    return this._customProperties.delete(key);\n  }\n};\nDocumentFragment.prototype.is = function(type) {\n  return type === \"documentFragment\" || type === \"view:documentFragment\";\n};\nfunction normalize2(document2, nodes) {\n  if (typeof nodes == \"string\") {\n    return [new Text(document2, nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n  return Array.from(nodes).map((node) => {\n    if (typeof node == \"string\") {\n      return new Text(document2, node);\n    }\n    if (node instanceof TextProxy) {\n      return new Text(document2, node.data);\n    }\n    return node;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/downcastwriter.js\nvar DowncastWriter = class {\n  /**\n   * @param document The view document instance.\n   */\n  constructor(document2) {\n    this._cloneGroups = /* @__PURE__ */ new Map();\n    this._slotFactory = null;\n    this.document = document2;\n  }\n  setSelection(...args) {\n    this.document.selection._setTo(...args);\n  }\n  /**\n   * Moves {@link module:engine/view/documentselection~DocumentSelection#focus selection's focus} to the specified location.\n   *\n   * The location can be specified in the same form as {@link module:engine/view/view~View#createPositionAt view.createPositionAt()}\n   * parameters.\n   *\n   * @param Offset or one of the flags. Used only when the first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  setSelectionFocus(itemOrPosition, offset) {\n    this.document.selection._setFocus(itemOrPosition, offset);\n  }\n  /**\n   * Creates a new {@link module:engine/view/documentfragment~DocumentFragment} instance.\n   *\n   * @param children A list of nodes to be inserted into the created document fragment.\n   * @returns The created document fragment.\n   */\n  createDocumentFragment(children) {\n    return new DocumentFragment(this.document, children);\n  }\n  /**\n   * Creates a new {@link module:engine/view/text~Text text node}.\n   *\n   * ```ts\n   * writer.createText( 'foo' );\n   * ```\n   *\n   * @param data The text's data.\n   * @returns The created text node.\n   */\n  createText(data) {\n    return new Text(this.document, data);\n  }\n  /**\n   * Creates a new {@link module:engine/view/attributeelement~AttributeElement}.\n   *\n   * ```ts\n   * writer.createAttributeElement( 'strong' );\n   * writer.createAttributeElement( 'a', { href: 'foo.bar' } );\n   *\n   * // Make `<a>` element contain other attributes element so the `<a>` element is not broken.\n   * writer.createAttributeElement( 'a', { href: 'foo.bar' }, { priority: 5 } );\n   *\n   * // Set `id` of a marker element so it is not joined or merged with \"normal\" elements.\n   * writer.createAttributeElement( 'span', { class: 'my-marker' }, { id: 'marker:my' } );\n   * ```\n   *\n   * @param name Name of the element.\n   * @param attributes Element's attributes.\n   * @param options Element's options.\n   * @param options.priority Element's {@link module:engine/view/attributeelement~AttributeElement#priority priority}.\n   * @param options.id Element's {@link module:engine/view/attributeelement~AttributeElement#id id}.\n   * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n   * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n   * @returns Created element.\n   */\n  createAttributeElement(name, attributes, options = {}) {\n    const attributeElement = new attributeelement_default(this.document, name, attributes);\n    if (typeof options.priority === \"number\") {\n      attributeElement._priority = options.priority;\n    }\n    if (options.id) {\n      attributeElement._id = options.id;\n    }\n    if (options.renderUnsafeAttributes) {\n      attributeElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n    }\n    return attributeElement;\n  }\n  createContainerElement(name, attributes, childrenOrOptions = {}, options = {}) {\n    let children = null;\n    if (isPlainObject_default(childrenOrOptions)) {\n      options = childrenOrOptions;\n    } else {\n      children = childrenOrOptions;\n    }\n    const containerElement = new ContainerElement(this.document, name, attributes, children);\n    if (options.renderUnsafeAttributes) {\n      containerElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n    }\n    return containerElement;\n  }\n  /**\n   * Creates a new {@link module:engine/view/editableelement~EditableElement}.\n   *\n   * ```ts\n   * writer.createEditableElement( 'div' );\n   * writer.createEditableElement( 'div', { id: 'foo-1234' } );\n   * ```\n   *\n   * Note: The editable element is to be used in the editing pipeline. Usually, together with\n   * {@link module:widget/utils~toWidgetEditable `toWidgetEditable()`}.\n   *\n   * @param name Name of the element.\n   * @param attributes Elements attributes.\n   * @param options Element's options.\n   * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n   * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n   * @returns Created element.\n   */\n  createEditableElement(name, attributes, options = {}) {\n    const editableElement = new EditableElement(this.document, name, attributes);\n    if (options.renderUnsafeAttributes) {\n      editableElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n    }\n    return editableElement;\n  }\n  /**\n   * Creates a new {@link module:engine/view/emptyelement~EmptyElement}.\n   *\n   * ```ts\n   * writer.createEmptyElement( 'img' );\n   * writer.createEmptyElement( 'img', { id: 'foo-1234' } );\n   * ```\n   *\n   * @param name Name of the element.\n   * @param attributes Elements attributes.\n   * @param options Element's options.\n   * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n   * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n   * @returns Created element.\n   */\n  createEmptyElement(name, attributes, options = {}) {\n    const emptyElement = new EmptyElement(this.document, name, attributes);\n    if (options.renderUnsafeAttributes) {\n      emptyElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n    }\n    return emptyElement;\n  }\n  /**\n   * Creates a new {@link module:engine/view/uielement~UIElement}.\n   *\n   * ```ts\n   * writer.createUIElement( 'span' );\n   * writer.createUIElement( 'span', { id: 'foo-1234' } );\n   * ```\n   *\n   * A custom render function can be provided as the third parameter:\n   *\n   * ```ts\n   * writer.createUIElement( 'span', null, function( domDocument ) {\n   * \tconst domElement = this.toDomElement( domDocument );\n   * \tdomElement.innerHTML = '<b>this is ui element</b>';\n   *\n   * \treturn domElement;\n   * } );\n   * ```\n   *\n   * Unlike {@link #createRawElement raw elements}, UI elements are by no means editor content, for instance,\n   * they are ignored by the editor selection system.\n   *\n   * You should not use UI elements as data containers. Check out {@link #createRawElement} instead.\n   *\n   * @param name The name of the element.\n   * @param attributes Element attributes.\n   * @param renderFunction A custom render function.\n   * @returns The created element.\n   */\n  createUIElement(name, attributes, renderFunction) {\n    const uiElement = new UIElement(this.document, name, attributes);\n    if (renderFunction) {\n      uiElement.render = renderFunction;\n    }\n    return uiElement;\n  }\n  /**\n   * Creates a new {@link module:engine/view/rawelement~RawElement}.\n   *\n   * ```ts\n   * writer.createRawElement( 'span', { id: 'foo-1234' }, function( domElement ) {\n   * \tdomElement.innerHTML = '<b>This is the raw content of the raw element.</b>';\n   * } );\n   * ```\n   *\n   * Raw elements work as data containers (\"wrappers\", \"sandboxes\") but their children are not managed or\n   * even recognized by the editor. This encapsulation allows integrations to maintain custom DOM structures\n   * in the editor content without, for instance, worrying about compatibility with other editor features.\n   * Raw elements are a perfect tool for integration with external frameworks and data sources.\n   *\n   * Unlike {@link #createUIElement UI elements}, raw elements act like \"real\" editor content (similar to\n   * {@link module:engine/view/containerelement~ContainerElement} or {@link module:engine/view/emptyelement~EmptyElement}),\n   * and they are considered by the editor selection.\n   *\n   * You should not use raw elements to render the UI in the editor content. Check out {@link #createUIElement `#createUIElement()`}\n   * instead.\n   *\n   * @param name The name of the element.\n   * @param attributes Element attributes.\n   * @param renderFunction A custom render function.\n   * @param options Element's options.\n   * @param options.renderUnsafeAttributes A list of attribute names that should be rendered in the editing\n   * pipeline even though they would normally be filtered out by unsafe attribute detection mechanisms.\n   * @returns The created element.\n   */\n  createRawElement(name, attributes, renderFunction, options = {}) {\n    const rawElement = new RawElement(this.document, name, attributes);\n    if (renderFunction) {\n      rawElement.render = renderFunction;\n    }\n    if (options.renderUnsafeAttributes) {\n      rawElement._unsafeAttributesToRender.push(...options.renderUnsafeAttributes);\n    }\n    return rawElement;\n  }\n  /**\n   * Adds or overwrites the element's attribute with a specified key and value.\n   *\n   * ```ts\n   * writer.setAttribute( 'href', 'http://ckeditor.com', linkElement );\n   * ```\n   *\n   * @param key The attribute key.\n   * @param value The attribute value.\n   */\n  setAttribute(key, value, element) {\n    element._setAttribute(key, value);\n  }\n  /**\n   * Removes attribute from the element.\n   *\n   * ```ts\n   * writer.removeAttribute( 'href', linkElement );\n   * ```\n   *\n   * @param key Attribute key.\n   */\n  removeAttribute(key, element) {\n    element._removeAttribute(key);\n  }\n  /**\n   * Adds specified class to the element.\n   *\n   * ```ts\n   * writer.addClass( 'foo', linkElement );\n   * writer.addClass( [ 'foo', 'bar' ], linkElement );\n   * ```\n   */\n  addClass(className, element) {\n    element._addClass(className);\n  }\n  /**\n   * Removes specified class from the element.\n   *\n   * ```ts\n   * writer.removeClass( 'foo', linkElement );\n   * writer.removeClass( [ 'foo', 'bar' ], linkElement );\n   * ```\n   */\n  removeClass(className, element) {\n    element._removeClass(className);\n  }\n  setStyle(property, value, element) {\n    if (isPlainObject_default(property) && element === void 0) {\n      value._setStyle(property);\n    } else {\n      element._setStyle(property, value);\n    }\n  }\n  /**\n   * Removes specified style from the element.\n   *\n   * ```ts\n   * writer.removeStyle( 'color', element ); // Removes 'color' style.\n   * writer.removeStyle( [ 'color', 'border-top' ], element ); // Removes both 'color' and 'border-top' styles.\n   * ```\n   *\n   * **Note**: This method can work with normalized style names if\n   * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n   * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n   */\n  removeStyle(property, element) {\n    element._removeStyle(property);\n  }\n  /**\n   * Sets a custom property on element. Unlike attributes, custom properties are not rendered to the DOM,\n   * so they can be used to add special data to elements.\n   */\n  setCustomProperty(key, value, element) {\n    element._setCustomProperty(key, value);\n  }\n  /**\n   * Removes a custom property stored under the given key.\n   *\n   * @returns Returns true if property was removed.\n   */\n  removeCustomProperty(key, element) {\n    return element._removeCustomProperty(key);\n  }\n  /**\n   * Breaks attribute elements at the provided position or at the boundaries of a provided range. It breaks attribute elements\n   * up to their first ancestor that is a container element.\n   *\n   * In following examples `<p>` is a container, `<b>` and `<u>` are attribute elements:\n   *\n   * ```html\n   * <p>foo<b><u>bar{}</u></b></p> -> <p>foo<b><u>bar</u></b>[]</p>\n   * <p>foo<b><u>{}bar</u></b></p> -> <p>foo{}<b><u>bar</u></b></p>\n   * <p>foo<b><u>b{}ar</u></b></p> -> <p>foo<b><u>b</u></b>[]<b><u>ar</u></b></p>\n   * <p><b>fo{o</b><u>ba}r</u></p> -> <p><b>fo</b><b>o</b><u>ba</u><u>r</u></b></p>\n   * ```\n   *\n   * **Note:** {@link module:engine/view/documentfragment~DocumentFragment DocumentFragment} is treated like a container.\n   *\n   * **Note:** The difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes()} and\n   * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer()} is that `breakAttributes()` breaks all\n   * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of a given `position`,\n   * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n   * `breakContainer()` assumes that a given `position` is directly in the container element and breaks that container element.\n   *\n   * Throws the `view-writer-invalid-range-container` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n   * when the {@link module:engine/view/range~Range#start start}\n   * and {@link module:engine/view/range~Range#end end} positions of a passed range are not placed inside same parent container.\n   *\n   * Throws the `view-writer-cannot-break-empty-element` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n   * when trying to break attributes inside an {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n   *\n   * Throws the `view-writer-cannot-break-ui-element` {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n   * when trying to break attributes inside a {@link module:engine/view/uielement~UIElement UIElement}.\n   *\n   * @see module:engine/view/attributeelement~AttributeElement\n   * @see module:engine/view/containerelement~ContainerElement\n   * @see module:engine/view/downcastwriter~DowncastWriter#breakContainer\n   * @param positionOrRange The position where to break attribute elements.\n   * @returns The new position or range, after breaking the attribute elements.\n   */\n  breakAttributes(positionOrRange) {\n    if (positionOrRange instanceof Position) {\n      return this._breakAttributes(positionOrRange);\n    } else {\n      return this._breakAttributesRange(positionOrRange);\n    }\n  }\n  /**\n   * Breaks a {@link module:engine/view/containerelement~ContainerElement container view element} into two, at the given position.\n   * The position has to be directly inside the container element and cannot be in the root. It does not break the conrainer view element\n   * if the position is at the beginning or at the end of its parent element.\n   *\n   * ```html\n   * <p>foo^bar</p> -> <p>foo</p><p>bar</p>\n   * <div><p>foo</p>^<p>bar</p></div> -> <div><p>foo</p></div><div><p>bar</p></div>\n   * <p>^foobar</p> -> ^<p>foobar</p>\n   * <p>foobar^</p> -> <p>foobar</p>^\n   * ```\n   *\n   * **Note:** The difference between {@link module:engine/view/downcastwriter~DowncastWriter#breakAttributes breakAttributes()} and\n   * {@link module:engine/view/downcastwriter~DowncastWriter#breakContainer breakContainer()} is that `breakAttributes()` breaks all\n   * {@link module:engine/view/attributeelement~AttributeElement attribute elements} that are ancestors of a given `position`,\n   * up to the first encountered {@link module:engine/view/containerelement~ContainerElement container element}.\n   * `breakContainer()` assumes that the given `position` is directly in the container element and breaks that container element.\n   *\n   * @see module:engine/view/attributeelement~AttributeElement\n   * @see module:engine/view/containerelement~ContainerElement\n   * @see module:engine/view/downcastwriter~DowncastWriter#breakAttributes\n   * @param position The position where to break the element.\n   * @returns The position between broken elements. If an element has not been broken,\n   * the returned position is placed either before or after it.\n   */\n  breakContainer(position) {\n    const element = position.parent;\n    if (!element.is(\"containerElement\")) {\n      throw new CKEditorError(\"view-writer-break-non-container-element\", this.document);\n    }\n    if (!element.parent) {\n      throw new CKEditorError(\"view-writer-break-root\", this.document);\n    }\n    if (position.isAtStart) {\n      return Position._createBefore(element);\n    } else if (!position.isAtEnd) {\n      const newElement = element._clone(false);\n      this.insert(Position._createAfter(element), newElement);\n      const sourceRange = new Range(position, Position._createAt(element, \"end\"));\n      const targetPosition = new Position(newElement, 0);\n      this.move(sourceRange, targetPosition);\n    }\n    return Position._createAfter(element);\n  }\n  /**\n   * Merges {@link module:engine/view/attributeelement~AttributeElement attribute elements}. It also merges text nodes if needed.\n   * Only {@link module:engine/view/attributeelement~AttributeElement#isSimilar similar} attribute elements can be merged.\n   *\n   * In following examples `<p>` is a container and `<b>` is an attribute element:\n   *\n   * ```html\n   * <p>foo[]bar</p> -> <p>foo{}bar</p>\n   * <p><b>foo</b>[]<b>bar</b></p> -> <p><b>foo{}bar</b></p>\n   * <p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p> -> <p><b foo=\"bar\">a</b>[]<b foo=\"baz\">b</b></p>\n   * ```\n   *\n   * It will also take care about empty attributes when merging:\n   *\n   * ```html\n   * <p><b>[]</b></p> -> <p>[]</p>\n   * <p><b>foo</b><i>[]</i><b>bar</b></p> -> <p><b>foo{}bar</b></p>\n   * ```\n   *\n   * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n   * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n   * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n   * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n   *\n   * @see module:engine/view/attributeelement~AttributeElement\n   * @see module:engine/view/containerelement~ContainerElement\n   * @see module:engine/view/downcastwriter~DowncastWriter#mergeContainers\n   * @param position Merge position.\n   * @returns Position after merge.\n   */\n  mergeAttributes(position) {\n    const positionOffset = position.offset;\n    const positionParent = position.parent;\n    if (positionParent.is(\"$text\")) {\n      return position;\n    }\n    if (positionParent.is(\"attributeElement\") && positionParent.childCount === 0) {\n      const parent2 = positionParent.parent;\n      const offset = positionParent.index;\n      positionParent._remove();\n      this._removeFromClonedElementsGroup(positionParent);\n      return this.mergeAttributes(new Position(parent2, offset));\n    }\n    const nodeBefore = positionParent.getChild(positionOffset - 1);\n    const nodeAfter = positionParent.getChild(positionOffset);\n    if (!nodeBefore || !nodeAfter) {\n      return position;\n    }\n    if (nodeBefore.is(\"$text\") && nodeAfter.is(\"$text\")) {\n      return mergeTextNodes(nodeBefore, nodeAfter);\n    } else if (nodeBefore.is(\"attributeElement\") && nodeAfter.is(\"attributeElement\") && nodeBefore.isSimilar(nodeAfter)) {\n      const count2 = nodeBefore.childCount;\n      nodeBefore._appendChild(nodeAfter.getChildren());\n      nodeAfter._remove();\n      this._removeFromClonedElementsGroup(nodeAfter);\n      return this.mergeAttributes(new Position(nodeBefore, count2));\n    }\n    return position;\n  }\n  /**\n   * Merges two {@link module:engine/view/containerelement~ContainerElement container elements} that are before and after given position.\n   * Precisely, the element after the position is removed and it's contents are moved to element before the position.\n   *\n   * ```html\n   * <p>foo</p>^<p>bar</p> -> <p>foo^bar</p>\n   * <div>foo</div>^<p>bar</p> -> <div>foo^bar</div>\n   * ```\n   *\n   * **Note:** Difference between {@link module:engine/view/downcastwriter~DowncastWriter#mergeAttributes mergeAttributes} and\n   * {@link module:engine/view/downcastwriter~DowncastWriter#mergeContainers mergeContainers} is that `mergeAttributes` merges two\n   * {@link module:engine/view/attributeelement~AttributeElement attribute elements} or {@link module:engine/view/text~Text text nodes}\n   * while `mergeContainer` merges two {@link module:engine/view/containerelement~ContainerElement container elements}.\n   *\n   * @see module:engine/view/attributeelement~AttributeElement\n   * @see module:engine/view/containerelement~ContainerElement\n   * @see module:engine/view/downcastwriter~DowncastWriter#mergeAttributes\n   * @param position Merge position.\n   * @returns Position after merge.\n   */\n  mergeContainers(position) {\n    const prev = position.nodeBefore;\n    const next = position.nodeAfter;\n    if (!prev || !next || !prev.is(\"containerElement\") || !next.is(\"containerElement\")) {\n      throw new CKEditorError(\"view-writer-merge-containers-invalid-position\", this.document);\n    }\n    const lastChild = prev.getChild(prev.childCount - 1);\n    const newPosition = lastChild instanceof Text ? Position._createAt(lastChild, \"end\") : Position._createAt(prev, \"end\");\n    this.move(Range._createIn(next), Position._createAt(prev, \"end\"));\n    this.remove(Range._createOn(next));\n    return newPosition;\n  }\n  /**\n   * Inserts a node or nodes at specified position. Takes care about breaking attributes before insertion\n   * and merging them afterwards.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-insert-invalid-node` when nodes to insert\n   * contains instances that are not {@link module:engine/view/text~Text Texts},\n   * {@link module:engine/view/attributeelement~AttributeElement AttributeElements},\n   * {@link module:engine/view/containerelement~ContainerElement ContainerElements},\n   * {@link module:engine/view/emptyelement~EmptyElement EmptyElements},\n   * {@link module:engine/view/rawelement~RawElement RawElements} or\n   * {@link module:engine/view/uielement~UIElement UIElements}.\n   *\n   * @param position Insertion position.\n   * @param nodes Node or nodes to insert.\n   * @returns Range around inserted nodes.\n   */\n  insert(position, nodes) {\n    nodes = isIterable(nodes) ? [...nodes] : [nodes];\n    validateNodesToInsert(nodes, this.document);\n    const nodeGroups = nodes.reduce((groups, node) => {\n      const lastGroup = groups[groups.length - 1];\n      const breakAttributes = !node.is(\"uiElement\");\n      if (!lastGroup || lastGroup.breakAttributes != breakAttributes) {\n        groups.push({\n          breakAttributes,\n          nodes: [node]\n        });\n      } else {\n        lastGroup.nodes.push(node);\n      }\n      return groups;\n    }, []);\n    let start = null;\n    let end = position;\n    for (const { nodes: nodes2, breakAttributes } of nodeGroups) {\n      const range = this._insertNodes(end, nodes2, breakAttributes);\n      if (!start) {\n        start = range.start;\n      }\n      end = range.end;\n    }\n    if (!start) {\n      return new Range(position);\n    }\n    return new Range(start, end);\n  }\n  /**\n   * Removes provided range from the container.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n   * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n   * same parent container.\n   *\n   * @param rangeOrItem Range to remove from container\n   * or an {@link module:engine/view/item~Item item} to remove. If range is provided, after removing, it will be updated\n   * to a collapsed range showing the new position.\n   * @returns Document fragment containing removed nodes.\n   */\n  remove(rangeOrItem) {\n    const range = rangeOrItem instanceof Range ? rangeOrItem : Range._createOn(rangeOrItem);\n    validateRangeContainer(range, this.document);\n    if (range.isCollapsed) {\n      return new DocumentFragment(this.document);\n    }\n    const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n    const parentContainer = breakStart.parent;\n    const count2 = breakEnd.offset - breakStart.offset;\n    const removed = parentContainer._removeChildren(breakStart.offset, count2);\n    for (const node of removed) {\n      this._removeFromClonedElementsGroup(node);\n    }\n    const mergePosition = this.mergeAttributes(breakStart);\n    range.start = mergePosition;\n    range.end = mergePosition.clone();\n    return new DocumentFragment(this.document, removed);\n  }\n  /**\n   * Removes matching elements from given range.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n   * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n   * same parent container.\n   *\n   * @param range Range to clear.\n   * @param element Element to remove.\n   */\n  clear(range, element) {\n    validateRangeContainer(range, this.document);\n    const walker = range.getWalker({\n      direction: \"backward\",\n      ignoreElementEnd: true\n    });\n    for (const current of walker) {\n      const item = current.item;\n      let rangeToRemove;\n      if (item.is(\"element\") && element.isSimilar(item)) {\n        rangeToRemove = Range._createOn(item);\n      } else if (!current.nextPosition.isAfter(range.start) && item.is(\"$textProxy\")) {\n        const parentElement = item.getAncestors().find((ancestor) => {\n          return ancestor.is(\"element\") && element.isSimilar(ancestor);\n        });\n        if (parentElement) {\n          rangeToRemove = Range._createIn(parentElement);\n        }\n      }\n      if (rangeToRemove) {\n        if (rangeToRemove.end.isAfter(range.end)) {\n          rangeToRemove.end = range.end;\n        }\n        if (rangeToRemove.start.isBefore(range.start)) {\n          rangeToRemove.start = range.start;\n        }\n        this.remove(rangeToRemove);\n      }\n    }\n  }\n  /**\n   * Moves nodes from provided range to target position.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n   * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n   * same parent container.\n   *\n   * @param sourceRange Range containing nodes to move.\n   * @param targetPosition Position to insert.\n   * @returns Range in target container. Inserted nodes are placed between\n   * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions.\n   */\n  move(sourceRange, targetPosition) {\n    let nodes;\n    if (targetPosition.isAfter(sourceRange.end)) {\n      targetPosition = this._breakAttributes(targetPosition, true);\n      const parent2 = targetPosition.parent;\n      const countBefore = parent2.childCount;\n      sourceRange = this._breakAttributesRange(sourceRange, true);\n      nodes = this.remove(sourceRange);\n      targetPosition.offset += parent2.childCount - countBefore;\n    } else {\n      nodes = this.remove(sourceRange);\n    }\n    return this.insert(targetPosition, nodes);\n  }\n  /**\n   * Wraps elements within range with provided {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n   * If a collapsed range is provided, it will be wrapped only if it is equal to view selection.\n   *\n   * If a collapsed range was passed and is same as selection, the selection\n   * will be moved to the inside of the wrapped attribute element.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-invalid-range-container`\n   * when {@link module:engine/view/range~Range#start}\n   * and {@link module:engine/view/range~Range#end} positions are not placed inside same parent container.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n   * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-nonselection-collapsed-range` when passed range\n   * is collapsed and different than view selection.\n   *\n   * @param range Range to wrap.\n   * @param attribute Attribute element to use as wrapper.\n   * @returns range Range after wrapping, spanning over wrapping attribute element.\n   */\n  wrap(range, attribute) {\n    if (!(attribute instanceof attributeelement_default)) {\n      throw new CKEditorError(\"view-writer-wrap-invalid-attribute\", this.document);\n    }\n    validateRangeContainer(range, this.document);\n    if (!range.isCollapsed) {\n      return this._wrapRange(range, attribute);\n    } else {\n      let position = range.start;\n      if (position.parent.is(\"element\") && !_hasNonUiChildren(position.parent)) {\n        position = position.getLastMatchingPosition((value) => value.item.is(\"uiElement\"));\n      }\n      position = this._wrapPosition(position, attribute);\n      const viewSelection = this.document.selection;\n      if (viewSelection.isCollapsed && viewSelection.getFirstPosition().isEqual(range.start)) {\n        this.setSelection(position);\n      }\n      return new Range(position);\n    }\n  }\n  /**\n   * Unwraps nodes within provided range from attribute element.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-invalid-range-container` when\n   * {@link module:engine/view/range~Range#start start} and {@link module:engine/view/range~Range#end end} positions are not placed inside\n   * same parent container.\n   */\n  unwrap(range, attribute) {\n    if (!(attribute instanceof attributeelement_default)) {\n      throw new CKEditorError(\"view-writer-unwrap-invalid-attribute\", this.document);\n    }\n    validateRangeContainer(range, this.document);\n    if (range.isCollapsed) {\n      return range;\n    }\n    const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n    const parentContainer = breakStart.parent;\n    const newRange = this._unwrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n    const start = this.mergeAttributes(newRange.start);\n    if (!start.isEqual(newRange.start)) {\n      newRange.end.offset--;\n    }\n    const end = this.mergeAttributes(newRange.end);\n    return new Range(start, end);\n  }\n  /**\n   * Renames element by creating a copy of renamed element but with changed name and then moving contents of the\n   * old element to the new one. Keep in mind that this will invalidate all {@link module:engine/view/position~Position positions} which\n   * has renamed element as {@link module:engine/view/position~Position#parent a parent}.\n   *\n   * New element has to be created because `Element#tagName` property in DOM is readonly.\n   *\n   * Since this function creates a new element and removes the given one, the new element is returned to keep reference.\n   *\n   * @param newName New name for element.\n   * @param viewElement Element to be renamed.\n   * @returns Element created due to rename.\n   */\n  rename(newName, viewElement) {\n    const newElement = new ContainerElement(this.document, newName, viewElement.getAttributes());\n    this.insert(Position._createAfter(viewElement), newElement);\n    this.move(Range._createIn(viewElement), Position._createAt(newElement, 0));\n    this.remove(Range._createOn(viewElement));\n    return newElement;\n  }\n  /**\n   * Cleans up memory by removing obsolete cloned elements group from the writer.\n   *\n   * Should be used whenever all {@link module:engine/view/attributeelement~AttributeElement attribute elements}\n   * with the same {@link module:engine/view/attributeelement~AttributeElement#id id} are going to be removed from the view and\n   * the group will no longer be needed.\n   *\n   * Cloned elements group are not removed automatically in case if the group is still needed after all its elements\n   * were removed from the view.\n   *\n   * Keep in mind that group names are equal to the `id` property of the attribute element.\n   *\n   * @param groupName Name of the group to clear.\n   */\n  clearClonedElementsGroup(groupName) {\n    this._cloneGroups.delete(groupName);\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/view/position~Position position},\n   * * parent element and offset (offset defaults to `0`),\n   * * parent element and `'end'` (sets position at the end of that element),\n   * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n   *\n   * This method is a shortcut to other constructors such as:\n   *\n   * * {@link #createPositionBefore},\n   * * {@link #createPositionAfter},\n   *\n   * @param offset Offset or one of the flags. Used only when the first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  createPositionAt(itemOrPosition, offset) {\n    return Position._createAt(itemOrPosition, offset);\n  }\n  /**\n   * Creates a new position after given view item.\n   *\n   * @param item View item after which the position should be located.\n   */\n  createPositionAfter(item) {\n    return Position._createAfter(item);\n  }\n  /**\n   * Creates a new position before given view item.\n   *\n   * @param item View item before which the position should be located.\n   */\n  createPositionBefore(item) {\n    return Position._createBefore(item);\n  }\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * **Note:** This factory method creates its own {@link module:engine/view/position~Position} instances basing on passed values.\n   *\n   * @param start Start position.\n   * @param end End position. If not set, range will be collapsed at `start` position.\n   */\n  createRange(start, end) {\n    return new Range(start, end);\n  }\n  /**\n   * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n   */\n  createRangeOn(item) {\n    return Range._createOn(item);\n  }\n  /**\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeIn(element) {\n    return Range._createIn(element);\n  }\n  createSelection(...args) {\n    return new Selection(...args);\n  }\n  /**\n   * Creates placeholders for child elements of the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure\n   * `elementToStructure()`} conversion helper.\n   *\n   * ```ts\n   * const viewSlot = conversionApi.writer.createSlot();\n   * const viewPosition = conversionApi.writer.createPositionAt( viewElement, 0 );\n   *\n   * conversionApi.writer.insert( viewPosition, viewSlot );\n   * ```\n   *\n   * It could be filtered down to a specific subset of children (only `<foo>` model elements in this case):\n   *\n   * ```ts\n   * const viewSlot = conversionApi.writer.createSlot( node => node.is( 'element', 'foo' ) );\n   * const viewPosition = conversionApi.writer.createPositionAt( viewElement, 0 );\n   *\n   * conversionApi.writer.insert( viewPosition, viewSlot );\n   * ```\n   *\n   * While providing a filtered slot, make sure to provide slots for all child nodes. A single node can not be downcasted into\n   * multiple slots.\n   *\n   * **Note**: You should not change the order of nodes. View elements should be in the same order as model nodes.\n   *\n   * @param modeOrFilter The filter for child nodes.\n   * @returns The slot element to be placed in to the view structure while processing\n   * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure `elementToStructure()`}.\n   */\n  createSlot(modeOrFilter = \"children\") {\n    if (!this._slotFactory) {\n      throw new CKEditorError(\"view-writer-invalid-create-slot-context\", this.document);\n    }\n    return this._slotFactory(this, modeOrFilter);\n  }\n  /**\n   * Registers a slot factory.\n   *\n   * @internal\n   * @param slotFactory The slot factory.\n   */\n  _registerSlotFactory(slotFactory) {\n    this._slotFactory = slotFactory;\n  }\n  /**\n   * Clears the registered slot factory.\n   *\n   * @internal\n   */\n  _clearSlotFactory() {\n    this._slotFactory = null;\n  }\n  /**\n   * Inserts a node or nodes at the specified position. Takes care of breaking attributes before insertion\n   * and merging them afterwards if requested by the breakAttributes param.\n   *\n   * @param position Insertion position.\n   * @param nodes Node or nodes to insert.\n   * @param breakAttributes Whether attributes should be broken.\n   * @returns Range around inserted nodes.\n   */\n  _insertNodes(position, nodes, breakAttributes) {\n    let parentElement;\n    if (breakAttributes) {\n      parentElement = getParentContainer(position);\n    } else {\n      parentElement = position.parent.is(\"$text\") ? position.parent.parent : position.parent;\n    }\n    if (!parentElement) {\n      throw new CKEditorError(\"view-writer-invalid-position-container\", this.document);\n    }\n    let insertionPosition;\n    if (breakAttributes) {\n      insertionPosition = this._breakAttributes(position, true);\n    } else {\n      insertionPosition = position.parent.is(\"$text\") ? breakTextNode(position) : position;\n    }\n    const length = parentElement._insertChild(insertionPosition.offset, nodes);\n    for (const node of nodes) {\n      this._addToClonedElementsGroup(node);\n    }\n    const endPosition = insertionPosition.getShiftedBy(length);\n    const start = this.mergeAttributes(insertionPosition);\n    if (!start.isEqual(insertionPosition)) {\n      endPosition.offset--;\n    }\n    const end = this.mergeAttributes(endPosition);\n    return new Range(start, end);\n  }\n  /**\n   * Wraps children with provided `wrapElement`. Only children contained in `parent` element between\n   * `startOffset` and `endOffset` will be wrapped.\n   */\n  _wrapChildren(parent2, startOffset, endOffset, wrapElement) {\n    let i = startOffset;\n    const wrapPositions = [];\n    while (i < endOffset) {\n      const child = parent2.getChild(i);\n      const isText2 = child.is(\"$text\");\n      const isAttribute = child.is(\"attributeElement\");\n      if (isAttribute && this._wrapAttributeElement(wrapElement, child)) {\n        wrapPositions.push(new Position(parent2, i));\n      } else if (isText2 || !isAttribute || shouldABeOutsideB(wrapElement, child)) {\n        const newAttribute = wrapElement._clone();\n        child._remove();\n        newAttribute._appendChild(child);\n        parent2._insertChild(i, newAttribute);\n        this._addToClonedElementsGroup(newAttribute);\n        wrapPositions.push(new Position(parent2, i));\n      } else {\n        this._wrapChildren(child, 0, child.childCount, wrapElement);\n      }\n      i++;\n    }\n    let offsetChange = 0;\n    for (const position of wrapPositions) {\n      position.offset -= offsetChange;\n      if (position.offset == startOffset) {\n        continue;\n      }\n      const newPosition = this.mergeAttributes(position);\n      if (!newPosition.isEqual(position)) {\n        offsetChange++;\n        endOffset--;\n      }\n    }\n    return Range._createFromParentsAndOffsets(parent2, startOffset, parent2, endOffset);\n  }\n  /**\n   * Unwraps children from provided `unwrapElement`. Only children contained in `parent` element between\n   * `startOffset` and `endOffset` will be unwrapped.\n   */\n  _unwrapChildren(parent2, startOffset, endOffset, unwrapElement) {\n    let i = startOffset;\n    const unwrapPositions = [];\n    while (i < endOffset) {\n      const child = parent2.getChild(i);\n      if (!child.is(\"attributeElement\")) {\n        i++;\n        continue;\n      }\n      if (child.isSimilar(unwrapElement)) {\n        const unwrapped = child.getChildren();\n        const count2 = child.childCount;\n        child._remove();\n        parent2._insertChild(i, unwrapped);\n        this._removeFromClonedElementsGroup(child);\n        unwrapPositions.push(new Position(parent2, i), new Position(parent2, i + count2));\n        i += count2;\n        endOffset += count2 - 1;\n        continue;\n      }\n      if (this._unwrapAttributeElement(unwrapElement, child)) {\n        unwrapPositions.push(new Position(parent2, i), new Position(parent2, i + 1));\n        i++;\n        continue;\n      }\n      this._unwrapChildren(child, 0, child.childCount, unwrapElement);\n      i++;\n    }\n    let offsetChange = 0;\n    for (const position of unwrapPositions) {\n      position.offset -= offsetChange;\n      if (position.offset == startOffset || position.offset == endOffset) {\n        continue;\n      }\n      const newPosition = this.mergeAttributes(position);\n      if (!newPosition.isEqual(position)) {\n        offsetChange++;\n        endOffset--;\n      }\n    }\n    return Range._createFromParentsAndOffsets(parent2, startOffset, parent2, endOffset);\n  }\n  /**\n   * Helper function for `view.writer.wrap`. Wraps range with provided attribute element.\n   * This method will also merge newly added attribute element with its siblings whenever possible.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n   * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n   *\n   * @returns New range after wrapping, spanning over wrapping attribute element.\n   */\n  _wrapRange(range, attribute) {\n    const { start: breakStart, end: breakEnd } = this._breakAttributesRange(range, true);\n    const parentContainer = breakStart.parent;\n    const newRange = this._wrapChildren(parentContainer, breakStart.offset, breakEnd.offset, attribute);\n    const start = this.mergeAttributes(newRange.start);\n    if (!start.isEqual(newRange.start)) {\n      newRange.end.offset--;\n    }\n    const end = this.mergeAttributes(newRange.end);\n    return new Range(start, end);\n  }\n  /**\n   * Helper function for {@link #wrap}. Wraps position with provided attribute element.\n   * This method will also merge newly added attribute element with its siblings whenever possible.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError} `view-writer-wrap-invalid-attribute` when passed attribute element is not\n   * an instance of {@link module:engine/view/attributeelement~AttributeElement AttributeElement}.\n   *\n   * @returns New position after wrapping.\n   */\n  _wrapPosition(position, attribute) {\n    if (attribute.isSimilar(position.parent)) {\n      return movePositionToTextNode(position.clone());\n    }\n    if (position.parent.is(\"$text\")) {\n      position = breakTextNode(position);\n    }\n    const fakeElement = this.createAttributeElement(\"_wrapPosition-fake-element\");\n    fakeElement._priority = Number.POSITIVE_INFINITY;\n    fakeElement.isSimilar = () => false;\n    position.parent._insertChild(position.offset, fakeElement);\n    const wrapRange = new Range(position, position.getShiftedBy(1));\n    this.wrap(wrapRange, attribute);\n    const newPosition = new Position(fakeElement.parent, fakeElement.index);\n    fakeElement._remove();\n    const nodeBefore = newPosition.nodeBefore;\n    const nodeAfter = newPosition.nodeAfter;\n    if (nodeBefore instanceof Text && nodeAfter instanceof Text) {\n      return mergeTextNodes(nodeBefore, nodeAfter);\n    }\n    return movePositionToTextNode(newPosition);\n  }\n  /**\n   * Wraps one {@link module:engine/view/attributeelement~AttributeElement AttributeElement} into another by\n   * merging them if possible. When merging is possible - all attributes, styles and classes are moved from wrapper\n   * element to element being wrapped.\n   *\n   * @param wrapper Wrapper AttributeElement.\n   * @param toWrap AttributeElement to wrap using wrapper element.\n   * @returns Returns `true` if elements are merged.\n   */\n  _wrapAttributeElement(wrapper, toWrap) {\n    if (!canBeJoined(wrapper, toWrap)) {\n      return false;\n    }\n    if (wrapper.name !== toWrap.name || wrapper.priority !== toWrap.priority) {\n      return false;\n    }\n    for (const key of wrapper.getAttributeKeys()) {\n      if (key === \"class\" || key === \"style\") {\n        continue;\n      }\n      if (toWrap.hasAttribute(key) && toWrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n        return false;\n      }\n    }\n    for (const key of wrapper.getStyleNames()) {\n      if (toWrap.hasStyle(key) && toWrap.getStyle(key) !== wrapper.getStyle(key)) {\n        return false;\n      }\n    }\n    for (const key of wrapper.getAttributeKeys()) {\n      if (key === \"class\" || key === \"style\") {\n        continue;\n      }\n      if (!toWrap.hasAttribute(key)) {\n        this.setAttribute(key, wrapper.getAttribute(key), toWrap);\n      }\n    }\n    for (const key of wrapper.getStyleNames()) {\n      if (!toWrap.hasStyle(key)) {\n        this.setStyle(key, wrapper.getStyle(key), toWrap);\n      }\n    }\n    for (const key of wrapper.getClassNames()) {\n      if (!toWrap.hasClass(key)) {\n        this.addClass(key, toWrap);\n      }\n    }\n    return true;\n  }\n  /**\n   * Unwraps {@link module:engine/view/attributeelement~AttributeElement AttributeElement} from another by removing\n   * corresponding attributes, classes and styles. All attributes, classes and styles from wrapper should be present\n   * inside element being unwrapped.\n   *\n   * @param wrapper Wrapper AttributeElement.\n   * @param toUnwrap AttributeElement to unwrap using wrapper element.\n   * @returns Returns `true` if elements are unwrapped.\n   **/\n  _unwrapAttributeElement(wrapper, toUnwrap) {\n    if (!canBeJoined(wrapper, toUnwrap)) {\n      return false;\n    }\n    if (wrapper.name !== toUnwrap.name || wrapper.priority !== toUnwrap.priority) {\n      return false;\n    }\n    for (const key of wrapper.getAttributeKeys()) {\n      if (key === \"class\" || key === \"style\") {\n        continue;\n      }\n      if (!toUnwrap.hasAttribute(key) || toUnwrap.getAttribute(key) !== wrapper.getAttribute(key)) {\n        return false;\n      }\n    }\n    if (!toUnwrap.hasClass(...wrapper.getClassNames())) {\n      return false;\n    }\n    for (const key of wrapper.getStyleNames()) {\n      if (!toUnwrap.hasStyle(key) || toUnwrap.getStyle(key) !== wrapper.getStyle(key)) {\n        return false;\n      }\n    }\n    for (const key of wrapper.getAttributeKeys()) {\n      if (key === \"class\" || key === \"style\") {\n        continue;\n      }\n      this.removeAttribute(key, toUnwrap);\n    }\n    this.removeClass(Array.from(wrapper.getClassNames()), toUnwrap);\n    this.removeStyle(Array.from(wrapper.getStyleNames()), toUnwrap);\n    return true;\n  }\n  /**\n   * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at the boundaries of given range.\n   *\n   * @param range Range which `start` and `end` positions will be used to break attributes.\n   * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n   * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n   * @returns New range with located at break positions.\n   */\n  _breakAttributesRange(range, forceSplitText = false) {\n    const rangeStart = range.start;\n    const rangeEnd = range.end;\n    validateRangeContainer(range, this.document);\n    if (range.isCollapsed) {\n      const position = this._breakAttributes(range.start, forceSplitText);\n      return new Range(position, position);\n    }\n    const breakEnd = this._breakAttributes(rangeEnd, forceSplitText);\n    const count2 = breakEnd.parent.childCount;\n    const breakStart = this._breakAttributes(rangeStart, forceSplitText);\n    breakEnd.offset += breakEnd.parent.childCount - count2;\n    return new Range(breakStart, breakEnd);\n  }\n  /**\n   * Helper function used by other `DowncastWriter` methods. Breaks attribute elements at given position.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-empty-element` when break position\n   * is placed inside {@link module:engine/view/emptyelement~EmptyElement EmptyElement}.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `view-writer-cannot-break-ui-element` when break position\n   * is placed inside {@link module:engine/view/uielement~UIElement UIElement}.\n   *\n   * @param position Position where to break attributes.\n   * @param forceSplitText If set to `true`, will break text nodes even if they are directly in container element.\n   * This behavior will result in incorrect view state, but is needed by other view writing methods which then fixes view state.\n   * @returns New position after breaking the attributes.\n   */\n  _breakAttributes(position, forceSplitText = false) {\n    const positionOffset = position.offset;\n    const positionParent = position.parent;\n    if (position.parent.is(\"emptyElement\")) {\n      throw new CKEditorError(\"view-writer-cannot-break-empty-element\", this.document);\n    }\n    if (position.parent.is(\"uiElement\")) {\n      throw new CKEditorError(\"view-writer-cannot-break-ui-element\", this.document);\n    }\n    if (position.parent.is(\"rawElement\")) {\n      throw new CKEditorError(\"view-writer-cannot-break-raw-element\", this.document);\n    }\n    if (!forceSplitText && positionParent.is(\"$text\") && isContainerOrFragment(positionParent.parent)) {\n      return position.clone();\n    }\n    if (isContainerOrFragment(positionParent)) {\n      return position.clone();\n    }\n    if (positionParent.is(\"$text\")) {\n      return this._breakAttributes(breakTextNode(position), forceSplitText);\n    }\n    const length = positionParent.childCount;\n    if (positionOffset == length) {\n      const newPosition = new Position(positionParent.parent, positionParent.index + 1);\n      return this._breakAttributes(newPosition, forceSplitText);\n    } else {\n      if (positionOffset === 0) {\n        const newPosition = new Position(positionParent.parent, positionParent.index);\n        return this._breakAttributes(newPosition, forceSplitText);\n      } else {\n        const offsetAfter = positionParent.index + 1;\n        const clonedNode = positionParent._clone();\n        positionParent.parent._insertChild(offsetAfter, clonedNode);\n        this._addToClonedElementsGroup(clonedNode);\n        const count2 = positionParent.childCount - positionOffset;\n        const nodesToMove = positionParent._removeChildren(positionOffset, count2);\n        clonedNode._appendChild(nodesToMove);\n        const newPosition = new Position(positionParent.parent, offsetAfter);\n        return this._breakAttributes(newPosition, forceSplitText);\n      }\n    }\n  }\n  /**\n   * Stores the information that an {@link module:engine/view/attributeelement~AttributeElement attribute element} was\n   * added to the tree. Saves the reference to the group in the given element and updates the group, so other elements\n   * from the group now keep a reference to the given attribute element.\n   *\n   * The clones group can be obtained using {@link module:engine/view/attributeelement~AttributeElement#getElementsWithSameId}.\n   *\n   * Does nothing if added element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n   *\n   * @param element Attribute element to save.\n   */\n  _addToClonedElementsGroup(element) {\n    if (!element.root.is(\"rootElement\")) {\n      return;\n    }\n    if (element.is(\"element\")) {\n      for (const child of element.getChildren()) {\n        this._addToClonedElementsGroup(child);\n      }\n    }\n    const id = element.id;\n    if (!id) {\n      return;\n    }\n    let group = this._cloneGroups.get(id);\n    if (!group) {\n      group = /* @__PURE__ */ new Set();\n      this._cloneGroups.set(id, group);\n    }\n    group.add(element);\n    element._clonesGroup = group;\n  }\n  /**\n   * Removes all the information about the given {@link module:engine/view/attributeelement~AttributeElement attribute element}\n   * from its clones group.\n   *\n   * Keep in mind, that the element will still keep a reference to the group (but the group will not keep a reference to it).\n   * This allows to reference the whole group even if the element was already removed from the tree.\n   *\n   * Does nothing if the element has no {@link module:engine/view/attributeelement~AttributeElement#id id}.\n   *\n   * @param element Attribute element to remove.\n   */\n  _removeFromClonedElementsGroup(element) {\n    if (element.is(\"element\")) {\n      for (const child of element.getChildren()) {\n        this._removeFromClonedElementsGroup(child);\n      }\n    }\n    const id = element.id;\n    if (!id) {\n      return;\n    }\n    const group = this._cloneGroups.get(id);\n    if (!group) {\n      return;\n    }\n    group.delete(element);\n  }\n};\nfunction _hasNonUiChildren(parent2) {\n  return Array.from(parent2.getChildren()).some((child) => !child.is(\"uiElement\"));\n}\nfunction getParentContainer(position) {\n  let parent2 = position.parent;\n  while (!isContainerOrFragment(parent2)) {\n    if (!parent2) {\n      return void 0;\n    }\n    parent2 = parent2.parent;\n  }\n  return parent2;\n}\nfunction shouldABeOutsideB(a, b) {\n  if (a.priority < b.priority) {\n    return true;\n  } else if (a.priority > b.priority) {\n    return false;\n  }\n  return a.getIdentity() < b.getIdentity();\n}\nfunction movePositionToTextNode(position) {\n  const nodeBefore = position.nodeBefore;\n  if (nodeBefore && nodeBefore.is(\"$text\")) {\n    return new Position(nodeBefore, nodeBefore.data.length);\n  }\n  const nodeAfter = position.nodeAfter;\n  if (nodeAfter && nodeAfter.is(\"$text\")) {\n    return new Position(nodeAfter, 0);\n  }\n  return position;\n}\nfunction breakTextNode(position) {\n  if (position.offset == position.parent.data.length) {\n    return new Position(position.parent.parent, position.parent.index + 1);\n  }\n  if (position.offset === 0) {\n    return new Position(position.parent.parent, position.parent.index);\n  }\n  const textToMove = position.parent.data.slice(position.offset);\n  position.parent._data = position.parent.data.slice(0, position.offset);\n  position.parent.parent._insertChild(position.parent.index + 1, new Text(position.root.document, textToMove));\n  return new Position(position.parent.parent, position.parent.index + 1);\n}\nfunction mergeTextNodes(t1, t2) {\n  const nodeBeforeLength = t1.data.length;\n  t1._data += t2.data;\n  t2._remove();\n  return new Position(t1, nodeBeforeLength);\n}\nvar validNodesToInsert = [Text, attributeelement_default, ContainerElement, EmptyElement, RawElement, UIElement];\nfunction validateNodesToInsert(nodes, errorContext) {\n  for (const node of nodes) {\n    if (!validNodesToInsert.some((validNode) => node instanceof validNode)) {\n      throw new CKEditorError(\"view-writer-insert-invalid-node-type\", errorContext);\n    }\n    if (!node.is(\"$text\")) {\n      validateNodesToInsert(node.getChildren(), errorContext);\n    }\n  }\n}\nfunction isContainerOrFragment(node) {\n  return node && (node.is(\"containerElement\") || node.is(\"documentFragment\"));\n}\nfunction validateRangeContainer(range, errorContext) {\n  const startContainer = getParentContainer(range.start);\n  const endContainer = getParentContainer(range.end);\n  if (!startContainer || !endContainer || startContainer !== endContainer) {\n    throw new CKEditorError(\"view-writer-invalid-range-container\", errorContext);\n  }\n}\nfunction canBeJoined(a, b) {\n  return a.id === null && b.id === null;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/filler.js\nvar NBSP_FILLER = (domDocument) => domDocument.createTextNode(\" \");\nvar MARKED_NBSP_FILLER = (domDocument) => {\n  const span = domDocument.createElement(\"span\");\n  span.dataset.ckeFiller = \"true\";\n  span.innerText = \" \";\n  return span;\n};\nvar BR_FILLER = (domDocument) => {\n  const fillerBr = domDocument.createElement(\"br\");\n  fillerBr.dataset.ckeFiller = \"true\";\n  return fillerBr;\n};\nvar INLINE_FILLER_LENGTH = 7;\nvar INLINE_FILLER = \"⁠\".repeat(INLINE_FILLER_LENGTH);\nfunction startsWithFiller(domNode) {\n  if (typeof domNode == \"string\") {\n    return domNode.substr(0, INLINE_FILLER_LENGTH) === INLINE_FILLER;\n  }\n  return isText(domNode) && domNode.data.substr(0, INLINE_FILLER_LENGTH) === INLINE_FILLER;\n}\nfunction isInlineFiller(domText) {\n  return domText.data.length == INLINE_FILLER_LENGTH && startsWithFiller(domText);\n}\nfunction getDataWithoutFiller(domText) {\n  const data = typeof domText == \"string\" ? domText : domText.data;\n  if (startsWithFiller(domText)) {\n    return data.slice(INLINE_FILLER_LENGTH);\n  }\n  return data;\n}\nfunction injectQuirksHandling(view) {\n  view.document.on(\"arrowKey\", jumpOverInlineFiller, { priority: \"low\" });\n}\nfunction jumpOverInlineFiller(evt, data) {\n  if (data.keyCode == keyCodes.arrowleft) {\n    const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();\n    if (domSelection.rangeCount == 1 && domSelection.getRangeAt(0).collapsed) {\n      const domParent = domSelection.getRangeAt(0).startContainer;\n      const domOffset = domSelection.getRangeAt(0).startOffset;\n      if (startsWithFiller(domParent) && domOffset <= INLINE_FILLER_LENGTH) {\n        domSelection.collapse(domParent, 0);\n      }\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/renderer.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-engine/theme/renderer.css\";\nvar Renderer = class extends ObservableMixin() {\n  /**\n   * Creates a renderer instance.\n   *\n   * @param domConverter Converter instance.\n   * @param selection View selection.\n   */\n  constructor(domConverter, selection) {\n    super();\n    this.domDocuments = /* @__PURE__ */ new Set();\n    this.markedAttributes = /* @__PURE__ */ new Set();\n    this.markedChildren = /* @__PURE__ */ new Set();\n    this.markedTexts = /* @__PURE__ */ new Set();\n    this._inlineFiller = null;\n    this._fakeSelectionContainer = null;\n    this.domConverter = domConverter;\n    this.selection = selection;\n    this.set(\"isFocused\", false);\n    this.set(\"isSelecting\", false);\n    if (env_default.isBlink && !env_default.isAndroid) {\n      this.on(\"change:isSelecting\", () => {\n        if (!this.isSelecting) {\n          this.render();\n        }\n      });\n    }\n    this.set(\"isComposing\", false);\n    this.on(\"change:isComposing\", () => {\n      if (!this.isComposing) {\n        this.render();\n      }\n    });\n  }\n  /**\n   * Marks a view node to be updated in the DOM by {@link #render `render()`}.\n   *\n   * Note that only view nodes whose parents have corresponding DOM elements need to be marked to be synchronized.\n   *\n   * @see #markedAttributes\n   * @see #markedChildren\n   * @see #markedTexts\n   *\n   * @param type Type of the change.\n   * @param node ViewNode to be marked.\n   */\n  markToSync(type, node) {\n    if (type === \"text\") {\n      if (this.domConverter.mapViewToDom(node.parent)) {\n        this.markedTexts.add(node);\n      }\n    } else {\n      if (!this.domConverter.mapViewToDom(node)) {\n        return;\n      }\n      if (type === \"attributes\") {\n        this.markedAttributes.add(node);\n      } else if (type === \"children\") {\n        this.markedChildren.add(node);\n      } else {\n        const unreachable = type;\n        throw new CKEditorError(\"view-renderer-unknown-type\", this);\n      }\n    }\n  }\n  /**\n   * Renders all buffered changes ({@link #markedAttributes}, {@link #markedChildren} and {@link #markedTexts}) and\n   * the current view selection (if needed) to the DOM by applying a minimal set of changes to it.\n   *\n   * Renderer tries not to break the text composition (e.g. IME) and x-index of the selection,\n   * so it does as little as it is needed to update the DOM.\n   *\n   * Renderer also handles {@link module:engine/view/filler fillers}. Especially, it checks if the inline filler is needed\n   * at the selection position and adds or removes it. To prevent breaking text composition inline filler will not be\n   * removed as long as the selection is in the text node which needed it at first.\n   */\n  render() {\n    if (this.isComposing && !env_default.isAndroid) {\n      return;\n    }\n    let inlineFillerPosition = null;\n    const isInlineFillerRenderingPossible = env_default.isBlink && !env_default.isAndroid ? !this.isSelecting : true;\n    for (const element of this.markedChildren) {\n      this._updateChildrenMappings(element);\n    }\n    if (isInlineFillerRenderingPossible) {\n      if (this._inlineFiller && !this._isSelectionInInlineFiller()) {\n        this._removeInlineFiller();\n      }\n      if (this._inlineFiller) {\n        inlineFillerPosition = this._getInlineFillerPosition();\n      } else if (this._needsInlineFillerAtSelection()) {\n        inlineFillerPosition = this.selection.getFirstPosition();\n        this.markedChildren.add(inlineFillerPosition.parent);\n      }\n    } else if (this._inlineFiller && this._inlineFiller.parentNode) {\n      inlineFillerPosition = this.domConverter.domPositionToView(this._inlineFiller);\n      if (inlineFillerPosition && inlineFillerPosition.parent.is(\"$text\")) {\n        inlineFillerPosition = Position._createBefore(inlineFillerPosition.parent);\n      }\n    }\n    for (const element of this.markedAttributes) {\n      this._updateAttrs(element);\n    }\n    for (const element of this.markedChildren) {\n      this._updateChildren(element, { inlineFillerPosition });\n    }\n    for (const node of this.markedTexts) {\n      if (!this.markedChildren.has(node.parent) && this.domConverter.mapViewToDom(node.parent)) {\n        this._updateText(node, { inlineFillerPosition });\n      }\n    }\n    if (isInlineFillerRenderingPossible) {\n      if (inlineFillerPosition) {\n        const fillerDomPosition = this.domConverter.viewPositionToDom(inlineFillerPosition);\n        const domDocument = fillerDomPosition.parent.ownerDocument;\n        if (!startsWithFiller(fillerDomPosition.parent)) {\n          this._inlineFiller = addInlineFiller(domDocument, fillerDomPosition.parent, fillerDomPosition.offset);\n        } else {\n          this._inlineFiller = fillerDomPosition.parent;\n        }\n      } else {\n        this._inlineFiller = null;\n      }\n    }\n    this._updateFocus();\n    this._updateSelection();\n    this.domConverter._clearTemporaryCustomProperties();\n    this.markedTexts.clear();\n    this.markedAttributes.clear();\n    this.markedChildren.clear();\n  }\n  /**\n   * Updates mappings of view element's children.\n   *\n   * Children that were replaced in the view structure by similar elements (same tag name) are treated as 'replaced'.\n   * This means that their mappings can be updated so the new view elements are mapped to the existing DOM elements.\n   * Thanks to that these elements do not need to be re-rendered completely.\n   *\n   * @param viewElement The view element whose children mappings will be updated.\n   */\n  _updateChildrenMappings(viewElement) {\n    const domElement = this.domConverter.mapViewToDom(viewElement);\n    if (!domElement) {\n      return;\n    }\n    const actualDomChildren = Array.from(domElement.childNodes);\n    const expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, { withChildren: false }));\n    const diff2 = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n    const actions = this._findUpdateActions(diff2, actualDomChildren, expectedDomChildren, areSimilarElements);\n    if (actions.indexOf(\"update\") !== -1) {\n      const counter = { equal: 0, insert: 0, delete: 0 };\n      for (const action of actions) {\n        if (action === \"update\") {\n          const insertIndex = counter.equal + counter.insert;\n          const deleteIndex = counter.equal + counter.delete;\n          const viewChild = viewElement.getChild(insertIndex);\n          if (viewChild && !viewChild.is(\"uiElement\") && !viewChild.is(\"rawElement\")) {\n            this._updateElementMappings(viewChild, actualDomChildren[deleteIndex]);\n          }\n          remove(expectedDomChildren[insertIndex]);\n          counter.equal++;\n        } else {\n          counter[action]++;\n        }\n      }\n    }\n  }\n  /**\n   * Updates mappings of a given view element.\n   *\n   * @param viewElement The view element whose mappings will be updated.\n   * @param domElement The DOM element representing the given view element.\n   */\n  _updateElementMappings(viewElement, domElement) {\n    this.domConverter.unbindDomElement(domElement);\n    this.domConverter.bindElements(domElement, viewElement);\n    this.markedChildren.add(viewElement);\n    this.markedAttributes.add(viewElement);\n  }\n  /**\n   * Gets the position of the inline filler based on the current selection.\n   * Here, we assume that we know that the filler is needed and\n   * {@link #_isSelectionInInlineFiller is at the selection position}, and, since it is needed,\n   * it is somewhere at the selection position.\n   *\n   * Note: The filler position cannot be restored based on the filler's DOM text node, because\n   * when this method is called (before rendering), the bindings will often be broken. View-to-DOM\n   * bindings are only dependable after rendering.\n   */\n  _getInlineFillerPosition() {\n    const firstPos = this.selection.getFirstPosition();\n    if (firstPos.parent.is(\"$text\")) {\n      return Position._createBefore(firstPos.parent);\n    } else {\n      return firstPos;\n    }\n  }\n  /**\n   * Returns `true` if the selection has not left the inline filler's text node.\n   * If it is `true`, it means that the filler had been added for a reason and the selection did not\n   * leave the filler's text node. For example, the user can be in the middle of a composition so it should not be touched.\n   *\n   * @returns `true` if the inline filler and selection are in the same place.\n   */\n  _isSelectionInInlineFiller() {\n    if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n      return false;\n    }\n    const selectionPosition = this.selection.getFirstPosition();\n    const position = this.domConverter.viewPositionToDom(selectionPosition);\n    if (position && isText(position.parent) && startsWithFiller(position.parent)) {\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Removes the inline filler.\n   */\n  _removeInlineFiller() {\n    const domFillerNode = this._inlineFiller;\n    if (!startsWithFiller(domFillerNode)) {\n      throw new CKEditorError(\"view-renderer-filler-was-lost\", this);\n    }\n    if (isInlineFiller(domFillerNode)) {\n      domFillerNode.remove();\n    } else {\n      domFillerNode.data = domFillerNode.data.substr(INLINE_FILLER_LENGTH);\n    }\n    this._inlineFiller = null;\n  }\n  /**\n   * Checks if the inline {@link module:engine/view/filler filler} should be added.\n   *\n   * @returns `true` if the inline filler should be added.\n   */\n  _needsInlineFillerAtSelection() {\n    if (this.selection.rangeCount != 1 || !this.selection.isCollapsed) {\n      return false;\n    }\n    const selectionPosition = this.selection.getFirstPosition();\n    const selectionParent = selectionPosition.parent;\n    const selectionOffset = selectionPosition.offset;\n    if (!this.domConverter.mapViewToDom(selectionParent.root)) {\n      return false;\n    }\n    if (!selectionParent.is(\"element\")) {\n      return false;\n    }\n    if (!isEditable(selectionParent)) {\n      return false;\n    }\n    if (selectionOffset === selectionParent.getFillerOffset()) {\n      return false;\n    }\n    const nodeBefore = selectionPosition.nodeBefore;\n    const nodeAfter = selectionPosition.nodeAfter;\n    if (nodeBefore instanceof Text || nodeAfter instanceof Text) {\n      return false;\n    }\n    if (env_default.isAndroid && (nodeBefore || nodeAfter)) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Checks if text needs to be updated and possibly updates it.\n   *\n   * @param viewText View text to update.\n   * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n   */\n  _updateText(viewText, options) {\n    const domText = this.domConverter.findCorrespondingDomText(viewText);\n    const newDomText = this.domConverter.viewToDom(viewText);\n    let expectedText = newDomText.data;\n    const filler = options.inlineFillerPosition;\n    if (filler && filler.parent == viewText.parent && filler.offset == viewText.index) {\n      expectedText = INLINE_FILLER + expectedText;\n    }\n    updateTextNode(domText, expectedText);\n  }\n  /**\n   * Checks if attribute list needs to be updated and possibly updates it.\n   *\n   * @param viewElement The view element to update.\n   */\n  _updateAttrs(viewElement) {\n    const domElement = this.domConverter.mapViewToDom(viewElement);\n    if (!domElement) {\n      return;\n    }\n    const domAttrKeys = Array.from(domElement.attributes).map((attr) => attr.name);\n    const viewAttrKeys = viewElement.getAttributeKeys();\n    for (const key of viewAttrKeys) {\n      this.domConverter.setDomElementAttribute(domElement, key, viewElement.getAttribute(key), viewElement);\n    }\n    for (const key of domAttrKeys) {\n      if (!viewElement.hasAttribute(key)) {\n        this.domConverter.removeDomElementAttribute(domElement, key);\n      }\n    }\n  }\n  /**\n   * Checks if elements child list needs to be updated and possibly updates it.\n   *\n   * Note that on Android, to reduce the risk of composition breaks, it tries to update data of an existing\n   * child text nodes instead of replacing them completely.\n   *\n   * @param viewElement View element to update.\n   * @param options.inlineFillerPosition The position where the inline filler should be rendered.\n   */\n  _updateChildren(viewElement, options) {\n    const domElement = this.domConverter.mapViewToDom(viewElement);\n    if (!domElement) {\n      return;\n    }\n    if (env_default.isAndroid) {\n      let previousDomNode = null;\n      for (const domNode of Array.from(domElement.childNodes)) {\n        if (previousDomNode && isText(previousDomNode) && isText(domNode)) {\n          domElement.normalize();\n          break;\n        }\n        previousDomNode = domNode;\n      }\n    }\n    const inlineFillerPosition = options.inlineFillerPosition;\n    const actualDomChildren = domElement.childNodes;\n    const expectedDomChildren = Array.from(this.domConverter.viewChildrenToDom(viewElement, { bind: true }));\n    if (inlineFillerPosition && inlineFillerPosition.parent === viewElement) {\n      addInlineFiller(domElement.ownerDocument, expectedDomChildren, inlineFillerPosition.offset);\n    }\n    const diff2 = this._diffNodeLists(actualDomChildren, expectedDomChildren);\n    const actions = this._findUpdateActions(diff2, actualDomChildren, expectedDomChildren, areTextNodes);\n    let i = 0;\n    const nodesToUnbind = /* @__PURE__ */ new Set();\n    for (const action of actions) {\n      if (action === \"delete\") {\n        nodesToUnbind.add(actualDomChildren[i]);\n        remove(actualDomChildren[i]);\n      } else if (action === \"equal\" || action === \"update\") {\n        i++;\n      }\n    }\n    i = 0;\n    for (const action of actions) {\n      if (action === \"insert\") {\n        insertAt(domElement, i, expectedDomChildren[i]);\n        i++;\n      } else if (action === \"update\") {\n        updateTextNode(actualDomChildren[i], expectedDomChildren[i].data);\n        i++;\n      } else if (action === \"equal\") {\n        this._markDescendantTextToSync(this.domConverter.domToView(expectedDomChildren[i]));\n        i++;\n      }\n    }\n    for (const node of nodesToUnbind) {\n      if (!node.parentNode) {\n        this.domConverter.unbindDomElement(node);\n      }\n    }\n  }\n  /**\n   * Shorthand for diffing two arrays or node lists of DOM nodes.\n   *\n   * @param actualDomChildren Actual DOM children\n   * @param expectedDomChildren Expected DOM children.\n   * @returns The list of actions based on the {@link module:utils/diff~diff} function.\n   */\n  _diffNodeLists(actualDomChildren, expectedDomChildren) {\n    actualDomChildren = filterOutFakeSelectionContainer(actualDomChildren, this._fakeSelectionContainer);\n    return diff(actualDomChildren, expectedDomChildren, sameNodes.bind(null, this.domConverter));\n  }\n  /**\n   * Finds DOM nodes that were replaced with the similar nodes (same tag name) in the view. All nodes are compared\n   * within one `insert`/`delete` action group, for example:\n   *\n   * ```\n   * Actual DOM:\t\t<p><b>Foo</b>Bar<i>Baz</i><b>Bax</b></p>\n   * Expected DOM:\t<p>Bar<b>123</b><i>Baz</i><b>456</b></p>\n   * Input actions:\t[ insert, insert, delete, delete, equal, insert, delete ]\n   * Output actions:\t[ insert, replace, delete, equal, replace ]\n   * ```\n   *\n   * @param actions Actions array which is a result of the {@link module:utils/diff~diff} function.\n   * @param actualDom Actual DOM children\n   * @param expectedDom Expected DOM children.\n   * @param comparator A comparator function that should return `true` if the given node should be reused\n   * (either by the update of a text node data or an element children list for similar elements).\n   * @returns Actions array modified with the `update` actions.\n   */\n  _findUpdateActions(actions, actualDom, expectedDom, comparator) {\n    if (actions.indexOf(\"insert\") === -1 || actions.indexOf(\"delete\") === -1) {\n      return actions;\n    }\n    let newActions = [];\n    let actualSlice = [];\n    let expectedSlice = [];\n    const counter = { equal: 0, insert: 0, delete: 0 };\n    for (const action of actions) {\n      if (action === \"insert\") {\n        expectedSlice.push(expectedDom[counter.equal + counter.insert]);\n      } else if (action === \"delete\") {\n        actualSlice.push(actualDom[counter.equal + counter.delete]);\n      } else {\n        newActions = newActions.concat(diff(actualSlice, expectedSlice, comparator).map((action2) => action2 === \"equal\" ? \"update\" : action2));\n        newActions.push(\"equal\");\n        actualSlice = [];\n        expectedSlice = [];\n      }\n      counter[action]++;\n    }\n    return newActions.concat(diff(actualSlice, expectedSlice, comparator).map((action) => action === \"equal\" ? \"update\" : action));\n  }\n  /**\n   * Marks text nodes to be synchronized.\n   *\n   * If a text node is passed, it will be marked. If an element is passed, all descendant text nodes inside it will be marked.\n   *\n   * @param viewNode View node to sync.\n   */\n  _markDescendantTextToSync(viewNode) {\n    if (!viewNode) {\n      return;\n    }\n    if (viewNode.is(\"$text\")) {\n      this.markedTexts.add(viewNode);\n    } else if (viewNode.is(\"element\")) {\n      for (const child of viewNode.getChildren()) {\n        this._markDescendantTextToSync(child);\n      }\n    }\n  }\n  /**\n   * Checks if the selection needs to be updated and possibly updates it.\n   */\n  _updateSelection() {\n    if (env_default.isBlink && !env_default.isAndroid && this.isSelecting && !this.markedChildren.size) {\n      return;\n    }\n    if (this.selection.rangeCount === 0) {\n      this._removeDomSelection();\n      this._removeFakeSelection();\n      return;\n    }\n    const domRoot = this.domConverter.mapViewToDom(this.selection.editableElement);\n    if (!this.isFocused || !domRoot) {\n      return;\n    }\n    if (this.selection.isFake) {\n      this._updateFakeSelection(domRoot);\n    } else if (this._fakeSelectionContainer && this._fakeSelectionContainer.isConnected) {\n      this._removeFakeSelection();\n      this._updateDomSelection(domRoot);\n    } else if (!(this.isComposing && env_default.isAndroid)) {\n      this._updateDomSelection(domRoot);\n    }\n  }\n  /**\n   * Updates the fake selection.\n   *\n   * @param domRoot A valid DOM root where the fake selection container should be added.\n   */\n  _updateFakeSelection(domRoot) {\n    const domDocument = domRoot.ownerDocument;\n    if (!this._fakeSelectionContainer) {\n      this._fakeSelectionContainer = createFakeSelectionContainer(domDocument);\n    }\n    const container = this._fakeSelectionContainer;\n    this.domConverter.bindFakeSelection(container, this.selection);\n    if (!this._fakeSelectionNeedsUpdate(domRoot)) {\n      return;\n    }\n    if (!container.parentElement || container.parentElement != domRoot) {\n      domRoot.appendChild(container);\n    }\n    container.textContent = this.selection.fakeSelectionLabel || \" \";\n    const domSelection = domDocument.getSelection();\n    const domRange = domDocument.createRange();\n    domSelection.removeAllRanges();\n    domRange.selectNodeContents(container);\n    domSelection.addRange(domRange);\n  }\n  /**\n   * Updates the DOM selection.\n   *\n   * @param domRoot A valid DOM root where the DOM selection should be rendered.\n   */\n  _updateDomSelection(domRoot) {\n    const domSelection = domRoot.ownerDocument.defaultView.getSelection();\n    if (!this._domSelectionNeedsUpdate(domSelection)) {\n      return;\n    }\n    const anchor = this.domConverter.viewPositionToDom(this.selection.anchor);\n    const focus = this.domConverter.viewPositionToDom(this.selection.focus);\n    domSelection.setBaseAndExtent(anchor.parent, anchor.offset, focus.parent, focus.offset);\n    if (env_default.isGecko) {\n      fixGeckoSelectionAfterBr(focus, domSelection);\n    }\n  }\n  /**\n   * Checks whether a given DOM selection needs to be updated.\n   *\n   * @param domSelection The DOM selection to check.\n   */\n  _domSelectionNeedsUpdate(domSelection) {\n    if (!this.domConverter.isDomSelectionCorrect(domSelection)) {\n      return true;\n    }\n    const oldViewSelection = domSelection && this.domConverter.domSelectionToView(domSelection);\n    if (oldViewSelection && this.selection.isEqual(oldViewSelection)) {\n      return false;\n    }\n    if (!this.selection.isCollapsed && this.selection.isSimilar(oldViewSelection)) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Checks whether the fake selection needs to be updated.\n   *\n   * @param domRoot A valid DOM root where a new fake selection container should be added.\n   */\n  _fakeSelectionNeedsUpdate(domRoot) {\n    const container = this._fakeSelectionContainer;\n    const domSelection = domRoot.ownerDocument.getSelection();\n    if (!container || container.parentElement !== domRoot) {\n      return true;\n    }\n    if (domSelection.anchorNode !== container && !container.contains(domSelection.anchorNode)) {\n      return true;\n    }\n    return container.textContent !== this.selection.fakeSelectionLabel;\n  }\n  /**\n   * Removes the DOM selection.\n   */\n  _removeDomSelection() {\n    for (const doc of this.domDocuments) {\n      const domSelection = doc.getSelection();\n      if (domSelection.rangeCount) {\n        const activeDomElement = doc.activeElement;\n        const viewElement = this.domConverter.mapDomToView(activeDomElement);\n        if (activeDomElement && viewElement) {\n          domSelection.removeAllRanges();\n        }\n      }\n    }\n  }\n  /**\n   * Removes the fake selection.\n   */\n  _removeFakeSelection() {\n    const container = this._fakeSelectionContainer;\n    if (container) {\n      container.remove();\n    }\n  }\n  /**\n   * Checks if focus needs to be updated and possibly updates it.\n   */\n  _updateFocus() {\n    if (this.isFocused) {\n      const editable = this.selection.editableElement;\n      if (editable) {\n        this.domConverter.focus(editable);\n      }\n    }\n  }\n};\nfunction isEditable(element) {\n  if (element.getAttribute(\"contenteditable\") == \"false\") {\n    return false;\n  }\n  const parent2 = element.findAncestor((element2) => element2.hasAttribute(\"contenteditable\"));\n  return !parent2 || parent2.getAttribute(\"contenteditable\") == \"true\";\n}\nfunction addInlineFiller(domDocument, domParentOrArray, offset) {\n  const childNodes = domParentOrArray instanceof Array ? domParentOrArray : domParentOrArray.childNodes;\n  const nodeAfterFiller = childNodes[offset];\n  if (isText(nodeAfterFiller)) {\n    nodeAfterFiller.data = INLINE_FILLER + nodeAfterFiller.data;\n    return nodeAfterFiller;\n  } else {\n    const fillerNode = domDocument.createTextNode(INLINE_FILLER);\n    if (Array.isArray(domParentOrArray)) {\n      childNodes.splice(offset, 0, fillerNode);\n    } else {\n      insertAt(domParentOrArray, offset, fillerNode);\n    }\n    return fillerNode;\n  }\n}\nfunction areSimilarElements(node1, node2) {\n  return isNode(node1) && isNode(node2) && !isText(node1) && !isText(node2) && !isComment(node1) && !isComment(node2) && node1.tagName.toLowerCase() === node2.tagName.toLowerCase();\n}\nfunction areTextNodes(node1, node2) {\n  return isNode(node1) && isNode(node2) && isText(node1) && isText(node2);\n}\nfunction sameNodes(domConverter, actualDomChild, expectedDomChild) {\n  if (actualDomChild === expectedDomChild) {\n    return true;\n  } else if (isText(actualDomChild) && isText(expectedDomChild)) {\n    return actualDomChild.data === expectedDomChild.data;\n  } else if (domConverter.isBlockFiller(actualDomChild) && domConverter.isBlockFiller(expectedDomChild)) {\n    return true;\n  }\n  return false;\n}\nfunction fixGeckoSelectionAfterBr(focus, domSelection) {\n  const parent2 = focus.parent;\n  if (parent2.nodeType != Node.ELEMENT_NODE || focus.offset != parent2.childNodes.length - 1) {\n    return;\n  }\n  const childAtOffset = parent2.childNodes[focus.offset];\n  if (childAtOffset && childAtOffset.tagName == \"BR\") {\n    domSelection.addRange(domSelection.getRangeAt(0));\n  }\n}\nfunction filterOutFakeSelectionContainer(domChildList, fakeSelectionContainer) {\n  const childList = Array.from(domChildList);\n  if (childList.length == 0 || !fakeSelectionContainer) {\n    return childList;\n  }\n  const last2 = childList[childList.length - 1];\n  if (last2 == fakeSelectionContainer) {\n    childList.pop();\n  }\n  return childList;\n}\nfunction createFakeSelectionContainer(domDocument) {\n  const container = domDocument.createElement(\"div\");\n  container.className = \"ck-fake-selection-container\";\n  Object.assign(container.style, {\n    position: \"fixed\",\n    top: 0,\n    left: \"-9999px\",\n    // See https://github.com/ckeditor/ckeditor5/issues/752.\n    width: \"42px\"\n  });\n  container.textContent = \" \";\n  return container;\n}\nfunction updateTextNode(domText, expectedText) {\n  const actualText = domText.data;\n  if (actualText == expectedText) {\n    return;\n  }\n  const actions = fastDiff(actualText, expectedText);\n  for (const action of actions) {\n    if (action.type === \"insert\") {\n      domText.insertData(action.index, action.values.join(\"\"));\n    } else {\n      domText.deleteData(action.index, action.howMany);\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/domconverter.js\nvar BR_FILLER_REF = BR_FILLER(global_default.document);\nvar NBSP_FILLER_REF = NBSP_FILLER(global_default.document);\nvar MARKED_NBSP_FILLER_REF = MARKED_NBSP_FILLER(global_default.document);\nvar UNSAFE_ATTRIBUTE_NAME_PREFIX = \"data-ck-unsafe-attribute-\";\nvar UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE = \"data-ck-unsafe-element\";\nvar DomConverter = class {\n  /**\n   * Creates a DOM converter.\n   *\n   * @param document The view document instance.\n   * @param options An object with configuration options.\n   * @param options.blockFillerMode The type of the block filler to use.\n   * Default value depends on the options.renderingMode:\n   *  'nbsp' when options.renderingMode == 'data',\n   *  'br' when options.renderingMode == 'editing'.\n   * @param options.renderingMode Whether to leave the View-to-DOM conversion result unchanged\n   * or improve editing experience by filtering out interactive data.\n   */\n  constructor(document2, { blockFillerMode, renderingMode = \"editing\" } = {}) {\n    this._domToViewMapping = /* @__PURE__ */ new WeakMap();\n    this._viewToDomMapping = /* @__PURE__ */ new WeakMap();\n    this._fakeSelectionMapping = /* @__PURE__ */ new WeakMap();\n    this._rawContentElementMatcher = new Matcher();\n    this._inlineObjectElementMatcher = new Matcher();\n    this._elementsWithTemporaryCustomProperties = /* @__PURE__ */ new Set();\n    this.document = document2;\n    this.renderingMode = renderingMode;\n    this.blockFillerMode = blockFillerMode || (renderingMode === \"editing\" ? \"br\" : \"nbsp\");\n    this.preElements = [\"pre\"];\n    this.blockElements = [\n      \"address\",\n      \"article\",\n      \"aside\",\n      \"blockquote\",\n      \"caption\",\n      \"center\",\n      \"dd\",\n      \"details\",\n      \"dir\",\n      \"div\",\n      \"dl\",\n      \"dt\",\n      \"fieldset\",\n      \"figcaption\",\n      \"figure\",\n      \"footer\",\n      \"form\",\n      \"h1\",\n      \"h2\",\n      \"h3\",\n      \"h4\",\n      \"h5\",\n      \"h6\",\n      \"header\",\n      \"hgroup\",\n      \"legend\",\n      \"li\",\n      \"main\",\n      \"menu\",\n      \"nav\",\n      \"ol\",\n      \"p\",\n      \"pre\",\n      \"section\",\n      \"summary\",\n      \"table\",\n      \"tbody\",\n      \"td\",\n      \"tfoot\",\n      \"th\",\n      \"thead\",\n      \"tr\",\n      \"ul\"\n    ];\n    this.inlineObjectElements = [\n      \"object\",\n      \"iframe\",\n      \"input\",\n      \"button\",\n      \"textarea\",\n      \"select\",\n      \"option\",\n      \"video\",\n      \"embed\",\n      \"audio\",\n      \"img\",\n      \"canvas\"\n    ];\n    this.unsafeElements = [\"script\", \"style\"];\n    this._domDocument = this.renderingMode === \"editing\" ? global_default.document : global_default.document.implementation.createHTMLDocument(\"\");\n  }\n  /**\n   * Binds a given DOM element that represents fake selection to a **position** of a\n   * {@link module:engine/view/documentselection~DocumentSelection document selection}.\n   * Document selection copy is stored and can be retrieved by the\n   * {@link module:engine/view/domconverter~DomConverter#fakeSelectionToView} method.\n   */\n  bindFakeSelection(domElement, viewDocumentSelection) {\n    this._fakeSelectionMapping.set(domElement, new Selection(viewDocumentSelection));\n  }\n  /**\n   * Returns a {@link module:engine/view/selection~Selection view selection} instance corresponding to a given\n   * DOM element that represents fake selection. Returns `undefined` if binding to the given DOM element does not exist.\n   */\n  fakeSelectionToView(domElement) {\n    return this._fakeSelectionMapping.get(domElement);\n  }\n  /**\n   * Binds DOM and view elements, so it will be possible to get corresponding elements using\n   * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n   * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n   *\n   * @param domElement The DOM element to bind.\n   * @param viewElement The view element to bind.\n   */\n  bindElements(domElement, viewElement) {\n    this._domToViewMapping.set(domElement, viewElement);\n    this._viewToDomMapping.set(viewElement, domElement);\n  }\n  /**\n   * Unbinds a given DOM element from the view element it was bound to. Unbinding is deep, meaning that all children of\n   * the DOM element will be unbound too.\n   *\n   * @param domElement The DOM element to unbind.\n   */\n  unbindDomElement(domElement) {\n    const viewElement = this._domToViewMapping.get(domElement);\n    if (viewElement) {\n      this._domToViewMapping.delete(domElement);\n      this._viewToDomMapping.delete(viewElement);\n      for (const child of Array.from(domElement.children)) {\n        this.unbindDomElement(child);\n      }\n    }\n  }\n  /**\n   * Binds DOM and view document fragments, so it will be possible to get corresponding document fragments using\n   * {@link module:engine/view/domconverter~DomConverter#mapDomToView} and\n   * {@link module:engine/view/domconverter~DomConverter#mapViewToDom}.\n   *\n   * @param domFragment The DOM document fragment to bind.\n   * @param viewFragment The view document fragment to bind.\n   */\n  bindDocumentFragments(domFragment, viewFragment) {\n    this._domToViewMapping.set(domFragment, viewFragment);\n    this._viewToDomMapping.set(viewFragment, domFragment);\n  }\n  /**\n   * Decides whether a given pair of attribute key and value should be passed further down the pipeline.\n   *\n   * @param elementName Element name in lower case.\n   */\n  shouldRenderAttribute(attributeKey, attributeValue, elementName) {\n    if (this.renderingMode === \"data\") {\n      return true;\n    }\n    attributeKey = attributeKey.toLowerCase();\n    if (attributeKey.startsWith(\"on\")) {\n      return false;\n    }\n    if (attributeKey === \"srcdoc\" && attributeValue.match(/\\bon\\S+\\s*=|javascript:|<\\s*\\/*script/i)) {\n      return false;\n    }\n    if (elementName === \"img\" && (attributeKey === \"src\" || attributeKey === \"srcset\")) {\n      return true;\n    }\n    if (elementName === \"source\" && attributeKey === \"srcset\") {\n      return true;\n    }\n    if (attributeValue.match(/^\\s*(javascript:|data:(image\\/svg|text\\/x?html))/i)) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Set `domElement`'s content using provided `html` argument. Apply necessary filtering for the editing pipeline.\n   *\n   * @param domElement DOM element that should have `html` set as its content.\n   * @param html Textual representation of the HTML that will be set on `domElement`.\n   */\n  setContentOf(domElement, html2) {\n    if (this.renderingMode === \"data\") {\n      domElement.innerHTML = html2;\n      return;\n    }\n    const document2 = new DOMParser().parseFromString(html2, \"text/html\");\n    const fragment = document2.createDocumentFragment();\n    const bodyChildNodes = document2.body.childNodes;\n    while (bodyChildNodes.length > 0) {\n      fragment.appendChild(bodyChildNodes[0]);\n    }\n    const treeWalker = document2.createTreeWalker(fragment, NodeFilter.SHOW_ELEMENT);\n    const nodes = [];\n    let currentNode;\n    while (currentNode = treeWalker.nextNode()) {\n      nodes.push(currentNode);\n    }\n    for (const currentNode2 of nodes) {\n      for (const attributeName of currentNode2.getAttributeNames()) {\n        this.setDomElementAttribute(currentNode2, attributeName, currentNode2.getAttribute(attributeName));\n      }\n      const elementName = currentNode2.tagName.toLowerCase();\n      if (this._shouldRenameElement(elementName)) {\n        _logUnsafeElement(elementName);\n        currentNode2.replaceWith(this._createReplacementDomElement(elementName, currentNode2));\n      }\n    }\n    while (domElement.firstChild) {\n      domElement.firstChild.remove();\n    }\n    domElement.append(fragment);\n  }\n  /**\n   * Converts the view to the DOM. For all text nodes, not bound elements and document fragments new items will\n   * be created. For bound elements and document fragments the method will return corresponding items.\n   *\n   * @param viewNode View node or document fragment to transform.\n   * @param options Conversion options.\n   * @param options.bind Determines whether new elements will be bound.\n   * @param options.withChildren If `false`, node's and document fragment's children will not be converted.\n   * @returns Converted node or DocumentFragment.\n   */\n  viewToDom(viewNode, options = {}) {\n    if (viewNode.is(\"$text\")) {\n      const textData = this._processDataFromViewText(viewNode);\n      return this._domDocument.createTextNode(textData);\n    } else {\n      const viewElementOrFragment = viewNode;\n      if (this.mapViewToDom(viewElementOrFragment)) {\n        if (viewElementOrFragment.getCustomProperty(\"editingPipeline:doNotReuseOnce\")) {\n          this._elementsWithTemporaryCustomProperties.add(viewElementOrFragment);\n        } else {\n          return this.mapViewToDom(viewElementOrFragment);\n        }\n      }\n      let domElement;\n      if (viewElementOrFragment.is(\"documentFragment\")) {\n        domElement = this._domDocument.createDocumentFragment();\n        if (options.bind) {\n          this.bindDocumentFragments(domElement, viewElementOrFragment);\n        }\n      } else if (viewElementOrFragment.is(\"uiElement\")) {\n        if (viewElementOrFragment.name === \"$comment\") {\n          domElement = this._domDocument.createComment(viewElementOrFragment.getCustomProperty(\"$rawContent\"));\n        } else {\n          domElement = viewElementOrFragment.render(this._domDocument, this);\n        }\n        if (options.bind) {\n          this.bindElements(domElement, viewElementOrFragment);\n        }\n        return domElement;\n      } else {\n        if (this._shouldRenameElement(viewElementOrFragment.name)) {\n          _logUnsafeElement(viewElementOrFragment.name);\n          domElement = this._createReplacementDomElement(viewElementOrFragment.name);\n        } else if (viewElementOrFragment.hasAttribute(\"xmlns\")) {\n          domElement = this._domDocument.createElementNS(viewElementOrFragment.getAttribute(\"xmlns\"), viewElementOrFragment.name);\n        } else {\n          domElement = this._domDocument.createElement(viewElementOrFragment.name);\n        }\n        if (viewElementOrFragment.is(\"rawElement\")) {\n          viewElementOrFragment.render(domElement, this);\n        }\n        if (options.bind) {\n          this.bindElements(domElement, viewElementOrFragment);\n        }\n        for (const key of viewElementOrFragment.getAttributeKeys()) {\n          this.setDomElementAttribute(domElement, key, viewElementOrFragment.getAttribute(key), viewElementOrFragment);\n        }\n      }\n      if (options.withChildren !== false) {\n        for (const child of this.viewChildrenToDom(viewElementOrFragment, options)) {\n          domElement.appendChild(child);\n        }\n      }\n      return domElement;\n    }\n  }\n  /**\n   * Sets the attribute on a DOM element.\n   *\n   * **Note**: To remove the attribute, use {@link #removeDomElementAttribute}.\n   *\n   * @param domElement The DOM element the attribute should be set on.\n   * @param key The name of the attribute.\n   * @param value The value of the attribute.\n   * @param relatedViewElement The view element related to the `domElement` (if there is any).\n   * It helps decide whether the attribute set is unsafe. For instance, view elements created via the\n   * {@link module:engine/view/downcastwriter~DowncastWriter} methods can allow certain attributes that would normally be filtered out.\n   */\n  setDomElementAttribute(domElement, key, value, relatedViewElement) {\n    const shouldRenderAttribute = this.shouldRenderAttribute(key, value, domElement.tagName.toLowerCase()) || relatedViewElement && relatedViewElement.shouldRenderUnsafeAttribute(key);\n    if (!shouldRenderAttribute) {\n      logWarning(\"domconverter-unsafe-attribute-detected\", { domElement, key, value });\n    }\n    if (!isValidAttributeName(key)) {\n      logWarning(\"domconverter-invalid-attribute-detected\", { domElement, key, value });\n      return;\n    }\n    if (domElement.hasAttribute(key) && !shouldRenderAttribute) {\n      domElement.removeAttribute(key);\n    } else if (domElement.hasAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key) && shouldRenderAttribute) {\n      domElement.removeAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key);\n    }\n    domElement.setAttribute(shouldRenderAttribute ? key : UNSAFE_ATTRIBUTE_NAME_PREFIX + key, value);\n  }\n  /**\n   * Removes an attribute from a DOM element.\n   *\n   * **Note**: To set the attribute, use {@link #setDomElementAttribute}.\n   *\n   * @param domElement The DOM element the attribute should be removed from.\n   * @param key The name of the attribute.\n   */\n  removeDomElementAttribute(domElement, key) {\n    if (key == UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE) {\n      return;\n    }\n    domElement.removeAttribute(key);\n    domElement.removeAttribute(UNSAFE_ATTRIBUTE_NAME_PREFIX + key);\n  }\n  /**\n   * Converts children of the view element to DOM using the\n   * {@link module:engine/view/domconverter~DomConverter#viewToDom} method.\n   * Additionally, this method adds block {@link module:engine/view/filler filler} to the list of children, if needed.\n   *\n   * @param viewElement Parent view element.\n   * @param options See {@link module:engine/view/domconverter~DomConverter#viewToDom} options parameter.\n   * @returns DOM nodes.\n   */\n  *viewChildrenToDom(viewElement, options = {}) {\n    const fillerPositionOffset = viewElement.getFillerOffset && viewElement.getFillerOffset();\n    let offset = 0;\n    for (const childView of viewElement.getChildren()) {\n      if (fillerPositionOffset === offset) {\n        yield this._getBlockFiller();\n      }\n      const transparentRendering = childView.is(\"element\") && !!childView.getCustomProperty(\"dataPipeline:transparentRendering\") && !first(childView.getAttributes());\n      if (transparentRendering && this.renderingMode == \"data\") {\n        yield* this.viewChildrenToDom(childView, options);\n      } else {\n        if (transparentRendering) {\n          logWarning(\"domconverter-transparent-rendering-unsupported-in-editing-pipeline\", { viewElement: childView });\n        }\n        yield this.viewToDom(childView, options);\n      }\n      offset++;\n    }\n    if (fillerPositionOffset === offset) {\n      yield this._getBlockFiller();\n    }\n  }\n  /**\n   * Converts view {@link module:engine/view/range~Range} to DOM range.\n   * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n   *\n   * @param viewRange View range.\n   * @returns DOM range.\n   */\n  viewRangeToDom(viewRange) {\n    const domStart = this.viewPositionToDom(viewRange.start);\n    const domEnd = this.viewPositionToDom(viewRange.end);\n    const domRange = this._domDocument.createRange();\n    domRange.setStart(domStart.parent, domStart.offset);\n    domRange.setEnd(domEnd.parent, domEnd.offset);\n    return domRange;\n  }\n  /**\n   * Converts view {@link module:engine/view/position~Position} to DOM parent and offset.\n   *\n   * Inline and block {@link module:engine/view/filler fillers} are handled during the conversion.\n   * If the converted position is directly before inline filler it is moved inside the filler.\n   *\n   * @param viewPosition View position.\n   * @returns DOM position or `null` if view position could not be converted to DOM.\n   * DOM position has two properties:\n   * * `parent` - DOM position parent.\n   * * `offset` - DOM position offset.\n   */\n  viewPositionToDom(viewPosition) {\n    const viewParent = viewPosition.parent;\n    if (viewParent.is(\"$text\")) {\n      const domParent = this.findCorrespondingDomText(viewParent);\n      if (!domParent) {\n        return null;\n      }\n      let offset = viewPosition.offset;\n      if (startsWithFiller(domParent)) {\n        offset += INLINE_FILLER_LENGTH;\n      }\n      return { parent: domParent, offset };\n    } else {\n      let domParent, domBefore, domAfter;\n      if (viewPosition.offset === 0) {\n        domParent = this.mapViewToDom(viewParent);\n        if (!domParent) {\n          return null;\n        }\n        domAfter = domParent.childNodes[0];\n      } else {\n        const nodeBefore = viewPosition.nodeBefore;\n        domBefore = nodeBefore.is(\"$text\") ? this.findCorrespondingDomText(nodeBefore) : this.mapViewToDom(nodeBefore);\n        if (!domBefore) {\n          return null;\n        }\n        domParent = domBefore.parentNode;\n        domAfter = domBefore.nextSibling;\n      }\n      if (isText(domAfter) && startsWithFiller(domAfter)) {\n        return { parent: domAfter, offset: INLINE_FILLER_LENGTH };\n      }\n      const offset = domBefore ? indexOf(domBefore) + 1 : 0;\n      return { parent: domParent, offset };\n    }\n  }\n  /**\n   * Converts DOM to view. For all text nodes, not bound elements and document fragments new items will\n   * be created. For bound elements and document fragments function will return corresponding items. For\n   * {@link module:engine/view/filler fillers} `null` will be returned.\n   * For all DOM elements rendered by {@link module:engine/view/uielement~UIElement} that UIElement will be returned.\n   *\n   * @param domNode DOM node or document fragment to transform.\n   * @param options Conversion options.\n   * @param options.bind Determines whether new elements will be bound. False by default.\n   * @param options.withChildren If `true`, node's and document fragment's children will be converted too. True by default.\n   * @param options.keepOriginalCase If `false`, node's tag name will be converted to lower case. False by default.\n   * @param options.skipComments If `false`, comment nodes will be converted to `$comment`\n   * {@link module:engine/view/uielement~UIElement view UI elements}. False by default.\n   * @returns Converted node or document fragment or `null` if DOM node is a {@link module:engine/view/filler filler}\n   * or the given node is an empty text node.\n   */\n  domToView(domNode, options = {}) {\n    const inlineNodes = [];\n    const generator = this._domToView(domNode, options, inlineNodes);\n    const node = generator.next().value;\n    if (!node) {\n      return null;\n    }\n    generator.next();\n    this._processDomInlineNodes(null, inlineNodes, options);\n    if (node.is(\"$text\") && node.data.length == 0) {\n      return null;\n    }\n    return node;\n  }\n  /**\n   * Converts children of the DOM element to view nodes using\n   * the {@link module:engine/view/domconverter~DomConverter#domToView} method.\n   * Additionally this method omits block {@link module:engine/view/filler filler}, if it exists in the DOM parent.\n   *\n   * @param domElement Parent DOM element.\n   * @param options See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n   * @param inlineNodes An array that will be populated with inline nodes. It's used internally for whitespace processing.\n   * @returns View nodes.\n   */\n  *domChildrenToView(domElement, options = {}, inlineNodes = []) {\n    for (let i = 0; i < domElement.childNodes.length; i++) {\n      const domChild = domElement.childNodes[i];\n      const generator = this._domToView(domChild, options, inlineNodes);\n      const viewChild = generator.next().value;\n      if (viewChild !== null) {\n        if (this._isBlockViewElement(viewChild)) {\n          this._processDomInlineNodes(domElement, inlineNodes, options);\n        }\n        yield viewChild;\n        generator.next();\n      }\n    }\n    this._processDomInlineNodes(domElement, inlineNodes, options);\n  }\n  /**\n   * Converts DOM selection to view {@link module:engine/view/selection~Selection}.\n   * Ranges which cannot be converted will be omitted.\n   *\n   * @param domSelection DOM selection.\n   * @returns View selection.\n   */\n  domSelectionToView(domSelection) {\n    if (isGeckoRestrictedDomSelection(domSelection)) {\n      return new Selection([]);\n    }\n    if (domSelection.rangeCount === 1) {\n      let container = domSelection.getRangeAt(0).startContainer;\n      if (isText(container)) {\n        container = container.parentNode;\n      }\n      const viewSelection = this.fakeSelectionToView(container);\n      if (viewSelection) {\n        return viewSelection;\n      }\n    }\n    const isBackward = this.isDomSelectionBackward(domSelection);\n    const viewRanges = [];\n    for (let i = 0; i < domSelection.rangeCount; i++) {\n      const domRange = domSelection.getRangeAt(i);\n      const viewRange = this.domRangeToView(domRange);\n      if (viewRange) {\n        viewRanges.push(viewRange);\n      }\n    }\n    return new Selection(viewRanges, { backward: isBackward });\n  }\n  /**\n   * Converts DOM Range to view {@link module:engine/view/range~Range}.\n   * If the start or end position can not be converted `null` is returned.\n   *\n   * @param domRange DOM range.\n   * @returns View range.\n   */\n  domRangeToView(domRange) {\n    const viewStart = this.domPositionToView(domRange.startContainer, domRange.startOffset);\n    const viewEnd = this.domPositionToView(domRange.endContainer, domRange.endOffset);\n    if (viewStart && viewEnd) {\n      return new Range(viewStart, viewEnd);\n    }\n    return null;\n  }\n  /**\n   * Converts DOM parent and offset to view {@link module:engine/view/position~Position}.\n   *\n   * If the position is inside a {@link module:engine/view/filler filler} which has no corresponding view node,\n   * position of the filler will be converted and returned.\n   *\n   * If the position is inside DOM element rendered by {@link module:engine/view/uielement~UIElement}\n   * that position will be converted to view position before that UIElement.\n   *\n   * If structures are too different and it is not possible to find corresponding position then `null` will be returned.\n   *\n   * @param domParent DOM position parent.\n   * @param domOffset DOM position offset. You can skip it when converting the inline filler node.\n   * @returns View position.\n   */\n  domPositionToView(domParent, domOffset = 0) {\n    if (this.isBlockFiller(domParent)) {\n      return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n    }\n    const viewElement = this.mapDomToView(domParent);\n    if (viewElement && (viewElement.is(\"uiElement\") || viewElement.is(\"rawElement\"))) {\n      return Position._createBefore(viewElement);\n    }\n    if (isText(domParent)) {\n      if (isInlineFiller(domParent)) {\n        return this.domPositionToView(domParent.parentNode, indexOf(domParent));\n      }\n      const viewParent = this.findCorrespondingViewText(domParent);\n      let offset = domOffset;\n      if (!viewParent) {\n        return null;\n      }\n      if (startsWithFiller(domParent)) {\n        offset -= INLINE_FILLER_LENGTH;\n        offset = offset < 0 ? 0 : offset;\n      }\n      return new Position(viewParent, offset);\n    } else {\n      if (domOffset === 0) {\n        const viewParent = this.mapDomToView(domParent);\n        if (viewParent) {\n          return new Position(viewParent, 0);\n        }\n      } else {\n        const domBefore = domParent.childNodes[domOffset - 1];\n        if (isText(domBefore) && isInlineFiller(domBefore) || domBefore && this.isBlockFiller(domBefore)) {\n          return this.domPositionToView(domBefore.parentNode, indexOf(domBefore));\n        }\n        const viewBefore = isText(domBefore) ? this.findCorrespondingViewText(domBefore) : this.mapDomToView(domBefore);\n        if (viewBefore && viewBefore.parent) {\n          return new Position(viewBefore.parent, viewBefore.index + 1);\n        }\n      }\n      return null;\n    }\n  }\n  /**\n   * Returns corresponding view {@link module:engine/view/element~Element Element} or\n   * {@link module:engine/view/documentfragment~DocumentFragment} for provided DOM element or\n   * document fragment. If there is no view item {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n   * to the given DOM - `undefined` is returned.\n   *\n   * For all DOM elements rendered by a {@link module:engine/view/uielement~UIElement} or\n   * a {@link module:engine/view/rawelement~RawElement}, the parent `UIElement` or `RawElement` will be returned.\n   *\n   * @param domElementOrDocumentFragment DOM element or document fragment.\n   * @returns Corresponding view element, document fragment or `undefined` if no element was bound.\n   */\n  mapDomToView(domElementOrDocumentFragment) {\n    const hostElement = this.getHostViewElement(domElementOrDocumentFragment);\n    return hostElement || this._domToViewMapping.get(domElementOrDocumentFragment);\n  }\n  /**\n   * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n   * corresponding text node is returned based on the sibling or parent.\n   *\n   * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n   * to find the corresponding text node.\n   *\n   * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n   * element, it is used to find the corresponding text node.\n   *\n   * For all text nodes rendered by a {@link module:engine/view/uielement~UIElement} or\n   * a {@link module:engine/view/rawelement~RawElement}, the parent `UIElement` or `RawElement` will be returned.\n   *\n   * Otherwise `null` is returned.\n   *\n   * Note that for the block or inline {@link module:engine/view/filler filler} this method returns `null`.\n   *\n   * @param domText DOM text node.\n   * @returns Corresponding view text node or `null`, if it was not possible to find a corresponding node.\n   */\n  findCorrespondingViewText(domText) {\n    if (isInlineFiller(domText)) {\n      return null;\n    }\n    const hostElement = this.getHostViewElement(domText);\n    if (hostElement) {\n      return hostElement;\n    }\n    const previousSibling = domText.previousSibling;\n    if (previousSibling) {\n      if (!this.isElement(previousSibling)) {\n        return null;\n      }\n      const viewElement = this.mapDomToView(previousSibling);\n      if (viewElement) {\n        const nextSibling = viewElement.nextSibling;\n        if (nextSibling instanceof Text) {\n          return nextSibling;\n        } else {\n          return null;\n        }\n      }\n    } else {\n      const viewElement = this.mapDomToView(domText.parentNode);\n      if (viewElement) {\n        const firstChild = viewElement.getChild(0);\n        if (firstChild instanceof Text) {\n          return firstChild;\n        } else {\n          return null;\n        }\n      }\n    }\n    return null;\n  }\n  mapViewToDom(documentFragmentOrElement) {\n    return this._viewToDomMapping.get(documentFragmentOrElement);\n  }\n  /**\n   * Finds corresponding text node. Text nodes are not {@link module:engine/view/domconverter~DomConverter#bindElements bound},\n   * corresponding text node is returned based on the sibling or parent.\n   *\n   * If the directly previous sibling is a {@link module:engine/view/domconverter~DomConverter#bindElements bound} element, it is used\n   * to find the corresponding text node.\n   *\n   * If this is a first child in the parent and the parent is a {@link module:engine/view/domconverter~DomConverter#bindElements bound}\n   * element, it is used to find the corresponding text node.\n   *\n   * Otherwise `null` is returned.\n   *\n   * @param viewText View text node.\n   * @returns Corresponding DOM text node or `null`, if it was not possible to find a corresponding node.\n   */\n  findCorrespondingDomText(viewText) {\n    const previousSibling = viewText.previousSibling;\n    if (previousSibling && this.mapViewToDom(previousSibling)) {\n      return this.mapViewToDom(previousSibling).nextSibling;\n    }\n    if (!previousSibling && viewText.parent && this.mapViewToDom(viewText.parent)) {\n      return this.mapViewToDom(viewText.parent).childNodes[0];\n    }\n    return null;\n  }\n  /**\n   * Focuses DOM editable that is corresponding to provided {@link module:engine/view/editableelement~EditableElement}.\n   */\n  focus(viewEditable) {\n    const domEditable = this.mapViewToDom(viewEditable);\n    if (domEditable && domEditable.ownerDocument.activeElement !== domEditable) {\n      const { scrollX, scrollY } = global_default.window;\n      const scrollPositions = [];\n      forEachDomElementAncestor(domEditable, (node) => {\n        const { scrollLeft, scrollTop } = node;\n        scrollPositions.push([scrollLeft, scrollTop]);\n      });\n      domEditable.focus();\n      forEachDomElementAncestor(domEditable, (node) => {\n        const [scrollLeft, scrollTop] = scrollPositions.shift();\n        node.scrollLeft = scrollLeft;\n        node.scrollTop = scrollTop;\n      });\n      global_default.window.scrollTo(scrollX, scrollY);\n    }\n  }\n  /**\n   * Remove DOM selection from blurred editable, so it won't interfere with clicking on dropdowns (especially on iOS).\n   *\n   * @internal\n   */\n  _clearDomSelection() {\n    const domEditable = this.mapViewToDom(this.document.selection.editableElement);\n    if (!domEditable) {\n      return;\n    }\n    const domSelection = domEditable.ownerDocument.defaultView.getSelection();\n    const newViewSelection = this.domSelectionToView(domSelection);\n    const selectionInEditable = newViewSelection && newViewSelection.rangeCount > 0;\n    if (selectionInEditable) {\n      domSelection.removeAllRanges();\n    }\n  }\n  /**\n   * Returns `true` when `node.nodeType` equals `Node.ELEMENT_NODE`.\n   *\n   * @param node Node to check.\n   */\n  isElement(node) {\n    return node && node.nodeType == Node.ELEMENT_NODE;\n  }\n  /**\n   * Returns `true` when `node.nodeType` equals `Node.DOCUMENT_FRAGMENT_NODE`.\n   *\n   * @param node Node to check.\n   */\n  isDocumentFragment(node) {\n    return node && node.nodeType == Node.DOCUMENT_FRAGMENT_NODE;\n  }\n  /**\n   * Checks if the node is an instance of the block filler for this DOM converter.\n   *\n   * ```ts\n   * const converter = new DomConverter( viewDocument, { blockFillerMode: 'br' } );\n   *\n   * converter.isBlockFiller( BR_FILLER( document ) ); // true\n   * converter.isBlockFiller( NBSP_FILLER( document ) ); // false\n   * ```\n   *\n   * **Note:**: For the `'nbsp'` mode the method also checks context of a node so it cannot be a detached node.\n   *\n   * **Note:** A special case in the `'nbsp'` mode exists where the `<br>` in `<p><br></p>` is treated as a block filler.\n   *\n   * @param domNode DOM node to check.\n   * @returns True if a node is considered a block filler for given mode.\n   */\n  isBlockFiller(domNode) {\n    if (this.blockFillerMode == \"br\") {\n      return domNode.isEqualNode(BR_FILLER_REF);\n    }\n    if (domNode.tagName === \"BR\" && hasBlockParent(domNode, this.blockElements) && domNode.parentNode.childNodes.length === 1) {\n      return true;\n    }\n    return domNode.isEqualNode(MARKED_NBSP_FILLER_REF) || isNbspBlockFiller(domNode, this.blockElements);\n  }\n  /**\n   * Returns `true` if given selection is a backward selection, that is, if it's `focus` is before `anchor`.\n   *\n   * @param DOM Selection instance to check.\n   */\n  isDomSelectionBackward(selection) {\n    if (selection.isCollapsed) {\n      return false;\n    }\n    const range = this._domDocument.createRange();\n    try {\n      range.setStart(selection.anchorNode, selection.anchorOffset);\n      range.setEnd(selection.focusNode, selection.focusOffset);\n    } catch (e) {\n      return false;\n    }\n    const backward = range.collapsed;\n    range.detach();\n    return backward;\n  }\n  /**\n   * Returns a parent {@link module:engine/view/uielement~UIElement} or {@link module:engine/view/rawelement~RawElement}\n   * that hosts the provided DOM node. Returns `null` if there is no such parent.\n   */\n  getHostViewElement(domNode) {\n    const ancestors = getAncestors(domNode);\n    ancestors.pop();\n    while (ancestors.length) {\n      const domNode2 = ancestors.pop();\n      const viewNode = this._domToViewMapping.get(domNode2);\n      if (viewNode && (viewNode.is(\"uiElement\") || viewNode.is(\"rawElement\"))) {\n        return viewNode;\n      }\n    }\n    return null;\n  }\n  /**\n   * Checks if the given selection's boundaries are at correct places.\n   *\n   * The following places are considered as incorrect for selection boundaries:\n   *\n   * * before or in the middle of an inline filler sequence,\n   * * inside a DOM element which represents {@link module:engine/view/uielement~UIElement a view UI element},\n   * * inside a DOM element which represents {@link module:engine/view/rawelement~RawElement a view raw element}.\n   *\n   * @param domSelection The DOM selection object to be checked.\n   * @returns `true` if the given selection is at a correct place, `false` otherwise.\n   */\n  isDomSelectionCorrect(domSelection) {\n    return this._isDomSelectionPositionCorrect(domSelection.anchorNode, domSelection.anchorOffset) && this._isDomSelectionPositionCorrect(domSelection.focusNode, domSelection.focusOffset);\n  }\n  /**\n   * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data\n   * and not processed during the conversion from DOM nodes to view elements.\n   *\n   * This is affecting how {@link module:engine/view/domconverter~DomConverter#domToView} and\n   * {@link module:engine/view/domconverter~DomConverter#domChildrenToView} process DOM nodes.\n   *\n   * The raw data can be later accessed by a\n   * {@link module:engine/view/element~Element#getCustomProperty custom property of a view element} called `\"$rawContent\"`.\n   *\n   * @param pattern Pattern matching a view element whose content should\n   * be treated as raw data.\n   */\n  registerRawContentMatcher(pattern) {\n    this._rawContentElementMatcher.add(pattern);\n  }\n  /**\n   * Registers a {@link module:engine/view/matcher~MatcherPattern} for inline object view elements.\n   *\n   * This is affecting how {@link module:engine/view/domconverter~DomConverter#domToView} and\n   * {@link module:engine/view/domconverter~DomConverter#domChildrenToView} process DOM nodes.\n   *\n   * This is an extension of a simple {@link #inlineObjectElements} array of element names.\n   *\n   * @param pattern Pattern matching a view element which should be treated as an inline object.\n   */\n  registerInlineObjectMatcher(pattern) {\n    this._inlineObjectElementMatcher.add(pattern);\n  }\n  /**\n   * Clear temporary custom properties.\n   *\n   * @internal\n   */\n  _clearTemporaryCustomProperties() {\n    for (const element of this._elementsWithTemporaryCustomProperties) {\n      element._removeCustomProperty(\"editingPipeline:doNotReuseOnce\");\n    }\n    this._elementsWithTemporaryCustomProperties.clear();\n  }\n  /**\n   * Returns the block {@link module:engine/view/filler filler} node based on the current {@link #blockFillerMode} setting.\n   */\n  _getBlockFiller() {\n    switch (this.blockFillerMode) {\n      case \"nbsp\":\n        return NBSP_FILLER(this._domDocument);\n      case \"markedNbsp\":\n        return MARKED_NBSP_FILLER(this._domDocument);\n      case \"br\":\n        return BR_FILLER(this._domDocument);\n    }\n  }\n  /**\n   * Checks if the given DOM position is a correct place for selection boundary. See {@link #isDomSelectionCorrect}.\n   *\n   * @param domParent Position parent.\n   * @param offset Position offset.\n   * @returns `true` if given position is at a correct place for selection boundary, `false` otherwise.\n   */\n  _isDomSelectionPositionCorrect(domParent, offset) {\n    if (isText(domParent) && startsWithFiller(domParent) && offset < INLINE_FILLER_LENGTH) {\n      return false;\n    }\n    if (this.isElement(domParent) && startsWithFiller(domParent.childNodes[offset])) {\n      return false;\n    }\n    const viewParent = this.mapDomToView(domParent);\n    if (viewParent && (viewParent.is(\"uiElement\") || viewParent.is(\"rawElement\"))) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * Internal generator for {@link #domToView}. Also used by {@link #domChildrenToView}.\n   * Separates DOM nodes conversion from whitespaces processing.\n   *\n   * @param domNode DOM node or document fragment to transform.\n   * @param inlineNodes An array of recently encountered inline nodes truncated to the block element boundaries.\n   * Used later to process whitespaces.\n   */\n  *_domToView(domNode, options, inlineNodes) {\n    if (this.isBlockFiller(domNode)) {\n      return null;\n    }\n    const hostElement = this.getHostViewElement(domNode);\n    if (hostElement) {\n      return hostElement;\n    }\n    if (isComment(domNode) && options.skipComments) {\n      return null;\n    }\n    if (isText(domNode)) {\n      if (isInlineFiller(domNode)) {\n        return null;\n      } else {\n        const textData = domNode.data;\n        if (textData === \"\") {\n          return null;\n        }\n        const textNode = new Text(this.document, textData);\n        inlineNodes.push(textNode);\n        return textNode;\n      }\n    } else {\n      let viewElement = this.mapDomToView(domNode);\n      if (viewElement) {\n        if (this._isInlineObjectElement(viewElement)) {\n          inlineNodes.push(viewElement);\n        }\n        return viewElement;\n      }\n      if (this.isDocumentFragment(domNode)) {\n        viewElement = new DocumentFragment(this.document);\n        if (options.bind) {\n          this.bindDocumentFragments(domNode, viewElement);\n        }\n      } else {\n        viewElement = this._createViewElement(domNode, options);\n        if (options.bind) {\n          this.bindElements(domNode, viewElement);\n        }\n        const attrs = domNode.attributes;\n        if (attrs) {\n          for (let l = attrs.length, i = 0; i < l; i++) {\n            viewElement._setAttribute(attrs[i].name, attrs[i].value);\n          }\n        }\n        if (this._isViewElementWithRawContent(viewElement, options)) {\n          viewElement._setCustomProperty(\"$rawContent\", domNode.innerHTML);\n          if (!this._isBlockViewElement(viewElement)) {\n            inlineNodes.push(viewElement);\n          }\n          return viewElement;\n        }\n        if (isComment(domNode)) {\n          viewElement._setCustomProperty(\"$rawContent\", domNode.data);\n          return viewElement;\n        }\n      }\n      yield viewElement;\n      const nestedInlineNodes = [];\n      if (options.withChildren !== false) {\n        for (const child of this.domChildrenToView(domNode, options, nestedInlineNodes)) {\n          viewElement._appendChild(child);\n        }\n      }\n      if (this._isInlineObjectElement(viewElement)) {\n        inlineNodes.push(viewElement);\n      } else {\n        for (const inlineNode of nestedInlineNodes) {\n          inlineNodes.push(inlineNode);\n        }\n      }\n    }\n  }\n  /**\n   * Internal helper that walks the list of inline view nodes already generated from DOM nodes\n   * and handles whitespaces and NBSPs.\n   *\n   * @param domParent The DOM parent of the given inline nodes. This should be a document fragment or\n   * a block element to whitespace processing start cleaning.\n   * @param inlineNodes An array of recently encountered inline nodes truncated to the block element boundaries.\n   */\n  _processDomInlineNodes(domParent, inlineNodes, options) {\n    if (!inlineNodes.length) {\n      return;\n    }\n    if (domParent && !this.isDocumentFragment(domParent) && !this._isBlockDomElement(domParent)) {\n      return;\n    }\n    let prevNodeEndsWithSpace = false;\n    for (let i = 0; i < inlineNodes.length; i++) {\n      const node = inlineNodes[i];\n      if (!node.is(\"$text\")) {\n        prevNodeEndsWithSpace = false;\n        continue;\n      }\n      let data;\n      let nodeEndsWithSpace = false;\n      if (_hasViewParentOfType(node, this.preElements)) {\n        data = getDataWithoutFiller(node.data);\n      } else {\n        data = node.data.replace(/[ \\n\\t\\r]{1,}/g, \" \");\n        nodeEndsWithSpace = /[^\\S\\u00A0]/.test(data.charAt(data.length - 1));\n        const prevNode = i > 0 ? inlineNodes[i - 1] : null;\n        const nextNode = i + 1 < inlineNodes.length ? inlineNodes[i + 1] : null;\n        const shouldLeftTrim = !prevNode || prevNode.is(\"element\") && prevNode.name == \"br\" || prevNodeEndsWithSpace;\n        const shouldRightTrim = nextNode ? false : !startsWithFiller(node.data);\n        if (options.withChildren !== false) {\n          if (shouldLeftTrim) {\n            data = data.replace(/^ /, \"\");\n          }\n          if (shouldRightTrim) {\n            data = data.replace(/ $/, \"\");\n          }\n        }\n        data = getDataWithoutFiller(data);\n        data = data.replace(/ \\u00A0/g, \"  \");\n        const isNextNodeInlineObjectElement = nextNode && nextNode.is(\"element\") && nextNode.name != \"br\";\n        const isNextNodeStartingWithSpace = nextNode && nextNode.is(\"$text\") && nextNode.data.charAt(0) == \" \";\n        if (/[ \\u00A0]\\u00A0$/.test(data) || !nextNode || isNextNodeInlineObjectElement || isNextNodeStartingWithSpace) {\n          data = data.replace(/\\u00A0$/, \" \");\n        }\n        if (shouldLeftTrim || prevNode && prevNode.is(\"element\") && prevNode.name != \"br\") {\n          data = data.replace(/^\\u00A0/, \" \");\n        }\n      }\n      if (data.length == 0 && node.parent) {\n        node._remove();\n        inlineNodes.splice(i, 1);\n        i--;\n      } else {\n        node._data = data;\n        prevNodeEndsWithSpace = nodeEndsWithSpace;\n      }\n    }\n    inlineNodes.length = 0;\n  }\n  /**\n   * Takes text data from a given {@link module:engine/view/text~Text#data} and processes it so\n   * it is correctly displayed in the DOM.\n   *\n   * Following changes are done:\n   *\n   * * a space at the beginning is changed to `&nbsp;` if this is the first text node in its container\n   * element or if a previous text node ends with a space character,\n   * * space at the end of the text node is changed to `&nbsp;` if there are two spaces at the end of a node or if next node\n   * starts with a space or if it is the last text node in its container,\n   * * remaining spaces are replaced to a chain of spaces and `&nbsp;` (e.g. `'x   x'` becomes `'x &nbsp; x'`).\n   *\n   * Content of {@link #preElements} is not processed.\n   *\n   * @param node View text node to process.\n   * @returns Processed text data.\n   */\n  _processDataFromViewText(node) {\n    let data = node.data;\n    if (node.getAncestors().some((parent2) => this.preElements.includes(parent2.name))) {\n      return data;\n    }\n    if (data.charAt(0) == \" \") {\n      const prevNode = this._getTouchingInlineViewNode(node, false);\n      const prevEndsWithSpace = prevNode && prevNode.is(\"$textProxy\") && this._nodeEndsWithSpace(prevNode);\n      if (prevEndsWithSpace || !prevNode) {\n        data = \" \" + data.substr(1);\n      }\n    }\n    if (data.charAt(data.length - 1) == \" \") {\n      const nextNode = this._getTouchingInlineViewNode(node, true);\n      const nextStartsWithSpace = nextNode && nextNode.is(\"$textProxy\") && nextNode.data.charAt(0) == \" \";\n      if (data.charAt(data.length - 2) == \" \" || !nextNode || nextStartsWithSpace) {\n        data = data.substr(0, data.length - 1) + \" \";\n      }\n    }\n    return data.replace(/ {2}/g, \"  \");\n  }\n  /**\n   * Checks whether given node ends with a space character after changing appropriate space characters to `&nbsp;`s.\n   *\n   * @param  node Node to check.\n   * @returns `true` if given `node` ends with space, `false` otherwise.\n   */\n  _nodeEndsWithSpace(node) {\n    if (node.getAncestors().some((parent2) => this.preElements.includes(parent2.name))) {\n      return false;\n    }\n    const data = this._processDataFromViewText(node);\n    return data.charAt(data.length - 1) == \" \";\n  }\n  /**\n   * Helper function. For given {@link module:engine/view/text~Text view text node}, it finds previous or next sibling\n   * that is contained in the same container element. If there is no such sibling, `null` is returned.\n   *\n   * @param node Reference node.\n   * @returns Touching text node, an inline object\n   * or `null` if there is no next or previous touching text node.\n   */\n  _getTouchingInlineViewNode(node, getNext) {\n    const treeWalker = new TreeWalker({\n      startPosition: getNext ? Position._createAfter(node) : Position._createBefore(node),\n      direction: getNext ? \"forward\" : \"backward\"\n    });\n    for (const value of treeWalker) {\n      if (value.item.is(\"element\", \"br\")) {\n        return null;\n      } else if (this._isInlineObjectElement(value.item)) {\n        return value.item;\n      } else if (value.item.is(\"containerElement\")) {\n        return null;\n      } else if (value.item.is(\"$textProxy\")) {\n        return value.item;\n      }\n    }\n    return null;\n  }\n  /**\n   * Returns `true` if a DOM node belongs to {@link #blockElements}. `false` otherwise.\n   */\n  _isBlockDomElement(node) {\n    return this.isElement(node) && this.blockElements.includes(node.tagName.toLowerCase());\n  }\n  /**\n   * Returns `true` if a view node belongs to {@link #blockElements}. `false` otherwise.\n   */\n  _isBlockViewElement(node) {\n    return node.is(\"element\") && this.blockElements.includes(node.name);\n  }\n  /**\n   * Returns `true` if a DOM node belongs to {@link #inlineObjectElements}. `false` otherwise.\n   */\n  _isInlineObjectElement(node) {\n    if (!node.is(\"element\")) {\n      return false;\n    }\n    return node.name == \"br\" || this.inlineObjectElements.includes(node.name) || !!this._inlineObjectElementMatcher.match(node);\n  }\n  /**\n   * Creates view element basing on the node type.\n   *\n   * @param node DOM node to check.\n   * @param options Conversion options. See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n   */\n  _createViewElement(node, options) {\n    if (isComment(node)) {\n      return new UIElement(this.document, \"$comment\");\n    }\n    const viewName = options.keepOriginalCase ? node.tagName : node.tagName.toLowerCase();\n    return new Element(this.document, viewName);\n  }\n  /**\n   * Checks if view element's content should be treated as a raw data.\n   *\n   * @param viewElement View element to check.\n   * @param options Conversion options. See {@link module:engine/view/domconverter~DomConverter#domToView} options parameter.\n   */\n  _isViewElementWithRawContent(viewElement, options) {\n    return options.withChildren !== false && viewElement.is(\"element\") && !!this._rawContentElementMatcher.match(viewElement);\n  }\n  /**\n   * Checks whether a given element name should be renamed in a current rendering mode.\n   *\n   * @param elementName The name of view element.\n   */\n  _shouldRenameElement(elementName) {\n    const name = elementName.toLowerCase();\n    return this.renderingMode === \"editing\" && this.unsafeElements.includes(name);\n  }\n  /**\n   * Return a <span> element with a special attribute holding the name of the original element.\n   * Optionally, copy all the attributes of the original element if that element is provided.\n   *\n   * @param elementName The name of view element.\n   * @param originalDomElement The original DOM element to copy attributes and content from.\n   */\n  _createReplacementDomElement(elementName, originalDomElement) {\n    const newDomElement = this._domDocument.createElement(\"span\");\n    newDomElement.setAttribute(UNSAFE_ELEMENT_REPLACEMENT_ATTRIBUTE, elementName);\n    if (originalDomElement) {\n      while (originalDomElement.firstChild) {\n        newDomElement.appendChild(originalDomElement.firstChild);\n      }\n      for (const attributeName of originalDomElement.getAttributeNames()) {\n        newDomElement.setAttribute(attributeName, originalDomElement.getAttribute(attributeName));\n      }\n    }\n    return newDomElement;\n  }\n};\nfunction _hasViewParentOfType(node, types) {\n  return node.getAncestors().some((parent2) => parent2.is(\"element\") && types.includes(parent2.name));\n}\nfunction forEachDomElementAncestor(element, callback) {\n  let node = element;\n  while (node) {\n    callback(node);\n    node = node.parentElement;\n  }\n}\nfunction isNbspBlockFiller(domNode, blockElements) {\n  const isNBSP = domNode.isEqualNode(NBSP_FILLER_REF);\n  return isNBSP && hasBlockParent(domNode, blockElements) && domNode.parentNode.childNodes.length === 1;\n}\nfunction hasBlockParent(domNode, blockElements) {\n  const parent2 = domNode.parentNode;\n  return !!parent2 && !!parent2.tagName && blockElements.includes(parent2.tagName.toLowerCase());\n}\nfunction _logUnsafeElement(elementName) {\n  if (elementName === \"script\") {\n    logWarning(\"domconverter-unsafe-script-element-detected\");\n  }\n  if (elementName === \"style\") {\n    logWarning(\"domconverter-unsafe-style-element-detected\");\n  }\n}\nfunction isGeckoRestrictedDomSelection(domSelection) {\n  if (!env_default.isGecko) {\n    return false;\n  }\n  if (!domSelection.rangeCount) {\n    return false;\n  }\n  const container = domSelection.getRangeAt(0).startContainer;\n  try {\n    Object.prototype.toString.call(container);\n  } catch (error) {\n    return true;\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/observer.js\nvar Observer = class extends DomEmitterMixin() {\n  /**\n   * Creates an instance of the observer.\n   */\n  constructor(view) {\n    super();\n    this._isEnabled = false;\n    this.view = view;\n    this.document = view.document;\n  }\n  /**\n   * The state of the observer. If it is disabled, no events will be fired.\n   */\n  get isEnabled() {\n    return this._isEnabled;\n  }\n  /**\n   * Enables the observer. This method is called when the observer is registered to the\n   * {@link module:engine/view/view~View} and after {@link module:engine/view/view~View#forceRender rendering}\n   * (all observers are {@link #disable disabled} before rendering).\n   *\n   * A typical use case for disabling observers is that mutation observers need to be disabled for the rendering.\n   * However, a child class may not need to be disabled, so it can implement an empty method.\n   *\n   * @see module:engine/view/observer/observer~Observer#disable\n   */\n  enable() {\n    this._isEnabled = true;\n  }\n  /**\n   * Disables the observer. This method is called before\n   * {@link module:engine/view/view~View#forceRender rendering} to prevent firing events during rendering.\n   *\n   * @see module:engine/view/observer/observer~Observer#enable\n   */\n  disable() {\n    this._isEnabled = false;\n  }\n  /**\n   * Disables and destroys the observer, among others removes event listeners created by the observer.\n   */\n  destroy() {\n    this.disable();\n    this.stopListening();\n  }\n  /**\n   * Checks whether a given DOM event should be ignored (should not be turned into a synthetic view document event).\n   *\n   * Currently, an event will be ignored only if its target or any of its ancestors has the `data-cke-ignore-events` attribute.\n   * This attribute can be used inside the structures generated by\n   * {@link module:engine/view/downcastwriter~DowncastWriter#createUIElement `DowncastWriter#createUIElement()`} to ignore events\n   * fired within a UI that should be excluded from CKEditor 5's realms.\n   *\n   * @param domTarget The DOM event target to check (usually an element, sometimes a text node and\n   * potentially sometimes a document, too).\n   * @returns Whether this event should be ignored by the observer.\n   */\n  checkShouldIgnoreEventFromTarget(domTarget) {\n    if (domTarget && domTarget.nodeType === 3) {\n      domTarget = domTarget.parentNode;\n    }\n    if (!domTarget || domTarget.nodeType !== 1) {\n      return false;\n    }\n    return domTarget.matches(\"[data-cke-ignore-events], [data-cke-ignore-events] *\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventdata.js\nvar DomEventData = class {\n  /**\n   * @param view The instance of the view controller.\n   * @param domEvent The DOM event.\n   * @param additionalData Additional properties that the instance should contain.\n   */\n  constructor(view, domEvent, additionalData) {\n    this.view = view;\n    this.document = view.document;\n    this.domEvent = domEvent;\n    this.domTarget = domEvent.target;\n    assignIn_default(this, additionalData);\n  }\n  /**\n   * The tree view element representing the target.\n   */\n  get target() {\n    return this.view.domConverter.mapDomToView(this.domTarget);\n  }\n  /**\n   * Prevents the native's event default action.\n   */\n  preventDefault() {\n    this.domEvent.preventDefault();\n  }\n  /**\n   * Stops native event propagation.\n   */\n  stopPropagation() {\n    this.domEvent.stopPropagation();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/domeventobserver.js\nvar DomEventObserver = class extends Observer {\n  constructor() {\n    super(...arguments);\n    this.useCapture = false;\n  }\n  /**\n   * @inheritDoc\n   */\n  observe(domElement) {\n    const types = typeof this.domEventType == \"string\" ? [this.domEventType] : this.domEventType;\n    types.forEach((type) => {\n      this.listenTo(domElement, type, (eventInfo, domEvent) => {\n        if (this.isEnabled && !this.checkShouldIgnoreEventFromTarget(domEvent.target)) {\n          this.onDomEvent(domEvent);\n        }\n      }, { useCapture: this.useCapture });\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving(domElement) {\n    this.stopListening(domElement);\n  }\n  /**\n   * Calls `Document#fire()` if observer {@link #isEnabled is enabled}.\n   *\n   * @see module:utils/emittermixin~Emitter#fire\n   * @param eventType The event type (name).\n   * @param domEvent The DOM event.\n   * @param additionalData The additional data which should extend the\n   * {@link module:engine/view/observer/domeventdata~DomEventData event data} object.\n   */\n  fire(eventType, domEvent, additionalData) {\n    if (this.isEnabled) {\n      this.document.fire(eventType, new DomEventData(this.view, domEvent, additionalData));\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/keyobserver.js\nvar KeyObserver = class extends DomEventObserver {\n  constructor() {\n    super(...arguments);\n    this.domEventType = [\"keydown\", \"keyup\"];\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvt) {\n    const data = {\n      keyCode: domEvt.keyCode,\n      altKey: domEvt.altKey,\n      ctrlKey: domEvt.ctrlKey,\n      shiftKey: domEvt.shiftKey,\n      metaKey: domEvt.metaKey,\n      get keystroke() {\n        return getCode(this);\n      }\n    };\n    this.fire(domEvt.type, domEvt, data);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/fakeselectionobserver.js\nvar FakeSelectionObserver = class extends Observer {\n  /**\n   * Creates new FakeSelectionObserver instance.\n   */\n  constructor(view) {\n    super(view);\n    this._fireSelectionChangeDoneDebounced = debounce_default((data) => {\n      this.document.fire(\"selectionChangeDone\", data);\n    }, 200);\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n    const document2 = this.document;\n    document2.on(\"arrowKey\", (eventInfo, data) => {\n      const selection = document2.selection;\n      if (selection.isFake && this.isEnabled) {\n        data.preventDefault();\n      }\n    }, { context: \"$capture\" });\n    document2.on(\"arrowKey\", (eventInfo, data) => {\n      const selection = document2.selection;\n      if (selection.isFake && this.isEnabled) {\n        this._handleSelectionMove(data.keyCode);\n      }\n    }, { priority: \"lowest\" });\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this._fireSelectionChangeDoneDebounced.cancel();\n  }\n  /**\n   * Handles collapsing view selection according to given key code. If left or up key is provided - new selection will be\n   * collapsed to left. If right or down key is pressed - new selection will be collapsed to right.\n   *\n   * This method fires {@link module:engine/view/document~Document#event:selectionChange} and\n   * {@link module:engine/view/document~Document#event:selectionChangeDone} events imitating behaviour of\n   * {@link module:engine/view/observer/selectionobserver~SelectionObserver}.\n   */\n  _handleSelectionMove(keyCode) {\n    const selection = this.document.selection;\n    const newSelection = new Selection(selection.getRanges(), { backward: selection.isBackward, fake: false });\n    if (keyCode == keyCodes.arrowleft || keyCode == keyCodes.arrowup) {\n      newSelection.setTo(newSelection.getFirstPosition());\n    }\n    if (keyCode == keyCodes.arrowright || keyCode == keyCodes.arrowdown) {\n      newSelection.setTo(newSelection.getLastPosition());\n    }\n    const data = {\n      oldSelection: selection,\n      newSelection,\n      domSelection: null\n    };\n    this.document.fire(\"selectionChange\", data);\n    this._fireSelectionChangeDoneDebounced(data);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mutationobserver.js\nvar MutationObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    this._config = {\n      childList: true,\n      characterData: true,\n      subtree: true\n    };\n    this.domConverter = view.domConverter;\n    this.renderer = view._renderer;\n    this._domElements = /* @__PURE__ */ new Set();\n    this._mutationObserver = new window.MutationObserver(this._onMutations.bind(this));\n  }\n  /**\n   * Synchronously handles mutations and empties the queue.\n   */\n  flush() {\n    this._onMutations(this._mutationObserver.takeRecords());\n  }\n  /**\n   * @inheritDoc\n   */\n  observe(domElement) {\n    this._domElements.add(domElement);\n    if (this.isEnabled) {\n      this._mutationObserver.observe(domElement, this._config);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving(domElement) {\n    this._domElements.delete(domElement);\n    if (this.isEnabled) {\n      this._mutationObserver.disconnect();\n      for (const domElement2 of this._domElements) {\n        this._mutationObserver.observe(domElement2, this._config);\n      }\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  enable() {\n    super.enable();\n    for (const domElement of this._domElements) {\n      this._mutationObserver.observe(domElement, this._config);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  disable() {\n    super.disable();\n    this._mutationObserver.disconnect();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this._mutationObserver.disconnect();\n  }\n  /**\n   * Handles mutations. Mark view elements to sync and call render.\n   *\n   * @param domMutations Array of native mutations.\n   */\n  _onMutations(domMutations) {\n    if (domMutations.length === 0) {\n      return;\n    }\n    const domConverter = this.domConverter;\n    const mutatedTextNodes = /* @__PURE__ */ new Set();\n    const elementsWithMutatedChildren = /* @__PURE__ */ new Set();\n    for (const mutation of domMutations) {\n      const element = domConverter.mapDomToView(mutation.target);\n      if (!element) {\n        continue;\n      }\n      if (element.is(\"uiElement\") || element.is(\"rawElement\")) {\n        continue;\n      }\n      if (mutation.type === \"childList\" && !this._isBogusBrMutation(mutation)) {\n        elementsWithMutatedChildren.add(element);\n      }\n    }\n    for (const mutation of domMutations) {\n      const element = domConverter.mapDomToView(mutation.target);\n      if (element && (element.is(\"uiElement\") || element.is(\"rawElement\"))) {\n        continue;\n      }\n      if (mutation.type === \"characterData\") {\n        const text2 = domConverter.findCorrespondingViewText(mutation.target);\n        if (text2 && !elementsWithMutatedChildren.has(text2.parent)) {\n          mutatedTextNodes.add(text2);\n        } else if (!text2 && startsWithFiller(mutation.target)) {\n          elementsWithMutatedChildren.add(domConverter.mapDomToView(mutation.target.parentNode));\n        }\n      }\n    }\n    let hasMutations = false;\n    for (const textNode of mutatedTextNodes) {\n      hasMutations = true;\n      this.renderer.markToSync(\"text\", textNode);\n    }\n    for (const viewElement of elementsWithMutatedChildren) {\n      const domElement = domConverter.mapViewToDom(viewElement);\n      const viewChildren = Array.from(viewElement.getChildren());\n      const newViewChildren = Array.from(domConverter.domChildrenToView(domElement, { withChildren: false }));\n      if (!isEqualWith_default(viewChildren, newViewChildren, sameNodes2)) {\n        hasMutations = true;\n        this.renderer.markToSync(\"children\", viewElement);\n      }\n    }\n    if (hasMutations) {\n      this.view.forceRender();\n    }\n  }\n  /**\n   * Checks if mutation was generated by the browser inserting bogus br on the end of the block element.\n   * Such mutations are generated while pressing space or performing native spellchecker correction\n   * on the end of the block element in Firefox browser.\n   *\n   * @param mutation Native mutation object.\n   */\n  _isBogusBrMutation(mutation) {\n    let addedNode = null;\n    if (mutation.nextSibling === null && mutation.removedNodes.length === 0 && mutation.addedNodes.length == 1) {\n      addedNode = this.domConverter.domToView(mutation.addedNodes[0], {\n        withChildren: false\n      });\n    }\n    return addedNode && addedNode.is(\"element\", \"br\");\n  }\n};\nfunction sameNodes2(child1, child2) {\n  if (Array.isArray(child1)) {\n    return;\n  }\n  if (child1 === child2) {\n    return true;\n  } else if (child1.is(\"$text\") && child2.is(\"$text\")) {\n    return child1.data === child2.data;\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/focusobserver.js\nvar FocusObserver = class extends DomEventObserver {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    this._isFocusChanging = false;\n    this.domEventType = [\"focus\", \"blur\"];\n    this.useCapture = true;\n    const document2 = this.document;\n    document2.on(\"focus\", () => {\n      this._isFocusChanging = true;\n      this._renderTimeoutId = setTimeout(() => {\n        this.flush();\n        view.change(() => {\n        });\n      }, 50);\n    });\n    document2.on(\"blur\", (evt, data) => {\n      const selectedEditable = document2.selection.editableElement;\n      if (selectedEditable === null || selectedEditable === data.target) {\n        document2.isFocused = false;\n        this._isFocusChanging = false;\n        view.change(() => {\n        });\n      }\n    });\n  }\n  /**\n   * Finishes setting the document focus state.\n   */\n  flush() {\n    if (this._isFocusChanging) {\n      this._isFocusChanging = false;\n      this.document.isFocused = true;\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvent) {\n    this.fire(domEvent.type, domEvent);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    if (this._renderTimeoutId) {\n      clearTimeout(this._renderTimeoutId);\n    }\n    super.destroy();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/selectionobserver.js\nvar SelectionObserver = class extends Observer {\n  constructor(view) {\n    super(view);\n    this.mutationObserver = view.getObserver(MutationObserver);\n    this.focusObserver = view.getObserver(FocusObserver);\n    this.selection = this.document.selection;\n    this.domConverter = view.domConverter;\n    this._documents = /* @__PURE__ */ new WeakSet();\n    this._fireSelectionChangeDoneDebounced = debounce_default((data) => {\n      this.document.fire(\"selectionChangeDone\", data);\n    }, 200);\n    this._clearInfiniteLoopInterval = setInterval(() => this._clearInfiniteLoop(), 1e3);\n    this._documentIsSelectingInactivityTimeoutDebounced = debounce_default(() => this.document.isSelecting = false, 5e3);\n    this._loopbackCounter = 0;\n  }\n  /**\n   * @inheritDoc\n   */\n  observe(domElement) {\n    const domDocument = domElement.ownerDocument;\n    const startDocumentIsSelecting = () => {\n      this.document.isSelecting = true;\n      this._documentIsSelectingInactivityTimeoutDebounced();\n    };\n    const endDocumentIsSelecting = () => {\n      if (!this.document.isSelecting) {\n        return;\n      }\n      this._handleSelectionChange(null, domDocument);\n      this.document.isSelecting = false;\n      this._documentIsSelectingInactivityTimeoutDebounced.cancel();\n    };\n    this.listenTo(domElement, \"selectstart\", startDocumentIsSelecting, { priority: \"highest\" });\n    this.listenTo(domElement, \"keydown\", endDocumentIsSelecting, { priority: \"highest\", useCapture: true });\n    this.listenTo(domElement, \"keyup\", endDocumentIsSelecting, { priority: \"highest\", useCapture: true });\n    if (this._documents.has(domDocument)) {\n      return;\n    }\n    this.listenTo(domDocument, \"mouseup\", endDocumentIsSelecting, { priority: \"highest\", useCapture: true });\n    this.listenTo(domDocument, \"selectionchange\", (evt, domEvent) => {\n      if (this.document.isComposing && !env_default.isAndroid) {\n        return;\n      }\n      this._handleSelectionChange(domEvent, domDocument);\n      this._documentIsSelectingInactivityTimeoutDebounced();\n    });\n    this._documents.add(domDocument);\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving(domElement) {\n    this.stopListening(domElement);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    clearInterval(this._clearInfiniteLoopInterval);\n    this._fireSelectionChangeDoneDebounced.cancel();\n    this._documentIsSelectingInactivityTimeoutDebounced.cancel();\n  }\n  /* istanbul ignore next -- @preserve */\n  _reportInfiniteLoop() {\n  }\n  /**\n   * Selection change listener. {@link module:engine/view/observer/mutationobserver~MutationObserver#flush Flush} mutations, check if\n   * a selection changes and fires {@link module:engine/view/document~Document#event:selectionChange} event on every change\n   * and {@link module:engine/view/document~Document#event:selectionChangeDone} when a selection stop changing.\n   *\n   * @param domEvent DOM event.\n   * @param domDocument DOM document.\n   */\n  _handleSelectionChange(domEvent, domDocument) {\n    if (!this.isEnabled) {\n      return;\n    }\n    const domSelection = domDocument.defaultView.getSelection();\n    if (this.checkShouldIgnoreEventFromTarget(domSelection.anchorNode)) {\n      return;\n    }\n    this.mutationObserver.flush();\n    const newViewSelection = this.domConverter.domSelectionToView(domSelection);\n    if (newViewSelection.rangeCount == 0) {\n      this.view.hasDomSelection = false;\n      return;\n    }\n    this.view.hasDomSelection = true;\n    this.focusObserver.flush();\n    if (this.selection.isEqual(newViewSelection) && this.domConverter.isDomSelectionCorrect(domSelection)) {\n      return;\n    }\n    if (++this._loopbackCounter > 60) {\n      this._reportInfiniteLoop();\n      return;\n    }\n    if (this.selection.isSimilar(newViewSelection)) {\n      this.view.forceRender();\n    } else {\n      const data = {\n        oldSelection: this.selection,\n        newSelection: newViewSelection,\n        domSelection\n      };\n      this.document.fire(\"selectionChange\", data);\n      this._fireSelectionChangeDoneDebounced(data);\n    }\n  }\n  /**\n   * Clears `SelectionObserver` internal properties connected with preventing infinite loop.\n   */\n  _clearInfiniteLoop() {\n    this._loopbackCounter = 0;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/compositionobserver.js\nvar CompositionObserver = class extends DomEventObserver {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    this.domEventType = [\"compositionstart\", \"compositionupdate\", \"compositionend\"];\n    const document2 = this.document;\n    document2.on(\"compositionstart\", () => {\n      document2.isComposing = true;\n    }, { priority: \"low\" });\n    document2.on(\"compositionend\", () => {\n      document2.isComposing = false;\n    }, { priority: \"low\" });\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvent) {\n    this.fire(domEvent.type, domEvent, {\n      data: domEvent.data\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/datatransfer.js\nvar DataTransfer = class {\n  /**\n   * @param nativeDataTransfer The native [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object.\n   * @param options.cacheFiles Whether `files` list should be initialized in the constructor.\n   */\n  constructor(nativeDataTransfer, options = {}) {\n    this._files = options.cacheFiles ? getFiles(nativeDataTransfer) : null;\n    this._native = nativeDataTransfer;\n  }\n  /**\n   * The array of files created from the native `DataTransfer#files` or `DataTransfer#items`.\n   */\n  get files() {\n    if (!this._files) {\n      this._files = getFiles(this._native);\n    }\n    return this._files;\n  }\n  /**\n   * Returns an array of available native content types.\n   */\n  get types() {\n    return this._native.types;\n  }\n  /**\n   * Gets the data from the data transfer by its MIME type.\n   *\n   * ```ts\n   * dataTransfer.getData( 'text/plain' );\n   * ```\n   *\n   * @param type The MIME type. E.g. `text/html` or `text/plain`.\n   */\n  getData(type) {\n    return this._native.getData(type);\n  }\n  /**\n   * Sets the data in the data transfer.\n   *\n   * @param type The MIME type. E.g. `text/html` or `text/plain`.\n   */\n  setData(type, data) {\n    this._native.setData(type, data);\n  }\n  /**\n   * The effect that is allowed for a drag operation.\n   */\n  set effectAllowed(value) {\n    this._native.effectAllowed = value;\n  }\n  get effectAllowed() {\n    return this._native.effectAllowed;\n  }\n  /**\n   * The actual drop effect.\n   */\n  set dropEffect(value) {\n    this._native.dropEffect = value;\n  }\n  get dropEffect() {\n    return this._native.dropEffect;\n  }\n  /**\n   * Set a preview image of the dragged content.\n   */\n  setDragImage(image2, x, y) {\n    this._native.setDragImage(image2, x, y);\n  }\n  /**\n   * Whether the dragging operation was canceled.\n   */\n  get isCanceled() {\n    return this._native.dropEffect == \"none\" || !!this._native.mozUserCancelled;\n  }\n};\nfunction getFiles(nativeDataTransfer) {\n  const files = Array.from(nativeDataTransfer.files || []);\n  const items = Array.from(nativeDataTransfer.items || []);\n  if (files.length) {\n    return files;\n  }\n  return items.filter((item) => item.kind === \"file\").map((item) => item.getAsFile());\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/inputobserver.js\nvar InputObserver = class extends DomEventObserver {\n  constructor() {\n    super(...arguments);\n    this.domEventType = \"beforeinput\";\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvent) {\n    const domTargetRanges = domEvent.getTargetRanges();\n    const view = this.view;\n    const viewDocument = view.document;\n    let dataTransfer = null;\n    let data = null;\n    let targetRanges = [];\n    if (domEvent.dataTransfer) {\n      dataTransfer = new DataTransfer(domEvent.dataTransfer);\n    }\n    if (domEvent.data !== null) {\n      data = domEvent.data;\n    } else if (dataTransfer) {\n      data = dataTransfer.getData(\"text/plain\");\n    }\n    if (viewDocument.selection.isFake) {\n      targetRanges = Array.from(viewDocument.selection.getRanges());\n    } else if (domTargetRanges.length) {\n      targetRanges = domTargetRanges.map((domRange) => {\n        const viewStart = view.domConverter.domPositionToView(domRange.startContainer, domRange.startOffset);\n        const viewEnd = view.domConverter.domPositionToView(domRange.endContainer, domRange.endOffset);\n        if (viewStart) {\n          return view.createRange(viewStart, viewEnd);\n        } else if (viewEnd) {\n          return view.createRange(viewEnd);\n        }\n      }).filter((range) => !!range);\n    } else if (env_default.isAndroid) {\n      const domSelection = domEvent.target.ownerDocument.defaultView.getSelection();\n      targetRanges = Array.from(view.domConverter.domSelectionToView(domSelection).getRanges());\n    }\n    if (env_default.isAndroid && domEvent.inputType == \"insertCompositionText\" && data && data.endsWith(\"\\n\")) {\n      this.fire(domEvent.type, domEvent, {\n        inputType: \"insertParagraph\",\n        targetRanges: [view.createRange(targetRanges[0].end)]\n      });\n      return;\n    }\n    if (domEvent.inputType == \"insertText\" && data && data.includes(\"\\n\")) {\n      const parts = data.split(/\\n{1,2}/g);\n      let partTargetRanges = targetRanges;\n      for (let i = 0; i < parts.length; i++) {\n        const dataPart = parts[i];\n        if (dataPart != \"\") {\n          this.fire(domEvent.type, domEvent, {\n            data: dataPart,\n            dataTransfer,\n            targetRanges: partTargetRanges,\n            inputType: domEvent.inputType,\n            isComposing: domEvent.isComposing\n          });\n          partTargetRanges = [viewDocument.selection.getFirstRange()];\n        }\n        if (i + 1 < parts.length) {\n          this.fire(domEvent.type, domEvent, {\n            inputType: \"insertParagraph\",\n            targetRanges: partTargetRanges\n          });\n          partTargetRanges = [viewDocument.selection.getFirstRange()];\n        }\n      }\n      return;\n    }\n    this.fire(domEvent.type, domEvent, {\n      data,\n      dataTransfer,\n      targetRanges,\n      inputType: domEvent.inputType,\n      isComposing: domEvent.isComposing\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/arrowkeysobserver.js\nvar ArrowKeysObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    this.document.on(\"keydown\", (event, data) => {\n      if (this.isEnabled && isArrowKeyCode(data.keyCode)) {\n        const eventInfo = new BubblingEventInfo(this.document, \"arrowKey\", this.document.selection.getFirstRange());\n        this.document.fire(eventInfo, data);\n        if (eventInfo.stop.called) {\n          event.stop();\n        }\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/tabobserver.js\nvar TabObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    const doc = this.document;\n    doc.on(\"keydown\", (evt, data) => {\n      if (!this.isEnabled || data.keyCode != keyCodes.tab || data.ctrlKey) {\n        return;\n      }\n      const event = new BubblingEventInfo(doc, \"tab\", doc.selection.getFirstRange());\n      doc.fire(event, data);\n      if (event.stop.called) {\n        evt.stop();\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/view.js\nvar View = class extends ObservableMixin() {\n  /**\n   * @param stylesProcessor The styles processor instance.\n   */\n  constructor(stylesProcessor) {\n    super();\n    this.domRoots = /* @__PURE__ */ new Map();\n    this._initialDomRootAttributes = /* @__PURE__ */ new WeakMap();\n    this._observers = /* @__PURE__ */ new Map();\n    this._ongoingChange = false;\n    this._postFixersInProgress = false;\n    this._renderingDisabled = false;\n    this._hasChangedSinceTheLastRendering = false;\n    this.document = new Document(stylesProcessor);\n    this.domConverter = new DomConverter(this.document);\n    this.set(\"isRenderingInProgress\", false);\n    this.set(\"hasDomSelection\", false);\n    this._renderer = new Renderer(this.domConverter, this.document.selection);\n    this._renderer.bind(\"isFocused\", \"isSelecting\", \"isComposing\").to(this.document, \"isFocused\", \"isSelecting\", \"isComposing\");\n    this._writer = new DowncastWriter(this.document);\n    this.addObserver(MutationObserver);\n    this.addObserver(FocusObserver);\n    this.addObserver(SelectionObserver);\n    this.addObserver(KeyObserver);\n    this.addObserver(FakeSelectionObserver);\n    this.addObserver(CompositionObserver);\n    this.addObserver(ArrowKeysObserver);\n    this.addObserver(InputObserver);\n    this.addObserver(TabObserver);\n    injectQuirksHandling(this);\n    injectUiElementHandling(this);\n    this.on(\"render\", () => {\n      this._render();\n      this.document.fire(\"layoutChanged\");\n      this._hasChangedSinceTheLastRendering = false;\n    });\n    this.listenTo(this.document.selection, \"change\", () => {\n      this._hasChangedSinceTheLastRendering = true;\n    });\n    this.listenTo(this.document, \"change:isFocused\", () => {\n      this._hasChangedSinceTheLastRendering = true;\n    });\n    if (env_default.isiOS) {\n      this.listenTo(this.document, \"blur\", (evt, data) => {\n        const relatedViewElement = this.domConverter.mapDomToView(data.domEvent.relatedTarget);\n        if (!relatedViewElement) {\n          this.domConverter._clearDomSelection();\n        }\n      });\n    }\n  }\n  /**\n   * Attaches a DOM root element to the view element and enable all observers on that element.\n   * Also {@link module:engine/view/renderer~Renderer#markToSync mark element} to be synchronized\n   * with the view what means that all child nodes will be removed and replaced with content of the view root.\n   *\n   * This method also will change view element name as the same as tag name of given dom root.\n   * Name is always transformed to lower case.\n   *\n   * **Note:** Use {@link #detachDomRoot `detachDomRoot()`} to revert this action.\n   *\n   * @param domRoot DOM root element.\n   * @param name Name of the root.\n   */\n  attachDomRoot(domRoot, name = \"main\") {\n    const viewRoot = this.document.getRoot(name);\n    viewRoot._name = domRoot.tagName.toLowerCase();\n    const initialDomRootAttributes = {};\n    for (const { name: name2, value } of Array.from(domRoot.attributes)) {\n      initialDomRootAttributes[name2] = value;\n      if (name2 === \"class\") {\n        this._writer.addClass(value.split(\" \"), viewRoot);\n      } else {\n        this._writer.setAttribute(name2, value, viewRoot);\n      }\n    }\n    this._initialDomRootAttributes.set(domRoot, initialDomRootAttributes);\n    const updateContenteditableAttribute = () => {\n      this._writer.setAttribute(\"contenteditable\", (!viewRoot.isReadOnly).toString(), viewRoot);\n      if (viewRoot.isReadOnly) {\n        this._writer.addClass(\"ck-read-only\", viewRoot);\n      } else {\n        this._writer.removeClass(\"ck-read-only\", viewRoot);\n      }\n    };\n    updateContenteditableAttribute();\n    this.domRoots.set(name, domRoot);\n    this.domConverter.bindElements(domRoot, viewRoot);\n    this._renderer.markToSync(\"children\", viewRoot);\n    this._renderer.markToSync(\"attributes\", viewRoot);\n    this._renderer.domDocuments.add(domRoot.ownerDocument);\n    viewRoot.on(\"change:children\", (evt, node) => this._renderer.markToSync(\"children\", node));\n    viewRoot.on(\"change:attributes\", (evt, node) => this._renderer.markToSync(\"attributes\", node));\n    viewRoot.on(\"change:text\", (evt, node) => this._renderer.markToSync(\"text\", node));\n    viewRoot.on(\"change:isReadOnly\", () => this.change(updateContenteditableAttribute));\n    viewRoot.on(\"change\", () => {\n      this._hasChangedSinceTheLastRendering = true;\n    });\n    for (const observer of this._observers.values()) {\n      observer.observe(domRoot, name);\n    }\n  }\n  /**\n   * Detaches a DOM root element from the view element and restores its attributes to the state before\n   * {@link #attachDomRoot `attachDomRoot()`}.\n   *\n   * @param name Name of the root to detach.\n   */\n  detachDomRoot(name) {\n    const domRoot = this.domRoots.get(name);\n    Array.from(domRoot.attributes).forEach(({ name: name2 }) => domRoot.removeAttribute(name2));\n    const initialDomRootAttributes = this._initialDomRootAttributes.get(domRoot);\n    for (const attribute in initialDomRootAttributes) {\n      domRoot.setAttribute(attribute, initialDomRootAttributes[attribute]);\n    }\n    this.domRoots.delete(name);\n    this.domConverter.unbindDomElement(domRoot);\n    for (const observer of this._observers.values()) {\n      observer.stopObserving(domRoot);\n    }\n  }\n  /**\n   * Gets DOM root element.\n   *\n   * @param name  Name of the root.\n   * @returns DOM root element instance.\n   */\n  getDomRoot(name = \"main\") {\n    return this.domRoots.get(name);\n  }\n  /**\n   * Creates observer of the given type if not yet created, {@link module:engine/view/observer/observer~Observer#enable enables} it\n   * and {@link module:engine/view/observer/observer~Observer#observe attaches} to all existing and future\n   * {@link #domRoots DOM roots}.\n   *\n   * Note: Observers are recognized by their constructor (classes). A single observer will be instantiated and used only\n   * when registered for the first time. This means that features and other components can register a single observer\n   * multiple times without caring whether it has been already added or not.\n   *\n   * @param ObserverConstructor The constructor of an observer to add.\n   * Should create an instance inheriting from {@link module:engine/view/observer/observer~Observer}.\n   * @returns Added observer instance.\n   */\n  addObserver(ObserverConstructor) {\n    let observer = this._observers.get(ObserverConstructor);\n    if (observer) {\n      return observer;\n    }\n    observer = new ObserverConstructor(this);\n    this._observers.set(ObserverConstructor, observer);\n    for (const [name, domElement] of this.domRoots) {\n      observer.observe(domElement, name);\n    }\n    observer.enable();\n    return observer;\n  }\n  /**\n   * Returns observer of the given type or `undefined` if such observer has not been added yet.\n   *\n   * @param ObserverConstructor The constructor of an observer to get.\n   * @returns Observer instance or undefined.\n   */\n  getObserver(ObserverConstructor) {\n    return this._observers.get(ObserverConstructor);\n  }\n  /**\n   * Disables all added observers.\n   */\n  disableObservers() {\n    for (const observer of this._observers.values()) {\n      observer.disable();\n    }\n  }\n  /**\n   * Enables all added observers.\n   */\n  enableObservers() {\n    for (const observer of this._observers.values()) {\n      observer.enable();\n    }\n  }\n  /**\n   * Scrolls the page viewport and {@link #domRoots} with their ancestors to reveal the\n   * caret, **if not already visible to the user**.\n   *\n   * **Note**: Calling this method fires the {@link module:engine/view/view~ViewScrollToTheSelectionEvent} event that\n   * allows custom behaviors.\n   *\n   * @param options Additional configuration of the scrolling behavior.\n   * @param options.viewportOffset A distance between the DOM selection and the viewport boundary to be maintained\n   * while scrolling to the selection (default is 20px). Setting this value to `0` will reveal the selection precisely at\n   * the viewport boundary.\n   * @param options.ancestorOffset A distance between the DOM selection and scrollable DOM root ancestor(s) to be maintained\n   * while scrolling to the selection (default is 20px). Setting this value to `0` will reveal the selection precisely at\n   * the scrollable ancestor(s) boundary.\n   * @param options.alignToTop When set `true`, the DOM selection will be aligned to the top of the viewport if not already visible\n   * (see `forceScroll` to learn more).\n   * @param options.forceScroll When set `true`, the DOM selection will be aligned to the top of the viewport and scrollable ancestors\n   * whether it is already visible or not. This option will only work when `alignToTop` is `true`.\n   */\n  scrollToTheSelection({ alignToTop, forceScroll, viewportOffset = 20, ancestorOffset = 20 } = {}) {\n    const range = this.document.selection.getFirstRange();\n    if (!range) {\n      return;\n    }\n    const originalArgs = cloneDeep_default({ alignToTop, forceScroll, viewportOffset, ancestorOffset });\n    if (typeof viewportOffset === \"number\") {\n      viewportOffset = {\n        top: viewportOffset,\n        bottom: viewportOffset,\n        left: viewportOffset,\n        right: viewportOffset\n      };\n    }\n    const options = {\n      target: this.domConverter.viewRangeToDom(range),\n      viewportOffset,\n      ancestorOffset,\n      alignToTop,\n      forceScroll\n    };\n    this.fire(\"scrollToTheSelection\", options, originalArgs);\n    scrollViewportToShowTarget(options);\n  }\n  /**\n   * It will focus DOM element representing {@link module:engine/view/editableelement~EditableElement EditableElement}\n   * that is currently having selection inside.\n   */\n  focus() {\n    if (!this.document.isFocused) {\n      const editable = this.document.selection.editableElement;\n      if (editable) {\n        this.domConverter.focus(editable);\n        this.forceRender();\n      } else {\n      }\n    }\n  }\n  /**\n   * The `change()` method is the primary way of changing the view. You should use it to modify any node in the view tree.\n   * It makes sure that after all changes are made the view is rendered to the DOM (assuming that the view will be changed\n   * inside the callback). It prevents situations when the DOM is updated when the view state is not yet correct. It allows\n   * to nest calls one inside another and still performs a single rendering after all those changes are made.\n   * It also returns the return value of its callback.\n   *\n   * ```ts\n   * const text = view.change( writer => {\n   * \tconst newText = writer.createText( 'foo' );\n   * \twriter.insert( position1, newText );\n   *\n   * \tview.change( writer => {\n   * \t\twriter.insert( position2, writer.createText( 'bar' ) );\n   * \t} );\n   *\n   * \twriter.remove( range );\n   *\n   * \treturn newText;\n   * } );\n   * ```\n   *\n   * When the outermost change block is done and rendering to the DOM is over the\n   * {@link module:engine/view/view~View#event:render `View#render`} event is fired.\n   *\n   * This method throws a `applying-view-changes-on-rendering` error when\n   * the change block is used after rendering to the DOM has started.\n   *\n   * @param callback Callback function which may modify the view.\n   * @returns Value returned by the callback.\n   */\n  change(callback) {\n    if (this.isRenderingInProgress || this._postFixersInProgress) {\n      throw new CKEditorError(\"cannot-change-view-tree\", this);\n    }\n    try {\n      if (this._ongoingChange) {\n        return callback(this._writer);\n      }\n      this._ongoingChange = true;\n      const callbackResult = callback(this._writer);\n      this._ongoingChange = false;\n      if (!this._renderingDisabled && this._hasChangedSinceTheLastRendering) {\n        this._postFixersInProgress = true;\n        this.document._callPostFixers(this._writer);\n        this._postFixersInProgress = false;\n        this.fire(\"render\");\n      }\n      return callbackResult;\n    } catch (err) {\n      CKEditorError.rethrowUnexpectedError(err, this);\n    }\n  }\n  /**\n   * Forces rendering {@link module:engine/view/document~Document view document} to DOM. If any view changes are\n   * currently in progress, rendering will start after all {@link #change change blocks} are processed.\n   *\n   * Note that this method is dedicated for special cases. All view changes should be wrapped in the {@link #change}\n   * block and the view will automatically check whether it needs to render DOM or not.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `applying-view-changes-on-rendering` when\n   * trying to re-render when rendering to DOM has already started.\n   */\n  forceRender() {\n    this._hasChangedSinceTheLastRendering = true;\n    this.getObserver(FocusObserver).flush();\n    this.change(() => {\n    });\n  }\n  /**\n   * Destroys this instance. Makes sure that all observers are destroyed and listeners removed.\n   */\n  destroy() {\n    for (const observer of this._observers.values()) {\n      observer.destroy();\n    }\n    this.document.destroy();\n    this.stopListening();\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/view/position~Position position},\n   * * parent element and offset (offset defaults to `0`),\n   * * parent element and `'end'` (sets position at the end of that element),\n   * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n   *\n   * This method is a shortcut to other constructors such as:\n   *\n   * * {@link #createPositionBefore},\n   * * {@link #createPositionAfter},\n   *\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  createPositionAt(itemOrPosition, offset) {\n    return Position._createAt(itemOrPosition, offset);\n  }\n  /**\n   * Creates a new position after given view item.\n   *\n   * @param item View item after which the position should be located.\n   */\n  createPositionAfter(item) {\n    return Position._createAfter(item);\n  }\n  /**\n   * Creates a new position before given view item.\n   *\n   * @param item View item before which the position should be located.\n   */\n  createPositionBefore(item) {\n    return Position._createBefore(item);\n  }\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n   *\n   * @param start Start position.\n   * @param end End position. If not set, range will be collapsed at `start` position.\n   */\n  createRange(start, end) {\n    return new Range(start, end);\n  }\n  /**\n   * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n   */\n  createRangeOn(item) {\n    return Range._createOn(item);\n  }\n  /**\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeIn(element) {\n    return Range._createIn(element);\n  }\n  createSelection(...args) {\n    return new Selection(...args);\n  }\n  /**\n   * Disables or enables rendering. If the flag is set to `true` then the rendering will be disabled.\n   * If the flag is set to `false` and if there was some change in the meantime, then the rendering action will be performed.\n   *\n   * @internal\n   * @param flag A flag indicates whether the rendering should be disabled.\n   */\n  _disableRendering(flag) {\n    this._renderingDisabled = flag;\n    if (flag == false) {\n      this.change(() => {\n      });\n    }\n  }\n  /**\n   * Renders all changes. In order to avoid triggering the observers (e.g. selection) all observers are disabled\n   * before rendering and re-enabled after that.\n   */\n  _render() {\n    this.isRenderingInProgress = true;\n    this.disableObservers();\n    this._renderer.render();\n    this.enableObservers();\n    this.isRenderingInProgress = false;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/typecheckable.js\nvar TypeCheckable2 = class {\n  /* istanbul ignore next -- @preserve */\n  is() {\n    throw new Error(\"is() method is abstract\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/node.js\nvar Node3 = class extends TypeCheckable2 {\n  /**\n   * Creates a model node.\n   *\n   * This is an abstract class, so this constructor should not be used directly.\n   *\n   * @param attrs Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   */\n  constructor(attrs) {\n    super();\n    this.parent = null;\n    this._attrs = toMap(attrs);\n  }\n  /**\n   * {@link module:engine/model/document~Document Document} that owns this root element.\n   */\n  get document() {\n    return null;\n  }\n  /**\n   * Index of this node in its parent or `null` if the node has no parent.\n   *\n   * Accessing this property throws an error if this node's parent element does not contain it.\n   * This means that model tree got broken.\n   */\n  get index() {\n    let pos;\n    if (!this.parent) {\n      return null;\n    }\n    if ((pos = this.parent.getChildIndex(this)) === null) {\n      throw new CKEditorError(\"model-node-not-found-in-parent\", this);\n    }\n    return pos;\n  }\n  /**\n   * Offset at which this node starts in its parent. It is equal to the sum of {@link #offsetSize offsetSize}\n   * of all its previous siblings. Equals to `null` if node has no parent.\n   *\n   * Accessing this property throws an error if this node's parent element does not contain it.\n   * This means that model tree got broken.\n   */\n  get startOffset() {\n    let pos;\n    if (!this.parent) {\n      return null;\n    }\n    if ((pos = this.parent.getChildStartOffset(this)) === null) {\n      throw new CKEditorError(\"model-node-not-found-in-parent\", this);\n    }\n    return pos;\n  }\n  /**\n   * Offset size of this node. Represents how much \"offset space\" is occupied by the node in it's parent.\n   * It is important for {@link module:engine/model/position~Position position}. When node has `offsetSize` greater than `1`, position\n   * can be placed between that node start and end. `offsetSize` greater than `1` is for nodes that represents more\n   * than one entity, i.e. {@link module:engine/model/text~Text text node}.\n   */\n  get offsetSize() {\n    return 1;\n  }\n  /**\n   * Offset at which this node ends in it's parent. It is equal to the sum of this node's\n   * {@link module:engine/model/node~Node#startOffset start offset} and {@link #offsetSize offset size}.\n   * Equals to `null` if the node has no parent.\n   */\n  get endOffset() {\n    if (!this.parent) {\n      return null;\n    }\n    return this.startOffset + this.offsetSize;\n  }\n  /**\n   * Node's next sibling or `null` if the node is a last child of it's parent or if the node has no parent.\n   */\n  get nextSibling() {\n    const index = this.index;\n    return index !== null && this.parent.getChild(index + 1) || null;\n  }\n  /**\n   * Node's previous sibling or `null` if the node is a first child of it's parent or if the node has no parent.\n   */\n  get previousSibling() {\n    const index = this.index;\n    return index !== null && this.parent.getChild(index - 1) || null;\n  }\n  /**\n   * The top-most ancestor of the node. If node has no parent it is the root itself. If the node is a part\n   * of {@link module:engine/model/documentfragment~DocumentFragment}, it's `root` is equal to that `DocumentFragment`.\n   */\n  get root() {\n    let root2 = this;\n    while (root2.parent) {\n      root2 = root2.parent;\n    }\n    return root2;\n  }\n  /**\n   * Returns `true` if the node is inside a document root that is attached to the document.\n   */\n  isAttached() {\n    return this.parent === null ? false : this.root.isAttached();\n  }\n  /**\n   * Gets path to the node. The path is an array containing starting offsets of consecutive ancestors of this node,\n   * beginning from {@link module:engine/model/node~Node#root root}, down to this node's starting offset. The path can be used to\n   * create {@link module:engine/model/position~Position Position} instance.\n   *\n   * ```ts\n   * const abc = new Text( 'abc' );\n   * const foo = new Text( 'foo' );\n   * const h1 = new Element( 'h1', null, new Text( 'header' ) );\n   * const p = new Element( 'p', null, [ abc, foo ] );\n   * const div = new Element( 'div', null, [ h1, p ] );\n   * foo.getPath(); // Returns [ 1, 3 ]. `foo` is in `p` which is in `div`. `p` starts at offset 1, while `foo` at 3.\n   * h1.getPath(); // Returns [ 0 ].\n   * div.getPath(); // Returns [].\n   * ```\n   */\n  getPath() {\n    const path = [];\n    let node = this;\n    while (node.parent) {\n      path.unshift(node.startOffset);\n      node = node.parent;\n    }\n    return path;\n  }\n  /**\n   * Returns ancestors array of this node.\n   *\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` this node will be also included in parent's array.\n   * @param options.parentFirst When set to `true`, array will be sorted from node's parent to root element,\n   * otherwise root element will be the first item in the array.\n   * @returns Array with ancestors.\n   */\n  getAncestors(options = {}) {\n    const ancestors = [];\n    let parent2 = options.includeSelf ? this : this.parent;\n    while (parent2) {\n      ancestors[options.parentFirst ? \"push\" : \"unshift\"](parent2);\n      parent2 = parent2.parent;\n    }\n    return ancestors;\n  }\n  /**\n   * Returns a {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n   * which is a common ancestor of both nodes.\n   *\n   * @param node The second node.\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` both nodes will be considered \"ancestors\" too.\n   * Which means that if e.g. node A is inside B, then their common ancestor will be B.\n   */\n  getCommonAncestor(node, options = {}) {\n    const ancestorsA = this.getAncestors(options);\n    const ancestorsB = node.getAncestors(options);\n    let i = 0;\n    while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n      i++;\n    }\n    return i === 0 ? null : ancestorsA[i - 1];\n  }\n  /**\n   * Returns whether this node is before given node. `false` is returned if nodes are in different trees (for example,\n   * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n   *\n   * @param node Node to compare with.\n   */\n  isBefore(node) {\n    if (this == node) {\n      return false;\n    }\n    if (this.root !== node.root) {\n      return false;\n    }\n    const thisPath = this.getPath();\n    const nodePath = node.getPath();\n    const result = compareArrays(thisPath, nodePath);\n    switch (result) {\n      case \"prefix\":\n        return true;\n      case \"extension\":\n        return false;\n      default:\n        return thisPath[result] < nodePath[result];\n    }\n  }\n  /**\n   * Returns whether this node is after given node. `false` is returned if nodes are in different trees (for example,\n   * in different {@link module:engine/model/documentfragment~DocumentFragment}s).\n   *\n   * @param node Node to compare with.\n   */\n  isAfter(node) {\n    if (this == node) {\n      return false;\n    }\n    if (this.root !== node.root) {\n      return false;\n    }\n    return !this.isBefore(node);\n  }\n  /**\n   * Checks if the node has an attribute with given key.\n   *\n   * @param key Key of attribute to check.\n   * @returns `true` if attribute with given key is set on node, `false` otherwise.\n   */\n  hasAttribute(key) {\n    return this._attrs.has(key);\n  }\n  /**\n   * Gets an attribute value for given key or `undefined` if that attribute is not set on node.\n   *\n   * @param key Key of attribute to look for.\n   * @returns Attribute value or `undefined`.\n   */\n  getAttribute(key) {\n    return this._attrs.get(key);\n  }\n  /**\n   * Returns iterator that iterates over this node's attributes.\n   *\n   * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n   * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n   */\n  getAttributes() {\n    return this._attrs.entries();\n  }\n  /**\n   * Returns iterator that iterates over this node's attribute keys.\n   */\n  getAttributeKeys() {\n    return this._attrs.keys();\n  }\n  /**\n   * Converts `Node` to plain object and returns it.\n   *\n   * @returns `Node` converted to plain object.\n   */\n  toJSON() {\n    const json = {};\n    if (this._attrs.size) {\n      json.attributes = Array.from(this._attrs).reduce((result, attr) => {\n        result[attr[0]] = attr[1];\n        return result;\n      }, {});\n    }\n    return json;\n  }\n  /**\n   * Creates a copy of this node, that is a node with exactly same attributes, and returns it.\n   *\n   * @internal\n   * @returns Node with same attributes as this node.\n   */\n  _clone(_deep) {\n    return new this.constructor(this._attrs);\n  }\n  /**\n   * Removes this node from it's parent.\n   *\n   * @internal\n   * @see module:engine/model/writer~Writer#remove\n   */\n  _remove() {\n    this.parent._removeChildren(this.index);\n  }\n  /**\n   * Sets attribute on the node. If attribute with the same key already is set, it's value is overwritten.\n   *\n   * @see module:engine/model/writer~Writer#setAttribute\n   * @internal\n   * @param key Key of attribute to set.\n   * @param value Attribute value.\n   */\n  _setAttribute(key, value) {\n    this._attrs.set(key, value);\n  }\n  /**\n   * Removes all attributes from the node and sets given attributes.\n   *\n   * @see module:engine/model/writer~Writer#setAttributes\n   * @internal\n   * @param attrs Attributes to set. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   */\n  _setAttributesTo(attrs) {\n    this._attrs = toMap(attrs);\n  }\n  /**\n   * Removes an attribute with given key from the node.\n   *\n   * @see module:engine/model/writer~Writer#removeAttribute\n   * @internal\n   * @param key Key of attribute to remove.\n   * @returns `true` if the attribute was set on the element, `false` otherwise.\n   */\n  _removeAttribute(key) {\n    return this._attrs.delete(key);\n  }\n  /**\n   * Removes all attributes from the node.\n   *\n   * @see module:engine/model/writer~Writer#clearAttributes\n   * @internal\n   */\n  _clearAttributes() {\n    this._attrs.clear();\n  }\n};\nNode3.prototype.is = function(type) {\n  return type === \"node\" || type === \"model:node\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/nodelist.js\nvar NodeList = class {\n  /**\n   * Creates an empty node list.\n   *\n   * @internal\n   * @param nodes Nodes contained in this node list.\n   */\n  constructor(nodes) {\n    this._nodes = [];\n    if (nodes) {\n      this._insertNodes(0, nodes);\n    }\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all nodes contained inside this node list.\n   */\n  [Symbol.iterator]() {\n    return this._nodes[Symbol.iterator]();\n  }\n  /**\n   * Number of nodes contained inside this node list.\n   */\n  get length() {\n    return this._nodes.length;\n  }\n  /**\n   * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all nodes contained inside this node list.\n   */\n  get maxOffset() {\n    return this._nodes.reduce((sum, node) => sum + node.offsetSize, 0);\n  }\n  /**\n   * Gets the node at the given index. Returns `null` if incorrect index was passed.\n   */\n  getNode(index) {\n    return this._nodes[index] || null;\n  }\n  /**\n   * Returns an index of the given node. Returns `null` if given node is not inside this node list.\n   */\n  getNodeIndex(node) {\n    const index = this._nodes.indexOf(node);\n    return index == -1 ? null : index;\n  }\n  /**\n   * Returns the starting offset of given node. Starting offset is equal to the sum of\n   * {@link module:engine/model/node~Node#offsetSize offset sizes} of all nodes that are before this node in this node list.\n   */\n  getNodeStartOffset(node) {\n    const index = this.getNodeIndex(node);\n    return index === null ? null : this._nodes.slice(0, index).reduce((sum, node2) => sum + node2.offsetSize, 0);\n  }\n  /**\n   * Converts index to offset in node list.\n   *\n   * Returns starting offset of a node that is at given index. Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n   * `model-nodelist-index-out-of-bounds` if given index is less than `0` or more than {@link #length}.\n   */\n  indexToOffset(index) {\n    if (index == this._nodes.length) {\n      return this.maxOffset;\n    }\n    const node = this._nodes[index];\n    if (!node) {\n      throw new CKEditorError(\"model-nodelist-index-out-of-bounds\", this);\n    }\n    return this.getNodeStartOffset(node);\n  }\n  /**\n   * Converts offset in node list to index.\n   *\n   * Returns index of a node that occupies given offset. Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError}\n   * `model-nodelist-offset-out-of-bounds` if given offset is less than `0` or more than {@link #maxOffset}.\n   */\n  offsetToIndex(offset) {\n    let totalOffset = 0;\n    for (const node of this._nodes) {\n      if (offset >= totalOffset && offset < totalOffset + node.offsetSize) {\n        return this.getNodeIndex(node);\n      }\n      totalOffset += node.offsetSize;\n    }\n    if (totalOffset != offset) {\n      throw new CKEditorError(\"model-nodelist-offset-out-of-bounds\", this, {\n        offset,\n        nodeList: this\n      });\n    }\n    return this.length;\n  }\n  /**\n   * Inserts given nodes at given index.\n   *\n   * @internal\n   * @param index Index at which nodes should be inserted.\n   * @param nodes Nodes to be inserted.\n   */\n  _insertNodes(index, nodes) {\n    for (const node of nodes) {\n      if (!(node instanceof Node3)) {\n        throw new CKEditorError(\"model-nodelist-insertnodes-not-node\", this);\n      }\n    }\n    this._nodes = spliceArray(this._nodes, Array.from(nodes), index, 0);\n  }\n  /**\n   * Removes one or more nodes starting at the given index.\n   *\n   * @internal\n   * @param indexStart Index of the first node to remove.\n   * @param howMany Number of nodes to remove.\n   * @returns Array containing removed nodes.\n   */\n  _removeNodes(indexStart, howMany = 1) {\n    return this._nodes.splice(indexStart, howMany);\n  }\n  /**\n   * Converts `NodeList` instance to an array containing nodes that were inserted in the node list. Nodes\n   * are also converted to their plain object representation.\n   *\n   * @returns `NodeList` instance converted to `Array`.\n   */\n  toJSON() {\n    return this._nodes.map((node) => node.toJSON());\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/text.js\nvar Text2 = class _Text extends Node3 {\n  /**\n   * Creates a text node.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createText} method instead.\n   *\n   * @internal\n   * @param data Node's text.\n   * @param attrs Node's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   */\n  constructor(data, attrs) {\n    super(attrs);\n    this._data = data || \"\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get offsetSize() {\n    return this.data.length;\n  }\n  /**\n   * Returns a text data contained in the node.\n   */\n  get data() {\n    return this._data;\n  }\n  /**\n   * Converts `Text` instance to plain object and returns it.\n   *\n   * @returns`Text` instance converted to plain object.\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.data = this.data;\n    return json;\n  }\n  /**\n   * Creates a copy of this text node and returns it. Created text node has same text data and attributes as original text node.\n   *\n   * @internal\n   * @returns `Text` instance created using given plain object.\n   */\n  _clone() {\n    return new _Text(this.data, this.getAttributes());\n  }\n  /**\n   * Creates a `Text` instance from given plain object (i.e. parsed JSON string).\n   *\n   * @param json Plain object to be converted to `Text`.\n   * @returns `Text` instance created using given plain object.\n   */\n  static fromJSON(json) {\n    return new _Text(json.data, json.attributes);\n  }\n};\nText2.prototype.is = function(type) {\n  return type === \"$text\" || type === \"model:$text\" || // This are legacy values kept for backward compatibility.\n  type === \"text\" || type === \"model:text\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n  type === \"node\" || type === \"model:node\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/textproxy.js\nvar TextProxy2 = class extends TypeCheckable2 {\n  /**\n   * Creates a text proxy.\n   *\n   * @internal\n   * @param textNode Text node which part is represented by this text proxy.\n   * @param offsetInText Offset in {@link module:engine/model/textproxy~TextProxy#textNode text node} from which the text proxy\n   * starts.\n   * @param length Text proxy length, that is how many text node's characters, starting from `offsetInText` it represents.\n   */\n  constructor(textNode, offsetInText, length) {\n    super();\n    this.textNode = textNode;\n    if (offsetInText < 0 || offsetInText > textNode.offsetSize) {\n      throw new CKEditorError(\"model-textproxy-wrong-offsetintext\", this);\n    }\n    if (length < 0 || offsetInText + length > textNode.offsetSize) {\n      throw new CKEditorError(\"model-textproxy-wrong-length\", this);\n    }\n    this.data = textNode.data.substring(offsetInText, offsetInText + length);\n    this.offsetInText = offsetInText;\n  }\n  /**\n   * Offset at which this text proxy starts in it's parent.\n   *\n   * @see module:engine/model/node~Node#startOffset\n   */\n  get startOffset() {\n    return this.textNode.startOffset !== null ? this.textNode.startOffset + this.offsetInText : null;\n  }\n  /**\n   * Offset size of this text proxy. Equal to the number of characters represented by the text proxy.\n   *\n   * @see module:engine/model/node~Node#offsetSize\n   */\n  get offsetSize() {\n    return this.data.length;\n  }\n  /**\n   * Offset at which this text proxy ends in it's parent.\n   *\n   * @see module:engine/model/node~Node#endOffset\n   */\n  get endOffset() {\n    return this.startOffset !== null ? this.startOffset + this.offsetSize : null;\n  }\n  /**\n   * Flag indicating whether `TextProxy` instance covers only part of the original {@link module:engine/model/text~Text text node}\n   * (`true`) or the whole text node (`false`).\n   *\n   * This is `false` when text proxy starts at the very beginning of {@link module:engine/model/textproxy~TextProxy#textNode textNode}\n   * ({@link module:engine/model/textproxy~TextProxy#offsetInText offsetInText} equals `0`) and text proxy sizes is equal to\n   * text node size.\n   */\n  get isPartial() {\n    return this.offsetSize !== this.textNode.offsetSize;\n  }\n  /**\n   * Parent of this text proxy, which is same as parent of text node represented by this text proxy.\n   */\n  get parent() {\n    return this.textNode.parent;\n  }\n  /**\n   * Root of this text proxy, which is same as root of text node represented by this text proxy.\n   */\n  get root() {\n    return this.textNode.root;\n  }\n  /**\n   * Gets path to this text proxy.\n   *\n   * @see module:engine/model/node~Node#getPath\n   */\n  getPath() {\n    const path = this.textNode.getPath();\n    if (path.length > 0) {\n      path[path.length - 1] += this.offsetInText;\n    }\n    return path;\n  }\n  /**\n   * Returns ancestors array of this text proxy.\n   *\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` this text proxy will be also included in parent's array.\n   * @param options.parentFirst When set to `true`, array will be sorted from text proxy parent to root element,\n   * otherwise root element will be the first item in the array.\n   * @returns Array with ancestors.\n   */\n  getAncestors(options = {}) {\n    const ancestors = [];\n    let parent2 = options.includeSelf ? this : this.parent;\n    while (parent2) {\n      ancestors[options.parentFirst ? \"push\" : \"unshift\"](parent2);\n      parent2 = parent2.parent;\n    }\n    return ancestors;\n  }\n  /**\n   * Checks if this text proxy has an attribute for given key.\n   *\n   * @param key Key of attribute to check.\n   * @returns `true` if attribute with given key is set on text proxy, `false` otherwise.\n   */\n  hasAttribute(key) {\n    return this.textNode.hasAttribute(key);\n  }\n  /**\n   * Gets an attribute value for given key or `undefined` if that attribute is not set on text proxy.\n   *\n   * @param key Key of attribute to look for.\n   * @returns Attribute value or `undefined`.\n   */\n  getAttribute(key) {\n    return this.textNode.getAttribute(key);\n  }\n  /**\n   * Returns iterator that iterates over this node's attributes. Attributes are returned as arrays containing two\n   * items. First one is attribute key and second is attribute value.\n   *\n   * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n   */\n  getAttributes() {\n    return this.textNode.getAttributes();\n  }\n  /**\n   * Returns iterator that iterates over this node's attribute keys.\n   */\n  getAttributeKeys() {\n    return this.textNode.getAttributeKeys();\n  }\n};\nTextProxy2.prototype.is = function(type) {\n  return type === \"$textProxy\" || type === \"model:$textProxy\" || // This are legacy values kept for backward compatibility.\n  type === \"textProxy\" || type === \"model:textProxy\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/element.js\nvar Element2 = class _Element extends Node3 {\n  /**\n   * Creates a model element.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createElement} method instead.\n   *\n   * @internal\n   * @param name Element's name.\n   * @param attrs Element's attributes. See {@link module:utils/tomap~toMap} for a list of accepted values.\n   * @param children One or more nodes to be inserted as children of created element.\n   */\n  constructor(name, attrs, children) {\n    super(attrs);\n    this._children = new NodeList();\n    this.name = name;\n    if (children) {\n      this._insertChild(0, children);\n    }\n  }\n  /**\n   * Number of this element's children.\n   */\n  get childCount() {\n    return this._children.length;\n  }\n  /**\n   * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this element's children.\n   */\n  get maxOffset() {\n    return this._children.maxOffset;\n  }\n  /**\n   * Is `true` if there are no nodes inside this element, `false` otherwise.\n   */\n  get isEmpty() {\n    return this.childCount === 0;\n  }\n  /**\n   * Gets the child at the given index.\n   */\n  getChild(index) {\n    return this._children.getNode(index);\n  }\n  /**\n   * Returns an iterator that iterates over all of this element's children.\n   */\n  getChildren() {\n    return this._children[Symbol.iterator]();\n  }\n  /**\n   * Returns an index of the given child node. Returns `null` if given node is not a child of this element.\n   *\n   * @param node Child node to look for.\n   * @returns Child node's index in this element.\n   */\n  getChildIndex(node) {\n    return this._children.getNodeIndex(node);\n  }\n  /**\n   * Returns the starting offset of given child. Starting offset is equal to the sum of\n   * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n   * given node is not a child of this element.\n   *\n   * @param node Child node to look for.\n   * @returns Child node's starting offset.\n   */\n  getChildStartOffset(node) {\n    return this._children.getNodeStartOffset(node);\n  }\n  /**\n   * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n   * too high, returns {@link module:engine/model/element~Element#getChildIndex index after last child}.\n   *\n   * ```ts\n   * const textNode = new Text( 'foo' );\n   * const pElement = new Element( 'p' );\n   * const divElement = new Element( [ textNode, pElement ] );\n   * divElement.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n   * divElement.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n   * divElement.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n   * divElement.offsetToIndex( 2 ); // Returns 0.\n   * divElement.offsetToIndex( 3 ); // Returns 1.\n   * divElement.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n   * ```\n   */\n  offsetToIndex(offset) {\n    return this._children.offsetToIndex(offset);\n  }\n  /**\n   * Returns a descendant node by its path relative to this element.\n   *\n   * ```ts\n   * // <this>a<b>c</b></this>\n   * this.getNodeByPath( [ 0 ] );     // -> \"a\"\n   * this.getNodeByPath( [ 1 ] );     // -> <b>\n   * this.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n   * ```\n   *\n   * @param relativePath Path of the node to find, relative to this element.\n   */\n  getNodeByPath(relativePath) {\n    let node = this;\n    for (const index of relativePath) {\n      node = node.getChild(node.offsetToIndex(index));\n    }\n    return node;\n  }\n  /**\n   * Returns the parent element of the given name. Returns null if the element is not inside the desired parent.\n   *\n   * @param parentName The name of the parent element to find.\n   * @param options Options object.\n   * @param options.includeSelf When set to `true` this node will be also included while searching.\n   */\n  findAncestor(parentName, options = {}) {\n    let parent2 = options.includeSelf ? this : this.parent;\n    while (parent2) {\n      if (parent2.name === parentName) {\n        return parent2;\n      }\n      parent2 = parent2.parent;\n    }\n    return null;\n  }\n  /**\n   * Converts `Element` instance to plain object and returns it. Takes care of converting all of this element's children.\n   *\n   * @returns `Element` instance converted to plain object.\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.name = this.name;\n    if (this._children.length > 0) {\n      json.children = [];\n      for (const node of this._children) {\n        json.children.push(node.toJSON());\n      }\n    }\n    return json;\n  }\n  /**\n   * Creates a copy of this element and returns it. Created element has the same name and attributes as the original element.\n   * If clone is deep, the original element's children are also cloned. If not, then empty element is returned.\n   *\n   * @internal\n   * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n   * element will be cloned without any child.\n   */\n  _clone(deep = false) {\n    const children = deep ? Array.from(this._children).map((node) => node._clone(true)) : void 0;\n    return new _Element(this.name, this.getAttributes(), children);\n  }\n  /**\n   * {@link module:engine/model/element~Element#_insertChild Inserts} one or more nodes at the end of this element.\n   *\n   * @see module:engine/model/writer~Writer#append\n   * @internal\n   * @param nodes Nodes to be inserted.\n   */\n  _appendChild(nodes) {\n    this._insertChild(this.childCount, nodes);\n  }\n  /**\n   * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n   * to this element.\n   *\n   * @see module:engine/model/writer~Writer#insert\n   * @internal\n   * @param index Index at which nodes should be inserted.\n   * @param items Items to be inserted.\n   */\n  _insertChild(index, items) {\n    const nodes = normalize3(items);\n    for (const node of nodes) {\n      if (node.parent !== null) {\n        node._remove();\n      }\n      node.parent = this;\n    }\n    this._children._insertNodes(index, nodes);\n  }\n  /**\n   * Removes one or more nodes starting at the given index and sets\n   * {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n   *\n   * @see module:engine/model/writer~Writer#remove\n   * @internal\n   * @param index Index of the first node to remove.\n   * @param howMany Number of nodes to remove.\n   * @returns Array containing removed nodes.\n   */\n  _removeChildren(index, howMany = 1) {\n    const nodes = this._children._removeNodes(index, howMany);\n    for (const node of nodes) {\n      node.parent = null;\n    }\n    return nodes;\n  }\n  /**\n   * Creates an `Element` instance from given plain object (i.e. parsed JSON string).\n   * Converts `Element` children to proper nodes.\n   *\n   * @param json Plain object to be converted to `Element`.\n   * @returns `Element` instance created using given plain object.\n   */\n  static fromJSON(json) {\n    let children;\n    if (json.children) {\n      children = [];\n      for (const child of json.children) {\n        if (child.name) {\n          children.push(_Element.fromJSON(child));\n        } else {\n          children.push(Text2.fromJSON(child));\n        }\n      }\n    }\n    return new _Element(json.name, json.attributes, children);\n  }\n};\nElement2.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"element\" || type === \"model:element\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"node\" || type === \"model:node\";\n  }\n  return name === this.name && (type === \"element\" || type === \"model:element\");\n};\nfunction normalize3(nodes) {\n  if (typeof nodes == \"string\") {\n    return [new Text2(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n  return Array.from(nodes).map((node) => {\n    if (typeof node == \"string\") {\n      return new Text2(node);\n    }\n    if (node instanceof TextProxy2) {\n      return new Text2(node.data, node.getAttributes());\n    }\n    return node;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/treewalker.js\nvar TreeWalker2 = class {\n  /**\n   * Creates a range iterator. All parameters are optional, but you have to specify either `boundaries` or `startPosition`.\n   *\n   * @param options Object with configuration.\n   */\n  constructor(options) {\n    if (!options || !options.boundaries && !options.startPosition) {\n      throw new CKEditorError(\"model-tree-walker-no-start-position\", null);\n    }\n    const direction = options.direction || \"forward\";\n    if (direction != \"forward\" && direction != \"backward\") {\n      throw new CKEditorError(\"model-tree-walker-unknown-direction\", options, { direction });\n    }\n    this.direction = direction;\n    this.boundaries = options.boundaries || null;\n    if (options.startPosition) {\n      this._position = options.startPosition.clone();\n    } else {\n      this._position = Position2._createAt(this.boundaries[this.direction == \"backward\" ? \"end\" : \"start\"]);\n    }\n    this.position.stickiness = \"toNone\";\n    this.singleCharacters = !!options.singleCharacters;\n    this.shallow = !!options.shallow;\n    this.ignoreElementEnd = !!options.ignoreElementEnd;\n    this._boundaryStartParent = this.boundaries ? this.boundaries.start.parent : null;\n    this._boundaryEndParent = this.boundaries ? this.boundaries.end.parent : null;\n    this._visitedParent = this.position.parent;\n  }\n  /**\n   * Iterable interface.\n   *\n   * @returns {Iterable.<module:engine/model/treewalker~TreeWalkerValue>}\n   */\n  [Symbol.iterator]() {\n    return this;\n  }\n  /**\n   * Iterator position. This is always static position, even if the initial position was a\n   * {@link module:engine/model/liveposition~LivePosition live position}. If start position is not defined then position depends\n   * on {@link #direction}. If direction is `'forward'` position starts form the beginning, when direction\n   * is `'backward'` position starts from the end.\n   */\n  get position() {\n    return this._position;\n  }\n  /**\n   * Moves {@link #position} in the {@link #direction} skipping values as long as the callback function returns `true`.\n   *\n   * For example:\n   *\n   * ```ts\n   * walker.skip( value => value.type == 'text' ); // <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n   * walker.skip( () => true ); // Move the position to the end: <paragraph>[]foo</paragraph> -> <paragraph>foo</paragraph>[]\n   * walker.skip( () => false ); // Do not move the position.\n   * ```\n   *\n   * @param skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n   * return `true` if the value should be skipped or `false` if not.\n   */\n  skip(skip) {\n    let done, value, prevPosition, prevVisitedParent;\n    do {\n      prevPosition = this.position;\n      prevVisitedParent = this._visitedParent;\n      ({ done, value } = this.next());\n    } while (!done && skip(value));\n    if (!done) {\n      this._position = prevPosition;\n      this._visitedParent = prevVisitedParent;\n    }\n  }\n  /**\n   * Gets the next tree walker's value.\n   */\n  next() {\n    if (this.direction == \"forward\") {\n      return this._next();\n    } else {\n      return this._previous();\n    }\n  }\n  /**\n   * Makes a step forward in model. Moves the {@link #position} to the next position and returns the encountered value.\n   */\n  _next() {\n    const previousPosition = this.position;\n    const position = this.position.clone();\n    const parent2 = this._visitedParent;\n    if (parent2.parent === null && position.offset === parent2.maxOffset) {\n      return { done: true, value: void 0 };\n    }\n    if (parent2 === this._boundaryEndParent && position.offset == this.boundaries.end.offset) {\n      return { done: true, value: void 0 };\n    }\n    const textNodeAtPosition = getTextNodeAtPosition(position, parent2);\n    const node = textNodeAtPosition || getNodeAfterPosition(position, parent2, textNodeAtPosition);\n    if (node instanceof Element2) {\n      if (!this.shallow) {\n        position.path.push(0);\n        this._visitedParent = node;\n      } else {\n        if (this.boundaries && this.boundaries.end.isBefore(position)) {\n          return { done: true, value: void 0 };\n        }\n        position.offset++;\n      }\n      this._position = position;\n      return formatReturnValue(\"elementStart\", node, previousPosition, position, 1);\n    }\n    if (node instanceof Text2) {\n      let charactersCount;\n      if (this.singleCharacters) {\n        charactersCount = 1;\n      } else {\n        let offset = node.endOffset;\n        if (this._boundaryEndParent == parent2 && this.boundaries.end.offset < offset) {\n          offset = this.boundaries.end.offset;\n        }\n        charactersCount = offset - position.offset;\n      }\n      const offsetInTextNode = position.offset - node.startOffset;\n      const item = new TextProxy2(node, offsetInTextNode, charactersCount);\n      position.offset += charactersCount;\n      this._position = position;\n      return formatReturnValue(\"text\", item, previousPosition, position, charactersCount);\n    }\n    position.path.pop();\n    position.offset++;\n    this._position = position;\n    this._visitedParent = parent2.parent;\n    if (this.ignoreElementEnd) {\n      return this._next();\n    }\n    return formatReturnValue(\"elementEnd\", parent2, previousPosition, position);\n  }\n  /**\n   * Makes a step backward in model. Moves the {@link #position} to the previous position and returns the encountered value.\n   */\n  _previous() {\n    const previousPosition = this.position;\n    const position = this.position.clone();\n    const parent2 = this._visitedParent;\n    if (parent2.parent === null && position.offset === 0) {\n      return { done: true, value: void 0 };\n    }\n    if (parent2 == this._boundaryStartParent && position.offset == this.boundaries.start.offset) {\n      return { done: true, value: void 0 };\n    }\n    const positionParent = position.parent;\n    const textNodeAtPosition = getTextNodeAtPosition(position, positionParent);\n    const node = textNodeAtPosition || getNodeBeforePosition(position, positionParent, textNodeAtPosition);\n    if (node instanceof Element2) {\n      position.offset--;\n      if (this.shallow) {\n        this._position = position;\n        return formatReturnValue(\"elementStart\", node, previousPosition, position, 1);\n      }\n      position.path.push(node.maxOffset);\n      this._position = position;\n      this._visitedParent = node;\n      if (this.ignoreElementEnd) {\n        return this._previous();\n      }\n      return formatReturnValue(\"elementEnd\", node, previousPosition, position);\n    }\n    if (node instanceof Text2) {\n      let charactersCount;\n      if (this.singleCharacters) {\n        charactersCount = 1;\n      } else {\n        let offset = node.startOffset;\n        if (this._boundaryStartParent == parent2 && this.boundaries.start.offset > offset) {\n          offset = this.boundaries.start.offset;\n        }\n        charactersCount = position.offset - offset;\n      }\n      const offsetInTextNode = position.offset - node.startOffset;\n      const item = new TextProxy2(node, offsetInTextNode - charactersCount, charactersCount);\n      position.offset -= charactersCount;\n      this._position = position;\n      return formatReturnValue(\"text\", item, previousPosition, position, charactersCount);\n    }\n    position.path.pop();\n    this._position = position;\n    this._visitedParent = parent2.parent;\n    return formatReturnValue(\"elementStart\", parent2, previousPosition, position, 1);\n  }\n};\nfunction formatReturnValue(type, item, previousPosition, nextPosition, length) {\n  return {\n    done: false,\n    value: {\n      type,\n      item,\n      previousPosition,\n      nextPosition,\n      length\n    }\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/position.js\nvar Position2 = class _Position extends TypeCheckable2 {\n  /**\n   * Creates a position.\n   *\n   * @param root Root of the position.\n   * @param path Position path. See {@link module:engine/model/position~Position#path}.\n   * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n   */\n  constructor(root2, path, stickiness = \"toNone\") {\n    super();\n    if (!root2.is(\"element\") && !root2.is(\"documentFragment\")) {\n      throw new CKEditorError(\"model-position-root-invalid\", root2);\n    }\n    if (!(path instanceof Array) || path.length === 0) {\n      throw new CKEditorError(\"model-position-path-incorrect-format\", root2, { path });\n    }\n    if (root2.is(\"rootElement\")) {\n      path = path.slice();\n    } else {\n      path = [...root2.getPath(), ...path];\n      root2 = root2.root;\n    }\n    this.root = root2;\n    this.path = path;\n    this.stickiness = stickiness;\n  }\n  /**\n   * Offset at which this position is located in its {@link module:engine/model/position~Position#parent parent}. It is equal\n   * to the last item in position {@link module:engine/model/position~Position#path path}.\n   *\n   * @type {Number}\n   */\n  get offset() {\n    return this.path[this.path.length - 1];\n  }\n  set offset(newOffset) {\n    this.path[this.path.length - 1] = newOffset;\n  }\n  /**\n   * Parent element of this position.\n   *\n   * Keep in mind that `parent` value is calculated when the property is accessed.\n   * If {@link module:engine/model/position~Position#path position path}\n   * leads to a non-existing element, `parent` property will throw error.\n   *\n   * Also it is a good idea to cache `parent` property if it is used frequently in an algorithm (i.e. in a long loop).\n   */\n  get parent() {\n    let parent2 = this.root;\n    for (let i = 0; i < this.path.length - 1; i++) {\n      parent2 = parent2.getChild(parent2.offsetToIndex(this.path[i]));\n      if (!parent2) {\n        throw new CKEditorError(\"model-position-path-incorrect\", this, { position: this });\n      }\n    }\n    if (parent2.is(\"$text\")) {\n      throw new CKEditorError(\"model-position-path-incorrect\", this, { position: this });\n    }\n    return parent2;\n  }\n  /**\n   * Position {@link module:engine/model/position~Position#offset offset} converted to an index in position's parent node. It is\n   * equal to the {@link module:engine/model/node~Node#index index} of a node after this position. If position is placed\n   * in text node, position index is equal to the index of that text node.\n   */\n  get index() {\n    return this.parent.offsetToIndex(this.offset);\n  }\n  /**\n   * Returns {@link module:engine/model/text~Text text node} instance in which this position is placed or `null` if this\n   * position is not in a text node.\n   */\n  get textNode() {\n    return getTextNodeAtPosition(this, this.parent);\n  }\n  /**\n   * Node directly after this position or `null` if this position is in text node.\n   */\n  get nodeAfter() {\n    const parent2 = this.parent;\n    return getNodeAfterPosition(this, parent2, getTextNodeAtPosition(this, parent2));\n  }\n  /**\n   * Node directly before this position or `null` if this position is in text node.\n   */\n  get nodeBefore() {\n    const parent2 = this.parent;\n    return getNodeBeforePosition(this, parent2, getTextNodeAtPosition(this, parent2));\n  }\n  /**\n   * Is `true` if position is at the beginning of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n   */\n  get isAtStart() {\n    return this.offset === 0;\n  }\n  /**\n   * Is `true` if position is at the end of its {@link module:engine/model/position~Position#parent parent}, `false` otherwise.\n   */\n  get isAtEnd() {\n    return this.offset == this.parent.maxOffset;\n  }\n  /**\n   * Checks whether this position is before or after given position.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   */\n  compareWith(otherPosition) {\n    if (this.root != otherPosition.root) {\n      return \"different\";\n    }\n    const result = compareArrays(this.path, otherPosition.path);\n    switch (result) {\n      case \"same\":\n        return \"same\";\n      case \"prefix\":\n        return \"before\";\n      case \"extension\":\n        return \"after\";\n      default:\n        return this.path[result] < otherPosition.path[result] ? \"before\" : \"after\";\n    }\n  }\n  /**\n   * Gets the farthest position which matches the callback using\n   * {@link module:engine/model/treewalker~TreeWalker TreeWalker}.\n   *\n   * For example:\n   *\n   * ```ts\n   * getLastMatchingPosition( value => value.type == 'text' );\n   * // <paragraph>[]foo</paragraph> -> <paragraph>foo[]</paragraph>\n   *\n   * getLastMatchingPosition( value => value.type == 'text', { direction: 'backward' } );\n   * // <paragraph>foo[]</paragraph> -> <paragraph>[]foo</paragraph>\n   *\n   * getLastMatchingPosition( value => false );\n   * // Do not move the position.\n   * ```\n   *\n   * @param skip Callback function. Gets {@link module:engine/model/treewalker~TreeWalkerValue} and should\n   * return `true` if the value should be skipped or `false` if not.\n   * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n   *\n   * @returns The position after the last item which matches the `skip` callback test.\n   */\n  getLastMatchingPosition(skip, options = {}) {\n    options.startPosition = this;\n    const treeWalker = new TreeWalker2(options);\n    treeWalker.skip(skip);\n    return treeWalker.position;\n  }\n  /**\n   * Returns a path to this position's parent. Parent path is equal to position {@link module:engine/model/position~Position#path path}\n   * but without the last item.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @returns Path to the parent.\n   */\n  getParentPath() {\n    return this.path.slice(0, -1);\n  }\n  /**\n   * Returns ancestors array of this position, that is this position's parent and its ancestors.\n   *\n   * @returns Array with ancestors.\n   */\n  getAncestors() {\n    const parent2 = this.parent;\n    if (parent2.is(\"documentFragment\")) {\n      return [parent2];\n    } else {\n      return parent2.getAncestors({ includeSelf: true });\n    }\n  }\n  /**\n   * Returns the parent element of the given name. Returns null if the position is not inside the desired parent.\n   *\n   * @param parentName The name of the parent element to find.\n   */\n  findAncestor(parentName) {\n    const parent2 = this.parent;\n    if (parent2.is(\"element\")) {\n      return parent2.findAncestor(parentName, { includeSelf: true });\n    }\n    return null;\n  }\n  /**\n   * Returns the slice of two position {@link #path paths} which is identical. The {@link #root roots}\n   * of these two paths must be identical.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param position The second position.\n   * @returns The common path.\n   */\n  getCommonPath(position) {\n    if (this.root != position.root) {\n      return [];\n    }\n    const cmp = compareArrays(this.path, position.path);\n    const diffAt = typeof cmp == \"string\" ? Math.min(this.path.length, position.path.length) : cmp;\n    return this.path.slice(0, diffAt);\n  }\n  /**\n   * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n   * which is a common ancestor of both positions. The {@link #root roots} of these two positions must be identical.\n   *\n   * @param position The second position.\n   */\n  getCommonAncestor(position) {\n    const ancestorsA = this.getAncestors();\n    const ancestorsB = position.getAncestors();\n    let i = 0;\n    while (ancestorsA[i] == ancestorsB[i] && ancestorsA[i]) {\n      i++;\n    }\n    return i === 0 ? null : ancestorsA[i - 1];\n  }\n  /**\n   * Returns a new instance of `Position`, that has same {@link #parent parent} but it's offset\n   * is shifted by `shift` value (can be a negative value).\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param shift Offset shift. Can be a negative value.\n   * @returns Shifted position.\n   */\n  getShiftedBy(shift) {\n    const shifted = this.clone();\n    const offset = shifted.offset + shift;\n    shifted.offset = offset < 0 ? 0 : offset;\n    return shifted;\n  }\n  /**\n   * Checks whether this position is after given position.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @see module:engine/model/position~Position#isBefore\n   * @param  otherPosition Position to compare with.\n   * @returns True if this position is after given position.\n   */\n  isAfter(otherPosition) {\n    return this.compareWith(otherPosition) == \"after\";\n  }\n  /**\n   * Checks whether this position is before given position.\n   *\n   * **Note:** watch out when using negation of the value returned by this method, because the negation will also\n   * be `true` if positions are in different roots and you might not expect this. You should probably use\n   * `a.isAfter( b ) || a.isEqual( b )` or `!a.isBefore( p ) && a.root == b.root` in most scenarios. If your\n   * condition uses multiple `isAfter` and `isBefore` checks, build them so they do not use negated values, i.e.:\n   *\n   * ```ts\n   * if ( a.isBefore( b ) && c.isAfter( d ) ) {\n   * \t// do A.\n   * } else {\n   * \t// do B.\n   * }\n   * ```\n   *\n   * or, if you have only one if-branch:\n   *\n   * ```ts\n   * if ( !( a.isBefore( b ) && c.isAfter( d ) ) {\n   * \t// do B.\n   * }\n   * ```\n   *\n   * rather than:\n   *\n   * ```ts\n   * if ( !a.isBefore( b ) || && !c.isAfter( d ) ) {\n   * \t// do B.\n   * } else {\n   * \t// do A.\n   * }\n   * ```\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param otherPosition Position to compare with.\n   * @returns True if this position is before given position.\n   */\n  isBefore(otherPosition) {\n    return this.compareWith(otherPosition) == \"before\";\n  }\n  /**\n   * Checks whether this position is equal to given position.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param otherPosition Position to compare with.\n   * @returns True if positions are same.\n   */\n  isEqual(otherPosition) {\n    return this.compareWith(otherPosition) == \"same\";\n  }\n  /**\n   * Checks whether this position is touching given position. Positions touch when there are no text nodes\n   * or empty nodes in a range between them. Technically, those positions are not equal but in many cases\n   * they are very similar or even indistinguishable.\n   *\n   * @param otherPosition Position to compare with.\n   * @returns True if positions touch.\n   */\n  isTouching(otherPosition) {\n    if (this.root !== otherPosition.root) {\n      return false;\n    }\n    const commonLevel = Math.min(this.path.length, otherPosition.path.length);\n    for (let level = 0; level < commonLevel; level++) {\n      const diff2 = this.path[level] - otherPosition.path[level];\n      if (diff2 < -1 || diff2 > 1) {\n        return false;\n      } else if (diff2 === 1) {\n        return checkTouchingBranch(otherPosition, this, level);\n      } else if (diff2 === -1) {\n        return checkTouchingBranch(this, otherPosition, level);\n      }\n    }\n    if (this.path.length === otherPosition.path.length) {\n      return true;\n    } else if (this.path.length > otherPosition.path.length) {\n      return checkOnlyZeroes(this.path, commonLevel);\n    } else {\n      return checkOnlyZeroes(otherPosition.path, commonLevel);\n    }\n  }\n  /**\n   * Checks if two positions are in the same parent.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param position Position to compare with.\n   * @returns `true` if positions have the same parent, `false` otherwise.\n   */\n  hasSameParentAs(position) {\n    if (this.root !== position.root) {\n      return false;\n    }\n    const thisParentPath = this.getParentPath();\n    const posParentPath = position.getParentPath();\n    return compareArrays(thisParentPath, posParentPath) == \"same\";\n  }\n  /**\n   * Returns a copy of this position that is transformed by given `operation`.\n   *\n   * The new position's parameters are updated accordingly to the effect of the `operation`.\n   *\n   * For example, if `n` nodes are inserted before the position, the returned position {@link ~Position#offset} will be\n   * increased by `n`. If the position was in a merged element, it will be accordingly moved to the new element, etc.\n   *\n   * This method is safe to use it on non-existing positions (for example during operational transformation).\n   *\n   * @param operation Operation to transform by.\n   * @returns Transformed position.\n   */\n  getTransformedByOperation(operation) {\n    let result;\n    switch (operation.type) {\n      case \"insert\":\n        result = this._getTransformedByInsertOperation(operation);\n        break;\n      case \"move\":\n      case \"remove\":\n      case \"reinsert\":\n        result = this._getTransformedByMoveOperation(operation);\n        break;\n      case \"split\":\n        result = this._getTransformedBySplitOperation(operation);\n        break;\n      case \"merge\":\n        result = this._getTransformedByMergeOperation(operation);\n        break;\n      default:\n        result = _Position._createAt(this);\n        break;\n    }\n    return result;\n  }\n  /**\n   * Returns a copy of this position transformed by an insert operation.\n   *\n   * @internal\n   */\n  _getTransformedByInsertOperation(operation) {\n    return this._getTransformedByInsertion(operation.position, operation.howMany);\n  }\n  /**\n   * Returns a copy of this position transformed by a move operation.\n   *\n   * @internal\n   */\n  _getTransformedByMoveOperation(operation) {\n    return this._getTransformedByMove(operation.sourcePosition, operation.targetPosition, operation.howMany);\n  }\n  /**\n   * Returns a copy of this position transformed by a split operation.\n   *\n   * @internal\n   */\n  _getTransformedBySplitOperation(operation) {\n    const movedRange = operation.movedRange;\n    const isContained = movedRange.containsPosition(this) || movedRange.start.isEqual(this) && this.stickiness == \"toNext\";\n    if (isContained) {\n      return this._getCombined(operation.splitPosition, operation.moveTargetPosition);\n    } else {\n      if (operation.graveyardPosition) {\n        return this._getTransformedByMove(operation.graveyardPosition, operation.insertionPosition, 1);\n      } else {\n        return this._getTransformedByInsertion(operation.insertionPosition, 1);\n      }\n    }\n  }\n  /**\n   * Returns a copy of this position transformed by merge operation.\n   *\n   * @internal\n   */\n  _getTransformedByMergeOperation(operation) {\n    const movedRange = operation.movedRange;\n    const isContained = movedRange.containsPosition(this) || movedRange.start.isEqual(this);\n    let pos;\n    if (isContained) {\n      pos = this._getCombined(operation.sourcePosition, operation.targetPosition);\n      if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n        pos = pos._getTransformedByDeletion(operation.deletionPosition, 1);\n      }\n    } else if (this.isEqual(operation.deletionPosition)) {\n      pos = _Position._createAt(operation.deletionPosition);\n    } else {\n      pos = this._getTransformedByMove(operation.deletionPosition, operation.graveyardPosition, 1);\n    }\n    return pos;\n  }\n  /**\n   * Returns a copy of this position that is updated by removing `howMany` nodes starting from `deletePosition`.\n   * It may happen that this position is in a removed node. If that is the case, `null` is returned instead.\n   *\n   * @internal\n   * @param deletePosition Position before the first removed node.\n   * @param howMany How many nodes are removed.\n   * @returns Transformed position or `null`.\n   */\n  _getTransformedByDeletion(deletePosition, howMany) {\n    const transformed = _Position._createAt(this);\n    if (this.root != deletePosition.root) {\n      return transformed;\n    }\n    if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == \"same\") {\n      if (deletePosition.offset < this.offset) {\n        if (deletePosition.offset + howMany > this.offset) {\n          return null;\n        } else {\n          transformed.offset -= howMany;\n        }\n      }\n    } else if (compareArrays(deletePosition.getParentPath(), this.getParentPath()) == \"prefix\") {\n      const i = deletePosition.path.length - 1;\n      if (deletePosition.offset <= this.path[i]) {\n        if (deletePosition.offset + howMany > this.path[i]) {\n          return null;\n        } else {\n          transformed.path[i] -= howMany;\n        }\n      }\n    }\n    return transformed;\n  }\n  /**\n   * Returns a copy of this position that is updated by inserting `howMany` nodes at `insertPosition`.\n   *\n   * @internal\n   * @param insertPosition Position where nodes are inserted.\n   * @param howMany How many nodes are inserted.\n   * @returns Transformed position.\n   */\n  _getTransformedByInsertion(insertPosition, howMany) {\n    const transformed = _Position._createAt(this);\n    if (this.root != insertPosition.root) {\n      return transformed;\n    }\n    if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == \"same\") {\n      if (insertPosition.offset < this.offset || insertPosition.offset == this.offset && this.stickiness != \"toPrevious\") {\n        transformed.offset += howMany;\n      }\n    } else if (compareArrays(insertPosition.getParentPath(), this.getParentPath()) == \"prefix\") {\n      const i = insertPosition.path.length - 1;\n      if (insertPosition.offset <= this.path[i]) {\n        transformed.path[i] += howMany;\n      }\n    }\n    return transformed;\n  }\n  /**\n   * Returns a copy of this position that is updated by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n   *\n   * @internal\n   * @param sourcePosition Position before the first element to move.\n   * @param targetPosition Position where moved elements will be inserted.\n   * @param howMany How many consecutive nodes to move, starting from `sourcePosition`.\n   * @returns Transformed position.\n   */\n  _getTransformedByMove(sourcePosition, targetPosition, howMany) {\n    targetPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n    if (sourcePosition.isEqual(targetPosition)) {\n      return _Position._createAt(this);\n    }\n    const transformed = this._getTransformedByDeletion(sourcePosition, howMany);\n    const isMoved = transformed === null || sourcePosition.isEqual(this) && this.stickiness == \"toNext\" || sourcePosition.getShiftedBy(howMany).isEqual(this) && this.stickiness == \"toPrevious\";\n    if (isMoved) {\n      return this._getCombined(sourcePosition, targetPosition);\n    } else {\n      return transformed._getTransformedByInsertion(targetPosition, howMany);\n    }\n  }\n  /**\n   * Returns a new position that is a combination of this position and given positions.\n   *\n   * The combined position is a copy of this position transformed by moving a range starting at `source` position\n   * to the `target` position. It is expected that this position is inside the moved range.\n   *\n   * Example:\n   *\n   * ```ts\n   * let original = model.createPositionFromPath( root, [ 2, 3, 1 ] );\n   * let source = model.createPositionFromPath( root, [ 2, 2 ] );\n   * let target = model.createPositionFromPath( otherRoot, [ 1, 1, 3 ] );\n   * original._getCombined( source, target ); // path is [ 1, 1, 4, 1 ], root is `otherRoot`\n   * ```\n   *\n   * Explanation:\n   *\n   * We have a position `[ 2, 3, 1 ]` and move some nodes from `[ 2, 2 ]` to `[ 1, 1, 3 ]`. The original position\n   * was inside moved nodes and now should point to the new place. The moved nodes will be after\n   * positions `[ 1, 1, 3 ]`, `[ 1, 1, 4 ]`, `[ 1, 1, 5 ]`. Since our position was in the second moved node,\n   * the transformed position will be in a sub-tree of a node at `[ 1, 1, 4 ]`. Looking at original path, we\n   * took care of `[ 2, 3 ]` part of it. Now we have to add the rest of the original path to the transformed path.\n   * Finally, the transformed position will point to `[ 1, 1, 4, 1 ]`.\n   *\n   * @internal\n   * @param source Beginning of the moved range.\n   * @param target Position where the range is moved.\n   * @returns Combined position.\n   */\n  _getCombined(source, target) {\n    const i = source.path.length - 1;\n    const combined = _Position._createAt(target);\n    combined.stickiness = this.stickiness;\n    combined.offset = combined.offset + this.path[i] - source.offset;\n    combined.path = [...combined.path, ...this.path.slice(i + 1)];\n    return combined;\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    return {\n      root: this.root.toJSON(),\n      path: Array.from(this.path),\n      stickiness: this.stickiness\n    };\n  }\n  /**\n   * Returns a new position that is equal to current position.\n   */\n  clone() {\n    return new this.constructor(this.root, this.path, this.stickiness);\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/model/position~Position position},\n   * * parent element and offset (offset defaults to `0`),\n   * * parent element and `'end'` (sets position at the end of that element),\n   * * {@link module:engine/model/item~Item model item} and `'before'` or `'after'` (sets position before or after given model item).\n   *\n   * This method is a shortcut to other factory methods such as:\n   *\n   * * {@link module:engine/model/position~Position._createBefore},\n   * * {@link module:engine/model/position~Position._createAfter}.\n   *\n   * @internal\n   * @param offset Offset or one of the flags. Used only when the first parameter is a {@link module:engine/model/item~Item model item}.\n   * @param stickiness Position stickiness. Used only when the first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  static _createAt(itemOrPosition, offset, stickiness = \"toNone\") {\n    if (itemOrPosition instanceof _Position) {\n      return new _Position(itemOrPosition.root, itemOrPosition.path, itemOrPosition.stickiness);\n    } else {\n      const node = itemOrPosition;\n      if (offset == \"end\") {\n        offset = node.maxOffset;\n      } else if (offset == \"before\") {\n        return this._createBefore(node, stickiness);\n      } else if (offset == \"after\") {\n        return this._createAfter(node, stickiness);\n      } else if (offset !== 0 && !offset) {\n        throw new CKEditorError(\"model-createpositionat-offset-required\", [this, itemOrPosition]);\n      }\n      if (!node.is(\"element\") && !node.is(\"documentFragment\")) {\n        throw new CKEditorError(\"model-position-parent-incorrect\", [this, itemOrPosition]);\n      }\n      const path = node.getPath();\n      path.push(offset);\n      return new this(node.root, path, stickiness);\n    }\n  }\n  /**\n   * Creates a new position, after given {@link module:engine/model/item~Item model item}.\n   *\n   * @internal\n   * @param item Item after which the position should be placed.\n   * @param stickiness Position stickiness.\n   */\n  static _createAfter(item, stickiness) {\n    if (!item.parent) {\n      throw new CKEditorError(\"model-position-after-root\", [this, item], { root: item });\n    }\n    return this._createAt(item.parent, item.endOffset, stickiness);\n  }\n  /**\n   * Creates a new position, before the given {@link module:engine/model/item~Item model item}.\n   *\n   * @internal\n   * @param item Item before which the position should be placed.\n   * @param stickiness Position stickiness.\n   */\n  static _createBefore(item, stickiness) {\n    if (!item.parent) {\n      throw new CKEditorError(\"model-position-before-root\", item, { root: item });\n    }\n    return this._createAt(item.parent, item.startOffset, stickiness);\n  }\n  /**\n   * Creates a `Position` instance from given plain object (i.e. parsed JSON string).\n   *\n   * @param json Plain object to be converted to `Position`.\n   * @param doc Document object that will be position owner.\n   * @returns `Position` instance created using given plain object.\n   */\n  static fromJSON(json, doc) {\n    if (json.root === \"$graveyard\") {\n      const pos = new _Position(doc.graveyard, json.path);\n      pos.stickiness = json.stickiness;\n      return pos;\n    }\n    if (!doc.getRoot(json.root)) {\n      throw new CKEditorError(\"model-position-fromjson-no-root\", doc, { rootName: json.root });\n    }\n    return new _Position(doc.getRoot(json.root), json.path, json.stickiness);\n  }\n};\nPosition2.prototype.is = function(type) {\n  return type === \"position\" || type === \"model:position\";\n};\nfunction getTextNodeAtPosition(position, positionParent) {\n  const node = positionParent.getChild(positionParent.offsetToIndex(position.offset));\n  if (node && node.is(\"$text\") && node.startOffset < position.offset) {\n    return node;\n  }\n  return null;\n}\nfunction getNodeAfterPosition(position, positionParent, textNode) {\n  if (textNode !== null) {\n    return null;\n  }\n  return positionParent.getChild(positionParent.offsetToIndex(position.offset));\n}\nfunction getNodeBeforePosition(position, positionParent, textNode) {\n  if (textNode !== null) {\n    return null;\n  }\n  return positionParent.getChild(positionParent.offsetToIndex(position.offset) - 1);\n}\nfunction checkTouchingBranch(left, right, level) {\n  if (level + 1 === left.path.length) {\n    return false;\n  }\n  if (!checkOnlyZeroes(right.path, level + 1)) {\n    return false;\n  }\n  if (!checkOnlyMaxOffset(left, level + 1)) {\n    return false;\n  }\n  return true;\n}\nfunction checkOnlyZeroes(arr, idx) {\n  while (idx < arr.length) {\n    if (arr[idx] !== 0) {\n      return false;\n    }\n    idx++;\n  }\n  return true;\n}\nfunction checkOnlyMaxOffset(pos, level) {\n  let parent2 = pos.parent;\n  let idx = pos.path.length - 1;\n  let add = 0;\n  while (idx >= level) {\n    if (pos.path[idx] + add !== parent2.maxOffset) {\n      return false;\n    }\n    add = 1;\n    idx--;\n    parent2 = parent2.parent;\n  }\n  return true;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/range.js\nvar Range2 = class _Range extends TypeCheckable2 {\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * @param start The start position.\n   * @param end The end position. If not set, the range will be collapsed at the `start` position.\n   */\n  constructor(start, end) {\n    super();\n    this.start = Position2._createAt(start);\n    this.end = end ? Position2._createAt(end) : Position2._createAt(start);\n    this.start.stickiness = this.isCollapsed ? \"toNone\" : \"toNext\";\n    this.end.stickiness = this.isCollapsed ? \"toNone\" : \"toPrevious\";\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n   * them together with additional information like length or {@link module:engine/model/position~Position positions},\n   * grouped as {@link module:engine/model/treewalker~TreeWalkerValue}.\n   * It iterates over all {@link module:engine/model/textproxy~TextProxy text contents} that are inside the range\n   * and all the {@link module:engine/model/element~Element}s that are entered into when iterating over this range.\n   *\n   * This iterator uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range\n   * and `ignoreElementEnd` option set to `true`.\n   */\n  *[Symbol.iterator]() {\n    yield* new TreeWalker2({ boundaries: this, ignoreElementEnd: true });\n  }\n  /**\n   * Describes whether the range is collapsed, that is if {@link #start} and\n   * {@link #end} positions are equal.\n   */\n  get isCollapsed() {\n    return this.start.isEqual(this.end);\n  }\n  /**\n   * Describes whether this range is flat, that is if {@link #start} position and\n   * {@link #end} position are in the same {@link module:engine/model/position~Position#parent}.\n   */\n  get isFlat() {\n    const startParentPath = this.start.getParentPath();\n    const endParentPath = this.end.getParentPath();\n    return compareArrays(startParentPath, endParentPath) == \"same\";\n  }\n  /**\n   * Range root element.\n   */\n  get root() {\n    return this.start.root;\n  }\n  /**\n   * Checks whether this range contains given {@link module:engine/model/position~Position position}.\n   *\n   * @param position Position to check.\n   * @returns `true` if given {@link module:engine/model/position~Position position} is contained\n   * in this range,`false` otherwise.\n   */\n  containsPosition(position) {\n    return position.isAfter(this.start) && position.isBefore(this.end);\n  }\n  /**\n   * Checks whether this range contains given {@link ~Range range}.\n   *\n   * @param otherRange Range to check.\n   * @param loose Whether the check is loose or strict. If the check is strict (`false`), compared range cannot\n   * start or end at the same position as this range boundaries. If the check is loose (`true`), compared range can start, end or\n   * even be equal to this range. Note that collapsed ranges are always compared in strict mode.\n   * @returns {Boolean} `true` if given {@link ~Range range} boundaries are contained by this range, `false` otherwise.\n   */\n  containsRange(otherRange, loose = false) {\n    if (otherRange.isCollapsed) {\n      loose = false;\n    }\n    const containsStart = this.containsPosition(otherRange.start) || loose && this.start.isEqual(otherRange.start);\n    const containsEnd = this.containsPosition(otherRange.end) || loose && this.end.isEqual(otherRange.end);\n    return containsStart && containsEnd;\n  }\n  /**\n   * Checks whether given {@link module:engine/model/item~Item} is inside this range.\n   */\n  containsItem(item) {\n    const pos = Position2._createBefore(item);\n    return this.containsPosition(pos) || this.start.isEqual(pos);\n  }\n  /**\n   * Two ranges are equal if their {@link #start} and {@link #end} positions are equal.\n   *\n   * @param otherRange Range to compare with.\n   * @returns `true` if ranges are equal, `false` otherwise.\n   */\n  isEqual(otherRange) {\n    return this.start.isEqual(otherRange.start) && this.end.isEqual(otherRange.end);\n  }\n  /**\n   * Checks and returns whether this range intersects with given range.\n   *\n   * @param otherRange Range to compare with.\n   * @returns `true` if ranges intersect, `false` otherwise.\n   */\n  isIntersecting(otherRange) {\n    return this.start.isBefore(otherRange.end) && this.end.isAfter(otherRange.start);\n  }\n  /**\n   * Computes which part(s) of this {@link ~Range range} is not a part of given {@link ~Range range}.\n   * Returned array contains zero, one or two {@link ~Range ranges}.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let range = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n   * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n   * );\n   * let otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n   * let transformed = range.getDifference( otherRange );\n   * // transformed array has no ranges because `otherRange` contains `range`\n   *\n   * otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 3 ] ) );\n   * transformed = range.getDifference( otherRange );\n   * // transformed array has one range: from [ 3 ] to [ 4, 0, 1 ]\n   *\n   * otherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 4 ] ) );\n   * transformed = range.getDifference( otherRange );\n   * // transformed array has two ranges: from [ 2, 7 ] to [ 3 ] and from [ 4 ] to [ 4, 0, 1 ]\n   * ```\n   *\n   * @param otherRange Range to differentiate against.\n   * @returns The difference between ranges.\n   */\n  getDifference(otherRange) {\n    const ranges = [];\n    if (this.isIntersecting(otherRange)) {\n      if (this.containsPosition(otherRange.start)) {\n        ranges.push(new _Range(this.start, otherRange.start));\n      }\n      if (this.containsPosition(otherRange.end)) {\n        ranges.push(new _Range(otherRange.end, this.end));\n      }\n    } else {\n      ranges.push(new _Range(this.start, this.end));\n    }\n    return ranges;\n  }\n  /**\n   * Returns an intersection of this {@link ~Range range} and given {@link ~Range range}.\n   * Intersection is a common part of both of those ranges. If ranges has no common part, returns `null`.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let range = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n   * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n   * );\n   * let otherRange = model.createRange( model.createPositionFromPath( root, [ 1 ] ), model.createPositionFromPath( root, [ 2 ] ) );\n   * let transformed = range.getIntersection( otherRange ); // null - ranges have no common part\n   *\n   * otherRange = model.createRange( model.createPositionFromPath( root, [ 3 ] ), model.createPositionFromPath( root, [ 5 ] ) );\n   * transformed = range.getIntersection( otherRange ); // range from [ 3 ] to [ 4, 0, 1 ]\n   * ```\n   *\n   * @param otherRange Range to check for intersection.\n   * @returns A common part of given ranges or `null` if ranges have no common part.\n   */\n  getIntersection(otherRange) {\n    if (this.isIntersecting(otherRange)) {\n      let commonRangeStart = this.start;\n      let commonRangeEnd = this.end;\n      if (this.containsPosition(otherRange.start)) {\n        commonRangeStart = otherRange.start;\n      }\n      if (this.containsPosition(otherRange.end)) {\n        commonRangeEnd = otherRange.end;\n      }\n      return new _Range(commonRangeStart, commonRangeEnd);\n    }\n    return null;\n  }\n  /**\n   * Returns a range created by joining this {@link ~Range range} with the given {@link ~Range range}.\n   * If ranges have no common part, returns `null`.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let range = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n   * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n   * );\n   * let otherRange = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 1 ] ),\n   * \tmodel.createPositionFromPath( root, [ 2 ] )\n   * );\n   * let transformed = range.getJoined( otherRange ); // null - ranges have no common part\n   *\n   * otherRange = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 3 ] ),\n   * \tmodel.createPositionFromPath( root, [ 5 ] )\n   * );\n   * transformed = range.getJoined( otherRange ); // range from [ 2, 7 ] to [ 5 ]\n   * ```\n   *\n   * @param otherRange Range to be joined.\n   * @param loose Whether the intersection check is loose or strict. If the check is strict (`false`),\n   * ranges are tested for intersection or whether start/end positions are equal. If the check is loose (`true`),\n   * compared range is also checked if it's {@link module:engine/model/position~Position#isTouching touching} current range.\n   * @returns A sum of given ranges or `null` if ranges have no common part.\n   */\n  getJoined(otherRange, loose = false) {\n    let shouldJoin = this.isIntersecting(otherRange);\n    if (!shouldJoin) {\n      if (this.start.isBefore(otherRange.start)) {\n        shouldJoin = loose ? this.end.isTouching(otherRange.start) : this.end.isEqual(otherRange.start);\n      } else {\n        shouldJoin = loose ? otherRange.end.isTouching(this.start) : otherRange.end.isEqual(this.start);\n      }\n    }\n    if (!shouldJoin) {\n      return null;\n    }\n    let startPosition = this.start;\n    let endPosition = this.end;\n    if (otherRange.start.isBefore(startPosition)) {\n      startPosition = otherRange.start;\n    }\n    if (otherRange.end.isAfter(endPosition)) {\n      endPosition = otherRange.end;\n    }\n    return new _Range(startPosition, endPosition);\n  }\n  /**\n   * Computes and returns the smallest set of {@link #isFlat flat} ranges, that covers this range in whole.\n   *\n   * See an example of a model structure (`[` and `]` are range boundaries):\n   *\n   * ```\n   * root                                                            root\n   *  |- element DIV                         DIV             P2              P3             DIV\n   *  |   |- element H                   H        P1        f o o           b a r       H         P4\n   *  |   |   |- \"fir[st\"             fir[st     lorem                               se]cond     ipsum\n   *  |   |- element P1\n   *  |   |   |- \"lorem\"                                              ||\n   *  |- element P2                                                   ||\n   *  |   |- \"foo\"                                                    VV\n   *  |- element P3\n   *  |   |- \"bar\"                                                   root\n   *  |- element DIV                         DIV             [P2             P3]             DIV\n   *  |   |- element H                   H       [P1]       f o o           b a r        H         P4\n   *  |   |   |- \"se]cond\"            fir[st]    lorem                               [se]cond     ipsum\n   *  |   |- element P4\n   *  |   |   |- \"ipsum\"\n   * ```\n   *\n   * As it can be seen, letters contained in the range are: `stloremfoobarse`, spread across different parents.\n   * We are looking for minimal set of flat ranges that contains the same nodes.\n   *\n   * Minimal flat ranges for above range `( [ 0, 0, 3 ], [ 3, 0, 2 ] )` will be:\n   *\n   * ```\n   * ( [ 0, 0, 3 ], [ 0, 0, 5 ] ) = \"st\"\n   * ( [ 0, 1 ], [ 0, 2 ] ) = element P1 (\"lorem\")\n   * ( [ 1 ], [ 3 ] ) = element P2, element P3 (\"foobar\")\n   * ( [ 3, 0, 0 ], [ 3, 0, 2 ] ) = \"se\"\n   * ```\n   *\n   * **Note:** if an {@link module:engine/model/element~Element element} is not wholly contained in this range, it won't be returned\n   * in any of the returned flat ranges. See in the example how `H` elements at the beginning and at the end of the range\n   * were omitted. Only their parts that were wholly in the range were returned.\n   *\n   * **Note:** this method is not returning flat ranges that contain no nodes.\n   *\n   * @returns Array of flat ranges covering this range.\n   */\n  getMinimalFlatRanges() {\n    const ranges = [];\n    const diffAt = this.start.getCommonPath(this.end).length;\n    const pos = Position2._createAt(this.start);\n    let posParent = pos.parent;\n    while (pos.path.length > diffAt + 1) {\n      const howMany = posParent.maxOffset - pos.offset;\n      if (howMany !== 0) {\n        ranges.push(new _Range(pos, pos.getShiftedBy(howMany)));\n      }\n      pos.path = pos.path.slice(0, -1);\n      pos.offset++;\n      posParent = posParent.parent;\n    }\n    while (pos.path.length <= this.end.path.length) {\n      const offset = this.end.path[pos.path.length - 1];\n      const howMany = offset - pos.offset;\n      if (howMany !== 0) {\n        ranges.push(new _Range(pos, pos.getShiftedBy(howMany)));\n      }\n      pos.offset = offset;\n      pos.path.push(0);\n    }\n    return ranges;\n  }\n  /**\n   * Creates a {@link module:engine/model/treewalker~TreeWalker TreeWalker} instance with this range as a boundary.\n   *\n   * For example, to iterate over all items in the entire document root:\n   *\n   * ```ts\n   * // Create a range spanning over the entire root content:\n   * const range = editor.model.createRangeIn( editor.model.document.getRoot() );\n   *\n   * // Iterate over all items in this range:\n   * for ( const value of range.getWalker() ) {\n   * \tconsole.log( value.item );\n   * }\n   * ```\n   *\n   * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n   */\n  getWalker(options = {}) {\n    options.boundaries = this;\n    return new TreeWalker2(options);\n  }\n  /**\n   * Returns an iterator that iterates over all {@link module:engine/model/item~Item items} that are in this range and returns\n   * them.\n   *\n   * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range and `ignoreElementEnd` option\n   * set to `true`. However it returns only {@link module:engine/model/item~Item model items},\n   * not {@link module:engine/model/treewalker~TreeWalkerValue}.\n   *\n   * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n   * a full list of available options.\n   *\n   * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n   */\n  *getItems(options = {}) {\n    options.boundaries = this;\n    options.ignoreElementEnd = true;\n    const treeWalker = new TreeWalker2(options);\n    for (const value of treeWalker) {\n      yield value.item;\n    }\n  }\n  /**\n   * Returns an iterator that iterates over all {@link module:engine/model/position~Position positions} that are boundaries or\n   * contained in this range.\n   *\n   * This method uses {@link module:engine/model/treewalker~TreeWalker} with `boundaries` set to this range. However it returns only\n   * {@link module:engine/model/position~Position positions}, not {@link module:engine/model/treewalker~TreeWalkerValue}.\n   *\n   * You may specify additional options for the tree walker. See {@link module:engine/model/treewalker~TreeWalker} for\n   * a full list of available options.\n   *\n   * @param options Object with configuration options. See {@link module:engine/model/treewalker~TreeWalker}.\n   */\n  *getPositions(options = {}) {\n    options.boundaries = this;\n    const treeWalker = new TreeWalker2(options);\n    yield treeWalker.position;\n    for (const value of treeWalker) {\n      yield value.nextPosition;\n    }\n  }\n  /**\n   * Returns a range that is a result of transforming this range by given `operation`.\n   *\n   * **Note:** transformation may break one range into multiple ranges (for example, when a part of the range is\n   * moved to a different part of document tree). For this reason, an array is returned by this method and it\n   * may contain one or more `Range` instances.\n   *\n   * @param operation Operation to transform range by.\n   * @returns Range which is the result of transformation.\n   */\n  getTransformedByOperation(operation) {\n    switch (operation.type) {\n      case \"insert\":\n        return this._getTransformedByInsertOperation(operation);\n      case \"move\":\n      case \"remove\":\n      case \"reinsert\":\n        return this._getTransformedByMoveOperation(operation);\n      case \"split\":\n        return [this._getTransformedBySplitOperation(operation)];\n      case \"merge\":\n        return [this._getTransformedByMergeOperation(operation)];\n    }\n    return [new _Range(this.start, this.end)];\n  }\n  /**\n   * Returns a range that is a result of transforming this range by multiple `operations`.\n   *\n   * @see ~Range#getTransformedByOperation\n   * @param operations Operations to transform the range by.\n   * @returns Range which is the result of transformation.\n   */\n  getTransformedByOperations(operations2) {\n    const ranges = [new _Range(this.start, this.end)];\n    for (const operation of operations2) {\n      for (let i = 0; i < ranges.length; i++) {\n        const result = ranges[i].getTransformedByOperation(operation);\n        ranges.splice(i, 1, ...result);\n        i += result.length - 1;\n      }\n    }\n    for (let i = 0; i < ranges.length; i++) {\n      const range = ranges[i];\n      for (let j = i + 1; j < ranges.length; j++) {\n        const next = ranges[j];\n        if (range.containsRange(next) || next.containsRange(range) || range.isEqual(next)) {\n          ranges.splice(j, 1);\n        }\n      }\n    }\n    return ranges;\n  }\n  /**\n   * Returns an {@link module:engine/model/element~Element} or {@link module:engine/model/documentfragment~DocumentFragment}\n   * which is a common ancestor of the range's both ends (in which the entire range is contained).\n   */\n  getCommonAncestor() {\n    return this.start.getCommonAncestor(this.end);\n  }\n  /**\n   * Returns an {@link module:engine/model/element~Element Element} contained by the range.\n   * The element will be returned when it is the **only** node within the range and **fully–contained**\n   * at the same time.\n   */\n  getContainedElement() {\n    if (this.isCollapsed) {\n      return null;\n    }\n    const nodeAfterStart = this.start.nodeAfter;\n    const nodeBeforeEnd = this.end.nodeBefore;\n    if (nodeAfterStart && nodeAfterStart.is(\"element\") && nodeAfterStart === nodeBeforeEnd) {\n      return nodeAfterStart;\n    }\n    return null;\n  }\n  /**\n   * Converts `Range` to plain object and returns it.\n   *\n   * @returns `Node` converted to plain object.\n   */\n  toJSON() {\n    return {\n      start: this.start.toJSON(),\n      end: this.end.toJSON()\n    };\n  }\n  /**\n   * Returns a new range that is equal to current range.\n   */\n  clone() {\n    return new this.constructor(this.start, this.end);\n  }\n  /**\n   * Returns a result of transforming a copy of this range by insert operation.\n   *\n   * One or more ranges may be returned as a result of this transformation.\n   *\n   * @internal\n   */\n  _getTransformedByInsertOperation(operation, spread = false) {\n    return this._getTransformedByInsertion(operation.position, operation.howMany, spread);\n  }\n  /**\n   * Returns a result of transforming a copy of this range by move operation.\n   *\n   * One or more ranges may be returned as a result of this transformation.\n   *\n   * @internal\n   */\n  _getTransformedByMoveOperation(operation, spread = false) {\n    const sourcePosition = operation.sourcePosition;\n    const howMany = operation.howMany;\n    const targetPosition = operation.targetPosition;\n    return this._getTransformedByMove(sourcePosition, targetPosition, howMany, spread);\n  }\n  /**\n   * Returns a result of transforming a copy of this range by split operation.\n   *\n   * Always one range is returned. The transformation is done in a way to not break the range.\n   *\n   * @internal\n   */\n  _getTransformedBySplitOperation(operation) {\n    const start = this.start._getTransformedBySplitOperation(operation);\n    let end = this.end._getTransformedBySplitOperation(operation);\n    if (this.end.isEqual(operation.insertionPosition)) {\n      end = this.end.getShiftedBy(1);\n    }\n    if (start.root != end.root) {\n      end = this.end.getShiftedBy(-1);\n    }\n    return new _Range(start, end);\n  }\n  /**\n   * Returns a result of transforming a copy of this range by merge operation.\n   *\n   * Always one range is returned. The transformation is done in a way to not break the range.\n   *\n   * @internal\n   */\n  _getTransformedByMergeOperation(operation) {\n    if (this.start.isEqual(operation.targetPosition) && this.end.isEqual(operation.deletionPosition)) {\n      return new _Range(this.start);\n    }\n    let start = this.start._getTransformedByMergeOperation(operation);\n    let end = this.end._getTransformedByMergeOperation(operation);\n    if (start.root != end.root) {\n      end = this.end.getShiftedBy(-1);\n    }\n    if (start.isAfter(end)) {\n      if (operation.sourcePosition.isBefore(operation.targetPosition)) {\n        start = Position2._createAt(end);\n        start.offset = 0;\n      } else {\n        if (!operation.deletionPosition.isEqual(start)) {\n          end = operation.deletionPosition;\n        }\n        start = operation.targetPosition;\n      }\n      return new _Range(start, end);\n    }\n    return new _Range(start, end);\n  }\n  /**\n   * Returns an array containing one or two {@link ~Range ranges} that are a result of transforming this\n   * {@link ~Range range} by inserting `howMany` nodes at `insertPosition`. Two {@link ~Range ranges} are\n   * returned if the insertion was inside this {@link ~Range range} and `spread` is set to `true`.\n   *\n   * Examples:\n   *\n   * ```ts\n   * let range = model.createRange(\n   * \tmodel.createPositionFromPath( root, [ 2, 7 ] ),\n   * \tmodel.createPositionFromPath( root, [ 4, 0, 1 ] )\n   * );\n   * let transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 1 ] ), 2 );\n   * // transformed array has one range from [ 4, 7 ] to [ 6, 0, 1 ]\n   *\n   * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 4, 0, 0 ] ), 4 );\n   * // transformed array has one range from [ 2, 7 ] to [ 4, 0, 5 ]\n   *\n   * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4 );\n   * // transformed array has one range, which is equal to original range\n   *\n   * transformed = range._getTransformedByInsertion( model.createPositionFromPath( root, [ 3, 2 ] ), 4, true );\n   * // transformed array has two ranges: from [ 2, 7 ] to [ 3, 2 ] and from [ 3, 6 ] to [ 4, 0, 1 ]\n   * ```\n   *\n   * @internal\n   * @param insertPosition Position where nodes are inserted.\n   * @param howMany How many nodes are inserted.\n   * @param spread Flag indicating whether this range should be spread if insertion\n   * was inside the range. Defaults to `false`.\n   * @returns Result of the transformation.\n   */\n  _getTransformedByInsertion(insertPosition, howMany, spread = false) {\n    if (spread && this.containsPosition(insertPosition)) {\n      return [\n        new _Range(this.start, insertPosition),\n        new _Range(insertPosition.getShiftedBy(howMany), this.end._getTransformedByInsertion(insertPosition, howMany))\n      ];\n    } else {\n      const range = new _Range(this.start, this.end);\n      range.start = range.start._getTransformedByInsertion(insertPosition, howMany);\n      range.end = range.end._getTransformedByInsertion(insertPosition, howMany);\n      return [range];\n    }\n  }\n  /**\n   * Returns an array containing {@link ~Range ranges} that are a result of transforming this\n   * {@link ~Range range} by moving `howMany` nodes from `sourcePosition` to `targetPosition`.\n   *\n   * @internal\n   * @param sourcePosition Position from which nodes are moved.\n   * @param targetPosition Position to where nodes are moved.\n   * @param howMany How many nodes are moved.\n   * @param spread Whether the range should be spread if the move points inside the range.\n   * @returns  Result of the transformation.\n   */\n  _getTransformedByMove(sourcePosition, targetPosition, howMany, spread = false) {\n    if (this.isCollapsed) {\n      const newPos = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n      return [new _Range(newPos)];\n    }\n    const moveRange = _Range._createFromPositionAndShift(sourcePosition, howMany);\n    const insertPosition = targetPosition._getTransformedByDeletion(sourcePosition, howMany);\n    if (this.containsPosition(targetPosition) && !spread) {\n      if (moveRange.containsPosition(this.start) || moveRange.containsPosition(this.end)) {\n        const start = this.start._getTransformedByMove(sourcePosition, targetPosition, howMany);\n        const end = this.end._getTransformedByMove(sourcePosition, targetPosition, howMany);\n        return [new _Range(start, end)];\n      }\n    }\n    let result;\n    const differenceSet = this.getDifference(moveRange);\n    let difference = null;\n    const common = this.getIntersection(moveRange);\n    if (differenceSet.length == 1) {\n      difference = new _Range(differenceSet[0].start._getTransformedByDeletion(sourcePosition, howMany), differenceSet[0].end._getTransformedByDeletion(sourcePosition, howMany));\n    } else if (differenceSet.length == 2) {\n      difference = new _Range(this.start, this.end._getTransformedByDeletion(sourcePosition, howMany));\n    }\n    if (difference) {\n      result = difference._getTransformedByInsertion(insertPosition, howMany, common !== null || spread);\n    } else {\n      result = [];\n    }\n    if (common) {\n      const transformedCommon = new _Range(common.start._getCombined(moveRange.start, insertPosition), common.end._getCombined(moveRange.start, insertPosition));\n      if (result.length == 2) {\n        result.splice(1, 0, transformedCommon);\n      } else {\n        result.push(transformedCommon);\n      }\n    }\n    return result;\n  }\n  /**\n   * Returns a copy of this range that is transformed by deletion of `howMany` nodes from `deletePosition`.\n   *\n   * If the deleted range is intersecting with the transformed range, the transformed range will be shrank.\n   *\n   * If the deleted range contains transformed range, `null` will be returned.\n   *\n   * @internal\n   * @param deletionPosition Position from which nodes are removed.\n   * @param howMany How many nodes are removed.\n   * @returns Result of the transformation.\n   */\n  _getTransformedByDeletion(deletePosition, howMany) {\n    let newStart = this.start._getTransformedByDeletion(deletePosition, howMany);\n    let newEnd = this.end._getTransformedByDeletion(deletePosition, howMany);\n    if (newStart == null && newEnd == null) {\n      return null;\n    }\n    if (newStart == null) {\n      newStart = deletePosition;\n    }\n    if (newEnd == null) {\n      newEnd = deletePosition;\n    }\n    return new _Range(newStart, newEnd);\n  }\n  /**\n   * Creates a new range, spreading from specified {@link module:engine/model/position~Position position} to a position moved by\n   * given `shift`. If `shift` is a negative value, shifted position is treated as the beginning of the range.\n   *\n   * @internal\n   * @param position Beginning of the range.\n   * @param shift How long the range should be.\n   */\n  static _createFromPositionAndShift(position, shift) {\n    const start = position;\n    const end = position.getShiftedBy(shift);\n    return shift > 0 ? new this(start, end) : new this(end, start);\n  }\n  /**\n   * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * @internal\n   * @param element Element which is a parent for the range.\n   */\n  static _createIn(element) {\n    return new this(Position2._createAt(element, 0), Position2._createAt(element, element.maxOffset));\n  }\n  /**\n   * Creates a range that starts before given {@link module:engine/model/item~Item model item} and ends after it.\n   *\n   * @internal\n   */\n  static _createOn(item) {\n    return this._createFromPositionAndShift(Position2._createBefore(item), item.offsetSize);\n  }\n  /**\n   * Combines all ranges from the passed array into a one range. At least one range has to be passed.\n   * Passed ranges must not have common parts.\n   *\n   * The first range from the array is a reference range. If other ranges start or end on the exactly same position where\n   * the reference range, they get combined into one range.\n   *\n   * ```\n   * [  ][]  [    ][ ][             ][ ][]  [  ]  // Passed ranges, shown sorted\n   * [    ]                                       // The result of the function if the first range was a reference range.\n   *         [                           ]        // The result of the function if the third-to-seventh range was a reference range.\n   *                                        [  ]  // The result of the function if the last range was a reference range.\n   * ```\n   *\n   * @internal\n   * @param ranges Ranges to combine.\n   * @returns Combined range.\n   */\n  static _createFromRanges(ranges) {\n    if (ranges.length === 0) {\n      throw new CKEditorError(\"range-create-from-ranges-empty-array\", null);\n    } else if (ranges.length == 1) {\n      return ranges[0].clone();\n    }\n    const ref = ranges[0];\n    ranges.sort((a, b) => {\n      return a.start.isAfter(b.start) ? 1 : -1;\n    });\n    const refIndex = ranges.indexOf(ref);\n    const result = new this(ref.start, ref.end);\n    if (refIndex > 0) {\n      for (let i = refIndex - 1; true; i++) {\n        if (ranges[i].end.isEqual(result.start)) {\n          result.start = Position2._createAt(ranges[i].start);\n        } else {\n          break;\n        }\n      }\n    }\n    for (let i = refIndex + 1; i < ranges.length; i++) {\n      if (ranges[i].start.isEqual(result.end)) {\n        result.end = Position2._createAt(ranges[i].end);\n      } else {\n        break;\n      }\n    }\n    return result;\n  }\n  /**\n   * Creates a `Range` instance from given plain object (i.e. parsed JSON string).\n   *\n   * @param json Plain object to be converted to `Range`.\n   * @param doc Document object that will be range owner.\n   * @returns `Range` instance created using given plain object.\n   */\n  static fromJSON(json, doc) {\n    return new this(Position2.fromJSON(json.start, doc), Position2.fromJSON(json.end, doc));\n  }\n};\nRange2.prototype.is = function(type) {\n  return type === \"range\" || type === \"model:range\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/mapper.js\nvar Mapper = class extends EmitterMixin() {\n  /**\n   * Creates an instance of the mapper.\n   */\n  constructor() {\n    super();\n    this._modelToViewMapping = /* @__PURE__ */ new WeakMap();\n    this._viewToModelMapping = /* @__PURE__ */ new WeakMap();\n    this._viewToModelLengthCallbacks = /* @__PURE__ */ new Map();\n    this._markerNameToElements = /* @__PURE__ */ new Map();\n    this._elementToMarkerNames = /* @__PURE__ */ new Map();\n    this._deferredBindingRemovals = /* @__PURE__ */ new Map();\n    this._unboundMarkerNames = /* @__PURE__ */ new Set();\n    this.on(\"modelToViewPosition\", (evt, data) => {\n      if (data.viewPosition) {\n        return;\n      }\n      const viewContainer = this._modelToViewMapping.get(data.modelPosition.parent);\n      if (!viewContainer) {\n        throw new CKEditorError(\"mapping-model-position-view-parent-not-found\", this, { modelPosition: data.modelPosition });\n      }\n      data.viewPosition = this.findPositionIn(viewContainer, data.modelPosition.offset);\n    }, { priority: \"low\" });\n    this.on(\"viewToModelPosition\", (evt, data) => {\n      if (data.modelPosition) {\n        return;\n      }\n      const viewBlock = this.findMappedViewAncestor(data.viewPosition);\n      const modelParent = this._viewToModelMapping.get(viewBlock);\n      const modelOffset = this._toModelOffset(data.viewPosition.parent, data.viewPosition.offset, viewBlock);\n      data.modelPosition = Position2._createAt(modelParent, modelOffset);\n    }, { priority: \"low\" });\n  }\n  /**\n   * Marks model and view elements as corresponding. Corresponding elements can be retrieved by using\n   * the {@link module:engine/conversion/mapper~Mapper#toModelElement toModelElement} and\n   * {@link module:engine/conversion/mapper~Mapper#toViewElement toViewElement} methods.\n   * The information that elements are bound is also used to translate positions.\n   *\n   * @param modelElement Model element.\n   * @param viewElement View element.\n   */\n  bindElements(modelElement, viewElement) {\n    this._modelToViewMapping.set(modelElement, viewElement);\n    this._viewToModelMapping.set(viewElement, modelElement);\n  }\n  /**\n   * Unbinds the given {@link module:engine/view/element~Element view element} from the map.\n   *\n   * **Note:** view-to-model binding will be removed, if it existed. However, corresponding model-to-view binding\n   * will be removed only if model element is still bound to the passed `viewElement`.\n   *\n   * This behavior allows for re-binding model element to another view element without fear of losing the new binding\n   * when the previously bound view element is unbound.\n   *\n   * @param viewElement View element to unbind.\n   * @param options The options object.\n   * @param options.defer Controls whether the binding should be removed immediately or deferred until a\n   * {@link #flushDeferredBindings `flushDeferredBindings()`} call.\n   */\n  unbindViewElement(viewElement, options = {}) {\n    const modelElement = this.toModelElement(viewElement);\n    if (this._elementToMarkerNames.has(viewElement)) {\n      for (const markerName of this._elementToMarkerNames.get(viewElement)) {\n        this._unboundMarkerNames.add(markerName);\n      }\n    }\n    if (options.defer) {\n      this._deferredBindingRemovals.set(viewElement, viewElement.root);\n    } else {\n      this._viewToModelMapping.delete(viewElement);\n      if (this._modelToViewMapping.get(modelElement) == viewElement) {\n        this._modelToViewMapping.delete(modelElement);\n      }\n    }\n  }\n  /**\n   * Unbinds the given {@link module:engine/model/element~Element model element} from the map.\n   *\n   * **Note:** the model-to-view binding will be removed, if it existed. However, the corresponding view-to-model binding\n   * will be removed only if the view element is still bound to the passed `modelElement`.\n   *\n   * This behavior lets for re-binding view element to another model element without fear of losing the new binding\n   * when the previously bound model element is unbound.\n   *\n   * @param modelElement Model element to unbind.\n   */\n  unbindModelElement(modelElement) {\n    const viewElement = this.toViewElement(modelElement);\n    this._modelToViewMapping.delete(modelElement);\n    if (this._viewToModelMapping.get(viewElement) == modelElement) {\n      this._viewToModelMapping.delete(viewElement);\n    }\n  }\n  /**\n   * Binds the given marker name with the given {@link module:engine/view/element~Element view element}. The element\n   * will be added to the current set of elements bound with the given marker name.\n   *\n   * @param element Element to bind.\n   * @param name Marker name.\n   */\n  bindElementToMarker(element, name) {\n    const elements = this._markerNameToElements.get(name) || /* @__PURE__ */ new Set();\n    elements.add(element);\n    const names = this._elementToMarkerNames.get(element) || /* @__PURE__ */ new Set();\n    names.add(name);\n    this._markerNameToElements.set(name, elements);\n    this._elementToMarkerNames.set(element, names);\n  }\n  /**\n   * Unbinds an element from given marker name.\n   *\n   * @param element Element to unbind.\n   * @param name Marker name.\n   */\n  unbindElementFromMarkerName(element, name) {\n    const nameToElements = this._markerNameToElements.get(name);\n    if (nameToElements) {\n      nameToElements.delete(element);\n      if (nameToElements.size == 0) {\n        this._markerNameToElements.delete(name);\n      }\n    }\n    const elementToNames = this._elementToMarkerNames.get(element);\n    if (elementToNames) {\n      elementToNames.delete(name);\n      if (elementToNames.size == 0) {\n        this._elementToMarkerNames.delete(element);\n      }\n    }\n  }\n  /**\n   * Returns all marker names of markers which have changed due to unbinding a view element (so it is assumed that the view element\n   * has been removed, moved or renamed) since the last flush. After returning, the marker names list is cleared.\n   */\n  flushUnboundMarkerNames() {\n    const markerNames = Array.from(this._unboundMarkerNames);\n    this._unboundMarkerNames.clear();\n    return markerNames;\n  }\n  /**\n   * Unbinds all deferred binding removals of view elements that in the meantime were not re-attached to some root or document fragment.\n   *\n   * See: {@link #unbindViewElement `unbindViewElement()`}.\n   */\n  flushDeferredBindings() {\n    for (const [viewElement, root2] of this._deferredBindingRemovals) {\n      if (viewElement.root == root2) {\n        this.unbindViewElement(viewElement);\n      }\n    }\n    this._deferredBindingRemovals = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Removes all model to view and view to model bindings.\n   */\n  clearBindings() {\n    this._modelToViewMapping = /* @__PURE__ */ new WeakMap();\n    this._viewToModelMapping = /* @__PURE__ */ new WeakMap();\n    this._markerNameToElements = /* @__PURE__ */ new Map();\n    this._elementToMarkerNames = /* @__PURE__ */ new Map();\n    this._unboundMarkerNames = /* @__PURE__ */ new Set();\n    this._deferredBindingRemovals = /* @__PURE__ */ new Map();\n  }\n  toModelElement(viewElement) {\n    return this._viewToModelMapping.get(viewElement);\n  }\n  toViewElement(modelElement) {\n    return this._modelToViewMapping.get(modelElement);\n  }\n  /**\n   * Gets the corresponding model range.\n   *\n   * @param viewRange View range.\n   * @returns Corresponding model range.\n   */\n  toModelRange(viewRange) {\n    return new Range2(this.toModelPosition(viewRange.start), this.toModelPosition(viewRange.end));\n  }\n  /**\n   * Gets the corresponding view range.\n   *\n   * @param modelRange Model range.\n   * @returns Corresponding view range.\n   */\n  toViewRange(modelRange) {\n    return new Range(this.toViewPosition(modelRange.start), this.toViewPosition(modelRange.end));\n  }\n  /**\n   * Gets the corresponding model position.\n   *\n   * @fires viewToModelPosition\n   * @param viewPosition View position.\n   * @returns Corresponding model position.\n   */\n  toModelPosition(viewPosition) {\n    const data = {\n      viewPosition,\n      mapper: this\n    };\n    this.fire(\"viewToModelPosition\", data);\n    return data.modelPosition;\n  }\n  /**\n   * Gets the corresponding view position.\n   *\n   * @fires modelToViewPosition\n   * @param modelPosition Model position.\n   * @param options Additional options for position mapping process.\n   * @param options.isPhantom Should be set to `true` if the model position to map is pointing to a place\n   * in model tree which no longer exists. For example, it could be an end of a removed model range.\n   * @returns Corresponding view position.\n   */\n  toViewPosition(modelPosition, options = {}) {\n    const data = {\n      modelPosition,\n      mapper: this,\n      isPhantom: options.isPhantom\n    };\n    this.fire(\"modelToViewPosition\", data);\n    return data.viewPosition;\n  }\n  /**\n   * Gets all view elements bound to the given marker name.\n   *\n   * @param name Marker name.\n   * @returns View elements bound with the given marker name or `null`\n   * if no elements are bound to the given marker name.\n   */\n  markerNameToElements(name) {\n    const boundElements = this._markerNameToElements.get(name);\n    if (!boundElements) {\n      return null;\n    }\n    const elements = /* @__PURE__ */ new Set();\n    for (const element of boundElements) {\n      if (element.is(\"attributeElement\")) {\n        for (const clone2 of element.getElementsWithSameId()) {\n          elements.add(clone2);\n        }\n      } else {\n        elements.add(element);\n      }\n    }\n    return elements;\n  }\n  /**\n   * Registers a callback that evaluates the length in the model of a view element with the given name.\n   *\n   * The callback is fired with one argument, which is a view element instance. The callback is expected to return\n   * a number representing the length of the view element in the model.\n   *\n   * ```ts\n   * // List item in view may contain nested list, which have other list items. In model though,\n   * // the lists are represented by flat structure. Because of those differences, length of list view element\n   * // may be greater than one. In the callback it's checked how many nested list items are in evaluated list item.\n   *\n   * function getViewListItemLength( element ) {\n   * \tlet length = 1;\n   *\n   * \tfor ( let child of element.getChildren() ) {\n   * \t\tif ( child.name == 'ul' || child.name == 'ol' ) {\n   * \t\t\tfor ( let item of child.getChildren() ) {\n   * \t\t\t\tlength += getViewListItemLength( item );\n   * \t\t\t}\n   * \t\t}\n   * \t}\n   *\n   * \treturn length;\n   * }\n   *\n   * mapper.registerViewToModelLength( 'li', getViewListItemLength );\n   * ```\n   *\n   * @param viewElementName Name of view element for which callback is registered.\n   * @param lengthCallback Function return a length of view element instance in model.\n   */\n  registerViewToModelLength(viewElementName, lengthCallback) {\n    this._viewToModelLengthCallbacks.set(viewElementName, lengthCallback);\n  }\n  /**\n   * For the given `viewPosition`, finds and returns the closest ancestor of this position that has a mapping to\n   * the model.\n   *\n   * @param viewPosition Position for which a mapped ancestor should be found.\n   */\n  findMappedViewAncestor(viewPosition) {\n    let parent2 = viewPosition.parent;\n    while (!this._viewToModelMapping.has(parent2)) {\n      parent2 = parent2.parent;\n    }\n    return parent2;\n  }\n  /**\n   * Calculates model offset based on the view position and the block element.\n   *\n   * Example:\n   *\n   * ```html\n   * <p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, p ) -> 5\n   * ```\n   *\n   * Is a sum of:\n   *\n   * ```html\n   * <p>foo|<b>bar</b></p> // _toModelOffset( p, 3, p ) -> 3\n   * <p>foo<b>ba|r</b></p> // _toModelOffset( b, 2, b ) -> 2\n   * ```\n   *\n   * @param viewParent Position parent.\n   * @param viewOffset Position offset.\n   * @param viewBlock Block used as a base to calculate offset.\n   * @returns Offset in the model.\n   */\n  _toModelOffset(viewParent, viewOffset, viewBlock) {\n    if (viewBlock != viewParent) {\n      const offsetToParentStart = this._toModelOffset(viewParent.parent, viewParent.index, viewBlock);\n      const offsetInParent = this._toModelOffset(viewParent, viewOffset, viewParent);\n      return offsetToParentStart + offsetInParent;\n    }\n    if (viewParent.is(\"$text\")) {\n      return viewOffset;\n    }\n    let modelOffset = 0;\n    for (let i = 0; i < viewOffset; i++) {\n      modelOffset += this.getModelLength(viewParent.getChild(i));\n    }\n    return modelOffset;\n  }\n  /**\n   * Gets the length of the view element in the model.\n   *\n   * The length is calculated as follows:\n   * * if a {@link #registerViewToModelLength length mapping callback} is provided for the given `viewNode`, it is used to\n   * evaluate the model length (`viewNode` is used as first and only parameter passed to the callback),\n   * * length of a {@link module:engine/view/text~Text text node} is equal to the length of its\n   * {@link module:engine/view/text~Text#data data},\n   * * length of a {@link module:engine/view/uielement~UIElement ui element} is equal to 0,\n   * * length of a mapped {@link module:engine/view/element~Element element} is equal to 1,\n   * * length of a non-mapped {@link module:engine/view/element~Element element} is equal to the length of its children.\n   *\n   * Examples:\n   *\n   * ```\n   * foo                          -> 3 // Text length is equal to its data length.\n   * <p>foo</p>                   -> 1 // Length of an element which is mapped is by default equal to 1.\n   * <b>foo</b>                   -> 3 // Length of an element which is not mapped is a length of its children.\n   * <div><p>x</p><p>y</p></div>  -> 2 // Assuming that <div> is not mapped and <p> are mapped.\n   * ```\n   *\n   * @param viewNode View node.\n   * @returns Length of the node in the tree model.\n   */\n  getModelLength(viewNode) {\n    if (this._viewToModelLengthCallbacks.get(viewNode.name)) {\n      const callback = this._viewToModelLengthCallbacks.get(viewNode.name);\n      return callback(viewNode);\n    } else if (this._viewToModelMapping.has(viewNode)) {\n      return 1;\n    } else if (viewNode.is(\"$text\")) {\n      return viewNode.data.length;\n    } else if (viewNode.is(\"uiElement\")) {\n      return 0;\n    } else {\n      let len = 0;\n      for (const child of viewNode.getChildren()) {\n        len += this.getModelLength(child);\n      }\n      return len;\n    }\n  }\n  /**\n   * Finds the position in the view node (or in its children) with the expected model offset.\n   *\n   * Example:\n   *\n   * ```\n   * <p>fo<b>bar</b>bom</p> -> expected offset: 4\n   *\n   * findPositionIn( p, 4 ):\n   * <p>|fo<b>bar</b>bom</p> -> expected offset: 4, actual offset: 0\n   * <p>fo|<b>bar</b>bom</p> -> expected offset: 4, actual offset: 2\n   * <p>fo<b>bar</b>|bom</p> -> expected offset: 4, actual offset: 5 -> we are too far\n   *\n   * findPositionIn( b, 4 - ( 5 - 3 ) ):\n   * <p>fo<b>|bar</b>bom</p> -> expected offset: 2, actual offset: 0\n   * <p>fo<b>bar|</b>bom</p> -> expected offset: 2, actual offset: 3 -> we are too far\n   *\n   * findPositionIn( bar, 2 - ( 3 - 3 ) ):\n   * We are in the text node so we can simple find the offset.\n   * <p>fo<b>ba|r</b>bom</p> -> expected offset: 2, actual offset: 2 -> position found\n   * ```\n   *\n   * @param viewParent Tree view element in which we are looking for the position.\n   * @param expectedOffset Expected offset.\n   * @returns Found position.\n   */\n  findPositionIn(viewParent, expectedOffset) {\n    let viewNode;\n    let lastLength = 0;\n    let modelOffset = 0;\n    let viewOffset = 0;\n    if (viewParent.is(\"$text\")) {\n      return new Position(viewParent, expectedOffset);\n    }\n    while (modelOffset < expectedOffset) {\n      viewNode = viewParent.getChild(viewOffset);\n      lastLength = this.getModelLength(viewNode);\n      modelOffset += lastLength;\n      viewOffset++;\n    }\n    if (modelOffset == expectedOffset) {\n      return this._moveViewPositionToTextNode(new Position(viewParent, viewOffset));\n    } else {\n      return this.findPositionIn(viewNode, expectedOffset - (modelOffset - lastLength));\n    }\n  }\n  /**\n   * Because we prefer positions in the text nodes over positions next to text nodes, if the view position was next to a text node,\n   * it moves it into the text node instead.\n   *\n   * ```\n   * <p>[]<b>foo</b></p> -> <p>[]<b>foo</b></p> // do not touch if position is not directly next to text\n   * <p>foo[]<b>foo</b></p> -> <p>foo{}<b>foo</b></p> // move to text node\n   * <p><b>[]foo</b></p> -> <p><b>{}foo</b></p> // move to text node\n   * ```\n   *\n   * @param viewPosition Position potentially next to the text node.\n   * @returns Position in the text node if possible.\n   */\n  _moveViewPositionToTextNode(viewPosition) {\n    const nodeBefore = viewPosition.nodeBefore;\n    const nodeAfter = viewPosition.nodeAfter;\n    if (nodeBefore instanceof Text) {\n      return new Position(nodeBefore, nodeBefore.data.length);\n    } else if (nodeAfter instanceof Text) {\n      return new Position(nodeAfter, 0);\n    }\n    return viewPosition;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/modelconsumable.js\nvar ModelConsumable = class {\n  constructor() {\n    this._consumable = /* @__PURE__ */ new Map();\n    this._textProxyRegistry = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Adds a consumable value to the consumables list and links it with a given model item.\n   *\n   * ```ts\n   * modelConsumable.add( modelElement, 'insert' ); // Add `modelElement` insertion change to consumable values.\n   * modelConsumable.add( modelElement, 'addAttribute:bold' ); // Add `bold` attribute insertion on `modelElement` change.\n   * modelConsumable.add( modelElement, 'removeAttribute:bold' ); // Add `bold` attribute removal on `modelElement` change.\n   * modelConsumable.add( modelSelection, 'selection' ); // Add `modelSelection` to consumable values.\n   * modelConsumable.add( modelRange, 'range' ); // Add `modelRange` to consumable values.\n   * ```\n   *\n   * @param item Model item, range or selection that has the consumable.\n   * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n   * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n   */\n  add(item, type) {\n    type = _normalizeConsumableType(type);\n    if (item instanceof TextProxy2) {\n      item = this._getSymbolForTextProxy(item);\n    }\n    if (!this._consumable.has(item)) {\n      this._consumable.set(item, /* @__PURE__ */ new Map());\n    }\n    this._consumable.get(item).set(type, true);\n  }\n  /**\n   * Removes a given consumable value from a given model item.\n   *\n   * ```ts\n   * modelConsumable.consume( modelElement, 'insert' ); // Remove `modelElement` insertion change from consumable values.\n   * modelConsumable.consume( modelElement, 'addAttribute:bold' ); // Remove `bold` attribute insertion on `modelElement` change.\n   * modelConsumable.consume( modelElement, 'removeAttribute:bold' ); // Remove `bold` attribute removal on `modelElement` change.\n   * modelConsumable.consume( modelSelection, 'selection' ); // Remove `modelSelection` from consumable values.\n   * modelConsumable.consume( modelRange, 'range' ); // Remove 'modelRange' from consumable values.\n   * ```\n   *\n   * @param item Model item, range or selection from which consumable will be consumed.\n   * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n   * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n   * @returns `true` if consumable value was available and was consumed, `false` otherwise.\n   */\n  consume(item, type) {\n    type = _normalizeConsumableType(type);\n    if (item instanceof TextProxy2) {\n      item = this._getSymbolForTextProxy(item);\n    }\n    if (this.test(item, type)) {\n      this._consumable.get(item).set(type, false);\n      return true;\n    } else {\n      return false;\n    }\n  }\n  /**\n   * Tests whether there is a consumable value of a given type connected with a given model item.\n   *\n   * ```ts\n   * modelConsumable.test( modelElement, 'insert' ); // Check for `modelElement` insertion change.\n   * modelConsumable.test( modelElement, 'addAttribute:bold' ); // Check for `bold` attribute insertion on `modelElement` change.\n   * modelConsumable.test( modelElement, 'removeAttribute:bold' ); // Check for `bold` attribute removal on `modelElement` change.\n   * modelConsumable.test( modelSelection, 'selection' ); // Check if `modelSelection` is consumable.\n   * modelConsumable.test( modelRange, 'range' ); // Check if `modelRange` is consumable.\n   * ```\n   *\n   * @param item Model item, range or selection to be tested.\n   * @param type Consumable type. Will be normalized to a proper form, that is either `<word>` or `<part>:<part>`.\n   * Second colon and everything after will be cut. Passing event name is a safe and good practice.\n   * @returns `null` if such consumable was never added, `false` if the consumable values was\n   * already consumed or `true` if it was added and not consumed yet.\n   */\n  test(item, type) {\n    type = _normalizeConsumableType(type);\n    if (item instanceof TextProxy2) {\n      item = this._getSymbolForTextProxy(item);\n    }\n    const itemConsumables = this._consumable.get(item);\n    if (itemConsumables === void 0) {\n      return null;\n    }\n    const value = itemConsumables.get(type);\n    if (value === void 0) {\n      return null;\n    }\n    return value;\n  }\n  /**\n   * Reverts consuming of a consumable value.\n   *\n   * ```ts\n   * modelConsumable.revert( modelElement, 'insert' ); // Revert consuming `modelElement` insertion change.\n   * modelConsumable.revert( modelElement, 'addAttribute:bold' ); // Revert consuming `bold` attribute insert from `modelElement`.\n   * modelConsumable.revert( modelElement, 'removeAttribute:bold' ); // Revert consuming `bold` attribute remove from `modelElement`.\n   * modelConsumable.revert( modelSelection, 'selection' ); // Revert consuming `modelSelection`.\n   * modelConsumable.revert( modelRange, 'range' ); // Revert consuming `modelRange`.\n   * ```\n   *\n   * @param item Model item, range or selection to be reverted.\n   * @param type Consumable type.\n   * @returns `true` if consumable has been reversed, `false` otherwise. `null` if the consumable has\n   * never been added.\n   */\n  revert(item, type) {\n    type = _normalizeConsumableType(type);\n    if (item instanceof TextProxy2) {\n      item = this._getSymbolForTextProxy(item);\n    }\n    const test = this.test(item, type);\n    if (test === false) {\n      this._consumable.get(item).set(type, true);\n      return true;\n    } else if (test === true) {\n      return false;\n    }\n    return null;\n  }\n  /**\n   * Verifies if all events from the specified group were consumed.\n   *\n   * @param eventGroup The events group to verify.\n   */\n  verifyAllConsumed(eventGroup) {\n    const items = [];\n    for (const [item, consumables] of this._consumable) {\n      for (const [event, canConsume] of consumables) {\n        const eventPrefix = event.split(\":\")[0];\n        if (canConsume && eventGroup == eventPrefix) {\n          items.push({\n            event,\n            item: item.name || item.description\n          });\n        }\n      }\n    }\n    if (items.length) {\n      throw new CKEditorError(\"conversion-model-consumable-not-consumed\", null, { items });\n    }\n  }\n  /**\n   * Gets a unique symbol for the passed {@link module:engine/model/textproxy~TextProxy} instance. All `TextProxy` instances that\n   * have same parent, same start index and same end index will get the same symbol.\n   *\n   * Used internally to correctly consume `TextProxy` instances.\n   *\n   * @internal\n   * @param textProxy `TextProxy` instance to get a symbol for.\n   * @returns Symbol representing all equal instances of `TextProxy`.\n   */\n  _getSymbolForTextProxy(textProxy) {\n    let symbol = null;\n    const startMap = this._textProxyRegistry.get(textProxy.startOffset);\n    if (startMap) {\n      const endMap = startMap.get(textProxy.endOffset);\n      if (endMap) {\n        symbol = endMap.get(textProxy.parent);\n      }\n    }\n    if (!symbol) {\n      symbol = this._addSymbolForTextProxy(textProxy);\n    }\n    return symbol;\n  }\n  /**\n   * Adds a symbol for the given {@link module:engine/model/textproxy~TextProxy} instance.\n   *\n   * Used internally to correctly consume `TextProxy` instances.\n   *\n   * @param textProxy Text proxy instance.\n   * @returns Symbol generated for given `TextProxy`.\n   */\n  _addSymbolForTextProxy(textProxy) {\n    const start = textProxy.startOffset;\n    const end = textProxy.endOffset;\n    const parent2 = textProxy.parent;\n    const symbol = Symbol(\"$textProxy:\" + textProxy.data);\n    let startMap;\n    let endMap;\n    startMap = this._textProxyRegistry.get(start);\n    if (!startMap) {\n      startMap = /* @__PURE__ */ new Map();\n      this._textProxyRegistry.set(start, startMap);\n    }\n    endMap = startMap.get(end);\n    if (!endMap) {\n      endMap = /* @__PURE__ */ new Map();\n      startMap.set(end, endMap);\n    }\n    endMap.set(parent2, symbol);\n    return symbol;\n  }\n};\nfunction _normalizeConsumableType(type) {\n  const parts = type.split(\":\");\n  if (parts[0] == \"insert\") {\n    return parts[0];\n  }\n  if (parts[0] == \"addMarker\" || parts[0] == \"removeMarker\") {\n    return type;\n  }\n  return parts.length > 1 ? parts[0] + \":\" + parts[1] : parts[0];\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher.js\nvar DowncastDispatcher = class extends EmitterMixin() {\n  /**\n   * Creates a downcast dispatcher instance.\n   *\n   * @see module:engine/conversion/downcastdispatcher~DowncastConversionApi\n   *\n   * @param conversionApi Additional properties for an interface that will be passed to events fired\n   * by the downcast dispatcher.\n   */\n  constructor(conversionApi) {\n    super();\n    this._conversionApi = { dispatcher: this, ...conversionApi };\n    this._firedEventsMap = /* @__PURE__ */ new WeakMap();\n  }\n  /**\n   * Converts changes buffered in the given {@link module:engine/model/differ~Differ model differ}\n   * and fires conversion events based on it.\n   *\n   * @fires insert\n   * @fires remove\n   * @fires attribute\n   * @fires addMarker\n   * @fires removeMarker\n   * @fires reduceChanges\n   * @param differ The differ object with buffered changes.\n   * @param markers Markers related to the model fragment to convert.\n   * @param writer The view writer that should be used to modify the view document.\n   */\n  convertChanges(differ, markers, writer) {\n    const conversionApi = this._createConversionApi(writer, differ.getRefreshedItems());\n    for (const change of differ.getMarkersToRemove()) {\n      this._convertMarkerRemove(change.name, change.range, conversionApi);\n    }\n    const changes = this._reduceChanges(differ.getChanges());\n    for (const entry of changes) {\n      if (entry.type === \"insert\") {\n        this._convertInsert(Range2._createFromPositionAndShift(entry.position, entry.length), conversionApi);\n      } else if (entry.type === \"reinsert\") {\n        this._convertReinsert(Range2._createFromPositionAndShift(entry.position, entry.length), conversionApi);\n      } else if (entry.type === \"remove\") {\n        this._convertRemove(entry.position, entry.length, entry.name, conversionApi);\n      } else {\n        this._convertAttribute(entry.range, entry.attributeKey, entry.attributeOldValue, entry.attributeNewValue, conversionApi);\n      }\n    }\n    conversionApi.mapper.flushDeferredBindings();\n    for (const markerName of conversionApi.mapper.flushUnboundMarkerNames()) {\n      const markerRange = markers.get(markerName).getRange();\n      this._convertMarkerRemove(markerName, markerRange, conversionApi);\n      this._convertMarkerAdd(markerName, markerRange, conversionApi);\n    }\n    for (const change of differ.getMarkersToAdd()) {\n      this._convertMarkerAdd(change.name, change.range, conversionApi);\n    }\n    conversionApi.consumable.verifyAllConsumed(\"insert\");\n  }\n  /**\n   * Starts a conversion of a model range and the provided markers.\n   *\n   * @fires insert\n   * @fires attribute\n   * @fires addMarker\n   * @param range The inserted range.\n   * @param markers The map of markers that should be down-casted.\n   * @param writer The view writer that should be used to modify the view document.\n   * @param options Optional options object passed to `convertionApi.options`.\n   */\n  convert(range, markers, writer, options = {}) {\n    const conversionApi = this._createConversionApi(writer, void 0, options);\n    this._convertInsert(range, conversionApi);\n    for (const [name, range2] of markers) {\n      this._convertMarkerAdd(name, range2, conversionApi);\n    }\n    conversionApi.consumable.verifyAllConsumed(\"insert\");\n  }\n  /**\n   * Starts the model selection conversion.\n   *\n   * Fires events for a given {@link module:engine/model/selection~Selection selection} to start the selection conversion.\n   *\n   * @fires selection\n   * @fires addMarker\n   * @fires attribute\n   * @param selection The selection to convert.\n   * @param markers Markers connected with the converted model.\n   * @param writer View writer that should be used to modify the view document.\n   */\n  convertSelection(selection, markers, writer) {\n    const conversionApi = this._createConversionApi(writer);\n    this.fire(\"cleanSelection\", { selection }, conversionApi);\n    const modelRoot = selection.getFirstPosition().root;\n    if (!conversionApi.mapper.toViewElement(modelRoot)) {\n      return;\n    }\n    const markersAtSelection = Array.from(markers.getMarkersAtPosition(selection.getFirstPosition()));\n    this._addConsumablesForSelection(conversionApi.consumable, selection, markersAtSelection);\n    this.fire(\"selection\", { selection }, conversionApi);\n    if (!selection.isCollapsed) {\n      return;\n    }\n    for (const marker of markersAtSelection) {\n      if (conversionApi.consumable.test(selection, \"addMarker:\" + marker.name)) {\n        const markerRange = marker.getRange();\n        if (!shouldMarkerChangeBeConverted(selection.getFirstPosition(), marker, conversionApi.mapper)) {\n          continue;\n        }\n        const data = {\n          item: selection,\n          markerName: marker.name,\n          markerRange\n        };\n        this.fire(`addMarker:${marker.name}`, data, conversionApi);\n      }\n    }\n    for (const key of selection.getAttributeKeys()) {\n      if (conversionApi.consumable.test(selection, \"attribute:\" + key)) {\n        const data = {\n          item: selection,\n          range: selection.getFirstRange(),\n          attributeKey: key,\n          attributeOldValue: null,\n          attributeNewValue: selection.getAttribute(key)\n        };\n        this.fire(`attribute:${key}:$text`, data, conversionApi);\n      }\n    }\n  }\n  /**\n   * Fires insertion conversion of a range of nodes.\n   *\n   * For each node in the range, {@link #event:insert `insert` event is fired}. For each attribute on each node,\n   * {@link #event:attribute `attribute` event is fired}.\n   *\n   * @fires insert\n   * @fires attribute\n   * @param range The inserted range.\n   * @param conversionApi The conversion API object.\n   * @param options.doNotAddConsumables Whether the ModelConsumable should not get populated\n   * for items in the provided range.\n   */\n  _convertInsert(range, conversionApi, options = {}) {\n    if (!options.doNotAddConsumables) {\n      this._addConsumablesForInsert(conversionApi.consumable, range);\n    }\n    for (const data of Array.from(range.getWalker({ shallow: true })).map(walkerValueToEventData)) {\n      this._testAndFire(\"insert\", data, conversionApi);\n    }\n  }\n  /**\n   * Fires conversion of a single node removal. Fires {@link #event:remove remove event} with provided data.\n   *\n   * @param position Position from which node was removed.\n   * @param length Offset size of removed node.\n   * @param name Name of removed node.\n   * @param conversionApi The conversion API object.\n   */\n  _convertRemove(position, length, name, conversionApi) {\n    this.fire(`remove:${name}`, { position, length }, conversionApi);\n  }\n  /**\n   * Starts a conversion of an attribute change on a given `range`.\n   *\n   * For each node in the given `range`, {@link #event:attribute attribute event} is fired with the passed data.\n   *\n   * @fires attribute\n   * @param range Changed range.\n   * @param key Key of the attribute that has changed.\n   * @param oldValue Attribute value before the change or `null` if the attribute has not been set before.\n   * @param newValue New attribute value or `null` if the attribute has been removed.\n   * @param conversionApi The conversion API object.\n   */\n  _convertAttribute(range, key, oldValue, newValue, conversionApi) {\n    this._addConsumablesForRange(conversionApi.consumable, range, `attribute:${key}`);\n    for (const value of range) {\n      const data = {\n        item: value.item,\n        range: Range2._createFromPositionAndShift(value.previousPosition, value.length),\n        attributeKey: key,\n        attributeOldValue: oldValue,\n        attributeNewValue: newValue\n      };\n      this._testAndFire(`attribute:${key}`, data, conversionApi);\n    }\n  }\n  /**\n   * Fires re-insertion conversion (with a `reconversion` flag passed to `insert` events)\n   * of a range of elements (only elements on the range depth, without children).\n   *\n   * For each node in the range on its depth (without children), {@link #event:insert `insert` event} is fired.\n   * For each attribute on each node, {@link #event:attribute `attribute` event} is fired.\n   *\n   * @fires insert\n   * @fires attribute\n   * @param range The range to reinsert.\n   * @param conversionApi The conversion API object.\n   */\n  _convertReinsert(range, conversionApi) {\n    const walkerValues = Array.from(range.getWalker({ shallow: true }));\n    this._addConsumablesForInsert(conversionApi.consumable, walkerValues);\n    for (const data of walkerValues.map(walkerValueToEventData)) {\n      this._testAndFire(\"insert\", { ...data, reconversion: true }, conversionApi);\n    }\n  }\n  /**\n   * Converts the added marker. Fires the {@link #event:addMarker `addMarker`} event for each item\n   * in the marker's range. If the range is collapsed, a single event is dispatched. See the event description for more details.\n   *\n   * @fires addMarker\n   * @param markerName Marker name.\n   * @param markerRange The marker range.\n   * @param conversionApi The conversion API object.\n   */\n  _convertMarkerAdd(markerName, markerRange, conversionApi) {\n    if (markerRange.root.rootName == \"$graveyard\") {\n      return;\n    }\n    const eventName = `addMarker:${markerName}`;\n    conversionApi.consumable.add(markerRange, eventName);\n    this.fire(eventName, { markerName, markerRange }, conversionApi);\n    if (!conversionApi.consumable.consume(markerRange, eventName)) {\n      return;\n    }\n    this._addConsumablesForRange(conversionApi.consumable, markerRange, eventName);\n    for (const item of markerRange.getItems()) {\n      if (!conversionApi.consumable.test(item, eventName)) {\n        continue;\n      }\n      const data = { item, range: Range2._createOn(item), markerName, markerRange };\n      this.fire(eventName, data, conversionApi);\n    }\n  }\n  /**\n   * Fires the conversion of the marker removal. Fires the {@link #event:removeMarker `removeMarker`} event with the provided data.\n   *\n   * @fires removeMarker\n   * @param markerName Marker name.\n   * @param markerRange The marker range.\n   * @param conversionApi The conversion API object.\n   */\n  _convertMarkerRemove(markerName, markerRange, conversionApi) {\n    if (markerRange.root.rootName == \"$graveyard\") {\n      return;\n    }\n    this.fire(`removeMarker:${markerName}`, { markerName, markerRange }, conversionApi);\n  }\n  /**\n   * Fires the reduction of changes buffered in the {@link module:engine/model/differ~Differ `Differ`}.\n   *\n   * Features can replace selected {@link module:engine/model/differ~DiffItem `DiffItem`}s with `reinsert` entries to trigger\n   * reconversion. The {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToStructure\n   * `DowncastHelpers.elementToStructure()`} is using this event to trigger reconversion.\n   *\n   * @fires reduceChanges\n   */\n  _reduceChanges(changes) {\n    const data = { changes };\n    this.fire(\"reduceChanges\", data);\n    return data.changes;\n  }\n  /**\n   * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume from a given range,\n   * assuming that the range has just been inserted to the model.\n   *\n   * @param consumable The consumable.\n   * @param walkerValues The walker values for the inserted range.\n   * @returns The values to consume.\n   */\n  _addConsumablesForInsert(consumable, walkerValues) {\n    for (const value of walkerValues) {\n      const item = value.item;\n      if (consumable.test(item, \"insert\") === null) {\n        consumable.add(item, \"insert\");\n        for (const key of item.getAttributeKeys()) {\n          consumable.add(item, \"attribute:\" + key);\n        }\n      }\n    }\n    return consumable;\n  }\n  /**\n   * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with values to consume for a given range.\n   *\n   * @param consumable The consumable.\n   * @param range The affected range.\n   * @param type Consumable type.\n   * @returns The values to consume.\n   */\n  _addConsumablesForRange(consumable, range, type) {\n    for (const item of range.getItems()) {\n      consumable.add(item, type);\n    }\n    return consumable;\n  }\n  /**\n   * Populates provided {@link module:engine/conversion/modelconsumable~ModelConsumable} with selection consumable values.\n   *\n   * @param consumable The consumable.\n   * @param selection The selection to create the consumable from.\n   * @param markers Markers that contain the selection.\n   * @returns The values to consume.\n   */\n  _addConsumablesForSelection(consumable, selection, markers) {\n    consumable.add(selection, \"selection\");\n    for (const marker of markers) {\n      consumable.add(selection, \"addMarker:\" + marker.name);\n    }\n    for (const key of selection.getAttributeKeys()) {\n      consumable.add(selection, \"attribute:\" + key);\n    }\n    return consumable;\n  }\n  /**\n   * Tests whether given event wasn't already fired and if so, fires it.\n   *\n   * @fires insert\n   * @fires attribute\n   * @param type Event type.\n   * @param data Event data.\n   * @param conversionApi The conversion API object.\n   */\n  _testAndFire(type, data, conversionApi) {\n    const eventName = getEventName(type, data);\n    const itemKey = data.item.is(\"$textProxy\") ? conversionApi.consumable._getSymbolForTextProxy(data.item) : data.item;\n    const eventsFiredForConversion = this._firedEventsMap.get(conversionApi);\n    const eventsFiredForItem = eventsFiredForConversion.get(itemKey);\n    if (!eventsFiredForItem) {\n      eventsFiredForConversion.set(itemKey, /* @__PURE__ */ new Set([eventName]));\n    } else if (!eventsFiredForItem.has(eventName)) {\n      eventsFiredForItem.add(eventName);\n    } else {\n      return;\n    }\n    this.fire(eventName, data, conversionApi);\n  }\n  /**\n   * Fires not already fired events for setting attributes on just inserted item.\n   *\n   * @param item The model item to convert attributes for.\n   * @param conversionApi The conversion API object.\n   */\n  _testAndFireAddAttributes(item, conversionApi) {\n    const data = {\n      item,\n      range: Range2._createOn(item)\n    };\n    for (const key of data.item.getAttributeKeys()) {\n      data.attributeKey = key;\n      data.attributeOldValue = null;\n      data.attributeNewValue = data.item.getAttribute(key);\n      this._testAndFire(`attribute:${key}`, data, conversionApi);\n    }\n  }\n  /**\n   * Builds an instance of the {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi} from a template and a given\n   * {@link module:engine/view/downcastwriter~DowncastWriter `DowncastWriter`} and options object.\n   *\n   * @param writer View writer that should be used to modify the view document.\n   * @param refreshedItems A set of model elements that should not reuse their\n   * previous view representations.\n   * @param options Optional options passed to `convertionApi.options`.\n   * @return The conversion API object.\n   */\n  _createConversionApi(writer, refreshedItems = /* @__PURE__ */ new Set(), options = {}) {\n    const conversionApi = {\n      ...this._conversionApi,\n      consumable: new ModelConsumable(),\n      writer,\n      options,\n      convertItem: (item) => this._convertInsert(Range2._createOn(item), conversionApi),\n      convertChildren: (element) => this._convertInsert(Range2._createIn(element), conversionApi, { doNotAddConsumables: true }),\n      convertAttributes: (item) => this._testAndFireAddAttributes(item, conversionApi),\n      canReuseView: (viewElement) => !refreshedItems.has(conversionApi.mapper.toModelElement(viewElement))\n    };\n    this._firedEventsMap.set(conversionApi, /* @__PURE__ */ new Map());\n    return conversionApi;\n  }\n};\nfunction shouldMarkerChangeBeConverted(modelPosition, marker, mapper) {\n  const range = marker.getRange();\n  const ancestors = Array.from(modelPosition.getAncestors());\n  ancestors.shift();\n  ancestors.reverse();\n  const hasCustomHandling = ancestors.some((element) => {\n    if (range.containsItem(element)) {\n      const viewElement = mapper.toViewElement(element);\n      return !!viewElement.getCustomProperty(\"addHighlight\");\n    }\n  });\n  return !hasCustomHandling;\n}\nfunction getEventName(type, data) {\n  const name = data.item.is(\"element\") ? data.item.name : \"$text\";\n  return `${type}:${name}`;\n}\nfunction walkerValueToEventData(value) {\n  const item = value.item;\n  const itemRange = Range2._createFromPositionAndShift(value.previousPosition, value.length);\n  return {\n    item,\n    range: itemRange\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/selection.js\nvar Selection2 = class _Selection extends EmitterMixin(TypeCheckable2) {\n  /**\n   * Creates a new selection instance based on the given {@link module:engine/model/selection~Selectable selectable}\n   * or creates an empty selection if no arguments were passed.\n   *\n   * ```ts\n   * // Creates empty selection without ranges.\n   * const selection = writer.createSelection();\n   *\n   * // Creates selection at the given range.\n   * const range = writer.createRange( start, end );\n   * const selection = writer.createSelection( range );\n   *\n   * // Creates selection at the given ranges\n   * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   * const selection = writer.createSelection( ranges );\n   *\n   * // Creates selection from the other selection.\n   * // Note: It doesn't copy selection attributes.\n   * const otherSelection = writer.createSelection();\n   * const selection = writer.createSelection( otherSelection );\n   *\n   * // Creates selection from the given document selection.\n   * // Note: It doesn't copy selection attributes.\n   * const documentSelection = model.document.selection;\n   * const selection = writer.createSelection( documentSelection );\n   *\n   * // Creates selection at the given position.\n   * const position = writer.createPositionFromPath( root, path );\n   * const selection = writer.createSelection( position );\n   *\n   * // Creates selection at the given offset in the given element.\n   * const paragraph = writer.createElement( 'paragraph' );\n   * const selection = writer.createSelection( paragraph, offset );\n   *\n   * // Creates a range inside an {@link module:engine/model/element~Element element} which starts before the\n   * // first child of that element and ends after the last child of that element.\n   * const selection = writer.createSelection( paragraph, 'in' );\n   *\n   * // Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends\n   * // just after the item.\n   * const selection = writer.createSelection( paragraph, 'on' );\n   * ```\n   *\n   * Selection's constructor allow passing additional options (`'backward'`) as the last argument.\n   *\n   * ```ts\n   * // Creates backward selection.\n   * const selection = writer.createSelection( range, { backward: true } );\n   * ```\n   *\n   * @internal\n   */\n  constructor(...args) {\n    super();\n    this._lastRangeBackward = false;\n    this._attrs = /* @__PURE__ */ new Map();\n    this._ranges = [];\n    if (args.length) {\n      this.setTo(...args);\n    }\n  }\n  /**\n   * Selection anchor. Anchor is the position from which the selection was started. If a user is making a selection\n   * by dragging the mouse, the anchor is where the user pressed the mouse button (the beginning of the selection).\n   *\n   * Anchor and {@link #focus} define the direction of the selection, which is important\n   * when expanding/shrinking selection. The focus moves, while the anchor should remain in the same place.\n   *\n   * Anchor is always set to the {@link module:engine/model/range~Range#start start} or\n   * {@link module:engine/model/range~Range#end end} position of the last of selection's ranges. Whether it is\n   * the `start` or `end` depends on the specified `options.backward`. See the {@link #setTo `setTo()`} method.\n   *\n   * May be set to `null` if there are no ranges in the selection.\n   *\n   * @see #focus\n   */\n  get anchor() {\n    if (this._ranges.length > 0) {\n      const range = this._ranges[this._ranges.length - 1];\n      return this._lastRangeBackward ? range.end : range.start;\n    }\n    return null;\n  }\n  /**\n   * Selection focus. Focus is the position where the selection ends. If a user is making a selection\n   * by dragging the mouse, the focus is where the mouse cursor is.\n   *\n   * May be set to `null` if there are no ranges in the selection.\n   *\n   * @see #anchor\n   */\n  get focus() {\n    if (this._ranges.length > 0) {\n      const range = this._ranges[this._ranges.length - 1];\n      return this._lastRangeBackward ? range.start : range.end;\n    }\n    return null;\n  }\n  /**\n   * Whether the selection is collapsed. Selection is collapsed when there is exactly one range in it\n   * and it is collapsed.\n   */\n  get isCollapsed() {\n    const length = this._ranges.length;\n    if (length === 1) {\n      return this._ranges[0].isCollapsed;\n    } else {\n      return false;\n    }\n  }\n  /**\n   * Returns the number of ranges in the selection.\n   */\n  get rangeCount() {\n    return this._ranges.length;\n  }\n  /**\n   * Specifies whether the selection's {@link #focus} precedes the selection's {@link #anchor}.\n   */\n  get isBackward() {\n    return !this.isCollapsed && this._lastRangeBackward;\n  }\n  /**\n   * Checks whether this selection is equal to the given selection. Selections are equal if they have the same directions,\n   * the same number of ranges and all ranges from one selection equal to ranges from the another selection.\n   *\n   * @param otherSelection Selection to compare with.\n   * @returns `true` if selections are equal, `false` otherwise.\n   */\n  isEqual(otherSelection) {\n    if (this.rangeCount != otherSelection.rangeCount) {\n      return false;\n    } else if (this.rangeCount === 0) {\n      return true;\n    }\n    if (!this.anchor.isEqual(otherSelection.anchor) || !this.focus.isEqual(otherSelection.focus)) {\n      return false;\n    }\n    for (const thisRange of this._ranges) {\n      let found = false;\n      for (const otherRange of otherSelection._ranges) {\n        if (thisRange.isEqual(otherRange)) {\n          found = true;\n          break;\n        }\n      }\n      if (!found) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns an iterable object that iterates over copies of selection ranges.\n   */\n  *getRanges() {\n    for (const range of this._ranges) {\n      yield new Range2(range.start, range.end);\n    }\n  }\n  /**\n   * Returns a copy of the first range in the selection.\n   * First range is the one which {@link module:engine/model/range~Range#start start} position\n   * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n   * (not to confuse with the first range added to the selection).\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getFirstRange() {\n    let first2 = null;\n    for (const range of this._ranges) {\n      if (!first2 || range.start.isBefore(first2.start)) {\n        first2 = range;\n      }\n    }\n    return first2 ? new Range2(first2.start, first2.end) : null;\n  }\n  /**\n   * Returns a copy of the last range in the selection.\n   * Last range is the one which {@link module:engine/model/range~Range#end end} position\n   * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n   * recently added to the selection).\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getLastRange() {\n    let last2 = null;\n    for (const range of this._ranges) {\n      if (!last2 || range.end.isAfter(last2.end)) {\n        last2 = range;\n      }\n    }\n    return last2 ? new Range2(last2.start, last2.end) : null;\n  }\n  /**\n   * Returns the first position in the selection.\n   * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n   * any other position in the selection.\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getFirstPosition() {\n    const first2 = this.getFirstRange();\n    return first2 ? first2.start.clone() : null;\n  }\n  /**\n   * Returns the last position in the selection.\n   * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n   * any other position in the selection.\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getLastPosition() {\n    const lastRange = this.getLastRange();\n    return lastRange ? lastRange.end.clone() : null;\n  }\n  /**\n   * Sets this selection's ranges and direction to the specified location based on the given\n   * {@link module:engine/model/selection~Selectable selectable}.\n   *\n   * ```ts\n   * // Removes all selection's ranges.\n   * selection.setTo( null );\n   *\n   * // Sets selection to the given range.\n   * const range = writer.createRange( start, end );\n   * selection.setTo( range );\n   *\n   * // Sets selection to given ranges.\n   * const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ];\n   * selection.setTo( ranges );\n   *\n   * // Sets selection to other selection.\n   * // Note: It doesn't copy selection attributes.\n   * const otherSelection = writer.createSelection();\n   * selection.setTo( otherSelection );\n   *\n   * // Sets selection to the given document selection.\n   * // Note: It doesn't copy selection attributes.\n   * const documentSelection = new DocumentSelection( doc );\n   * selection.setTo( documentSelection );\n   *\n   * // Sets collapsed selection at the given position.\n   * const position = writer.createPositionFromPath( root, path );\n   * selection.setTo( position );\n   *\n   * // Sets collapsed selection at the position of the given node and an offset.\n   * selection.setTo( paragraph, offset );\n   * ```\n   *\n   * Creates a range inside an {@link module:engine/model/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * ```ts\n   * selection.setTo( paragraph, 'in' );\n   * ```\n   *\n   * Creates a range on an {@link module:engine/model/item~Item item} which starts before the item and ends just after the item.\n   *\n   * ```ts\n   * selection.setTo( paragraph, 'on' );\n   * ```\n   *\n   * `Selection#setTo()`' method allow passing additional options (`backward`) as the last argument.\n   *\n   * ```ts\n   * // Sets backward selection.\n   * const selection = writer.createSelection( range, { backward: true } );\n   * ```\n   */\n  setTo(...args) {\n    let [selectable, placeOrOffset, options] = args;\n    if (typeof placeOrOffset == \"object\") {\n      options = placeOrOffset;\n      placeOrOffset = void 0;\n    }\n    if (selectable === null) {\n      this._setRanges([]);\n    } else if (selectable instanceof _Selection) {\n      this._setRanges(selectable.getRanges(), selectable.isBackward);\n    } else if (selectable && typeof selectable.getRanges == \"function\") {\n      this._setRanges(selectable.getRanges(), selectable.isBackward);\n    } else if (selectable instanceof Range2) {\n      this._setRanges([selectable], !!options && !!options.backward);\n    } else if (selectable instanceof Position2) {\n      this._setRanges([new Range2(selectable)]);\n    } else if (selectable instanceof Node3) {\n      const backward = !!options && !!options.backward;\n      let range;\n      if (placeOrOffset == \"in\") {\n        range = Range2._createIn(selectable);\n      } else if (placeOrOffset == \"on\") {\n        range = Range2._createOn(selectable);\n      } else if (placeOrOffset !== void 0) {\n        range = new Range2(Position2._createAt(selectable, placeOrOffset));\n      } else {\n        throw new CKEditorError(\"model-selection-setto-required-second-parameter\", [this, selectable]);\n      }\n      this._setRanges([range], backward);\n    } else if (isIterable(selectable)) {\n      this._setRanges(selectable, options && !!options.backward);\n    } else {\n      throw new CKEditorError(\"model-selection-setto-not-selectable\", [this, selectable]);\n    }\n  }\n  /**\n   * Replaces all ranges that were added to the selection with given array of ranges. Last range of the array\n   * is treated like the last added range and is used to set {@link module:engine/model/selection~Selection#anchor} and\n   * {@link module:engine/model/selection~Selection#focus}. Accepts a flag describing in which direction the selection is made.\n   *\n   * @fires change:range\n   * @param newRanges Ranges to set.\n   * @param isLastBackward Flag describing if last added range was selected forward - from start to end (`false`)\n   * or backward - from end to start (`true`).\n   */\n  _setRanges(newRanges, isLastBackward = false) {\n    const ranges = Array.from(newRanges);\n    const anyNewRange = ranges.some((newRange) => {\n      if (!(newRange instanceof Range2)) {\n        throw new CKEditorError(\"model-selection-set-ranges-not-range\", [this, newRanges]);\n      }\n      return this._ranges.every((oldRange) => {\n        return !oldRange.isEqual(newRange);\n      });\n    });\n    if (ranges.length === this._ranges.length && !anyNewRange) {\n      return;\n    }\n    this._replaceAllRanges(ranges);\n    this._lastRangeBackward = !!isLastBackward;\n    this.fire(\"change:range\", { directChange: true });\n  }\n  /**\n   * Moves {@link module:engine/model/selection~Selection#focus} to the specified location.\n   *\n   * The location can be specified in the same form as\n   * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n   *\n   * @fires change:range\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  setFocus(itemOrPosition, offset) {\n    if (this.anchor === null) {\n      throw new CKEditorError(\"model-selection-setfocus-no-ranges\", [this, itemOrPosition]);\n    }\n    const newFocus = Position2._createAt(itemOrPosition, offset);\n    if (newFocus.compareWith(this.focus) == \"same\") {\n      return;\n    }\n    const anchor = this.anchor;\n    if (this._ranges.length) {\n      this._popRange();\n    }\n    if (newFocus.compareWith(anchor) == \"before\") {\n      this._pushRange(new Range2(newFocus, anchor));\n      this._lastRangeBackward = true;\n    } else {\n      this._pushRange(new Range2(anchor, newFocus));\n      this._lastRangeBackward = false;\n    }\n    this.fire(\"change:range\", { directChange: true });\n  }\n  /**\n   * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n   *\n   * @param key Key of attribute to look for.\n   * @returns Attribute value or `undefined`.\n   */\n  getAttribute(key) {\n    return this._attrs.get(key);\n  }\n  /**\n   * Returns iterable that iterates over this selection's attributes.\n   *\n   * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n   * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n   */\n  getAttributes() {\n    return this._attrs.entries();\n  }\n  /**\n   * Returns iterable that iterates over this selection's attribute keys.\n   */\n  getAttributeKeys() {\n    return this._attrs.keys();\n  }\n  /**\n   * Checks if the selection has an attribute for given key.\n   *\n   * @param key Key of attribute to check.\n   * @returns `true` if attribute with given key is set on selection, `false` otherwise.\n   */\n  hasAttribute(key) {\n    return this._attrs.has(key);\n  }\n  /**\n   * Removes an attribute with given key from the selection.\n   *\n   * If given attribute was set on the selection, fires the {@link #event:change:range} event with\n   * removed attribute key.\n   *\n   * @fires change:attribute\n   * @param key Key of attribute to remove.\n   */\n  removeAttribute(key) {\n    if (this.hasAttribute(key)) {\n      this._attrs.delete(key);\n      this.fire(\"change:attribute\", { attributeKeys: [key], directChange: true });\n    }\n  }\n  /**\n   * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n   *\n   * If the attribute value has changed, fires the {@link #event:change:range} event with\n   * the attribute key.\n   *\n   * @fires change:attribute\n   * @param key Key of attribute to set.\n   * @param value Attribute value.\n   */\n  setAttribute(key, value) {\n    if (this.getAttribute(key) !== value) {\n      this._attrs.set(key, value);\n      this.fire(\"change:attribute\", { attributeKeys: [key], directChange: true });\n    }\n  }\n  /**\n   * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n   * one range in the selection, and that range contains exactly one element.\n   * Returns `null` if there is no selected element.\n   */\n  getSelectedElement() {\n    if (this.rangeCount !== 1) {\n      return null;\n    }\n    return this.getFirstRange().getContainedElement();\n  }\n  /**\n   * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n   *\n   * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n   *\n   * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n   * but will not return blocks nested in other blocks.\n   *\n   * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n   *\n   * ```xml\n   * <paragraph>[a</paragraph>\n   * <blockQuote>\n   * \t<paragraph>b</paragraph>\n   * </blockQuote>\n   * <paragraph>c]d</paragraph>\n   * ```\n   *\n   * In this case the paragraph will also be returned, despite the collapsed selection:\n   *\n   * ```xml\n   * <paragraph>[]a</paragraph>\n   * ```\n   *\n   * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n   *\n   * ```xml\n   * [<blockA></blockA>\n   * <blockB>\n   * \t<blockC></blockC>\n   * \t<blockD></blockD>\n   * </blockB>\n   * <blockE></blockE>]\n   * ```\n   *\n   * If the selection is inside a block all the inner blocks (A & B) are returned:\n   *\n   * ```xml\n   * <block>\n   * \t<blockA>[a</blockA>\n   * \t<blockB>b]</blockB>\n   * </block>\n   * ```\n   *\n   * **Special case**: Selection ignores first and/or last blocks if nothing (from user perspective) is selected in them.\n   *\n   * ```xml\n   * // Selection ends and the beginning of the last block.\n   * <paragraph>[a</paragraph>\n   * <paragraph>b</paragraph>\n   * <paragraph>]c</paragraph> // This block will not be returned\n   *\n   * // Selection begins at the end of the first block.\n   * <paragraph>a[</paragraph> // This block will not be returned\n   * <paragraph>b</paragraph>\n   * <paragraph>c]</paragraph>\n   *\n   * // Selection begings at the end of the first block and ends at the beginning of the last block.\n   * <paragraph>a[</paragraph> // This block will not be returned\n   * <paragraph>b</paragraph>\n   * <paragraph>]c</paragraph> // This block will not be returned\n   * ```\n   */\n  *getSelectedBlocks() {\n    const visited = /* @__PURE__ */ new WeakSet();\n    for (const range of this.getRanges()) {\n      const startBlock = getParentBlock(range.start, visited);\n      if (isStartBlockSelected(startBlock, range)) {\n        yield startBlock;\n      }\n      for (const value of range.getWalker()) {\n        const block = value.item;\n        if (value.type == \"elementEnd\" && isUnvisitedTopBlock(block, visited, range)) {\n          yield block;\n        }\n      }\n      const endBlock = getParentBlock(range.end, visited);\n      if (isEndBlockSelected(endBlock, range)) {\n        yield endBlock;\n      }\n    }\n  }\n  /**\n   * Checks whether the selection contains the entire content of the given element. This means that selection must start\n   * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n   * touching the element's end.\n   *\n   * By default, this method will check whether the entire content of the selection's current root is selected.\n   * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n   */\n  containsEntireContent(element = this.anchor.root) {\n    const limitStartPosition = Position2._createAt(element, 0);\n    const limitEndPosition = Position2._createAt(element, \"end\");\n    return limitStartPosition.isTouching(this.getFirstPosition()) && limitEndPosition.isTouching(this.getLastPosition());\n  }\n  /**\n   * Adds given range to internal {@link #_ranges ranges array}. Throws an error\n   * if given range is intersecting with any range that is already stored in this selection.\n   */\n  _pushRange(range) {\n    this._checkRange(range);\n    this._ranges.push(new Range2(range.start, range.end));\n  }\n  /**\n   * Checks if given range intersects with ranges that are already in the selection. Throws an error if it does.\n   */\n  _checkRange(range) {\n    for (let i = 0; i < this._ranges.length; i++) {\n      if (range.isIntersecting(this._ranges[i])) {\n        throw new CKEditorError(\"model-selection-range-intersects\", [this, range], { addedRange: range, intersectingRange: this._ranges[i] });\n      }\n    }\n  }\n  /**\n   * Replaces all the ranges by the given ones.\n   * Uses {@link #_popRange _popRange} and {@link #_pushRange _pushRange} to ensure proper ranges removal and addition.\n   */\n  _replaceAllRanges(ranges) {\n    this._removeAllRanges();\n    for (const range of ranges) {\n      this._pushRange(range);\n    }\n  }\n  /**\n   * Deletes ranges from internal range array. Uses {@link #_popRange _popRange} to\n   * ensure proper ranges removal.\n   */\n  _removeAllRanges() {\n    while (this._ranges.length > 0) {\n      this._popRange();\n    }\n  }\n  /**\n   * Removes most recently added range from the selection.\n   */\n  _popRange() {\n    this._ranges.pop();\n  }\n};\nSelection2.prototype.is = function(type) {\n  return type === \"selection\" || type === \"model:selection\";\n};\nfunction isUnvisitedBlock(element, visited) {\n  if (visited.has(element)) {\n    return false;\n  }\n  visited.add(element);\n  return element.root.document.model.schema.isBlock(element) && !!element.parent;\n}\nfunction isUnvisitedTopBlock(element, visited, range) {\n  return isUnvisitedBlock(element, visited) && isTopBlockInRange(element, range);\n}\nfunction getParentBlock(position, visited) {\n  const element = position.parent;\n  const schema = element.root.document.model.schema;\n  const ancestors = position.parent.getAncestors({ parentFirst: true, includeSelf: true });\n  let hasParentLimit = false;\n  const block = ancestors.find((element2) => {\n    if (hasParentLimit) {\n      return false;\n    }\n    hasParentLimit = schema.isLimit(element2);\n    return !hasParentLimit && isUnvisitedBlock(element2, visited);\n  });\n  ancestors.forEach((element2) => visited.add(element2));\n  return block;\n}\nfunction isTopBlockInRange(block, range) {\n  const parentBlock = findAncestorBlock(block);\n  if (!parentBlock) {\n    return true;\n  }\n  const isParentInRange = range.containsRange(Range2._createOn(parentBlock), true);\n  return !isParentInRange;\n}\nfunction isStartBlockSelected(startBlock, range) {\n  if (!startBlock) {\n    return false;\n  }\n  if (range.isCollapsed || startBlock.isEmpty) {\n    return true;\n  }\n  if (range.start.isTouching(Position2._createAt(startBlock, startBlock.maxOffset))) {\n    return false;\n  }\n  return isTopBlockInRange(startBlock, range);\n}\nfunction isEndBlockSelected(endBlock, range) {\n  if (!endBlock) {\n    return false;\n  }\n  if (range.isCollapsed || endBlock.isEmpty) {\n    return true;\n  }\n  if (range.end.isTouching(Position2._createAt(endBlock, 0))) {\n    return false;\n  }\n  return isTopBlockInRange(endBlock, range);\n}\nfunction findAncestorBlock(node) {\n  const schema = node.root.document.model.schema;\n  let parent2 = node.parent;\n  while (parent2) {\n    if (schema.isBlock(parent2)) {\n      return parent2;\n    }\n    parent2 = parent2.parent;\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/liverange.js\nvar LiveRange = class _LiveRange extends EmitterMixin(Range2) {\n  /**\n   * Creates a live range.\n   *\n   * @see module:engine/model/range~Range\n   */\n  constructor(start, end) {\n    super(start, end);\n    bindWithDocument.call(this);\n  }\n  /**\n   * Unbinds all events previously bound by `LiveRange`. Use it whenever you don't need `LiveRange` instance\n   * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n   * referring to it).\n   */\n  detach() {\n    this.stopListening();\n  }\n  /**\n   * Creates a {@link module:engine/model/range~Range range instance} that is equal to this live range.\n   */\n  toRange() {\n    return new Range2(this.start, this.end);\n  }\n  /**\n   * Creates a `LiveRange` instance that is equal to the given range.\n   */\n  static fromRange(range) {\n    return new _LiveRange(range.start, range.end);\n  }\n};\nLiveRange.prototype.is = function(type) {\n  return type === \"liveRange\" || type === \"model:liveRange\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n  type == \"range\" || type === \"model:range\";\n};\nfunction bindWithDocument() {\n  this.listenTo(this.root.document.model, \"applyOperation\", (event, args) => {\n    const operation = args[0];\n    if (!operation.isDocumentOperation) {\n      return;\n    }\n    transform.call(this, operation);\n  }, { priority: \"low\" });\n}\nfunction transform(operation) {\n  const ranges = this.getTransformedByOperation(operation);\n  const result = Range2._createFromRanges(ranges);\n  const boundariesChanged = !result.isEqual(this);\n  const contentChanged = doesOperationChangeRangeContent(this, operation);\n  let deletionPosition = null;\n  if (boundariesChanged) {\n    if (result.root.rootName == \"$graveyard\") {\n      if (operation.type == \"remove\") {\n        deletionPosition = operation.sourcePosition;\n      } else {\n        deletionPosition = operation.deletionPosition;\n      }\n    }\n    const oldRange = this.toRange();\n    this.start = result.start;\n    this.end = result.end;\n    this.fire(\"change:range\", oldRange, { deletionPosition });\n  } else if (contentChanged) {\n    this.fire(\"change:content\", this.toRange(), { deletionPosition });\n  }\n}\nfunction doesOperationChangeRangeContent(range, operation) {\n  switch (operation.type) {\n    case \"insert\":\n      return range.containsPosition(operation.position);\n    case \"move\":\n    case \"remove\":\n    case \"reinsert\":\n    case \"merge\":\n      return range.containsPosition(operation.sourcePosition) || range.start.isEqual(operation.sourcePosition) || range.containsPosition(operation.targetPosition);\n    case \"split\":\n      return range.containsPosition(operation.splitPosition) || range.containsPosition(operation.insertionPosition);\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/documentselection.js\nvar storePrefix = \"selection:\";\nvar DocumentSelection2 = class extends EmitterMixin(TypeCheckable2) {\n  /**\n   * Creates an empty live selection for given {@link module:engine/model/document~Document}.\n   *\n   * @param doc Document which owns this selection.\n   */\n  constructor(doc) {\n    super();\n    this._selection = new LiveSelection(doc);\n    this._selection.delegate(\"change:range\").to(this);\n    this._selection.delegate(\"change:attribute\").to(this);\n    this._selection.delegate(\"change:marker\").to(this);\n  }\n  /**\n   * Describes whether the selection is collapsed. Selection is collapsed when there is exactly one range which is\n   * collapsed.\n   */\n  get isCollapsed() {\n    return this._selection.isCollapsed;\n  }\n  /**\n   * Selection anchor. Anchor may be described as a position where the most recent part of the selection starts.\n   * Together with {@link #focus} they define the direction of selection, which is important\n   * when expanding/shrinking selection. Anchor is always {@link module:engine/model/range~Range#start start} or\n   * {@link module:engine/model/range~Range#end end} position of the most recently added range.\n   *\n   * Is set to `null` if there are no ranges in selection.\n   *\n   * @see #focus\n   */\n  get anchor() {\n    return this._selection.anchor;\n  }\n  /**\n   * Selection focus. Focus is a position where the selection ends.\n   *\n   * Is set to `null` if there are no ranges in selection.\n   *\n   * @see #anchor\n   */\n  get focus() {\n    return this._selection.focus;\n  }\n  /**\n   * Number of ranges in selection.\n   */\n  get rangeCount() {\n    return this._selection.rangeCount;\n  }\n  /**\n   * Describes whether `Documentselection` has own range(s) set, or if it is defaulted to\n   * {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n   */\n  get hasOwnRange() {\n    return this._selection.hasOwnRange;\n  }\n  /**\n   * Specifies whether the {@link #focus}\n   * precedes {@link #anchor}.\n   *\n   * @readonly\n   * @type {Boolean}\n   */\n  get isBackward() {\n    return this._selection.isBackward;\n  }\n  /**\n   * Describes whether the gravity is overridden (using {@link module:engine/model/writer~Writer#overrideSelectionGravity}) or not.\n   *\n   * Note that the gravity remains overridden as long as will not be restored the same number of times as it was overridden.\n   */\n  get isGravityOverridden() {\n    return this._selection.isGravityOverridden;\n  }\n  /**\n   * A collection of selection {@link module:engine/model/markercollection~Marker markers}.\n   * Marker is a selection marker when selection range is inside the marker range.\n   *\n   * **Note**: Only markers from {@link ~DocumentSelection#observeMarkers observed markers groups} are collected.\n   */\n  get markers() {\n    return this._selection.markers;\n  }\n  /**\n   * Used for the compatibility with the {@link module:engine/model/selection~Selection#isEqual} method.\n   *\n   * @internal\n   */\n  get _ranges() {\n    return this._selection._ranges;\n  }\n  /**\n   * Returns an iterable that iterates over copies of selection ranges.\n   */\n  getRanges() {\n    return this._selection.getRanges();\n  }\n  /**\n   * Returns the first position in the selection.\n   * First position is the position that {@link module:engine/model/position~Position#isBefore is before}\n   * any other position in the selection.\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getFirstPosition() {\n    return this._selection.getFirstPosition();\n  }\n  /**\n   * Returns the last position in the selection.\n   * Last position is the position that {@link module:engine/model/position~Position#isAfter is after}\n   * any other position in the selection.\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getLastPosition() {\n    return this._selection.getLastPosition();\n  }\n  /**\n   * Returns a copy of the first range in the selection.\n   * First range is the one which {@link module:engine/model/range~Range#start start} position\n   * {@link module:engine/model/position~Position#isBefore is before} start position of all other ranges\n   * (not to confuse with the first range added to the selection).\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getFirstRange() {\n    return this._selection.getFirstRange();\n  }\n  /**\n   * Returns a copy of the last range in the selection.\n   * Last range is the one which {@link module:engine/model/range~Range#end end} position\n   * {@link module:engine/model/position~Position#isAfter is after} end position of all other ranges (not to confuse with the range most\n   * recently added to the selection).\n   *\n   * Returns `null` if there are no ranges in selection.\n   */\n  getLastRange() {\n    return this._selection.getLastRange();\n  }\n  /**\n   * Gets elements of type {@link module:engine/model/schema~Schema#isBlock \"block\"} touched by the selection.\n   *\n   * This method's result can be used for example to apply block styling to all blocks covered by this selection.\n   *\n   * **Note:** `getSelectedBlocks()` returns blocks that are nested in other non-block elements\n   * but will not return blocks nested in other blocks.\n   *\n   * In this case the function will return exactly all 3 paragraphs (note: `<blockQuote>` is not a block itself):\n   *\n   * ```\n   * <paragraph>[a</paragraph>\n   * <blockQuote>\n   * \t<paragraph>b</paragraph>\n   * </blockQuote>\n   * <paragraph>c]d</paragraph>\n   * ```\n   *\n   * In this case the paragraph will also be returned, despite the collapsed selection:\n   *\n   * ```\n   * <paragraph>[]a</paragraph>\n   * ```\n   *\n   * In such a scenario, however, only blocks A, B & E will be returned as blocks C & D are nested in block B:\n   *\n   * ```\n   * [<blockA></blockA>\n   * <blockB>\n   * \t<blockC></blockC>\n   * \t<blockD></blockD>\n   * </blockB>\n   * <blockE></blockE>]\n   * ```\n   *\n   * If the selection is inside a block all the inner blocks (A & B) are returned:\n   *\n   * ```\n   * <block>\n   * \t<blockA>[a</blockA>\n   * \t<blockB>b]</blockB>\n   * </block>\n   * ```\n   *\n   * **Special case**: If a selection ends at the beginning of a block, that block is not returned as from user perspective\n   * this block wasn't selected. See [#984](https://github.com/ckeditor/ckeditor5-engine/issues/984) for more details.\n   *\n   * ```\n   * <paragraph>[a</paragraph>\n   * <paragraph>b</paragraph>\n   * <paragraph>]c</paragraph> // this block will not be returned\n   * ```\n   */\n  getSelectedBlocks() {\n    return this._selection.getSelectedBlocks();\n  }\n  /**\n   * Returns the selected element. {@link module:engine/model/element~Element Element} is considered as selected if there is only\n   * one range in the selection, and that range contains exactly one element.\n   * Returns `null` if there is no selected element.\n   */\n  getSelectedElement() {\n    return this._selection.getSelectedElement();\n  }\n  /**\n   * Checks whether the selection contains the entire content of the given element. This means that selection must start\n   * at a position {@link module:engine/model/position~Position#isTouching touching} the element's start and ends at position\n   * touching the element's end.\n   *\n   * By default, this method will check whether the entire content of the selection's current root is selected.\n   * Useful to check if e.g. the user has just pressed <kbd>Ctrl</kbd> + <kbd>A</kbd>.\n   */\n  containsEntireContent(element) {\n    return this._selection.containsEntireContent(element);\n  }\n  /**\n   * Unbinds all events previously bound by document selection.\n   */\n  destroy() {\n    this._selection.destroy();\n  }\n  /**\n   * Returns iterable that iterates over this selection's attribute keys.\n   */\n  getAttributeKeys() {\n    return this._selection.getAttributeKeys();\n  }\n  /**\n   * Returns iterable that iterates over this selection's attributes.\n   *\n   * Attributes are returned as arrays containing two items. First one is attribute key and second is attribute value.\n   * This format is accepted by native `Map` object and also can be passed in `Node` constructor.\n   */\n  getAttributes() {\n    return this._selection.getAttributes();\n  }\n  /**\n   * Gets an attribute value for given key or `undefined` if that attribute is not set on the selection.\n   *\n   * @param key Key of attribute to look for.\n   * @returns Attribute value or `undefined`.\n   */\n  getAttribute(key) {\n    return this._selection.getAttribute(key);\n  }\n  /**\n   * Checks if the selection has an attribute for given key.\n   *\n   * @param key Key of attribute to check.\n   * @returns `true` if attribute with given key is set on selection, `false` otherwise.\n   */\n  hasAttribute(key) {\n    return this._selection.hasAttribute(key);\n  }\n  /**\n   * Refreshes selection attributes and markers according to the current position in the model.\n   */\n  refresh() {\n    this._selection.updateMarkers();\n    this._selection._updateAttributes(false);\n  }\n  /**\n   * Registers a marker group prefix or a marker name to be collected in the\n   * {@link ~DocumentSelection#markers selection markers collection}.\n   *\n   * See also {@link module:engine/model/markercollection~MarkerCollection#getMarkersGroup `MarkerCollection#getMarkersGroup()`}.\n   *\n   * @param prefixOrName The marker group prefix or marker name.\n   */\n  observeMarkers(prefixOrName) {\n    this._selection.observeMarkers(prefixOrName);\n  }\n  /**\n   * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n   * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionFocus} method.\n   *\n   * The location can be specified in the same form as\n   * {@link module:engine/model/writer~Writer#createPositionAt writer.createPositionAt()} parameters.\n   *\n   * @see module:engine/model/writer~Writer#setSelectionFocus\n   * @internal\n   * @param offset Offset or one of the flags. Used only when\n   * first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  _setFocus(itemOrPosition, offset) {\n    this._selection.setFocus(itemOrPosition, offset);\n  }\n  /**\n   * Sets this selection's ranges and direction to the specified location based on the given\n   * {@link module:engine/model/selection~Selectable selectable}.\n   * Should be used only within the {@link module:engine/model/writer~Writer#setSelection} method.\n   *\n   * @see module:engine/model/writer~Writer#setSelection\n   * @internal\n   */\n  _setTo(...args) {\n    this._selection.setTo(...args);\n  }\n  /**\n   * Sets attribute on the selection. If attribute with the same key already is set, it's value is overwritten.\n   * Should be used only within the {@link module:engine/model/writer~Writer#setSelectionAttribute} method.\n   *\n   * @see module:engine/model/writer~Writer#setSelectionAttribute\n   * @internal\n   * @param key Key of the attribute to set.\n   * @param value Attribute value.\n   */\n  _setAttribute(key, value) {\n    this._selection.setAttribute(key, value);\n  }\n  /**\n   * Removes an attribute with given key from the selection.\n   * If the given attribute was set on the selection, fires the {@link module:engine/model/selection~Selection#event:change:range}\n   * event with removed attribute key.\n   * Should be used only within the {@link module:engine/model/writer~Writer#removeSelectionAttribute} method.\n   *\n   * @see module:engine/model/writer~Writer#removeSelectionAttribute\n   * @internal\n   * @param key Key of the attribute to remove.\n   */\n  _removeAttribute(key) {\n    this._selection.removeAttribute(key);\n  }\n  /**\n   * Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n   *\n   * @internal\n   */\n  _getStoredAttributes() {\n    return this._selection.getStoredAttributes();\n  }\n  /**\n   * Temporarily changes the gravity of the selection from the left to the right.\n   *\n   * The gravity defines from which direction the selection inherits its attributes. If it's the default left\n   * gravity, the selection (after being moved by the the user) inherits attributes from its left hand side.\n   * This method allows to temporarily override this behavior by forcing the gravity to the right.\n   *\n   * It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n   * of the process.\n   *\n   * @see module:engine/model/writer~Writer#overrideSelectionGravity\n   * @internal\n   * @returns The unique id which allows restoring the gravity.\n   */\n  _overrideGravity() {\n    return this._selection.overrideGravity();\n  }\n  /**\n   * Restores the {@link ~DocumentSelection#_overrideGravity overridden gravity}.\n   *\n   * Restoring the gravity is only possible using the unique identifier returned by\n   * {@link ~DocumentSelection#_overrideGravity}. Note that the gravity remains overridden as long as won't be restored\n   * the same number of times it was overridden.\n   *\n   * @see module:engine/model/writer~Writer#restoreSelectionGravity\n   * @internal\n   * @param uid The unique id returned by {@link #_overrideGravity}.\n   */\n  _restoreGravity(uid2) {\n    this._selection.restoreGravity(uid2);\n  }\n  /**\n   * Generates and returns an attribute key for selection attributes store, basing on original attribute key.\n   *\n   * @internal\n   * @param key Attribute key to convert.\n   * @returns Converted attribute key, applicable for selection store.\n   */\n  static _getStoreAttributeKey(key) {\n    return storePrefix + key;\n  }\n  /**\n   * Checks whether the given attribute key is an attribute stored on an element.\n   *\n   * @internal\n   */\n  static _isStoreAttributeKey(key) {\n    return key.startsWith(storePrefix);\n  }\n};\nDocumentSelection2.prototype.is = function(type) {\n  return type === \"selection\" || type == \"model:selection\" || type == \"documentSelection\" || type == \"model:documentSelection\";\n};\nvar LiveSelection = class extends Selection2 {\n  /**\n   * Creates an empty live selection for given {@link module:engine/model/document~Document}.\n   *\n   * @param doc Document which owns this selection.\n   */\n  constructor(doc) {\n    super();\n    this.markers = new Collection({ idProperty: \"name\" });\n    this._attributePriority = /* @__PURE__ */ new Map();\n    this._selectionRestorePosition = null;\n    this._hasChangedRange = false;\n    this._overriddenGravityRegister = /* @__PURE__ */ new Set();\n    this._observedMarkers = /* @__PURE__ */ new Set();\n    this._model = doc.model;\n    this._document = doc;\n    this.listenTo(this._model, \"applyOperation\", (evt, args) => {\n      const operation = args[0];\n      if (!operation.isDocumentOperation || operation.type == \"marker\" || operation.type == \"rename\" || operation.type == \"noop\") {\n        return;\n      }\n      if (this._ranges.length == 0 && this._selectionRestorePosition) {\n        this._fixGraveyardSelection(this._selectionRestorePosition);\n      }\n      this._selectionRestorePosition = null;\n      if (this._hasChangedRange) {\n        this._hasChangedRange = false;\n        this.fire(\"change:range\", { directChange: false });\n      }\n    }, { priority: \"lowest\" });\n    this.on(\"change:range\", () => {\n      this._validateSelectionRanges(this.getRanges());\n    });\n    this.listenTo(this._model.markers, \"update\", (evt, marker, oldRange, newRange) => {\n      this._updateMarker(marker, newRange);\n    });\n    this.listenTo(this._document, \"change\", (evt, batch) => {\n      clearAttributesStoredInElement(this._model, batch);\n    });\n  }\n  get isCollapsed() {\n    const length = this._ranges.length;\n    return length === 0 ? this._document._getDefaultRange().isCollapsed : super.isCollapsed;\n  }\n  get anchor() {\n    return super.anchor || this._document._getDefaultRange().start;\n  }\n  get focus() {\n    return super.focus || this._document._getDefaultRange().end;\n  }\n  get rangeCount() {\n    return this._ranges.length ? this._ranges.length : 1;\n  }\n  /**\n   * Describes whether `LiveSelection` has own range(s) set, or if it is defaulted to\n   * {@link module:engine/model/document~Document#_getDefaultRange document's default range}.\n   */\n  get hasOwnRange() {\n    return this._ranges.length > 0;\n  }\n  /**\n   * When set to `true` then selection attributes on node before the caret won't be taken\n   * into consideration while updating selection attributes.\n   */\n  get isGravityOverridden() {\n    return !!this._overriddenGravityRegister.size;\n  }\n  /**\n   * Unbinds all events previously bound by live selection.\n   */\n  destroy() {\n    for (let i = 0; i < this._ranges.length; i++) {\n      this._ranges[i].detach();\n    }\n    this.stopListening();\n  }\n  *getRanges() {\n    if (this._ranges.length) {\n      yield* super.getRanges();\n    } else {\n      yield this._document._getDefaultRange();\n    }\n  }\n  getFirstRange() {\n    return super.getFirstRange() || this._document._getDefaultRange();\n  }\n  getLastRange() {\n    return super.getLastRange() || this._document._getDefaultRange();\n  }\n  setTo(...args) {\n    super.setTo(...args);\n    this._updateAttributes(true);\n    this.updateMarkers();\n  }\n  setFocus(itemOrPosition, offset) {\n    super.setFocus(itemOrPosition, offset);\n    this._updateAttributes(true);\n    this.updateMarkers();\n  }\n  setAttribute(key, value) {\n    if (this._setAttribute(key, value)) {\n      const attributeKeys = [key];\n      this.fire(\"change:attribute\", { attributeKeys, directChange: true });\n    }\n  }\n  removeAttribute(key) {\n    if (this._removeAttribute(key)) {\n      const attributeKeys = [key];\n      this.fire(\"change:attribute\", { attributeKeys, directChange: true });\n    }\n  }\n  overrideGravity() {\n    const overrideUid = uid();\n    this._overriddenGravityRegister.add(overrideUid);\n    if (this._overriddenGravityRegister.size === 1) {\n      this._updateAttributes(true);\n    }\n    return overrideUid;\n  }\n  restoreGravity(uid2) {\n    if (!this._overriddenGravityRegister.has(uid2)) {\n      throw new CKEditorError(\"document-selection-gravity-wrong-restore\", this, { uid: uid2 });\n    }\n    this._overriddenGravityRegister.delete(uid2);\n    if (!this.isGravityOverridden) {\n      this._updateAttributes(true);\n    }\n  }\n  observeMarkers(prefixOrName) {\n    this._observedMarkers.add(prefixOrName);\n    this.updateMarkers();\n  }\n  _replaceAllRanges(ranges) {\n    this._validateSelectionRanges(ranges);\n    super._replaceAllRanges(ranges);\n  }\n  _popRange() {\n    this._ranges.pop().detach();\n  }\n  _pushRange(range) {\n    const liveRange = this._prepareRange(range);\n    if (liveRange) {\n      this._ranges.push(liveRange);\n    }\n  }\n  _validateSelectionRanges(ranges) {\n    for (const range of ranges) {\n      if (!this._document._validateSelectionRange(range)) {\n        throw new CKEditorError(\"document-selection-wrong-position\", this, { range });\n      }\n    }\n  }\n  /**\n   * Prepares given range to be added to selection. Checks if it is correct,\n   * converts it to {@link module:engine/model/liverange~LiveRange LiveRange}\n   * and sets listeners listening to the range's change event.\n   */\n  _prepareRange(range) {\n    this._checkRange(range);\n    if (range.root == this._document.graveyard) {\n      return;\n    }\n    const liveRange = LiveRange.fromRange(range);\n    liveRange.on(\"change:range\", (evt, oldRange, data) => {\n      this._hasChangedRange = true;\n      if (liveRange.root == this._document.graveyard) {\n        this._selectionRestorePosition = data.deletionPosition;\n        const index = this._ranges.indexOf(liveRange);\n        this._ranges.splice(index, 1);\n        liveRange.detach();\n      }\n    });\n    return liveRange;\n  }\n  updateMarkers() {\n    if (!this._observedMarkers.size) {\n      return;\n    }\n    const markers = [];\n    let changed = false;\n    for (const marker of this._model.markers) {\n      const markerGroup = marker.name.split(\":\", 1)[0];\n      if (!this._observedMarkers.has(markerGroup)) {\n        continue;\n      }\n      const markerRange = marker.getRange();\n      for (const selectionRange of this.getRanges()) {\n        if (markerRange.containsRange(selectionRange, !selectionRange.isCollapsed)) {\n          markers.push(marker);\n        }\n      }\n    }\n    const oldMarkers = Array.from(this.markers);\n    for (const marker of markers) {\n      if (!this.markers.has(marker)) {\n        this.markers.add(marker);\n        changed = true;\n      }\n    }\n    for (const marker of Array.from(this.markers)) {\n      if (!markers.includes(marker)) {\n        this.markers.remove(marker);\n        changed = true;\n      }\n    }\n    if (changed) {\n      this.fire(\"change:marker\", { oldMarkers, directChange: false });\n    }\n  }\n  _updateMarker(marker, markerRange) {\n    const markerGroup = marker.name.split(\":\", 1)[0];\n    if (!this._observedMarkers.has(markerGroup)) {\n      return;\n    }\n    let changed = false;\n    const oldMarkers = Array.from(this.markers);\n    const hasMarker = this.markers.has(marker);\n    if (!markerRange) {\n      if (hasMarker) {\n        this.markers.remove(marker);\n        changed = true;\n      }\n    } else {\n      let contained = false;\n      for (const selectionRange of this.getRanges()) {\n        if (markerRange.containsRange(selectionRange, !selectionRange.isCollapsed)) {\n          contained = true;\n          break;\n        }\n      }\n      if (contained && !hasMarker) {\n        this.markers.add(marker);\n        changed = true;\n      } else if (!contained && hasMarker) {\n        this.markers.remove(marker);\n        changed = true;\n      }\n    }\n    if (changed) {\n      this.fire(\"change:marker\", { oldMarkers, directChange: false });\n    }\n  }\n  /**\n   * Updates this selection attributes according to its ranges and the {@link module:engine/model/document~Document model document}.\n   */\n  _updateAttributes(clearAll) {\n    const newAttributes = toMap(this._getSurroundingAttributes());\n    const oldAttributes = toMap(this.getAttributes());\n    if (clearAll) {\n      this._attributePriority = /* @__PURE__ */ new Map();\n      this._attrs = /* @__PURE__ */ new Map();\n    } else {\n      for (const [key, priority] of this._attributePriority) {\n        if (priority == \"low\") {\n          this._attrs.delete(key);\n          this._attributePriority.delete(key);\n        }\n      }\n    }\n    this._setAttributesTo(newAttributes);\n    const changed = [];\n    for (const [newKey, newValue] of this.getAttributes()) {\n      if (!oldAttributes.has(newKey) || oldAttributes.get(newKey) !== newValue) {\n        changed.push(newKey);\n      }\n    }\n    for (const [oldKey] of oldAttributes) {\n      if (!this.hasAttribute(oldKey)) {\n        changed.push(oldKey);\n      }\n    }\n    if (changed.length > 0) {\n      this.fire(\"change:attribute\", { attributeKeys: changed, directChange: false });\n    }\n  }\n  /**\n   * Internal method for setting `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n   * parameter).\n   */\n  _setAttribute(key, value, directChange = true) {\n    const priority = directChange ? \"normal\" : \"low\";\n    if (priority == \"low\" && this._attributePriority.get(key) == \"normal\") {\n      return false;\n    }\n    const oldValue = super.getAttribute(key);\n    if (oldValue === value) {\n      return false;\n    }\n    this._attrs.set(key, value);\n    this._attributePriority.set(key, priority);\n    return true;\n  }\n  /**\n   * Internal method for removing `LiveSelection` attribute. Supports attribute priorities (through `directChange`\n   * parameter).\n   *\n   * NOTE: Even if attribute is not present in the selection but is provided to this method, it's priority will\n   * be changed according to `directChange` parameter.\n   */\n  _removeAttribute(key, directChange = true) {\n    const priority = directChange ? \"normal\" : \"low\";\n    if (priority == \"low\" && this._attributePriority.get(key) == \"normal\") {\n      return false;\n    }\n    this._attributePriority.set(key, priority);\n    if (!super.hasAttribute(key)) {\n      return false;\n    }\n    this._attrs.delete(key);\n    return true;\n  }\n  /**\n   * Internal method for setting multiple `LiveSelection` attributes. Supports attribute priorities (through\n   * `directChange` parameter).\n   */\n  _setAttributesTo(attrs) {\n    const changed = /* @__PURE__ */ new Set();\n    for (const [oldKey, oldValue] of this.getAttributes()) {\n      if (attrs.get(oldKey) === oldValue) {\n        continue;\n      }\n      this._removeAttribute(oldKey, false);\n    }\n    for (const [key, value] of attrs) {\n      const gotAdded = this._setAttribute(key, value, false);\n      if (gotAdded) {\n        changed.add(key);\n      }\n    }\n    return changed;\n  }\n  /**\n   * Returns an iterable that iterates through all selection attributes stored in current selection's parent.\n   */\n  *getStoredAttributes() {\n    const selectionParent = this.getFirstPosition().parent;\n    if (this.isCollapsed && selectionParent.isEmpty) {\n      for (const key of selectionParent.getAttributeKeys()) {\n        if (key.startsWith(storePrefix)) {\n          const realKey = key.substr(storePrefix.length);\n          yield [realKey, selectionParent.getAttribute(key)];\n        }\n      }\n    }\n  }\n  /**\n   * Checks model text nodes that are closest to the selection's first position and returns attributes of first\n   * found element. If there are no text nodes in selection's first position parent, it returns selection\n   * attributes stored in that parent.\n   */\n  _getSurroundingAttributes() {\n    const position = this.getFirstPosition();\n    const schema = this._model.schema;\n    if (position.root.rootName == \"$graveyard\") {\n      return null;\n    }\n    let attrs = null;\n    if (!this.isCollapsed) {\n      const range = this.getFirstRange();\n      for (const value of range) {\n        if (value.item.is(\"element\") && schema.isObject(value.item)) {\n          attrs = getTextAttributes(value.item, schema);\n          break;\n        }\n        if (value.type == \"text\") {\n          attrs = value.item.getAttributes();\n          break;\n        }\n      }\n    } else {\n      const nodeBefore = position.textNode ? position.textNode : position.nodeBefore;\n      const nodeAfter = position.textNode ? position.textNode : position.nodeAfter;\n      if (!this.isGravityOverridden) {\n        attrs = getTextAttributes(nodeBefore, schema);\n      }\n      if (!attrs) {\n        attrs = getTextAttributes(nodeAfter, schema);\n      }\n      if (!this.isGravityOverridden && !attrs) {\n        let node = nodeBefore;\n        while (node && !attrs) {\n          node = node.previousSibling;\n          attrs = getTextAttributes(node, schema);\n        }\n      }\n      if (!attrs) {\n        let node = nodeAfter;\n        while (node && !attrs) {\n          node = node.nextSibling;\n          attrs = getTextAttributes(node, schema);\n        }\n      }\n      if (!attrs) {\n        attrs = this.getStoredAttributes();\n      }\n    }\n    return attrs;\n  }\n  /**\n   * Fixes the selection after all its ranges got removed.\n   * @param deletionPosition Position where the deletion happened.\n   */\n  _fixGraveyardSelection(deletionPosition) {\n    const selectionRange = this._model.schema.getNearestSelectionRange(deletionPosition);\n    if (selectionRange) {\n      this._pushRange(selectionRange);\n    }\n  }\n};\nfunction getTextAttributes(node, schema) {\n  if (!node) {\n    return null;\n  }\n  if (node instanceof TextProxy2 || node instanceof Text2) {\n    return node.getAttributes();\n  }\n  if (!schema.isInline(node)) {\n    return null;\n  }\n  if (!schema.isObject(node)) {\n    return [];\n  }\n  const attributes = [];\n  for (const [key, value] of node.getAttributes()) {\n    if (schema.checkAttribute(\"$text\", key) && schema.getAttributeProperties(key).copyFromObject !== false) {\n      attributes.push([key, value]);\n    }\n  }\n  return attributes;\n}\nfunction clearAttributesStoredInElement(model, batch) {\n  const differ = model.document.differ;\n  for (const entry of differ.getChanges()) {\n    if (entry.type != \"insert\") {\n      continue;\n    }\n    const changeParent = entry.position.parent;\n    const isNoLongerEmpty = entry.length === changeParent.maxOffset;\n    if (isNoLongerEmpty) {\n      model.enqueueChange(batch, (writer) => {\n        const storedAttributes = Array.from(changeParent.getAttributeKeys()).filter((key) => key.startsWith(storePrefix));\n        for (const key of storedAttributes) {\n          writer.removeAttribute(key, changeParent);\n        }\n      });\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversionhelpers.js\nvar ConversionHelpers = class {\n  /**\n   * Creates a conversion helpers instance.\n   */\n  constructor(dispatchers) {\n    this._dispatchers = dispatchers;\n  }\n  /**\n   * Registers a conversion helper.\n   *\n   * **Note**: See full usage example in the `{@link module:engine/conversion/conversion~Conversion#for conversion.for()}`\n   * method description.\n   *\n   * @param conversionHelper The function to be called on event.\n   */\n  add(conversionHelper) {\n    for (const dispatcher of this._dispatchers) {\n      conversionHelper(dispatcher);\n    }\n    return this;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/downcasthelpers.js\nvar DowncastHelpers = class extends ConversionHelpers {\n  /**\n   * Model element to view element conversion helper.\n   *\n   * This conversion results in creating a view element. For example, model `<paragraph>Foo</paragraph>` becomes `<p>Foo</p>` in the view.\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: 'paragraph',\n   * \tview: 'p'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: 'paragraph',\n   * \tview: 'div',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: 'fancyParagraph',\n   * \tview: {\n   * \t\tname: 'p',\n   * \t\tclasses: 'fancy'\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: 'heading',\n   * \tview: ( modelElement, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createContainerElement( 'h' + modelElement.getAttribute( 'level' ) );\n   * \t}\n   * } );\n   * ```\n   *\n   * The element-to-element conversion supports the reconversion mechanism. It can be enabled by using either the `attributes` or\n   * the `children` props on a model description. You will find a couple examples below.\n   *\n   * In order to reconvert an element if any of its direct children have been added or removed, use the `children` property on a `model`\n   * description. For example, this model:\n   *\n   * ```xml\n   * <box>\n   * \t<paragraph>Some text.</paragraph>\n   * </box>\n   * ```\n   *\n   * will be converted into this structure in the view:\n   *\n   * ```html\n   * <div class=\"box\" data-type=\"single\">\n   * \t<p>Some text.</p>\n   * </div>\n   * ```\n   *\n   * But if more items were inserted in the model:\n   *\n   * ```xml\n   * <box>\n   * \t<paragraph>Some text.</paragraph>\n   * \t<paragraph>Other item.</paragraph>\n   * </box>\n   * ```\n   *\n   * it will be converted into this structure in the view (note the element `data-type` change):\n   *\n   * ```html\n   * <div class=\"box\" data-type=\"multiple\">\n   * \t<p>Some text.</p>\n   * \t<p>Other item.</p>\n   * </div>\n   * ```\n   *\n   * Such a converter would look like this (note that the `paragraph` elements are converted separately):\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: {\n   * \t\tname: 'box',\n   * \t\tchildren: true\n   * \t},\n   * \tview: ( modelElement, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createContainerElement( 'div', {\n   * \t\t\tclass: 'box',\n   * \t\t\t'data-type': modelElement.childCount == 1 ? 'single' : 'multiple'\n   * \t\t} );\n   * \t}\n   * } );\n   * ```\n   *\n   * In order to reconvert element if any of its attributes have been updated, use the `attributes` property on a `model`\n   * description. For example, this model:\n   *\n   * ```xml\n   * <heading level=\"2\">Some text.</heading>\n   * ```\n   *\n   * will be converted into this structure in the view:\n   *\n   * ```html\n   * <h2>Some text.</h2>\n   * ```\n   *\n   * But if the `heading` element's `level` attribute has been updated to `3` for example, then\n   * it will be converted into this structure in the view:\n   *\n   * ```html\n   * <h3>Some text.</h3>\n   * ```\n   *\n   * Such a converter would look as follows:\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).elementToElement( {\n   * \tmodel: {\n   * \t\tname: 'heading',\n   * \t\tattributes: 'level'\n   * \t},\n   * \tview: ( modelElement, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createContainerElement( 'h' + modelElement.getAttribute( 'level' ) );\n   * \t}\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * You can read more about the element-to-element conversion in the\n   * {@glink framework/deep-dive/conversion/downcast downcast conversion} guide.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The description or a name of the model element to convert.\n   * @param config.model.attributes The list of attribute names that should be consumed while creating\n   * the view element. Note that the view will be reconverted if any of the listed attributes changes.\n   * @param config.model.children Specifies whether the view element requires reconversion if the list\n   * of the model child nodes changed.\n   * @param config.view A view element definition or a function that takes the model element and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n   * as parameters and returns a view container element.\n   */\n  elementToElement(config) {\n    return this.add(downcastElementToElement(config));\n  }\n  /**\n   * The model element to view structure (several elements) conversion helper.\n   *\n   * This conversion results in creating a view structure with one or more slots defined for the child nodes.\n   * For example, a model `<table>` may become this structure in the view:\n   *\n   * ```html\n   * <figure class=\"table\">\n   * \t<table>\n   * \t\t<tbody>${ slot for table rows }</tbody>\n   * \t</table>\n   * </figure>\n   * ```\n   *\n   * The children of the model's `<table>` element will be inserted into the `<tbody>` element.\n   * If the `elementToElement()` helper was used, the children would be inserted into the `<figure>`.\n   *\n   * Imagine a table feature where for this model structure:\n   *\n   * ```xml\n   * <table headingRows=\"1\">\n   * \t<tableRow> ... table cells 1 ... </tableRow>\n   * \t<tableRow> ... table cells 2 ... </tableRow>\n   * \t<tableRow> ... table cells 3 ... </tableRow>\n   * \t<caption>Caption text</caption>\n   * </table>\n   * ```\n   *\n   * we want to generate this view structure:\n   *\n   * ```html\n   * <figure class=\"table\">\n   * \t<table>\n   * \t\t<thead>\n   * \t\t\t<tr> ... table cells 1 ... </tr>\n   * \t\t</thead>\n   * \t\t<tbody>\n   * \t\t\t<tr> ... table cells 2 ... </tr>\n   * \t\t\t<tr> ... table cells 3 ... </tr>\n   * \t\t</tbody>\n   * \t</table>\n   * \t<figcaption>Caption text</figcaption>\n   * </figure>\n   * ```\n   *\n   * The converter has to take the `headingRows` attribute into consideration when allocating the `<tableRow>` elements\n   * into the `<tbody>` and `<thead>` elements. Hence, we need two slots and need to define proper filter callbacks for them.\n   *\n   * Additionally, all elements other than `<tableRow>` should be placed outside the `<table>` tag.\n   * In the example above, this will handle the table caption.\n   *\n   * Such a converter would look like this:\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).elementToStructure( {\n   * \tmodel: {\n   * \t\tname: 'table',\n   * \t\tattributes: [ 'headingRows' ]\n   * \t},\n   * \tview: ( modelElement, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\tconst figureElement = writer.createContainerElement( 'figure', { class: 'table' } );\n   * \t\tconst tableElement = writer.createContainerElement( 'table' );\n   *\n   * \t\twriter.insert( writer.createPositionAt( figureElement, 0 ), tableElement );\n   *\n   * \t\tconst headingRows = modelElement.getAttribute( 'headingRows' ) || 0;\n   *\n   * \t\tif ( headingRows > 0 ) {\n   * \t\t\tconst tableHead = writer.createContainerElement( 'thead' );\n   *\n   * \t\t\tconst headSlot = writer.createSlot( node => node.is( 'element', 'tableRow' ) && node.index < headingRows );\n   *\n   * \t\t\twriter.insert( writer.createPositionAt( tableElement, 'end' ), tableHead );\n   * \t\t\twriter.insert( writer.createPositionAt( tableHead, 0 ), headSlot );\n   * \t\t}\n   *\n   * \t\tif ( headingRows < tableUtils.getRows( table ) ) {\n   * \t\t\tconst tableBody = writer.createContainerElement( 'tbody' );\n   *\n   * \t\t\tconst bodySlot = writer.createSlot( node => node.is( 'element', 'tableRow' ) && node.index >= headingRows );\n   *\n   * \t\t\twriter.insert( writer.createPositionAt( tableElement, 'end' ), tableBody );\n   * \t\t\twriter.insert( writer.createPositionAt( tableBody, 0 ), bodySlot );\n   * \t\t}\n   *\n   * \t\tconst restSlot = writer.createSlot( node => !node.is( 'element', 'tableRow' ) );\n   *\n   * \t\twriter.insert( writer.createPositionAt( figureElement, 'end' ), restSlot );\n   *\n   * \t\treturn figureElement;\n   * \t}\n   * } );\n   * ```\n   *\n   * Note: The children of a model element that's being converted must be allocated in the same order in the view\n   * in which they are placed in the model.\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The description or a name of the model element to convert.\n   * @param config.model.name The name of the model element to convert.\n   * @param config.model.attributes The list of attribute names that should be consumed while creating\n   * the view structure. Note that the view will be reconverted if any of the listed attributes will change.\n   * @param config.view A function that takes the model element and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as parameters\n   * and returns a view container element with slots for model child nodes to be converted into.\n   */\n  elementToStructure(config) {\n    return this.add(downcastElementToStructure(config));\n  }\n  /**\n   * Model attribute to view element conversion helper.\n   *\n   * This conversion results in wrapping view nodes with a view attribute element. For example, a model text node with\n   * `\"Foo\"` as data and the `bold` attribute becomes `<strong>Foo</strong>` in the view.\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: 'bold',\n   * \tview: 'strong'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: 'bold',\n   * \tview: 'b',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: 'invert',\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tclasses: [ 'font-light', 'bg-dark' ]\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: {\n   * \t\tkey: 'fontSize',\n   * \t\tvalues: [ 'big', 'small' ]\n   * \t},\n   * \tview: {\n   * \t\tbig: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'font-size': '1.2em'\n   * \t\t\t}\n   * \t\t},\n   * \t\tsmall: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'font-size': '0.8em'\n   * \t\t\t}\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: 'bold',\n   * \tview: ( modelAttributeValue, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createAttributeElement( 'span', {\n   * \t\t\tstyle: 'font-weight:' + modelAttributeValue\n   * \t\t} );\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToElement( {\n   * \tmodel: {\n   * \t\tkey: 'color',\n   * \t\tname: '$text'\n   * \t},\n   * \tview: ( modelAttributeValue, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createAttributeElement( 'span', {\n   * \t\t\tstyle: 'color:' + modelAttributeValue\n   * \t\t} );\n   * \t}\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The key of the attribute to convert from or a `{ key, values }` object. `values` is an array\n   * of `String`s with possible values if the model attribute is an enumerable.\n   * @param config.view A view element definition or a function\n   * that takes the model attribute value and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as parameters and returns a view\n   * attribute element. If `config.model.values` is given, `config.view` should be an object assigning values from `config.model.values`\n   * to view element definitions or functions.\n   * @param config.converterPriority Converter priority.\n   */\n  attributeToElement(config) {\n    return this.add(downcastAttributeToElement(config));\n  }\n  /**\n   * Model attribute to view attribute conversion helper.\n   *\n   * This conversion results in adding an attribute to a view node, basing on an attribute from a model node. For example,\n   * `<imageInline src='foo.jpg'></imageInline>` is converted to `<img src='foo.jpg'></img>`.\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: 'source',\n   * \tview: 'src'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: 'source',\n   * \tview: 'href',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: {\n   * \t\tname: 'imageInline',\n   * \t\tkey: 'source'\n   * \t},\n   * \tview: 'src'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: {\n   * \t\tname: 'styled',\n   * \t\tvalues: [ 'dark', 'light' ]\n   * \t},\n   * \tview: {\n   * \t\tdark: {\n   * \t\t\tkey: 'class',\n   * \t\t\tvalue: [ 'styled', 'styled-dark' ]\n   * \t\t},\n   * \t\tlight: {\n   * \t\t\tkey: 'class',\n   * \t\t\tvalue: [ 'styled', 'styled-light' ]\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: 'styled',\n   * \tview: modelAttributeValue => ( {\n   * \t\tkey: 'class',\n   * \t\tvalue: 'styled-' + modelAttributeValue\n   * \t} )\n   * } );\n   * ```\n   *\n   * **Note**: Downcasting to a style property requires providing `value` as an object:\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).attributeToAttribute( {\n   * \tmodel: 'lineHeight',\n   * \tview: modelAttributeValue => ( {\n   * \t\tkey: 'style',\n   * \t\tvalue: {\n   * \t\t\t'line-height': modelAttributeValue,\n   * \t\t\t'border-bottom': '1px dotted #ba2'\n   * \t\t}\n   * \t} )\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The key of the attribute to convert from or a `{ key, values, [ name ] }` object describing\n   * the attribute key, possible values and, optionally, an element name to convert from.\n   * @param config.view A view attribute key, or a `{ key, value }` object or a function that takes the model attribute value and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n   * as parameters and returns a `{ key, value }` object. If the `key` is `'class'`, the `value` can be a `String` or an\n   * array of `String`s. If the `key` is `'style'`, the `value` is an object with key-value pairs. In other cases, `value` is a `String`.\n   * If `config.model.values` is set, `config.view` should be an object assigning values from `config.model.values` to\n   * `{ key, value }` objects or a functions.\n   * @param config.converterPriority Converter priority.\n   */\n  attributeToAttribute(config) {\n    return this.add(downcastAttributeToAttribute(config));\n  }\n  /**\n   * Model marker to view element conversion helper.\n   *\n   * **Note**: This method should be used mainly for editing the downcast and it is recommended\n   * to use the {@link #markerToData `#markerToData()`} helper instead.\n   *\n   * This helper may produce invalid HTML code (e.g. a span between table cells).\n   * It should only be used when you are sure that the produced HTML will be semantically correct.\n   *\n   * This conversion results in creating a view element on the boundaries of the converted marker. If the converted marker\n   * is collapsed, only one element is created. For example, a model marker set like this: `<paragraph>F[oo b]ar</paragraph>`\n   * becomes `<p>F<span data-marker=\"search\"></span>oo b<span data-marker=\"search\"></span>ar</p>` in the view.\n   *\n   * ```ts\n   * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n   * \tmodel: 'search',\n   * \tview: 'marker-search'\n   * } );\n   *\n   * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n   * \tmodel: 'search',\n   * \tview: 'search-result',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n   * \tmodel: 'search',\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tattributes: {\n   * \t\t\t'data-marker': 'search'\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'editingDowncast' ).markerToElement( {\n   * \tmodel: 'search',\n   * \tview: ( markerData, conversionApi ) => {\n   * \t\tconst { writer } = conversionApi;\n   *\n   * \t\treturn writer.createUIElement( 'span', {\n   * \t\t\t'data-marker': 'search',\n   * \t\t\t'data-start': markerData.isOpening\n   * \t\t} );\n   * \t}\n   * } );\n   * ```\n   *\n   * If a function is passed as the `config.view` parameter, it will be used to generate both boundary elements. The function\n   * receives the `data` object and {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n   * as a parameters and should return an instance of the\n   * {@link module:engine/view/uielement~UIElement view UI element}. The `data` object and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi `conversionApi`} are passed from\n   * {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}. Additionally,\n   * the `data.isOpening` parameter is passed, which is set to `true` for the marker start boundary element, and `false` for\n   * the marker end boundary element.\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The name of the model marker (or model marker group) to convert.\n   * @param config.view A view element definition or a function that takes the model marker data and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as a parameters\n   * and returns a view UI element.\n   * @param config.converterPriority Converter priority.\n   */\n  markerToElement(config) {\n    return this.add(downcastMarkerToElement(config));\n  }\n  /**\n   * Model marker to highlight conversion helper.\n   *\n   * This conversion results in creating a highlight on view nodes. For this kind of conversion,\n   * the {@link module:engine/conversion/downcasthelpers~HighlightDescriptor} should be provided.\n   *\n   * For text nodes, a `<span>` {@link module:engine/view/attributeelement~AttributeElement} is created and it wraps all text nodes\n   * in the converted marker range. For example, a model marker set like this: `<paragraph>F[oo b]ar</paragraph>` becomes\n   * `<p>F<span class=\"comment\">oo b</span>ar</p>` in the view.\n   *\n   * {@link module:engine/view/containerelement~ContainerElement} may provide a custom way of handling highlight. Most often,\n   * the element itself is given classes and attributes described in the highlight descriptor (instead of being wrapped in `<span>`).\n   * For example, a model marker set like this:\n   * `[<imageInline src=\"foo.jpg\"></imageInline>]` becomes `<img src=\"foo.jpg\" class=\"comment\"></img>` in the view.\n   *\n   * For container elements, the conversion is two-step. While the converter processes the highlight descriptor and passes it\n   * to a container element, it is the container element instance itself that applies values from the highlight descriptor.\n   * So, in a sense, the converter takes care of stating what should be applied on what, while the element decides how to apply that.\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' ).markerToHighlight( { model: 'comment', view: { classes: 'comment' } } );\n   *\n   * editor.conversion.for( 'downcast' ).markerToHighlight( {\n   * \tmodel: 'comment',\n   * \tview: { classes: 'comment' },\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'downcast' ).markerToHighlight( {\n   * \tmodel: 'comment',\n   * \tview: ( data, conversionApi ) => {\n   * \t\t// Assuming that the marker name is in a form of comment:commentType:commentId.\n   * \t\tconst [ , commentType, commentId ] = data.markerName.split( ':' );\n   *\n   * \t\treturn {\n   * \t\t\tclasses: [ 'comment', 'comment-' + commentType ],\n   * \t\t\tattributes: { 'data-comment-id': commentId }\n   * \t\t};\n   * \t}\n   * } );\n   * ```\n   *\n   * If a function is passed as the `config.view` parameter, it will be used to generate the highlight descriptor. The function\n   * receives the `data` object and {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API}\n   * as the parameters and should return a\n   * {@link module:engine/conversion/downcasthelpers~HighlightDescriptor highlight descriptor}.\n   * The `data` object properties are passed from {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher#event:addMarker}.\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The name of the model marker (or model marker group) to convert.\n   * @param config.view A highlight descriptor that will be used for highlighting or a function that takes the model marker data and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as a parameters\n   * and returns a highlight descriptor.\n   * @param config.converterPriority Converter priority.\n   */\n  markerToHighlight(config) {\n    return this.add(downcastMarkerToHighlight(config));\n  }\n  /**\n   * Model marker converter for data downcast.\n   *\n   * This conversion creates a representation for model marker boundaries in the view:\n   *\n   * * If the marker boundary is before or after a model element, a view attribute is set on a corresponding view element.\n   * * In other cases, a view element with the specified tag name is inserted at the corresponding view position.\n   *\n   * Typically, the marker names use the `group:uniqueId:otherData` convention. For example: `comment:e34zfk9k2n459df53sjl34:zx32c`.\n   * The default configuration for this conversion is that the first part is the `group` part and the rest of\n   * the marker name becomes the `name` part.\n   *\n   * Tag and attribute names and values are generated from the marker name:\n   *\n   * * The templates for attributes are `data-[group]-start-before=\"[name]\"`, `data-[group]-start-after=\"[name]\"`,\n   * `data-[group]-end-before=\"[name]\"` and `data-[group]-end-after=\"[name]\"`.\n   * * The templates for view elements are `<[group]-start name=\"[name]\">` and `<[group]-end name=\"[name]\">`.\n   *\n   * Attributes mark whether the given marker's start or end boundary is before or after the given element.\n   * The `data-[group]-start-before` and `data-[group]-end-after` attributes are favored.\n   * The other two are used when the former two cannot be used.\n   *\n   * The conversion configuration can take a function that will generate different group and name parts.\n   * If such a function is set as the `config.view` parameter, it is passed a marker name and it is expected to return an object with two\n   * properties: `group` and `name`. If the function returns a falsy value, the conversion will not take place.\n   *\n   * Basic usage:\n   *\n   * ```ts\n   * // Using the default conversion.\n   * // In this case, all markers with names starting with 'comment:' will be converted.\n   * // The `group` parameter will be set to `comment`.\n   * // The `name` parameter will be the rest of the marker name (without the `:`).\n   * editor.conversion.for( 'dataDowncast' ).markerToData( {\n   * \tmodel: 'comment'\n   * } );\n   * ```\n   *\n   * An example of a view that may be generated by this conversion (assuming a marker with the name `comment:commentId:uid` marked\n   * by `[]`):\n   *\n   * ```\n   * // Model:\n   * <paragraph>Foo[bar</paragraph>\n   * <imageBlock src=\"abc.jpg\"></imageBlock>]\n   *\n   * // View:\n   * <p>Foo<comment-start name=\"commentId:uid\"></comment-start>bar</p>\n   * <figure data-comment-end-after=\"commentId:uid\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n   * ```\n   *\n   * In the example above, the comment starts before \"bar\" and ends after the image.\n   *\n   * If the `name` part is empty, the following view may be generated:\n   *\n   * ```html\n   * <p>Foo <myMarker-start></myMarker-start>bar</p>\n   * <figure data-myMarker-end-after=\"\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n   * ```\n   *\n   * **Note:** A situation where some markers have the `name` part and some do not, is incorrect and should be avoided.\n   *\n   * Examples where `data-group-start-after` and `data-group-end-before` are used:\n   *\n   * ```\n   * // Model:\n   * <blockQuote>[]<paragraph>Foo</paragraph></blockQuote>\n   *\n   * // View:\n   * <blockquote><p data-group-end-before=\"name\" data-group-start-before=\"name\">Foo</p></blockquote>\n   * ```\n   *\n   * Similarly, when a marker is collapsed after the last element:\n   *\n   * ```\n   * // Model:\n   * <blockQuote><paragraph>Foo</paragraph>[]</blockQuote>\n   *\n   * // View:\n   * <blockquote><p data-group-end-after=\"name\" data-group-start-after=\"name\">Foo</p></blockquote>\n   * ```\n   *\n   * When there are multiple markers from the same group stored in the same attribute of the same element, their\n   * name parts are put together in the attribute value, for example: `data-group-start-before=\"name1,name2,name3\"`.\n   *\n   * Other examples of usage:\n   *\n   * ```ts\n   * // Using a custom function which is the same as the default conversion:\n   * editor.conversion.for( 'dataDowncast' ).markerToData( {\n   * \tmodel: 'comment',\n   * \tview: markerName => ( {\n   * \t\tgroup: 'comment',\n   * \t\tname: markerName.substr( 8 ) // Removes 'comment:' part.\n   * \t} )\n   * } );\n   *\n   * // Using the converter priority:\n   * editor.conversion.for( 'dataDowncast' ).markerToData( {\n   * \tmodel: 'comment',\n   * \tview: markerName => ( {\n   * \t\tgroup: 'comment',\n   * \t\tname: markerName.substr( 8 ) // Removes 'comment:' part.\n   * \t} ),\n   * \tconverterPriority: 'high'\n   * } );\n   * ```\n   *\n   * This kind of conversion is useful for saving data into the database, so it should be used in the data conversion pipeline.\n   *\n   * See the {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} API guide to learn how to\n   * add a converter to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.model The name of the model marker (or the model marker group) to convert.\n   * @param config.view A function that takes the model marker name and\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi downcast conversion API} as the parameters\n   * and returns an object with the `group` and `name` properties.\n   * @param config.converterPriority Converter priority.\n   */\n  markerToData(config) {\n    return this.add(downcastMarkerToData(config));\n  }\n};\nfunction insertText() {\n  return (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const viewWriter = conversionApi.writer;\n    const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    const viewText = viewWriter.createText(data.item.data);\n    viewWriter.insert(viewPosition, viewText);\n  };\n}\nfunction insertAttributesAndChildren() {\n  return (evt, data, conversionApi) => {\n    conversionApi.convertAttributes(data.item);\n    if (!data.reconversion && data.item.is(\"element\") && !data.item.isEmpty) {\n      conversionApi.convertChildren(data.item);\n    }\n  };\n}\nfunction remove2() {\n  return (evt, data, conversionApi) => {\n    const viewStart = conversionApi.mapper.toViewPosition(data.position);\n    const modelEnd = data.position.getShiftedBy(data.length);\n    const viewEnd = conversionApi.mapper.toViewPosition(modelEnd, { isPhantom: true });\n    const viewRange = conversionApi.writer.createRange(viewStart, viewEnd);\n    const removed = conversionApi.writer.remove(viewRange.getTrimmed());\n    for (const child of conversionApi.writer.createRangeIn(removed).getItems()) {\n      conversionApi.mapper.unbindViewElement(child, { defer: true });\n    }\n  };\n}\nfunction createViewElementFromHighlightDescriptor(writer, descriptor) {\n  const viewElement = writer.createAttributeElement(\"span\", descriptor.attributes);\n  if (descriptor.classes) {\n    viewElement._addClass(descriptor.classes);\n  }\n  if (typeof descriptor.priority === \"number\") {\n    viewElement._priority = descriptor.priority;\n  }\n  viewElement._id = descriptor.id;\n  return viewElement;\n}\nfunction convertRangeSelection() {\n  return (evt, data, conversionApi) => {\n    const selection = data.selection;\n    if (selection.isCollapsed) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(selection, \"selection\")) {\n      return;\n    }\n    const viewRanges = [];\n    for (const range of selection.getRanges()) {\n      viewRanges.push(conversionApi.mapper.toViewRange(range));\n    }\n    conversionApi.writer.setSelection(viewRanges, { backward: selection.isBackward });\n  };\n}\nfunction convertCollapsedSelection() {\n  return (evt, data, conversionApi) => {\n    const selection = data.selection;\n    if (!selection.isCollapsed) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(selection, \"selection\")) {\n      return;\n    }\n    const viewWriter = conversionApi.writer;\n    const modelPosition = selection.getFirstPosition();\n    const viewPosition = conversionApi.mapper.toViewPosition(modelPosition);\n    const brokenPosition = viewWriter.breakAttributes(viewPosition);\n    viewWriter.setSelection(brokenPosition);\n  };\n}\nfunction cleanSelection() {\n  return (evt, data, conversionApi) => {\n    const viewWriter = conversionApi.writer;\n    const viewSelection = viewWriter.document.selection;\n    for (const range of viewSelection.getRanges()) {\n      if (range.isCollapsed) {\n        if (range.end.parent.isAttached()) {\n          conversionApi.writer.mergeAttributes(range.start);\n        }\n      }\n    }\n    viewWriter.setSelection(null);\n  };\n}\nfunction wrap(elementCreator) {\n  return (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.test(data.item, evt.name)) {\n      return;\n    }\n    const oldViewElement = elementCreator(data.attributeOldValue, conversionApi, data);\n    const newViewElement = elementCreator(data.attributeNewValue, conversionApi, data);\n    if (!oldViewElement && !newViewElement) {\n      return;\n    }\n    conversionApi.consumable.consume(data.item, evt.name);\n    const viewWriter = conversionApi.writer;\n    const viewSelection = viewWriter.document.selection;\n    if (data.item instanceof Selection2 || data.item instanceof DocumentSelection2) {\n      viewWriter.wrap(viewSelection.getFirstRange(), newViewElement);\n    } else {\n      let viewRange = conversionApi.mapper.toViewRange(data.range);\n      if (data.attributeOldValue !== null && oldViewElement) {\n        viewRange = viewWriter.unwrap(viewRange, oldViewElement);\n      }\n      if (data.attributeNewValue !== null && newViewElement) {\n        viewWriter.wrap(viewRange, newViewElement);\n      }\n    }\n  };\n}\nfunction insertElement(elementCreator, consumer = defaultConsumer) {\n  return (evt, data, conversionApi) => {\n    if (!consumer(data.item, conversionApi.consumable, { preflight: true })) {\n      return;\n    }\n    const viewElement = elementCreator(data.item, conversionApi, data);\n    if (!viewElement) {\n      return;\n    }\n    consumer(data.item, conversionApi.consumable);\n    const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    conversionApi.mapper.bindElements(data.item, viewElement);\n    conversionApi.writer.insert(viewPosition, viewElement);\n    conversionApi.convertAttributes(data.item);\n    reinsertOrConvertNodes(viewElement, data.item.getChildren(), conversionApi, { reconversion: data.reconversion });\n  };\n}\nfunction insertStructure(elementCreator, consumer) {\n  return (evt, data, conversionApi) => {\n    if (!consumer(data.item, conversionApi.consumable, { preflight: true })) {\n      return;\n    }\n    const slotsMap = /* @__PURE__ */ new Map();\n    conversionApi.writer._registerSlotFactory(createSlotFactory(data.item, slotsMap, conversionApi));\n    const viewElement = elementCreator(data.item, conversionApi, data);\n    conversionApi.writer._clearSlotFactory();\n    if (!viewElement) {\n      return;\n    }\n    validateSlotsChildren(data.item, slotsMap, conversionApi);\n    consumer(data.item, conversionApi.consumable);\n    const viewPosition = conversionApi.mapper.toViewPosition(data.range.start);\n    conversionApi.mapper.bindElements(data.item, viewElement);\n    conversionApi.writer.insert(viewPosition, viewElement);\n    conversionApi.convertAttributes(data.item);\n    fillSlots(viewElement, slotsMap, conversionApi, { reconversion: data.reconversion });\n  };\n}\nfunction insertUIElement(elementCreator) {\n  return (evt, data, conversionApi) => {\n    data.isOpening = true;\n    const viewStartElement = elementCreator(data, conversionApi);\n    data.isOpening = false;\n    const viewEndElement = elementCreator(data, conversionApi);\n    if (!viewStartElement || !viewEndElement) {\n      return;\n    }\n    const markerRange = data.markerRange;\n    if (markerRange.isCollapsed && !conversionApi.consumable.consume(markerRange, evt.name)) {\n      return;\n    }\n    for (const value of markerRange) {\n      if (!conversionApi.consumable.consume(value.item, evt.name)) {\n        return;\n      }\n    }\n    const mapper = conversionApi.mapper;\n    const viewWriter = conversionApi.writer;\n    viewWriter.insert(mapper.toViewPosition(markerRange.start), viewStartElement);\n    conversionApi.mapper.bindElementToMarker(viewStartElement, data.markerName);\n    if (!markerRange.isCollapsed) {\n      viewWriter.insert(mapper.toViewPosition(markerRange.end), viewEndElement);\n      conversionApi.mapper.bindElementToMarker(viewEndElement, data.markerName);\n    }\n    evt.stop();\n  };\n}\nfunction removeUIElement() {\n  return (evt, data, conversionApi) => {\n    const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n    if (!elements) {\n      return;\n    }\n    for (const element of elements) {\n      conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n      conversionApi.writer.clear(conversionApi.writer.createRangeOn(element), element);\n    }\n    conversionApi.writer.clearClonedElementsGroup(data.markerName);\n    evt.stop();\n  };\n}\nfunction insertMarkerData(viewCreator) {\n  return (evt, data, conversionApi) => {\n    const viewMarkerData = viewCreator(data.markerName, conversionApi);\n    if (!viewMarkerData) {\n      return;\n    }\n    const markerRange = data.markerRange;\n    if (!conversionApi.consumable.consume(markerRange, evt.name)) {\n      return;\n    }\n    handleMarkerBoundary(markerRange, false, conversionApi, data, viewMarkerData);\n    handleMarkerBoundary(markerRange, true, conversionApi, data, viewMarkerData);\n    evt.stop();\n  };\n}\nfunction handleMarkerBoundary(range, isStart, conversionApi, data, viewMarkerData) {\n  const modelPosition = isStart ? range.start : range.end;\n  const elementAfter = modelPosition.nodeAfter && modelPosition.nodeAfter.is(\"element\") ? modelPosition.nodeAfter : null;\n  const elementBefore = modelPosition.nodeBefore && modelPosition.nodeBefore.is(\"element\") ? modelPosition.nodeBefore : null;\n  if (elementAfter || elementBefore) {\n    let modelElement;\n    let isBefore;\n    if (isStart && elementAfter || !isStart && !elementBefore) {\n      modelElement = elementAfter;\n      isBefore = true;\n    } else {\n      modelElement = elementBefore;\n      isBefore = false;\n    }\n    const viewElement = conversionApi.mapper.toViewElement(modelElement);\n    if (viewElement) {\n      insertMarkerAsAttribute(viewElement, isStart, isBefore, conversionApi, data, viewMarkerData);\n      return;\n    }\n  }\n  const viewPosition = conversionApi.mapper.toViewPosition(modelPosition);\n  insertMarkerAsElement(viewPosition, isStart, conversionApi, data, viewMarkerData);\n}\nfunction insertMarkerAsAttribute(viewElement, isStart, isBefore, conversionApi, data, viewMarkerData) {\n  const attributeName = `data-${viewMarkerData.group}-${isStart ? \"start\" : \"end\"}-${isBefore ? \"before\" : \"after\"}`;\n  const markerNames = viewElement.hasAttribute(attributeName) ? viewElement.getAttribute(attributeName).split(\",\") : [];\n  markerNames.unshift(viewMarkerData.name);\n  conversionApi.writer.setAttribute(attributeName, markerNames.join(\",\"), viewElement);\n  conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n}\nfunction insertMarkerAsElement(position, isStart, conversionApi, data, viewMarkerData) {\n  const viewElementName = `${viewMarkerData.group}-${isStart ? \"start\" : \"end\"}`;\n  const attrs = viewMarkerData.name ? { \"name\": viewMarkerData.name } : null;\n  const viewElement = conversionApi.writer.createUIElement(viewElementName, attrs);\n  conversionApi.writer.insert(position, viewElement);\n  conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n}\nfunction removeMarkerData(viewCreator) {\n  return (evt, data, conversionApi) => {\n    const viewData = viewCreator(data.markerName, conversionApi);\n    if (!viewData) {\n      return;\n    }\n    const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n    if (!elements) {\n      return;\n    }\n    for (const element of elements) {\n      conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n      if (element.is(\"containerElement\")) {\n        removeMarkerFromAttribute(`data-${viewData.group}-start-before`, element);\n        removeMarkerFromAttribute(`data-${viewData.group}-start-after`, element);\n        removeMarkerFromAttribute(`data-${viewData.group}-end-before`, element);\n        removeMarkerFromAttribute(`data-${viewData.group}-end-after`, element);\n      } else {\n        conversionApi.writer.clear(conversionApi.writer.createRangeOn(element), element);\n      }\n    }\n    conversionApi.writer.clearClonedElementsGroup(data.markerName);\n    evt.stop();\n    function removeMarkerFromAttribute(attributeName, element) {\n      if (element.hasAttribute(attributeName)) {\n        const markerNames = new Set(element.getAttribute(attributeName).split(\",\"));\n        markerNames.delete(viewData.name);\n        if (markerNames.size == 0) {\n          conversionApi.writer.removeAttribute(attributeName, element);\n        } else {\n          conversionApi.writer.setAttribute(attributeName, Array.from(markerNames).join(\",\"), element);\n        }\n      }\n    }\n  };\n}\nfunction changeAttribute(attributeCreator) {\n  return (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.test(data.item, evt.name)) {\n      return;\n    }\n    const oldAttribute = attributeCreator(data.attributeOldValue, conversionApi, data);\n    const newAttribute = attributeCreator(data.attributeNewValue, conversionApi, data);\n    if (!oldAttribute && !newAttribute) {\n      return;\n    }\n    conversionApi.consumable.consume(data.item, evt.name);\n    const viewElement = conversionApi.mapper.toViewElement(data.item);\n    const viewWriter = conversionApi.writer;\n    if (!viewElement) {\n      throw new CKEditorError(\"conversion-attribute-to-attribute-on-text\", conversionApi.dispatcher, data);\n    }\n    if (data.attributeOldValue !== null && oldAttribute) {\n      if (oldAttribute.key == \"class\") {\n        const classes = toArray(oldAttribute.value);\n        for (const className of classes) {\n          viewWriter.removeClass(className, viewElement);\n        }\n      } else if (oldAttribute.key == \"style\") {\n        const keys2 = Object.keys(oldAttribute.value);\n        for (const key of keys2) {\n          viewWriter.removeStyle(key, viewElement);\n        }\n      } else {\n        viewWriter.removeAttribute(oldAttribute.key, viewElement);\n      }\n    }\n    if (data.attributeNewValue !== null && newAttribute) {\n      if (newAttribute.key == \"class\") {\n        const classes = toArray(newAttribute.value);\n        for (const className of classes) {\n          viewWriter.addClass(className, viewElement);\n        }\n      } else if (newAttribute.key == \"style\") {\n        const keys2 = Object.keys(newAttribute.value);\n        for (const key of keys2) {\n          viewWriter.setStyle(key, newAttribute.value[key], viewElement);\n        }\n      } else {\n        viewWriter.setAttribute(newAttribute.key, newAttribute.value, viewElement);\n      }\n    }\n  };\n}\nfunction highlightText(highlightDescriptor) {\n  return (evt, data, conversionApi) => {\n    if (!data.item) {\n      return;\n    }\n    if (!(data.item instanceof Selection2 || data.item instanceof DocumentSelection2) && !data.item.is(\"$textProxy\")) {\n      return;\n    }\n    const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const viewWriter = conversionApi.writer;\n    const viewElement = createViewElementFromHighlightDescriptor(viewWriter, descriptor);\n    const viewSelection = viewWriter.document.selection;\n    if (data.item instanceof Selection2 || data.item instanceof DocumentSelection2) {\n      viewWriter.wrap(viewSelection.getFirstRange(), viewElement);\n    } else {\n      const viewRange = conversionApi.mapper.toViewRange(data.range);\n      const rangeAfterWrap = viewWriter.wrap(viewRange, viewElement);\n      for (const element of rangeAfterWrap.getItems()) {\n        if (element.is(\"attributeElement\") && element.isSimilar(viewElement)) {\n          conversionApi.mapper.bindElementToMarker(element, data.markerName);\n          break;\n        }\n      }\n    }\n  };\n}\nfunction highlightElement(highlightDescriptor) {\n  return (evt, data, conversionApi) => {\n    if (!data.item) {\n      return;\n    }\n    if (!(data.item instanceof Element2)) {\n      return;\n    }\n    const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n    if (!conversionApi.consumable.test(data.item, evt.name)) {\n      return;\n    }\n    const viewElement = conversionApi.mapper.toViewElement(data.item);\n    if (viewElement && viewElement.getCustomProperty(\"addHighlight\")) {\n      conversionApi.consumable.consume(data.item, evt.name);\n      for (const value of Range2._createIn(data.item)) {\n        conversionApi.consumable.consume(value.item, evt.name);\n      }\n      const addHighlightCallback = viewElement.getCustomProperty(\"addHighlight\");\n      addHighlightCallback(viewElement, descriptor, conversionApi.writer);\n      conversionApi.mapper.bindElementToMarker(viewElement, data.markerName);\n    }\n  };\n}\nfunction removeHighlight(highlightDescriptor) {\n  return (evt, data, conversionApi) => {\n    if (data.markerRange.isCollapsed) {\n      return;\n    }\n    const descriptor = prepareDescriptor(highlightDescriptor, data, conversionApi);\n    if (!descriptor) {\n      return;\n    }\n    const viewHighlightElement = createViewElementFromHighlightDescriptor(conversionApi.writer, descriptor);\n    const elements = conversionApi.mapper.markerNameToElements(data.markerName);\n    if (!elements) {\n      return;\n    }\n    for (const element of elements) {\n      conversionApi.mapper.unbindElementFromMarkerName(element, data.markerName);\n      if (element.is(\"attributeElement\")) {\n        conversionApi.writer.unwrap(conversionApi.writer.createRangeOn(element), viewHighlightElement);\n      } else {\n        const removeHighlightCallback = element.getCustomProperty(\"removeHighlight\");\n        removeHighlightCallback(element, descriptor.id, conversionApi.writer);\n      }\n    }\n    conversionApi.writer.clearClonedElementsGroup(data.markerName);\n    evt.stop();\n  };\n}\nfunction downcastElementToElement(config) {\n  const model = normalizeModelElementConfig(config.model);\n  const view = normalizeToElementConfig(config.view, \"container\");\n  if (model.attributes.length) {\n    model.children = true;\n  }\n  return (dispatcher) => {\n    dispatcher.on(`insert:${model.name}`, insertElement(view, createConsumer(model)), { priority: config.converterPriority || \"normal\" });\n    if (model.children || model.attributes.length) {\n      dispatcher.on(\"reduceChanges\", createChangeReducer(model), { priority: \"low\" });\n    }\n  };\n}\nfunction downcastElementToStructure(config) {\n  const model = normalizeModelElementConfig(config.model);\n  const view = normalizeToElementConfig(config.view, \"container\");\n  model.children = true;\n  return (dispatcher) => {\n    if (dispatcher._conversionApi.schema.checkChild(model.name, \"$text\")) {\n      throw new CKEditorError(\"conversion-element-to-structure-disallowed-text\", dispatcher, { elementName: model.name });\n    }\n    dispatcher.on(`insert:${model.name}`, insertStructure(view, createConsumer(model)), { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(\"reduceChanges\", createChangeReducer(model), { priority: \"low\" });\n  };\n}\nfunction downcastAttributeToElement(config) {\n  config = cloneDeep_default(config);\n  let model = config.model;\n  if (typeof model == \"string\") {\n    model = { key: model };\n  }\n  let eventName = `attribute:${model.key}`;\n  if (model.name) {\n    eventName += \":\" + model.name;\n  }\n  if (model.values) {\n    for (const modelValue of model.values) {\n      config.view[modelValue] = normalizeToElementConfig(config.view[modelValue], \"attribute\");\n    }\n  } else {\n    config.view = normalizeToElementConfig(config.view, \"attribute\");\n  }\n  const elementCreator = getFromAttributeCreator(config);\n  return (dispatcher) => {\n    dispatcher.on(eventName, wrap(elementCreator), { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction downcastAttributeToAttribute(config) {\n  config = cloneDeep_default(config);\n  let model = config.model;\n  if (typeof model == \"string\") {\n    model = { key: model };\n  }\n  let eventName = `attribute:${model.key}`;\n  if (model.name) {\n    eventName += \":\" + model.name;\n  }\n  if (model.values) {\n    for (const modelValue of model.values) {\n      config.view[modelValue] = normalizeToAttributeConfig(config.view[modelValue]);\n    }\n  } else {\n    config.view = normalizeToAttributeConfig(config.view);\n  }\n  const elementCreator = getFromAttributeCreator(config);\n  return (dispatcher) => {\n    dispatcher.on(eventName, changeAttribute(elementCreator), { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction downcastMarkerToElement(config) {\n  const view = normalizeToElementConfig(config.view, \"ui\");\n  return (dispatcher) => {\n    dispatcher.on(`addMarker:${config.model}`, insertUIElement(view), { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(`removeMarker:${config.model}`, removeUIElement(), { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction downcastMarkerToData(config) {\n  config = cloneDeep_default(config);\n  const group = config.model;\n  let view = config.view;\n  if (!view) {\n    view = (markerName) => ({\n      group,\n      name: markerName.substr(config.model.length + 1)\n    });\n  }\n  return (dispatcher) => {\n    dispatcher.on(`addMarker:${group}`, insertMarkerData(view), { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(`removeMarker:${group}`, removeMarkerData(view), { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction downcastMarkerToHighlight(config) {\n  return (dispatcher) => {\n    dispatcher.on(`addMarker:${config.model}`, highlightText(config.view), { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(`addMarker:${config.model}`, highlightElement(config.view), { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(`removeMarker:${config.model}`, removeHighlight(config.view), { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction normalizeModelElementConfig(model) {\n  if (typeof model == \"string\") {\n    model = { name: model };\n  }\n  return {\n    name: model.name,\n    attributes: model.attributes ? toArray(model.attributes) : [],\n    children: !!model.children\n  };\n}\nfunction normalizeToElementConfig(view, viewElementType) {\n  if (typeof view == \"function\") {\n    return view;\n  }\n  return (modelData, conversionApi) => createViewElementFromDefinition(view, conversionApi, viewElementType);\n}\nfunction createViewElementFromDefinition(viewElementDefinition, conversionApi, viewElementType) {\n  if (typeof viewElementDefinition == \"string\") {\n    viewElementDefinition = { name: viewElementDefinition };\n  }\n  let element;\n  const viewWriter = conversionApi.writer;\n  const attributes = Object.assign({}, viewElementDefinition.attributes);\n  if (viewElementType == \"container\") {\n    element = viewWriter.createContainerElement(viewElementDefinition.name, attributes);\n  } else if (viewElementType == \"attribute\") {\n    const options = {\n      priority: viewElementDefinition.priority || attributeelement_default.DEFAULT_PRIORITY\n    };\n    element = viewWriter.createAttributeElement(viewElementDefinition.name, attributes, options);\n  } else {\n    element = viewWriter.createUIElement(viewElementDefinition.name, attributes);\n  }\n  if (viewElementDefinition.styles) {\n    const keys2 = Object.keys(viewElementDefinition.styles);\n    for (const key of keys2) {\n      viewWriter.setStyle(key, viewElementDefinition.styles[key], element);\n    }\n  }\n  if (viewElementDefinition.classes) {\n    const classes = viewElementDefinition.classes;\n    if (typeof classes == \"string\") {\n      viewWriter.addClass(classes, element);\n    } else {\n      for (const className of classes) {\n        viewWriter.addClass(className, element);\n      }\n    }\n  }\n  return element;\n}\nfunction getFromAttributeCreator(config) {\n  if (config.model.values) {\n    return (modelAttributeValue, conversionApi, data) => {\n      const view = config.view[modelAttributeValue];\n      if (view) {\n        return view(modelAttributeValue, conversionApi, data);\n      }\n      return null;\n    };\n  } else {\n    return config.view;\n  }\n}\nfunction normalizeToAttributeConfig(view) {\n  if (typeof view == \"string\") {\n    return (modelAttributeValue) => ({ key: view, value: modelAttributeValue });\n  } else if (typeof view == \"object\") {\n    if (view.value) {\n      return () => view;\n    } else {\n      return (modelAttributeValue) => ({ key: view.key, value: modelAttributeValue });\n    }\n  } else {\n    return view;\n  }\n}\nfunction prepareDescriptor(highlightDescriptor, data, conversionApi) {\n  const descriptor = typeof highlightDescriptor == \"function\" ? highlightDescriptor(data, conversionApi) : highlightDescriptor;\n  if (!descriptor) {\n    return null;\n  }\n  if (!descriptor.priority) {\n    descriptor.priority = 10;\n  }\n  if (!descriptor.id) {\n    descriptor.id = data.markerName;\n  }\n  return descriptor;\n}\nfunction createChangeReducerCallback(model) {\n  return (node, change) => {\n    if (!node.is(\"element\", model.name)) {\n      return false;\n    }\n    if (change.type == \"attribute\") {\n      if (model.attributes.includes(change.attributeKey)) {\n        return true;\n      }\n    } else {\n      if (model.children) {\n        return true;\n      }\n    }\n    return false;\n  };\n}\nfunction createChangeReducer(model) {\n  const shouldReplace = createChangeReducerCallback(model);\n  return (evt, data) => {\n    const reducedChanges = [];\n    if (!data.reconvertedElements) {\n      data.reconvertedElements = /* @__PURE__ */ new Set();\n    }\n    for (const change of data.changes) {\n      const node = change.type == \"attribute\" ? change.range.start.nodeAfter : change.position.parent;\n      if (!node || !shouldReplace(node, change)) {\n        reducedChanges.push(change);\n        continue;\n      }\n      if (!data.reconvertedElements.has(node)) {\n        data.reconvertedElements.add(node);\n        const position = Position2._createBefore(node);\n        let changeIndex = reducedChanges.length;\n        for (let i = reducedChanges.length - 1; i >= 0; i--) {\n          const change2 = reducedChanges[i];\n          const changePosition = change2.type == \"attribute\" ? change2.range.start : change2.position;\n          const positionRelation = changePosition.compareWith(position);\n          if (positionRelation == \"before\" || change2.type == \"remove\" && positionRelation == \"same\") {\n            break;\n          }\n          changeIndex = i;\n        }\n        reducedChanges.splice(changeIndex, 0, {\n          type: \"remove\",\n          name: node.name,\n          position,\n          length: 1\n        }, {\n          type: \"reinsert\",\n          name: node.name,\n          position,\n          length: 1\n        });\n      }\n    }\n    data.changes = reducedChanges;\n  };\n}\nfunction createConsumer(model) {\n  return (node, consumable, options = {}) => {\n    const events = [\"insert\"];\n    for (const attributeName of model.attributes) {\n      if (node.hasAttribute(attributeName)) {\n        events.push(`attribute:${attributeName}`);\n      }\n    }\n    if (!events.every((event) => consumable.test(node, event))) {\n      return false;\n    }\n    if (!options.preflight) {\n      events.forEach((event) => consumable.consume(node, event));\n    }\n    return true;\n  };\n}\nfunction createSlotFactory(element, slotsMap, conversionApi) {\n  return (writer, modeOrFilter) => {\n    const slot = writer.createContainerElement(\"$slot\");\n    let children = null;\n    if (modeOrFilter === \"children\") {\n      children = Array.from(element.getChildren());\n    } else if (typeof modeOrFilter == \"function\") {\n      children = Array.from(element.getChildren()).filter((element2) => modeOrFilter(element2));\n    } else {\n      throw new CKEditorError(\"conversion-slot-mode-unknown\", conversionApi.dispatcher, { modeOrFilter });\n    }\n    slotsMap.set(slot, children);\n    return slot;\n  };\n}\nfunction validateSlotsChildren(element, slotsMap, conversionApi) {\n  const childrenInSlots = Array.from(slotsMap.values()).flat();\n  const uniqueChildrenInSlots = new Set(childrenInSlots);\n  if (uniqueChildrenInSlots.size != childrenInSlots.length) {\n    throw new CKEditorError(\"conversion-slot-filter-overlap\", conversionApi.dispatcher, { element });\n  }\n  if (uniqueChildrenInSlots.size != element.childCount) {\n    throw new CKEditorError(\"conversion-slot-filter-incomplete\", conversionApi.dispatcher, { element });\n  }\n}\nfunction fillSlots(viewElement, slotsMap, conversionApi, options) {\n  conversionApi.mapper.on(\"modelToViewPosition\", toViewPositionMapping, { priority: \"highest\" });\n  let currentSlot = null;\n  let currentSlotNodes = null;\n  for ([currentSlot, currentSlotNodes] of slotsMap) {\n    reinsertOrConvertNodes(viewElement, currentSlotNodes, conversionApi, options);\n    conversionApi.writer.move(conversionApi.writer.createRangeIn(currentSlot), conversionApi.writer.createPositionBefore(currentSlot));\n    conversionApi.writer.remove(currentSlot);\n  }\n  conversionApi.mapper.off(\"modelToViewPosition\", toViewPositionMapping);\n  function toViewPositionMapping(evt, data) {\n    const element = data.modelPosition.nodeAfter;\n    const index = currentSlotNodes.indexOf(element);\n    if (index < 0) {\n      return;\n    }\n    data.viewPosition = data.mapper.findPositionIn(currentSlot, index);\n  }\n}\nfunction reinsertOrConvertNodes(viewElement, modelNodes, conversionApi, options) {\n  for (const modelChildNode of modelNodes) {\n    if (!reinsertNode(viewElement.root, modelChildNode, conversionApi, options)) {\n      conversionApi.convertItem(modelChildNode);\n    }\n  }\n}\nfunction reinsertNode(viewRoot, modelNode, conversionApi, options) {\n  const { writer, mapper } = conversionApi;\n  if (!options.reconversion) {\n    return false;\n  }\n  const viewChildNode = mapper.toViewElement(modelNode);\n  if (!viewChildNode || viewChildNode.root == viewRoot) {\n    return false;\n  }\n  if (!conversionApi.canReuseView(viewChildNode)) {\n    return false;\n  }\n  writer.move(writer.createRangeOn(viewChildNode), mapper.toViewPosition(Position2._createBefore(modelNode)));\n  return true;\n}\nfunction defaultConsumer(item, consumable, { preflight } = {}) {\n  if (preflight) {\n    return consumable.test(item, \"insert\");\n  } else {\n    return consumable.consume(item, \"insert\");\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/autoparagraphing.js\nfunction autoParagraphEmptyRoots(writer) {\n  const { schema, document: document2 } = writer.model;\n  for (const root2 of document2.getRoots()) {\n    if (root2.isEmpty && !schema.checkChild(root2, \"$text\")) {\n      if (schema.checkChild(root2, \"paragraph\")) {\n        writer.insertElement(\"paragraph\", root2);\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction isParagraphable(position, nodeOrType, schema) {\n  const context = schema.createContext(position);\n  if (!schema.checkChild(context, \"paragraph\")) {\n    return false;\n  }\n  if (!schema.checkChild(context.push(\"paragraph\"), nodeOrType)) {\n    return false;\n  }\n  return true;\n}\nfunction wrapInParagraph(position, writer) {\n  const paragraph2 = writer.createElement(\"paragraph\");\n  writer.insert(paragraph2, position);\n  return writer.createPositionAt(paragraph2, 0);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcasthelpers.js\nvar UpcastHelpers = class extends ConversionHelpers {\n  /**\n   * View element to model element conversion helper.\n   *\n   * This conversion results in creating a model element. For example,\n   * view `<p>Foo</p>` becomes `<paragraph>Foo</paragraph>` in the model.\n   *\n   * Keep in mind that the element will be inserted only if it is allowed\n   * by {@link module:engine/model/schema~Schema schema} configuration.\n   *\n   * ```ts\n   * editor.conversion.for( 'upcast' ).elementToElement( {\n   * \tview: 'p',\n   * \tmodel: 'paragraph'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToElement( {\n   * \tview: 'p',\n   * \tmodel: 'paragraph',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToElement( {\n   * \tview: {\n   * \t\tname: 'p',\n   * \t\tclasses: 'fancy'\n   * \t},\n   * \tmodel: 'fancyParagraph'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToElement( {\n   * \tview: {\n   * \t\tname: 'p',\n   * \t\tclasses: 'heading'\n   * \t},\n   * \tmodel: ( viewElement, conversionApi ) => {\n   * \t\tconst modelWriter = conversionApi.writer;\n   *\n   * \t\treturn modelWriter.createElement( 'heading', { level: viewElement.getAttribute( 'data-level' ) } );\n   * \t}\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.view Pattern matching all view elements which should be converted. If not set, the converter\n   * will fire for every view element.\n   * @param config.model Name of the model element, a model element instance or a function that takes a view element\n   * and {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API}\n   * and returns a model element. The model element will be inserted in the model.\n   * @param config.converterPriority Converter priority.\n   */\n  elementToElement(config) {\n    return this.add(upcastElementToElement(config));\n  }\n  /**\n   * View element to model attribute conversion helper.\n   *\n   * This conversion results in setting an attribute on a model node. For example, view `<strong>Foo</strong>` becomes\n   * `Foo` {@link module:engine/model/text~Text model text node} with `bold` attribute set to `true`.\n   *\n   * This helper is meant to set a model attribute on all the elements that are inside the converted element:\n   *\n   * ```\n   * <strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n   * ```\n   *\n   * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n   * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text. See\n   * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute} for comparison.\n   *\n   * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n   *\n   * ```ts\n   * editor.conversion.for( 'upcast' ).elementToAttribute( {\n   * \tview: 'strong',\n   * \tmodel: 'bold'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToAttribute( {\n   * \tview: 'strong',\n   * \tmodel: 'bold',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToAttribute( {\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tclasses: 'bold'\n   * \t},\n   * \tmodel: 'bold'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToAttribute( {\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tclasses: [ 'styled', 'styled-dark' ]\n   * \t},\n   * \tmodel: {\n   * \t\tkey: 'styled',\n   * \t\tvalue: 'dark'\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToAttribute( {\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tstyles: {\n   * \t\t\t'font-size': /[\\s\\S]+/\n   * \t\t}\n   * \t},\n   * \tmodel: {\n   * \t\tkey: 'fontSize',\n   * \t\tvalue: ( viewElement, conversionApi ) => {\n   * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n   * \t\t\tconst value = fontSize.substr( 0, fontSize.length - 2 );\n   *\n   * \t\t\tif ( value <= 10 ) {\n   * \t\t\t\treturn 'small';\n   * \t\t\t} else if ( value > 12 ) {\n   * \t\t\t\treturn 'big';\n   * \t\t\t}\n   *\n   * \t\t\treturn null;\n   * \t\t}\n   * \t}\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.view Pattern matching all view elements which should be converted.\n   * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n   * the model attribute. `value` property may be set as a function that takes a view element and\n   * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the value.\n   * If `String` is given, the model attribute value will be set to `true`.\n   * @param config.converterPriority Converter priority. Defaults to `low`.\n   */\n  elementToAttribute(config) {\n    return this.add(upcastElementToAttribute(config));\n  }\n  /**\n   * View attribute to model attribute conversion helper.\n   *\n   * This conversion results in setting an attribute on a model node. For example, view `<img src=\"foo.jpg\"></img>` becomes\n   * `<imageBlock source=\"foo.jpg\"></imageBlock>` in the model.\n   *\n   * This helper is meant to convert view attributes from view elements which got converted to the model, so the view attribute\n   * is set only on the corresponding model node:\n   *\n   * ```\n   * <div class=\"dark\"><div>foo</div></div>    -->    <div dark=\"true\"><div>foo</div></div>\n   * ```\n   *\n   * Above, `class=\"dark\"` attribute is added only to the `<div>` elements that has it. This is in contrast to\n   * {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute} which sets attributes for\n   * all the children in the model:\n   *\n   * ```\n   * <strong>Foo</strong>   -->   <strong><p>Foo</p></strong>   -->   <paragraph><$text bold=\"true\">Foo</$text></paragraph>\n   * ```\n   *\n   * Above is a sample of HTML code, that goes through autoparagraphing (first step) and then is converted (second step).\n   * Even though `<strong>` is over `<p>` element, `bold=\"true\"` was added to the text.\n   *\n   * Keep in mind that the attribute will be set only if it is allowed by {@link module:engine/model/schema~Schema schema} configuration.\n   *\n   * ```ts\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: 'src',\n   * \tmodel: 'source'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: { key: 'src' },\n   * \tmodel: 'source'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: { key: 'src' },\n   * \tmodel: 'source',\n   * \tconverterPriority: 'normal'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: {\n   * \t\tkey: 'data-style',\n   * \t\tvalue: /[\\s\\S]+/\n   * \t},\n   * \tmodel: 'styled'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: {\n   * \t\tname: 'img',\n   * \t\tkey: 'class',\n   * \t\tvalue: 'styled-dark'\n   * \t},\n   * \tmodel: {\n   * \t\tkey: 'styled',\n   * \t\tvalue: 'dark'\n   * \t}\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: {\n   * \t\tkey: 'class',\n   * \t\tvalue: /styled-[\\S]+/\n   * \t},\n   * \tmodel: {\n   * \t\tkey: 'styled'\n   * \t\tvalue: ( viewElement, conversionApi ) => {\n   * \t\t\tconst regexp = /styled-([\\S]+)/;\n   * \t\t\tconst match = viewElement.getAttribute( 'class' ).match( regexp );\n   *\n   * \t\t\treturn match[ 1 ];\n   * \t\t}\n   * \t}\n   * } );\n   * ```\n   *\n   * Converting styles works a bit differently as it requires `view.styles` to be an object and by default\n   * a model attribute will be set to `true` by such a converter. You can set the model attribute to any value by providing the `value`\n   * callback that returns the desired value.\n   *\n   * ```ts\n   * // Default conversion of font-weight style will result in setting bold attribute to true.\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: {\n   * \t\tstyles: {\n   * \t\t\t'font-weight': 'bold'\n   * \t\t}\n   * \t},\n   * \tmodel: 'bold'\n   * } );\n   *\n   * // This converter will pass any style value to the `lineHeight` model attribute.\n   * editor.conversion.for( 'upcast' ).attributeToAttribute( {\n   * \tview: {\n   * \t\tstyles: {\n   * \t\t\t'line-height': /[\\s\\S]+/\n   * \t\t}\n   * \t},\n   * \tmodel: {\n   * \t\tkey: 'lineHeight',\n   * \t\tvalue: ( viewElement, conversionApi ) => viewElement.getStyle( 'line-height' )\n   * \t}\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.view Specifies which view attribute will be converted. If a `String` is passed,\n   * attributes with given key will be converted. If an `Object` is passed, it must have a required `key` property,\n   * specifying view attribute key, and may have an optional `value` property, specifying view attribute value and optional `name`\n   * property specifying a view element name from/on which the attribute should be converted. `value` can be given as a `String`,\n   * a `RegExp` or a function callback, that takes view attribute value as the only parameter and returns `Boolean`.\n   * @param config.model Model attribute key or an object with `key` and `value` properties, describing\n   * the model attribute. `value` property may be set as a function that takes a view element and\n   * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the value.\n   * If `String` is given, the model attribute value will be same as view attribute value.\n   * @param config.converterPriority Converter priority. Defaults to `low`.\n   */\n  attributeToAttribute(config) {\n    return this.add(upcastAttributeToAttribute(config));\n  }\n  /**\n   * View element to model marker conversion helper.\n   *\n   * This conversion results in creating a model marker. For example, if the marker was stored in a view as an element:\n   * `<p>Fo<span data-marker=\"comment\" data-comment-id=\"7\"></span>o</p><p>B<span data-marker=\"comment\" data-comment-id=\"7\"></span>ar</p>`,\n   * after the conversion is done, the marker will be available in\n   * {@link module:engine/model/model~Model#markers model document markers}.\n   *\n   * **Note**: When this helper is used in the data upcast in combination with\n   * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`} in the data downcast,\n   * then invalid HTML code (e.g. a span between table cells) may be produced by the latter converter.\n   *\n   * In most of the cases, the {@link #dataToMarker} should be used instead.\n   *\n   * ```ts\n   * editor.conversion.for( 'upcast' ).elementToMarker( {\n   * \tview: 'marker-search',\n   * \tmodel: 'search'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToMarker( {\n   * \tview: 'marker-search',\n   * \tmodel: 'search',\n   * \tconverterPriority: 'high'\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToMarker( {\n   * \tview: 'marker-search',\n   * \tmodel: ( viewElement, conversionApi ) => 'comment:' + viewElement.getAttribute( 'data-comment-id' )\n   * } );\n   *\n   * editor.conversion.for( 'upcast' ).elementToMarker( {\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tattributes: {\n   * \t\t\t'data-marker': 'search'\n   * \t\t}\n   * \t},\n   * \tmodel: 'search'\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.view Pattern matching all view elements which should be converted.\n   * @param config.model Name of the model marker, or a function that takes a view element and returns\n   * a model marker name.\n   * @param config.converterPriority Converter priority.\n   */\n  elementToMarker(config) {\n    return this.add(upcastElementToMarker(config));\n  }\n  /**\n   * View-to-model marker conversion helper.\n   *\n   * Converts view data created by {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`}\n   * back to a model marker.\n   *\n   * This converter looks for specific view elements and view attributes that mark marker boundaries. See\n   * {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToData `#markerToData()`} to learn what view data\n   * is expected by this converter.\n   *\n   * The `config.view` property is equal to the marker group name to convert.\n   *\n   * By default, this converter creates markers with the `group:name` name convention (to match the default `markerToData` conversion).\n   *\n   * The conversion configuration can take a function that will generate a marker name.\n   * If such function is set as the `config.model` parameter, it is passed the `name` part from the view element or attribute and it is\n   * expected to return a string with the marker name.\n   *\n   * Basic usage:\n   *\n   * ```ts\n   * // Using the default conversion.\n   * // In this case, all markers from the `comment` group will be converted.\n   * // The conversion will look for `<comment-start>` and `<comment-end>` tags and\n   * // `data-comment-start-before`, `data-comment-start-after`,\n   * // `data-comment-end-before` and `data-comment-end-after` attributes.\n   * editor.conversion.for( 'upcast' ).dataToMarker( {\n   * \tview: 'comment'\n   * } );\n   * ```\n   *\n   * An example of a model that may be generated by this conversion:\n   *\n   * ```\n   * // View:\n   * <p>Foo<comment-start name=\"commentId:uid\"></comment-start>bar</p>\n   * <figure data-comment-end-after=\"commentId:uid\" class=\"image\"><img src=\"abc.jpg\" /></figure>\n   *\n   * // Model:\n   * <paragraph>Foo[bar</paragraph>\n   * <imageBlock src=\"abc.jpg\"></imageBlock>]\n   * ```\n   *\n   * Where `[]` are boundaries of a marker that will receive the `comment:commentId:uid` name.\n   *\n   * Other examples of usage:\n   *\n   * ```ts\n   * // Using a custom function which is the same as the default conversion:\n   * editor.conversion.for( 'upcast' ).dataToMarker( {\n   * \tview: 'comment',\n   * \tmodel: ( name, conversionApi ) => 'comment:' + name,\n   * } );\n   *\n   * // Using the converter priority:\n   * editor.conversion.for( 'upcast' ).dataToMarker( {\n   * \tview: 'comment',\n   * \tmodel: ( name, conversionApi ) => 'comment:' + name,\n   * \tconverterPriority: 'high'\n   * } );\n   * ```\n   *\n   * See {@link module:engine/conversion/conversion~Conversion#for `conversion.for()`} to learn how to add a converter\n   * to the conversion process.\n   *\n   * @param config Conversion configuration.\n   * @param config.view The marker group name to convert.\n   * @param config.model A function that takes the `name` part from the view element or attribute and\n   * {@link module:engine/conversion/upcastdispatcher~UpcastConversionApi upcast conversion API} and returns the marker name.\n   * @param config.converterPriority Converter priority.\n   */\n  dataToMarker(config) {\n    return this.add(upcastDataToMarker(config));\n  }\n};\nfunction convertToModelFragment() {\n  return (evt, data, conversionApi) => {\n    if (!data.modelRange && conversionApi.consumable.consume(data.viewItem, { name: true })) {\n      const { modelRange, modelCursor } = conversionApi.convertChildren(data.viewItem, data.modelCursor);\n      data.modelRange = modelRange;\n      data.modelCursor = modelCursor;\n    }\n  };\n}\nfunction convertText() {\n  return (evt, data, { schema, consumable, writer }) => {\n    let position = data.modelCursor;\n    if (!consumable.test(data.viewItem)) {\n      return;\n    }\n    if (!schema.checkChild(position, \"$text\")) {\n      if (!isParagraphable(position, \"$text\", schema)) {\n        return;\n      }\n      if (data.viewItem.data.trim().length == 0) {\n        return;\n      }\n      const nodeBefore = position.nodeBefore;\n      position = wrapInParagraph(position, writer);\n      if (nodeBefore && nodeBefore.is(\"element\", \"$marker\")) {\n        writer.move(writer.createRangeOn(nodeBefore), position);\n        position = writer.createPositionAfter(nodeBefore);\n      }\n    }\n    consumable.consume(data.viewItem);\n    const text2 = writer.createText(data.viewItem.data);\n    writer.insert(text2, position);\n    data.modelRange = writer.createRange(position, position.getShiftedBy(text2.offsetSize));\n    data.modelCursor = data.modelRange.end;\n  };\n}\nfunction convertSelectionChange(model, mapper) {\n  return (evt, data) => {\n    const viewSelection = data.newSelection;\n    const ranges = [];\n    for (const viewRange of viewSelection.getRanges()) {\n      ranges.push(mapper.toModelRange(viewRange));\n    }\n    const modelSelection = model.createSelection(ranges, { backward: viewSelection.isBackward });\n    if (!modelSelection.isEqual(model.document.selection)) {\n      model.change((writer) => {\n        writer.setSelection(modelSelection);\n      });\n    }\n  };\n}\nfunction upcastElementToElement(config) {\n  config = cloneDeep_default(config);\n  const converter = prepareToElementConverter(config);\n  const elementName = getViewElementNameFromConfig(config.view);\n  const eventName = elementName ? `element:${elementName}` : \"element\";\n  return (dispatcher) => {\n    dispatcher.on(eventName, converter, { priority: config.converterPriority || \"normal\" });\n  };\n}\nfunction upcastElementToAttribute(config) {\n  config = cloneDeep_default(config);\n  normalizeModelAttributeConfig(config);\n  const converter = prepareToAttributeConverter(config, false);\n  const elementName = getViewElementNameFromConfig(config.view);\n  const eventName = elementName ? `element:${elementName}` : \"element\";\n  return (dispatcher) => {\n    dispatcher.on(eventName, converter, { priority: config.converterPriority || \"low\" });\n  };\n}\nfunction upcastAttributeToAttribute(config) {\n  config = cloneDeep_default(config);\n  let viewKey = null;\n  if (typeof config.view == \"string\" || config.view.key) {\n    viewKey = normalizeViewAttributeKeyValueConfig(config);\n  }\n  normalizeModelAttributeConfig(config, viewKey);\n  const converter = prepareToAttributeConverter(config, true);\n  return (dispatcher) => {\n    dispatcher.on(\"element\", converter, { priority: config.converterPriority || \"low\" });\n  };\n}\nfunction upcastElementToMarker(config) {\n  const model = normalizeElementToMarkerModelConfig(config.model);\n  return upcastElementToElement({ ...config, model });\n}\nfunction upcastDataToMarker(config) {\n  config = cloneDeep_default(config);\n  if (!config.model) {\n    config.model = (name) => {\n      return name ? config.view + \":\" + name : config.view;\n    };\n  }\n  const normalizedConfig = {\n    view: config.view,\n    model: config.model\n  };\n  const converterStart = prepareToElementConverter(normalizeDataToMarkerConfig(normalizedConfig, \"start\"));\n  const converterEnd = prepareToElementConverter(normalizeDataToMarkerConfig(normalizedConfig, \"end\"));\n  return (dispatcher) => {\n    dispatcher.on(`element:${config.view}-start`, converterStart, { priority: config.converterPriority || \"normal\" });\n    dispatcher.on(`element:${config.view}-end`, converterEnd, { priority: config.converterPriority || \"normal\" });\n    const basePriority = priorities_default.low;\n    const maxPriority = priorities_default.highest;\n    const priorityFactor = priorities_default.get(config.converterPriority) / maxPriority;\n    dispatcher.on(\"element\", upcastAttributeToMarker(normalizedConfig), { priority: basePriority + priorityFactor });\n  };\n}\nfunction upcastAttributeToMarker(config) {\n  return (evt, data, conversionApi) => {\n    const attrName = `data-${config.view}`;\n    if (!conversionApi.consumable.test(data.viewItem, { attributes: attrName + \"-end-after\" }) && !conversionApi.consumable.test(data.viewItem, { attributes: attrName + \"-start-after\" }) && !conversionApi.consumable.test(data.viewItem, { attributes: attrName + \"-end-before\" }) && !conversionApi.consumable.test(data.viewItem, { attributes: attrName + \"-start-before\" })) {\n      return;\n    }\n    if (!data.modelRange) {\n      Object.assign(data, conversionApi.convertChildren(data.viewItem, data.modelCursor));\n    }\n    if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + \"-end-after\" })) {\n      addMarkerElements(data.modelRange.end, data.viewItem.getAttribute(attrName + \"-end-after\").split(\",\"));\n    }\n    if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + \"-start-after\" })) {\n      addMarkerElements(data.modelRange.end, data.viewItem.getAttribute(attrName + \"-start-after\").split(\",\"));\n    }\n    if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + \"-end-before\" })) {\n      addMarkerElements(data.modelRange.start, data.viewItem.getAttribute(attrName + \"-end-before\").split(\",\"));\n    }\n    if (conversionApi.consumable.consume(data.viewItem, { attributes: attrName + \"-start-before\" })) {\n      addMarkerElements(data.modelRange.start, data.viewItem.getAttribute(attrName + \"-start-before\").split(\",\"));\n    }\n    function addMarkerElements(position, markerViewNames) {\n      for (const markerViewName of markerViewNames) {\n        const markerName = config.model(markerViewName, conversionApi);\n        const element = conversionApi.writer.createElement(\"$marker\", { \"data-name\": markerName });\n        conversionApi.writer.insert(element, position);\n        if (data.modelCursor.isEqual(position)) {\n          data.modelCursor = data.modelCursor.getShiftedBy(1);\n        } else {\n          data.modelCursor = data.modelCursor._getTransformedByInsertion(position, 1);\n        }\n        data.modelRange = data.modelRange._getTransformedByInsertion(position, 1)[0];\n      }\n    }\n  };\n}\nfunction getViewElementNameFromConfig(viewConfig) {\n  if (typeof viewConfig == \"string\") {\n    return viewConfig;\n  }\n  if (typeof viewConfig == \"object\" && typeof viewConfig.name == \"string\") {\n    return viewConfig.name;\n  }\n  return null;\n}\nfunction prepareToElementConverter(config) {\n  const matcher = new Matcher(config.view);\n  return (evt, data, conversionApi) => {\n    const matcherResult = matcher.match(data.viewItem);\n    if (!matcherResult) {\n      return;\n    }\n    const match = matcherResult.match;\n    match.name = true;\n    if (!conversionApi.consumable.test(data.viewItem, match)) {\n      return;\n    }\n    const modelElement = getModelElement(config.model, data.viewItem, conversionApi);\n    if (!modelElement) {\n      return;\n    }\n    if (!conversionApi.safeInsert(modelElement, data.modelCursor)) {\n      return;\n    }\n    conversionApi.consumable.consume(data.viewItem, match);\n    conversionApi.convertChildren(data.viewItem, modelElement);\n    conversionApi.updateConversionResult(modelElement, data);\n  };\n}\nfunction getModelElement(model, input, conversionApi) {\n  if (model instanceof Function) {\n    return model(input, conversionApi);\n  } else {\n    return conversionApi.writer.createElement(model);\n  }\n}\nfunction normalizeViewAttributeKeyValueConfig(config) {\n  if (typeof config.view == \"string\") {\n    config.view = { key: config.view };\n  }\n  const key = config.view.key;\n  let normalized;\n  if (key == \"class\" || key == \"style\") {\n    const keyName = key == \"class\" ? \"classes\" : \"styles\";\n    normalized = {\n      [keyName]: config.view.value\n    };\n  } else {\n    const value = typeof config.view.value == \"undefined\" ? /[\\s\\S]*/ : config.view.value;\n    normalized = {\n      attributes: {\n        [key]: value\n      }\n    };\n  }\n  if (config.view.name) {\n    normalized.name = config.view.name;\n  }\n  config.view = normalized;\n  return key;\n}\nfunction normalizeModelAttributeConfig(config, viewAttributeKeyToCopy = null) {\n  const defaultModelValue = viewAttributeKeyToCopy === null ? true : (viewElement) => viewElement.getAttribute(viewAttributeKeyToCopy);\n  const key = typeof config.model != \"object\" ? config.model : config.model.key;\n  const value = typeof config.model != \"object\" || typeof config.model.value == \"undefined\" ? defaultModelValue : config.model.value;\n  config.model = { key, value };\n}\nfunction prepareToAttributeConverter(config, shallow) {\n  const matcher = new Matcher(config.view);\n  return (evt, data, conversionApi) => {\n    if (!data.modelRange && shallow) {\n      return;\n    }\n    const match = matcher.match(data.viewItem);\n    if (!match) {\n      return;\n    }\n    if (onlyViewNameIsDefined(config.view, data.viewItem)) {\n      match.match.name = true;\n    } else {\n      delete match.match.name;\n    }\n    if (!conversionApi.consumable.test(data.viewItem, match.match)) {\n      return;\n    }\n    const modelKey = config.model.key;\n    const modelValue = typeof config.model.value == \"function\" ? config.model.value(data.viewItem, conversionApi) : config.model.value;\n    if (modelValue === null) {\n      return;\n    }\n    if (!data.modelRange) {\n      Object.assign(data, conversionApi.convertChildren(data.viewItem, data.modelCursor));\n    }\n    const attributeWasSet = setAttributeOn(data.modelRange, { key: modelKey, value: modelValue }, shallow, conversionApi);\n    if (attributeWasSet) {\n      if (conversionApi.consumable.test(data.viewItem, { name: true })) {\n        match.match.name = true;\n      }\n      conversionApi.consumable.consume(data.viewItem, match.match);\n    }\n  };\n}\nfunction onlyViewNameIsDefined(viewConfig, viewItem) {\n  const configToTest = typeof viewConfig == \"function\" ? viewConfig(viewItem) : viewConfig;\n  if (typeof configToTest == \"object\" && !getViewElementNameFromConfig(configToTest)) {\n    return false;\n  }\n  return !configToTest.classes && !configToTest.attributes && !configToTest.styles;\n}\nfunction setAttributeOn(modelRange, modelAttribute, shallow, conversionApi) {\n  let result = false;\n  for (const node of Array.from(modelRange.getItems({ shallow }))) {\n    if (!conversionApi.schema.checkAttribute(node, modelAttribute.key)) {\n      continue;\n    }\n    result = true;\n    if (node.hasAttribute(modelAttribute.key)) {\n      continue;\n    }\n    conversionApi.writer.setAttribute(modelAttribute.key, modelAttribute.value, node);\n  }\n  return result;\n}\nfunction normalizeElementToMarkerModelConfig(model) {\n  return (viewElement, conversionApi) => {\n    const markerName = typeof model == \"string\" ? model : model(viewElement, conversionApi);\n    return conversionApi.writer.createElement(\"$marker\", { \"data-name\": markerName });\n  };\n}\nfunction normalizeDataToMarkerConfig(config, type) {\n  const elementCreatorFunction = (viewElement, conversionApi) => {\n    const viewName = viewElement.getAttribute(\"name\");\n    const markerName = config.model(viewName, conversionApi);\n    return conversionApi.writer.createElement(\"$marker\", { \"data-name\": markerName });\n  };\n  return {\n    // Upcast <markerGroup-start> and <markerGroup-end> elements.\n    view: `${config.view}-${type}`,\n    model: elementCreatorFunction\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/selection-post-fixer.js\nfunction injectSelectionPostFixer(model) {\n  model.document.registerPostFixer((writer) => selectionPostFixer(writer, model));\n}\nfunction selectionPostFixer(writer, model) {\n  const selection = model.document.selection;\n  const schema = model.schema;\n  const ranges = [];\n  let wasFixed = false;\n  for (const modelRange of selection.getRanges()) {\n    const correctedRange = tryFixingRange(modelRange, schema);\n    if (correctedRange && !correctedRange.isEqual(modelRange)) {\n      ranges.push(correctedRange);\n      wasFixed = true;\n    } else {\n      ranges.push(modelRange);\n    }\n  }\n  if (wasFixed) {\n    writer.setSelection(mergeIntersectingRanges(ranges), { backward: selection.isBackward });\n  }\n  return false;\n}\nfunction tryFixingRange(range, schema) {\n  if (range.isCollapsed) {\n    return tryFixingCollapsedRange(range, schema);\n  }\n  return tryFixingNonCollapsedRage(range, schema);\n}\nfunction tryFixingCollapsedRange(range, schema) {\n  const originalPosition = range.start;\n  const nearestSelectionRange = schema.getNearestSelectionRange(originalPosition);\n  if (!nearestSelectionRange) {\n    const ancestorObject = originalPosition.getAncestors().reverse().find((item) => schema.isObject(item));\n    if (ancestorObject) {\n      return Range2._createOn(ancestorObject);\n    }\n    return null;\n  }\n  if (!nearestSelectionRange.isCollapsed) {\n    return nearestSelectionRange;\n  }\n  const fixedPosition = nearestSelectionRange.start;\n  if (originalPosition.isEqual(fixedPosition)) {\n    return null;\n  }\n  return new Range2(fixedPosition);\n}\nfunction tryFixingNonCollapsedRage(range, schema) {\n  const { start, end } = range;\n  const isTextAllowedOnStart = schema.checkChild(start, \"$text\");\n  const isTextAllowedOnEnd = schema.checkChild(end, \"$text\");\n  const startLimitElement = schema.getLimitElement(start);\n  const endLimitElement = schema.getLimitElement(end);\n  if (startLimitElement === endLimitElement) {\n    if (isTextAllowedOnStart && isTextAllowedOnEnd) {\n      return null;\n    }\n    if (checkSelectionOnNonLimitElements(start, end, schema)) {\n      const isStartBeforeSelectable = start.nodeAfter && schema.isSelectable(start.nodeAfter);\n      const fixedStart = isStartBeforeSelectable ? null : schema.getNearestSelectionRange(start, \"forward\");\n      const isEndAfterSelectable = end.nodeBefore && schema.isSelectable(end.nodeBefore);\n      const fixedEnd = isEndAfterSelectable ? null : schema.getNearestSelectionRange(end, \"backward\");\n      const rangeStart = fixedStart ? fixedStart.start : start;\n      const rangeEnd = fixedEnd ? fixedEnd.end : end;\n      return new Range2(rangeStart, rangeEnd);\n    }\n  }\n  const isStartInLimit = startLimitElement && !startLimitElement.is(\"rootElement\");\n  const isEndInLimit = endLimitElement && !endLimitElement.is(\"rootElement\");\n  if (isStartInLimit || isEndInLimit) {\n    const bothInSameParent = start.nodeAfter && end.nodeBefore && start.nodeAfter.parent === end.nodeBefore.parent;\n    const expandStart = isStartInLimit && (!bothInSameParent || !isSelectable(start.nodeAfter, schema));\n    const expandEnd = isEndInLimit && (!bothInSameParent || !isSelectable(end.nodeBefore, schema));\n    let fixedStart = start;\n    let fixedEnd = end;\n    if (expandStart) {\n      fixedStart = Position2._createBefore(findOutermostLimitAncestor(startLimitElement, schema));\n    }\n    if (expandEnd) {\n      fixedEnd = Position2._createAfter(findOutermostLimitAncestor(endLimitElement, schema));\n    }\n    return new Range2(fixedStart, fixedEnd);\n  }\n  return null;\n}\nfunction findOutermostLimitAncestor(startingNode, schema) {\n  let isLimitNode = startingNode;\n  let parent2 = isLimitNode;\n  while (schema.isLimit(parent2) && parent2.parent) {\n    isLimitNode = parent2;\n    parent2 = parent2.parent;\n  }\n  return isLimitNode;\n}\nfunction checkSelectionOnNonLimitElements(start, end, schema) {\n  const startIsOnBlock = start.nodeAfter && !schema.isLimit(start.nodeAfter) || schema.checkChild(start, \"$text\");\n  const endIsOnBlock = end.nodeBefore && !schema.isLimit(end.nodeBefore) || schema.checkChild(end, \"$text\");\n  return startIsOnBlock || endIsOnBlock;\n}\nfunction mergeIntersectingRanges(ranges) {\n  const rangesToMerge = [...ranges];\n  const rangeIndexesToRemove = /* @__PURE__ */ new Set();\n  let currentRangeIndex = 1;\n  while (currentRangeIndex < rangesToMerge.length) {\n    const currentRange = rangesToMerge[currentRangeIndex];\n    const previousRanges = rangesToMerge.slice(0, currentRangeIndex);\n    for (const [previousRangeIndex, previousRange] of previousRanges.entries()) {\n      if (rangeIndexesToRemove.has(previousRangeIndex)) {\n        continue;\n      }\n      if (currentRange.isEqual(previousRange)) {\n        rangeIndexesToRemove.add(previousRangeIndex);\n      } else if (currentRange.isIntersecting(previousRange)) {\n        rangeIndexesToRemove.add(previousRangeIndex);\n        rangeIndexesToRemove.add(currentRangeIndex);\n        const mergedRange = currentRange.getJoined(previousRange);\n        rangesToMerge.push(mergedRange);\n      }\n    }\n    currentRangeIndex++;\n  }\n  const nonIntersectingRanges = rangesToMerge.filter((_, index) => !rangeIndexesToRemove.has(index));\n  return nonIntersectingRanges;\n}\nfunction isSelectable(node, schema) {\n  return node && schema.isSelectable(node);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/controller/editingcontroller.js\nvar EditingController = class extends ObservableMixin() {\n  /**\n   * Creates an editing controller instance.\n   *\n   * @param model Editing model.\n   * @param stylesProcessor The styles processor instance.\n   */\n  constructor(model, stylesProcessor) {\n    super();\n    this.model = model;\n    this.view = new View(stylesProcessor);\n    this.mapper = new Mapper();\n    this.downcastDispatcher = new DowncastDispatcher({\n      mapper: this.mapper,\n      schema: model.schema\n    });\n    const doc = this.model.document;\n    const selection = doc.selection;\n    const markers = this.model.markers;\n    this.listenTo(this.model, \"_beforeChanges\", () => {\n      this.view._disableRendering(true);\n    }, { priority: \"highest\" });\n    this.listenTo(this.model, \"_afterChanges\", () => {\n      this.view._disableRendering(false);\n    }, { priority: \"lowest\" });\n    this.listenTo(doc, \"change\", () => {\n      this.view.change((writer) => {\n        this.downcastDispatcher.convertChanges(doc.differ, markers, writer);\n        this.downcastDispatcher.convertSelection(selection, markers, writer);\n      });\n    }, { priority: \"low\" });\n    this.listenTo(this.view.document, \"selectionChange\", convertSelectionChange(this.model, this.mapper));\n    this.listenTo(this.view.document, \"beforeinput\", fixTargetRanges(this.mapper, this.model.schema, this.view), { priority: \"high\" });\n    this.downcastDispatcher.on(\"insert:$text\", insertText(), { priority: \"lowest\" });\n    this.downcastDispatcher.on(\"insert\", insertAttributesAndChildren(), { priority: \"lowest\" });\n    this.downcastDispatcher.on(\"remove\", remove2(), { priority: \"low\" });\n    this.downcastDispatcher.on(\"cleanSelection\", cleanSelection());\n    this.downcastDispatcher.on(\"selection\", convertRangeSelection(), { priority: \"low\" });\n    this.downcastDispatcher.on(\"selection\", convertCollapsedSelection(), { priority: \"low\" });\n    this.view.document.roots.bindTo(this.model.document.roots).using((root2) => {\n      if (root2.rootName == \"$graveyard\") {\n        return null;\n      }\n      const viewRoot = new RootEditableElement(this.view.document, root2.name);\n      viewRoot.rootName = root2.rootName;\n      this.mapper.bindElements(root2, viewRoot);\n      return viewRoot;\n    });\n  }\n  /**\n   * Removes all event listeners attached to the `EditingController`. Destroys all objects created\n   * by `EditingController` that need to be destroyed.\n   */\n  destroy() {\n    this.view.destroy();\n    this.stopListening();\n  }\n  /**\n   * Calling this method will refresh the marker by triggering the downcast conversion for it.\n   *\n   * Reconverting the marker is useful when you want to change its {@link module:engine/view/element~Element view element}\n   * without changing any marker data. For instance:\n   *\n   * ```ts\n   * let isCommentActive = false;\n   *\n   * model.conversion.markerToHighlight( {\n   * \tmodel: 'comment',\n   * \tview: data => {\n   * \t\tconst classes = [ 'comment-marker' ];\n   *\n   * \t\tif ( isCommentActive ) {\n   * \t\t\tclasses.push( 'comment-marker--active' );\n   * \t\t}\n   *\n   * \t\treturn { classes };\n   * \t}\n   * } );\n   *\n   * // ...\n   *\n   * // Change the property that indicates if marker is displayed as active or not.\n   * isCommentActive = true;\n   *\n   * // Reconverting will downcast and synchronize the marker with the new isCommentActive state value.\n   * editor.editing.reconvertMarker( 'comment' );\n   * ```\n   *\n   * **Note**: If you want to reconvert a model item, use {@link #reconvertItem} instead.\n   *\n   * @param markerOrName Name of a marker to update, or a marker instance.\n   */\n  reconvertMarker(markerOrName) {\n    const markerName = typeof markerOrName == \"string\" ? markerOrName : markerOrName.name;\n    const currentMarker = this.model.markers.get(markerName);\n    if (!currentMarker) {\n      throw new CKEditorError(\"editingcontroller-reconvertmarker-marker-not-exist\", this, { markerName });\n    }\n    this.model.change(() => {\n      this.model.markers._refresh(currentMarker);\n    });\n  }\n  /**\n   * Calling this method will downcast a model item on demand (by requesting a refresh in the {@link module:engine/model/differ~Differ}).\n   *\n   * You can use it if you want the view representation of a specific item updated as a response to external modifications. For instance,\n   * when the view structure depends not only on the associated model data but also on some external state.\n   *\n   * **Note**: If you want to reconvert a model marker, use {@link #reconvertMarker} instead.\n   *\n   * @param item Item to refresh.\n   */\n  reconvertItem(item) {\n    this.model.change(() => {\n      this.model.document.differ._refreshItem(item);\n    });\n  }\n};\nfunction fixTargetRanges(mapper, schema, view) {\n  return (evt, data) => {\n    if (view.document.isComposing && !env_default.isAndroid) {\n      return;\n    }\n    for (let i = 0; i < data.targetRanges.length; i++) {\n      const viewRange = data.targetRanges[i];\n      const modelRange = mapper.toModelRange(viewRange);\n      const correctedRange = tryFixingRange(modelRange, schema);\n      if (!correctedRange || correctedRange.isEqual(modelRange)) {\n        continue;\n      }\n      data.targetRanges[i] = mapper.toViewRange(correctedRange);\n    }\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/viewconsumable.js\nvar ViewConsumable = class _ViewConsumable {\n  constructor() {\n    this._consumables = /* @__PURE__ */ new Map();\n  }\n  add(element, consumables) {\n    let elementConsumables;\n    if (element.is(\"$text\") || element.is(\"documentFragment\")) {\n      this._consumables.set(element, true);\n      return;\n    }\n    if (!this._consumables.has(element)) {\n      elementConsumables = new ViewElementConsumables(element);\n      this._consumables.set(element, elementConsumables);\n    } else {\n      elementConsumables = this._consumables.get(element);\n    }\n    elementConsumables.add(consumables);\n  }\n  /**\n   * Tests if {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n   * {@link module:engine/view/documentfragment~DocumentFragment document fragment} can be consumed.\n   * It returns `true` when all items included in method's call can be consumed. Returns `false` when\n   * first already consumed item is found and `null` when first non-consumable item is found.\n   *\n   * ```ts\n   * viewConsumable.test( p, { name: true } ); // Tests element's name.\n   * viewConsumable.test( p, { attributes: 'name' } ); // Tests attribute.\n   * viewConsumable.test( p, { classes: 'foobar' } ); // Tests class.\n   * viewConsumable.test( p, { styles: 'color' } ); // Tests style.\n   * viewConsumable.test( p, { attributes: 'name', styles: 'color' } ); // Tests attribute and style.\n   * viewConsumable.test( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be tested.\n   * viewConsumable.test( textNode ); // Tests text node.\n   * viewConsumable.test( docFragment ); // Tests document fragment.\n   * ```\n   *\n   * Testing classes and styles as attribute will test if all added classes/styles can be consumed.\n   *\n   * ```ts\n   * viewConsumable.test( p, { attributes: 'class' } ); // Tests if all added classes can be consumed.\n   * viewConsumable.test( p, { attributes: 'style' } ); // Tests if all added styles can be consumed.\n   * ```\n   *\n   * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n   * @param consumables.name If set to true element's name will be included.\n   * @param consumables.attributes Attribute name or array of attribute names.\n   * @param consumables.classes Class name or array of class names.\n   * @param consumables.styles Style name or array of style names.\n   * @returns Returns `true` when all items included in method's call can be consumed. Returns `false`\n   * when first already consumed item is found and `null` when first non-consumable item is found.\n   */\n  test(element, consumables) {\n    const elementConsumables = this._consumables.get(element);\n    if (elementConsumables === void 0) {\n      return null;\n    }\n    if (element.is(\"$text\") || element.is(\"documentFragment\")) {\n      return elementConsumables;\n    }\n    return elementConsumables.test(consumables);\n  }\n  /**\n   * Consumes {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n   * {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n   * It returns `true` when all items included in method's call can be consumed, otherwise returns `false`.\n   *\n   * ```ts\n   * viewConsumable.consume( p, { name: true } ); // Consumes element's name.\n   * viewConsumable.consume( p, { attributes: 'name' } ); // Consumes element's attribute.\n   * viewConsumable.consume( p, { classes: 'foobar' } ); // Consumes element's class.\n   * viewConsumable.consume( p, { styles: 'color' } ); // Consumes element's style.\n   * viewConsumable.consume( p, { attributes: 'name', styles: 'color' } ); // Consumes attribute and style.\n   * viewConsumable.consume( p, { classes: [ 'baz', 'bar' ] } ); // Multiple consumables can be consumed.\n   * viewConsumable.consume( textNode ); // Consumes text node.\n   * viewConsumable.consume( docFragment ); // Consumes document fragment.\n   * ```\n   *\n   * Consuming classes and styles as attribute will test if all added classes/styles can be consumed.\n   *\n   * ```ts\n   * viewConsumable.consume( p, { attributes: 'class' } ); // Consume only if all added classes can be consumed.\n   * viewConsumable.consume( p, { attributes: 'style' } ); // Consume only if all added styles can be consumed.\n   * ```\n   *\n   * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n   * @param consumables.name If set to true element's name will be included.\n   * @param consumables.attributes Attribute name or array of attribute names.\n   * @param consumables.classes Class name or array of class names.\n   * @param consumables.styles Style name or array of style names.\n   * @returns Returns `true` when all items included in method's call can be consumed,\n   * otherwise returns `false`.\n   */\n  consume(element, consumables) {\n    if (this.test(element, consumables)) {\n      if (element.is(\"$text\") || element.is(\"documentFragment\")) {\n        this._consumables.set(element, false);\n      } else {\n        this._consumables.get(element).consume(consumables);\n      }\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Reverts {@link module:engine/view/element~Element view element}, {@link module:engine/view/text~Text text node} or\n   * {@link module:engine/view/documentfragment~DocumentFragment document fragment} so they can be consumed once again.\n   * Method does not revert items that were never previously added for consumption, even if they are included in\n   * method's call.\n   *\n   * ```ts\n   * viewConsumable.revert( p, { name: true } ); // Reverts element's name.\n   * viewConsumable.revert( p, { attributes: 'name' } ); // Reverts element's attribute.\n   * viewConsumable.revert( p, { classes: 'foobar' } ); // Reverts element's class.\n   * viewConsumable.revert( p, { styles: 'color' } ); // Reverts element's style.\n   * viewConsumable.revert( p, { attributes: 'name', styles: 'color' } ); // Reverts attribute and style.\n   * viewConsumable.revert( p, { classes: [ 'baz', 'bar' ] } ); // Multiple names can be reverted.\n   * viewConsumable.revert( textNode ); // Reverts text node.\n   * viewConsumable.revert( docFragment ); // Reverts document fragment.\n   * ```\n   *\n   * Reverting classes and styles as attribute will revert all classes/styles that were previously added for\n   * consumption.\n   *\n   * ```ts\n   * viewConsumable.revert( p, { attributes: 'class' } ); // Reverts all classes added for consumption.\n   * viewConsumable.revert( p, { attributes: 'style' } ); // Reverts all styles added for consumption.\n   * ```\n   *\n   * @param consumables Used only if first parameter is {@link module:engine/view/element~Element view element} instance.\n   * @param consumables.name If set to true element's name will be included.\n   * @param consumables.attributes Attribute name or array of attribute names.\n   * @param consumables.classes Class name or array of class names.\n   * @param consumables.styles Style name or array of style names.\n   */\n  revert(element, consumables) {\n    const elementConsumables = this._consumables.get(element);\n    if (elementConsumables !== void 0) {\n      if (element.is(\"$text\") || element.is(\"documentFragment\")) {\n        this._consumables.set(element, true);\n      } else {\n        elementConsumables.revert(consumables);\n      }\n    }\n  }\n  /**\n   * Creates consumable object from {@link module:engine/view/element~Element view element}. Consumable object will include\n   * element's name and all its attributes, classes and styles.\n   */\n  static consumablesFromElement(element) {\n    const consumables = {\n      element,\n      name: true,\n      attributes: [],\n      classes: [],\n      styles: []\n    };\n    const attributes = element.getAttributeKeys();\n    for (const attribute of attributes) {\n      if (attribute == \"style\" || attribute == \"class\") {\n        continue;\n      }\n      consumables.attributes.push(attribute);\n    }\n    const classes = element.getClassNames();\n    for (const className of classes) {\n      consumables.classes.push(className);\n    }\n    const styles = element.getStyleNames();\n    for (const style of styles) {\n      consumables.styles.push(style);\n    }\n    return consumables;\n  }\n  /**\n   * Creates {@link module:engine/conversion/viewconsumable~ViewConsumable ViewConsumable} instance from\n   * {@link module:engine/view/node~Node node} or {@link module:engine/view/documentfragment~DocumentFragment document fragment}.\n   * Instance will contain all elements, child nodes, attributes, styles and classes added for consumption.\n   *\n   * @param from View node or document fragment from which `ViewConsumable` will be created.\n   * @param instance If provided, given `ViewConsumable` instance will be used\n   * to add all consumables. It will be returned instead of a new instance.\n   */\n  static createFrom(from, instance) {\n    if (!instance) {\n      instance = new _ViewConsumable();\n    }\n    if (from.is(\"$text\")) {\n      instance.add(from);\n      return instance;\n    }\n    if (from.is(\"element\")) {\n      instance.add(from, _ViewConsumable.consumablesFromElement(from));\n    }\n    if (from.is(\"documentFragment\")) {\n      instance.add(from);\n    }\n    for (const child of from.getChildren()) {\n      instance = _ViewConsumable.createFrom(child, instance);\n    }\n    return instance;\n  }\n};\nvar CONSUMABLE_TYPES = [\"attributes\", \"classes\", \"styles\"];\nvar ViewElementConsumables = class {\n  /**\n   * Creates ViewElementConsumables instance.\n   *\n   * @param from View node or document fragment from which `ViewElementConsumables` is being created.\n   */\n  constructor(from) {\n    this.element = from;\n    this._canConsumeName = null;\n    this._consumables = {\n      attributes: /* @__PURE__ */ new Map(),\n      styles: /* @__PURE__ */ new Map(),\n      classes: /* @__PURE__ */ new Map()\n    };\n  }\n  /**\n   * Adds consumable parts of the {@link module:engine/view/element~Element view element}.\n   * Element's name itself can be marked to be consumed (when element's name is consumed its attributes, classes and\n   * styles still could be consumed):\n   *\n   * ```ts\n   * consumables.add( { name: true } );\n   * ```\n   *\n   * Attributes classes and styles:\n   *\n   * ```ts\n   * consumables.add( { attributes: 'title', classes: 'foo', styles: 'color' } );\n   * consumables.add( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n   * ```\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n   * attribute is provided - it should be handled separately by providing `style` and `class` in consumables object.\n   *\n   * @param consumables Object describing which parts of the element can be consumed.\n   * @param consumables.name If set to `true` element's name will be added as consumable.\n   * @param consumables.attributes Attribute name or array of attribute names to add as consumable.\n   * @param consumables.classes Class name or array of class names to add as consumable.\n   * @param consumables.styles Style name or array of style names to add as consumable.\n   */\n  add(consumables) {\n    if (consumables.name) {\n      this._canConsumeName = true;\n    }\n    for (const type of CONSUMABLE_TYPES) {\n      if (type in consumables) {\n        this._add(type, consumables[type]);\n      }\n    }\n  }\n  /**\n   * Tests if parts of the {@link module:engine/view/node~Node view node} can be consumed.\n   *\n   * Element's name can be tested:\n   *\n   * ```ts\n   * consumables.test( { name: true } );\n   * ```\n   *\n   * Attributes classes and styles:\n   *\n   * ```ts\n   * consumables.test( { attributes: 'title', classes: 'foo', styles: 'color' } );\n   * consumables.test( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n   * ```\n   *\n   * @param consumables Object describing which parts of the element should be tested.\n   * @param consumables.name If set to `true` element's name will be tested.\n   * @param consumables.attributes Attribute name or array of attribute names to test.\n   * @param consumables.classes Class name or array of class names to test.\n   * @param consumables.styles Style name or array of style names to test.\n   * @returns `true` when all tested items can be consumed, `null` when even one of the items\n   * was never marked for consumption and `false` when even one of the items was already consumed.\n   */\n  test(consumables) {\n    if (consumables.name && !this._canConsumeName) {\n      return this._canConsumeName;\n    }\n    for (const type of CONSUMABLE_TYPES) {\n      if (type in consumables) {\n        const value = this._test(type, consumables[type]);\n        if (value !== true) {\n          return value;\n        }\n      }\n    }\n    return true;\n  }\n  /**\n   * Consumes parts of {@link module:engine/view/element~Element view element}. This function does not check if consumable item\n   * is already consumed - it consumes all consumable items provided.\n   * Element's name can be consumed:\n   *\n   * ```ts\n   * consumables.consume( { name: true } );\n   * ```\n   *\n   * Attributes classes and styles:\n   *\n   * ```ts\n   * consumables.consume( { attributes: 'title', classes: 'foo', styles: 'color' } );\n   * consumables.consume( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n   * ```\n   *\n   * @param consumables Object describing which parts of the element should be consumed.\n   * @param consumables.name If set to `true` element's name will be consumed.\n   * @param consumables.attributes Attribute name or array of attribute names to consume.\n   * @param consumables.classes Class name or array of class names to consume.\n   * @param consumables.styles Style name or array of style names to consume.\n   */\n  consume(consumables) {\n    if (consumables.name) {\n      this._canConsumeName = false;\n    }\n    for (const type of CONSUMABLE_TYPES) {\n      if (type in consumables) {\n        this._consume(type, consumables[type]);\n      }\n    }\n  }\n  /**\n   * Revert already consumed parts of {@link module:engine/view/element~Element view Element}, so they can be consumed once again.\n   * Element's name can be reverted:\n   *\n   * ```ts\n   * consumables.revert( { name: true } );\n   * ```\n   *\n   * Attributes classes and styles:\n   *\n   * ```ts\n   * consumables.revert( { attributes: 'title', classes: 'foo', styles: 'color' } );\n   * consumables.revert( { attributes: [ 'title', 'name' ], classes: [ 'foo', 'bar' ] );\n   * ```\n   *\n   * @param consumables Object describing which parts of the element should be reverted.\n   * @param consumables.name If set to `true` element's name will be reverted.\n   * @param consumables.attributes Attribute name or array of attribute names to revert.\n   * @param consumables.classes Class name or array of class names to revert.\n   * @param consumables.styles Style name or array of style names to revert.\n   */\n  revert(consumables) {\n    if (consumables.name) {\n      this._canConsumeName = true;\n    }\n    for (const type of CONSUMABLE_TYPES) {\n      if (type in consumables) {\n        this._revert(type, consumables[type]);\n      }\n    }\n  }\n  /**\n   * Helper method that adds consumables of a given type: attribute, class or style.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `viewconsumable-invalid-attribute` when `class` or `style`\n   * type is provided - it should be handled separately by providing actual style/class type.\n   *\n   * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n   * @param item Consumable item or array of items.\n   */\n  _add(type, item) {\n    const items = isArray_default(item) ? item : [item];\n    const consumables = this._consumables[type];\n    for (const name of items) {\n      if (type === \"attributes\" && (name === \"class\" || name === \"style\")) {\n        throw new CKEditorError(\"viewconsumable-invalid-attribute\", this);\n      }\n      consumables.set(name, true);\n      if (type === \"styles\") {\n        for (const alsoName of this.element.document.stylesProcessor.getRelatedStyles(name)) {\n          consumables.set(alsoName, true);\n        }\n      }\n    }\n  }\n  /**\n   * Helper method that tests consumables of a given type: attribute, class or style.\n   *\n   * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n   * @param item Consumable item or array of items.\n   * @returns Returns `true` if all items can be consumed, `null` when one of the items cannot be\n   * consumed and `false` when one of the items is already consumed.\n   */\n  _test(type, item) {\n    const items = isArray_default(item) ? item : [item];\n    const consumables = this._consumables[type];\n    for (const name of items) {\n      if (type === \"attributes\" && (name === \"class\" || name === \"style\")) {\n        const consumableName = name == \"class\" ? \"classes\" : \"styles\";\n        const value = this._test(consumableName, [...this._consumables[consumableName].keys()]);\n        if (value !== true) {\n          return value;\n        }\n      } else {\n        const value = consumables.get(name);\n        if (value === void 0) {\n          return null;\n        }\n        if (!value) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  /**\n   * Helper method that consumes items of a given type: attribute, class or style.\n   *\n   * @param type Type of the consumable item: `attributes`, `classes` or `styles`.\n   * @param item Consumable item or array of items.\n   */\n  _consume(type, item) {\n    const items = isArray_default(item) ? item : [item];\n    const consumables = this._consumables[type];\n    for (const name of items) {\n      if (type === \"attributes\" && (name === \"class\" || name === \"style\")) {\n        const consumableName = name == \"class\" ? \"classes\" : \"styles\";\n        this._consume(consumableName, [...this._consumables[consumableName].keys()]);\n      } else {\n        consumables.set(name, false);\n        if (type == \"styles\") {\n          for (const toConsume of this.element.document.stylesProcessor.getRelatedStyles(name)) {\n            consumables.set(toConsume, false);\n          }\n        }\n      }\n    }\n  }\n  /**\n   * Helper method that reverts items of a given type: attribute, class or style.\n   *\n   * @param type Type of the consumable item: `attributes`, `classes` or , `styles`.\n   * @param item Consumable item or array of items.\n   */\n  _revert(type, item) {\n    const items = isArray_default(item) ? item : [item];\n    const consumables = this._consumables[type];\n    for (const name of items) {\n      if (type === \"attributes\" && (name === \"class\" || name === \"style\")) {\n        const consumableName = name == \"class\" ? \"classes\" : \"styles\";\n        this._revert(consumableName, [...this._consumables[consumableName].keys()]);\n      } else {\n        const value = consumables.get(name);\n        if (value === false) {\n          consumables.set(name, true);\n        }\n      }\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/schema.js\nvar Schema = class extends ObservableMixin() {\n  /**\n   * Creates a schema instance.\n   */\n  constructor() {\n    super();\n    this._sourceDefinitions = {};\n    this._attributeProperties = {};\n    this.decorate(\"checkChild\");\n    this.decorate(\"checkAttribute\");\n    this.on(\"checkAttribute\", (evt, args) => {\n      args[0] = new SchemaContext(args[0]);\n    }, { priority: \"highest\" });\n    this.on(\"checkChild\", (evt, args) => {\n      args[0] = new SchemaContext(args[0]);\n      args[1] = this.getDefinition(args[1]);\n    }, { priority: \"highest\" });\n  }\n  /**\n   * Registers a schema item. Can only be called once for every item name.\n   *\n   * ```ts\n   * schema.register( 'paragraph', {\n   * \tinheritAllFrom: '$block'\n   * } );\n   * ```\n   */\n  register(itemName, definition) {\n    if (this._sourceDefinitions[itemName]) {\n      throw new CKEditorError(\"schema-cannot-register-item-twice\", this, {\n        itemName\n      });\n    }\n    this._sourceDefinitions[itemName] = [\n      Object.assign({}, definition)\n    ];\n    this._clearCache();\n  }\n  /**\n   * Extends a {@link #register registered} item's definition.\n   *\n   * Extending properties such as `allowIn` will add more items to the existing properties,\n   * while redefining properties such as `isBlock` will override the previously defined ones.\n   *\n   * ```ts\n   * schema.register( 'foo', {\n   * \tallowIn: '$root',\n   * \tisBlock: true;\n   * } );\n   * schema.extend( 'foo', {\n   * \tallowIn: 'blockQuote',\n   * \tisBlock: false\n   * } );\n   *\n   * schema.getDefinition( 'foo' );\n   * //\t{\n   * //\t\tallowIn: [ '$root', 'blockQuote' ],\n   * // \t\tisBlock: false\n   * //\t}\n   * ```\n   */\n  extend(itemName, definition) {\n    if (!this._sourceDefinitions[itemName]) {\n      throw new CKEditorError(\"schema-cannot-extend-missing-item\", this, {\n        itemName\n      });\n    }\n    this._sourceDefinitions[itemName].push(Object.assign({}, definition));\n    this._clearCache();\n  }\n  /**\n   * Returns data of all registered items.\n   *\n   * This method should normally be used for reflection purposes (e.g. defining a clone of a certain element,\n   * checking a list of all block elements, etc).\n   * Use specific methods (such as {@link #checkChild `checkChild()`} or {@link #isLimit `isLimit()`})\n   * in other cases.\n   */\n  getDefinitions() {\n    if (!this._compiledDefinitions) {\n      this._compile();\n    }\n    return this._compiledDefinitions;\n  }\n  /**\n   * Returns a definition of the given item or `undefined` if an item is not registered.\n   *\n   * This method should normally be used for reflection purposes (e.g. defining a clone of a certain element,\n   * checking a list of all block elements, etc).\n   * Use specific methods (such as {@link #checkChild `checkChild()`} or {@link #isLimit `isLimit()`})\n   * in other cases.\n   */\n  getDefinition(item) {\n    let itemName;\n    if (typeof item == \"string\") {\n      itemName = item;\n    } else if (\"is\" in item && (item.is(\"$text\") || item.is(\"$textProxy\"))) {\n      itemName = \"$text\";\n    } else {\n      itemName = item.name;\n    }\n    return this.getDefinitions()[itemName];\n  }\n  /**\n   * Returns `true` if the given item is registered in the schema.\n   *\n   * ```ts\n   * schema.isRegistered( 'paragraph' ); // -> true\n   * schema.isRegistered( editor.model.document.getRoot() ); // -> true\n   * schema.isRegistered( 'foo' ); // -> false\n   * ```\n   */\n  isRegistered(item) {\n    return !!this.getDefinition(item);\n  }\n  /**\n   * Returns `true` if the given item is defined to be\n   * a block by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isBlock` property.\n   *\n   * ```ts\n   * schema.isBlock( 'paragraph' ); // -> true\n   * schema.isBlock( '$root' ); // -> false\n   *\n   * const paragraphElement = writer.createElement( 'paragraph' );\n   * schema.isBlock( paragraphElement ); // -> true\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#block-elements Block elements} section of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isBlock(item) {\n    const def = this.getDefinition(item);\n    return !!(def && def.isBlock);\n  }\n  /**\n   * Returns `true` if the given item should be treated as a limit element.\n   *\n   * It considers an item to be a limit element if its\n   * {@link module:engine/model/schema~SchemaItemDefinition}'s\n   * {@link module:engine/model/schema~SchemaItemDefinition#isLimit `isLimit`} or\n   * {@link module:engine/model/schema~SchemaItemDefinition#isObject `isObject`} property\n   * was set to `true`.\n   *\n   * ```ts\n   * schema.isLimit( 'paragraph' ); // -> false\n   * schema.isLimit( '$root' ); // -> true\n   * schema.isLimit( editor.model.document.getRoot() ); // -> true\n   * schema.isLimit( 'imageBlock' ); // -> true\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#limit-elements Limit elements} section of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isLimit(item) {\n    const def = this.getDefinition(item);\n    if (!def) {\n      return false;\n    }\n    return !!(def.isLimit || def.isObject);\n  }\n  /**\n   * Returns `true` if the given item should be treated as an object element.\n   *\n   * It considers an item to be an object element if its\n   * {@link module:engine/model/schema~SchemaItemDefinition}'s\n   * {@link module:engine/model/schema~SchemaItemDefinition#isObject `isObject`} property\n   * was set to `true`.\n   *\n   * ```ts\n   * schema.isObject( 'paragraph' ); // -> false\n   * schema.isObject( 'imageBlock' ); // -> true\n   *\n   * const imageElement = writer.createElement( 'imageBlock' );\n   * schema.isObject( imageElement ); // -> true\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#object-elements Object elements} section of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isObject(item) {\n    const def = this.getDefinition(item);\n    if (!def) {\n      return false;\n    }\n    return !!(def.isObject || def.isLimit && def.isSelectable && def.isContent);\n  }\n  /**\n   * Returns `true` if the given item is defined to be\n   * an inline element by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isInline` property.\n   *\n   * ```ts\n   * schema.isInline( 'paragraph' ); // -> false\n   * schema.isInline( 'softBreak' ); // -> true\n   *\n   * const text = writer.createText( 'foo' );\n   * schema.isInline( text ); // -> true\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#inline-elements Inline elements} section of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isInline(item) {\n    const def = this.getDefinition(item);\n    return !!(def && def.isInline);\n  }\n  /**\n   * Returns `true` if the given item is defined to be\n   * a selectable element by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isSelectable` property.\n   *\n   * ```ts\n   * schema.isSelectable( 'paragraph' ); // -> false\n   * schema.isSelectable( 'heading1' ); // -> false\n   * schema.isSelectable( 'imageBlock' ); // -> true\n   * schema.isSelectable( 'tableCell' ); // -> true\n   *\n   * const text = writer.createText( 'foo' );\n   * schema.isSelectable( text ); // -> false\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#selectable-elements Selectable elements section} of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isSelectable(item) {\n    const def = this.getDefinition(item);\n    if (!def) {\n      return false;\n    }\n    return !!(def.isSelectable || def.isObject);\n  }\n  /**\n   * Returns `true` if the given item is defined to be\n   * a content by the {@link module:engine/model/schema~SchemaItemDefinition}'s `isContent` property.\n   *\n   * ```ts\n   * schema.isContent( 'paragraph' ); // -> false\n   * schema.isContent( 'heading1' ); // -> false\n   * schema.isContent( 'imageBlock' ); // -> true\n   * schema.isContent( 'horizontalLine' ); // -> true\n   *\n   * const text = writer.createText( 'foo' );\n   * schema.isContent( text ); // -> true\n   * ```\n   *\n   * See the {@glink framework/deep-dive/schema#content-elements Content elements section} of\n   * the {@glink framework/deep-dive/schema Schema deep-dive} guide for more details.\n   */\n  isContent(item) {\n    const def = this.getDefinition(item);\n    if (!def) {\n      return false;\n    }\n    return !!(def.isContent || def.isObject);\n  }\n  /**\n   * Checks whether the given node (`child`) can be a child of the given context.\n   *\n   * ```ts\n   * schema.checkChild( model.document.getRoot(), paragraph ); // -> false\n   *\n   * schema.register( 'paragraph', {\n   * \tallowIn: '$root'\n   * } );\n   * schema.checkChild( model.document.getRoot(), paragraph ); // -> true\n   * ```\n   *\n   * Note: When verifying whether the given node can be a child of the given context, the\n   * schema also verifies the entire context &ndash; from its root to its last element. Therefore, it is possible\n   * for `checkChild()` to return `false` even though the context's last element can contain the checked child.\n   * It happens if one of the context's elements does not allow its child.\n   *\n   * @fires checkChild\n   * @param context The context in which the child will be checked.\n   * @param def The child to check.\n   */\n  checkChild(context, def) {\n    if (!def) {\n      return false;\n    }\n    return this._checkContextMatch(def, context);\n  }\n  /**\n   * Checks whether the given attribute can be applied in the given context (on the last\n   * item of the context).\n   *\n   * ```ts\n   * schema.checkAttribute( textNode, 'bold' ); // -> false\n   *\n   * schema.extend( '$text', {\n   * \tallowAttributes: 'bold'\n   * } );\n   * schema.checkAttribute( textNode, 'bold' ); // -> true\n   * ```\n   *\n   * @fires checkAttribute\n   * @param context The context in which the attribute will be checked.\n   */\n  checkAttribute(context, attributeName) {\n    const def = this.getDefinition(context.last);\n    if (!def) {\n      return false;\n    }\n    return def.allowAttributes.includes(attributeName);\n  }\n  /**\n   * Checks whether the given element (`elementToMerge`) can be merged with the specified base element (`positionOrBaseElement`).\n   *\n   * In other words &ndash; whether `elementToMerge`'s children {@link #checkChild are allowed} in the `positionOrBaseElement`.\n   *\n   * This check ensures that elements merged with {@link module:engine/model/writer~Writer#merge `Writer#merge()`}\n   * will be valid.\n   *\n   * Instead of elements, you can pass the instance of the {@link module:engine/model/position~Position} class as the\n   * `positionOrBaseElement`. It means that the elements before and after the position will be checked whether they can be merged.\n   *\n   * @param positionOrBaseElement The position or base element to which the `elementToMerge` will be merged.\n   * @param elementToMerge The element to merge. Required if `positionOrBaseElement` is an element.\n   */\n  checkMerge(positionOrBaseElement, elementToMerge) {\n    if (positionOrBaseElement instanceof Position2) {\n      const nodeBefore = positionOrBaseElement.nodeBefore;\n      const nodeAfter = positionOrBaseElement.nodeAfter;\n      if (!(nodeBefore instanceof Element2)) {\n        throw new CKEditorError(\"schema-check-merge-no-element-before\", this);\n      }\n      if (!(nodeAfter instanceof Element2)) {\n        throw new CKEditorError(\"schema-check-merge-no-element-after\", this);\n      }\n      return this.checkMerge(nodeBefore, nodeAfter);\n    }\n    for (const child of elementToMerge.getChildren()) {\n      if (!this.checkChild(positionOrBaseElement, child)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Allows registering a callback to the {@link #checkChild} method calls.\n   *\n   * Callbacks allow you to implement rules which are not otherwise possible to achieve\n   * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n   * For example, by using this method you can disallow elements in specific contexts.\n   *\n   * This method is a shorthand for using the {@link #event:checkChild} event. For even better control,\n   * you can use that event instead.\n   *\n   * Example:\n   *\n   * ```ts\n   * // Disallow heading1 directly inside a blockQuote.\n   * schema.addChildCheck( ( context, childDefinition ) => {\n   * \tif ( context.endsWith( 'blockQuote' ) && childDefinition.name == 'heading1' ) {\n   * \t\treturn false;\n   * \t}\n   * } );\n   * ```\n   *\n   * Which translates to:\n   *\n   * ```ts\n   * schema.on( 'checkChild', ( evt, args ) => {\n   * \tconst context = args[ 0 ];\n   * \tconst childDefinition = args[ 1 ];\n   *\n   * \tif ( context.endsWith( 'blockQuote' ) && childDefinition && childDefinition.name == 'heading1' ) {\n   * \t\t// Prevent next listeners from being called.\n   * \t\tevt.stop();\n   * \t\t// Set the checkChild()'s return value.\n   * \t\tevt.return = false;\n   * \t}\n   * }, { priority: 'high' } );\n   * ```\n   *\n   * @param callback The callback to be called. It is called with two parameters:\n   * {@link module:engine/model/schema~SchemaContext} (context) instance and\n   * {@link module:engine/model/schema~SchemaCompiledItemDefinition} (child-to-check definition).\n   * The callback may return `true/false` to override `checkChild()`'s return value. If it does not return\n   * a boolean value, the default algorithm (or other callbacks) will define `checkChild()`'s return value.\n   */\n  addChildCheck(callback) {\n    this.on(\"checkChild\", (evt, [ctx, childDef]) => {\n      if (!childDef) {\n        return;\n      }\n      const retValue = callback(ctx, childDef);\n      if (typeof retValue == \"boolean\") {\n        evt.stop();\n        evt.return = retValue;\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * Allows registering a callback to the {@link #checkAttribute} method calls.\n   *\n   * Callbacks allow you to implement rules which are not otherwise possible to achieve\n   * by using the declarative API of {@link module:engine/model/schema~SchemaItemDefinition}.\n   * For example, by using this method you can disallow attribute if node to which it is applied\n   * is contained within some other element (e.g. you want to disallow `bold` on `$text` within `heading1`).\n   *\n   * This method is a shorthand for using the {@link #event:checkAttribute} event. For even better control,\n   * you can use that event instead.\n   *\n   * Example:\n   *\n   * ```ts\n   * // Disallow bold on $text inside heading1.\n   * schema.addAttributeCheck( ( context, attributeName ) => {\n   * \tif ( context.endsWith( 'heading1 $text' ) && attributeName == 'bold' ) {\n   * \t\treturn false;\n   * \t}\n   * } );\n   * ```\n   *\n   * Which translates to:\n   *\n   * ```ts\n   * schema.on( 'checkAttribute', ( evt, args ) => {\n   * \tconst context = args[ 0 ];\n   * \tconst attributeName = args[ 1 ];\n   *\n   * \tif ( context.endsWith( 'heading1 $text' ) && attributeName == 'bold' ) {\n   * \t\t// Prevent next listeners from being called.\n   * \t\tevt.stop();\n   * \t\t// Set the checkAttribute()'s return value.\n   * \t\tevt.return = false;\n   * \t}\n   * }, { priority: 'high' } );\n   * ```\n   *\n   * @param callback The callback to be called. It is called with two parameters:\n   * {@link module:engine/model/schema~SchemaContext} (context) instance and attribute name.\n   * The callback may return `true/false` to override `checkAttribute()`'s return value. If it does not return\n   * a boolean value, the default algorithm (or other callbacks) will define `checkAttribute()`'s return value.\n   */\n  addAttributeCheck(callback) {\n    this.on(\"checkAttribute\", (evt, [ctx, attributeName]) => {\n      const retValue = callback(ctx, attributeName);\n      if (typeof retValue == \"boolean\") {\n        evt.stop();\n        evt.return = retValue;\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * This method allows assigning additional metadata to the model attributes. For example,\n   * {@link module:engine/model/schema~AttributeProperties `AttributeProperties#isFormatting` property} is\n   * used to mark formatting attributes (like `bold` or `italic`).\n   *\n   * ```ts\n   * // Mark bold as a formatting attribute.\n   * schema.setAttributeProperties( 'bold', {\n   * \tisFormatting: true\n   * } );\n   *\n   * // Override code not to be considered a formatting markup.\n   * schema.setAttributeProperties( 'code', {\n   * \tisFormatting: false\n   * } );\n   * ```\n   *\n   * Properties are not limited to members defined in the\n   * {@link module:engine/model/schema~AttributeProperties `AttributeProperties` type} and you can also use custom properties:\n   *\n   * ```ts\n   * schema.setAttributeProperties( 'blockQuote', {\n   * \tcustomProperty: 'value'\n   * } );\n   * ```\n   *\n   * Subsequent calls with the same attribute will extend its custom properties:\n   *\n   * ```ts\n   * schema.setAttributeProperties( 'blockQuote', {\n   * \tone: 1\n   * } );\n   *\n   * schema.setAttributeProperties( 'blockQuote', {\n   * \ttwo: 2\n   * } );\n   *\n   * console.log( schema.getAttributeProperties( 'blockQuote' ) );\n   * // Logs: { one: 1, two: 2 }\n   * ```\n   *\n   * @param attributeName A name of the attribute to receive the properties.\n   * @param properties A dictionary of properties.\n   */\n  setAttributeProperties(attributeName, properties) {\n    this._attributeProperties[attributeName] = Object.assign(this.getAttributeProperties(attributeName), properties);\n  }\n  /**\n   * Returns properties associated with a given model attribute. See {@link #setAttributeProperties `setAttributeProperties()`}.\n   *\n   * @param attributeName A name of the attribute.\n   */\n  getAttributeProperties(attributeName) {\n    return this._attributeProperties[attributeName] || {};\n  }\n  /**\n   * Returns the lowest {@link module:engine/model/schema~Schema#isLimit limit element} containing the entire\n   * selection/range/position or the root otherwise.\n   *\n   * @param selectionOrRangeOrPosition The selection/range/position to check.\n   * @returns The lowest limit element containing the entire `selectionOrRangeOrPosition`.\n   */\n  getLimitElement(selectionOrRangeOrPosition) {\n    let element;\n    if (selectionOrRangeOrPosition instanceof Position2) {\n      element = selectionOrRangeOrPosition.parent;\n    } else {\n      const ranges = selectionOrRangeOrPosition instanceof Range2 ? [selectionOrRangeOrPosition] : Array.from(selectionOrRangeOrPosition.getRanges());\n      element = ranges.reduce((element2, range) => {\n        const rangeCommonAncestor = range.getCommonAncestor();\n        if (!element2) {\n          return rangeCommonAncestor;\n        }\n        return element2.getCommonAncestor(rangeCommonAncestor, { includeSelf: true });\n      }, null);\n    }\n    while (!this.isLimit(element)) {\n      if (element.parent) {\n        element = element.parent;\n      } else {\n        break;\n      }\n    }\n    return element;\n  }\n  /**\n   * Checks whether the attribute is allowed in selection:\n   *\n   * * if the selection is not collapsed, then checks if the attribute is allowed on any of nodes in that range,\n   * * if the selection is collapsed, then checks if on the selection position there's a text with the\n   * specified attribute allowed.\n   *\n   * @param selection Selection which will be checked.\n   * @param attribute The name of the attribute to check.\n   */\n  checkAttributeInSelection(selection, attribute) {\n    if (selection.isCollapsed) {\n      const firstPosition = selection.getFirstPosition();\n      const context = [\n        ...firstPosition.getAncestors(),\n        new Text2(\"\", selection.getAttributes())\n      ];\n      return this.checkAttribute(context, attribute);\n    } else {\n      const ranges = selection.getRanges();\n      for (const range of ranges) {\n        for (const value of range) {\n          if (this.checkAttribute(value.item, attribute)) {\n            return true;\n          }\n        }\n      }\n    }\n    return false;\n  }\n  /**\n   * Transforms the given set of ranges into a set of ranges where the given attribute is allowed (and can be applied).\n   *\n   * @param ranges Ranges to be validated.\n   * @param attribute The name of the attribute to check.\n   * @returns Ranges in which the attribute is allowed.\n   */\n  *getValidRanges(ranges, attribute) {\n    ranges = convertToMinimalFlatRanges(ranges);\n    for (const range of ranges) {\n      yield* this._getValidRangesForRange(range, attribute);\n    }\n  }\n  /**\n   * Basing on given `position`, finds and returns a {@link module:engine/model/range~Range range} which is\n   * nearest to that `position` and is a correct range for selection.\n   *\n   * The correct selection range might be collapsed when it is located in a position where the text node can be placed.\n   * Non-collapsed range is returned when selection can be placed around element marked as an \"object\" in\n   * the {@link module:engine/model/schema~Schema schema}.\n   *\n   * Direction of searching for the nearest correct selection range can be specified as:\n   *\n   * * `both` - searching will be performed in both ways,\n   * * `forward` - searching will be performed only forward,\n   * * `backward` - searching will be performed only backward.\n   *\n   * When valid selection range cannot be found, `null` is returned.\n   *\n   * @param position Reference position where new selection range should be looked for.\n   * @param direction Search direction.\n   * @returns Nearest selection range or `null` if one cannot be found.\n   */\n  getNearestSelectionRange(position, direction = \"both\") {\n    if (position.root.rootName == \"$graveyard\") {\n      return null;\n    }\n    if (this.checkChild(position, \"$text\")) {\n      return new Range2(position);\n    }\n    let backwardWalker, forwardWalker;\n    const limitElement = position.getAncestors().reverse().find((item) => this.isLimit(item)) || position.root;\n    if (direction == \"both\" || direction == \"backward\") {\n      backwardWalker = new TreeWalker2({\n        boundaries: Range2._createIn(limitElement),\n        startPosition: position,\n        direction: \"backward\"\n      });\n    }\n    if (direction == \"both\" || direction == \"forward\") {\n      forwardWalker = new TreeWalker2({\n        boundaries: Range2._createIn(limitElement),\n        startPosition: position\n      });\n    }\n    for (const data of combineWalkers(backwardWalker, forwardWalker)) {\n      const type = data.walker == backwardWalker ? \"elementEnd\" : \"elementStart\";\n      const value = data.value;\n      if (value.type == type && this.isObject(value.item)) {\n        return Range2._createOn(value.item);\n      }\n      if (this.checkChild(value.nextPosition, \"$text\")) {\n        return new Range2(value.nextPosition);\n      }\n    }\n    return null;\n  }\n  /**\n   * Tries to find position ancestors that allow to insert a given node.\n   * It starts searching from the given position and goes node by node to the top of the model tree\n   * as long as a {@link module:engine/model/schema~Schema#isLimit limit element}, an\n   * {@link module:engine/model/schema~Schema#isObject object element} or a topmost ancestor is not reached.\n   *\n   * @param position The position that the search will start from.\n   * @param node The node for which an allowed parent should be found or its name.\n   * @returns Allowed parent or null if nothing was found.\n   */\n  findAllowedParent(position, node) {\n    let parent2 = position.parent;\n    while (parent2) {\n      if (this.checkChild(parent2, node)) {\n        return parent2;\n      }\n      if (this.isLimit(parent2)) {\n        return null;\n      }\n      parent2 = parent2.parent;\n    }\n    return null;\n  }\n  /**\n   * Sets attributes allowed by the schema on a given node.\n   *\n   * @param node A node to set attributes on.\n   * @param attributes Attributes keys and values.\n   * @param writer An instance of the model writer.\n   */\n  setAllowedAttributes(node, attributes, writer) {\n    const model = writer.model;\n    for (const [attributeName, attributeValue] of Object.entries(attributes)) {\n      if (model.schema.checkAttribute(node, attributeName)) {\n        writer.setAttribute(attributeName, attributeValue, node);\n      }\n    }\n  }\n  /**\n   * Removes attributes disallowed by the schema.\n   *\n   * @param nodes Nodes that will be filtered.\n   */\n  removeDisallowedAttributes(nodes, writer) {\n    for (const node of nodes) {\n      if (node.is(\"$text\")) {\n        removeDisallowedAttributeFromNode(this, node, writer);\n      } else {\n        const rangeInNode = Range2._createIn(node);\n        const positionsInRange = rangeInNode.getPositions();\n        for (const position of positionsInRange) {\n          const item = position.nodeBefore || position.parent;\n          removeDisallowedAttributeFromNode(this, item, writer);\n        }\n      }\n    }\n  }\n  /**\n   * Gets attributes of a node that have a given property.\n   *\n   * @param node Node to get attributes from.\n   * @param propertyName Name of the property that attribute must have to return it.\n   * @param propertyValue Desired value of the property that we want to check.\n   * When `undefined` attributes will be returned if they have set a given property no matter what the value is. If specified it will\n   * return attributes which given property's value is equal to this parameter.\n   * @returns Object with attributes' names as key and attributes' values as value.\n   */\n  getAttributesWithProperty(node, propertyName, propertyValue) {\n    const attributes = {};\n    for (const [attributeName, attributeValue] of node.getAttributes()) {\n      const attributeProperties = this.getAttributeProperties(attributeName);\n      if (attributeProperties[propertyName] === void 0) {\n        continue;\n      }\n      if (propertyValue === void 0 || propertyValue === attributeProperties[propertyName]) {\n        attributes[attributeName] = attributeValue;\n      }\n    }\n    return attributes;\n  }\n  /**\n   * Creates an instance of the schema context.\n   */\n  createContext(context) {\n    return new SchemaContext(context);\n  }\n  _clearCache() {\n    this._compiledDefinitions = null;\n  }\n  _compile() {\n    const compiledDefinitions = {};\n    const sourceRules = this._sourceDefinitions;\n    const itemNames = Object.keys(sourceRules);\n    for (const itemName of itemNames) {\n      compiledDefinitions[itemName] = compileBaseItemRule(sourceRules[itemName], itemName);\n    }\n    for (const itemName of itemNames) {\n      compileAllowChildren(compiledDefinitions, itemName);\n    }\n    for (const itemName of itemNames) {\n      compileAllowContentOf(compiledDefinitions, itemName);\n    }\n    for (const itemName of itemNames) {\n      compileAllowWhere(compiledDefinitions, itemName);\n    }\n    for (const itemName of itemNames) {\n      compileAllowAttributesOf(compiledDefinitions, itemName);\n      compileInheritPropertiesFrom(compiledDefinitions, itemName);\n    }\n    for (const itemName of itemNames) {\n      cleanUpAllowIn(compiledDefinitions, itemName);\n      setupAllowChildren(compiledDefinitions, itemName);\n      cleanUpAllowAttributes(compiledDefinitions, itemName);\n    }\n    this._compiledDefinitions = compiledDefinitions;\n  }\n  _checkContextMatch(def, context, contextItemIndex = context.length - 1) {\n    const contextItem = context.getItem(contextItemIndex);\n    if (def.allowIn.includes(contextItem.name)) {\n      if (contextItemIndex == 0) {\n        return true;\n      } else {\n        const parentRule = this.getDefinition(contextItem);\n        return this._checkContextMatch(parentRule, context, contextItemIndex - 1);\n      }\n    } else {\n      return false;\n    }\n  }\n  /**\n   * Takes a flat range and an attribute name. Traverses the range recursively and deeply to find and return all ranges\n   * inside the given range on which the attribute can be applied.\n   *\n   * This is a helper function for {@link ~Schema#getValidRanges}.\n   *\n   * @param range The range to process.\n   * @param attribute The name of the attribute to check.\n   * @returns Ranges in which the attribute is allowed.\n   */\n  *_getValidRangesForRange(range, attribute) {\n    let start = range.start;\n    let end = range.start;\n    for (const item of range.getItems({ shallow: true })) {\n      if (item.is(\"element\")) {\n        yield* this._getValidRangesForRange(Range2._createIn(item), attribute);\n      }\n      if (!this.checkAttribute(item, attribute)) {\n        if (!start.isEqual(end)) {\n          yield new Range2(start, end);\n        }\n        start = Position2._createAfter(item);\n      }\n      end = Position2._createAfter(item);\n    }\n    if (!start.isEqual(end)) {\n      yield new Range2(start, end);\n    }\n  }\n  /**\n   * Returns a model range which is optimal (in terms of UX) for inserting a widget block.\n   *\n   * For instance, if a selection is in the middle of a paragraph, the collapsed range before this paragraph\n   * will be returned so that it is not split. If the selection is at the end of a paragraph,\n   * the collapsed range after this paragraph will be returned.\n   *\n   * Note: If the selection is placed in an empty block, the range in that block will be returned. If that range\n   * is then passed to {@link module:engine/model/model~Model#insertContent}, the block will be fully replaced\n   * by the inserted widget block.\n   *\n   * @internal\n   * @param selection The selection based on which the insertion position should be calculated.\n   * @param place The place where to look for optimal insertion range.\n   * The `auto` value will determine itself the best position for insertion.\n   * The `before` value will try to find a position before selection.\n   * The `after` value will try to find a position after selection.\n   * @returns The optimal range.\n   */\n  findOptimalInsertionRange(selection, place) {\n    const selectedElement = selection.getSelectedElement();\n    if (selectedElement && this.isObject(selectedElement) && !this.isInline(selectedElement)) {\n      if (place == \"before\" || place == \"after\") {\n        return new Range2(Position2._createAt(selectedElement, place));\n      }\n      return Range2._createOn(selectedElement);\n    }\n    const firstBlock = first(selection.getSelectedBlocks());\n    if (!firstBlock) {\n      return new Range2(selection.focus);\n    }\n    if (firstBlock.isEmpty) {\n      return new Range2(Position2._createAt(firstBlock, 0));\n    }\n    const positionAfter = Position2._createAfter(firstBlock);\n    if (selection.focus.isTouching(positionAfter)) {\n      return new Range2(positionAfter);\n    }\n    return new Range2(Position2._createBefore(firstBlock));\n  }\n};\nvar SchemaContext = class _SchemaContext {\n  /**\n   * Creates an instance of the context.\n   */\n  constructor(context) {\n    if (context instanceof _SchemaContext) {\n      return context;\n    }\n    let items;\n    if (typeof context == \"string\") {\n      items = [context];\n    } else if (!Array.isArray(context)) {\n      items = context.getAncestors({ includeSelf: true });\n    } else {\n      items = context;\n    }\n    this._items = items.map(mapContextItem);\n  }\n  /**\n   * The number of items.\n   */\n  get length() {\n    return this._items.length;\n  }\n  /**\n   * The last item (the lowest node).\n   */\n  get last() {\n    return this._items[this._items.length - 1];\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all context items.\n   */\n  [Symbol.iterator]() {\n    return this._items[Symbol.iterator]();\n  }\n  /**\n   * Returns a new schema context instance with an additional item.\n   *\n   * Item can be added as:\n   *\n   * ```ts\n   * const context = new SchemaContext( [ '$root' ] );\n   *\n   * // An element.\n   * const fooElement = writer.createElement( 'fooElement' );\n   * const newContext = context.push( fooElement ); // [ '$root', 'fooElement' ]\n   *\n   * // A text node.\n   * const text = writer.createText( 'foobar' );\n   * const newContext = context.push( text ); // [ '$root', '$text' ]\n   *\n   * // A string (element name).\n   * const newContext = context.push( 'barElement' ); // [ '$root', 'barElement' ]\n   * ```\n   *\n   * **Note** {@link module:engine/model/node~Node} that is already in the model tree will be added as the only item\n   * (without ancestors).\n   *\n   * @param item An item that will be added to the current context.\n   * @returns A new schema context instance with an additional item.\n   */\n  push(item) {\n    const ctx = new _SchemaContext([item]);\n    ctx._items = [...this._items, ...ctx._items];\n    return ctx;\n  }\n  /**\n   * Gets an item on the given index.\n   */\n  getItem(index) {\n    return this._items[index];\n  }\n  /**\n   * Returns the names of items.\n   */\n  *getNames() {\n    yield* this._items.map((item) => item.name);\n  }\n  /**\n   * Checks whether the context ends with the given nodes.\n   *\n   * ```ts\n   * const ctx = new SchemaContext( [ rootElement, paragraphElement, textNode ] );\n   *\n   * ctx.endsWith( '$text' ); // -> true\n   * ctx.endsWith( 'paragraph $text' ); // -> true\n   * ctx.endsWith( '$root' ); // -> false\n   * ctx.endsWith( 'paragraph' ); // -> false\n   * ```\n   */\n  endsWith(query) {\n    return Array.from(this.getNames()).join(\" \").endsWith(query);\n  }\n  /**\n   * Checks whether the context starts with the given nodes.\n   *\n   * ```ts\n   * const ctx = new SchemaContext( [ rootElement, paragraphElement, textNode ] );\n   *\n   * ctx.endsWith( '$root' ); // -> true\n   * ctx.endsWith( '$root paragraph' ); // -> true\n   * ctx.endsWith( '$text' ); // -> false\n   * ctx.endsWith( 'paragraph' ); // -> false\n   * ```\n   */\n  startsWith(query) {\n    return Array.from(this.getNames()).join(\" \").startsWith(query);\n  }\n};\nfunction compileBaseItemRule(sourceItemRules, itemName) {\n  const itemRule = {\n    name: itemName,\n    allowIn: [],\n    allowContentOf: [],\n    allowWhere: [],\n    allowAttributes: [],\n    allowAttributesOf: [],\n    allowChildren: [],\n    inheritTypesFrom: []\n  };\n  copyTypes(sourceItemRules, itemRule);\n  copyProperty(sourceItemRules, itemRule, \"allowIn\");\n  copyProperty(sourceItemRules, itemRule, \"allowContentOf\");\n  copyProperty(sourceItemRules, itemRule, \"allowWhere\");\n  copyProperty(sourceItemRules, itemRule, \"allowAttributes\");\n  copyProperty(sourceItemRules, itemRule, \"allowAttributesOf\");\n  copyProperty(sourceItemRules, itemRule, \"allowChildren\");\n  copyProperty(sourceItemRules, itemRule, \"inheritTypesFrom\");\n  makeInheritAllWork(sourceItemRules, itemRule);\n  return itemRule;\n}\nfunction compileAllowChildren(compiledDefinitions, itemName) {\n  const item = compiledDefinitions[itemName];\n  for (const allowChildrenItem of item.allowChildren) {\n    const allowedChildren = compiledDefinitions[allowChildrenItem];\n    if (!allowedChildren) {\n      continue;\n    }\n    allowedChildren.allowIn.push(itemName);\n  }\n  item.allowChildren.length = 0;\n}\nfunction compileAllowContentOf(compiledDefinitions, itemName) {\n  for (const allowContentOfItemName of compiledDefinitions[itemName].allowContentOf) {\n    if (compiledDefinitions[allowContentOfItemName]) {\n      const allowedChildren = getAllowedChildren(compiledDefinitions, allowContentOfItemName);\n      allowedChildren.forEach((allowedItem) => {\n        allowedItem.allowIn.push(itemName);\n      });\n    }\n  }\n  delete compiledDefinitions[itemName].allowContentOf;\n}\nfunction compileAllowWhere(compiledDefinitions, itemName) {\n  for (const allowWhereItemName of compiledDefinitions[itemName].allowWhere) {\n    const inheritFrom = compiledDefinitions[allowWhereItemName];\n    if (inheritFrom) {\n      const allowedIn = inheritFrom.allowIn;\n      compiledDefinitions[itemName].allowIn.push(...allowedIn);\n    }\n  }\n  delete compiledDefinitions[itemName].allowWhere;\n}\nfunction compileAllowAttributesOf(compiledDefinitions, itemName) {\n  for (const allowAttributeOfItem of compiledDefinitions[itemName].allowAttributesOf) {\n    const inheritFrom = compiledDefinitions[allowAttributeOfItem];\n    if (inheritFrom) {\n      const inheritAttributes = inheritFrom.allowAttributes;\n      compiledDefinitions[itemName].allowAttributes.push(...inheritAttributes);\n    }\n  }\n  delete compiledDefinitions[itemName].allowAttributesOf;\n}\nfunction compileInheritPropertiesFrom(compiledDefinitions, itemName) {\n  const item = compiledDefinitions[itemName];\n  for (const inheritPropertiesOfItem of item.inheritTypesFrom) {\n    const inheritFrom = compiledDefinitions[inheritPropertiesOfItem];\n    if (inheritFrom) {\n      const typeNames = Object.keys(inheritFrom).filter((name) => name.startsWith(\"is\"));\n      for (const name of typeNames) {\n        if (!(name in item)) {\n          item[name] = inheritFrom[name];\n        }\n      }\n    }\n  }\n  delete item.inheritTypesFrom;\n}\nfunction cleanUpAllowIn(compiledDefinitions, itemName) {\n  const itemRule = compiledDefinitions[itemName];\n  const existingItems = itemRule.allowIn.filter((itemToCheck) => compiledDefinitions[itemToCheck]);\n  itemRule.allowIn = Array.from(new Set(existingItems));\n}\nfunction setupAllowChildren(compiledDefinitions, itemName) {\n  const itemRule = compiledDefinitions[itemName];\n  for (const allowedParentItemName of itemRule.allowIn) {\n    const allowedParentItem = compiledDefinitions[allowedParentItemName];\n    allowedParentItem.allowChildren.push(itemName);\n  }\n}\nfunction cleanUpAllowAttributes(compiledDefinitions, itemName) {\n  const itemRule = compiledDefinitions[itemName];\n  itemRule.allowAttributes = Array.from(new Set(itemRule.allowAttributes));\n}\nfunction copyTypes(sourceItemRules, itemRule) {\n  for (const sourceItemRule of sourceItemRules) {\n    const typeNames = Object.keys(sourceItemRule).filter((name) => name.startsWith(\"is\"));\n    for (const name of typeNames) {\n      itemRule[name] = !!sourceItemRule[name];\n    }\n  }\n}\nfunction copyProperty(sourceItemRules, itemRule, propertyName) {\n  for (const sourceItemRule of sourceItemRules) {\n    const value = sourceItemRule[propertyName];\n    if (typeof value == \"string\") {\n      itemRule[propertyName].push(value);\n    } else if (Array.isArray(value)) {\n      itemRule[propertyName].push(...value);\n    }\n  }\n}\nfunction makeInheritAllWork(sourceItemRules, itemRule) {\n  for (const sourceItemRule of sourceItemRules) {\n    const inheritFrom = sourceItemRule.inheritAllFrom;\n    if (inheritFrom) {\n      itemRule.allowContentOf.push(inheritFrom);\n      itemRule.allowWhere.push(inheritFrom);\n      itemRule.allowAttributesOf.push(inheritFrom);\n      itemRule.inheritTypesFrom.push(inheritFrom);\n    }\n  }\n}\nfunction getAllowedChildren(compiledDefinitions, itemName) {\n  const itemRule = compiledDefinitions[itemName];\n  return getValues(compiledDefinitions).filter((def) => def.allowIn.includes(itemRule.name));\n}\nfunction getValues(obj) {\n  return Object.keys(obj).map((key) => obj[key]);\n}\nfunction mapContextItem(ctxItem) {\n  if (typeof ctxItem == \"string\" || ctxItem.is(\"documentFragment\")) {\n    return {\n      name: typeof ctxItem == \"string\" ? ctxItem : \"$documentFragment\",\n      *getAttributeKeys() {\n      },\n      getAttribute() {\n      }\n    };\n  } else {\n    return {\n      // '$text' means text nodes and text proxies.\n      name: ctxItem.is(\"element\") ? ctxItem.name : \"$text\",\n      *getAttributeKeys() {\n        yield* ctxItem.getAttributeKeys();\n      },\n      getAttribute(key) {\n        return ctxItem.getAttribute(key);\n      }\n    };\n  }\n}\nfunction* combineWalkers(backward, forward) {\n  let done = false;\n  while (!done) {\n    done = true;\n    if (backward) {\n      const step = backward.next();\n      if (!step.done) {\n        done = false;\n        yield {\n          walker: backward,\n          value: step.value\n        };\n      }\n    }\n    if (forward) {\n      const step = forward.next();\n      if (!step.done) {\n        done = false;\n        yield {\n          walker: forward,\n          value: step.value\n        };\n      }\n    }\n  }\n}\nfunction* convertToMinimalFlatRanges(ranges) {\n  for (const range of ranges) {\n    yield* range.getMinimalFlatRanges();\n  }\n}\nfunction removeDisallowedAttributeFromNode(schema, node, writer) {\n  for (const attribute of node.getAttributeKeys()) {\n    if (!schema.checkAttribute(node, attribute)) {\n      writer.removeAttribute(attribute, node);\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/upcastdispatcher.js\nvar UpcastDispatcher = class extends EmitterMixin() {\n  /**\n   * Creates an upcast dispatcher that operates using the passed API.\n   *\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi\n   * @param conversionApi Additional properties for an interface that will be passed to events fired\n   * by the upcast dispatcher.\n   */\n  constructor(conversionApi) {\n    super();\n    this._splitParts = /* @__PURE__ */ new Map();\n    this._cursorParents = /* @__PURE__ */ new Map();\n    this._modelCursor = null;\n    this._emptyElementsToKeep = /* @__PURE__ */ new Set();\n    this.conversionApi = {\n      ...conversionApi,\n      consumable: null,\n      writer: null,\n      store: null,\n      convertItem: (viewItem, modelCursor) => this._convertItem(viewItem, modelCursor),\n      convertChildren: (viewElement, positionOrElement) => this._convertChildren(viewElement, positionOrElement),\n      safeInsert: (modelNode, position) => this._safeInsert(modelNode, position),\n      updateConversionResult: (modelElement, data) => this._updateConversionResult(modelElement, data),\n      // Advanced API - use only if custom position handling is needed.\n      splitToAllowedParent: (modelNode, modelCursor) => this._splitToAllowedParent(modelNode, modelCursor),\n      getSplitParts: (modelElement) => this._getSplitParts(modelElement),\n      keepEmptyElement: (modelElement) => this._keepEmptyElement(modelElement)\n    };\n  }\n  /**\n   * Starts the conversion process. The entry point for the conversion.\n   *\n   * @fires element\n   * @fires text\n   * @fires documentFragment\n   * @param viewElement The part of the view to be converted.\n   * @param writer An instance of the model writer.\n   * @param context Elements will be converted according to this context.\n   * @returns Model data that is the result of the conversion process\n   * wrapped in `DocumentFragment`. Converted marker elements will be set as the document fragment's\n   * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n   */\n  convert(viewElement, writer, context = [\"$root\"]) {\n    this.fire(\"viewCleanup\", viewElement);\n    this._modelCursor = createContextTree(context, writer);\n    this.conversionApi.writer = writer;\n    this.conversionApi.consumable = ViewConsumable.createFrom(viewElement);\n    this.conversionApi.store = {};\n    const { modelRange } = this._convertItem(viewElement, this._modelCursor);\n    const documentFragment = writer.createDocumentFragment();\n    if (modelRange) {\n      this._removeEmptyElements();\n      for (const item of Array.from(this._modelCursor.parent.getChildren())) {\n        writer.append(item, documentFragment);\n      }\n      documentFragment.markers = extractMarkersFromModelFragment(documentFragment, writer);\n    }\n    this._modelCursor = null;\n    this._splitParts.clear();\n    this._cursorParents.clear();\n    this._emptyElementsToKeep.clear();\n    this.conversionApi.writer = null;\n    this.conversionApi.store = null;\n    return documentFragment;\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertItem\n   */\n  _convertItem(viewItem, modelCursor) {\n    const data = { viewItem, modelCursor, modelRange: null };\n    if (viewItem.is(\"element\")) {\n      this.fire(`element:${viewItem.name}`, data, this.conversionApi);\n    } else if (viewItem.is(\"$text\")) {\n      this.fire(\"text\", data, this.conversionApi);\n    } else {\n      this.fire(\"documentFragment\", data, this.conversionApi);\n    }\n    if (data.modelRange && !(data.modelRange instanceof Range2)) {\n      throw new CKEditorError(\"view-conversion-dispatcher-incorrect-result\", this);\n    }\n    return { modelRange: data.modelRange, modelCursor: data.modelCursor };\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#convertChildren\n   */\n  _convertChildren(viewItem, elementOrModelCursor) {\n    let nextModelCursor = elementOrModelCursor.is(\"position\") ? elementOrModelCursor : Position2._createAt(elementOrModelCursor, 0);\n    const modelRange = new Range2(nextModelCursor);\n    for (const viewChild of Array.from(viewItem.getChildren())) {\n      const result = this._convertItem(viewChild, nextModelCursor);\n      if (result.modelRange instanceof Range2) {\n        modelRange.end = result.modelRange.end;\n        nextModelCursor = result.modelCursor;\n      }\n    }\n    return { modelRange, modelCursor: nextModelCursor };\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#safeInsert\n   */\n  _safeInsert(modelNode, position) {\n    const splitResult = this._splitToAllowedParent(modelNode, position);\n    if (!splitResult) {\n      return false;\n    }\n    this.conversionApi.writer.insert(modelNode, splitResult.position);\n    return true;\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#updateConversionResult\n   */\n  _updateConversionResult(modelElement, data) {\n    const parts = this._getSplitParts(modelElement);\n    const writer = this.conversionApi.writer;\n    if (!data.modelRange) {\n      data.modelRange = writer.createRange(writer.createPositionBefore(modelElement), writer.createPositionAfter(parts[parts.length - 1]));\n    }\n    const savedCursorParent = this._cursorParents.get(modelElement);\n    if (savedCursorParent) {\n      data.modelCursor = writer.createPositionAt(savedCursorParent, 0);\n    } else {\n      data.modelCursor = data.modelRange.end;\n    }\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#splitToAllowedParent\n   */\n  _splitToAllowedParent(node, modelCursor) {\n    const { schema, writer } = this.conversionApi;\n    let allowedParent = schema.findAllowedParent(modelCursor, node);\n    if (allowedParent) {\n      if (allowedParent === modelCursor.parent) {\n        return { position: modelCursor };\n      }\n      if (this._modelCursor.parent.getAncestors().includes(allowedParent)) {\n        allowedParent = null;\n      }\n    }\n    if (!allowedParent) {\n      if (!isParagraphable(modelCursor, node, schema)) {\n        return null;\n      }\n      return {\n        position: wrapInParagraph(modelCursor, writer)\n      };\n    }\n    const splitResult = this.conversionApi.writer.split(modelCursor, allowedParent);\n    const stack = [];\n    for (const treeWalkerValue of splitResult.range.getWalker()) {\n      if (treeWalkerValue.type == \"elementEnd\") {\n        stack.push(treeWalkerValue.item);\n      } else {\n        const originalPart = stack.pop();\n        const splitPart = treeWalkerValue.item;\n        this._registerSplitPair(originalPart, splitPart);\n      }\n    }\n    const cursorParent = splitResult.range.end.parent;\n    this._cursorParents.set(node, cursorParent);\n    return {\n      position: splitResult.position,\n      cursorParent\n    };\n  }\n  /**\n   * Registers that a `splitPart` element is a split part of the `originalPart` element.\n   *\n   * The data set by this method is used by {@link #_getSplitParts} and {@link #_removeEmptyElements}.\n   */\n  _registerSplitPair(originalPart, splitPart) {\n    if (!this._splitParts.has(originalPart)) {\n      this._splitParts.set(originalPart, [originalPart]);\n    }\n    const list = this._splitParts.get(originalPart);\n    this._splitParts.set(splitPart, list);\n    list.push(splitPart);\n  }\n  /**\n   * @see module:engine/conversion/upcastdispatcher~UpcastConversionApi#getSplitParts\n   */\n  _getSplitParts(element) {\n    let parts;\n    if (!this._splitParts.has(element)) {\n      parts = [element];\n    } else {\n      parts = this._splitParts.get(element);\n    }\n    return parts;\n  }\n  /**\n   * Mark an element that were created during the splitting to not get removed on conversion end even if it is empty.\n   */\n  _keepEmptyElement(element) {\n    this._emptyElementsToKeep.add(element);\n  }\n  /**\n   * Checks if there are any empty elements created while splitting and removes them.\n   *\n   * This method works recursively to re-check empty elements again after at least one element was removed in the initial call,\n   * as some elements might have become empty after other empty elements were removed from them.\n   */\n  _removeEmptyElements() {\n    let anyRemoved = false;\n    for (const element of this._splitParts.keys()) {\n      if (element.isEmpty && !this._emptyElementsToKeep.has(element)) {\n        this.conversionApi.writer.remove(element);\n        this._splitParts.delete(element);\n        anyRemoved = true;\n      }\n    }\n    if (anyRemoved) {\n      this._removeEmptyElements();\n    }\n  }\n};\nfunction extractMarkersFromModelFragment(modelItem, writer) {\n  const markerElements = /* @__PURE__ */ new Set();\n  const markers = /* @__PURE__ */ new Map();\n  const range = Range2._createIn(modelItem).getItems();\n  for (const item of range) {\n    if (item.is(\"element\", \"$marker\")) {\n      markerElements.add(item);\n    }\n  }\n  for (const markerElement of markerElements) {\n    const markerName = markerElement.getAttribute(\"data-name\");\n    const currentPosition = writer.createPositionBefore(markerElement);\n    if (!markers.has(markerName)) {\n      markers.set(markerName, new Range2(currentPosition.clone()));\n    } else {\n      markers.get(markerName).end = currentPosition.clone();\n    }\n    writer.remove(markerElement);\n  }\n  return markers;\n}\nfunction createContextTree(contextDefinition, writer) {\n  let position;\n  for (const item of new SchemaContext(contextDefinition)) {\n    const attributes = {};\n    for (const key of item.getAttributeKeys()) {\n      attributes[key] = item.getAttribute(key);\n    }\n    const current = writer.createElement(item.name, attributes);\n    if (position) {\n      writer.insert(current, position);\n    }\n    position = Position2._createAt(current, 0);\n  }\n  return position;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter.js\nvar BasicHtmlWriter = class {\n  /**\n   * Returns an HTML string created from the document fragment.\n   */\n  getHtml(fragment) {\n    const doc = global_default.document.implementation.createHTMLDocument(\"\");\n    const container = doc.createElement(\"div\");\n    container.appendChild(fragment);\n    return container.innerHTML;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js\nvar HtmlDataProcessor = class {\n  /**\n   * Creates a new instance of the HTML data processor class.\n   *\n   * @param document The view document instance.\n   */\n  constructor(document2) {\n    this.skipComments = true;\n    this.domParser = new DOMParser();\n    this.domConverter = new DomConverter(document2, { renderingMode: \"data\" });\n    this.htmlWriter = new BasicHtmlWriter();\n  }\n  /**\n   * Converts a provided {@link module:engine/view/documentfragment~DocumentFragment document fragment}\n   * to data format &ndash; in this case to an HTML string.\n   *\n   * @returns HTML string.\n   */\n  toData(viewFragment) {\n    const domFragment = this.domConverter.viewToDom(viewFragment);\n    return this.htmlWriter.getHtml(domFragment);\n  }\n  /**\n   * Converts the provided HTML string to a view tree.\n   *\n   * @param data An HTML string.\n   * @returns A converted view element.\n   */\n  toView(data) {\n    const domFragment = this._toDom(data);\n    return this.domConverter.domToView(domFragment, { skipComments: this.skipComments });\n  }\n  /**\n   * Registers a {@link module:engine/view/matcher~MatcherPattern} for view elements whose content should be treated as raw data\n   * and not processed during the conversion from the DOM to the view elements.\n   *\n   * The raw data can be later accessed by a\n   * {@link module:engine/view/element~Element#getCustomProperty custom property of a view element} called `\"$rawContent\"`.\n   *\n   * @param pattern Pattern matching all view elements whose content should be treated as raw data.\n   */\n  registerRawContentMatcher(pattern) {\n    this.domConverter.registerRawContentMatcher(pattern);\n  }\n  /**\n   * If the processor is set to use marked fillers, it will insert `&nbsp;` fillers wrapped in `<span>` elements\n   * (`<span data-cke-filler=\"true\">&nbsp;</span>`) instead of regular `&nbsp;` characters.\n   *\n   * This mode allows for a more precise handling of the block fillers (so they do not leak into the editor content) but\n   * bloats the editor data with additional markup.\n   *\n   * This mode may be required by some features and will be turned on by them automatically.\n   *\n   * @param type Whether to use the default or the marked `&nbsp;` block fillers.\n   */\n  useFillerType(type) {\n    this.domConverter.blockFillerMode = type == \"marked\" ? \"markedNbsp\" : \"nbsp\";\n  }\n  /**\n   * Converts an HTML string to its DOM representation. Returns a document fragment containing nodes parsed from\n   * the provided data.\n   */\n  _toDom(data) {\n    if (!data.match(/<(?:html|body|head|meta)(?:\\s[^>]*)?>/i)) {\n      data = `<body>${data}</body>`;\n    }\n    const document2 = this.domParser.parseFromString(data, \"text/html\");\n    const fragment = document2.createDocumentFragment();\n    const bodyChildNodes = document2.body.childNodes;\n    while (bodyChildNodes.length > 0) {\n      fragment.appendChild(bodyChildNodes[0]);\n    }\n    return fragment;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/controller/datacontroller.js\nvar DataController = class extends EmitterMixin() {\n  /**\n   * Creates a data controller instance.\n   *\n   * @param model Data model.\n   * @param stylesProcessor The styles processor instance.\n   */\n  constructor(model, stylesProcessor) {\n    super();\n    this.model = model;\n    this.mapper = new Mapper();\n    this.downcastDispatcher = new DowncastDispatcher({\n      mapper: this.mapper,\n      schema: model.schema\n    });\n    this.downcastDispatcher.on(\"insert:$text\", insertText(), { priority: \"lowest\" });\n    this.downcastDispatcher.on(\"insert\", insertAttributesAndChildren(), { priority: \"lowest\" });\n    this.upcastDispatcher = new UpcastDispatcher({\n      schema: model.schema\n    });\n    this.viewDocument = new Document(stylesProcessor);\n    this.stylesProcessor = stylesProcessor;\n    this.htmlProcessor = new HtmlDataProcessor(this.viewDocument);\n    this.processor = this.htmlProcessor;\n    this._viewWriter = new DowncastWriter(this.viewDocument);\n    this.upcastDispatcher.on(\"text\", convertText(), { priority: \"lowest\" });\n    this.upcastDispatcher.on(\"element\", convertToModelFragment(), { priority: \"lowest\" });\n    this.upcastDispatcher.on(\"documentFragment\", convertToModelFragment(), { priority: \"lowest\" });\n    ObservableMixin().prototype.decorate.call(this, \"init\");\n    ObservableMixin().prototype.decorate.call(this, \"set\");\n    ObservableMixin().prototype.decorate.call(this, \"get\");\n    ObservableMixin().prototype.decorate.call(this, \"toView\");\n    ObservableMixin().prototype.decorate.call(this, \"toModel\");\n    this.on(\"init\", () => {\n      this.fire(\"ready\");\n    }, { priority: \"lowest\" });\n    this.on(\"ready\", () => {\n      this.model.enqueueChange({ isUndoable: false }, autoParagraphEmptyRoots);\n    }, { priority: \"lowest\" });\n  }\n  /**\n   * Returns the model's data converted by downcast dispatchers attached to {@link #downcastDispatcher} and\n   * formatted by the {@link #processor data processor}.\n   *\n   * A warning is logged when you try to retrieve data for a detached root, as most probably this is a mistake. A detached root should\n   * be treated like it is removed, and you should not save its data. Note, that the detached root data is always an empty string.\n   *\n   * @fires get\n   * @param options Additional configuration for the retrieved data. `DataController` provides two optional\n   * properties: `rootName` and `trim`. Other properties of this object are specified by various editor features.\n   * @param options.rootName Root name. Default 'main'.\n   * @param options.trim Whether returned data should be trimmed. This option is set to `empty` by default,\n   * which means whenever editor content is considered empty, an empty string will be returned. To turn off trimming completely\n   * use `'none'`. In such cases the exact content will be returned (for example a `<p>&nbsp;</p>` for an empty editor).\n   * @returns Output data.\n   */\n  get(options = {}) {\n    const { rootName = \"main\", trim = \"empty\" } = options;\n    if (!this._checkIfRootsExists([rootName])) {\n      throw new CKEditorError(\"datacontroller-get-non-existent-root\", this);\n    }\n    const root2 = this.model.document.getRoot(rootName);\n    if (!root2.isAttached()) {\n      logWarning(\"datacontroller-get-detached-root\", this);\n    }\n    if (trim === \"empty\" && !this.model.hasContent(root2, { ignoreWhitespaces: true })) {\n      return \"\";\n    }\n    return this.stringify(root2, options);\n  }\n  /**\n   * Returns the content of the given {@link module:engine/model/element~Element model's element} or\n   * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast converters\n   * attached to the {@link #downcastDispatcher} and formatted by the {@link #processor data processor}.\n   *\n   * @param modelElementOrFragment The element whose content will be stringified.\n   * @param options Additional configuration passed to the conversion process.\n   * @returns Output data.\n   */\n  stringify(modelElementOrFragment, options = {}) {\n    const viewDocumentFragment = this.toView(modelElementOrFragment, options);\n    return this.processor.toData(viewDocumentFragment);\n  }\n  /**\n   * Returns the content of the given {@link module:engine/model/element~Element model element} or\n   * {@link module:engine/model/documentfragment~DocumentFragment model document fragment} converted by the downcast\n   * converters attached to {@link #downcastDispatcher} into a\n   * {@link module:engine/view/documentfragment~DocumentFragment view document fragment}.\n   *\n   * @fires toView\n   * @param modelElementOrFragment Element or document fragment whose content will be converted.\n   * @param options Additional configuration that will be available through the\n   * {@link module:engine/conversion/downcastdispatcher~DowncastConversionApi#options} during the conversion process.\n   * @returns Output view DocumentFragment.\n   */\n  toView(modelElementOrFragment, options = {}) {\n    const viewDocument = this.viewDocument;\n    const viewWriter = this._viewWriter;\n    this.mapper.clearBindings();\n    const modelRange = Range2._createIn(modelElementOrFragment);\n    const viewDocumentFragment = new DocumentFragment(viewDocument);\n    this.mapper.bindElements(modelElementOrFragment, viewDocumentFragment);\n    const markers = modelElementOrFragment.is(\"documentFragment\") ? modelElementOrFragment.markers : _getMarkersRelativeToElement(modelElementOrFragment);\n    this.downcastDispatcher.convert(modelRange, markers, viewWriter, options);\n    return viewDocumentFragment;\n  }\n  /**\n   * Sets the initial input data parsed by the {@link #processor data processor} and\n   * converted by the {@link #upcastDispatcher view-to-model converters}.\n   * Initial data can be only set to a document whose {@link module:engine/model/document~Document#version} is equal 0.\n   *\n   * **Note** This method is {@link module:utils/observablemixin~Observable#decorate decorated} which is\n   * used by e.g. collaborative editing plugin that syncs remote data on init.\n   *\n   * When data is passed as a string, it is initialized on the default `main` root:\n   *\n   * ```ts\n   * dataController.init( '<p>Foo</p>' ); // Initializes data on the `main` root only, as no other is specified.\n   * ```\n   *\n   * To initialize data on a different root or multiple roots at once, an object containing `rootName` - `data` pairs should be passed:\n   *\n   * ```ts\n   * dataController.init( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Initializes data on both the `main` and `title` roots.\n   * ```\n   *\n   * @fires init\n   * @param data Input data as a string or an object containing the `rootName` - `data`\n   * pairs to initialize data on multiple roots at once.\n   * @returns Promise that is resolved after the data is set on the editor.\n   */\n  init(data) {\n    if (this.model.document.version) {\n      throw new CKEditorError(\"datacontroller-init-document-not-empty\", this);\n    }\n    let initialData = {};\n    if (typeof data === \"string\") {\n      initialData.main = data;\n    } else {\n      initialData = data;\n    }\n    if (!this._checkIfRootsExists(Object.keys(initialData))) {\n      throw new CKEditorError(\"datacontroller-init-non-existent-root\", this);\n    }\n    this.model.enqueueChange({ isUndoable: false }, (writer) => {\n      for (const rootName of Object.keys(initialData)) {\n        const modelRoot = this.model.document.getRoot(rootName);\n        writer.insert(this.parse(initialData[rootName], modelRoot), modelRoot, 0);\n      }\n    });\n    return Promise.resolve();\n  }\n  /**\n   * Sets the input data parsed by the {@link #processor data processor} and\n   * converted by the {@link #upcastDispatcher view-to-model converters}.\n   * This method can be used any time to replace existing editor data with the new one without clearing the\n   * {@link module:engine/model/document~Document#history document history}.\n   *\n   * This method also creates a batch with all the changes applied. If all you need is to parse data, use\n   * the {@link #parse} method.\n   *\n   * When data is passed as a string it is set on the default `main` root:\n   *\n   * ```ts\n   * dataController.set( '<p>Foo</p>' ); // Sets data on the `main` root, as no other is specified.\n   * ```\n   *\n   * To set data on a different root or multiple roots at once, an object containing `rootName` - `data` pairs should be passed:\n   *\n   * ```ts\n   * dataController.set( { main: '<p>Foo</p>', title: '<h1>Bar</h1>' } ); // Sets data on the `main` and `title` roots as specified.\n   * ```\n   *\n   * To set the data with a preserved undo stack and add the change to the undo stack, set `{ isUndoable: true }` as a `batchType` option.\n   *\n   * ```ts\n   * dataController.set( '<p>Foo</p>', { batchType: { isUndoable: true } } );\n   * ```\n   *\n   * @fires set\n   * @param data Input data as a string or an object containing the `rootName` - `data`\n   * pairs to set data on multiple roots at once.\n   * @param options Options for setting data.\n   * @param options.batchType The batch type that will be used to create a batch for the changes applied by this method.\n   * By default, the batch will be set as {@link module:engine/model/batch~Batch#isUndoable not undoable} and the undo stack will be\n   * cleared after the new data is applied (all undo steps will be removed). If the batch type `isUndoable` flag is be set to `true`,\n   * the undo stack will be preserved instead and not cleared when new data is applied.\n   */\n  set(data, options = {}) {\n    let newData = {};\n    if (typeof data === \"string\") {\n      newData.main = data;\n    } else {\n      newData = data;\n    }\n    if (!this._checkIfRootsExists(Object.keys(newData))) {\n      throw new CKEditorError(\"datacontroller-set-non-existent-root\", this);\n    }\n    this.model.enqueueChange(options.batchType || {}, (writer) => {\n      writer.setSelection(null);\n      writer.removeSelectionAttribute(this.model.document.selection.getAttributeKeys());\n      for (const rootName of Object.keys(newData)) {\n        const modelRoot = this.model.document.getRoot(rootName);\n        writer.remove(writer.createRangeIn(modelRoot));\n        writer.insert(this.parse(newData[rootName], modelRoot), modelRoot, 0);\n      }\n    });\n  }\n  /**\n   * Returns the data parsed by the {@link #processor data processor} and then converted by upcast converters\n   * attached to the {@link #upcastDispatcher}.\n   *\n   * @see #set\n   * @param data Data to parse.\n   * @param context Base context in which the view will be converted to the model.\n   * See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n   * @returns Parsed data.\n   */\n  parse(data, context = \"$root\") {\n    const viewDocumentFragment = this.processor.toView(data);\n    return this.toModel(viewDocumentFragment, context);\n  }\n  /**\n   * Returns the result of the given {@link module:engine/view/element~Element view element} or\n   * {@link module:engine/view/documentfragment~DocumentFragment view document fragment} converted by the\n   * {@link #upcastDispatcher view-to-model converters}, wrapped by {@link module:engine/model/documentfragment~DocumentFragment}.\n   *\n   * When marker elements were converted during the conversion process, it will be set as a document fragment's\n   * {@link module:engine/model/documentfragment~DocumentFragment#markers static markers map}.\n   *\n   * @fires toModel\n   * @param viewElementOrFragment The element or document fragment whose content will be converted.\n   * @param context Base context in which the view will be converted to the model.\n   * See: {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher#convert}.\n   * @returns Output document fragment.\n   */\n  toModel(viewElementOrFragment, context = \"$root\") {\n    return this.model.change((writer) => {\n      return this.upcastDispatcher.convert(viewElementOrFragment, writer, context);\n    });\n  }\n  /**\n   * Adds the style processor normalization rules.\n   *\n   * You can implement your own rules as well as use one of the available processor rules:\n   *\n   * * background: {@link module:engine/view/styles/background~addBackgroundRules}\n   * * border: {@link module:engine/view/styles/border~addBorderRules}\n   * * margin: {@link module:engine/view/styles/margin~addMarginRules}\n   * * padding: {@link module:engine/view/styles/padding~addPaddingRules}\n   */\n  addStyleProcessorRules(callback) {\n    callback(this.stylesProcessor);\n  }\n  /**\n   * Registers a {@link module:engine/view/matcher~MatcherPattern} on an {@link #htmlProcessor htmlProcessor}\n   * and a {@link #processor processor} for view elements whose content should be treated as raw data\n   * and not processed during the conversion from DOM to view elements.\n   *\n   * The raw data can be later accessed by the {@link module:engine/view/element~Element#getCustomProperty view element custom property}\n   * `\"$rawContent\"`.\n   *\n   * @param pattern Pattern matching all view elements whose content should be treated as a raw data.\n   */\n  registerRawContentMatcher(pattern) {\n    if (this.processor && this.processor !== this.htmlProcessor) {\n      this.processor.registerRawContentMatcher(pattern);\n    }\n    this.htmlProcessor.registerRawContentMatcher(pattern);\n  }\n  /**\n   * Removes all event listeners set by the DataController.\n   */\n  destroy() {\n    this.stopListening();\n  }\n  /**\n   * Checks whether all provided root names are actually existing editor roots.\n   *\n   * @param rootNames Root names to check.\n   * @returns Whether all provided root names are existing editor roots.\n   */\n  _checkIfRootsExists(rootNames) {\n    for (const rootName of rootNames) {\n      if (!this.model.document.getRoot(rootName)) {\n        return false;\n      }\n    }\n    return true;\n  }\n};\nfunction _getMarkersRelativeToElement(element) {\n  const result = [];\n  const doc = element.root.document;\n  if (!doc) {\n    return /* @__PURE__ */ new Map();\n  }\n  const elementRange = Range2._createIn(element);\n  for (const marker of doc.model.markers) {\n    const markerRange = marker.getRange();\n    const isMarkerCollapsed = markerRange.isCollapsed;\n    const isMarkerAtElementBoundary = markerRange.start.isEqual(elementRange.start) || markerRange.end.isEqual(elementRange.end);\n    if (isMarkerCollapsed && isMarkerAtElementBoundary) {\n      result.push([marker.name, markerRange]);\n    } else {\n      const updatedMarkerRange = elementRange.getIntersection(markerRange);\n      if (updatedMarkerRange) {\n        result.push([marker.name, updatedMarkerRange]);\n      }\n    }\n  }\n  result.sort(([n1, r1], [n2, r2]) => {\n    if (r1.end.compareWith(r2.start) !== \"after\") {\n      return 1;\n    } else if (r1.start.compareWith(r2.end) !== \"before\") {\n      return -1;\n    } else {\n      switch (r1.start.compareWith(r2.start)) {\n        case \"before\":\n          return 1;\n        case \"after\":\n          return -1;\n        default:\n          switch (r1.end.compareWith(r2.end)) {\n            case \"before\":\n              return 1;\n            case \"after\":\n              return -1;\n            default:\n              return n2.localeCompare(n1);\n          }\n      }\n    }\n  });\n  return new Map(result);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/conversion/conversion.js\nvar Conversion = class {\n  /**\n   * Creates a new conversion instance.\n   */\n  constructor(downcastDispatchers, upcastDispatchers) {\n    this._helpers = /* @__PURE__ */ new Map();\n    this._downcast = toArray(downcastDispatchers);\n    this._createConversionHelpers({ name: \"downcast\", dispatchers: this._downcast, isDowncast: true });\n    this._upcast = toArray(upcastDispatchers);\n    this._createConversionHelpers({ name: \"upcast\", dispatchers: this._upcast, isDowncast: false });\n  }\n  /**\n   * Define an alias for registered dispatcher.\n   *\n   * ```ts\n   * const conversion = new Conversion(\n   * \t[ dataDowncastDispatcher, editingDowncastDispatcher ],\n   * \tupcastDispatcher\n   * );\n   *\n   * conversion.addAlias( 'dataDowncast', dataDowncastDispatcher );\n   * ```\n   *\n   * @param alias An alias of a dispatcher.\n   * @param dispatcher Dispatcher which should have an alias.\n   */\n  addAlias(alias, dispatcher) {\n    const isDowncast = this._downcast.includes(dispatcher);\n    const isUpcast = this._upcast.includes(dispatcher);\n    if (!isUpcast && !isDowncast) {\n      throw new CKEditorError(\"conversion-add-alias-dispatcher-not-registered\", this);\n    }\n    this._createConversionHelpers({ name: alias, dispatchers: [dispatcher], isDowncast });\n  }\n  /**\n   * Provides a chainable API to assign converters to a conversion dispatchers group.\n   *\n   * If the given group name has not been registered, the\n   * {@link module:utils/ckeditorerror~CKEditorError `conversion-for-unknown-group` error} is thrown.\n   *\n   * You can use conversion helpers available directly in the `for()` chain or your custom ones via\n   * the {@link module:engine/conversion/conversionhelpers~ConversionHelpers#add `add()`} method.\n   *\n   * # Using built-in conversion helpers\n   *\n   * The `for()` chain comes with a set of conversion helpers which you can use like this:\n   *\n   * ```ts\n   * editor.conversion.for( 'downcast' )\n   * \t.elementToElement( config1 )        // Adds an element-to-element downcast converter.\n   * \t.attributeToElement( config2 );     // Adds an attribute-to-element downcast converter.\n   *\n   * editor.conversion.for( 'upcast' )\n   * \t.elementToAttribute( config3 );     // Adds an element-to-attribute upcast converter.\n   * ```\n   *\n   * Refer to the documentation of built-in conversion helpers to learn about their configuration options.\n   *\n   * * downcast (model-to-view) conversion helpers:\n   *\n   *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#elementToElement `elementToElement()`},\n   *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement `attributeToElement()`},\n   *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToAttribute `attributeToAttribute()`}.\n   *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToElement `markerToElement()`}.\n   *\t* {@link module:engine/conversion/downcasthelpers~DowncastHelpers#markerToHighlight `markerToHighlight()`}.\n   *\n   * * upcast (view-to-model) conversion helpers:\n   *\n   *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToElement `elementToElement()`},\n   *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToAttribute `elementToAttribute()`},\n   *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#attributeToAttribute `attributeToAttribute()`}.\n   *\t* {@link module:engine/conversion/upcasthelpers~UpcastHelpers#elementToMarker `elementToMarker()`}.\n   *\n   * # Using custom conversion helpers\n   *\n   * If you need to implement an atypical converter, you can do so by calling:\n   *\n   * ```ts\n   * editor.conversion.for( direction ).add( customHelper );\n   * ```\n   *\n   * The `.add()` method takes exactly one parameter, which is a function. This function should accept one parameter that\n   * is a dispatcher instance. The function should add an actual converter to the passed dispatcher instance.\n   *\n   * Example:\n   *\n   * ```ts\n   * editor.conversion.for( 'upcast' ).add( dispatcher => {\n   * \tdispatcher.on( 'element:a',  ( evt, data, conversionApi ) => {\n   * \t\t// Do something with a view <a> element.\n   * \t} );\n   * } );\n   * ```\n   *\n   * Refer to the documentation of {@link module:engine/conversion/upcastdispatcher~UpcastDispatcher}\n   * and {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} to learn how to write\n   * custom converters.\n   *\n   * @param groupName The name of dispatchers group to add the converters to.\n   */\n  for(groupName) {\n    if (!this._helpers.has(groupName)) {\n      throw new CKEditorError(\"conversion-for-unknown-group\", this);\n    }\n    return this._helpers.get(groupName);\n  }\n  /**\n   * Sets up converters between the model and the view that convert a model element to a view element (and vice versa).\n   * For example, the model `<paragraph>Foo</paragraph>` is turned into `<p>Foo</p>` in the view.\n   *\n   * ```ts\n   * // A simple conversion from the `paragraph` model element to the `<p>` view element (and vice versa).\n   * editor.conversion.elementToElement( { model: 'paragraph', view: 'p' } );\n   *\n   * // Override other converters by specifying a converter definition with a higher priority.\n   * editor.conversion.elementToElement( { model: 'paragraph', view: 'div', converterPriority: 'high' } );\n   *\n   * // View specified as an object instead of a string.\n   * editor.conversion.elementToElement( {\n   * \tmodel: 'fancyParagraph',\n   * \tview: {\n   * \t\tname: 'p',\n   * \t\tclasses: 'fancy'\n   * \t}\n   * } );\n   *\n   * // Use `upcastAlso` to define other view elements that should also be converted to a `paragraph` element.\n   * editor.conversion.elementToElement( {\n   * \tmodel: 'paragraph',\n   * \tview: 'p',\n   * \tupcastAlso: [\n   * \t\t'div',\n   * \t\t{\n   * \t\t\t// Any element with the `display: block` style.\n   * \t\t\tstyles: {\n   * \t\t\t\tdisplay: 'block'\n   * \t\t\t}\n   * \t\t}\n   * \t]\n   * } );\n   *\n   * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n   * editor.conversion.elementToElement( {\n   * \tmodel: 'heading',\n   * \tview: 'h2',\n   * \t// Convert \"heading-like\" paragraphs to headings.\n   * \tupcastAlso: viewElement => {\n   * \t\tconst fontSize = viewElement.getStyle( 'font-size' );\n   *\n   * \t\tif ( !fontSize ) {\n   * \t\t\treturn null;\n   * \t\t}\n   *\n   * \t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n   *\n   * \t\tif ( !match ) {\n   * \t\t\treturn null;\n   * \t\t}\n   *\n   * \t\tconst size = Number( match[ 1 ] );\n   *\n   * \t\tif ( size > 26 ) {\n   * \t\t\t// Returned value can be an object with the matched properties.\n   * \t\t\t// These properties will be \"consumed\" during the conversion.\n   * \t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n   *\n   * \t\t\treturn { name: true, styles: [ 'font-size' ] };\n   * \t\t}\n   *\n   * \t\treturn null;\n   * \t}\n   * } );\n   * ```\n   *\n   * `definition.model` is a `String` with a model element name to convert from or to.\n   *\n   * @param definition The converter definition.\n   */\n  elementToElement(definition) {\n    this.for(\"downcast\").elementToElement(definition);\n    for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n      this.for(\"upcast\").elementToElement({\n        model,\n        view,\n        converterPriority: definition.converterPriority\n      });\n    }\n  }\n  /**\n   * Sets up converters between the model and the view that convert a model attribute to a view element (and vice versa).\n   * For example, a model text node with `\"Foo\"` as data and the `bold` attribute will be turned to `<strong>Foo</strong>` in the view.\n   *\n   * ```ts\n   * // A simple conversion from the `bold=true` attribute to the `<strong>` view element (and vice versa).\n   * editor.conversion.attributeToElement( { model: 'bold', view: 'strong' } );\n   *\n   * // Override other converters by specifying a converter definition with a higher priority.\n   * editor.conversion.attributeToElement( { model: 'bold', view: 'b', converterPriority: 'high' } );\n   *\n   * // View specified as an object instead of a string.\n   * editor.conversion.attributeToElement( {\n   * \tmodel: 'bold',\n   * \tview: {\n   * \t\tname: 'span',\n   * \t\tclasses: 'bold'\n   * \t}\n   * } );\n   *\n   * // Use `config.model.name` to define the conversion only from a given node type, `$text` in this case.\n   * // The same attribute on different elements may then be handled by a different converter.\n   * editor.conversion.attributeToElement( {\n   * \tmodel: {\n   * \t\tkey: 'textDecoration',\n   * \t\tvalues: [ 'underline', 'lineThrough' ],\n   * \t\tname: '$text'\n   * \t},\n   * \tview: {\n   * \t\tunderline: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'text-decoration': 'underline'\n   * \t\t\t}\n   * \t\t},\n   * \t\tlineThrough: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'text-decoration': 'line-through'\n   * \t\t\t}\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * // Use `upcastAlso` to define other view elements that should also be converted to the `bold` attribute.\n   * editor.conversion.attributeToElement( {\n   * \tmodel: 'bold',\n   * \tview: 'strong',\n   * \tupcastAlso: [\n   * \t\t'b',\n   * \t\t{\n   * \t\t\tname: 'span',\n   * \t\t\tclasses: 'bold'\n   * \t\t},\n   * \t\t{\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'font-weight': 'bold'\n   * \t\t\t}\n   * \t\t},\n   * \t\tviewElement => {\n   * \t\t\tconst fontWeight = viewElement.getStyle( 'font-weight' );\n   *\n   * \t\t\tif ( viewElement.is( 'element', 'span' ) && fontWeight && /\\d+/.test() && Number( fontWeight ) > 500 ) {\n   * \t\t\t\t// Returned value can be an object with the matched properties.\n   * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n   * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n   *\n   * \t\t\t\treturn {\n   * \t\t\t\t\tname: true,\n   * \t\t\t\t\tstyles: [ 'font-weight' ]\n   * \t\t\t\t};\n   * \t\t\t}\n   * \t\t}\n   * \t]\n   * } );\n   *\n   * // Conversion from and to a model attribute key whose value is an enum (`fontSize=big|small`).\n   * // `upcastAlso` set as callback enables a conversion of a wide range of different view elements.\n   * editor.conversion.attributeToElement( {\n   * \tmodel: {\n   * \t\tkey: 'fontSize',\n   * \t\tvalues: [ 'big', 'small' ]\n   * \t},\n   * \tview: {\n   * \t\tbig: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'font-size': '1.2em'\n   * \t\t\t}\n   * \t\t},\n   * \t\tsmall: {\n   * \t\t\tname: 'span',\n   * \t\t\tstyles: {\n   * \t\t\t\t'font-size': '0.8em'\n   * \t\t\t}\n   * \t\t}\n   * \t},\n   * \tupcastAlso: {\n   * \t\tbig: viewElement => {\n   * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n   *\n   * \t\t\tif ( !fontSize ) {\n   * \t\t\t\treturn null;\n   * \t\t\t}\n   *\n   * \t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n   *\n   * \t\t\tif ( !match ) {\n   * \t\t\t\treturn null;\n   * \t\t\t}\n   *\n   * \t\t\tconst size = Number( match[ 1 ] );\n   *\n   * \t\t\tif ( viewElement.is( 'element', 'span' ) && size > 10 ) {\n   * \t\t\t\t// Returned value can be an object with the matched properties.\n   * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n   * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n   *\n   * \t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n   * \t\t\t}\n   *\n   * \t\t\treturn null;\n   * \t\t},\n   * \t\tsmall: viewElement => {\n   * \t\t\tconst fontSize = viewElement.getStyle( 'font-size' );\n   *\n   * \t\t\tif ( !fontSize ) {\n   * \t\t\t\treturn null;\n   * \t\t\t}\n   *\n   * \t\t\tconst match = fontSize.match( /(\\d+)\\s*px/ );\n   *\n   * \t\t\tif ( !match ) {\n   * \t\t\t\treturn null;\n   * \t\t\t}\n   *\n   * \t\t\tconst size = Number( match[ 1 ] );\n   *\n   * \t\t\tif ( viewElement.is( 'element', 'span' ) && size < 10 ) {\n   * \t\t\t\t// Returned value can be an object with the matched properties.\n   * \t\t\t\t// These properties will be \"consumed\" during the conversion.\n   * \t\t\t\t// See `engine.view.Matcher~MatcherPattern` and `engine.view.Matcher#match` for more details.\n   *\n   * \t\t\t\treturn { name: true, styles: [ 'font-size' ] };\n   * \t\t\t}\n   *\n   * \t\t\treturn null;\n   * \t\t}\n   * \t}\n   * } );\n   * ```\n   *\n   * The `definition.model` parameter specifies which model attribute should be converted from or to. It can be a `{ key, value }` object\n   * describing the attribute key and value to convert or a `String` specifying just the attribute key (in such a case\n   * `value` is set to `true`).\n   *\n   * @param definition The converter definition.\n   */\n  attributeToElement(definition) {\n    this.for(\"downcast\").attributeToElement(definition);\n    for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n      this.for(\"upcast\").elementToAttribute({\n        view,\n        model,\n        converterPriority: definition.converterPriority\n      });\n    }\n  }\n  /**\n   * Sets up converters between the model and the view that convert a model attribute to a view attribute (and vice versa). For example,\n   * `<imageBlock src='foo.jpg'></imageBlock>` is converted to `<img src='foo.jpg'></img>` (the same attribute key and value).\n   * This type of converters is intended to be used with {@link module:engine/model/element~Element model element} nodes.\n   * To convert the text attributes,\n   * the {@link module:engine/conversion/conversion~Conversion#attributeToElement `attributeToElement converter`}should be set up.\n   *\n   * ```ts\n   * // A simple conversion from the `source` model attribute to the `src` view attribute (and vice versa).\n   * editor.conversion.attributeToAttribute( { model: 'source', view: 'src' } );\n   *\n   * // Attribute values are strictly specified.\n   * editor.conversion.attributeToAttribute( {\n   * \tmodel: {\n   * \t\tname: 'imageInline',\n   * \t\tkey: 'aside',\n   * \t\tvalues: [ 'aside' ]\n   * \t},\n   * \tview: {\n   * \t\taside: {\n   * \t\t\tname: 'img',\n   * \t\t\tkey: 'class',\n   * \t\t\tvalue: [ 'aside', 'half-size' ]\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * // Set the style attribute.\n   * editor.conversion.attributeToAttribute( {\n   * \tmodel: {\n   * \t\tname: 'imageInline',\n   * \t\tkey: 'aside',\n   * \t\tvalues: [ 'aside' ]\n   * \t},\n   * \tview: {\n   * \t\taside: {\n   * \t\t\tname: 'img',\n   * \t\t\tkey: 'style',\n   * \t\t\tvalue: {\n   * \t\t\t\tfloat: 'right',\n   * \t\t\t\twidth: '50%',\n   * \t\t\t\tmargin: '5px'\n   * \t\t\t}\n   * \t\t}\n   * \t}\n   * } );\n   *\n   * // Conversion from and to a model attribute key whose value is an enum (`align=right|center`).\n   * // Use `upcastAlso` to define other view elements that should also be converted to the `align=right` attribute.\n   * editor.conversion.attributeToAttribute( {\n   * \tmodel: {\n   * \t\tkey: 'align',\n   * \t\tvalues: [ 'right', 'center' ]\n   * \t},\n   * \tview: {\n   * \t\tright: {\n   * \t\t\tkey: 'class',\n   * \t\t\tvalue: 'align-right'\n   * \t\t},\n   * \t\tcenter: {\n   * \t\t\tkey: 'class',\n   * \t\t\tvalue: 'align-center'\n   * \t\t}\n   * \t},\n   * \tupcastAlso: {\n   * \t\tright: {\n   * \t\t\tstyles: {\n   * \t\t\t\t'text-align': 'right'\n   * \t\t\t}\n   * \t\t},\n   * \t\tcenter: {\n   * \t\t\tstyles: {\n   * \t\t\t\t'text-align': 'center'\n   * \t\t\t}\n   * \t\t}\n   * \t}\n   * } );\n   * ```\n   *\n   * The `definition.model` parameter specifies which model attribute should be converted from and to.\n   * It can be a `{ key, [ values ], [ name ] }` object or a `String`, which will be treated like `{ key: definition.model }`.\n   * The `key` property is the model attribute key to convert from and to.\n   * The `values` are the possible model attribute values. If the `values` parameter is not set, the model attribute value\n   * will be the same as the view attribute value.\n   * If `name` is set, the conversion will be set up only for model elements with the given name.\n   *\n   * The `definition.view` parameter specifies which view attribute should be converted from and to.\n   * It can be a `{ key, value, [ name ] }` object or a `String`, which will be treated like `{ key: definition.view }`.\n   * The `key` property is the view attribute key to convert from and to.\n   * The `value` is the view attribute value to convert from and to. If `definition.value` is not set, the view attribute value will be\n   * the same as the model attribute value.\n   * If `key` is `'class'`, `value` can be a `String` or an array of `String`s.\n   * If `key` is `'style'`, `value` is an object with key-value pairs.\n   * In other cases, `value` is a `String`.\n   * If `name` is set, the conversion will be set up only for model elements with the given name.\n   * If `definition.model.values` is set, `definition.view` is an object that assigns values from `definition.model.values`\n   * to `{ key, value, [ name ] }` objects.\n   *\n   * `definition.upcastAlso` specifies which other matching view elements should also be upcast to the given model configuration.\n   * If `definition.model.values` is set, `definition.upcastAlso` should be an object assigning values from `definition.model.values`\n   * to {@link module:engine/view/matcher~MatcherPattern}s or arrays of {@link module:engine/view/matcher~MatcherPattern}s.\n   *\n   * **Note:** `definition.model` and `definition.view` form should be mirrored, so the same types of parameters should\n   * be given in both parameters.\n   *\n   * @param definition The converter definition.\n   * @param definition.model The model attribute to convert from and to.\n   * @param definition.view The view attribute to convert from and to.\n   * @param definition.upcastAlso Any view element matching `definition.upcastAlso` will also be converted to the given model attribute.\n   * `definition.upcastAlso` is used only if `config.model.values` is specified.\n   */\n  attributeToAttribute(definition) {\n    this.for(\"downcast\").attributeToAttribute(definition);\n    for (const { model, view } of _getAllUpcastDefinitions(definition)) {\n      this.for(\"upcast\").attributeToAttribute({\n        view,\n        model\n      });\n    }\n  }\n  /**\n   * Creates and caches conversion helpers for given dispatchers group.\n   *\n   * @param options.name Group name.\n   */\n  _createConversionHelpers({ name, dispatchers, isDowncast }) {\n    if (this._helpers.has(name)) {\n      throw new CKEditorError(\"conversion-group-exists\", this);\n    }\n    const helpers = isDowncast ? new DowncastHelpers(dispatchers) : new UpcastHelpers(dispatchers);\n    this._helpers.set(name, helpers);\n  }\n};\nfunction* _getAllUpcastDefinitions(definition) {\n  if (definition.model.values) {\n    for (const value of definition.model.values) {\n      const model = { key: definition.model.key, value };\n      const view = definition.view[value];\n      const upcastAlso = definition.upcastAlso ? definition.upcastAlso[value] : void 0;\n      yield* _getUpcastDefinition(model, view, upcastAlso);\n    }\n  } else {\n    yield* _getUpcastDefinition(definition.model, definition.view, definition.upcastAlso);\n  }\n}\nfunction* _getUpcastDefinition(model, view, upcastAlso) {\n  yield { model, view };\n  if (upcastAlso) {\n    for (const upcastAlsoItem of toArray(upcastAlso)) {\n      yield { model, view: upcastAlsoItem };\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/operation.js\nvar Operation = class {\n  /**\n   * Base operation constructor.\n   *\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(baseVersion) {\n    this.baseVersion = baseVersion;\n    this.isDocumentOperation = this.baseVersion !== null;\n    this.batch = null;\n  }\n  /**\n   * Checks whether the operation's parameters are correct and the operation can be correctly executed. Throws\n   * an error if operation is not valid.\n   *\n   * @internal\n   */\n  _validate() {\n  }\n  /**\n   * Custom toJSON method to solve child-parent circular dependencies.\n   *\n   * @returns Clone of this object with the operation property replaced with string.\n   */\n  toJSON() {\n    const json = Object.assign({}, this);\n    json.__className = this.constructor.className;\n    delete json.batch;\n    delete json.isDocumentOperation;\n    return json;\n  }\n  /**\n   * Name of the operation class used for serialization.\n   */\n  static get className() {\n    return \"Operation\";\n  }\n  /**\n   * Creates `Operation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param doc Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return new this(json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/utils.js\nfunction _insert(position, nodes) {\n  const normalizedNodes = _normalizeNodes(nodes);\n  const offset = normalizedNodes.reduce((sum, node) => sum + node.offsetSize, 0);\n  const parent2 = position.parent;\n  _splitNodeAtPosition(position);\n  const index = position.index;\n  parent2._insertChild(index, normalizedNodes);\n  _mergeNodesAtIndex(parent2, index + normalizedNodes.length);\n  _mergeNodesAtIndex(parent2, index);\n  return new Range2(position, position.getShiftedBy(offset));\n}\nfunction _remove(range) {\n  if (!range.isFlat) {\n    throw new CKEditorError(\"operation-utils-remove-range-not-flat\", this);\n  }\n  const parent2 = range.start.parent;\n  _splitNodeAtPosition(range.start);\n  _splitNodeAtPosition(range.end);\n  const removed = parent2._removeChildren(range.start.index, range.end.index - range.start.index);\n  _mergeNodesAtIndex(parent2, range.start.index);\n  return removed;\n}\nfunction _move(sourceRange, targetPosition) {\n  if (!sourceRange.isFlat) {\n    throw new CKEditorError(\"operation-utils-move-range-not-flat\", this);\n  }\n  const nodes = _remove(sourceRange);\n  targetPosition = targetPosition._getTransformedByDeletion(sourceRange.start, sourceRange.end.offset - sourceRange.start.offset);\n  return _insert(targetPosition, nodes);\n}\nfunction _setAttribute(range, key, value) {\n  _splitNodeAtPosition(range.start);\n  _splitNodeAtPosition(range.end);\n  for (const item of range.getItems({ shallow: true })) {\n    const node = item.is(\"$textProxy\") ? item.textNode : item;\n    if (value !== null) {\n      node._setAttribute(key, value);\n    } else {\n      node._removeAttribute(key);\n    }\n    _mergeNodesAtIndex(node.parent, node.index);\n  }\n  _mergeNodesAtIndex(range.end.parent, range.end.index);\n}\nfunction _normalizeNodes(nodes) {\n  const normalized = [];\n  function convert(nodes2) {\n    if (typeof nodes2 == \"string\") {\n      normalized.push(new Text2(nodes2));\n    } else if (nodes2 instanceof TextProxy2) {\n      normalized.push(new Text2(nodes2.data, nodes2.getAttributes()));\n    } else if (nodes2 instanceof Node3) {\n      normalized.push(nodes2);\n    } else if (isIterable(nodes2)) {\n      for (const node of nodes2) {\n        convert(node);\n      }\n    } else {\n      const unreachable = nodes2;\n    }\n  }\n  convert(nodes);\n  for (let i = 1; i < normalized.length; i++) {\n    const node = normalized[i];\n    const prev = normalized[i - 1];\n    if (node instanceof Text2 && prev instanceof Text2 && _haveSameAttributes(node, prev)) {\n      normalized.splice(i - 1, 2, new Text2(prev.data + node.data, prev.getAttributes()));\n      i--;\n    }\n  }\n  return normalized;\n}\nfunction _mergeNodesAtIndex(element, index) {\n  const nodeBefore = element.getChild(index - 1);\n  const nodeAfter = element.getChild(index);\n  if (nodeBefore && nodeAfter && nodeBefore.is(\"$text\") && nodeAfter.is(\"$text\") && _haveSameAttributes(nodeBefore, nodeAfter)) {\n    const mergedNode = new Text2(nodeBefore.data + nodeAfter.data, nodeBefore.getAttributes());\n    element._removeChildren(index - 1, 2);\n    element._insertChild(index - 1, mergedNode);\n  }\n}\nfunction _splitNodeAtPosition(position) {\n  const textNode = position.textNode;\n  const element = position.parent;\n  if (textNode) {\n    const offsetDiff = position.offset - textNode.startOffset;\n    const index = textNode.index;\n    element._removeChildren(index, 1);\n    const firstPart = new Text2(textNode.data.substr(0, offsetDiff), textNode.getAttributes());\n    const secondPart = new Text2(textNode.data.substr(offsetDiff), textNode.getAttributes());\n    element._insertChild(index, [firstPart, secondPart]);\n  }\n}\nfunction _haveSameAttributes(nodeA, nodeB) {\n  const iteratorA = nodeA.getAttributes();\n  const iteratorB = nodeB.getAttributes();\n  for (const attr of iteratorA) {\n    if (attr[1] !== nodeB.getAttribute(attr[0])) {\n      return false;\n    }\n    iteratorB.next();\n  }\n  return iteratorB.next().done;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/moveoperation.js\nvar MoveOperation = class _MoveOperation extends Operation {\n  /**\n   * Creates a move operation.\n   *\n   * @param sourcePosition Position before the first {@link module:engine/model/item~Item model item} to move.\n   * @param howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n   * `sourcePosition` with offset shifted by `howMany`.\n   * @param targetPosition Position at which moved nodes will be inserted.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(sourcePosition, howMany, targetPosition, baseVersion) {\n    super(baseVersion);\n    this.sourcePosition = sourcePosition.clone();\n    this.sourcePosition.stickiness = \"toNext\";\n    this.howMany = howMany;\n    this.targetPosition = targetPosition.clone();\n    this.targetPosition.stickiness = \"toNone\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    if (this.targetPosition.root.rootName == \"$graveyard\") {\n      return \"remove\";\n    } else if (this.sourcePosition.root.rootName == \"$graveyard\") {\n      return \"reinsert\";\n    }\n    return \"move\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return [\n      Range2._createFromPositionAndShift(this.sourcePosition, this.howMany),\n      Range2._createFromPositionAndShift(this.targetPosition, 0)\n    ];\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    return new _MoveOperation(this.sourcePosition, this.howMany, this.targetPosition, this.baseVersion);\n  }\n  /**\n   * Returns the start position of the moved range after it got moved. This may be different than\n   * {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition} in some cases, i.e. when a range is moved\n   * inside the same parent but {@link module:engine/model/operation/moveoperation~MoveOperation#targetPosition targetPosition}\n   * is after {@link module:engine/model/operation/moveoperation~MoveOperation#sourcePosition sourcePosition}.\n   *\n   * ```\n   *  vv              vv\n   * abcdefg ===> adefbcg\n   *      ^          ^\n   *      targetPos  movedRangeStart\n   *      offset 6   offset 4\n   *```\n   */\n  getMovedRangeStart() {\n    return this.targetPosition._getTransformedByDeletion(this.sourcePosition, this.howMany);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    const newTargetPosition = this.sourcePosition._getTransformedByInsertion(this.targetPosition, this.howMany);\n    return new _MoveOperation(this.getMovedRangeStart(), this.howMany, newTargetPosition, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    const sourceElement = this.sourcePosition.parent;\n    const targetElement = this.targetPosition.parent;\n    const sourceOffset = this.sourcePosition.offset;\n    const targetOffset = this.targetPosition.offset;\n    if (sourceOffset + this.howMany > sourceElement.maxOffset) {\n      throw new CKEditorError(\"move-operation-nodes-do-not-exist\", this);\n    } else if (sourceElement === targetElement && sourceOffset < targetOffset && targetOffset < sourceOffset + this.howMany) {\n      throw new CKEditorError(\"move-operation-range-into-itself\", this);\n    } else if (this.sourcePosition.root == this.targetPosition.root) {\n      if (compareArrays(this.sourcePosition.getParentPath(), this.targetPosition.getParentPath()) == \"prefix\") {\n        const i = this.sourcePosition.path.length - 1;\n        if (this.targetPosition.path[i] >= sourceOffset && this.targetPosition.path[i] < sourceOffset + this.howMany) {\n          throw new CKEditorError(\"move-operation-node-into-itself\", this);\n        }\n      }\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    _move(Range2._createFromPositionAndShift(this.sourcePosition, this.howMany), this.targetPosition);\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.sourcePosition = this.sourcePosition.toJSON();\n    json.targetPosition = this.targetPosition.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"MoveOperation\";\n  }\n  /**\n   * Creates `MoveOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    const sourcePosition = Position2.fromJSON(json.sourcePosition, document2);\n    const targetPosition = Position2.fromJSON(json.targetPosition, document2);\n    return new this(sourcePosition, json.howMany, targetPosition, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/insertoperation.js\nvar InsertOperation = class _InsertOperation extends Operation {\n  /**\n   * Creates an insert operation.\n   *\n   * @param position Position of insertion.\n   * @param nodes The list of nodes to be inserted.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(position, nodes, baseVersion) {\n    super(baseVersion);\n    this.position = position.clone();\n    this.position.stickiness = \"toNone\";\n    this.nodes = new NodeList(_normalizeNodes(nodes));\n    this.shouldReceiveAttributes = false;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"insert\";\n  }\n  /**\n   * Total offset size of inserted nodes.\n   */\n  get howMany() {\n    return this.nodes.maxOffset;\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return this.position.clone();\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    const nodes = new NodeList([...this.nodes].map((node) => node._clone(true)));\n    const insert = new _InsertOperation(this.position, nodes, this.baseVersion);\n    insert.shouldReceiveAttributes = this.shouldReceiveAttributes;\n    return insert;\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    const graveyard = this.position.root.document.graveyard;\n    const gyPosition = new Position2(graveyard, [0]);\n    return new MoveOperation(this.position, this.nodes.maxOffset, gyPosition, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    const targetElement = this.position.parent;\n    if (!targetElement || targetElement.maxOffset < this.position.offset) {\n      throw new CKEditorError(\"insert-operation-position-invalid\", this);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    const originalNodes = this.nodes;\n    this.nodes = new NodeList([...originalNodes].map((node) => node._clone(true)));\n    _insert(this.position, originalNodes);\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.position = this.position.toJSON();\n    json.nodes = this.nodes.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"InsertOperation\";\n  }\n  /**\n   * Creates `InsertOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    const children = [];\n    for (const child of json.nodes) {\n      if (child.name) {\n        children.push(Element2.fromJSON(child));\n      } else {\n        children.push(Text2.fromJSON(child));\n      }\n    }\n    const insert = new _InsertOperation(Position2.fromJSON(json.position, document2), children, json.baseVersion);\n    insert.shouldReceiveAttributes = json.shouldReceiveAttributes;\n    return insert;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/splitoperation.js\nvar SplitOperation = class _SplitOperation extends Operation {\n  /**\n   * Creates a split operation.\n   *\n   * @param splitPosition Position at which an element should be split.\n   * @param howMany Total offset size of elements that are in the split element after `position`.\n   * @param insertionPosition Position at which the clone of split element (or element from graveyard) will be inserted.\n   * @param graveyardPosition Position in the graveyard root before the element which\n   * should be used as a parent of the nodes after `position`. If it is not set, a copy of the the `position` parent will be used.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(splitPosition, howMany, insertionPosition, graveyardPosition, baseVersion) {\n    super(baseVersion);\n    this.splitPosition = splitPosition.clone();\n    this.splitPosition.stickiness = \"toNext\";\n    this.howMany = howMany;\n    this.insertionPosition = insertionPosition;\n    this.graveyardPosition = graveyardPosition ? graveyardPosition.clone() : null;\n    if (this.graveyardPosition) {\n      this.graveyardPosition.stickiness = \"toNext\";\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"split\";\n  }\n  /**\n   * Position inside the new clone of a split element.\n   *\n   * This is a position where nodes that are after the split position will be moved to.\n   */\n  get moveTargetPosition() {\n    const path = this.insertionPosition.path.slice();\n    path.push(0);\n    return new Position2(this.insertionPosition.root, path);\n  }\n  /**\n   * Artificial range that contains all the nodes from the split element that will be moved to the new element.\n   * The range starts at {@link #splitPosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n   */\n  get movedRange() {\n    const end = this.splitPosition.getShiftedBy(Number.POSITIVE_INFINITY);\n    return new Range2(this.splitPosition, end);\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    const ranges = [\n      Range2._createFromPositionAndShift(this.splitPosition, 0),\n      Range2._createFromPositionAndShift(this.insertionPosition, 0)\n    ];\n    if (this.graveyardPosition) {\n      ranges.push(Range2._createFromPositionAndShift(this.graveyardPosition, 0));\n    }\n    return ranges;\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   *\n   * @returns Clone of this operation.\n   */\n  clone() {\n    return new _SplitOperation(this.splitPosition, this.howMany, this.insertionPosition, this.graveyardPosition, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    const graveyard = this.splitPosition.root.document.graveyard;\n    const graveyardPosition = new Position2(graveyard, [0]);\n    return new MergeOperation(this.moveTargetPosition, this.howMany, this.splitPosition, graveyardPosition, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    const element = this.splitPosition.parent;\n    const offset = this.splitPosition.offset;\n    if (!element || element.maxOffset < offset) {\n      throw new CKEditorError(\"split-operation-position-invalid\", this);\n    } else if (!element.parent) {\n      throw new CKEditorError(\"split-operation-split-in-root\", this);\n    } else if (this.howMany != element.maxOffset - this.splitPosition.offset) {\n      throw new CKEditorError(\"split-operation-how-many-invalid\", this);\n    } else if (this.graveyardPosition && !this.graveyardPosition.nodeAfter) {\n      throw new CKEditorError(\"split-operation-graveyard-position-invalid\", this);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    const splitElement = this.splitPosition.parent;\n    if (this.graveyardPosition) {\n      _move(Range2._createFromPositionAndShift(this.graveyardPosition, 1), this.insertionPosition);\n    } else {\n      const newElement = splitElement._clone();\n      _insert(this.insertionPosition, newElement);\n    }\n    const sourceRange = new Range2(Position2._createAt(splitElement, this.splitPosition.offset), Position2._createAt(splitElement, splitElement.maxOffset));\n    _move(sourceRange, this.moveTargetPosition);\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.splitPosition = this.splitPosition.toJSON();\n    json.insertionPosition = this.insertionPosition.toJSON();\n    if (this.graveyardPosition) {\n      json.graveyardPosition = this.graveyardPosition.toJSON();\n    }\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"SplitOperation\";\n  }\n  /**\n   * Helper function that returns a default insertion position basing on given `splitPosition`. The default insertion\n   * position is after the split element.\n   */\n  static getInsertionPosition(splitPosition) {\n    const path = splitPosition.path.slice(0, -1);\n    path[path.length - 1]++;\n    return new Position2(splitPosition.root, path, \"toPrevious\");\n  }\n  /**\n   * Creates `SplitOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    const splitPosition = Position2.fromJSON(json.splitPosition, document2);\n    const insertionPosition = Position2.fromJSON(json.insertionPosition, document2);\n    const graveyardPosition = json.graveyardPosition ? Position2.fromJSON(json.graveyardPosition, document2) : null;\n    return new this(splitPosition, json.howMany, insertionPosition, graveyardPosition, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/mergeoperation.js\nvar MergeOperation = class _MergeOperation extends Operation {\n  /**\n   * Creates a merge operation.\n   *\n   * @param sourcePosition Position inside the merged element. All nodes from that\n   * element after that position will be moved to {@link #targetPosition}.\n   * @param howMany Summary offset size of nodes which will be moved from the merged element to the new parent.\n   * @param targetPosition Position which the nodes from the merged elements will be moved to.\n   * @param graveyardPosition Position in graveyard to which the merged element will be moved.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(sourcePosition, howMany, targetPosition, graveyardPosition, baseVersion) {\n    super(baseVersion);\n    this.sourcePosition = sourcePosition.clone();\n    this.sourcePosition.stickiness = \"toPrevious\";\n    this.howMany = howMany;\n    this.targetPosition = targetPosition.clone();\n    this.targetPosition.stickiness = \"toNext\";\n    this.graveyardPosition = graveyardPosition.clone();\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"merge\";\n  }\n  /**\n   * Position before the merged element (which will be deleted).\n   */\n  get deletionPosition() {\n    return new Position2(this.sourcePosition.root, this.sourcePosition.path.slice(0, -1));\n  }\n  /**\n   * Artificial range that contains all the nodes from the merged element that will be moved to {@link ~MergeOperation#sourcePosition}.\n   * The range starts at {@link ~MergeOperation#sourcePosition} and ends in the same parent, at `POSITIVE_INFINITY` offset.\n   */\n  get movedRange() {\n    const end = this.sourcePosition.getShiftedBy(Number.POSITIVE_INFINITY);\n    return new Range2(this.sourcePosition, end);\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    const mergedElement = this.sourcePosition.parent;\n    return [\n      Range2._createOn(mergedElement),\n      // These could be positions but `Selectable` type only supports `Iterable<Range>`.\n      Range2._createFromPositionAndShift(this.targetPosition, 0),\n      Range2._createFromPositionAndShift(this.graveyardPosition, 0)\n    ];\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    return new _MergeOperation(this.sourcePosition, this.howMany, this.targetPosition, this.graveyardPosition, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    const targetPosition = this.targetPosition._getTransformedByMergeOperation(this);\n    const path = this.sourcePosition.path.slice(0, -1);\n    const insertionPosition = new Position2(this.sourcePosition.root, path)._getTransformedByMergeOperation(this);\n    return new SplitOperation(targetPosition, this.howMany, insertionPosition, this.graveyardPosition, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    const sourceElement = this.sourcePosition.parent;\n    const targetElement = this.targetPosition.parent;\n    if (!sourceElement.parent) {\n      throw new CKEditorError(\"merge-operation-source-position-invalid\", this);\n    } else if (!targetElement.parent) {\n      throw new CKEditorError(\"merge-operation-target-position-invalid\", this);\n    } else if (this.howMany != sourceElement.maxOffset) {\n      throw new CKEditorError(\"merge-operation-how-many-invalid\", this);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    const mergedElement = this.sourcePosition.parent;\n    const sourceRange = Range2._createIn(mergedElement);\n    _move(sourceRange, this.targetPosition);\n    _move(Range2._createOn(mergedElement), this.graveyardPosition);\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.sourcePosition = json.sourcePosition.toJSON();\n    json.targetPosition = json.targetPosition.toJSON();\n    json.graveyardPosition = json.graveyardPosition.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"MergeOperation\";\n  }\n  /**\n   * Creates `MergeOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    const sourcePosition = Position2.fromJSON(json.sourcePosition, document2);\n    const targetPosition = Position2.fromJSON(json.targetPosition, document2);\n    const graveyardPosition = Position2.fromJSON(json.graveyardPosition, document2);\n    return new this(sourcePosition, json.howMany, targetPosition, graveyardPosition, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/markeroperation.js\nvar MarkerOperation = class _MarkerOperation extends Operation {\n  /**\n   * @param name Marker name.\n   * @param oldRange Marker range before the change.\n   * @param newRange Marker range after the change.\n   * @param markers Marker collection on which change should be executed.\n   * @param affectsData Specifies whether the marker operation affects the data produced by the data pipeline\n   * (is persisted in the editor's data).\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(name, oldRange, newRange, markers, affectsData, baseVersion) {\n    super(baseVersion);\n    this.name = name;\n    this.oldRange = oldRange ? oldRange.clone() : null;\n    this.newRange = newRange ? newRange.clone() : null;\n    this.affectsData = affectsData;\n    this._markers = markers;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"marker\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    const ranges = [];\n    if (this.oldRange) {\n      ranges.push(this.oldRange.clone());\n    }\n    if (this.newRange) {\n      if (this.oldRange) {\n        ranges.push(...this.newRange.getDifference(this.oldRange));\n      } else {\n        ranges.push(this.newRange.clone());\n      }\n    }\n    return ranges;\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    return new _MarkerOperation(this.name, this.oldRange, this.newRange, this._markers, this.affectsData, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    return new _MarkerOperation(this.name, this.newRange, this.oldRange, this._markers, this.affectsData, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    if (this.newRange) {\n      this._markers._set(this.name, this.newRange, true, this.affectsData);\n    } else {\n      this._markers._remove(this.name);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  toJSON() {\n    const json = super.toJSON();\n    if (this.oldRange) {\n      json.oldRange = this.oldRange.toJSON();\n    }\n    if (this.newRange) {\n      json.newRange = this.newRange.toJSON();\n    }\n    delete json._markers;\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"MarkerOperation\";\n  }\n  /**\n   * Creates `MarkerOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return new _MarkerOperation(json.name, json.oldRange ? Range2.fromJSON(json.oldRange, document2) : null, json.newRange ? Range2.fromJSON(json.newRange, document2) : null, document2.model.markers, json.affectsData, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/attributeoperation.js\nvar AttributeOperation = class _AttributeOperation extends Operation {\n  /**\n   * Creates an operation that changes, removes or adds attributes.\n   *\n   * If only `newValue` is set, attribute will be added on a node. Note that all nodes in operation's range must not\n   * have an attribute with the same key as the added attribute.\n   *\n   * If only `oldValue` is set, then attribute with given key will be removed. Note that all nodes in operation's range\n   * must have an attribute with that key added.\n   *\n   * If both `newValue` and `oldValue` are set, then the operation will change the attribute value. Note that all nodes in\n   * operation's ranges must already have an attribute with given key and `oldValue` as value\n   *\n   * @param range Range on which the operation should be applied. Must be a flat range.\n   * @param key Key of an attribute to change or remove.\n   * @param oldValue Old value of the attribute with given key or `null`, if attribute was not set before.\n   * @param newValue New value of the attribute with given key or `null`, if operation should remove attribute.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(range, key, oldValue, newValue, baseVersion) {\n    super(baseVersion);\n    this.range = range.clone();\n    this.key = key;\n    this.oldValue = oldValue === void 0 ? null : oldValue;\n    this.newValue = newValue === void 0 ? null : newValue;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    if (this.oldValue === null) {\n      return \"addAttribute\";\n    } else if (this.newValue === null) {\n      return \"removeAttribute\";\n    } else {\n      return \"changeAttribute\";\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return this.range.clone();\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    return new _AttributeOperation(this.range, this.key, this.oldValue, this.newValue, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    return new _AttributeOperation(this.range, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.range = this.range.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    if (!this.range.isFlat) {\n      throw new CKEditorError(\"attribute-operation-range-not-flat\", this);\n    }\n    for (const item of this.range.getItems({ shallow: true })) {\n      if (this.oldValue !== null && !isEqual_default(item.getAttribute(this.key), this.oldValue)) {\n        throw new CKEditorError(\"attribute-operation-wrong-old-value\", this, { item, key: this.key, value: this.oldValue });\n      }\n      if (this.oldValue === null && this.newValue !== null && item.hasAttribute(this.key)) {\n        throw new CKEditorError(\"attribute-operation-attribute-exists\", this, { node: item, key: this.key });\n      }\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    if (!isEqual_default(this.oldValue, this.newValue)) {\n      _setAttribute(this.range, this.key, this.newValue);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"AttributeOperation\";\n  }\n  /**\n   * Creates `AttributeOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return new _AttributeOperation(Range2.fromJSON(json.range, document2), json.key, json.oldValue, json.newValue, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/nooperation.js\nvar NoOperation = class _NoOperation extends Operation {\n  get type() {\n    return \"noop\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return null;\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   */\n  clone() {\n    return new _NoOperation(this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    return new _NoOperation(this.baseVersion + 1);\n  }\n  /** @internal */\n  _execute() {\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"NoOperation\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/renameoperation.js\nvar RenameOperation = class _RenameOperation extends Operation {\n  /**\n   * Creates an operation that changes element's name.\n   *\n   * @param position Position before an element to change.\n   * @param oldName Current name of the element.\n   * @param newName New name for the element.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(position, oldName, newName, baseVersion) {\n    super(baseVersion);\n    this.position = position;\n    this.position.stickiness = \"toNext\";\n    this.oldName = oldName;\n    this.newName = newName;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"rename\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return this.position.nodeAfter;\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   *\n   * @returns Clone of this operation.\n   */\n  clone() {\n    return new _RenameOperation(this.position.clone(), this.oldName, this.newName, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    return new _RenameOperation(this.position.clone(), this.newName, this.oldName, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    const element = this.position.nodeAfter;\n    if (!(element instanceof Element2)) {\n      throw new CKEditorError(\"rename-operation-wrong-position\", this);\n    } else if (element.name !== this.oldName) {\n      throw new CKEditorError(\"rename-operation-wrong-name\", this);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    const element = this.position.nodeAfter;\n    element.name = this.newName;\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.position = this.position.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"RenameOperation\";\n  }\n  /**\n   * Creates `RenameOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return new _RenameOperation(Position2.fromJSON(json.position, document2), json.oldName, json.newName, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/rootattributeoperation.js\nvar RootAttributeOperation = class _RootAttributeOperation extends Operation {\n  /**\n   * Creates an operation that changes, removes or adds attributes on root element.\n   *\n   * @see module:engine/model/operation/attributeoperation~AttributeOperation\n   * @param root Root element to change.\n   * @param key Key of an attribute to change or remove.\n   * @param oldValue Old value of the attribute with given key or `null`, if attribute was not set before.\n   * @param newValue New value of the attribute with given key or `null`, if operation should remove attribute.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation\n   * can be applied or `null` if the operation operates on detached (non-document) tree.\n   */\n  constructor(root2, key, oldValue, newValue, baseVersion) {\n    super(baseVersion);\n    this.root = root2;\n    this.key = key;\n    this.oldValue = oldValue === void 0 ? null : oldValue;\n    this.newValue = newValue === void 0 ? null : newValue;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    if (this.oldValue === null) {\n      return \"addRootAttribute\";\n    } else if (this.newValue === null) {\n      return \"removeRootAttribute\";\n    } else {\n      return \"changeRootAttribute\";\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return this.root;\n  }\n  /**\n   * Creates and returns an operation that has the same parameters as this operation.\n   *\n   * @returns Clone of this operation.\n   */\n  clone() {\n    return new _RootAttributeOperation(this.root, this.key, this.oldValue, this.newValue, this.baseVersion);\n  }\n  /**\n   * See {@link module:engine/model/operation/operation~Operation#getReversed `Operation#getReversed()`}.\n   */\n  getReversed() {\n    return new _RootAttributeOperation(this.root, this.key, this.newValue, this.oldValue, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    if (this.root != this.root.root || this.root.is(\"documentFragment\")) {\n      throw new CKEditorError(\"rootattribute-operation-not-a-root\", this, { root: this.root, key: this.key });\n    }\n    if (this.oldValue !== null && this.root.getAttribute(this.key) !== this.oldValue) {\n      throw new CKEditorError(\"rootattribute-operation-wrong-old-value\", this, { root: this.root, key: this.key });\n    }\n    if (this.oldValue === null && this.newValue !== null && this.root.hasAttribute(this.key)) {\n      throw new CKEditorError(\"rootattribute-operation-attribute-exists\", this, { root: this.root, key: this.key });\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    if (this.newValue !== null) {\n      this.root._setAttribute(this.key, this.newValue);\n    } else {\n      this.root._removeAttribute(this.key);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.root = this.root.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"RootAttributeOperation\";\n  }\n  /**\n   * Creates `RootAttributeOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    if (!document2.getRoot(json.root)) {\n      throw new CKEditorError(\"rootattribute-operation-fromjson-no-root\", this, { rootName: json.root });\n    }\n    return new _RootAttributeOperation(document2.getRoot(json.root), json.key, json.oldValue, json.newValue, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/rootoperation.js\nvar RootOperation = class _RootOperation extends Operation {\n  /**\n   * Creates an operation that creates or removes a root element.\n   *\n   * @param rootName Root name to create or detach.\n   * @param elementName Root element name.\n   * @param isAdd Specifies whether the operation adds (`true`) or detaches the root (`false`).\n   * @param document Document which owns the root.\n   * @param baseVersion Document {@link module:engine/model/document~Document#version} on which operation can be applied.\n   */\n  constructor(rootName, elementName, isAdd, document2, baseVersion) {\n    super(baseVersion);\n    this.rootName = rootName;\n    this.elementName = elementName;\n    this.isAdd = isAdd;\n    this._document = document2;\n    if (!this._document.getRoot(this.rootName)) {\n      const root2 = this._document.createRoot(this.elementName, this.rootName);\n      root2._isAttached = false;\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return this.isAdd ? \"addRoot\" : \"detachRoot\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return this._document.getRoot(this.rootName);\n  }\n  /**\n   * @inheritDoc\n   */\n  clone() {\n    return new _RootOperation(this.rootName, this.elementName, this.isAdd, this._document, this.baseVersion);\n  }\n  /**\n   * @inheritDoc\n   */\n  getReversed() {\n    return new _RootOperation(this.rootName, this.elementName, !this.isAdd, this._document, this.baseVersion + 1);\n  }\n  /**\n   * @inheritDoc\n   */\n  _execute() {\n    this._document.getRoot(this.rootName)._isAttached = this.isAdd;\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    delete json._document;\n    return json;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"RootOperation\";\n  }\n  /**\n   * Creates `RootOperation` object from deserialized object, i.e. from parsed JSON string.\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return new _RootOperation(json.rootName, json.elementName, json.isAdd, document2, json.baseVersion);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/operationfactory.js\nvar operations = {};\noperations[AttributeOperation.className] = AttributeOperation;\noperations[InsertOperation.className] = InsertOperation;\noperations[MarkerOperation.className] = MarkerOperation;\noperations[MoveOperation.className] = MoveOperation;\noperations[NoOperation.className] = NoOperation;\noperations[Operation.className] = Operation;\noperations[RenameOperation.className] = RenameOperation;\noperations[RootAttributeOperation.className] = RootAttributeOperation;\noperations[RootOperation.className] = RootOperation;\noperations[SplitOperation.className] = SplitOperation;\noperations[MergeOperation.className] = MergeOperation;\nvar OperationFactory = class {\n  /**\n   * Creates an operation instance from a JSON object (parsed JSON string).\n   *\n   * @param json Deserialized JSON object.\n   * @param document Document on which this operation will be applied.\n   */\n  static fromJSON(json, document2) {\n    return operations[json.__className].fromJSON(json, document2);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/transform.js\nvar transformations = /* @__PURE__ */ new Map();\nfunction setTransformation(OperationA, OperationB, transformationFunction) {\n  let aGroup = transformations.get(OperationA);\n  if (!aGroup) {\n    aGroup = /* @__PURE__ */ new Map();\n    transformations.set(OperationA, aGroup);\n  }\n  aGroup.set(OperationB, transformationFunction);\n}\nfunction getTransformation(OperationA, OperationB) {\n  const aGroup = transformations.get(OperationA);\n  if (aGroup && aGroup.has(OperationB)) {\n    return aGroup.get(OperationB);\n  }\n  return noUpdateTransformation;\n}\nfunction noUpdateTransformation(a) {\n  return [a];\n}\nfunction transform2(a, b, context = {}) {\n  const transformationFunction = getTransformation(a.constructor, b.constructor);\n  try {\n    a = a.clone();\n    return transformationFunction(a, b, context);\n  } catch (e) {\n    throw e;\n  }\n}\nfunction transformSets(operationsA, operationsB, options) {\n  operationsA = operationsA.slice();\n  operationsB = operationsB.slice();\n  const contextFactory = new ContextFactory(options.document, options.useRelations, options.forceWeakRemove);\n  contextFactory.setOriginalOperations(operationsA);\n  contextFactory.setOriginalOperations(operationsB);\n  const originalOperations = contextFactory.originalOperations;\n  if (operationsA.length == 0 || operationsB.length == 0) {\n    return { operationsA, operationsB, originalOperations };\n  }\n  const nextTransformIndex = /* @__PURE__ */ new WeakMap();\n  for (const op of operationsA) {\n    nextTransformIndex.set(op, 0);\n  }\n  const data = {\n    nextBaseVersionA: operationsA[operationsA.length - 1].baseVersion + 1,\n    nextBaseVersionB: operationsB[operationsB.length - 1].baseVersion + 1,\n    originalOperationsACount: operationsA.length,\n    originalOperationsBCount: operationsB.length\n  };\n  let i = 0;\n  while (i < operationsA.length) {\n    const opA = operationsA[i];\n    const indexB = nextTransformIndex.get(opA);\n    if (indexB == operationsB.length) {\n      i++;\n      continue;\n    }\n    const opB = operationsB[indexB];\n    const newOpsA = transform2(opA, opB, contextFactory.getContext(opA, opB, true));\n    const newOpsB = transform2(opB, opA, contextFactory.getContext(opB, opA, false));\n    contextFactory.updateRelation(opA, opB);\n    contextFactory.setOriginalOperations(newOpsA, opA);\n    contextFactory.setOriginalOperations(newOpsB, opB);\n    for (const newOpA of newOpsA) {\n      nextTransformIndex.set(newOpA, indexB + newOpsB.length);\n    }\n    operationsA.splice(i, 1, ...newOpsA);\n    operationsB.splice(indexB, 1, ...newOpsB);\n  }\n  if (options.padWithNoOps) {\n    const brokenOperationsACount = operationsA.length - data.originalOperationsACount;\n    const brokenOperationsBCount = operationsB.length - data.originalOperationsBCount;\n    padWithNoOps(operationsA, brokenOperationsBCount - brokenOperationsACount);\n    padWithNoOps(operationsB, brokenOperationsACount - brokenOperationsBCount);\n  }\n  updateBaseVersions(operationsA, data.nextBaseVersionB);\n  updateBaseVersions(operationsB, data.nextBaseVersionA);\n  return { operationsA, operationsB, originalOperations };\n}\nvar ContextFactory = class {\n  /**\n   * Creates `ContextFactory` instance.\n   *\n   * @param document Document which the operations change.\n   * @param useRelations Whether during transformation relations should be used (used during undo for\n   * better conflict resolution).\n   * @param forceWeakRemove If set to `false`, remove operation will be always stronger than move operation,\n   * so the removed nodes won't end up back in the document root. When set to `true`, context data will be used.\n   */\n  constructor(document2, useRelations, forceWeakRemove = false) {\n    this.originalOperations = /* @__PURE__ */ new Map();\n    this._history = document2.history;\n    this._useRelations = useRelations;\n    this._forceWeakRemove = !!forceWeakRemove;\n    this._relations = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Sets \"original operation\" for given operations.\n   *\n   * During transformation process, operations are cloned, then changed, then processed again, sometimes broken into two\n   * or multiple operations. When gathering additional data it is important that all operations can be somehow linked\n   * so a cloned and transformed \"version\" still kept track of the data assigned earlier to it.\n   *\n   * The original operation object will be used as such an universal linking id. Throughout the transformation process\n   * all cloned operations will refer to \"the original operation\" when storing and reading additional data.\n   *\n   * If `takeFrom` is not set, each operation from `operations` array will be assigned itself as \"the original operation\".\n   * This should be used as an initialization step.\n   *\n   * If `takeFrom` is set, each operation from `operations` will be assigned the same original operation as assigned\n   * for `takeFrom` operation. This should be used to update original operations. It should be used in a way that\n   * `operations` are the result of `takeFrom` transformation to ensure proper \"original operation propagation\".\n   */\n  setOriginalOperations(operations2, takeFrom = null) {\n    const originalOperation = takeFrom ? this.originalOperations.get(takeFrom) : null;\n    for (const operation of operations2) {\n      this.originalOperations.set(operation, originalOperation || operation);\n    }\n  }\n  /**\n   * Saves a relation between operations `opA` and `opB`.\n   *\n   * Relations are then later used to help solve conflicts when operations are transformed.\n   */\n  updateRelation(opA, opB) {\n    if (opA instanceof MoveOperation) {\n      if (opB instanceof MergeOperation) {\n        if (opA.targetPosition.isEqual(opB.sourcePosition) || opB.movedRange.containsPosition(opA.targetPosition)) {\n          this._setRelation(opA, opB, \"insertAtSource\");\n        } else if (opA.targetPosition.isEqual(opB.deletionPosition)) {\n          this._setRelation(opA, opB, \"insertBetween\");\n        } else if (opA.targetPosition.isAfter(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"moveTargetAfter\");\n        }\n      } else if (opB instanceof MoveOperation) {\n        if (opA.targetPosition.isEqual(opB.sourcePosition) || opA.targetPosition.isBefore(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"insertBefore\");\n        } else {\n          this._setRelation(opA, opB, \"insertAfter\");\n        }\n      }\n    } else if (opA instanceof SplitOperation) {\n      if (opB instanceof MergeOperation) {\n        if (opA.splitPosition.isBefore(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"splitBefore\");\n        }\n      } else if (opB instanceof MoveOperation) {\n        if (opA.splitPosition.isEqual(opB.sourcePosition) || opA.splitPosition.isBefore(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"splitBefore\");\n        } else {\n          const range = Range2._createFromPositionAndShift(opB.sourcePosition, opB.howMany);\n          if (opA.splitPosition.hasSameParentAs(opB.sourcePosition) && range.containsPosition(opA.splitPosition)) {\n            const howMany = range.end.offset - opA.splitPosition.offset;\n            const offset = opA.splitPosition.offset - range.start.offset;\n            this._setRelation(opA, opB, { howMany, offset });\n          }\n        }\n      }\n    } else if (opA instanceof MergeOperation) {\n      if (opB instanceof MergeOperation) {\n        if (!opA.targetPosition.isEqual(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"mergeTargetNotMoved\");\n        }\n        if (opA.sourcePosition.isEqual(opB.targetPosition)) {\n          this._setRelation(opA, opB, \"mergeSourceNotMoved\");\n        }\n        if (opA.sourcePosition.isEqual(opB.sourcePosition)) {\n          this._setRelation(opA, opB, \"mergeSameElement\");\n        }\n      } else if (opB instanceof SplitOperation) {\n        if (opA.sourcePosition.isEqual(opB.splitPosition)) {\n          this._setRelation(opA, opB, \"splitAtSource\");\n        }\n      }\n    } else if (opA instanceof MarkerOperation) {\n      const markerRange = opA.newRange;\n      if (!markerRange) {\n        return;\n      }\n      if (opB instanceof MoveOperation) {\n        const movedRange = Range2._createFromPositionAndShift(opB.sourcePosition, opB.howMany);\n        const affectedLeft = movedRange.containsPosition(markerRange.start) || movedRange.start.isEqual(markerRange.start);\n        const affectedRight = movedRange.containsPosition(markerRange.end) || movedRange.end.isEqual(markerRange.end);\n        if ((affectedLeft || affectedRight) && !movedRange.containsRange(markerRange)) {\n          this._setRelation(opA, opB, {\n            side: affectedLeft ? \"left\" : \"right\",\n            path: affectedLeft ? markerRange.start.path.slice() : markerRange.end.path.slice()\n          });\n        }\n      } else if (opB instanceof MergeOperation) {\n        const wasInLeftElement = markerRange.start.isEqual(opB.targetPosition);\n        const wasStartBeforeMergedElement = markerRange.start.isEqual(opB.deletionPosition);\n        const wasEndBeforeMergedElement = markerRange.end.isEqual(opB.deletionPosition);\n        const wasInRightElement = markerRange.end.isEqual(opB.sourcePosition);\n        if (wasInLeftElement || wasStartBeforeMergedElement || wasEndBeforeMergedElement || wasInRightElement) {\n          this._setRelation(opA, opB, {\n            wasInLeftElement,\n            wasStartBeforeMergedElement,\n            wasEndBeforeMergedElement,\n            wasInRightElement\n          });\n        }\n      }\n    }\n  }\n  /**\n   * Evaluates and returns contextual information about two given operations `opA` and `opB` which are about to be transformed.\n   */\n  getContext(opA, opB, aIsStrong) {\n    return {\n      aIsStrong,\n      aWasUndone: this._wasUndone(opA),\n      bWasUndone: this._wasUndone(opB),\n      abRelation: this._useRelations ? this._getRelation(opA, opB) : null,\n      baRelation: this._useRelations ? this._getRelation(opB, opA) : null,\n      forceWeakRemove: this._forceWeakRemove\n    };\n  }\n  /**\n   * Returns whether given operation `op` has already been undone.\n   *\n   * Information whether an operation was undone gives more context when making a decision when two operations are in conflict.\n   */\n  _wasUndone(op) {\n    const originalOp = this.originalOperations.get(op);\n    return originalOp.wasUndone || this._history.isUndoneOperation(originalOp);\n  }\n  /**\n   * Returns a relation between `opA` and an operation which is undone by `opB`. This can be `String` value if a relation\n   * was set earlier or `null` if there was no relation between those operations.\n   *\n   * This is a little tricky to understand, so let's compare it to `ContextFactory#_wasUndone`.\n   *\n   * When `wasUndone( opB )` is used, we check if the `opB` has already been undone. It is obvious, that the\n   * undoing operation must happen after the undone operation. So, essentially, we have `opB`, we take document history,\n   * we look forward in the future and ask if in that future `opB` was undone.\n   *\n   * Relations is a backward process to `wasUndone()`.\n   *\n   * Long story short - using relations is asking what happened in the past. Looking back. This time we have an undoing\n   * operation `opB` which has undone some other operation. When there is a transformation `opA` x `opB` and there is\n   * a conflict to solve and `opB` is an undoing operation, we can look back in the history and see what was a relation\n   * between `opA` and the operation which `opB` undone. Basing on that relation from the past, we can now make\n   * a better decision when resolving a conflict between two operations, because we know more about the context of\n   * those two operations.\n   *\n   * This is why this function does not return a relation directly between `opA` and `opB` because we need to look\n   * back to search for a meaningful contextual information.\n   */\n  _getRelation(opA, opB) {\n    const origB = this.originalOperations.get(opB);\n    const undoneB = this._history.getUndoneOperation(origB);\n    if (!undoneB) {\n      return null;\n    }\n    const origA = this.originalOperations.get(opA);\n    const relationsA = this._relations.get(origA);\n    if (relationsA) {\n      return relationsA.get(undoneB) || null;\n    }\n    return null;\n  }\n  /**\n   * Helper function for `ContextFactory#updateRelations`.\n   */\n  _setRelation(opA, opB, relation) {\n    const origA = this.originalOperations.get(opA);\n    const origB = this.originalOperations.get(opB);\n    let relationsA = this._relations.get(origA);\n    if (!relationsA) {\n      relationsA = /* @__PURE__ */ new Map();\n      this._relations.set(origA, relationsA);\n    }\n    relationsA.set(origB, relation);\n  }\n};\nfunction updateBaseVersions(operations2, baseVersion) {\n  for (const operation of operations2) {\n    operation.baseVersion = baseVersion++;\n  }\n}\nfunction padWithNoOps(operations2, howMany) {\n  for (let i = 0; i < howMany; i++) {\n    operations2.push(new NoOperation(0));\n  }\n}\nsetTransformation(AttributeOperation, AttributeOperation, (a, b, context) => {\n  if (a.key === b.key && a.range.start.hasSameParentAs(b.range.start)) {\n    const operations2 = a.range.getDifference(b.range).map((range) => {\n      return new AttributeOperation(range, a.key, a.oldValue, a.newValue, 0);\n    });\n    const common = a.range.getIntersection(b.range);\n    if (common) {\n      if (context.aIsStrong) {\n        operations2.push(new AttributeOperation(common, b.key, b.newValue, a.newValue, 0));\n      }\n    }\n    if (operations2.length == 0) {\n      return [new NoOperation(0)];\n    }\n    return operations2;\n  } else {\n    return [a];\n  }\n});\nsetTransformation(AttributeOperation, InsertOperation, (a, b) => {\n  if (a.range.start.hasSameParentAs(b.position) && a.range.containsPosition(b.position)) {\n    const range = a.range._getTransformedByInsertion(b.position, b.howMany, !b.shouldReceiveAttributes);\n    const result = range.map((r) => {\n      return new AttributeOperation(r, a.key, a.oldValue, a.newValue, a.baseVersion);\n    });\n    if (b.shouldReceiveAttributes) {\n      const op = _getComplementaryAttributeOperations(b, a.key, a.oldValue);\n      if (op) {\n        result.unshift(op);\n      }\n    }\n    return result;\n  }\n  a.range = a.range._getTransformedByInsertion(b.position, b.howMany, false)[0];\n  return [a];\n});\nfunction _getComplementaryAttributeOperations(insertOperation, key, newValue) {\n  const nodes = insertOperation.nodes;\n  const insertValue = nodes.getNode(0).getAttribute(key);\n  if (insertValue == newValue) {\n    return null;\n  }\n  const range = new Range2(insertOperation.position, insertOperation.position.getShiftedBy(insertOperation.howMany));\n  return new AttributeOperation(range, key, insertValue, newValue, 0);\n}\nsetTransformation(AttributeOperation, MergeOperation, (a, b) => {\n  const ranges = [];\n  if (a.range.start.hasSameParentAs(b.deletionPosition)) {\n    if (a.range.containsPosition(b.deletionPosition) || a.range.start.isEqual(b.deletionPosition)) {\n      ranges.push(Range2._createFromPositionAndShift(b.graveyardPosition, 1));\n    }\n  }\n  const range = a.range._getTransformedByMergeOperation(b);\n  if (!range.isCollapsed) {\n    ranges.push(range);\n  }\n  return ranges.map((range2) => {\n    return new AttributeOperation(range2, a.key, a.oldValue, a.newValue, a.baseVersion);\n  });\n});\nsetTransformation(AttributeOperation, MoveOperation, (a, b) => {\n  const ranges = _breakRangeByMoveOperation(a.range, b);\n  return ranges.map((range) => new AttributeOperation(range, a.key, a.oldValue, a.newValue, a.baseVersion));\n});\nfunction _breakRangeByMoveOperation(range, moveOp) {\n  const moveRange = Range2._createFromPositionAndShift(moveOp.sourcePosition, moveOp.howMany);\n  let common = null;\n  let difference = [];\n  if (moveRange.containsRange(range, true)) {\n    common = range;\n  } else if (range.start.hasSameParentAs(moveRange.start)) {\n    difference = range.getDifference(moveRange);\n    common = range.getIntersection(moveRange);\n  } else {\n    difference = [range];\n  }\n  const result = [];\n  for (let diff2 of difference) {\n    diff2 = diff2._getTransformedByDeletion(moveOp.sourcePosition, moveOp.howMany);\n    const targetPosition = moveOp.getMovedRangeStart();\n    const spread = diff2.start.hasSameParentAs(targetPosition);\n    const diffs = diff2._getTransformedByInsertion(targetPosition, moveOp.howMany, spread);\n    result.push(...diffs);\n  }\n  if (common) {\n    result.push(common._getTransformedByMove(moveOp.sourcePosition, moveOp.targetPosition, moveOp.howMany, false)[0]);\n  }\n  return result;\n}\nsetTransformation(AttributeOperation, SplitOperation, (a, b) => {\n  if (a.range.end.isEqual(b.insertionPosition)) {\n    if (!b.graveyardPosition) {\n      a.range.end.offset++;\n    }\n    return [a];\n  }\n  if (a.range.start.hasSameParentAs(b.splitPosition) && a.range.containsPosition(b.splitPosition)) {\n    const secondPart = a.clone();\n    secondPart.range = new Range2(b.moveTargetPosition.clone(), a.range.end._getCombined(b.splitPosition, b.moveTargetPosition));\n    a.range.end = b.splitPosition.clone();\n    a.range.end.stickiness = \"toPrevious\";\n    return [a, secondPart];\n  }\n  a.range = a.range._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, AttributeOperation, (a, b) => {\n  const result = [a];\n  if (a.shouldReceiveAttributes && a.position.hasSameParentAs(b.range.start) && b.range.containsPosition(a.position)) {\n    const op = _getComplementaryAttributeOperations(a, b.key, b.newValue);\n    if (op) {\n      result.push(op);\n    }\n  }\n  return result;\n});\nsetTransformation(InsertOperation, InsertOperation, (a, b, context) => {\n  if (a.position.isEqual(b.position) && context.aIsStrong) {\n    return [a];\n  }\n  a.position = a.position._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, MoveOperation, (a, b) => {\n  a.position = a.position._getTransformedByMoveOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, SplitOperation, (a, b) => {\n  a.position = a.position._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(InsertOperation, MergeOperation, (a, b) => {\n  a.position = a.position._getTransformedByMergeOperation(b);\n  return [a];\n});\nsetTransformation(MarkerOperation, InsertOperation, (a, b) => {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedByInsertOperation(b)[0];\n  }\n  if (a.newRange) {\n    a.newRange = a.newRange._getTransformedByInsertOperation(b)[0];\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MarkerOperation, (a, b, context) => {\n  if (a.name == b.name) {\n    if (context.aIsStrong) {\n      a.oldRange = b.newRange ? b.newRange.clone() : null;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MergeOperation, (a, b) => {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedByMergeOperation(b);\n  }\n  if (a.newRange) {\n    a.newRange = a.newRange._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, MoveOperation, (a, b, context) => {\n  if (a.oldRange) {\n    a.oldRange = Range2._createFromRanges(a.oldRange._getTransformedByMoveOperation(b));\n  }\n  if (a.newRange) {\n    if (context.abRelation) {\n      const aNewRange = Range2._createFromRanges(a.newRange._getTransformedByMoveOperation(b));\n      if (context.abRelation.side == \"left\" && b.targetPosition.isEqual(a.newRange.start)) {\n        a.newRange.end = aNewRange.end;\n        a.newRange.start.path = context.abRelation.path;\n        return [a];\n      } else if (context.abRelation.side == \"right\" && b.targetPosition.isEqual(a.newRange.end)) {\n        a.newRange.start = aNewRange.start;\n        a.newRange.end.path = context.abRelation.path;\n        return [a];\n      }\n    }\n    a.newRange = Range2._createFromRanges(a.newRange._getTransformedByMoveOperation(b));\n  }\n  return [a];\n});\nsetTransformation(MarkerOperation, SplitOperation, (a, b, context) => {\n  if (a.oldRange) {\n    a.oldRange = a.oldRange._getTransformedBySplitOperation(b);\n  }\n  if (a.newRange) {\n    if (context.abRelation) {\n      const aNewRange = a.newRange._getTransformedBySplitOperation(b);\n      if (a.newRange.start.isEqual(b.splitPosition) && context.abRelation.wasStartBeforeMergedElement) {\n        a.newRange.start = Position2._createAt(b.insertionPosition);\n      } else if (a.newRange.start.isEqual(b.splitPosition) && !context.abRelation.wasInLeftElement) {\n        a.newRange.start = Position2._createAt(b.moveTargetPosition);\n      }\n      if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasInRightElement) {\n        a.newRange.end = Position2._createAt(b.moveTargetPosition);\n      } else if (a.newRange.end.isEqual(b.splitPosition) && context.abRelation.wasEndBeforeMergedElement) {\n        a.newRange.end = Position2._createAt(b.insertionPosition);\n      } else {\n        a.newRange.end = aNewRange.end;\n      }\n      return [a];\n    }\n    a.newRange = a.newRange._getTransformedBySplitOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MergeOperation, InsertOperation, (a, b) => {\n  if (a.sourcePosition.hasSameParentAs(b.position)) {\n    a.howMany += b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByInsertOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(MergeOperation, MergeOperation, (a, b, context) => {\n  if (a.sourcePosition.isEqual(b.sourcePosition) && a.targetPosition.isEqual(b.targetPosition)) {\n    if (!context.bWasUndone) {\n      return [new NoOperation(0)];\n    } else {\n      const path = b.graveyardPosition.path.slice();\n      path.push(0);\n      a.sourcePosition = new Position2(b.graveyardPosition.root, path);\n      a.howMany = 0;\n      return [a];\n    }\n  }\n  if (a.sourcePosition.isEqual(b.sourcePosition) && !a.targetPosition.isEqual(b.targetPosition) && !context.bWasUndone && context.abRelation != \"splitAtSource\") {\n    const aToGraveyard = a.targetPosition.root.rootName == \"$graveyard\";\n    const bToGraveyard = b.targetPosition.root.rootName == \"$graveyard\";\n    const aIsWeak = aToGraveyard && !bToGraveyard;\n    const bIsWeak = bToGraveyard && !aToGraveyard;\n    const forceMove = bIsWeak || !aIsWeak && context.aIsStrong;\n    if (forceMove) {\n      const sourcePosition = b.targetPosition._getTransformedByMergeOperation(b);\n      const targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n      return [new MoveOperation(sourcePosition, a.howMany, targetPosition, 0)];\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByMergeOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n  if (!a.graveyardPosition.isEqual(b.graveyardPosition) || !context.aIsStrong) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MergeOperation, MoveOperation, (a, b, context) => {\n  const removedRange = Range2._createFromPositionAndShift(b.sourcePosition, b.howMany);\n  if (b.type == \"remove\" && !context.bWasUndone && !context.forceWeakRemove) {\n    if (a.deletionPosition.hasSameParentAs(b.sourcePosition) && removedRange.containsPosition(a.sourcePosition)) {\n      return [new NoOperation(0)];\n    }\n  }\n  if (a.sourcePosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  if (a.sourcePosition.hasSameParentAs(b.sourcePosition)) {\n    a.howMany -= b.howMany;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedByMoveOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedByMoveOperation(b);\n  if (!a.graveyardPosition.isEqual(b.targetPosition)) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MergeOperation, SplitOperation, (a, b, context) => {\n  if (b.graveyardPosition) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByDeletion(b.graveyardPosition, 1);\n    if (a.deletionPosition.isEqual(b.graveyardPosition)) {\n      a.howMany = b.howMany;\n    }\n  }\n  if (a.targetPosition.isEqual(b.splitPosition)) {\n    const mergeInside = b.howMany != 0;\n    const mergeSplittingElement = b.graveyardPosition && a.deletionPosition.isEqual(b.graveyardPosition);\n    if (mergeInside || mergeSplittingElement || context.abRelation == \"mergeTargetNotMoved\") {\n      a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n  if (a.sourcePosition.isEqual(b.splitPosition)) {\n    if (context.abRelation == \"mergeSourceNotMoved\") {\n      a.howMany = 0;\n      a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n    if (context.abRelation == \"mergeSameElement\" || a.sourcePosition.offset > 0) {\n      a.sourcePosition = b.moveTargetPosition.clone();\n      a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n  if (a.sourcePosition.hasSameParentAs(b.splitPosition)) {\n    a.howMany = b.splitPosition.offset;\n  }\n  a.sourcePosition = a.sourcePosition._getTransformedBySplitOperation(b);\n  a.targetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(MoveOperation, InsertOperation, (a, b) => {\n  const moveRange = Range2._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  const transformed = moveRange._getTransformedByInsertOperation(b, false)[0];\n  a.sourcePosition = transformed.start;\n  a.howMany = transformed.end.offset - transformed.start.offset;\n  if (!a.targetPosition.isEqual(b.position)) {\n    a.targetPosition = a.targetPosition._getTransformedByInsertOperation(b);\n  }\n  return [a];\n});\nsetTransformation(MoveOperation, MoveOperation, (a, b, context) => {\n  const rangeA = Range2._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  const rangeB = Range2._createFromPositionAndShift(b.sourcePosition, b.howMany);\n  let aIsStrong = context.aIsStrong;\n  let insertBefore = !context.aIsStrong;\n  if (context.abRelation == \"insertBefore\" || context.baRelation == \"insertAfter\") {\n    insertBefore = true;\n  } else if (context.abRelation == \"insertAfter\" || context.baRelation == \"insertBefore\") {\n    insertBefore = false;\n  }\n  let newTargetPosition;\n  if (a.targetPosition.isEqual(b.targetPosition) && insertBefore) {\n    newTargetPosition = a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n  } else {\n    newTargetPosition = a.targetPosition._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n  }\n  if (_moveTargetIntoMovedRange(a, b) && _moveTargetIntoMovedRange(b, a)) {\n    return [b.getReversed()];\n  }\n  const bTargetsToA = rangeA.containsPosition(b.targetPosition);\n  if (bTargetsToA && rangeA.containsRange(rangeB, true)) {\n    rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n  const aTargetsToB = rangeB.containsPosition(a.targetPosition);\n  if (aTargetsToB && rangeB.containsRange(rangeA, true)) {\n    rangeA.start = rangeA.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    rangeA.end = rangeA.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n  const aCompB = compareArrays(a.sourcePosition.getParentPath(), b.sourcePosition.getParentPath());\n  if (aCompB == \"prefix\" || aCompB == \"extension\") {\n    rangeA.start = rangeA.start._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    rangeA.end = rangeA.end._getTransformedByMove(b.sourcePosition, b.targetPosition, b.howMany);\n    return _makeMoveOperationsFromRanges([rangeA], newTargetPosition);\n  }\n  if (a.type == \"remove\" && b.type != \"remove\" && !context.aWasUndone && !context.forceWeakRemove) {\n    aIsStrong = true;\n  } else if (a.type != \"remove\" && b.type == \"remove\" && !context.bWasUndone && !context.forceWeakRemove) {\n    aIsStrong = false;\n  }\n  const ranges = [];\n  const difference = rangeA.getDifference(rangeB);\n  for (const range of difference) {\n    range.start = range.start._getTransformedByDeletion(b.sourcePosition, b.howMany);\n    range.end = range.end._getTransformedByDeletion(b.sourcePosition, b.howMany);\n    const shouldSpread = compareArrays(range.start.getParentPath(), b.getMovedRangeStart().getParentPath()) == \"same\";\n    const newRanges = range._getTransformedByInsertion(b.getMovedRangeStart(), b.howMany, shouldSpread);\n    ranges.push(...newRanges);\n  }\n  const common = rangeA.getIntersection(rangeB);\n  if (common !== null && aIsStrong) {\n    common.start = common.start._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    common.end = common.end._getCombined(b.sourcePosition, b.getMovedRangeStart());\n    if (ranges.length === 0) {\n      ranges.push(common);\n    } else if (ranges.length == 1) {\n      if (rangeB.start.isBefore(rangeA.start) || rangeB.start.isEqual(rangeA.start)) {\n        ranges.unshift(common);\n      } else {\n        ranges.push(common);\n      }\n    } else {\n      ranges.splice(1, 0, common);\n    }\n  }\n  if (ranges.length === 0) {\n    return [new NoOperation(a.baseVersion)];\n  }\n  return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, SplitOperation, (a, b, context) => {\n  let newTargetPosition = a.targetPosition.clone();\n  if (!a.targetPosition.isEqual(b.insertionPosition) || !b.graveyardPosition || context.abRelation == \"moveTargetAfter\") {\n    newTargetPosition = a.targetPosition._getTransformedBySplitOperation(b);\n  }\n  const moveRange = Range2._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  if (moveRange.end.isEqual(b.insertionPosition)) {\n    if (!b.graveyardPosition) {\n      a.howMany++;\n    }\n    a.targetPosition = newTargetPosition;\n    return [a];\n  }\n  if (moveRange.start.hasSameParentAs(b.splitPosition) && moveRange.containsPosition(b.splitPosition)) {\n    let rightRange = new Range2(b.splitPosition, moveRange.end);\n    rightRange = rightRange._getTransformedBySplitOperation(b);\n    const ranges2 = [\n      new Range2(moveRange.start, b.splitPosition),\n      rightRange\n    ];\n    return _makeMoveOperationsFromRanges(ranges2, newTargetPosition);\n  }\n  if (a.targetPosition.isEqual(b.splitPosition) && context.abRelation == \"insertAtSource\") {\n    newTargetPosition = b.moveTargetPosition;\n  }\n  if (a.targetPosition.isEqual(b.insertionPosition) && context.abRelation == \"insertBetween\") {\n    newTargetPosition = a.targetPosition;\n  }\n  const transformed = moveRange._getTransformedBySplitOperation(b);\n  const ranges = [transformed];\n  if (b.graveyardPosition) {\n    const movesGraveyardElement = moveRange.start.isEqual(b.graveyardPosition) || moveRange.containsPosition(b.graveyardPosition);\n    if (a.howMany > 1 && movesGraveyardElement && !context.aWasUndone) {\n      ranges.push(Range2._createFromPositionAndShift(b.insertionPosition, 1));\n    }\n  }\n  return _makeMoveOperationsFromRanges(ranges, newTargetPosition);\n});\nsetTransformation(MoveOperation, MergeOperation, (a, b, context) => {\n  const movedRange = Range2._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  if (b.deletionPosition.hasSameParentAs(a.sourcePosition) && movedRange.containsPosition(b.sourcePosition)) {\n    if (a.type == \"remove\" && !context.forceWeakRemove) {\n      if (!context.aWasUndone) {\n        const results = [];\n        let gyMoveSource = b.graveyardPosition.clone();\n        let splitNodesMoveSource = b.targetPosition._getTransformedByMergeOperation(b);\n        if (a.howMany > 1) {\n          results.push(new MoveOperation(a.sourcePosition, a.howMany - 1, a.targetPosition, 0));\n          gyMoveSource = gyMoveSource._getTransformedByMove(a.sourcePosition, a.targetPosition, a.howMany - 1);\n          splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(a.sourcePosition, a.targetPosition, a.howMany - 1);\n        }\n        const gyMoveTarget = b.deletionPosition._getCombined(a.sourcePosition, a.targetPosition);\n        const gyMove = new MoveOperation(gyMoveSource, 1, gyMoveTarget, 0);\n        const splitNodesMoveTargetPath = gyMove.getMovedRangeStart().path.slice();\n        splitNodesMoveTargetPath.push(0);\n        const splitNodesMoveTarget = new Position2(gyMove.targetPosition.root, splitNodesMoveTargetPath);\n        splitNodesMoveSource = splitNodesMoveSource._getTransformedByMove(gyMoveSource, gyMoveTarget, 1);\n        const splitNodesMove = new MoveOperation(splitNodesMoveSource, b.howMany, splitNodesMoveTarget, 0);\n        results.push(gyMove);\n        results.push(splitNodesMove);\n        return results;\n      }\n    } else {\n      if (a.howMany == 1) {\n        if (!context.bWasUndone) {\n          return [new NoOperation(0)];\n        } else {\n          a.sourcePosition = b.graveyardPosition.clone();\n          a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n          return [a];\n        }\n      }\n    }\n  }\n  const moveRange = Range2._createFromPositionAndShift(a.sourcePosition, a.howMany);\n  const transformed = moveRange._getTransformedByMergeOperation(b);\n  a.sourcePosition = transformed.start;\n  a.howMany = transformed.end.offset - transformed.start.offset;\n  a.targetPosition = a.targetPosition._getTransformedByMergeOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, InsertOperation, (a, b) => {\n  a.position = a.position._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, MergeOperation, (a, b) => {\n  if (a.position.isEqual(b.deletionPosition)) {\n    a.position = b.graveyardPosition.clone();\n    a.position.stickiness = \"toNext\";\n    return [a];\n  }\n  a.position = a.position._getTransformedByMergeOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, MoveOperation, (a, b) => {\n  a.position = a.position._getTransformedByMoveOperation(b);\n  return [a];\n});\nsetTransformation(RenameOperation, RenameOperation, (a, b, context) => {\n  if (a.position.isEqual(b.position)) {\n    if (context.aIsStrong) {\n      a.oldName = b.newName;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  return [a];\n});\nsetTransformation(RenameOperation, SplitOperation, (a, b) => {\n  const renamePath = a.position.path;\n  const splitPath = b.splitPosition.getParentPath();\n  if (compareArrays(renamePath, splitPath) == \"same\" && !b.graveyardPosition) {\n    const extraRename = new RenameOperation(a.position.getShiftedBy(1), a.oldName, a.newName, 0);\n    return [a, extraRename];\n  }\n  a.position = a.position._getTransformedBySplitOperation(b);\n  return [a];\n});\nsetTransformation(RootAttributeOperation, RootAttributeOperation, (a, b, context) => {\n  if (a.root === b.root && a.key === b.key) {\n    if (!context.aIsStrong || a.newValue === b.newValue) {\n      return [new NoOperation(0)];\n    } else {\n      a.oldValue = b.newValue;\n    }\n  }\n  return [a];\n});\nsetTransformation(RootOperation, RootOperation, (a, b) => {\n  if (a.rootName === b.rootName && a.isAdd === b.isAdd) {\n    return [new NoOperation(0)];\n  }\n  return [a];\n});\nsetTransformation(SplitOperation, InsertOperation, (a, b) => {\n  if (a.splitPosition.hasSameParentAs(b.position) && a.splitPosition.offset < b.position.offset) {\n    a.howMany += b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedByInsertOperation(b);\n  a.insertionPosition = a.insertionPosition._getTransformedByInsertOperation(b);\n  return [a];\n});\nsetTransformation(SplitOperation, MergeOperation, (a, b, context) => {\n  if (!a.graveyardPosition && !context.bWasUndone && a.splitPosition.hasSameParentAs(b.sourcePosition)) {\n    const splitPath = b.graveyardPosition.path.slice();\n    splitPath.push(0);\n    const splitPosition = new Position2(b.graveyardPosition.root, splitPath);\n    const insertionPosition = SplitOperation.getInsertionPosition(new Position2(b.graveyardPosition.root, splitPath));\n    const additionalSplit = new SplitOperation(splitPosition, 0, insertionPosition, null, 0);\n    a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    a.graveyardPosition = additionalSplit.insertionPosition.clone();\n    a.graveyardPosition.stickiness = \"toNext\";\n    return [additionalSplit, a];\n  }\n  if (a.splitPosition.hasSameParentAs(b.deletionPosition) && !a.splitPosition.isAfter(b.deletionPosition)) {\n    a.howMany--;\n  }\n  if (a.splitPosition.hasSameParentAs(b.targetPosition)) {\n    a.howMany += b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedByMergeOperation(b);\n  a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  if (a.graveyardPosition) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMergeOperation(b);\n  }\n  return [a];\n});\nsetTransformation(SplitOperation, MoveOperation, (a, b, context) => {\n  const rangeToMove = Range2._createFromPositionAndShift(b.sourcePosition, b.howMany);\n  if (a.graveyardPosition) {\n    const gyElementMoved = rangeToMove.start.isEqual(a.graveyardPosition) || rangeToMove.containsPosition(a.graveyardPosition);\n    if (!context.bWasUndone && gyElementMoved) {\n      const sourcePosition = a.splitPosition._getTransformedByMoveOperation(b);\n      const newParentPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n      const newTargetPath = newParentPosition.path.slice();\n      newTargetPath.push(0);\n      const newTargetPosition = new Position2(newParentPosition.root, newTargetPath);\n      const moveOp = new MoveOperation(sourcePosition, a.howMany, newTargetPosition, 0);\n      return [moveOp];\n    }\n    a.graveyardPosition = a.graveyardPosition._getTransformedByMoveOperation(b);\n  }\n  const splitAtTarget = a.splitPosition.isEqual(b.targetPosition);\n  if (splitAtTarget && (context.baRelation == \"insertAtSource\" || context.abRelation == \"splitBefore\")) {\n    a.howMany += b.howMany;\n    a.splitPosition = a.splitPosition._getTransformedByDeletion(b.sourcePosition, b.howMany);\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    return [a];\n  }\n  if (splitAtTarget && context.abRelation && context.abRelation.howMany) {\n    const { howMany, offset } = context.abRelation;\n    a.howMany += howMany;\n    a.splitPosition = a.splitPosition.getShiftedBy(offset);\n    return [a];\n  }\n  if (a.splitPosition.hasSameParentAs(b.sourcePosition) && rangeToMove.containsPosition(a.splitPosition)) {\n    const howManyRemoved = b.howMany - (a.splitPosition.offset - b.sourcePosition.offset);\n    a.howMany -= howManyRemoved;\n    if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n      a.howMany += b.howMany;\n    }\n    a.splitPosition = b.sourcePosition.clone();\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n    return [a];\n  }\n  if (!b.sourcePosition.isEqual(b.targetPosition)) {\n    if (a.splitPosition.hasSameParentAs(b.sourcePosition) && a.splitPosition.offset <= b.sourcePosition.offset) {\n      a.howMany -= b.howMany;\n    }\n    if (a.splitPosition.hasSameParentAs(b.targetPosition) && a.splitPosition.offset < b.targetPosition.offset) {\n      a.howMany += b.howMany;\n    }\n  }\n  a.splitPosition.stickiness = \"toNone\";\n  a.splitPosition = a.splitPosition._getTransformedByMoveOperation(b);\n  a.splitPosition.stickiness = \"toNext\";\n  if (a.graveyardPosition) {\n    a.insertionPosition = a.insertionPosition._getTransformedByMoveOperation(b);\n  } else {\n    a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  }\n  return [a];\n});\nsetTransformation(SplitOperation, SplitOperation, (a, b, context) => {\n  if (a.splitPosition.isEqual(b.splitPosition)) {\n    if (!a.graveyardPosition && !b.graveyardPosition) {\n      return [new NoOperation(0)];\n    }\n    if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n      return [new NoOperation(0)];\n    }\n    if (context.abRelation == \"splitBefore\") {\n      a.howMany = 0;\n      a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n      return [a];\n    }\n  }\n  if (a.graveyardPosition && b.graveyardPosition && a.graveyardPosition.isEqual(b.graveyardPosition)) {\n    const aInGraveyard = a.splitPosition.root.rootName == \"$graveyard\";\n    const bInGraveyard = b.splitPosition.root.rootName == \"$graveyard\";\n    const aIsWeak = aInGraveyard && !bInGraveyard;\n    const bIsWeak = bInGraveyard && !aInGraveyard;\n    const forceMove = bIsWeak || !aIsWeak && context.aIsStrong;\n    if (forceMove) {\n      const result = [];\n      if (b.howMany) {\n        result.push(new MoveOperation(b.moveTargetPosition, b.howMany, b.splitPosition, 0));\n      }\n      if (a.howMany) {\n        result.push(new MoveOperation(a.splitPosition, a.howMany, a.moveTargetPosition, 0));\n      }\n      return result;\n    } else {\n      return [new NoOperation(0)];\n    }\n  }\n  if (a.graveyardPosition) {\n    a.graveyardPosition = a.graveyardPosition._getTransformedBySplitOperation(b);\n  }\n  if (a.splitPosition.isEqual(b.insertionPosition) && context.abRelation == \"splitBefore\") {\n    a.howMany++;\n    return [a];\n  }\n  if (b.splitPosition.isEqual(a.insertionPosition) && context.baRelation == \"splitBefore\") {\n    const newPositionPath = b.insertionPosition.path.slice();\n    newPositionPath.push(0);\n    const newPosition = new Position2(b.insertionPosition.root, newPositionPath);\n    const moveOp = new MoveOperation(a.insertionPosition, 1, newPosition, 0);\n    return [a, moveOp];\n  }\n  if (a.splitPosition.hasSameParentAs(b.splitPosition) && a.splitPosition.offset < b.splitPosition.offset) {\n    a.howMany -= b.howMany;\n  }\n  a.splitPosition = a.splitPosition._getTransformedBySplitOperation(b);\n  a.insertionPosition = SplitOperation.getInsertionPosition(a.splitPosition);\n  return [a];\n});\nfunction _moveTargetIntoMovedRange(a, b) {\n  return a.targetPosition._getTransformedByDeletion(b.sourcePosition, b.howMany) === null;\n}\nfunction _makeMoveOperationsFromRanges(ranges, targetPosition) {\n  const operations2 = [];\n  for (let i = 0; i < ranges.length; i++) {\n    const range = ranges[i];\n    const op = new MoveOperation(range.start, range.end.offset - range.start.offset, targetPosition, 0);\n    operations2.push(op);\n    for (let j = i + 1; j < ranges.length; j++) {\n      ranges[j] = ranges[j]._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany)[0];\n    }\n    targetPosition = targetPosition._getTransformedByMove(op.sourcePosition, op.targetPosition, op.howMany);\n  }\n  return operations2;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/liveposition.js\nvar LivePosition = class extends EmitterMixin(Position2) {\n  /**\n   * Creates a live position.\n   *\n   * @see module:engine/model/position~Position\n   */\n  constructor(root2, path, stickiness = \"toNone\") {\n    super(root2, path, stickiness);\n    if (!this.root.is(\"rootElement\")) {\n      throw new CKEditorError(\"model-liveposition-root-not-rootelement\", root2);\n    }\n    bindWithDocument2.call(this);\n  }\n  /**\n   * Unbinds all events previously bound by `LivePosition`. Use it whenever you don't need `LivePosition` instance\n   * anymore (i.e. when leaving scope in which it was declared or before re-assigning variable that was\n   * referring to it).\n   */\n  detach() {\n    this.stopListening();\n  }\n  /**\n   * Creates a {@link module:engine/model/position~Position position instance}, which is equal to this live position.\n   */\n  toPosition() {\n    return new Position2(this.root, this.path.slice(), this.stickiness);\n  }\n  /**\n   * Creates a `LivePosition` instance that is equal to position.\n   */\n  static fromPosition(position, stickiness) {\n    return new this(position.root, position.path.slice(), stickiness ? stickiness : position.stickiness);\n  }\n};\nLivePosition.prototype.is = function(type) {\n  return type === \"livePosition\" || type === \"model:livePosition\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n  type == \"position\" || type === \"model:position\";\n};\nfunction bindWithDocument2() {\n  this.listenTo(this.root.document.model, \"applyOperation\", (event, args) => {\n    const operation = args[0];\n    if (!operation.isDocumentOperation) {\n      return;\n    }\n    transform3.call(this, operation);\n  }, { priority: \"low\" });\n}\nfunction transform3(operation) {\n  const result = this.getTransformedByOperation(operation);\n  if (!this.isEqual(result)) {\n    const oldPosition = this.toPosition();\n    this.path = result.path;\n    this.root = result.root;\n    this.fire(\"change\", oldPosition);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/batch.js\nvar Batch = class {\n  /**\n   * Creates a batch instance.\n   *\n   * @see module:engine/model/model~Model#enqueueChange\n   * @see module:engine/model/model~Model#change\n   * @param type A set of flags that specify the type of the batch. Batch type can alter how some of the features work\n   * when encountering a given `Batch` instance (for example, when a feature listens to applied operations).\n   */\n  constructor(type = {}) {\n    if (typeof type === \"string\") {\n      type = type === \"transparent\" ? { isUndoable: false } : {};\n      logWarning(\"batch-constructor-deprecated-string-type\");\n    }\n    const { isUndoable = true, isLocal = true, isUndo = false, isTyping = false } = type;\n    this.operations = [];\n    this.isUndoable = isUndoable;\n    this.isLocal = isLocal;\n    this.isUndo = isUndo;\n    this.isTyping = isTyping;\n  }\n  /**\n   * The type of the batch.\n   *\n   * **This property has been deprecated and is always set to the `'default'` value.**\n   *\n   * It can be one of the following values:\n   * * `'default'` &ndash; All \"normal\" batches. This is the most commonly used type.\n   * * `'transparent'` &ndash; A batch that should be ignored by other features, i.e. an initial batch or collaborative editing\n   * changes.\n   *\n   * @deprecated\n   */\n  get type() {\n    logWarning(\"batch-type-deprecated\");\n    return \"default\";\n  }\n  /**\n   * Returns the base version of this batch, which is equal to the base version of the first operation in the batch.\n   * If there are no operations in the batch or neither operation has the base version set, it returns `null`.\n   */\n  get baseVersion() {\n    for (const op of this.operations) {\n      if (op.baseVersion !== null) {\n        return op.baseVersion;\n      }\n    }\n    return null;\n  }\n  /**\n   * Adds an operation to the batch instance.\n   *\n   * @param operation An operation to add.\n   * @returns The added operation.\n   */\n  addOperation(operation) {\n    operation.batch = this;\n    this.operations.push(operation);\n    return operation;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/differ.js\nvar Differ = class {\n  /**\n   * Creates a `Differ` instance.\n   *\n   * @param markerCollection Model's marker collection.\n   */\n  constructor(markerCollection) {\n    this._changesInElement = /* @__PURE__ */ new Map();\n    this._elementSnapshots = /* @__PURE__ */ new Map();\n    this._changedMarkers = /* @__PURE__ */ new Map();\n    this._changedRoots = /* @__PURE__ */ new Map();\n    this._changeCount = 0;\n    this._cachedChanges = null;\n    this._cachedChangesWithGraveyard = null;\n    this._refreshedItems = /* @__PURE__ */ new Set();\n    this._markerCollection = markerCollection;\n  }\n  /**\n   * Informs whether there are any changes buffered in `Differ`.\n   */\n  get isEmpty() {\n    return this._changesInElement.size == 0 && this._changedMarkers.size == 0 && this._changedRoots.size == 0;\n  }\n  /**\n   * Buffers the given operation. An operation has to be buffered before it is executed.\n   *\n   * @param operationToBuffer An operation to buffer.\n   */\n  bufferOperation(operationToBuffer) {\n    const operation = operationToBuffer;\n    switch (operation.type) {\n      case \"insert\": {\n        if (this._isInInsertedElement(operation.position.parent)) {\n          return;\n        }\n        this._markInsert(operation.position.parent, operation.position.offset, operation.nodes.maxOffset);\n        break;\n      }\n      case \"addAttribute\":\n      case \"removeAttribute\":\n      case \"changeAttribute\": {\n        for (const item of operation.range.getItems({ shallow: true })) {\n          if (this._isInInsertedElement(item.parent)) {\n            continue;\n          }\n          this._markAttribute(item);\n        }\n        break;\n      }\n      case \"remove\":\n      case \"move\":\n      case \"reinsert\": {\n        if (operation.sourcePosition.isEqual(operation.targetPosition) || operation.sourcePosition.getShiftedBy(operation.howMany).isEqual(operation.targetPosition)) {\n          return;\n        }\n        const sourceParentInserted = this._isInInsertedElement(operation.sourcePosition.parent);\n        const targetParentInserted = this._isInInsertedElement(operation.targetPosition.parent);\n        if (!sourceParentInserted) {\n          this._markRemove(operation.sourcePosition.parent, operation.sourcePosition.offset, operation.howMany);\n        }\n        if (!targetParentInserted) {\n          this._markInsert(operation.targetPosition.parent, operation.getMovedRangeStart().offset, operation.howMany);\n        }\n        break;\n      }\n      case \"rename\": {\n        if (this._isInInsertedElement(operation.position.parent)) {\n          return;\n        }\n        this._markRemove(operation.position.parent, operation.position.offset, 1);\n        this._markInsert(operation.position.parent, operation.position.offset, 1);\n        const range = Range2._createFromPositionAndShift(operation.position, 1);\n        for (const marker of this._markerCollection.getMarkersIntersectingRange(range)) {\n          const markerData = marker.getData();\n          this.bufferMarkerChange(marker.name, markerData, markerData);\n        }\n        break;\n      }\n      case \"split\": {\n        const splitElement = operation.splitPosition.parent;\n        if (!this._isInInsertedElement(splitElement)) {\n          this._markRemove(splitElement, operation.splitPosition.offset, operation.howMany);\n        }\n        if (!this._isInInsertedElement(operation.insertionPosition.parent)) {\n          this._markInsert(operation.insertionPosition.parent, operation.insertionPosition.offset, 1);\n        }\n        if (operation.graveyardPosition) {\n          this._markRemove(operation.graveyardPosition.parent, operation.graveyardPosition.offset, 1);\n        }\n        break;\n      }\n      case \"merge\": {\n        const mergedElement = operation.sourcePosition.parent;\n        if (!this._isInInsertedElement(mergedElement.parent)) {\n          this._markRemove(mergedElement.parent, mergedElement.startOffset, 1);\n        }\n        const graveyardParent = operation.graveyardPosition.parent;\n        this._markInsert(graveyardParent, operation.graveyardPosition.offset, 1);\n        const mergedIntoElement = operation.targetPosition.parent;\n        if (!this._isInInsertedElement(mergedIntoElement)) {\n          this._markInsert(mergedIntoElement, operation.targetPosition.offset, mergedElement.maxOffset);\n        }\n        break;\n      }\n      case \"detachRoot\":\n      case \"addRoot\": {\n        const root2 = operation.affectedSelectable;\n        if (!root2._isLoaded) {\n          return;\n        }\n        if (root2.isAttached() == operation.isAdd) {\n          return;\n        }\n        this._bufferRootStateChange(operation.rootName, operation.isAdd);\n        break;\n      }\n      case \"addRootAttribute\":\n      case \"removeRootAttribute\":\n      case \"changeRootAttribute\": {\n        if (!operation.root._isLoaded) {\n          return;\n        }\n        const rootName = operation.root.rootName;\n        this._bufferRootAttributeChange(rootName, operation.key, operation.oldValue, operation.newValue);\n        break;\n      }\n    }\n    this._cachedChanges = null;\n  }\n  /**\n   * Buffers a marker change.\n   *\n   * @param markerName The name of the marker that changed.\n   * @param oldMarkerData Marker data before the change.\n   * @param newMarkerData Marker data after the change.\n   */\n  bufferMarkerChange(markerName, oldMarkerData, newMarkerData) {\n    if (oldMarkerData.range && oldMarkerData.range.root.is(\"rootElement\") && !oldMarkerData.range.root._isLoaded) {\n      oldMarkerData.range = null;\n    }\n    if (newMarkerData.range && newMarkerData.range.root.is(\"rootElement\") && !newMarkerData.range.root._isLoaded) {\n      newMarkerData.range = null;\n    }\n    let buffered = this._changedMarkers.get(markerName);\n    if (!buffered) {\n      buffered = { newMarkerData, oldMarkerData };\n      this._changedMarkers.set(markerName, buffered);\n    } else {\n      buffered.newMarkerData = newMarkerData;\n    }\n    if (buffered.oldMarkerData.range == null && newMarkerData.range == null) {\n      this._changedMarkers.delete(markerName);\n    }\n  }\n  /**\n   * Returns all markers that should be removed as a result of buffered changes.\n   *\n   * @returns Markers to remove. Each array item is an object containing the `name` and `range` properties.\n   */\n  getMarkersToRemove() {\n    const result = [];\n    for (const [name, change] of this._changedMarkers) {\n      if (change.oldMarkerData.range != null) {\n        result.push({ name, range: change.oldMarkerData.range });\n      }\n    }\n    return result;\n  }\n  /**\n   * Returns all markers which should be added as a result of buffered changes.\n   *\n   * @returns Markers to add. Each array item is an object containing the `name` and `range` properties.\n   */\n  getMarkersToAdd() {\n    const result = [];\n    for (const [name, change] of this._changedMarkers) {\n      if (change.newMarkerData.range != null) {\n        result.push({ name, range: change.newMarkerData.range });\n      }\n    }\n    return result;\n  }\n  /**\n   * Returns all markers which changed.\n   */\n  getChangedMarkers() {\n    return Array.from(this._changedMarkers).map(([name, change]) => ({\n      name,\n      data: {\n        oldRange: change.oldMarkerData.range,\n        newRange: change.newMarkerData.range\n      }\n    }));\n  }\n  /**\n   * Checks whether some of the buffered changes affect the editor data.\n   *\n   * Types of changes which affect the editor data:\n   *\n   * * model structure changes,\n   * * attribute changes,\n   * * a root is added or detached,\n   * * changes of markers which were defined as `affectsData`,\n   * * changes of markers' `affectsData` property.\n   */\n  hasDataChanges() {\n    if (this._changesInElement.size > 0) {\n      return true;\n    }\n    if (this._changedRoots.size > 0) {\n      return true;\n    }\n    for (const { newMarkerData, oldMarkerData } of this._changedMarkers.values()) {\n      if (newMarkerData.affectsData !== oldMarkerData.affectsData) {\n        return true;\n      }\n      if (newMarkerData.affectsData) {\n        const markerAdded = newMarkerData.range && !oldMarkerData.range;\n        const markerRemoved = !newMarkerData.range && oldMarkerData.range;\n        const markerChanged = newMarkerData.range && oldMarkerData.range && !newMarkerData.range.isEqual(oldMarkerData.range);\n        if (markerAdded || markerRemoved || markerChanged) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  /**\n   * Calculates the diff between the old model tree state (the state before the first buffered operations since the last {@link #reset}\n   * call) and the new model tree state (actual one). It should be called after all buffered operations are executed.\n   *\n   * The diff set is returned as an array of {@link module:engine/model/differ~DiffItem diff items}, each describing a change done\n   * on the model. The items are sorted by the position on which the change happened. If a position\n   * {@link module:engine/model/position~Position#isBefore is before} another one, it will be on an earlier index in the diff set.\n   *\n   * **Note**: Elements inside inserted element will not have a separate diff item, only the top most element change will be reported.\n   *\n   * Because calculating the diff is a costly operation, the result is cached. If no new operation was buffered since the\n   * previous {@link #getChanges} call, the next call will return the cached value.\n   *\n   * @param options Additional options.\n   * @param options.includeChangesInGraveyard If set to `true`, also changes that happened\n   * in the graveyard root will be returned. By default, changes in the graveyard root are not returned.\n   * @returns Diff between the old and the new model tree state.\n   */\n  getChanges(options = {}) {\n    if (this._cachedChanges) {\n      if (options.includeChangesInGraveyard) {\n        return this._cachedChangesWithGraveyard.slice();\n      } else {\n        return this._cachedChanges.slice();\n      }\n    }\n    let diffSet = [];\n    for (const element of this._changesInElement.keys()) {\n      const changes = this._changesInElement.get(element).sort((a, b) => {\n        if (a.offset === b.offset) {\n          if (a.type != b.type) {\n            return a.type == \"remove\" ? -1 : 1;\n          }\n          return 0;\n        }\n        return a.offset < b.offset ? -1 : 1;\n      });\n      const snapshotChildren = this._elementSnapshots.get(element);\n      const elementChildren = _getChildrenSnapshot(element.getChildren());\n      const actions = _generateActionsFromChanges(snapshotChildren.length, changes);\n      let i = 0;\n      let j = 0;\n      for (const action of actions) {\n        if (action === \"i\") {\n          diffSet.push(this._getInsertDiff(element, i, elementChildren[i]));\n          i++;\n        } else if (action === \"r\") {\n          diffSet.push(this._getRemoveDiff(element, i, snapshotChildren[j]));\n          j++;\n        } else if (action === \"a\") {\n          const elementAttributes = elementChildren[i].attributes;\n          const snapshotAttributes = snapshotChildren[j].attributes;\n          let range;\n          if (elementChildren[i].name == \"$text\") {\n            range = new Range2(Position2._createAt(element, i), Position2._createAt(element, i + 1));\n          } else {\n            const index = element.offsetToIndex(i);\n            range = new Range2(Position2._createAt(element, i), Position2._createAt(element.getChild(index), 0));\n          }\n          diffSet.push(...this._getAttributesDiff(range, snapshotAttributes, elementAttributes));\n          i++;\n          j++;\n        } else {\n          i++;\n          j++;\n        }\n      }\n    }\n    diffSet.sort((a, b) => {\n      if (a.position.root != b.position.root) {\n        return a.position.root.rootName < b.position.root.rootName ? -1 : 1;\n      }\n      if (a.position.isEqual(b.position)) {\n        return a.changeCount - b.changeCount;\n      }\n      return a.position.isBefore(b.position) ? -1 : 1;\n    });\n    for (let i = 1, prevIndex = 0; i < diffSet.length; i++) {\n      const prevDiff = diffSet[prevIndex];\n      const thisDiff = diffSet[i];\n      const isConsecutiveTextRemove = prevDiff.type == \"remove\" && thisDiff.type == \"remove\" && prevDiff.name == \"$text\" && thisDiff.name == \"$text\" && prevDiff.position.isEqual(thisDiff.position);\n      const isConsecutiveTextAdd = prevDiff.type == \"insert\" && thisDiff.type == \"insert\" && prevDiff.name == \"$text\" && thisDiff.name == \"$text\" && prevDiff.position.parent == thisDiff.position.parent && prevDiff.position.offset + prevDiff.length == thisDiff.position.offset;\n      const isConsecutiveAttributeChange = prevDiff.type == \"attribute\" && thisDiff.type == \"attribute\" && prevDiff.position.parent == thisDiff.position.parent && prevDiff.range.isFlat && thisDiff.range.isFlat && prevDiff.position.offset + prevDiff.length == thisDiff.position.offset && prevDiff.attributeKey == thisDiff.attributeKey && prevDiff.attributeOldValue == thisDiff.attributeOldValue && prevDiff.attributeNewValue == thisDiff.attributeNewValue;\n      if (isConsecutiveTextRemove || isConsecutiveTextAdd || isConsecutiveAttributeChange) {\n        prevDiff.length++;\n        if (isConsecutiveAttributeChange) {\n          prevDiff.range.end = prevDiff.range.end.getShiftedBy(1);\n        }\n        diffSet[i] = null;\n      } else {\n        prevIndex = i;\n      }\n    }\n    diffSet = diffSet.filter((v) => v);\n    for (const item of diffSet) {\n      delete item.changeCount;\n      if (item.type == \"attribute\") {\n        delete item.position;\n        delete item.length;\n      }\n    }\n    this._changeCount = 0;\n    this._cachedChangesWithGraveyard = diffSet;\n    this._cachedChanges = diffSet.filter(_changesInGraveyardFilter);\n    if (options.includeChangesInGraveyard) {\n      return this._cachedChangesWithGraveyard.slice();\n    } else {\n      return this._cachedChanges.slice();\n    }\n  }\n  /**\n   * Returns all roots that have changed (either were attached, or detached, or their attributes changed).\n   *\n   * @returns Diff between the old and the new roots state.\n   */\n  getChangedRoots() {\n    return Array.from(this._changedRoots.values()).map((diffItem) => {\n      const entry = { ...diffItem };\n      if (entry.state !== void 0) {\n        delete entry.attributes;\n      }\n      return entry;\n    });\n  }\n  /**\n   * Returns a set of model items that were marked to get refreshed.\n   */\n  getRefreshedItems() {\n    return new Set(this._refreshedItems);\n  }\n  /**\n   * Resets `Differ`. Removes all buffered changes.\n   */\n  reset() {\n    this._changesInElement.clear();\n    this._elementSnapshots.clear();\n    this._changedMarkers.clear();\n    this._changedRoots.clear();\n    this._refreshedItems = /* @__PURE__ */ new Set();\n    this._cachedChanges = null;\n  }\n  /**\n   * Buffers the root state change after the root was attached or detached\n   */\n  _bufferRootStateChange(rootName, isAttached) {\n    if (!this._changedRoots.has(rootName)) {\n      this._changedRoots.set(rootName, { name: rootName, state: isAttached ? \"attached\" : \"detached\" });\n      return;\n    }\n    const diffItem = this._changedRoots.get(rootName);\n    if (diffItem.state !== void 0) {\n      delete diffItem.state;\n      if (diffItem.attributes === void 0) {\n        this._changedRoots.delete(rootName);\n      }\n    } else {\n      diffItem.state = isAttached ? \"attached\" : \"detached\";\n    }\n  }\n  /**\n   * Buffers a root attribute change.\n   */\n  _bufferRootAttributeChange(rootName, key, oldValue, newValue) {\n    const diffItem = this._changedRoots.get(rootName) || { name: rootName };\n    const attrs = diffItem.attributes || {};\n    if (attrs[key]) {\n      const attrEntry = attrs[key];\n      if (newValue === attrEntry.oldValue) {\n        delete attrs[key];\n      } else {\n        attrEntry.newValue = newValue;\n      }\n    } else {\n      attrs[key] = { oldValue, newValue };\n    }\n    if (Object.entries(attrs).length === 0) {\n      delete diffItem.attributes;\n      if (diffItem.state === void 0) {\n        this._changedRoots.delete(rootName);\n      }\n    } else {\n      diffItem.attributes = attrs;\n      this._changedRoots.set(rootName, diffItem);\n    }\n  }\n  /**\n   * Marks the given `item` in differ to be \"refreshed\". It means that the item will be marked as removed and inserted\n   * in the differ changes set, so it will be effectively re-converted when the differ changes are handled by a dispatcher.\n   *\n   * @internal\n   * @param item Item to refresh.\n   */\n  _refreshItem(item) {\n    if (this._isInInsertedElement(item.parent)) {\n      return;\n    }\n    this._markRemove(item.parent, item.startOffset, item.offsetSize);\n    this._markInsert(item.parent, item.startOffset, item.offsetSize);\n    this._refreshedItems.add(item);\n    const range = Range2._createOn(item);\n    for (const marker of this._markerCollection.getMarkersIntersectingRange(range)) {\n      const markerData = marker.getData();\n      this.bufferMarkerChange(marker.name, markerData, markerData);\n    }\n    this._cachedChanges = null;\n  }\n  /**\n   * Buffers all the data related to given root like it was all just added to the editor.\n   *\n   * Following changes are buffered:\n   *\n   * * root is attached,\n   * * all root content is inserted,\n   * * all root attributes are added,\n   * * all markers inside the root are added.\n   *\n   * @internal\n   */\n  _bufferRootLoad(root2) {\n    if (!root2.isAttached()) {\n      return;\n    }\n    this._bufferRootStateChange(root2.rootName, true);\n    this._markInsert(root2, 0, root2.maxOffset);\n    for (const key of root2.getAttributeKeys()) {\n      this._bufferRootAttributeChange(root2.rootName, key, null, root2.getAttribute(key));\n    }\n    for (const marker of this._markerCollection) {\n      if (marker.getRange().root == root2) {\n        const markerData = marker.getData();\n        this.bufferMarkerChange(marker.name, { ...markerData, range: null }, markerData);\n      }\n    }\n  }\n  /**\n   * Saves and handles an insert change.\n   */\n  _markInsert(parent2, offset, howMany) {\n    if (parent2.root.is(\"rootElement\") && !parent2.root._isLoaded) {\n      return;\n    }\n    const changeItem = { type: \"insert\", offset, howMany, count: this._changeCount++ };\n    this._markChange(parent2, changeItem);\n  }\n  /**\n   * Saves and handles a remove change.\n   */\n  _markRemove(parent2, offset, howMany) {\n    if (parent2.root.is(\"rootElement\") && !parent2.root._isLoaded) {\n      return;\n    }\n    const changeItem = { type: \"remove\", offset, howMany, count: this._changeCount++ };\n    this._markChange(parent2, changeItem);\n    this._removeAllNestedChanges(parent2, offset, howMany);\n  }\n  /**\n   * Saves and handles an attribute change.\n   */\n  _markAttribute(item) {\n    if (item.root.is(\"rootElement\") && !item.root._isLoaded) {\n      return;\n    }\n    const changeItem = { type: \"attribute\", offset: item.startOffset, howMany: item.offsetSize, count: this._changeCount++ };\n    this._markChange(item.parent, changeItem);\n  }\n  /**\n   * Saves and handles a model change.\n   */\n  _markChange(parent2, changeItem) {\n    this._makeSnapshot(parent2);\n    const changes = this._getChangesForElement(parent2);\n    this._handleChange(changeItem, changes);\n    changes.push(changeItem);\n    for (let i = 0; i < changes.length; i++) {\n      if (changes[i].howMany < 1) {\n        changes.splice(i, 1);\n        i--;\n      }\n    }\n  }\n  /**\n   * Gets an array of changes that have already been saved for a given element.\n   */\n  _getChangesForElement(element) {\n    let changes;\n    if (this._changesInElement.has(element)) {\n      changes = this._changesInElement.get(element);\n    } else {\n      changes = [];\n      this._changesInElement.set(element, changes);\n    }\n    return changes;\n  }\n  /**\n   * Saves a children snapshot for a given element.\n   */\n  _makeSnapshot(element) {\n    if (!this._elementSnapshots.has(element)) {\n      this._elementSnapshots.set(element, _getChildrenSnapshot(element.getChildren()));\n    }\n  }\n  /**\n   * For a given newly saved change, compares it with a change already done on the element and modifies the incoming\n   * change and/or the old change.\n   *\n   * @param inc Incoming (new) change.\n   * @param changes An array containing all the changes done on that element.\n   */\n  _handleChange(inc, changes) {\n    inc.nodesToHandle = inc.howMany;\n    for (const old of changes) {\n      const incEnd = inc.offset + inc.howMany;\n      const oldEnd = old.offset + old.howMany;\n      if (inc.type == \"insert\") {\n        if (old.type == \"insert\") {\n          if (inc.offset <= old.offset) {\n            old.offset += inc.howMany;\n          } else if (inc.offset < oldEnd) {\n            old.howMany += inc.nodesToHandle;\n            inc.nodesToHandle = 0;\n          }\n        }\n        if (old.type == \"remove\") {\n          if (inc.offset < old.offset) {\n            old.offset += inc.howMany;\n          }\n        }\n        if (old.type == \"attribute\") {\n          if (inc.offset <= old.offset) {\n            old.offset += inc.howMany;\n          } else if (inc.offset < oldEnd) {\n            const howMany = old.howMany;\n            old.howMany = inc.offset - old.offset;\n            changes.unshift({\n              type: \"attribute\",\n              offset: incEnd,\n              howMany: howMany - old.howMany,\n              count: this._changeCount++\n            });\n          }\n        }\n      }\n      if (inc.type == \"remove\") {\n        if (old.type == \"insert\") {\n          if (incEnd <= old.offset) {\n            old.offset -= inc.howMany;\n          } else if (incEnd <= oldEnd) {\n            if (inc.offset < old.offset) {\n              const intersectionLength = incEnd - old.offset;\n              old.offset = inc.offset;\n              old.howMany -= intersectionLength;\n              inc.nodesToHandle -= intersectionLength;\n            } else {\n              old.howMany -= inc.nodesToHandle;\n              inc.nodesToHandle = 0;\n            }\n          } else {\n            if (inc.offset <= old.offset) {\n              inc.nodesToHandle -= old.howMany;\n              old.howMany = 0;\n            } else if (inc.offset < oldEnd) {\n              const intersectionLength = oldEnd - inc.offset;\n              old.howMany -= intersectionLength;\n              inc.nodesToHandle -= intersectionLength;\n            }\n          }\n        }\n        if (old.type == \"remove\") {\n          if (incEnd <= old.offset) {\n            old.offset -= inc.howMany;\n          } else if (inc.offset < old.offset) {\n            inc.nodesToHandle += old.howMany;\n            old.howMany = 0;\n          }\n        }\n        if (old.type == \"attribute\") {\n          if (incEnd <= old.offset) {\n            old.offset -= inc.howMany;\n          } else if (inc.offset < old.offset) {\n            const intersectionLength = incEnd - old.offset;\n            old.offset = inc.offset;\n            old.howMany -= intersectionLength;\n          } else if (inc.offset < oldEnd) {\n            if (incEnd <= oldEnd) {\n              const howMany = old.howMany;\n              old.howMany = inc.offset - old.offset;\n              const howManyAfter = howMany - old.howMany - inc.nodesToHandle;\n              changes.unshift({\n                type: \"attribute\",\n                offset: inc.offset,\n                howMany: howManyAfter,\n                count: this._changeCount++\n              });\n            } else {\n              old.howMany -= oldEnd - inc.offset;\n            }\n          }\n        }\n      }\n      if (inc.type == \"attribute\") {\n        if (old.type == \"insert\") {\n          if (inc.offset < old.offset && incEnd > old.offset) {\n            if (incEnd > oldEnd) {\n              const attributePart = {\n                type: \"attribute\",\n                offset: oldEnd,\n                howMany: incEnd - oldEnd,\n                count: this._changeCount++\n              };\n              this._handleChange(attributePart, changes);\n              changes.push(attributePart);\n            }\n            inc.nodesToHandle = old.offset - inc.offset;\n            inc.howMany = inc.nodesToHandle;\n          } else if (inc.offset >= old.offset && inc.offset < oldEnd) {\n            if (incEnd > oldEnd) {\n              inc.nodesToHandle = incEnd - oldEnd;\n              inc.offset = oldEnd;\n            } else {\n              inc.nodesToHandle = 0;\n            }\n          }\n        }\n        if (old.type == \"remove\") {\n          if (inc.offset < old.offset && incEnd > old.offset) {\n            const attributePart = {\n              type: \"attribute\",\n              offset: old.offset,\n              howMany: incEnd - old.offset,\n              count: this._changeCount++\n            };\n            this._handleChange(attributePart, changes);\n            changes.push(attributePart);\n            inc.nodesToHandle = old.offset - inc.offset;\n            inc.howMany = inc.nodesToHandle;\n          }\n        }\n        if (old.type == \"attribute\") {\n          if (inc.offset >= old.offset && incEnd <= oldEnd) {\n            inc.nodesToHandle = 0;\n            inc.howMany = 0;\n            inc.offset = 0;\n          } else if (inc.offset <= old.offset && incEnd >= oldEnd) {\n            old.howMany = 0;\n          }\n        }\n      }\n    }\n    inc.howMany = inc.nodesToHandle;\n    delete inc.nodesToHandle;\n  }\n  /**\n   * Returns an object with a single insert change description.\n   *\n   * @param parent The element in which the change happened.\n   * @param offset The offset at which change happened.\n   * @param elementSnapshot The snapshot of the removed element a character.\n   * @returns The diff item.\n   */\n  _getInsertDiff(parent2, offset, elementSnapshot) {\n    return {\n      type: \"insert\",\n      position: Position2._createAt(parent2, offset),\n      name: elementSnapshot.name,\n      attributes: new Map(elementSnapshot.attributes),\n      length: 1,\n      changeCount: this._changeCount++,\n      _element: elementSnapshot.element\n    };\n  }\n  /**\n   * Returns an object with a single remove change description.\n   *\n   * @param parent The element in which change happened.\n   * @param offset The offset at which change happened.\n   * @param elementSnapshot The snapshot of the removed element a character.\n   * @returns The diff item.\n   */\n  _getRemoveDiff(parent2, offset, elementSnapshot) {\n    return {\n      type: \"remove\",\n      position: Position2._createAt(parent2, offset),\n      name: elementSnapshot.name,\n      attributes: new Map(elementSnapshot.attributes),\n      length: 1,\n      changeCount: this._changeCount++,\n      _element: elementSnapshot.element\n    };\n  }\n  /**\n   * Returns an array of objects where each one is a single attribute change description.\n   *\n   * @param range The range where the change happened.\n   * @param oldAttributes A map, map iterator or compatible object that contains attributes before the change.\n   * @param newAttributes A map, map iterator or compatible object that contains attributes after the change.\n   * @returns An array containing one or more diff items.\n   */\n  _getAttributesDiff(range, oldAttributes, newAttributes) {\n    const diffs = [];\n    newAttributes = new Map(newAttributes);\n    for (const [key, oldValue] of oldAttributes) {\n      const newValue = newAttributes.has(key) ? newAttributes.get(key) : null;\n      if (newValue !== oldValue) {\n        diffs.push({\n          type: \"attribute\",\n          position: range.start,\n          range: range.clone(),\n          length: 1,\n          attributeKey: key,\n          attributeOldValue: oldValue,\n          attributeNewValue: newValue,\n          changeCount: this._changeCount++\n        });\n      }\n      newAttributes.delete(key);\n    }\n    for (const [key, newValue] of newAttributes) {\n      diffs.push({\n        type: \"attribute\",\n        position: range.start,\n        range: range.clone(),\n        length: 1,\n        attributeKey: key,\n        attributeOldValue: null,\n        attributeNewValue: newValue,\n        changeCount: this._changeCount++\n      });\n    }\n    return diffs;\n  }\n  /**\n   * Checks whether given element or any of its parents is an element that is buffered as an inserted element.\n   */\n  _isInInsertedElement(element) {\n    const parent2 = element.parent;\n    if (!parent2) {\n      return false;\n    }\n    const changes = this._changesInElement.get(parent2);\n    const offset = element.startOffset;\n    if (changes) {\n      for (const change of changes) {\n        if (change.type == \"insert\" && offset >= change.offset && offset < change.offset + change.howMany) {\n          return true;\n        }\n      }\n    }\n    return this._isInInsertedElement(parent2);\n  }\n  /**\n   * Removes deeply all buffered changes that are registered in elements from range specified by `parent`, `offset`\n   * and `howMany`.\n   */\n  _removeAllNestedChanges(parent2, offset, howMany) {\n    const range = new Range2(Position2._createAt(parent2, offset), Position2._createAt(parent2, offset + howMany));\n    for (const item of range.getItems({ shallow: true })) {\n      if (item.is(\"element\")) {\n        this._elementSnapshots.delete(item);\n        this._changesInElement.delete(item);\n        this._removeAllNestedChanges(item, 0, item.maxOffset);\n      }\n    }\n  }\n};\nfunction _getChildrenSnapshot(children) {\n  const snapshot = [];\n  for (const child of children) {\n    if (child.is(\"$text\")) {\n      for (let i = 0; i < child.data.length; i++) {\n        snapshot.push({\n          name: \"$text\",\n          attributes: new Map(child.getAttributes())\n        });\n      }\n    } else {\n      snapshot.push({\n        name: child.name,\n        attributes: new Map(child.getAttributes()),\n        element: child\n      });\n    }\n  }\n  return snapshot;\n}\nfunction _generateActionsFromChanges(oldChildrenLength, changes) {\n  const actions = [];\n  let offset = 0;\n  let oldChildrenHandled = 0;\n  for (const change of changes) {\n    if (change.offset > offset) {\n      for (let i = 0; i < change.offset - offset; i++) {\n        actions.push(\"e\");\n      }\n      oldChildrenHandled += change.offset - offset;\n    }\n    if (change.type == \"insert\") {\n      for (let i = 0; i < change.howMany; i++) {\n        actions.push(\"i\");\n      }\n      offset = change.offset + change.howMany;\n    } else if (change.type == \"remove\") {\n      for (let i = 0; i < change.howMany; i++) {\n        actions.push(\"r\");\n      }\n      offset = change.offset;\n      oldChildrenHandled += change.howMany;\n    } else {\n      actions.push(...\"a\".repeat(change.howMany).split(\"\"));\n      offset = change.offset + change.howMany;\n      oldChildrenHandled += change.howMany;\n    }\n  }\n  if (oldChildrenHandled < oldChildrenLength) {\n    for (let i = 0; i < oldChildrenLength - oldChildrenHandled - offset; i++) {\n      actions.push(\"e\");\n    }\n  }\n  return actions;\n}\nfunction _changesInGraveyardFilter(entry) {\n  const posInGy = \"position\" in entry && entry.position.root.rootName == \"$graveyard\";\n  const rangeInGy = \"range\" in entry && entry.range.root.rootName == \"$graveyard\";\n  return !posInGy && !rangeInGy;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/history.js\nvar History = class {\n  constructor() {\n    this._operations = [];\n    this._undoPairs = /* @__PURE__ */ new Map();\n    this._undoneOperations = /* @__PURE__ */ new Set();\n    this._baseVersionToOperationIndex = /* @__PURE__ */ new Map();\n    this._version = 0;\n    this._gaps = /* @__PURE__ */ new Map();\n  }\n  /**\n   * The version of the last operation in the history.\n   *\n   * The history version is incremented automatically when a new operation is added to the history.\n   * Setting the version manually should be done only in rare circumstances when a gap is planned\n   * between history versions. When doing so, a gap will be created and the history will accept adding\n   * an operation with base version equal to the new history version.\n   */\n  get version() {\n    return this._version;\n  }\n  set version(version2) {\n    if (this._operations.length && version2 > this._version + 1) {\n      this._gaps.set(this._version, version2);\n    }\n    this._version = version2;\n  }\n  /**\n   * The last history operation.\n   */\n  get lastOperation() {\n    return this._operations[this._operations.length - 1];\n  }\n  /**\n   * Adds an operation to the history and increments the history version.\n   *\n   * The operation's base version should be equal to the history version. Otherwise an error is thrown.\n   */\n  addOperation(operation) {\n    if (operation.baseVersion !== this.version) {\n      throw new CKEditorError(\"model-document-history-addoperation-incorrect-version\", this, {\n        operation,\n        historyVersion: this.version\n      });\n    }\n    this._operations.push(operation);\n    this._version++;\n    this._baseVersionToOperationIndex.set(operation.baseVersion, this._operations.length - 1);\n  }\n  /**\n   * Returns operations from the given range of operation base versions that were added to the history.\n   *\n   * Note that there may be gaps in operations base versions.\n   *\n   * @param fromBaseVersion Base version from which operations should be returned (inclusive).\n   * @param toBaseVersion Base version up to which operations should be returned (exclusive).\n   * @returns History operations for the given range, in chronological order.\n   */\n  getOperations(fromBaseVersion, toBaseVersion = this.version) {\n    if (!this._operations.length) {\n      return [];\n    }\n    const firstOperation = this._operations[0];\n    if (fromBaseVersion === void 0) {\n      fromBaseVersion = firstOperation.baseVersion;\n    }\n    let inclusiveTo = toBaseVersion - 1;\n    for (const [gapFrom, gapTo] of this._gaps) {\n      if (fromBaseVersion > gapFrom && fromBaseVersion < gapTo) {\n        fromBaseVersion = gapTo;\n      }\n      if (inclusiveTo > gapFrom && inclusiveTo < gapTo) {\n        inclusiveTo = gapFrom - 1;\n      }\n    }\n    if (inclusiveTo < firstOperation.baseVersion || fromBaseVersion > this.lastOperation.baseVersion) {\n      return [];\n    }\n    let fromIndex = this._baseVersionToOperationIndex.get(fromBaseVersion);\n    if (fromIndex === void 0) {\n      fromIndex = 0;\n    }\n    let toIndex = this._baseVersionToOperationIndex.get(inclusiveTo);\n    if (toIndex === void 0) {\n      toIndex = this._operations.length - 1;\n    }\n    return this._operations.slice(\n      fromIndex,\n      // The `toIndex` should be included in the returned operations, so add `1`.\n      toIndex + 1\n    );\n  }\n  /**\n   * Returns operation from the history that bases on given `baseVersion`.\n   *\n   * @param baseVersion Base version of the operation to get.\n   * @returns Operation with given base version or `undefined` if there is no such operation in history.\n   */\n  getOperation(baseVersion) {\n    const operationIndex = this._baseVersionToOperationIndex.get(baseVersion);\n    if (operationIndex === void 0) {\n      return;\n    }\n    return this._operations[operationIndex];\n  }\n  /**\n   * Marks in history that one operation is an operation that is undoing the other operation. By marking operation this way,\n   * history is keeping more context information about operations, which helps in operational transformation.\n   *\n   * @param undoneOperation Operation which is undone by `undoingOperation`.\n   * @param undoingOperation Operation which undoes `undoneOperation`.\n   */\n  setOperationAsUndone(undoneOperation, undoingOperation) {\n    this._undoPairs.set(undoingOperation, undoneOperation);\n    this._undoneOperations.add(undoneOperation);\n  }\n  /**\n   * Checks whether given `operation` is undoing any other operation.\n   *\n   * @param operation Operation to check.\n   * @returns `true` if given `operation` is undoing any other operation, `false` otherwise.\n   */\n  isUndoingOperation(operation) {\n    return this._undoPairs.has(operation);\n  }\n  /**\n   * Checks whether given `operation` has been undone by any other operation.\n   *\n   * @param operation Operation to check.\n   * @returns `true` if given `operation` has been undone any other operation, `false` otherwise.\n   */\n  isUndoneOperation(operation) {\n    return this._undoneOperations.has(operation);\n  }\n  /**\n   * For given `undoingOperation`, returns the operation which has been undone by it.\n   *\n   * @returns Operation that has been undone by given `undoingOperation` or `undefined`\n   * if given `undoingOperation` is not undoing any other operation.\n   */\n  getUndoneOperation(undoingOperation) {\n    return this._undoPairs.get(undoingOperation);\n  }\n  /**\n   * Resets the history of operations.\n   */\n  reset() {\n    this._version = 0;\n    this._undoPairs = /* @__PURE__ */ new Map();\n    this._operations = [];\n    this._undoneOperations = /* @__PURE__ */ new Set();\n    this._gaps = /* @__PURE__ */ new Map();\n    this._baseVersionToOperationIndex = /* @__PURE__ */ new Map();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/rootelement.js\nvar RootElement = class extends Element2 {\n  /**\n   * Creates root element.\n   *\n   * @param document Document that is an owner of this root.\n   * @param name Node name.\n   * @param rootName Unique root name used to identify this root element by {@link module:engine/model/document~Document}.\n   */\n  constructor(document2, name, rootName = \"main\") {\n    super(name);\n    this._isAttached = true;\n    this._isLoaded = true;\n    this._document = document2;\n    this.rootName = rootName;\n  }\n  /**\n   * {@link module:engine/model/document~Document Document} that owns this root element.\n   */\n  get document() {\n    return this._document;\n  }\n  /**\n   * Informs if the root element is currently attached to the document, or not.\n   *\n   * A detached root is equivalent to being removed and cannot contain any children or markers.\n   *\n   * By default, a newly added root is attached. It can be detached using\n   * {@link module:engine/model/writer~Writer#detachRoot `Writer#detachRoot`}. A detached root can be re-attached again using\n   * {@link module:engine/model/writer~Writer#addRoot `Writer#addRoot`}.\n   */\n  isAttached() {\n    return this._isAttached;\n  }\n  /**\n   * Converts `RootElement` instance to `string` containing its name.\n   *\n   * @returns `RootElement` instance converted to `string`.\n   */\n  toJSON() {\n    return this.rootName;\n  }\n};\nRootElement.prototype.is = function(type, name) {\n  if (!name) {\n    return type === \"rootElement\" || type === \"model:rootElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n    type === \"element\" || type === \"model:element\" || type === \"node\" || type === \"model:node\";\n  }\n  return name === this.name && (type === \"rootElement\" || type === \"model:rootElement\" || // From super.is(). This is highly utilised method and cannot call super. See ckeditor/ckeditor5#6529.\n  type === \"element\" || type === \"model:element\");\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/document.js\nvar graveyardName = \"$graveyard\";\nvar Document2 = class extends EmitterMixin() {\n  /**\n   * Creates an empty document instance with no {@link #roots} (other than\n   * the {@link #graveyard graveyard root}).\n   */\n  constructor(model) {\n    super();\n    this.model = model;\n    this.history = new History();\n    this.selection = new DocumentSelection2(this);\n    this.roots = new Collection({ idProperty: \"rootName\" });\n    this.differ = new Differ(model.markers);\n    this.isReadOnly = false;\n    this._postFixers = /* @__PURE__ */ new Set();\n    this._hasSelectionChangedFromTheLastChangeBlock = false;\n    this.createRoot(\"$root\", graveyardName);\n    this.listenTo(model, \"applyOperation\", (evt, args) => {\n      const operation = args[0];\n      if (operation.isDocumentOperation) {\n        this.differ.bufferOperation(operation);\n      }\n    }, { priority: \"high\" });\n    this.listenTo(model, \"applyOperation\", (evt, args) => {\n      const operation = args[0];\n      if (operation.isDocumentOperation) {\n        this.history.addOperation(operation);\n      }\n    }, { priority: \"low\" });\n    this.listenTo(this.selection, \"change\", () => {\n      this._hasSelectionChangedFromTheLastChangeBlock = true;\n    });\n    this.listenTo(model.markers, \"update\", (evt, marker, oldRange, newRange, oldMarkerData) => {\n      const newMarkerData = { ...marker.getData(), range: newRange };\n      this.differ.bufferMarkerChange(marker.name, oldMarkerData, newMarkerData);\n      if (oldRange === null) {\n        marker.on(\"change\", (evt2, oldRange2) => {\n          const markerData = marker.getData();\n          this.differ.bufferMarkerChange(marker.name, { ...markerData, range: oldRange2 }, markerData);\n        });\n      }\n    });\n    this.registerPostFixer((writer) => {\n      let result = false;\n      for (const root2 of this.roots) {\n        if (!root2.isAttached() && !root2.isEmpty) {\n          writer.remove(writer.createRangeIn(root2));\n          result = true;\n        }\n      }\n      for (const marker of this.model.markers) {\n        if (!marker.getRange().root.isAttached()) {\n          writer.removeMarker(marker);\n          result = true;\n        }\n      }\n      return result;\n    });\n  }\n  /**\n   * The document version. Every applied operation increases the version number. It is used to\n   * ensure that operations are applied on a proper document version.\n   *\n   * This property is equal to {@link module:engine/model/history~History#version `model.Document#history#version`}.\n   *\n   * If the {@link module:engine/model/operation/operation~Operation#baseVersion base version} does not match the document version,\n   * a {@link module:utils/ckeditorerror~CKEditorError model-document-applyoperation-wrong-version} error is thrown.\n   */\n  get version() {\n    return this.history.version;\n  }\n  set version(version2) {\n    this.history.version = version2;\n  }\n  /**\n   * The graveyard tree root. A document always has a graveyard root that stores removed nodes.\n   */\n  get graveyard() {\n    return this.getRoot(graveyardName);\n  }\n  /**\n   * Creates a new root.\n   *\n   * **Note:** do not use this method after the editor has been initialized! If you want to dynamically add a root, use\n   * {@link module:engine/model/writer~Writer#addRoot `model.Writer#addRoot`} instead.\n   *\n   * @param elementName The element name. Defaults to `'$root'` which also has some basic schema defined\n   * (e.g. `$block` elements are allowed inside the `$root`). Make sure to define a proper schema if you use a different name.\n   * @param rootName A unique root name.\n   * @returns The created root.\n   */\n  createRoot(elementName = \"$root\", rootName = \"main\") {\n    if (this.roots.get(rootName)) {\n      throw new CKEditorError(\"model-document-createroot-name-exists\", this, { name: rootName });\n    }\n    const root2 = new RootElement(this, elementName, rootName);\n    this.roots.add(root2);\n    return root2;\n  }\n  /**\n   * Removes all event listeners set by the document instance.\n   */\n  destroy() {\n    this.selection.destroy();\n    this.stopListening();\n  }\n  /**\n   * Returns a root by its name.\n   *\n   * Detached roots are returned by this method. This is to be able to operate on the detached root (for example, to be able to create\n   * a position inside such a root for undo feature purposes).\n   *\n   * @param name The root name of the root to return.\n   * @returns The root registered under a given name or `null` when there is no root with the given name.\n   */\n  getRoot(name = \"main\") {\n    return this.roots.get(name);\n  }\n  /**\n   * Returns an array with names of all roots added to the document (except the {@link #graveyard graveyard root}).\n   *\n   * Detached roots **are not** returned by this method by default. This is to make sure that all features or algorithms that operate\n   * on the document data know which roots are still a part of the document and should be processed.\n   *\n   * @param includeDetached Specified whether detached roots should be returned as well.\n   */\n  getRootNames(includeDetached = false) {\n    return this.getRoots(includeDetached).map((root2) => root2.rootName);\n  }\n  /**\n   * Returns an array with all roots added to the document (except the {@link #graveyard graveyard root}).\n   *\n   * Detached roots **are not** returned by this method by default. This is to make sure that all features or algorithms that operate\n   * on the document data know which roots are still a part of the document and should be processed.\n   *\n   * @param includeDetached Specified whether detached roots should be returned as well.\n   */\n  getRoots(includeDetached = false) {\n    return this.roots.filter((root2) => root2 != this.graveyard && (includeDetached || root2.isAttached()) && root2._isLoaded);\n  }\n  /**\n   * Used to register a post-fixer callback. A post-fixer mechanism guarantees that the features\n   * will operate on a correct model state.\n   *\n   * An execution of a feature may lead to an incorrect document tree state. The callbacks are used to fix the document tree after\n   * it has changed. Post-fixers are fired just after all changes from the outermost change block were applied but\n   * before the {@link module:engine/model/document~Document#event:change change event} is fired. If a post-fixer callback made\n   * a change, it should return `true`. When this happens, all post-fixers are fired again to check if something else should\n   * not be fixed in the new document tree state.\n   *\n   * As a parameter, a post-fixer callback receives a {@link module:engine/model/writer~Writer writer} instance connected with the\n   * executed changes block. Thanks to that, all changes done by the callback will be added to the same\n   * {@link module:engine/model/batch~Batch batch} (and undo step) as the original changes. This makes post-fixer changes transparent\n   * for the user.\n   *\n   * An example of a post-fixer is a callback that checks if all the data were removed from the editor. If so, the\n   * callback should add an empty paragraph so that the editor is never empty:\n   *\n   * ```ts\n   * document.registerPostFixer( writer => {\n   * \tconst changes = document.differ.getChanges();\n   *\n   * \t// Check if the changes lead to an empty root in the editor.\n   * \tfor ( const entry of changes ) {\n   * \t\tif ( entry.type == 'remove' && entry.position.root.isEmpty ) {\n   * \t\t\twriter.insertElement( 'paragraph', entry.position.root, 0 );\n   *\n   * \t\t\t// It is fine to return early, even if multiple roots would need to be fixed.\n   * \t\t\t// All post-fixers will be fired again, so if there are more empty roots, those will be fixed, too.\n   * \t\t\treturn true;\n   * \t\t}\n   * \t}\n   *\n   * \treturn false;\n   * } );\n   * ```\n   */\n  registerPostFixer(postFixer) {\n    this._postFixers.add(postFixer);\n  }\n  /**\n   * A custom `toJSON()` method to solve child-parent circular dependencies.\n   *\n   * @returns A clone of this object with the document property changed to a string.\n   */\n  toJSON() {\n    const json = clone_default(this);\n    json.selection = \"[engine.model.DocumentSelection]\";\n    json.model = \"[engine.model.Model]\";\n    return json;\n  }\n  /**\n   * Check if there were any changes done on document, and if so, call post-fixers,\n   * fire `change` event for features and conversion and then reset the differ.\n   * Fire `change:data` event when at least one operation or buffered marker changes the data.\n   *\n   * @internal\n   * @fires change\n   * @fires change:data\n   * @param writer The writer on which post-fixers will be called.\n   */\n  _handleChangeBlock(writer) {\n    if (this._hasDocumentChangedFromTheLastChangeBlock()) {\n      this._callPostFixers(writer);\n      this.selection.refresh();\n      if (this.differ.hasDataChanges()) {\n        this.fire(\"change:data\", writer.batch);\n      } else {\n        this.fire(\"change\", writer.batch);\n      }\n      this.selection.refresh();\n      this.differ.reset();\n    }\n    this._hasSelectionChangedFromTheLastChangeBlock = false;\n  }\n  /**\n   * Returns whether there is a buffered change or if the selection has changed from the last\n   * {@link module:engine/model/model~Model#enqueueChange `enqueueChange()` block}\n   * or {@link module:engine/model/model~Model#change `change()` block}.\n   *\n   * @returns Returns `true` if document has changed from the last `change()` or `enqueueChange()` block.\n   */\n  _hasDocumentChangedFromTheLastChangeBlock() {\n    return !this.differ.isEmpty || this._hasSelectionChangedFromTheLastChangeBlock;\n  }\n  /**\n   * Returns the default root for this document which is either the first root that was added to the document using\n   * {@link #createRoot} or the {@link #graveyard graveyard root} if no other roots were created.\n   *\n   * @returns The default root for this document.\n   */\n  _getDefaultRoot() {\n    const roots = this.getRoots();\n    return roots.length ? roots[0] : this.graveyard;\n  }\n  /**\n   * Returns the default range for this selection. The default range is a collapsed range that starts and ends\n   * at the beginning of this selection's document {@link #_getDefaultRoot default root}.\n   *\n   * @internal\n   */\n  _getDefaultRange() {\n    const defaultRoot = this._getDefaultRoot();\n    const model = this.model;\n    const schema = model.schema;\n    const position = model.createPositionFromPath(defaultRoot, [0]);\n    const nearestRange = schema.getNearestSelectionRange(position);\n    return nearestRange || model.createRange(position);\n  }\n  /**\n   * Checks whether a given {@link module:engine/model/range~Range range} is a valid range for\n   * the {@link #selection document's selection}.\n   *\n   * @internal\n   * @param range A range to check.\n   * @returns `true` if `range` is valid, `false` otherwise.\n   */\n  _validateSelectionRange(range) {\n    return validateTextNodePosition(range.start) && validateTextNodePosition(range.end);\n  }\n  /**\n   * Performs post-fixer loops. Executes post-fixer callbacks as long as none of them has done any changes to the model.\n   *\n   * @param writer The writer on which post-fixer callbacks will be called.\n   */\n  _callPostFixers(writer) {\n    let wasFixed = false;\n    do {\n      for (const callback of this._postFixers) {\n        this.selection.refresh();\n        wasFixed = callback(writer);\n        if (wasFixed) {\n          break;\n        }\n      }\n    } while (wasFixed);\n  }\n};\nfunction validateTextNodePosition(rangeBoundary) {\n  const textNode = rangeBoundary.textNode;\n  if (textNode) {\n    const data = textNode.data;\n    const offset = rangeBoundary.offset - textNode.startOffset;\n    return !isInsideSurrogatePair(data, offset) && !isInsideCombinedSymbol(data, offset);\n  }\n  return true;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/markercollection.js\nvar MarkerCollection = class extends EmitterMixin() {\n  constructor() {\n    super(...arguments);\n    this._markers = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Iterable interface.\n   *\n   * Iterates over all {@link ~Marker markers} added to the collection.\n   */\n  [Symbol.iterator]() {\n    return this._markers.values();\n  }\n  /**\n   * Checks if given {@link ~Marker marker} or marker name is in the collection.\n   *\n   * @param markerOrName Name of marker or marker instance to check.\n   * @returns `true` if marker is in the collection, `false` otherwise.\n   */\n  has(markerOrName) {\n    const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n    return this._markers.has(markerName);\n  }\n  /**\n   * Returns {@link ~Marker marker} with given `markerName`.\n   *\n   * @param markerName Name of marker to get.\n   * @returns Marker with given name or `null` if such marker was\n   * not added to the collection.\n   */\n  get(markerName) {\n    return this._markers.get(markerName) || null;\n  }\n  /**\n   * Creates and adds a {@link ~Marker marker} to the `MarkerCollection` with given name on given\n   * {@link module:engine/model/range~Range range}.\n   *\n   * If `MarkerCollection` already had a marker with given name (or {@link ~Marker marker} was passed), the marker in\n   * collection is updated and {@link module:engine/model/markercollection~MarkerCollection#event:update} event is fired\n   * but only if there was a change (marker range or {@link module:engine/model/markercollection~Marker#managedUsingOperations}\n   * flag has changed.\n   *\n   * @internal\n   * @fires update\n   * @param markerOrName Name of marker to set or marker instance to update.\n   * @param range Marker range.\n   * @param managedUsingOperations Specifies whether the marker is managed using operations.\n   * @param affectsData Specifies whether the marker affects the data produced by the data pipeline\n   * (is persisted in the editor's data).\n   * @returns `Marker` instance which was added or updated.\n   */\n  _set(markerOrName, range, managedUsingOperations = false, affectsData = false) {\n    const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n    if (markerName.includes(\",\")) {\n      throw new CKEditorError(\"markercollection-incorrect-marker-name\", this);\n    }\n    const oldMarker = this._markers.get(markerName);\n    if (oldMarker) {\n      const oldMarkerData = oldMarker.getData();\n      const oldRange = oldMarker.getRange();\n      let hasChanged = false;\n      if (!oldRange.isEqual(range)) {\n        oldMarker._attachLiveRange(LiveRange.fromRange(range));\n        hasChanged = true;\n      }\n      if (managedUsingOperations != oldMarker.managedUsingOperations) {\n        oldMarker._managedUsingOperations = managedUsingOperations;\n        hasChanged = true;\n      }\n      if (typeof affectsData === \"boolean\" && affectsData != oldMarker.affectsData) {\n        oldMarker._affectsData = affectsData;\n        hasChanged = true;\n      }\n      if (hasChanged) {\n        this.fire(`update:${markerName}`, oldMarker, oldRange, range, oldMarkerData);\n      }\n      return oldMarker;\n    }\n    const liveRange = LiveRange.fromRange(range);\n    const marker = new Marker(markerName, liveRange, managedUsingOperations, affectsData);\n    this._markers.set(markerName, marker);\n    this.fire(`update:${markerName}`, marker, null, range, { ...marker.getData(), range: null });\n    return marker;\n  }\n  /**\n   * Removes given {@link ~Marker marker} or a marker with given name from the `MarkerCollection`.\n   *\n   * @internal\n   * @fires update\n   * @param markerOrName Marker or name of a marker to remove.\n   * @returns `true` if marker was found and removed, `false` otherwise.\n   */\n  _remove(markerOrName) {\n    const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n    const oldMarker = this._markers.get(markerName);\n    if (oldMarker) {\n      this._markers.delete(markerName);\n      this.fire(`update:${markerName}`, oldMarker, oldMarker.getRange(), null, oldMarker.getData());\n      this._destroyMarker(oldMarker);\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Fires an {@link module:engine/model/markercollection~MarkerCollection#event:update} event for the given {@link ~Marker marker}\n   * but does not change the marker. Useful to force {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast\n   * conversion} for the marker.\n   *\n   * @internal\n   * @fires update\n   * @param markerOrName Marker or name of a marker to refresh.\n   */\n  _refresh(markerOrName) {\n    const markerName = markerOrName instanceof Marker ? markerOrName.name : markerOrName;\n    const marker = this._markers.get(markerName);\n    if (!marker) {\n      throw new CKEditorError(\"markercollection-refresh-marker-not-exists\", this);\n    }\n    const range = marker.getRange();\n    this.fire(`update:${markerName}`, marker, range, range, marker.getData());\n  }\n  /**\n   * Returns iterator that iterates over all markers, which ranges contain given {@link module:engine/model/position~Position position}.\n   */\n  *getMarkersAtPosition(position) {\n    for (const marker of this) {\n      if (marker.getRange().containsPosition(position)) {\n        yield marker;\n      }\n    }\n  }\n  /**\n   * Returns iterator that iterates over all markers, which intersects with given {@link module:engine/model/range~Range range}.\n   */\n  *getMarkersIntersectingRange(range) {\n    for (const marker of this) {\n      if (marker.getRange().getIntersection(range) !== null) {\n        yield marker;\n      }\n    }\n  }\n  /**\n   * Destroys marker collection and all markers inside it.\n   */\n  destroy() {\n    for (const marker of this._markers.values()) {\n      this._destroyMarker(marker);\n    }\n    this._markers = null;\n    this.stopListening();\n  }\n  /**\n   * Iterates over all markers that starts with given `prefix`.\n   *\n   * ```ts\n   * const markerFooA = markersCollection._set( 'foo:a', rangeFooA );\n   * const markerFooB = markersCollection._set( 'foo:b', rangeFooB );\n   * const markerBarA = markersCollection._set( 'bar:a', rangeBarA );\n   * const markerFooBarA = markersCollection._set( 'foobar:a', rangeFooBarA );\n   * Array.from( markersCollection.getMarkersGroup( 'foo' ) ); // [ markerFooA, markerFooB ]\n   * Array.from( markersCollection.getMarkersGroup( 'a' ) ); // []\n   * ```\n   */\n  *getMarkersGroup(prefix) {\n    for (const marker of this._markers.values()) {\n      if (marker.name.startsWith(prefix + \":\")) {\n        yield marker;\n      }\n    }\n  }\n  /**\n   * Destroys the marker.\n   */\n  _destroyMarker(marker) {\n    marker.stopListening();\n    marker._detachLiveRange();\n  }\n};\nvar Marker = class extends EmitterMixin(TypeCheckable2) {\n  /**\n   * Creates a marker instance.\n   *\n   * @param name Marker name.\n   * @param liveRange Range marked by the marker.\n   * @param managedUsingOperations Specifies whether the marker is managed using operations.\n   * @param affectsData Specifies whether the marker affects the data produced by the data pipeline (is persisted in the editor's data).\n   */\n  constructor(name, liveRange, managedUsingOperations, affectsData) {\n    super();\n    this.name = name;\n    this._liveRange = this._attachLiveRange(liveRange);\n    this._managedUsingOperations = managedUsingOperations;\n    this._affectsData = affectsData;\n  }\n  /**\n   * A value indicating if the marker is managed using operations.\n   * See {@link ~Marker marker class description} to learn more about marker types.\n   * See {@link module:engine/model/writer~Writer#addMarker}.\n   */\n  get managedUsingOperations() {\n    if (!this._liveRange) {\n      throw new CKEditorError(\"marker-destroyed\", this);\n    }\n    return this._managedUsingOperations;\n  }\n  /**\n   * A value indicating if the marker changes the data.\n   */\n  get affectsData() {\n    if (!this._liveRange) {\n      throw new CKEditorError(\"marker-destroyed\", this);\n    }\n    return this._affectsData;\n  }\n  /**\n   * Returns the marker data (properties defining the marker).\n   */\n  getData() {\n    return {\n      range: this.getRange(),\n      affectsData: this.affectsData,\n      managedUsingOperations: this.managedUsingOperations\n    };\n  }\n  /**\n   * Returns current marker start position.\n   */\n  getStart() {\n    if (!this._liveRange) {\n      throw new CKEditorError(\"marker-destroyed\", this);\n    }\n    return this._liveRange.start.clone();\n  }\n  /**\n   * Returns current marker end position.\n   */\n  getEnd() {\n    if (!this._liveRange) {\n      throw new CKEditorError(\"marker-destroyed\", this);\n    }\n    return this._liveRange.end.clone();\n  }\n  /**\n   * Returns a range that represents the current state of the marker.\n   *\n   * Keep in mind that returned value is a {@link module:engine/model/range~Range Range}, not a\n   * {@link module:engine/model/liverange~LiveRange LiveRange}. This means that it is up-to-date and relevant only\n   * until next model document change. Do not store values returned by this method. Instead, store {@link ~Marker#name}\n   * and get `Marker` instance from {@link module:engine/model/markercollection~MarkerCollection MarkerCollection} every\n   * time there is a need to read marker properties. This will guarantee that the marker has not been removed and\n   * that it's data is up-to-date.\n   */\n  getRange() {\n    if (!this._liveRange) {\n      throw new CKEditorError(\"marker-destroyed\", this);\n    }\n    return this._liveRange.toRange();\n  }\n  /**\n   * Binds new live range to the marker and detach the old one if is attached.\n   *\n   * @internal\n   * @param liveRange Live range to attach\n   * @returns Attached live range.\n   */\n  _attachLiveRange(liveRange) {\n    if (this._liveRange) {\n      this._detachLiveRange();\n    }\n    liveRange.delegate(\"change:range\").to(this);\n    liveRange.delegate(\"change:content\").to(this);\n    this._liveRange = liveRange;\n    return liveRange;\n  }\n  /**\n   * Unbinds and destroys currently attached live range.\n   *\n   * @internal\n   */\n  _detachLiveRange() {\n    this._liveRange.stopDelegating(\"change:range\", this);\n    this._liveRange.stopDelegating(\"change:content\", this);\n    this._liveRange.detach();\n    this._liveRange = null;\n  }\n};\nMarker.prototype.is = function(type) {\n  return type === \"marker\" || type === \"model:marker\";\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/operation/detachoperation.js\nvar DetachOperation = class extends Operation {\n  /**\n   * Creates an insert operation.\n   *\n   * @param sourcePosition Position before the first {@link module:engine/model/item~Item model item} to move.\n   * @param howMany Offset size of moved range. Moved range will start from `sourcePosition` and end at\n   * `sourcePosition` with offset shifted by `howMany`.\n   */\n  constructor(sourcePosition, howMany) {\n    super(null);\n    this.sourcePosition = sourcePosition.clone();\n    this.howMany = howMany;\n  }\n  /**\n   * @inheritDoc\n   */\n  get type() {\n    return \"detach\";\n  }\n  /**\n   * @inheritDoc\n   */\n  get affectedSelectable() {\n    return null;\n  }\n  /**\n   * @inheritDoc\n   */\n  toJSON() {\n    const json = super.toJSON();\n    json.sourcePosition = this.sourcePosition.toJSON();\n    return json;\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _validate() {\n    if (this.sourcePosition.root.document) {\n      throw new CKEditorError(\"detach-operation-on-document-node\", this);\n    }\n  }\n  /**\n   * @inheritDoc\n   * @internal\n   */\n  _execute() {\n    _remove(Range2._createFromPositionAndShift(this.sourcePosition, this.howMany));\n  }\n  /**\n   * @inheritDoc\n   */\n  static get className() {\n    return \"DetachOperation\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/documentfragment.js\nvar DocumentFragment2 = class _DocumentFragment extends TypeCheckable2 {\n  /**\n   * Creates an empty `DocumentFragment`.\n   *\n   * **Note:** Constructor of this class shouldn't be used directly in the code.\n   * Use the {@link module:engine/model/writer~Writer#createDocumentFragment} method instead.\n   *\n   * @internal\n   * @param children Nodes to be contained inside the `DocumentFragment`.\n   */\n  constructor(children) {\n    super();\n    this.markers = /* @__PURE__ */ new Map();\n    this._children = new NodeList();\n    if (children) {\n      this._insertChild(0, children);\n    }\n  }\n  /**\n   * Returns an iterator that iterates over all nodes contained inside this document fragment.\n   */\n  [Symbol.iterator]() {\n    return this.getChildren();\n  }\n  /**\n   * Number of this document fragment's children.\n   */\n  get childCount() {\n    return this._children.length;\n  }\n  /**\n   * Sum of {@link module:engine/model/node~Node#offsetSize offset sizes} of all of this document fragment's children.\n   */\n  get maxOffset() {\n    return this._children.maxOffset;\n  }\n  /**\n   * Is `true` if there are no nodes inside this document fragment, `false` otherwise.\n   */\n  get isEmpty() {\n    return this.childCount === 0;\n  }\n  /**\n   * Artificial next sibling. Returns `null`. Added for compatibility reasons.\n   */\n  get nextSibling() {\n    return null;\n  }\n  /**\n   * Artificial previous sibling. Returns `null`. Added for compatibility reasons.\n   */\n  get previousSibling() {\n    return null;\n  }\n  /**\n   * Artificial root of `DocumentFragment`. Returns itself. Added for compatibility reasons.\n   */\n  get root() {\n    return this;\n  }\n  /**\n   * Artificial parent of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n   */\n  get parent() {\n    return null;\n  }\n  /**\n   * Artificial owner of `DocumentFragment`. Returns `null`. Added for compatibility reasons.\n   */\n  get document() {\n    return null;\n  }\n  /**\n   * Returns `false` as `DocumentFragment` by definition is not attached to a document. Added for compatibility reasons.\n   */\n  isAttached() {\n    return false;\n  }\n  /**\n   * Returns empty array. Added for compatibility reasons.\n   */\n  getAncestors() {\n    return [];\n  }\n  /**\n   * Gets the child at the given index. Returns `null` if incorrect index was passed.\n   *\n   * @param index Index of child.\n   * @returns Child node.\n   */\n  getChild(index) {\n    return this._children.getNode(index);\n  }\n  /**\n   * Returns an iterator that iterates over all of this document fragment's children.\n   */\n  getChildren() {\n    return this._children[Symbol.iterator]();\n  }\n  /**\n   * Returns an index of the given child node. Returns `null` if given node is not a child of this document fragment.\n   *\n   * @param node Child node to look for.\n   * @returns Child node's index.\n   */\n  getChildIndex(node) {\n    return this._children.getNodeIndex(node);\n  }\n  /**\n   * Returns the starting offset of given child. Starting offset is equal to the sum of\n   * {@link module:engine/model/node~Node#offsetSize offset sizes} of all node's siblings that are before it. Returns `null` if\n   * given node is not a child of this document fragment.\n   *\n   * @param node Child node to look for.\n   * @returns Child node's starting offset.\n   */\n  getChildStartOffset(node) {\n    return this._children.getNodeStartOffset(node);\n  }\n  /**\n   * Returns path to a `DocumentFragment`, which is an empty array. Added for compatibility reasons.\n   */\n  getPath() {\n    return [];\n  }\n  /**\n   * Returns a descendant node by its path relative to this element.\n   *\n   * ```ts\n   * // <this>a<b>c</b></this>\n   * this.getNodeByPath( [ 0 ] );     // -> \"a\"\n   * this.getNodeByPath( [ 1 ] );     // -> <b>\n   * this.getNodeByPath( [ 1, 0 ] );  // -> \"c\"\n   * ```\n   *\n   * @param relativePath Path of the node to find, relative to this element.\n   */\n  getNodeByPath(relativePath) {\n    let node = this;\n    for (const index of relativePath) {\n      node = node.getChild(node.offsetToIndex(index));\n    }\n    return node;\n  }\n  /**\n   * Converts offset \"position\" to index \"position\".\n   *\n   * Returns index of a node that occupies given offset. If given offset is too low, returns `0`. If given offset is\n   * too high, returns index after last child.\n   *\n   * ```ts\n   * const textNode = new Text( 'foo' );\n   * const pElement = new Element( 'p' );\n   * const docFrag = new DocumentFragment( [ textNode, pElement ] );\n   * docFrag.offsetToIndex( -1 ); // Returns 0, because offset is too low.\n   * docFrag.offsetToIndex( 0 ); // Returns 0, because offset 0 is taken by `textNode` which is at index 0.\n   * docFrag.offsetToIndex( 1 ); // Returns 0, because `textNode` has `offsetSize` equal to 3, so it occupies offset 1 too.\n   * docFrag.offsetToIndex( 2 ); // Returns 0.\n   * docFrag.offsetToIndex( 3 ); // Returns 1.\n   * docFrag.offsetToIndex( 4 ); // Returns 2. There are no nodes at offset 4, so last available index is returned.\n   * ```\n   *\n   * @param offset Offset to look for.\n   * @returns Index of a node that occupies given offset.\n   */\n  offsetToIndex(offset) {\n    return this._children.offsetToIndex(offset);\n  }\n  /**\n   * Converts `DocumentFragment` instance to plain object and returns it.\n   * Takes care of converting all of this document fragment's children.\n   *\n   * @returns `DocumentFragment` instance converted to plain object.\n   */\n  toJSON() {\n    const json = [];\n    for (const node of this._children) {\n      json.push(node.toJSON());\n    }\n    return json;\n  }\n  /**\n   * Creates a `DocumentFragment` instance from given plain object (i.e. parsed JSON string).\n   * Converts `DocumentFragment` children to proper nodes.\n   *\n   * @param json Plain object to be converted to `DocumentFragment`.\n   * @returns `DocumentFragment` instance created using given plain object.\n   */\n  static fromJSON(json) {\n    const children = [];\n    for (const child of json) {\n      if (child.name) {\n        children.push(Element2.fromJSON(child));\n      } else {\n        children.push(Text2.fromJSON(child));\n      }\n    }\n    return new _DocumentFragment(children);\n  }\n  /**\n   * {@link #_insertChild Inserts} one or more nodes at the end of this document fragment.\n   *\n   * @internal\n   * @param items Items to be inserted.\n   */\n  _appendChild(items) {\n    this._insertChild(this.childCount, items);\n  }\n  /**\n   * Inserts one or more nodes at the given index and sets {@link module:engine/model/node~Node#parent parent} of these nodes\n   * to this document fragment.\n   *\n   * @internal\n   * @param index Index at which nodes should be inserted.\n   * @param items Items to be inserted.\n   */\n  _insertChild(index, items) {\n    const nodes = normalize4(items);\n    for (const node of nodes) {\n      if (node.parent !== null) {\n        node._remove();\n      }\n      node.parent = this;\n    }\n    this._children._insertNodes(index, nodes);\n  }\n  /**\n   * Removes one or more nodes starting at the given index\n   * and sets {@link module:engine/model/node~Node#parent parent} of these nodes to `null`.\n   *\n   * @internal\n   * @param index Index of the first node to remove.\n   * @param howMany Number of nodes to remove.\n   * @returns Array containing removed nodes.\n   */\n  _removeChildren(index, howMany = 1) {\n    const nodes = this._children._removeNodes(index, howMany);\n    for (const node of nodes) {\n      node.parent = null;\n    }\n    return nodes;\n  }\n};\nDocumentFragment2.prototype.is = function(type) {\n  return type === \"documentFragment\" || type === \"model:documentFragment\";\n};\nfunction normalize4(nodes) {\n  if (typeof nodes == \"string\") {\n    return [new Text2(nodes)];\n  }\n  if (!isIterable(nodes)) {\n    nodes = [nodes];\n  }\n  return Array.from(nodes).map((node) => {\n    if (typeof node == \"string\") {\n      return new Text2(node);\n    }\n    if (node instanceof TextProxy2) {\n      return new Text2(node.data, node.getAttributes());\n    }\n    return node;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/writer.js\nvar Writer = class {\n  /**\n   * Creates a writer instance.\n   *\n   * **Note:** It is not recommended to use it directly. Use {@link module:engine/model/model~Model#change `Model#change()`} or\n   * {@link module:engine/model/model~Model#enqueueChange `Model#enqueueChange()`} instead.\n   *\n   * @internal\n   */\n  constructor(model, batch) {\n    this.model = model;\n    this.batch = batch;\n  }\n  /**\n   * Creates a new {@link module:engine/model/text~Text text node}.\n   *\n   * ```ts\n   * writer.createText( 'foo' );\n   * writer.createText( 'foo', { bold: true } );\n   * ```\n   *\n   * @param data Text data.\n   * @param attributes Text attributes.\n   * @returns {module:engine/model/text~Text} Created text node.\n   */\n  createText(data, attributes) {\n    return new Text2(data, attributes);\n  }\n  /**\n   * Creates a new {@link module:engine/model/element~Element element}.\n   *\n   * ```ts\n   * writer.createElement( 'paragraph' );\n   * writer.createElement( 'paragraph', { alignment: 'center' } );\n   * ```\n   *\n   * @param name Name of the element.\n   * @param attributes Elements attributes.\n   * @returns Created element.\n   */\n  createElement(name, attributes) {\n    return new Element2(name, attributes);\n  }\n  /**\n   * Creates a new {@link module:engine/model/documentfragment~DocumentFragment document fragment}.\n   *\n   * @returns Created document fragment.\n   */\n  createDocumentFragment() {\n    return new DocumentFragment2();\n  }\n  /**\n   * Creates a copy of the element and returns it. Created element has the same name and attributes as the original element.\n   * If clone is deep, the original element's children are also cloned. If not, then empty element is returned.\n   *\n   * @param element The element to clone.\n   * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n   * element will be cloned without any child.\n   */\n  cloneElement(element, deep = true) {\n    return element._clone(deep);\n  }\n  /**\n   * Inserts item on given position.\n   *\n   * ```ts\n   * const paragraph = writer.createElement( 'paragraph' );\n   * writer.insert( paragraph, position );\n   * ```\n   *\n   * Instead of using position you can use parent and offset:\n   *\n   * ```ts\n   * const text = writer.createText( 'foo' );\n   * writer.insert( text, paragraph, 5 );\n   * ```\n   *\n   * You can also use `end` instead of the offset to insert at the end:\n   *\n   * ```ts\n   * const text = writer.createText( 'foo' );\n   * writer.insert( text, paragraph, 'end' );\n   * ```\n   *\n   * Or insert before or after another element:\n   *\n   * ```ts\n   * const paragraph = writer.createElement( 'paragraph' );\n   * writer.insert( paragraph, anotherParagraph, 'after' );\n   * ```\n   *\n   * These parameters works the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n   *\n   * Note that if the item already has parent it will be removed from the previous parent.\n   *\n   * Note that you cannot re-insert a node from a document to a different document or a document fragment. In this case,\n   * `model-writer-insert-forbidden-move` is thrown.\n   *\n   * If you want to move {@link module:engine/model/range~Range range} instead of an\n   * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n   *\n   * **Note:** For a paste-like content insertion mechanism see\n   * {@link module:engine/model/model~Model#insertContent `model.insertContent()`}.\n   *\n   * @param item Item or document fragment to insert.\n   * @param offset Offset or one of the flags. Used only when second parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  insert(item, itemOrPosition, offset = 0) {\n    this._assertWriterUsedCorrectly();\n    if (item instanceof Text2 && item.data == \"\") {\n      return;\n    }\n    const position = Position2._createAt(itemOrPosition, offset);\n    if (item.parent) {\n      if (isSameTree(item.root, position.root)) {\n        this.move(Range2._createOn(item), position);\n        return;\n      } else {\n        if (item.root.document) {\n          throw new CKEditorError(\"model-writer-insert-forbidden-move\", this);\n        } else {\n          this.remove(item);\n        }\n      }\n    }\n    const version2 = position.root.document ? position.root.document.version : null;\n    const insert = new InsertOperation(position, item, version2);\n    if (item instanceof Text2) {\n      insert.shouldReceiveAttributes = true;\n    }\n    this.batch.addOperation(insert);\n    this.model.applyOperation(insert);\n    if (item instanceof DocumentFragment2) {\n      for (const [markerName, markerRange] of item.markers) {\n        const rangeRootPosition = Position2._createAt(markerRange.root, 0);\n        const range = new Range2(markerRange.start._getCombined(rangeRootPosition, position), markerRange.end._getCombined(rangeRootPosition, position));\n        const options = { range, usingOperation: true, affectsData: true };\n        if (this.model.markers.has(markerName)) {\n          this.updateMarker(markerName, options);\n        } else {\n          this.addMarker(markerName, options);\n        }\n      }\n    }\n  }\n  insertText(text2, attributes, itemOrPosition, offset) {\n    if (attributes instanceof DocumentFragment2 || attributes instanceof Element2 || attributes instanceof Position2) {\n      this.insert(this.createText(text2), attributes, itemOrPosition);\n    } else {\n      this.insert(this.createText(text2, attributes), itemOrPosition, offset);\n    }\n  }\n  insertElement(name, attributes, itemOrPositionOrOffset, offset) {\n    if (attributes instanceof DocumentFragment2 || attributes instanceof Element2 || attributes instanceof Position2) {\n      this.insert(this.createElement(name), attributes, itemOrPositionOrOffset);\n    } else {\n      this.insert(this.createElement(name, attributes), itemOrPositionOrOffset, offset);\n    }\n  }\n  /**\n   * Inserts item at the end of the given parent.\n   *\n   * ```ts\n   * const paragraph = writer.createElement( 'paragraph' );\n   * writer.append( paragraph, root );\n   * ```\n   *\n   * Note that if the item already has parent it will be removed from the previous parent.\n   *\n   * If you want to move {@link module:engine/model/range~Range range} instead of an\n   * {@link module:engine/model/item~Item item} use {@link module:engine/model/writer~Writer#move `Writer#move()`}.\n   *\n   * @param item Item or document fragment to insert.\n   */\n  append(item, parent2) {\n    this.insert(item, parent2, \"end\");\n  }\n  appendText(text2, attributes, parent2) {\n    if (attributes instanceof DocumentFragment2 || attributes instanceof Element2) {\n      this.insert(this.createText(text2), attributes, \"end\");\n    } else {\n      this.insert(this.createText(text2, attributes), parent2, \"end\");\n    }\n  }\n  appendElement(name, attributes, parent2) {\n    if (attributes instanceof DocumentFragment2 || attributes instanceof Element2) {\n      this.insert(this.createElement(name), attributes, \"end\");\n    } else {\n      this.insert(this.createElement(name, attributes), parent2, \"end\");\n    }\n  }\n  /**\n   * Sets value of the attribute with given key on a {@link module:engine/model/item~Item model item}\n   * or on a {@link module:engine/model/range~Range range}.\n   *\n   * @param key Attribute key.\n   * @param value Attribute new value.\n   * @param itemOrRange Model item or range on which the attribute will be set.\n   */\n  setAttribute(key, value, itemOrRange) {\n    this._assertWriterUsedCorrectly();\n    if (itemOrRange instanceof Range2) {\n      const ranges = itemOrRange.getMinimalFlatRanges();\n      for (const range of ranges) {\n        setAttributeOnRange(this, key, value, range);\n      }\n    } else {\n      setAttributeOnItem(this, key, value, itemOrRange);\n    }\n  }\n  /**\n   * Sets values of attributes on a {@link module:engine/model/item~Item model item}\n   * or on a {@link module:engine/model/range~Range range}.\n   *\n   * ```ts\n   * writer.setAttributes( {\n   * \tbold: true,\n   * \titalic: true\n   * }, range );\n   * ```\n   *\n   * @param attributes Attributes keys and values.\n   * @param itemOrRange Model item or range on which the attributes will be set.\n   */\n  setAttributes(attributes, itemOrRange) {\n    for (const [key, val] of toMap(attributes)) {\n      this.setAttribute(key, val, itemOrRange);\n    }\n  }\n  /**\n   * Removes an attribute with given key from a {@link module:engine/model/item~Item model item}\n   * or from a {@link module:engine/model/range~Range range}.\n   *\n   * @param key Attribute key.\n   * @param itemOrRange Model item or range from which the attribute will be removed.\n   */\n  removeAttribute(key, itemOrRange) {\n    this._assertWriterUsedCorrectly();\n    if (itemOrRange instanceof Range2) {\n      const ranges = itemOrRange.getMinimalFlatRanges();\n      for (const range of ranges) {\n        setAttributeOnRange(this, key, null, range);\n      }\n    } else {\n      setAttributeOnItem(this, key, null, itemOrRange);\n    }\n  }\n  /**\n   * Removes all attributes from all elements in the range or from the given item.\n   *\n   * @param itemOrRange Model item or range from which all attributes will be removed.\n   */\n  clearAttributes(itemOrRange) {\n    this._assertWriterUsedCorrectly();\n    const removeAttributesFromItem = (item) => {\n      for (const attribute of item.getAttributeKeys()) {\n        this.removeAttribute(attribute, item);\n      }\n    };\n    if (!(itemOrRange instanceof Range2)) {\n      removeAttributesFromItem(itemOrRange);\n    } else {\n      for (const item of itemOrRange.getItems()) {\n        removeAttributesFromItem(item);\n      }\n    }\n  }\n  /**\n   * Moves all items in the source range to the target position.\n   *\n   * ```ts\n   * writer.move( sourceRange, targetPosition );\n   * ```\n   *\n   * Instead of the target position you can use parent and offset or define that range should be moved to the end\n   * or before or after chosen item:\n   *\n   * ```ts\n   * // Moves all items in the range to the paragraph at offset 5:\n   * writer.move( sourceRange, paragraph, 5 );\n   * // Moves all items in the range to the end of a blockquote:\n   * writer.move( sourceRange, blockquote, 'end' );\n   * // Moves all items in the range to a position after an image:\n   * writer.move( sourceRange, image, 'after' );\n   * ```\n   *\n   * These parameters work the same way as {@link #createPositionAt `writer.createPositionAt()`}.\n   *\n   * Note that items can be moved only within the same tree. It means that you can move items within the same root\n   * (element or document fragment) or between {@link module:engine/model/document~Document#roots documents roots},\n   * but you can not move items from document fragment to the document or from one detached element to another. Use\n   * {@link module:engine/model/writer~Writer#insert} in such cases.\n   *\n   * @param range Source range.\n   * @param offset Offset or one of the flags. Used only when second parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  move(range, itemOrPosition, offset) {\n    this._assertWriterUsedCorrectly();\n    if (!(range instanceof Range2)) {\n      throw new CKEditorError(\"writer-move-invalid-range\", this);\n    }\n    if (!range.isFlat) {\n      throw new CKEditorError(\"writer-move-range-not-flat\", this);\n    }\n    const position = Position2._createAt(itemOrPosition, offset);\n    if (position.isEqual(range.start)) {\n      return;\n    }\n    this._addOperationForAffectedMarkers(\"move\", range);\n    if (!isSameTree(range.root, position.root)) {\n      throw new CKEditorError(\"writer-move-different-document\", this);\n    }\n    const version2 = range.root.document ? range.root.document.version : null;\n    const operation = new MoveOperation(range.start, range.end.offset - range.start.offset, position, version2);\n    this.batch.addOperation(operation);\n    this.model.applyOperation(operation);\n  }\n  /**\n   * Removes given model {@link module:engine/model/item~Item item} or {@link module:engine/model/range~Range range}.\n   *\n   * @param itemOrRange Model item or range to remove.\n   */\n  remove(itemOrRange) {\n    this._assertWriterUsedCorrectly();\n    const rangeToRemove = itemOrRange instanceof Range2 ? itemOrRange : Range2._createOn(itemOrRange);\n    const ranges = rangeToRemove.getMinimalFlatRanges().reverse();\n    for (const flat of ranges) {\n      this._addOperationForAffectedMarkers(\"move\", flat);\n      applyRemoveOperation(flat.start, flat.end.offset - flat.start.offset, this.batch, this.model);\n    }\n  }\n  /**\n   * Merges two siblings at the given position.\n   *\n   * Node before and after the position have to be an element. Otherwise `writer-merge-no-element-before` or\n   * `writer-merge-no-element-after` error will be thrown.\n   *\n   * @param position Position between merged elements.\n   */\n  merge(position) {\n    this._assertWriterUsedCorrectly();\n    const nodeBefore = position.nodeBefore;\n    const nodeAfter = position.nodeAfter;\n    this._addOperationForAffectedMarkers(\"merge\", position);\n    if (!(nodeBefore instanceof Element2)) {\n      throw new CKEditorError(\"writer-merge-no-element-before\", this);\n    }\n    if (!(nodeAfter instanceof Element2)) {\n      throw new CKEditorError(\"writer-merge-no-element-after\", this);\n    }\n    if (!position.root.document) {\n      this._mergeDetached(position);\n    } else {\n      this._merge(position);\n    }\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createPositionFromPath `Model#createPositionFromPath()`}.\n   *\n   * @param root Root of the position.\n   * @param path Position path. See {@link module:engine/model/position~Position#path}.\n   * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n   */\n  createPositionFromPath(root2, path, stickiness) {\n    return this.model.createPositionFromPath(root2, path, stickiness);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createPositionAt `Model#createPositionAt()`}.\n   *\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  createPositionAt(itemOrPosition, offset) {\n    return this.model.createPositionAt(itemOrPosition, offset);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createPositionAfter `Model#createPositionAfter()`}.\n   *\n   * @param item Item after which the position should be placed.\n   */\n  createPositionAfter(item) {\n    return this.model.createPositionAfter(item);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createPositionBefore `Model#createPositionBefore()`}.\n   *\n   * @param item Item after which the position should be placed.\n   */\n  createPositionBefore(item) {\n    return this.model.createPositionBefore(item);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createRange `Model#createRange()`}.\n   *\n   * @param start Start position.\n   * @param end End position. If not set, range will be collapsed at `start` position.\n   */\n  createRange(start, end) {\n    return this.model.createRange(start, end);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createRangeIn `Model#createRangeIn()`}.\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeIn(element) {\n    return this.model.createRangeIn(element);\n  }\n  /**\n   * Shortcut for {@link module:engine/model/model~Model#createRangeOn `Model#createRangeOn()`}.\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeOn(element) {\n    return this.model.createRangeOn(element);\n  }\n  createSelection(...args) {\n    return this.model.createSelection(...args);\n  }\n  /**\n   * Performs merge action in a detached tree.\n   *\n   * @param position Position between merged elements.\n   */\n  _mergeDetached(position) {\n    const nodeBefore = position.nodeBefore;\n    const nodeAfter = position.nodeAfter;\n    this.move(Range2._createIn(nodeAfter), Position2._createAt(nodeBefore, \"end\"));\n    this.remove(nodeAfter);\n  }\n  /**\n   * Performs merge action in a non-detached tree.\n   *\n   * @param position Position between merged elements.\n   */\n  _merge(position) {\n    const targetPosition = Position2._createAt(position.nodeBefore, \"end\");\n    const sourcePosition = Position2._createAt(position.nodeAfter, 0);\n    const graveyard = position.root.document.graveyard;\n    const graveyardPosition = new Position2(graveyard, [0]);\n    const version2 = position.root.document.version;\n    const merge2 = new MergeOperation(sourcePosition, position.nodeAfter.maxOffset, targetPosition, graveyardPosition, version2);\n    this.batch.addOperation(merge2);\n    this.model.applyOperation(merge2);\n  }\n  /**\n   * Renames the given element.\n   *\n   * @param element The element to rename.\n   * @param newName New element name.\n   */\n  rename(element, newName) {\n    this._assertWriterUsedCorrectly();\n    if (!(element instanceof Element2)) {\n      throw new CKEditorError(\"writer-rename-not-element-instance\", this);\n    }\n    const version2 = element.root.document ? element.root.document.version : null;\n    const renameOperation = new RenameOperation(Position2._createBefore(element), element.name, newName, version2);\n    this.batch.addOperation(renameOperation);\n    this.model.applyOperation(renameOperation);\n  }\n  /**\n   * Splits elements starting from the given position and going to the top of the model tree as long as given\n   * `limitElement` is reached. When `limitElement` is not defined then only the parent of the given position will be split.\n   *\n   * The element needs to have a parent. It cannot be a root element nor a document fragment.\n   * The `writer-split-element-no-parent` error will be thrown if you try to split an element with no parent.\n   *\n   * @param position Position of split.\n   * @param limitElement Stop splitting when this element will be reached.\n   * @returns Split result with properties:\n   * * `position` - Position between split elements.\n   * * `range` - Range that stars from the end of the first split element and ends at the beginning of the first copy element.\n   */\n  split(position, limitElement) {\n    this._assertWriterUsedCorrectly();\n    let splitElement = position.parent;\n    if (!splitElement.parent) {\n      throw new CKEditorError(\"writer-split-element-no-parent\", this);\n    }\n    if (!limitElement) {\n      limitElement = splitElement.parent;\n    }\n    if (!position.parent.getAncestors({ includeSelf: true }).includes(limitElement)) {\n      throw new CKEditorError(\"writer-split-invalid-limit-element\", this);\n    }\n    let firstSplitElement;\n    let firstCopyElement;\n    do {\n      const version2 = splitElement.root.document ? splitElement.root.document.version : null;\n      const howMany = splitElement.maxOffset - position.offset;\n      const insertionPosition = SplitOperation.getInsertionPosition(position);\n      const split = new SplitOperation(position, howMany, insertionPosition, null, version2);\n      this.batch.addOperation(split);\n      this.model.applyOperation(split);\n      if (!firstSplitElement && !firstCopyElement) {\n        firstSplitElement = splitElement;\n        firstCopyElement = position.parent.nextSibling;\n      }\n      position = this.createPositionAfter(position.parent);\n      splitElement = position.parent;\n    } while (splitElement !== limitElement);\n    return {\n      position,\n      range: new Range2(Position2._createAt(firstSplitElement, \"end\"), Position2._createAt(firstCopyElement, 0))\n    };\n  }\n  /**\n   * Wraps the given range with the given element or with a new element (if a string was passed).\n   *\n   * **Note:** range to wrap should be a \"flat range\" (see {@link module:engine/model/range~Range#isFlat `Range#isFlat`}).\n   * If not, an error will be thrown.\n   *\n   * @param range Range to wrap.\n   * @param elementOrString Element or name of element to wrap the range with.\n   */\n  wrap(range, elementOrString) {\n    this._assertWriterUsedCorrectly();\n    if (!range.isFlat) {\n      throw new CKEditorError(\"writer-wrap-range-not-flat\", this);\n    }\n    const element = elementOrString instanceof Element2 ? elementOrString : new Element2(elementOrString);\n    if (element.childCount > 0) {\n      throw new CKEditorError(\"writer-wrap-element-not-empty\", this);\n    }\n    if (element.parent !== null) {\n      throw new CKEditorError(\"writer-wrap-element-attached\", this);\n    }\n    this.insert(element, range.start);\n    const shiftedRange = new Range2(range.start.getShiftedBy(1), range.end.getShiftedBy(1));\n    this.move(shiftedRange, Position2._createAt(element, 0));\n  }\n  /**\n   * Unwraps children of the given element – all its children are moved before it and then the element is removed.\n   * Throws error if you try to unwrap an element which does not have a parent.\n   *\n   * @param element Element to unwrap.\n   */\n  unwrap(element) {\n    this._assertWriterUsedCorrectly();\n    if (element.parent === null) {\n      throw new CKEditorError(\"writer-unwrap-element-no-parent\", this);\n    }\n    this.move(Range2._createIn(element), this.createPositionAfter(element));\n    this.remove(element);\n  }\n  /**\n   * Adds a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n   * changes in the document and updates its range automatically, when model tree changes.\n   *\n   * As the first parameter you can set marker name.\n   *\n   * The required `options.usingOperation` parameter lets you decide if the marker should be managed by operations or not. See\n   * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n   * markers managed by operations and not-managed by operations.\n   *\n   * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n   * `true` when the marker change changes the data returned by the\n   * {@link module:core/editor/utils/dataapimixin~DataApi#getData `editor.getData()`} method.\n   * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n   * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n   *\n   * Create marker directly base on marker's name:\n   *\n   * ```ts\n   * addMarker( markerName, { range, usingOperation: false } );\n   * ```\n   *\n   * Create marker using operation:\n   *\n   * ```ts\n   * addMarker( markerName, { range, usingOperation: true } );\n   * ```\n   *\n   * Create marker that affects the editor data:\n   *\n   * ```ts\n   * addMarker( markerName, { range, usingOperation: false, affectsData: true } );\n   * ```\n   *\n   * Note: For efficiency reasons, it's best to create and keep as little markers as possible.\n   *\n   * @see module:engine/model/markercollection~Marker\n   * @param name Name of a marker to create - must be unique.\n   * @param options.usingOperation Flag indicating that the marker should be added by MarkerOperation.\n   * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n   * @param options.range Marker range.\n   * @param options.affectsData Flag indicating that the marker changes the editor data.\n   * @returns Marker that was set.\n   */\n  addMarker(name, options) {\n    this._assertWriterUsedCorrectly();\n    if (!options || typeof options.usingOperation != \"boolean\") {\n      throw new CKEditorError(\"writer-addmarker-no-usingoperation\", this);\n    }\n    const usingOperation = options.usingOperation;\n    const range = options.range;\n    const affectsData = options.affectsData === void 0 ? false : options.affectsData;\n    if (this.model.markers.has(name)) {\n      throw new CKEditorError(\"writer-addmarker-marker-exists\", this);\n    }\n    if (!range) {\n      throw new CKEditorError(\"writer-addmarker-no-range\", this);\n    }\n    if (!usingOperation) {\n      return this.model.markers._set(name, range, usingOperation, affectsData);\n    }\n    applyMarkerOperation(this, name, null, range, affectsData);\n    return this.model.markers.get(name);\n  }\n  /**\n   * Adds, updates or refreshes a {@link module:engine/model/markercollection~Marker marker}. Marker is a named range, which tracks\n   * changes in the document and updates its range automatically, when model tree changes. Still, it is possible to change the\n   * marker's range directly using this method.\n   *\n   * As the first parameter you can set marker name or instance. If none of them is provided, new marker, with a unique\n   * name is created and returned.\n   *\n   * **Note**: If you want to change the {@link module:engine/view/element~Element view element} of the marker while its data in the model\n   * remains the same, use the dedicated {@link module:engine/controller/editingcontroller~EditingController#reconvertMarker} method.\n   *\n   * The `options.usingOperation` parameter lets you change if the marker should be managed by operations or not. See\n   * {@link module:engine/model/markercollection~Marker marker class description} to learn about the difference between\n   * markers managed by operations and not-managed by operations. It is possible to change this option for an existing marker.\n   *\n   * The `options.affectsData` parameter, which defaults to `false`, allows you to define if a marker affects the data. It should be\n   * `true` when the marker change changes the data returned by\n   * the {@link module:core/editor/utils/dataapimixin~DataApi#getData `editor.getData()`} method.\n   * When set to `true` it fires the {@link module:engine/model/document~Document#event:change:data `change:data`} event.\n   * When set to `false` it fires the {@link module:engine/model/document~Document#event:change `change`} event.\n   *\n   * Update marker directly base on marker's name:\n   *\n   * ```ts\n   * updateMarker( markerName, { range } );\n   * ```\n   *\n   * Update marker using operation:\n   *\n   * ```ts\n   * updateMarker( marker, { range, usingOperation: true } );\n   * updateMarker( markerName, { range, usingOperation: true } );\n   * ```\n   *\n   * Change marker's option (start using operations to manage it):\n   *\n   * ```ts\n   * updateMarker( marker, { usingOperation: true } );\n   * ```\n   *\n   * Change marker's option (inform the engine, that the marker does not affect the data anymore):\n   *\n   * ```ts\n   * updateMarker( markerName, { affectsData: false } );\n   * ```\n   *\n   * @see module:engine/model/markercollection~Marker\n   * @param markerOrName Name of a marker to update, or a marker instance.\n   * @param options If options object is not defined then marker will be refreshed by triggering\n   * downcast conversion for this marker with the same data.\n   * @param options.range Marker range to update.\n   * @param options.usingOperation Flag indicated whether the marker should be added by MarkerOperation.\n   * See {@link module:engine/model/markercollection~Marker#managedUsingOperations}.\n   * @param options.affectsData Flag indicating that the marker changes the editor data.\n   */\n  updateMarker(markerOrName, options) {\n    this._assertWriterUsedCorrectly();\n    const markerName = typeof markerOrName == \"string\" ? markerOrName : markerOrName.name;\n    const currentMarker = this.model.markers.get(markerName);\n    if (!currentMarker) {\n      throw new CKEditorError(\"writer-updatemarker-marker-not-exists\", this);\n    }\n    if (!options) {\n      logWarning(\"writer-updatemarker-reconvert-using-editingcontroller\", { markerName });\n      this.model.markers._refresh(currentMarker);\n      return;\n    }\n    const hasUsingOperationDefined = typeof options.usingOperation == \"boolean\";\n    const affectsDataDefined = typeof options.affectsData == \"boolean\";\n    const affectsData = affectsDataDefined ? options.affectsData : currentMarker.affectsData;\n    if (!hasUsingOperationDefined && !options.range && !affectsDataDefined) {\n      throw new CKEditorError(\"writer-updatemarker-wrong-options\", this);\n    }\n    const currentRange = currentMarker.getRange();\n    const updatedRange = options.range ? options.range : currentRange;\n    if (hasUsingOperationDefined && options.usingOperation !== currentMarker.managedUsingOperations) {\n      if (options.usingOperation) {\n        applyMarkerOperation(this, markerName, null, updatedRange, affectsData);\n      } else {\n        applyMarkerOperation(this, markerName, currentRange, null, affectsData);\n        this.model.markers._set(markerName, updatedRange, void 0, affectsData);\n      }\n      return;\n    }\n    if (currentMarker.managedUsingOperations) {\n      applyMarkerOperation(this, markerName, currentRange, updatedRange, affectsData);\n    } else {\n      this.model.markers._set(markerName, updatedRange, void 0, affectsData);\n    }\n  }\n  /**\n   * Removes given {@link module:engine/model/markercollection~Marker marker} or marker with given name.\n   * The marker is removed accordingly to how it has been created, so if the marker was created using operation,\n   * it will be destroyed using operation.\n   *\n   * @param markerOrName Marker or marker name to remove.\n   */\n  removeMarker(markerOrName) {\n    this._assertWriterUsedCorrectly();\n    const name = typeof markerOrName == \"string\" ? markerOrName : markerOrName.name;\n    if (!this.model.markers.has(name)) {\n      throw new CKEditorError(\"writer-removemarker-no-marker\", this);\n    }\n    const marker = this.model.markers.get(name);\n    if (!marker.managedUsingOperations) {\n      this.model.markers._remove(name);\n      return;\n    }\n    const oldRange = marker.getRange();\n    applyMarkerOperation(this, name, oldRange, null, marker.affectsData);\n  }\n  /**\n   * Adds a new root to the document (or re-attaches a {@link #detachRoot detached root}).\n   *\n   * Throws an error, if trying to add a root that is already added and attached.\n   *\n   * @param rootName Name of the added root.\n   * @param elementName The element name. Defaults to `'$root'` which also has some basic schema defined\n   * (e.g. `$block` elements are allowed inside the `$root`). Make sure to define a proper schema if you use a different name.\n   * @returns The added root element.\n   */\n  addRoot(rootName, elementName = \"$root\") {\n    this._assertWriterUsedCorrectly();\n    const root2 = this.model.document.getRoot(rootName);\n    if (root2 && root2.isAttached()) {\n      throw new CKEditorError(\"writer-addroot-root-exists\", this);\n    }\n    const document2 = this.model.document;\n    const operation = new RootOperation(rootName, elementName, true, document2, document2.version);\n    this.batch.addOperation(operation);\n    this.model.applyOperation(operation);\n    return this.model.document.getRoot(rootName);\n  }\n  /**\n   * Detaches the root from the document.\n   *\n   * All content and markers are removed from the root upon detaching. New content and new markers cannot be added to the root, as long\n   * as it is detached.\n   *\n   * A root cannot be fully removed from the document, it can be only detached. A root is permanently removed only after you\n   * re-initialize the editor and do not specify the root in the initial data.\n   *\n   * A detached root can be re-attached using {@link #addRoot}.\n   *\n   * Throws an error if the root does not exist or the root is already detached.\n   *\n   * @param rootOrName Name of the detached root.\n   */\n  detachRoot(rootOrName) {\n    this._assertWriterUsedCorrectly();\n    const root2 = typeof rootOrName == \"string\" ? this.model.document.getRoot(rootOrName) : rootOrName;\n    if (!root2 || !root2.isAttached()) {\n      throw new CKEditorError(\"writer-detachroot-no-root\", this);\n    }\n    for (const marker of this.model.markers) {\n      if (marker.getRange().root === root2) {\n        this.removeMarker(marker);\n      }\n    }\n    for (const key of root2.getAttributeKeys()) {\n      this.removeAttribute(key, root2);\n    }\n    this.remove(this.createRangeIn(root2));\n    const document2 = this.model.document;\n    const operation = new RootOperation(root2.rootName, root2.name, false, document2, document2.version);\n    this.batch.addOperation(operation);\n    this.model.applyOperation(operation);\n  }\n  setSelection(...args) {\n    this._assertWriterUsedCorrectly();\n    this.model.document.selection._setTo(...args);\n  }\n  /**\n   * Moves {@link module:engine/model/documentselection~DocumentSelection#focus} to the specified location.\n   *\n   * The location can be specified in the same form as\n   * {@link #createPositionAt `writer.createPositionAt()`} parameters.\n   *\n   * @param itemOrPosition\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  setSelectionFocus(itemOrPosition, offset) {\n    this._assertWriterUsedCorrectly();\n    this.model.document.selection._setFocus(itemOrPosition, offset);\n  }\n  setSelectionAttribute(keyOrObjectOrIterable, value) {\n    this._assertWriterUsedCorrectly();\n    if (typeof keyOrObjectOrIterable === \"string\") {\n      this._setSelectionAttribute(keyOrObjectOrIterable, value);\n    } else {\n      for (const [key, value2] of toMap(keyOrObjectOrIterable)) {\n        this._setSelectionAttribute(key, value2);\n      }\n    }\n  }\n  /**\n   * Removes attribute(s) with given key(s) from the selection.\n   *\n   * Remove one attribute:\n   *\n   * ```ts\n   * writer.removeSelectionAttribute( 'italic' );\n   * ```\n   *\n   * Remove multiple attributes:\n   *\n   * ```ts\n   * writer.removeSelectionAttribute( [ 'italic', 'bold' ] );\n   * ```\n   *\n   * @param keyOrIterableOfKeys Key of the attribute to remove or an iterable of attribute keys to remove.\n   */\n  removeSelectionAttribute(keyOrIterableOfKeys) {\n    this._assertWriterUsedCorrectly();\n    if (typeof keyOrIterableOfKeys === \"string\") {\n      this._removeSelectionAttribute(keyOrIterableOfKeys);\n    } else {\n      for (const key of keyOrIterableOfKeys) {\n        this._removeSelectionAttribute(key);\n      }\n    }\n  }\n  /**\n   * Temporarily changes the {@link module:engine/model/documentselection~DocumentSelection#isGravityOverridden gravity}\n   * of the selection from left to right.\n   *\n   * The gravity defines from which direction the selection inherits its attributes. If it's the default left gravity,\n   * then the selection (after being moved by the user) inherits attributes from its left-hand side.\n   * This method allows to temporarily override this behavior by forcing the gravity to the right.\n   *\n   * For the following model fragment:\n   *\n   * ```xml\n   * <$text bold=\"true\" linkHref=\"url\">bar[]</$text><$text bold=\"true\">biz</$text>\n   * ```\n   *\n   * * Default gravity: selection will have the `bold` and `linkHref` attributes.\n   * * Overridden gravity: selection will have `bold` attribute.\n   *\n   * **Note**: It returns an unique identifier which is required to restore the gravity. It guarantees the symmetry\n   * of the process.\n   *\n   * @returns The unique id which allows restoring the gravity.\n   */\n  overrideSelectionGravity() {\n    return this.model.document.selection._overrideGravity();\n  }\n  /**\n   * Restores {@link ~Writer#overrideSelectionGravity} gravity to default.\n   *\n   * Restoring the gravity is only possible using the unique identifier returned by\n   * {@link ~Writer#overrideSelectionGravity}. Note that the gravity remains overridden as long as won't be restored\n   * the same number of times it was overridden.\n   *\n   * @param uid The unique id returned by {@link ~Writer#overrideSelectionGravity}.\n   */\n  restoreSelectionGravity(uid2) {\n    this.model.document.selection._restoreGravity(uid2);\n  }\n  /**\n   * @param key Key of the attribute to remove.\n   * @param value Attribute value.\n   */\n  _setSelectionAttribute(key, value) {\n    const selection = this.model.document.selection;\n    if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n      const storeKey = DocumentSelection2._getStoreAttributeKey(key);\n      this.setAttribute(storeKey, value, selection.anchor.parent);\n    }\n    selection._setAttribute(key, value);\n  }\n  /**\n   * @param key Key of the attribute to remove.\n   */\n  _removeSelectionAttribute(key) {\n    const selection = this.model.document.selection;\n    if (selection.isCollapsed && selection.anchor.parent.isEmpty) {\n      const storeKey = DocumentSelection2._getStoreAttributeKey(key);\n      this.removeAttribute(storeKey, selection.anchor.parent);\n    }\n    selection._removeAttribute(key);\n  }\n  /**\n   * Throws `writer-detached-writer-tries-to-modify-model` error when the writer is used outside of the `change()` block.\n   */\n  _assertWriterUsedCorrectly() {\n    if (this.model._currentWriter !== this) {\n      throw new CKEditorError(\"writer-incorrect-use\", this);\n    }\n  }\n  /**\n   * For given action `type` and `positionOrRange` where the action happens, this function finds all affected markers\n   * and applies a marker operation with the new marker range equal to the current range. Thanks to this, the marker range\n   * can be later correctly processed during undo.\n   *\n   * @param type Writer action type.\n   * @param positionOrRange Position or range where the writer action happens.\n   */\n  _addOperationForAffectedMarkers(type, positionOrRange) {\n    for (const marker of this.model.markers) {\n      if (!marker.managedUsingOperations) {\n        continue;\n      }\n      const markerRange = marker.getRange();\n      let isAffected = false;\n      if (type === \"move\") {\n        const range = positionOrRange;\n        isAffected = range.containsPosition(markerRange.start) || range.start.isEqual(markerRange.start) || range.containsPosition(markerRange.end) || range.end.isEqual(markerRange.end);\n      } else {\n        const position = positionOrRange;\n        const elementBefore = position.nodeBefore;\n        const elementAfter = position.nodeAfter;\n        const affectedInLeftElement = markerRange.start.parent == elementBefore && markerRange.start.isAtEnd;\n        const affectedInRightElement = markerRange.end.parent == elementAfter && markerRange.end.offset == 0;\n        const affectedAfterLeftElement = markerRange.end.nodeAfter == elementAfter;\n        const affectedBeforeRightElement = markerRange.start.nodeAfter == elementAfter;\n        isAffected = affectedInLeftElement || affectedInRightElement || affectedAfterLeftElement || affectedBeforeRightElement;\n      }\n      if (isAffected) {\n        this.updateMarker(marker.name, { range: markerRange });\n      }\n    }\n  }\n};\nfunction setAttributeOnRange(writer, key, value, range) {\n  const model = writer.model;\n  const doc = model.document;\n  let lastSplitPosition = range.start;\n  let position;\n  let valueBefore;\n  let valueAfter;\n  for (const val of range.getWalker({ shallow: true })) {\n    valueAfter = val.item.getAttribute(key);\n    if (position && valueBefore != valueAfter) {\n      if (valueBefore != value) {\n        addOperation();\n      }\n      lastSplitPosition = position;\n    }\n    position = val.nextPosition;\n    valueBefore = valueAfter;\n  }\n  if (position instanceof Position2 && position != lastSplitPosition && valueBefore != value) {\n    addOperation();\n  }\n  function addOperation() {\n    const range2 = new Range2(lastSplitPosition, position);\n    const version2 = range2.root.document ? doc.version : null;\n    const operation = new AttributeOperation(range2, key, valueBefore, value, version2);\n    writer.batch.addOperation(operation);\n    model.applyOperation(operation);\n  }\n}\nfunction setAttributeOnItem(writer, key, value, item) {\n  const model = writer.model;\n  const doc = model.document;\n  const previousValue = item.getAttribute(key);\n  let range, operation;\n  if (previousValue != value) {\n    const isRootChanged = item.root === item;\n    if (isRootChanged) {\n      const version2 = item.document ? doc.version : null;\n      operation = new RootAttributeOperation(item, key, previousValue, value, version2);\n    } else {\n      range = new Range2(Position2._createBefore(item), writer.createPositionAfter(item));\n      const version2 = range.root.document ? doc.version : null;\n      operation = new AttributeOperation(range, key, previousValue, value, version2);\n    }\n    writer.batch.addOperation(operation);\n    model.applyOperation(operation);\n  }\n}\nfunction applyMarkerOperation(writer, name, oldRange, newRange, affectsData) {\n  const model = writer.model;\n  const doc = model.document;\n  const operation = new MarkerOperation(name, oldRange, newRange, model.markers, !!affectsData, doc.version);\n  writer.batch.addOperation(operation);\n  model.applyOperation(operation);\n}\nfunction applyRemoveOperation(position, howMany, batch, model) {\n  let operation;\n  if (position.root.document) {\n    const doc = model.document;\n    const graveyardPosition = new Position2(doc.graveyard, [0]);\n    operation = new MoveOperation(position, howMany, graveyardPosition, doc.version);\n  } else {\n    operation = new DetachOperation(position, howMany);\n  }\n  batch.addOperation(operation);\n  model.applyOperation(operation);\n}\nfunction isSameTree(rootA, rootB) {\n  if (rootA === rootB) {\n    return true;\n  }\n  if (rootA instanceof RootElement && rootB instanceof RootElement) {\n    return true;\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/deletecontent.js\nfunction deleteContent(model, selection, options = {}) {\n  if (selection.isCollapsed) {\n    return;\n  }\n  const selRange = selection.getFirstRange();\n  if (selRange.root.rootName == \"$graveyard\") {\n    return;\n  }\n  const schema = model.schema;\n  model.change((writer) => {\n    if (!options.doNotResetEntireContent && shouldEntireContentBeReplacedWithParagraph(schema, selection)) {\n      replaceEntireContentWithParagraph(writer, selection);\n      return;\n    }\n    const attributesForAutoparagraph = {};\n    if (!options.doNotAutoparagraph) {\n      const selectedElement = selection.getSelectedElement();\n      if (selectedElement) {\n        Object.assign(attributesForAutoparagraph, schema.getAttributesWithProperty(selectedElement, \"copyOnReplace\", true));\n      }\n    }\n    const [startPosition, endPosition] = getLivePositionsForSelectedBlocks(selRange);\n    if (!startPosition.isTouching(endPosition)) {\n      writer.remove(writer.createRange(startPosition, endPosition));\n    }\n    if (!options.leaveUnmerged) {\n      mergeBranches(writer, startPosition, endPosition);\n      schema.removeDisallowedAttributes(startPosition.parent.getChildren(), writer);\n    }\n    collapseSelectionAt(writer, selection, startPosition);\n    if (!options.doNotAutoparagraph && shouldAutoparagraph(schema, startPosition)) {\n      insertParagraph(writer, startPosition, selection, attributesForAutoparagraph);\n    }\n    startPosition.detach();\n    endPosition.detach();\n  });\n}\nfunction getLivePositionsForSelectedBlocks(range) {\n  const model = range.root.document.model;\n  const startPosition = range.start;\n  let endPosition = range.end;\n  if (model.hasContent(range, { ignoreMarkers: true })) {\n    const endBlock = getParentBlock2(endPosition);\n    if (endBlock && endPosition.isTouching(model.createPositionAt(endBlock, 0))) {\n      const selection = model.createSelection(range);\n      model.modifySelection(selection, { direction: \"backward\" });\n      const newEndPosition = selection.getLastPosition();\n      const skippedRange = model.createRange(newEndPosition, endPosition);\n      if (!model.hasContent(skippedRange, { ignoreMarkers: true })) {\n        endPosition = newEndPosition;\n      }\n    }\n  }\n  return [\n    LivePosition.fromPosition(startPosition, \"toPrevious\"),\n    LivePosition.fromPosition(endPosition, \"toNext\")\n  ];\n}\nfunction getParentBlock2(position) {\n  const element = position.parent;\n  const schema = element.root.document.model.schema;\n  const ancestors = element.getAncestors({ parentFirst: true, includeSelf: true });\n  for (const element2 of ancestors) {\n    if (schema.isLimit(element2)) {\n      return null;\n    }\n    if (schema.isBlock(element2)) {\n      return element2;\n    }\n  }\n}\nfunction mergeBranches(writer, startPosition, endPosition) {\n  const model = writer.model;\n  if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n    return;\n  }\n  const [startAncestor, endAncestor] = getAncestorsJustBelowCommonAncestor(startPosition, endPosition);\n  if (!startAncestor || !endAncestor) {\n    return;\n  }\n  if (!model.hasContent(startAncestor, { ignoreMarkers: true }) && model.hasContent(endAncestor, { ignoreMarkers: true })) {\n    mergeBranchesRight(writer, startPosition, endPosition, startAncestor.parent);\n  } else {\n    mergeBranchesLeft(writer, startPosition, endPosition, startAncestor.parent);\n  }\n}\nfunction mergeBranchesLeft(writer, startPosition, endPosition, commonAncestor) {\n  const startElement = startPosition.parent;\n  const endElement = endPosition.parent;\n  if (startElement == commonAncestor || endElement == commonAncestor) {\n    return;\n  }\n  startPosition = writer.createPositionAfter(startElement);\n  endPosition = writer.createPositionBefore(endElement);\n  if (!endPosition.isEqual(startPosition)) {\n    writer.insert(endElement, startPosition);\n  }\n  writer.merge(startPosition);\n  while (endPosition.parent.isEmpty) {\n    const parentToRemove = endPosition.parent;\n    endPosition = writer.createPositionBefore(parentToRemove);\n    writer.remove(parentToRemove);\n  }\n  if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n    return;\n  }\n  mergeBranchesLeft(writer, startPosition, endPosition, commonAncestor);\n}\nfunction mergeBranchesRight(writer, startPosition, endPosition, commonAncestor) {\n  const startElement = startPosition.parent;\n  const endElement = endPosition.parent;\n  if (startElement == commonAncestor || endElement == commonAncestor) {\n    return;\n  }\n  startPosition = writer.createPositionAfter(startElement);\n  endPosition = writer.createPositionBefore(endElement);\n  if (!endPosition.isEqual(startPosition)) {\n    writer.insert(startElement, endPosition);\n  }\n  while (startPosition.parent.isEmpty) {\n    const parentToRemove = startPosition.parent;\n    startPosition = writer.createPositionBefore(parentToRemove);\n    writer.remove(parentToRemove);\n  }\n  endPosition = writer.createPositionBefore(endElement);\n  mergeRight(writer, endPosition);\n  if (!checkShouldMerge(writer.model.schema, startPosition, endPosition)) {\n    return;\n  }\n  mergeBranchesRight(writer, startPosition, endPosition, commonAncestor);\n}\nfunction mergeRight(writer, position) {\n  const startElement = position.nodeBefore;\n  const endElement = position.nodeAfter;\n  if (startElement.name != endElement.name) {\n    writer.rename(startElement, endElement.name);\n  }\n  writer.clearAttributes(startElement);\n  writer.setAttributes(Object.fromEntries(endElement.getAttributes()), startElement);\n  writer.merge(position);\n}\nfunction checkShouldMerge(schema, startPosition, endPosition) {\n  const startElement = startPosition.parent;\n  const endElement = endPosition.parent;\n  if (startElement == endElement) {\n    return false;\n  }\n  if (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n    return false;\n  }\n  return isCrossingLimitElement(startPosition, endPosition, schema);\n}\nfunction getAncestorsJustBelowCommonAncestor(positionA, positionB) {\n  const ancestorsA = positionA.getAncestors();\n  const ancestorsB = positionB.getAncestors();\n  let i = 0;\n  while (ancestorsA[i] && ancestorsA[i] == ancestorsB[i]) {\n    i++;\n  }\n  return [ancestorsA[i], ancestorsB[i]];\n}\nfunction shouldAutoparagraph(schema, position) {\n  const isTextAllowed = schema.checkChild(position, \"$text\");\n  const isParagraphAllowed = schema.checkChild(position, \"paragraph\");\n  return !isTextAllowed && isParagraphAllowed;\n}\nfunction isCrossingLimitElement(leftPos, rightPos, schema) {\n  const rangeToCheck = new Range2(leftPos, rightPos);\n  for (const value of rangeToCheck.getWalker()) {\n    if (schema.isLimit(value.item)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction insertParagraph(writer, position, selection, attributes = {}) {\n  const paragraph2 = writer.createElement(\"paragraph\");\n  writer.model.schema.setAllowedAttributes(paragraph2, attributes, writer);\n  writer.insert(paragraph2, position);\n  collapseSelectionAt(writer, selection, writer.createPositionAt(paragraph2, 0));\n}\nfunction replaceEntireContentWithParagraph(writer, selection) {\n  const limitElement = writer.model.schema.getLimitElement(selection);\n  writer.remove(writer.createRangeIn(limitElement));\n  insertParagraph(writer, writer.createPositionAt(limitElement, 0), selection);\n}\nfunction shouldEntireContentBeReplacedWithParagraph(schema, selection) {\n  const limitElement = schema.getLimitElement(selection);\n  if (!selection.containsEntireContent(limitElement)) {\n    return false;\n  }\n  const range = selection.getFirstRange();\n  if (range.start.parent == range.end.parent) {\n    return false;\n  }\n  return schema.checkChild(limitElement, \"paragraph\");\n}\nfunction collapseSelectionAt(writer, selection, positionOrRange) {\n  if (selection instanceof DocumentSelection2) {\n    writer.setSelection(positionOrRange);\n  } else {\n    selection.setTo(positionOrRange);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/getselectedcontent.js\nfunction getSelectedContent(model, selection) {\n  return model.change((writer) => {\n    const frag = writer.createDocumentFragment();\n    const range = selection.getFirstRange();\n    if (!range || range.isCollapsed) {\n      return frag;\n    }\n    const root2 = range.start.root;\n    const commonPath = range.start.getCommonPath(range.end);\n    const commonParent = root2.getNodeByPath(commonPath);\n    let flatSubtreeRange;\n    if (range.start.parent == range.end.parent) {\n      flatSubtreeRange = range;\n    } else {\n      flatSubtreeRange = writer.createRange(writer.createPositionAt(commonParent, range.start.path[commonPath.length]), writer.createPositionAt(commonParent, range.end.path[commonPath.length] + 1));\n    }\n    const howMany = flatSubtreeRange.end.offset - flatSubtreeRange.start.offset;\n    for (const item of flatSubtreeRange.getItems({ shallow: true })) {\n      if (item.is(\"$textProxy\")) {\n        writer.appendText(item.data, item.getAttributes(), frag);\n      } else {\n        writer.append(writer.cloneElement(item, true), frag);\n      }\n    }\n    if (flatSubtreeRange != range) {\n      const newRange = range._getTransformedByMove(flatSubtreeRange.start, writer.createPositionAt(frag, 0), howMany)[0];\n      const leftExcessRange = writer.createRange(writer.createPositionAt(frag, 0), newRange.start);\n      const rightExcessRange = writer.createRange(newRange.end, writer.createPositionAt(frag, \"end\"));\n      removeRangeContent(rightExcessRange, writer);\n      removeRangeContent(leftExcessRange, writer);\n    }\n    return frag;\n  });\n}\nfunction removeRangeContent(range, writer) {\n  const parentsToCheck = [];\n  Array.from(range.getItems({ direction: \"backward\" })).map((item) => writer.createRangeOn(item)).filter((itemRange) => {\n    const contained = (itemRange.start.isAfter(range.start) || itemRange.start.isEqual(range.start)) && (itemRange.end.isBefore(range.end) || itemRange.end.isEqual(range.end));\n    return contained;\n  }).forEach((itemRange) => {\n    parentsToCheck.push(itemRange.start.parent);\n    writer.remove(itemRange);\n  });\n  parentsToCheck.forEach((parentToCheck) => {\n    let parent2 = parentToCheck;\n    while (parent2.parent && parent2.isEmpty) {\n      const removeRange = writer.createRangeOn(parent2);\n      parent2 = parent2.parent;\n      writer.remove(removeRange);\n    }\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/insertcontent.js\nfunction insertContent(model, content, selectable) {\n  return model.change((writer) => {\n    const selection = selectable ? selectable : model.document.selection;\n    if (!selection.isCollapsed) {\n      model.deleteContent(selection, { doNotAutoparagraph: true });\n    }\n    const insertion = new Insertion(model, writer, selection.anchor);\n    const fakeMarkerElements = [];\n    let nodesToInsert;\n    if (content.is(\"documentFragment\")) {\n      if (content.markers.size) {\n        const markersPosition = [];\n        for (const [name, range] of content.markers) {\n          const { start, end } = range;\n          const isCollapsed = start.isEqual(end);\n          markersPosition.push({ position: start, name, isCollapsed }, { position: end, name, isCollapsed });\n        }\n        markersPosition.sort(({ position: posA }, { position: posB }) => posA.isBefore(posB) ? 1 : -1);\n        for (const { position, name, isCollapsed } of markersPosition) {\n          let fakeElement = null;\n          let collapsed = null;\n          const isAtBeginning = position.parent === content && position.isAtStart;\n          const isAtEnd = position.parent === content && position.isAtEnd;\n          if (!isAtBeginning && !isAtEnd) {\n            fakeElement = writer.createElement(\"$marker\");\n            writer.insert(fakeElement, position);\n          } else if (isCollapsed) {\n            collapsed = isAtBeginning ? \"start\" : \"end\";\n          }\n          fakeMarkerElements.push({\n            name,\n            element: fakeElement,\n            collapsed\n          });\n        }\n      }\n      nodesToInsert = content.getChildren();\n    } else {\n      nodesToInsert = [content];\n    }\n    insertion.handleNodes(nodesToInsert);\n    let newRange = insertion.getSelectionRange();\n    if (content.is(\"documentFragment\") && fakeMarkerElements.length) {\n      const selectionLiveRange = newRange ? LiveRange.fromRange(newRange) : null;\n      const markersData = {};\n      for (let i = fakeMarkerElements.length - 1; i >= 0; i--) {\n        const { name, element, collapsed } = fakeMarkerElements[i];\n        const isStartBoundary = !markersData[name];\n        if (isStartBoundary) {\n          markersData[name] = [];\n        }\n        if (element) {\n          const elementPosition = writer.createPositionAt(element, \"before\");\n          markersData[name].push(elementPosition);\n          writer.remove(element);\n        } else {\n          const rangeOnInsertion = insertion.getAffectedRange();\n          if (!rangeOnInsertion) {\n            if (collapsed) {\n              markersData[name].push(insertion.position);\n            }\n            continue;\n          }\n          if (collapsed) {\n            markersData[name].push(rangeOnInsertion[collapsed]);\n          } else {\n            markersData[name].push(isStartBoundary ? rangeOnInsertion.start : rangeOnInsertion.end);\n          }\n        }\n      }\n      for (const [name, [start, end]] of Object.entries(markersData)) {\n        if (start && end && start.root === end.root) {\n          writer.addMarker(name, {\n            usingOperation: true,\n            affectsData: true,\n            range: new Range2(start, end)\n          });\n        }\n      }\n      if (selectionLiveRange) {\n        newRange = selectionLiveRange.toRange();\n        selectionLiveRange.detach();\n      }\n    }\n    if (newRange) {\n      if (selection instanceof DocumentSelection2) {\n        writer.setSelection(newRange);\n      } else {\n        selection.setTo(newRange);\n      }\n    } else {\n    }\n    const affectedRange = insertion.getAffectedRange() || model.createRange(selection.anchor);\n    insertion.destroy();\n    return affectedRange;\n  });\n}\nvar Insertion = class {\n  constructor(model, writer, position) {\n    this._firstNode = null;\n    this._lastNode = null;\n    this._lastAutoParagraph = null;\n    this._filterAttributesOf = [];\n    this._affectedStart = null;\n    this._affectedEnd = null;\n    this._nodeToSelect = null;\n    this.model = model;\n    this.writer = writer;\n    this.position = position;\n    this.canMergeWith = /* @__PURE__ */ new Set([this.position.parent]);\n    this.schema = model.schema;\n    this._documentFragment = writer.createDocumentFragment();\n    this._documentFragmentPosition = writer.createPositionAt(this._documentFragment, 0);\n  }\n  /**\n   * Handles insertion of a set of nodes.\n   *\n   * @param nodes Nodes to insert.\n   */\n  handleNodes(nodes) {\n    for (const node of Array.from(nodes)) {\n      this._handleNode(node);\n    }\n    this._insertPartialFragment();\n    if (this._lastAutoParagraph) {\n      this._updateLastNodeFromAutoParagraph(this._lastAutoParagraph);\n    }\n    this._mergeOnRight();\n    this.schema.removeDisallowedAttributes(this._filterAttributesOf, this.writer);\n    this._filterAttributesOf = [];\n  }\n  /**\n   * Updates the last node after the auto paragraphing.\n   *\n   * @param node The last auto paragraphing node.\n   */\n  _updateLastNodeFromAutoParagraph(node) {\n    const positionAfterLastNode = this.writer.createPositionAfter(this._lastNode);\n    const positionAfterNode = this.writer.createPositionAfter(node);\n    if (positionAfterNode.isAfter(positionAfterLastNode)) {\n      this._lastNode = node;\n      if (this.position.parent != node || !this.position.isAtEnd) {\n        throw new CKEditorError(\"insertcontent-invalid-insertion-position\", this);\n      }\n      this.position = positionAfterNode;\n      this._setAffectedBoundaries(this.position);\n    }\n  }\n  /**\n   * Returns range to be selected after insertion.\n   * Returns `null` if there is no valid range to select after insertion.\n   */\n  getSelectionRange() {\n    if (this._nodeToSelect) {\n      return Range2._createOn(this._nodeToSelect);\n    }\n    return this.model.schema.getNearestSelectionRange(this.position);\n  }\n  /**\n   * Returns a range which contains all the performed changes. This is a range that, if removed, would return the model to the state\n   * before the insertion. Returns `null` if no changes were done.\n   */\n  getAffectedRange() {\n    if (!this._affectedStart) {\n      return null;\n    }\n    return new Range2(this._affectedStart, this._affectedEnd);\n  }\n  /**\n   * Destroys `Insertion` instance.\n   */\n  destroy() {\n    if (this._affectedStart) {\n      this._affectedStart.detach();\n    }\n    if (this._affectedEnd) {\n      this._affectedEnd.detach();\n    }\n  }\n  /**\n   * Handles insertion of a single node.\n   */\n  _handleNode(node) {\n    if (this.schema.isObject(node)) {\n      this._handleObject(node);\n      return;\n    }\n    let isAllowed = this._checkAndAutoParagraphToAllowedPosition(node);\n    if (!isAllowed) {\n      isAllowed = this._checkAndSplitToAllowedPosition(node);\n      if (!isAllowed) {\n        this._handleDisallowedNode(node);\n        return;\n      }\n    }\n    this._appendToFragment(node);\n    if (!this._firstNode) {\n      this._firstNode = node;\n    }\n    this._lastNode = node;\n  }\n  /**\n   * Inserts the temporary DocumentFragment into the model.\n   */\n  _insertPartialFragment() {\n    if (this._documentFragment.isEmpty) {\n      return;\n    }\n    const livePosition = LivePosition.fromPosition(this.position, \"toNext\");\n    this._setAffectedBoundaries(this.position);\n    if (this._documentFragment.getChild(0) == this._firstNode) {\n      this.writer.insert(this._firstNode, this.position);\n      this._mergeOnLeft();\n      this.position = livePosition.toPosition();\n    }\n    if (!this._documentFragment.isEmpty) {\n      this.writer.insert(this._documentFragment, this.position);\n    }\n    this._documentFragmentPosition = this.writer.createPositionAt(this._documentFragment, 0);\n    this.position = livePosition.toPosition();\n    livePosition.detach();\n  }\n  /**\n   * @param node The object element.\n   */\n  _handleObject(node) {\n    if (this._checkAndSplitToAllowedPosition(node)) {\n      this._appendToFragment(node);\n    } else {\n      this._tryAutoparagraphing(node);\n    }\n  }\n  /**\n   * @param node The disallowed node which needs to be handled.\n   */\n  _handleDisallowedNode(node) {\n    if (node.is(\"element\")) {\n      this.handleNodes(node.getChildren());\n    } else {\n      this._tryAutoparagraphing(node);\n    }\n  }\n  /**\n   * Append a node to the temporary DocumentFragment.\n   *\n   * @param node The node to insert.\n   */\n  _appendToFragment(node) {\n    if (!this.schema.checkChild(this.position, node)) {\n      throw new CKEditorError(\"insertcontent-wrong-position\", this, { node, position: this.position });\n    }\n    this.writer.insert(node, this._documentFragmentPosition);\n    this._documentFragmentPosition = this._documentFragmentPosition.getShiftedBy(node.offsetSize);\n    if (this.schema.isObject(node) && !this.schema.checkChild(this.position, \"$text\")) {\n      this._nodeToSelect = node;\n    } else {\n      this._nodeToSelect = null;\n    }\n    this._filterAttributesOf.push(node);\n  }\n  /**\n   * Sets `_affectedStart` and `_affectedEnd` to the given `position`. Should be used before a change is done during insertion process to\n   * mark the affected range.\n   *\n   * This method is used before inserting a node or splitting a parent node. `_affectedStart` and `_affectedEnd` are also changed\n   * during merging, but the logic there is more complicated so it is left out of this function.\n   */\n  _setAffectedBoundaries(position) {\n    if (!this._affectedStart) {\n      this._affectedStart = LivePosition.fromPosition(position, \"toPrevious\");\n    }\n    if (!this._affectedEnd || this._affectedEnd.isBefore(position)) {\n      if (this._affectedEnd) {\n        this._affectedEnd.detach();\n      }\n      this._affectedEnd = LivePosition.fromPosition(position, \"toNext\");\n    }\n  }\n  /**\n   * Merges the previous sibling of the first node if it should be merged.\n   *\n   * After the content was inserted we may try to merge it with its siblings.\n   * This should happen only if the selection was in those elements initially.\n   */\n  _mergeOnLeft() {\n    const node = this._firstNode;\n    if (!(node instanceof Element2)) {\n      return;\n    }\n    if (!this._canMergeLeft(node)) {\n      return;\n    }\n    const mergePosLeft = LivePosition._createBefore(node);\n    mergePosLeft.stickiness = \"toNext\";\n    const livePosition = LivePosition.fromPosition(this.position, \"toNext\");\n    if (this._affectedStart.isEqual(mergePosLeft)) {\n      this._affectedStart.detach();\n      this._affectedStart = LivePosition._createAt(mergePosLeft.nodeBefore, \"end\", \"toPrevious\");\n    }\n    if (this._firstNode === this._lastNode) {\n      this._firstNode = mergePosLeft.nodeBefore;\n      this._lastNode = mergePosLeft.nodeBefore;\n    }\n    this.writer.merge(mergePosLeft);\n    if (mergePosLeft.isEqual(this._affectedEnd) && this._firstNode === this._lastNode) {\n      this._affectedEnd.detach();\n      this._affectedEnd = LivePosition._createAt(mergePosLeft.nodeBefore, \"end\", \"toNext\");\n    }\n    this.position = livePosition.toPosition();\n    livePosition.detach();\n    this._filterAttributesOf.push(this.position.parent);\n    mergePosLeft.detach();\n  }\n  /**\n   * Merges the next sibling of the last node if it should be merged.\n   *\n   * After the content was inserted we may try to merge it with its siblings.\n   * This should happen only if the selection was in those elements initially.\n   */\n  _mergeOnRight() {\n    const node = this._lastNode;\n    if (!(node instanceof Element2)) {\n      return;\n    }\n    if (!this._canMergeRight(node)) {\n      return;\n    }\n    const mergePosRight = LivePosition._createAfter(node);\n    mergePosRight.stickiness = \"toNext\";\n    if (!this.position.isEqual(mergePosRight)) {\n      throw new CKEditorError(\"insertcontent-invalid-insertion-position\", this);\n    }\n    this.position = Position2._createAt(mergePosRight.nodeBefore, \"end\");\n    const livePosition = LivePosition.fromPosition(this.position, \"toPrevious\");\n    if (this._affectedEnd.isEqual(mergePosRight)) {\n      this._affectedEnd.detach();\n      this._affectedEnd = LivePosition._createAt(mergePosRight.nodeBefore, \"end\", \"toNext\");\n    }\n    if (this._firstNode === this._lastNode) {\n      this._firstNode = mergePosRight.nodeBefore;\n      this._lastNode = mergePosRight.nodeBefore;\n    }\n    this.writer.merge(mergePosRight);\n    if (mergePosRight.getShiftedBy(-1).isEqual(this._affectedStart) && this._firstNode === this._lastNode) {\n      this._affectedStart.detach();\n      this._affectedStart = LivePosition._createAt(mergePosRight.nodeBefore, 0, \"toPrevious\");\n    }\n    this.position = livePosition.toPosition();\n    livePosition.detach();\n    this._filterAttributesOf.push(this.position.parent);\n    mergePosRight.detach();\n  }\n  /**\n   * Checks whether specified node can be merged with previous sibling element.\n   *\n   * @param node The node which could potentially be merged.\n   */\n  _canMergeLeft(node) {\n    const previousSibling = node.previousSibling;\n    return previousSibling instanceof Element2 && this.canMergeWith.has(previousSibling) && this.model.schema.checkMerge(previousSibling, node);\n  }\n  /**\n   * Checks whether specified node can be merged with next sibling element.\n   *\n   * @param node The node which could potentially be merged.\n   */\n  _canMergeRight(node) {\n    const nextSibling = node.nextSibling;\n    return nextSibling instanceof Element2 && this.canMergeWith.has(nextSibling) && this.model.schema.checkMerge(node, nextSibling);\n  }\n  /**\n   * Tries wrapping the node in a new paragraph and inserting it this way.\n   *\n   * @param node The node which needs to be autoparagraphed.\n   */\n  _tryAutoparagraphing(node) {\n    const paragraph2 = this.writer.createElement(\"paragraph\");\n    if (this._getAllowedIn(this.position.parent, paragraph2) && this.schema.checkChild(paragraph2, node)) {\n      paragraph2._appendChild(node);\n      this._handleNode(paragraph2);\n    }\n  }\n  /**\n   * Checks if a node can be inserted in the given position or it would be accepted if a paragraph would be inserted.\n   * It also handles inserting the paragraph.\n   *\n   * @returns Whether an allowed position was found.\n   * `false` is returned if the node isn't allowed at the current position or in auto paragraph, `true` if was.\n   */\n  _checkAndAutoParagraphToAllowedPosition(node) {\n    if (this.schema.checkChild(this.position.parent, node)) {\n      return true;\n    }\n    if (!this.schema.checkChild(this.position.parent, \"paragraph\") || !this.schema.checkChild(\"paragraph\", node)) {\n      return false;\n    }\n    this._insertPartialFragment();\n    const paragraph2 = this.writer.createElement(\"paragraph\");\n    this.writer.insert(paragraph2, this.position);\n    this._setAffectedBoundaries(this.position);\n    this._lastAutoParagraph = paragraph2;\n    this.position = this.writer.createPositionAt(paragraph2, 0);\n    return true;\n  }\n  /**\n   * @returns Whether an allowed position was found.\n   * `false` is returned if the node isn't allowed at any position up in the tree, `true` if was.\n   */\n  _checkAndSplitToAllowedPosition(node) {\n    const allowedIn = this._getAllowedIn(this.position.parent, node);\n    if (!allowedIn) {\n      return false;\n    }\n    if (allowedIn != this.position.parent) {\n      this._insertPartialFragment();\n    }\n    while (allowedIn != this.position.parent) {\n      if (this.position.isAtStart) {\n        const parent2 = this.position.parent;\n        this.position = this.writer.createPositionBefore(parent2);\n        if (parent2.isEmpty && parent2.parent === allowedIn) {\n          this.writer.remove(parent2);\n        }\n      } else if (this.position.isAtEnd) {\n        this.position = this.writer.createPositionAfter(this.position.parent);\n      } else {\n        const tempPos = this.writer.createPositionAfter(this.position.parent);\n        this._setAffectedBoundaries(this.position);\n        this.writer.split(this.position);\n        this.position = tempPos;\n        this.canMergeWith.add(this.position.nodeAfter);\n      }\n    }\n    return true;\n  }\n  /**\n   * Gets the element in which the given node is allowed. It checks the passed element and all its ancestors.\n   *\n   * @param contextElement The element in which context the node should be checked.\n   * @param childNode The node to check.\n   */\n  _getAllowedIn(contextElement, childNode) {\n    if (this.schema.checkChild(contextElement, childNode)) {\n      return contextElement;\n    }\n    if (this.schema.isLimit(contextElement)) {\n      return null;\n    }\n    return this._getAllowedIn(contextElement.parent, childNode);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/insertobject.js\nfunction insertObject(model, object, selectable, options = {}) {\n  if (!model.schema.isObject(object)) {\n    throw new CKEditorError(\"insertobject-element-not-an-object\", model, { object });\n  }\n  const originalSelection = selectable ? selectable : model.document.selection;\n  let insertionSelection = originalSelection;\n  if (options.findOptimalPosition && model.schema.isBlock(object)) {\n    insertionSelection = model.createSelection(model.schema.findOptimalInsertionRange(originalSelection, options.findOptimalPosition));\n  }\n  const firstSelectedBlock = first(originalSelection.getSelectedBlocks());\n  const attributesToCopy = {};\n  if (firstSelectedBlock) {\n    Object.assign(attributesToCopy, model.schema.getAttributesWithProperty(firstSelectedBlock, \"copyOnReplace\", true));\n  }\n  return model.change((writer) => {\n    if (!insertionSelection.isCollapsed) {\n      model.deleteContent(insertionSelection, { doNotAutoparagraph: true });\n    }\n    let elementToInsert = object;\n    const insertionPositionParent = insertionSelection.anchor.parent;\n    if (!model.schema.checkChild(insertionPositionParent, object) && model.schema.checkChild(insertionPositionParent, \"paragraph\") && model.schema.checkChild(\"paragraph\", object)) {\n      elementToInsert = writer.createElement(\"paragraph\");\n      writer.insert(object, elementToInsert);\n    }\n    model.schema.setAllowedAttributes(elementToInsert, attributesToCopy, writer);\n    const affectedRange = model.insertContent(elementToInsert, insertionSelection);\n    if (affectedRange.isCollapsed) {\n      return affectedRange;\n    }\n    if (options.setSelection) {\n      updateSelection(writer, object, options.setSelection, attributesToCopy);\n    }\n    return affectedRange;\n  });\n}\nfunction updateSelection(writer, contextElement, place, paragraphAttributes) {\n  const model = writer.model;\n  if (place == \"on\") {\n    writer.setSelection(contextElement, \"on\");\n    return;\n  }\n  if (place != \"after\") {\n    throw new CKEditorError(\"insertobject-invalid-place-parameter-value\", model);\n  }\n  let nextElement = contextElement.nextSibling;\n  if (model.schema.isInline(contextElement)) {\n    writer.setSelection(contextElement, \"after\");\n    return;\n  }\n  const canSetSelection = nextElement && model.schema.checkChild(nextElement, \"$text\");\n  if (!canSetSelection && model.schema.checkChild(contextElement.parent, \"paragraph\")) {\n    nextElement = writer.createElement(\"paragraph\");\n    model.schema.setAllowedAttributes(nextElement, paragraphAttributes, writer);\n    model.insertContent(nextElement, writer.createPositionAfter(contextElement));\n  }\n  if (nextElement) {\n    writer.setSelection(nextElement, 0);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/utils/modifyselection.js\nvar wordBoundaryCharacters = ' ,.?!:;\"-()';\nfunction modifySelection(model, selection, options = {}) {\n  const schema = model.schema;\n  const isForward = options.direction != \"backward\";\n  const unit = options.unit ? options.unit : \"character\";\n  const treatEmojiAsSingleUnit = !!options.treatEmojiAsSingleUnit;\n  const focus = selection.focus;\n  const walker = new TreeWalker2({\n    boundaries: getSearchRange(focus, isForward),\n    singleCharacters: true,\n    direction: isForward ? \"forward\" : \"backward\"\n  });\n  const data = { walker, schema, isForward, unit, treatEmojiAsSingleUnit };\n  let next;\n  while (next = walker.next()) {\n    if (next.done) {\n      return;\n    }\n    const position = tryExtendingTo(data, next.value);\n    if (position) {\n      if (selection instanceof DocumentSelection2) {\n        model.change((writer) => {\n          writer.setSelectionFocus(position);\n        });\n      } else {\n        selection.setFocus(position);\n      }\n      return;\n    }\n  }\n}\nfunction tryExtendingTo(data, value) {\n  const { isForward, walker, unit, schema, treatEmojiAsSingleUnit } = data;\n  const { type, item, nextPosition } = value;\n  if (type == \"text\") {\n    if (data.unit === \"word\") {\n      return getCorrectWordBreakPosition(walker, isForward);\n    }\n    return getCorrectPosition(walker, unit, treatEmojiAsSingleUnit);\n  }\n  if (type == (isForward ? \"elementStart\" : \"elementEnd\")) {\n    if (schema.isSelectable(item)) {\n      return Position2._createAt(item, isForward ? \"after\" : \"before\");\n    }\n    if (schema.checkChild(nextPosition, \"$text\")) {\n      return nextPosition;\n    }\n  } else {\n    if (schema.isLimit(item)) {\n      walker.skip(() => true);\n      return;\n    }\n    if (schema.checkChild(nextPosition, \"$text\")) {\n      return nextPosition;\n    }\n  }\n}\nfunction getCorrectPosition(walker, unit, treatEmojiAsSingleUnit) {\n  const textNode = walker.position.textNode;\n  if (textNode) {\n    const data = textNode.data;\n    let offset = walker.position.offset - textNode.startOffset;\n    while (isInsideSurrogatePair(data, offset) || unit == \"character\" && isInsideCombinedSymbol(data, offset) || treatEmojiAsSingleUnit && isInsideEmojiSequence(data, offset)) {\n      walker.next();\n      offset = walker.position.offset - textNode.startOffset;\n    }\n  }\n  return walker.position;\n}\nfunction getCorrectWordBreakPosition(walker, isForward) {\n  let textNode = walker.position.textNode;\n  if (!textNode) {\n    textNode = isForward ? walker.position.nodeAfter : walker.position.nodeBefore;\n  }\n  while (textNode && textNode.is(\"$text\")) {\n    const offset = walker.position.offset - textNode.startOffset;\n    if (isAtNodeBoundary(textNode, offset, isForward)) {\n      textNode = isForward ? walker.position.nodeAfter : walker.position.nodeBefore;\n    } else if (isAtWordBoundary(textNode.data, offset, isForward)) {\n      break;\n    } else {\n      walker.next();\n    }\n  }\n  return walker.position;\n}\nfunction getSearchRange(start, isForward) {\n  const root2 = start.root;\n  const searchEnd = Position2._createAt(root2, isForward ? \"end\" : 0);\n  if (isForward) {\n    return new Range2(start, searchEnd);\n  } else {\n    return new Range2(searchEnd, start);\n  }\n}\nfunction isAtWordBoundary(data, offset, isForward) {\n  const offsetToCheck = offset + (isForward ? 0 : -1);\n  return wordBoundaryCharacters.includes(data.charAt(offsetToCheck));\n}\nfunction isAtNodeBoundary(textNode, offset, isForward) {\n  return offset === (isForward ? textNode.offsetSize : 0);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/model/model.js\nvar Model = class extends ObservableMixin() {\n  // @if CK_DEBUG_ENGINE // private _operationLogs: Array<string>;\n  // @if CK_DEBUG_ENGINE // private _appliedOperations: Array<Operation>;\n  constructor() {\n    super();\n    this.markers = new MarkerCollection();\n    this.document = new Document2(this);\n    this.schema = new Schema();\n    this._pendingChanges = [];\n    this._currentWriter = null;\n    [\"deleteContent\", \"modifySelection\", \"getSelectedContent\", \"applyOperation\"].forEach((methodName) => this.decorate(methodName));\n    this.on(\"applyOperation\", (evt, args) => {\n      const operation = args[0];\n      operation._validate();\n    }, { priority: \"highest\" });\n    this.schema.register(\"$root\", {\n      isLimit: true\n    });\n    this.schema.register(\"$container\", {\n      allowIn: [\"$root\", \"$container\"]\n    });\n    this.schema.register(\"$block\", {\n      allowIn: [\"$root\", \"$container\"],\n      isBlock: true\n    });\n    this.schema.register(\"$blockObject\", {\n      allowWhere: \"$block\",\n      isBlock: true,\n      isObject: true\n    });\n    this.schema.register(\"$inlineObject\", {\n      allowWhere: \"$text\",\n      allowAttributesOf: \"$text\",\n      isInline: true,\n      isObject: true\n    });\n    this.schema.register(\"$text\", {\n      allowIn: \"$block\",\n      isInline: true,\n      isContent: true\n    });\n    this.schema.register(\"$clipboardHolder\", {\n      allowContentOf: \"$root\",\n      allowChildren: \"$text\",\n      isLimit: true\n    });\n    this.schema.register(\"$documentFragment\", {\n      allowContentOf: \"$root\",\n      allowChildren: \"$text\",\n      isLimit: true\n    });\n    this.schema.register(\"$marker\");\n    this.schema.addChildCheck((context, childDefinition) => {\n      if (childDefinition.name === \"$marker\") {\n        return true;\n      }\n    });\n    injectSelectionPostFixer(this);\n    this.document.registerPostFixer(autoParagraphEmptyRoots);\n    this.on(\"insertContent\", (evt, [content, selectable]) => {\n      evt.return = insertContent(this, content, selectable);\n    });\n    this.on(\"insertObject\", (evt, [element, selection, options]) => {\n      evt.return = insertObject(this, element, selection, options);\n    });\n    this.on(\"canEditAt\", (evt) => {\n      const canEditAt = !this.document.isReadOnly;\n      evt.return = canEditAt;\n      if (!canEditAt) {\n        evt.stop();\n      }\n    });\n  }\n  /**\n   * The `change()` method is the primary way of changing the model. You should use it to modify all document nodes\n   * (including detached nodes – i.e. nodes not added to the {@link module:engine/model/model~Model#document model document}),\n   * the {@link module:engine/model/document~Document#selection document's selection}, and\n   * {@link module:engine/model/model~Model#markers model markers}.\n   *\n   * ```ts\n   * model.change( writer => {\n   * \twriter.insertText( 'foo', paragraph, 'end' );\n   * } );\n   * ```\n   *\n   * All changes inside the change block use the same {@link module:engine/model/batch~Batch} so they are combined\n   * into a single undo step.\n   *\n   * ```ts\n   * model.change( writer => {\n   * \twriter.insertText( 'foo', paragraph, 'end' ); // foo.\n   *\n   * \tmodel.change( writer => {\n   * \t\twriter.insertText( 'bar', paragraph, 'end' ); // foobar.\n   * \t} );\n   *\n   * \twriter.insertText( 'bom', paragraph, 'end' ); // foobarbom.\n   * } );\n   * ```\n   *\n   * The callback of the `change()` block is executed synchronously.\n   *\n   * You can also return a value from the change block.\n   *\n   * ```ts\n   * const img = model.change( writer => {\n   * \treturn writer.createElement( 'img' );\n   * } );\n   * ```\n   *\n   * @see #enqueueChange\n   * @typeParam TReturn The return type of the provided callback.\n   * @param callback Callback function which may modify the model.\n   */\n  change(callback) {\n    try {\n      if (this._pendingChanges.length === 0) {\n        this._pendingChanges.push({ batch: new Batch(), callback });\n        return this._runPendingChanges()[0];\n      } else {\n        return callback(this._currentWriter);\n      }\n    } catch (err) {\n      CKEditorError.rethrowUnexpectedError(err, this);\n    }\n  }\n  enqueueChange(batchOrType, callback) {\n    try {\n      if (!batchOrType) {\n        batchOrType = new Batch();\n      } else if (typeof batchOrType === \"function\") {\n        callback = batchOrType;\n        batchOrType = new Batch();\n      } else if (!(batchOrType instanceof Batch)) {\n        batchOrType = new Batch(batchOrType);\n      }\n      this._pendingChanges.push({ batch: batchOrType, callback });\n      if (this._pendingChanges.length == 1) {\n        this._runPendingChanges();\n      }\n    } catch (err) {\n      CKEditorError.rethrowUnexpectedError(err, this);\n    }\n  }\n  /**\n   * {@link module:utils/observablemixin~Observable#decorate Decorated} function for applying\n   * {@link module:engine/model/operation/operation~Operation operations} to the model.\n   *\n   * This is a low-level way of changing the model. It is exposed for very specific use cases (like the undo feature).\n   * Normally, to modify the model, you will want to use {@link module:engine/model/writer~Writer `Writer`}.\n   * See also {@glink framework/architecture/editing-engine#changing-the-model Changing the model} section\n   * of the {@glink framework/architecture/editing-engine Editing architecture} guide.\n   *\n   * @param operation The operation to apply.\n   */\n  applyOperation(operation) {\n    operation._execute();\n  }\n  // @if CK_DEBUG_ENGINE // public getAppliedOperation(): string {\n  // @if CK_DEBUG_ENGINE // \tif ( !this._appliedOperations ) {\n  // @if CK_DEBUG_ENGINE // \t\treturn '';\n  // @if CK_DEBUG_ENGINE // \t}\n  // @if CK_DEBUG_ENGINE // \treturn this._appliedOperations.map( operation => JSON.stringify( operation ) ).join( '-------' );\n  // @if CK_DEBUG_ENGINE // }\n  // @if CK_DEBUG_ENGINE // public createReplayer( stringifiedOperations: string ): typeof OperationReplayer {\n  // @if CK_DEBUG_ENGINE // \treturn new OperationReplayer( this, '-------', stringifiedOperations );\n  // @if CK_DEBUG_ENGINE // }\n  /**\n   * Inserts content at the position in the editor specified by the selection, as one would expect the paste\n   * functionality to work.\n   *\n   * **Note**: If you want to insert an {@glink framework/deep-dive/schema#object-elements object element}\n   * (e.g. a {@link module:widget/utils~toWidget widget}), see {@link #insertObject} instead.\n   *\n   * This is a high-level method. It takes the {@link #schema schema} into consideration when inserting\n   * the content, clears the given selection's content before inserting nodes and moves the selection\n   * to its target position at the end of the process.\n   * It can split elements, merge them, wrap bare text nodes with paragraphs, etc. &ndash; just like the\n   * pasting feature should do.\n   *\n   * For lower-level methods see {@link module:engine/model/writer~Writer `Writer`}.\n   *\n   * This method, unlike {@link module:engine/model/writer~Writer `Writer`}'s methods, does not have to be used\n   * inside a {@link #change `change()` block}.\n   *\n   * # Conversion and schema\n   *\n   * Inserting elements and text nodes into the model is not enough to make CKEditor 5 render that content\n   * to the user. CKEditor 5 implements a model-view-controller architecture and what `model.insertContent()` does\n   * is only adding nodes to the model. Additionally, you need to define\n   * {@glink framework/architecture/editing-engine#conversion converters} between the model and view\n   * and define those nodes in the {@glink framework/architecture/editing-engine#schema schema}.\n   *\n   * So, while this method may seem similar to CKEditor 4 `editor.insertHtml()` (in fact, both methods\n   * are used for paste-like content insertion), the CKEditor 5 method cannot be use to insert arbitrary HTML\n   * unless converters are defined for all elements and attributes in that HTML.\n   *\n   * # Examples\n   *\n   * Using `insertContent()` with a manually created model structure:\n   *\n   * ```ts\n   * // Let's create a document fragment containing such content as:\n   * //\n   * // <paragraph>foo</paragraph>\n   * // <blockQuote>\n   * //    <paragraph>bar</paragraph>\n   * // </blockQuote>\n   * const docFrag = editor.model.change( writer => {\n   * \tconst p1 = writer.createElement( 'paragraph' );\n   * \tconst p2 = writer.createElement( 'paragraph' );\n   * \tconst blockQuote = writer.createElement( 'blockQuote' );\n   * \tconst docFrag = writer.createDocumentFragment();\n   *\n   * \twriter.append( p1, docFrag );\n   * \twriter.append( blockQuote, docFrag );\n   * \twriter.append( p2, blockQuote );\n   * \twriter.insertText( 'foo', p1 );\n   * \twriter.insertText( 'bar', p2 );\n   *\n   * \treturn docFrag;\n   * } );\n   *\n   * // insertContent() does not have to be used in a change() block. It can, though,\n   * // so this code could be moved to the callback defined above.\n   * editor.model.insertContent( docFrag );\n   * ```\n   *\n   * Using `insertContent()` with an HTML string converted to a model document fragment (similar to the pasting mechanism):\n   *\n   * ```ts\n   * // You can create your own HtmlDataProcessor instance or use editor.data.processor\n   * // if you have not overridden the default one (which is the HtmlDataProcessor instance).\n   * const htmlDP = new HtmlDataProcessor( viewDocument );\n   *\n   * // Convert an HTML string to a view document fragment:\n   * const viewFragment = htmlDP.toView( htmlString );\n   *\n   * // Convert the view document fragment to a model document fragment\n   * // in the context of $root. This conversion takes the schema into\n   * // account so if, for example, the view document fragment contained a bare text node,\n   * // this text node cannot be a child of $root, so it will be automatically\n   * // wrapped with a <paragraph>. You can define the context yourself (in the second parameter),\n   * // and e.g. convert the content like it would happen in a <paragraph>.\n   * // Note: The clipboard feature uses a custom context called $clipboardHolder\n   * // which has a loosened schema.\n   * const modelFragment = editor.data.toModel( viewFragment );\n   *\n   * editor.model.insertContent( modelFragment );\n   * ```\n   *\n   * By default this method will use the document selection but it can also be used with a position, range or selection instance.\n   *\n   * ```ts\n   * // Insert text at the current document selection position.\n   * editor.model.change( writer => {\n   * \teditor.model.insertContent( writer.createText( 'x' ) );\n   * } );\n   *\n   * // Insert text at a given position - the document selection will not be modified.\n   * editor.model.change( writer => {\n   * \teditor.model.insertContent( writer.createText( 'x' ), doc.getRoot(), 2 );\n   *\n   * \t// Which is a shorthand for:\n   * \teditor.model.insertContent( writer.createText( 'x' ), writer.createPositionAt( doc.getRoot(), 2 ) );\n   * } );\n   * ```\n   *\n   * If you want the document selection to be moved to the inserted content, use the\n   * {@link module:engine/model/writer~Writer#setSelection `setSelection()`} method of the writer after inserting\n   * the content:\n   *\n   * ```ts\n   * editor.model.change( writer => {\n   * \tconst paragraph = writer.createElement( 'paragraph' );\n   *\n   * \t// Insert an empty paragraph at the beginning of the root.\n   * \teditor.model.insertContent( paragraph, writer.createPositionAt( editor.model.document.getRoot(), 0 ) );\n   *\n   * \t// Move the document selection to the inserted paragraph.\n   * \twriter.setSelection( paragraph, 'in' );\n   * } );\n   * ```\n   *\n   * If an instance of the {@link module:engine/model/selection~Selection model selection} is passed as `selectable`,\n   * the new content will be inserted at the passed selection (instead of document selection):\n   *\n   * ```ts\n   * editor.model.change( writer => {\n   * \t// Create a selection in a paragraph that will be used as a place of insertion.\n   * \tconst selection = writer.createSelection( paragraph, 'in' );\n   *\n   * \t// Insert the new text at the created selection.\n   * \teditor.model.insertContent( writer.createText( 'x' ), selection );\n   *\n   * \t// insertContent() modifies the passed selection instance so it can be used to set the document selection.\n   * \t// Note: This is not necessary when you passed the document selection to insertContent().\n   * \twriter.setSelection( selection );\n   * } );\n   * ```\n   *\n   * @fires insertContent\n   * @param content The content to insert.\n   * @param selectable The selection into which the content should be inserted.\n   * If not provided the current model document selection will be used.\n   * @param placeOrOffset To be used when a model item was passed as `selectable`.\n   * This param defines a position in relation to that item.\n   * at the insertion position.\n   */\n  insertContent(content, selectable, placeOrOffset, ...rest) {\n    const selection = normalizeSelectable(selectable, placeOrOffset);\n    return this.fire(\"insertContent\", [content, selection, placeOrOffset, ...rest]);\n  }\n  /**\n   * Inserts an {@glink framework/deep-dive/schema#object-elements object element} at a specific position in the editor content.\n   *\n   * This is a high-level API:\n   * * It takes the {@link #schema schema} into consideration,\n   * * It clears the content of passed `selectable` before inserting,\n   * * It can move the selection at the end of the process,\n   * * It will copy the selected block's attributes to preserve them upon insertion,\n   * * It can split elements or wrap inline objects with paragraphs if they are not allowed in target position,\n   * * etc.\n   *\n   * # Notes\n   *\n   * * If you want to insert a non-object content, see {@link #insertContent} instead.\n   * * For lower-level API, see {@link module:engine/model/writer~Writer `Writer`}.\n   * * Unlike {@link module:engine/model/writer~Writer `Writer`}, this method does not have to be used inside\n   * a {@link #change `change()` block}.\n   * * Inserting object into the model is not enough to make CKEditor 5 render that content to the user.\n   * CKEditor 5 implements a model-view-controller architecture and what `model.insertObject()` does\n   * is only adding nodes to the model. Additionally, you need to define\n   * {@glink framework/architecture/editing-engine#conversion converters} between the model and view\n   * and define those nodes in the {@glink framework/architecture/editing-engine#schema schema}.\n   *\n   * # Examples\n   *\n   * Use the following code to insert an object at the current selection and keep the selection on the inserted element:\n   *\n   * ```ts\n   * const rawHtmlEmbedElement = writer.createElement( 'rawHtml' );\n   *\n   * model.insertObject( rawHtmlEmbedElement, null, null, {\n   * \tsetSelection: 'on'\n   * } );\n   * ```\n   *\n   * Use the following code to insert an object at the current selection and nudge the selection after the inserted object:\n   *\n   * ```ts\n   * const pageBreakElement = writer.createElement( 'pageBreak' );\n   *\n   * model.insertObject( pageBreakElement, null, null, {\n   * \tsetSelection: 'after'\n   * } );\n   * ```\n   *\n   * Use the following code to insert an object at the current selection and avoid splitting the content (non-destructive insertion):\n   *\n   * ```ts\n   * const tableElement = writer.createElement( 'table' );\n   *\n   * model.insertObject( tableElement, null, null, {\n   * \tfindOptimalPosition: 'auto'\n   * } );\n   * ```\n   *\n   * Use the following code to insert an object at the specific range (also: replace the content of the range):\n   *\n   * ```ts\n   * const tableElement = writer.createElement( 'table' );\n   * const range = model.createRangeOn( model.document.getRoot().getChild( 1 ) );\n   *\n   * model.insertObject( tableElement, range );\n   * ```\n   *\n   * @param element An object to be inserted into the model document.\n   * @param selectable A selectable where the content should be inserted. If not specified, the current\n   * {@link module:engine/model/document~Document#selection document selection} will be used instead.\n   * @param placeOrOffset Specifies the exact place or offset for the insertion to take place, relative to `selectable`.\n   * @param options Additional options.\n   * @param options.findOptimalPosition An option that, when set, adjusts the insertion position (relative to\n   * `selectable` and `placeOrOffset`) so that the content of `selectable` is not split upon insertion (a.k.a. non-destructive insertion).\n   * * When `'auto'`, the algorithm will decide whether to insert the object before or after `selectable` to avoid content splitting.\n   * * When `'before'`, the closest position before `selectable` will be used that will not result in content splitting.\n   * * When `'after'`, the closest position after `selectable` will be used that will not result in content splitting.\n   *\n   * Note that this option only works for block objects. Inline objects are inserted into text and do not split blocks.\n   * @param options.setSelection An option that, when set, moves the\n   * {@link module:engine/model/document~Document#selection document selection} after inserting the object.\n   * * When `'on'`, the document selection will be set on the inserted object.\n   * * When `'after'`, the document selection will move to the closest text node after the inserted object. If there is no\n   * such text node, a paragraph will be created and the document selection will be moved inside it.\n   * at the insertion position.\n   */\n  insertObject(element, selectable, placeOrOffset, options, ...rest) {\n    const selection = normalizeSelectable(selectable, placeOrOffset);\n    return this.fire(\"insertObject\", [element, selection, options, options, ...rest]);\n  }\n  /**\n   * Deletes content of the selection and merge siblings. The resulting selection is always collapsed.\n   *\n   * **Note:** For the sake of predictability, the resulting selection should always be collapsed.\n   * In cases where a feature wants to modify deleting behavior so selection isn't collapsed\n   * (e.g. a table feature may want to keep row selection after pressing <kbd>Backspace</kbd>),\n   * then that behavior should be implemented in the view's listener. At the same time, the table feature\n   * will need to modify this method's behavior too, e.g. to \"delete contents and then collapse\n   * the selection inside the last selected cell\" or \"delete the row and collapse selection somewhere near\".\n   * That needs to be done in order to ensure that other features which use `deleteContent()` will work well with tables.\n   *\n   * @fires deleteContent\n   * @param selection Selection of which the content should be deleted.\n   * @param options.leaveUnmerged Whether to merge elements after removing the content of the selection.\n   *\n   * For example `<heading1>x[x</heading1><paragraph>y]y</paragraph>` will become:\n   *\n   * * `<heading1>x^y</heading1>` with the option disabled (`leaveUnmerged == false`)\n   * * `<heading1>x^</heading1><paragraph>y</paragraph>` with enabled (`leaveUnmerged == true`).\n   *\n   * Note: {@link module:engine/model/schema~Schema#isObject object} and {@link module:engine/model/schema~Schema#isLimit limit}\n   * elements will not be merged.\n   *\n   * @param options.doNotResetEntireContent Whether to skip replacing the entire content with a\n   * paragraph when the entire content was selected.\n   *\n   * For example `<heading1>[x</heading1><paragraph>y]</paragraph>` will become:\n   *\n   * * `<paragraph>^</paragraph>` with the option disabled (`doNotResetEntireContent == false`)\n   * * `<heading1>^</heading1>` with enabled (`doNotResetEntireContent == true`)\n   *\n   * @param options.doNotAutoparagraph Whether to create a paragraph if after content deletion selection is moved\n   * to a place where text cannot be inserted.\n   *\n   * For example `<paragraph>x</paragraph>[<imageBlock src=\"foo.jpg\"></imageBlock>]` will become:\n   *\n   * * `<paragraph>x</paragraph><paragraph>[]</paragraph>` with the option disabled (`doNotAutoparagraph == false`)\n   * * `<paragraph>x[]</paragraph>` with the option enabled (`doNotAutoparagraph == true`).\n   *\n   * **Note:** if there is no valid position for the selection, the paragraph will always be created:\n   *\n   * `[<imageBlock src=\"foo.jpg\"></imageBlock>]` -> `<paragraph>[]</paragraph>`.\n   *\n   * @param options.direction The direction in which the content is being consumed.\n   * Deleting backward corresponds to using the <kbd>Backspace</kbd> key, while deleting content forward corresponds to\n   * the <kbd>Shift</kbd>+<kbd>Backspace</kbd> keystroke.\n   */\n  deleteContent(selection, options) {\n    deleteContent(this, selection, options);\n  }\n  /**\n   * Modifies the selection. Currently, the supported modifications are:\n   *\n   * * Extending. The selection focus is moved in the specified `options.direction` with a step specified in `options.unit`.\n   * Possible values for `unit` are:\n   *  * `'character'` (default) - moves selection by one user-perceived character. In most cases this means moving by one\n   *  character in `String` sense. However, unicode also defines \"combing marks\". These are special symbols, that combines\n   *  with a symbol before it (\"base character\") to create one user-perceived character. For example, `q̣̇` is a normal\n   *  letter `q` with two \"combining marks\": upper dot (`Ux0307`) and lower dot (`Ux0323`). For most actions, i.e. extending\n   *  selection by one position, it is correct to include both \"base character\" and all of it's \"combining marks\". That is\n   *  why `'character'` value is most natural and common method of modifying selection.\n   *  * `'codePoint'` - moves selection by one unicode code point. In contrary to, `'character'` unit, this will insert\n   *  selection between \"base character\" and \"combining mark\", because \"combining marks\" have their own unicode code points.\n   *  However, for technical reasons, unicode code points with values above `UxFFFF` are represented in native `String` by\n   *  two characters, called \"surrogate pairs\". Halves of \"surrogate pairs\" have a meaning only when placed next to each other.\n   *  For example `𨭎` is represented in `String` by `\\uD862\\uDF4E`. Both `\\uD862` and `\\uDF4E` do not have any meaning\n   *  outside the pair (are rendered as ? when alone). Position between them would be incorrect. In this case, selection\n   *  extension will include whole \"surrogate pair\".\n   *  * `'word'` - moves selection by a whole word.\n   *\n   * **Note:** if you extend a forward selection in a backward direction you will in fact shrink it.\n   *\n   * @fires modifySelection\n   * @param selection The selection to modify.\n   * @param options.direction The direction in which the selection should be modified.\n   * @param options.unit The unit by which selection should be modified.\n   * @param options.treatEmojiAsSingleUnit Whether multi-characer emoji sequences should be handled as single unit.\n   */\n  modifySelection(selection, options) {\n    modifySelection(this, selection, options);\n  }\n  /**\n   * Gets a clone of the selected content.\n   *\n   * For example, for the following selection:\n   *\n   * ```html\n   * <paragraph>x</paragraph>\n   * <blockQuote>\n   * \t<paragraph>y</paragraph>\n   * \t<heading1>fir[st</heading1>\n   * </blockQuote>\n   * <paragraph>se]cond</paragraph>\n   * <paragraph>z</paragraph>\n   * ```\n   *\n   * It will return a document fragment with such a content:\n   *\n   * ```html\n   * <blockQuote>\n   * \t<heading1>st</heading1>\n   * </blockQuote>\n   * <paragraph>se</paragraph>\n   * ```\n   *\n   * @fires getSelectedContent\n   * @param selection The selection of which content will be returned.\n   */\n  getSelectedContent(selection) {\n    return getSelectedContent(this, selection);\n  }\n  /**\n   * Checks whether the given {@link module:engine/model/range~Range range} or\n   * {@link module:engine/model/element~Element element} has any meaningful content.\n   *\n   * Meaningful content is:\n   *\n   * * any text node (`options.ignoreWhitespaces` allows controlling whether this text node must also contain\n   * any non-whitespace characters),\n   * * or any {@link module:engine/model/schema~Schema#isContent content element},\n   * * or any {@link module:engine/model/markercollection~Marker marker} which\n   * {@link module:engine/model/markercollection~Marker#_affectsData affects data}.\n   *\n   * This means that a range containing an empty `<paragraph></paragraph>` is not considered to have a meaningful content.\n   * However, a range containing an `<imageBlock></imageBlock>` (which would normally be marked in the schema as an object element)\n   * is considered non-empty.\n   *\n   * @param rangeOrElement Range or element to check.\n   * @param options.ignoreWhitespaces Whether text node with whitespaces only should be considered empty.\n   * @param options.ignoreMarkers Whether markers should be ignored.\n   */\n  hasContent(rangeOrElement, options = {}) {\n    const range = rangeOrElement instanceof Range2 ? rangeOrElement : Range2._createIn(rangeOrElement);\n    if (range.isCollapsed) {\n      return false;\n    }\n    const { ignoreWhitespaces = false, ignoreMarkers = false } = options;\n    if (!ignoreMarkers) {\n      for (const intersectingMarker of this.markers.getMarkersIntersectingRange(range)) {\n        if (intersectingMarker.affectsData) {\n          return true;\n        }\n      }\n    }\n    for (const item of range.getItems()) {\n      if (this.schema.isContent(item)) {\n        if (item.is(\"$textProxy\")) {\n          if (!ignoreWhitespaces) {\n            return true;\n          } else if (item.data.search(/\\S/) !== -1) {\n            return true;\n          }\n        } else {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n  /**\n   * Check whether given selectable is at a place in the model where it can be edited (returns `true`) or not (returns `false`).\n   *\n   * Should be used instead of {@link module:core/editor/editor~Editor#isReadOnly} to check whether a user action can happen at\n   * given selectable. It may be decorated and used differently in different environment (e.g. multi-root editor can disable\n   * a particular root).\n   *\n   * This method is decorated. Although this method accepts any parameter of `Selectable` type, the\n   * {@link ~Model#event:canEditAt `canEditAt` event} is fired with `selectable` normalized to an instance of\n   * {@link module:engine/model/selection~Selection} or {@link module:engine/model/documentselection~DocumentSelection}\n   *\n   * @fires canEditAt\n   */\n  canEditAt(selectable) {\n    const selection = normalizeSelectable(selectable);\n    return this.fire(\"canEditAt\", [selection]);\n  }\n  /**\n   * Creates a position from the given root and path in that root.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createPositionFromPath `Writer#createPositionFromPath()`}.\n   *\n   * @param root Root of the position.\n   * @param path Position path. See {@link module:engine/model/position~Position#path}.\n   * @param stickiness Position stickiness. See {@link module:engine/model/position~PositionStickiness}.\n   */\n  createPositionFromPath(root2, path, stickiness) {\n    return new Position2(root2, path, stickiness);\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/model/position~Position position},\n   * * a parent element and offset in that element,\n   * * a parent element and `'end'` (the position will be set at the end of that element),\n   * * a {@link module:engine/model/item~Item model item} and `'before'` or `'after'`\n   * (the position will be set before or after the given model item).\n   *\n   * This method is a shortcut to other factory methods such as:\n   *\n   * * {@link module:engine/model/model~Model#createPositionBefore `createPositionBefore()`},\n   * * {@link module:engine/model/model~Model#createPositionAfter `createPositionAfter()`}.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createPositionAt `Writer#createPositionAt()`},\n   *\n   * @param itemOrPosition\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/model/item~Item model item}.\n   */\n  createPositionAt(itemOrPosition, offset) {\n    return Position2._createAt(itemOrPosition, offset);\n  }\n  /**\n   * Creates a new position after the given {@link module:engine/model/item~Item model item}.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createPositionAfter `Writer#createPositionAfter()`}.\n   *\n   * @param item Item after which the position should be placed.\n   */\n  createPositionAfter(item) {\n    return Position2._createAfter(item);\n  }\n  /**\n   * Creates a new position before the given {@link module:engine/model/item~Item model item}.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createPositionBefore `Writer#createPositionBefore()`}.\n   *\n   * @param item Item before which the position should be placed.\n   */\n  createPositionBefore(item) {\n    return Position2._createBefore(item);\n  }\n  /**\n   * Creates a range spanning from the `start` position to the `end` position.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createRange `Writer#createRange()`}:\n   *\n   * ```ts\n   * model.change( writer => {\n   * \tconst range = writer.createRange( start, end );\n   * } );\n   * ```\n   *\n   * @param start Start position.\n   * @param end End position. If not set, the range will be collapsed to the `start` position.\n   */\n  createRange(start, end) {\n    return new Range2(start, end);\n  }\n  /**\n   * Creates a range inside the given element which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * Note: This method is also available as\n   * {@link module:engine/model/writer~Writer#createRangeIn `Writer#createRangeIn()`}:\n   *\n   * ```ts\n   * model.change( writer => {\n   * \tconst range = writer.createRangeIn( paragraph );\n   * } );\n   * ```\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeIn(element) {\n    return Range2._createIn(element);\n  }\n  /**\n   * Creates a range that starts before the given {@link module:engine/model/item~Item model item} and ends after it.\n   *\n   * Note: This method is also available on `writer` instance as\n   * {@link module:engine/model/writer~Writer#createRangeOn `Writer.createRangeOn()`}:\n   *\n   * ```ts\n   * model.change( writer => {\n   * \tconst range = writer.createRangeOn( paragraph );\n   * } );\n   * ```\n   *\n   * @param item\n   */\n  createRangeOn(item) {\n    return Range2._createOn(item);\n  }\n  createSelection(...args) {\n    return new Selection2(...args);\n  }\n  /**\n   * Creates a {@link module:engine/model/batch~Batch} instance.\n   *\n   * **Note:** In most cases creating a batch instance is not necessary as they are created when using:\n   *\n   * * {@link #change `change()`},\n   * * {@link #enqueueChange `enqueueChange()`}.\n   *\n   * @param type {@link module:engine/model/batch~Batch#constructor The type} of the batch.\n   */\n  createBatch(type) {\n    return new Batch(type);\n  }\n  /**\n   * Creates an operation instance from a JSON object (parsed JSON string).\n   *\n   * This is an alias for {@link module:engine/model/operation/operationfactory~OperationFactory.fromJSON `OperationFactory.fromJSON()`}.\n   *\n   * @param json Deserialized JSON object.\n   */\n  createOperationFromJSON(json) {\n    return OperationFactory.fromJSON(json, this.document);\n  }\n  /**\n   * Removes all events listeners set by model instance and destroys {@link module:engine/model/document~Document}.\n   */\n  destroy() {\n    this.document.destroy();\n    this.stopListening();\n  }\n  /**\n   * Common part of {@link module:engine/model/model~Model#change} and {@link module:engine/model/model~Model#enqueueChange}\n   * which calls callbacks and returns array of values returned by these callbacks.\n   */\n  _runPendingChanges() {\n    const ret = [];\n    this.fire(\"_beforeChanges\");\n    try {\n      while (this._pendingChanges.length) {\n        const currentBatch = this._pendingChanges[0].batch;\n        this._currentWriter = new Writer(this, currentBatch);\n        const callbackReturnValue = this._pendingChanges[0].callback(this._currentWriter);\n        ret.push(callbackReturnValue);\n        this.document._handleChangeBlock(this._currentWriter);\n        this._pendingChanges.shift();\n        this._currentWriter = null;\n      }\n    } finally {\n      this._pendingChanges.length = 0;\n      this._currentWriter = null;\n      this.fire(\"_afterChanges\");\n    }\n    return ret;\n  }\n};\nfunction normalizeSelectable(selectable, placeOrOffset) {\n  if (!selectable) {\n    return;\n  }\n  if (selectable instanceof Selection2 || selectable instanceof DocumentSelection2) {\n    return selectable;\n  }\n  if (selectable instanceof Node3) {\n    if (placeOrOffset || placeOrOffset === 0) {\n      return new Selection2(selectable, placeOrOffset);\n    } else if (selectable.is(\"rootElement\")) {\n      return new Selection2(selectable, \"in\");\n    } else {\n      return new Selection2(selectable, \"on\");\n    }\n  }\n  return new Selection2(selectable);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/clickobserver.js\nvar ClickObserver = class extends DomEventObserver {\n  constructor() {\n    super(...arguments);\n    this.domEventType = \"click\";\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvent) {\n    this.fire(domEvent.type, domEvent);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver.js\nvar MouseObserver = class extends DomEventObserver {\n  constructor() {\n    super(...arguments);\n    this.domEventType = [\"mousedown\", \"mouseup\", \"mouseover\", \"mouseout\"];\n  }\n  /**\n   * @inheritDoc\n   */\n  onDomEvent(domEvent) {\n    this.fire(domEvent.type, domEvent);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/upcastwriter.js\nvar UpcastWriter = class {\n  /**\n   * @param document The view document instance in which this upcast writer operates.\n   */\n  constructor(document2) {\n    this.document = document2;\n  }\n  /**\n   * Creates a new {@link module:engine/view/documentfragment~DocumentFragment} instance.\n   *\n   * @param children A list of nodes to be inserted into the created document fragment.\n   * @returns The created document fragment.\n   */\n  createDocumentFragment(children) {\n    return new DocumentFragment(this.document, children);\n  }\n  /**\n   * Creates a new {@link module:engine/view/element~Element} instance.\n   *\n   * Attributes can be passed in various formats:\n   *\n   * ```ts\n   * upcastWriter.createElement( 'div', { class: 'editor', contentEditable: 'true' } ); // object\n   * upcastWriter.createElement( 'div', [ [ 'class', 'editor' ], [ 'contentEditable', 'true' ] ] ); // map-like iterator\n   * upcastWriter.createElement( 'div', mapOfAttributes ); // map\n   * ```\n   *\n   * @param name Node name.\n   * @param attrs Collection of attributes.\n   * @param children A list of nodes to be inserted into created element.\n   * @returns Created element.\n   */\n  createElement(name, attrs, children) {\n    return new Element(this.document, name, attrs, children);\n  }\n  /**\n   * Creates a new {@link module:engine/view/text~Text} instance.\n   *\n   * @param data The text's data.\n   * @returns The created text node.\n   */\n  createText(data) {\n    return new Text(this.document, data);\n  }\n  /**\n   * Clones the provided element.\n   *\n   * @see module:engine/view/element~Element#_clone\n   * @param element Element to be cloned.\n   * @param deep If set to `true` clones element and all its children recursively. When set to `false`,\n   * element will be cloned without any children.\n   * @returns Clone of this element.\n   */\n  clone(element, deep = false) {\n    return element._clone(deep);\n  }\n  /**\n   * Appends a child node or a list of child nodes at the end of this node\n   * and sets the parent of these nodes to this element.\n   *\n   * @see module:engine/view/element~Element#_appendChild\n   * @param items Items to be inserted.\n   * @param element Element to which items will be appended.\n   * @returns Number of appended nodes.\n   */\n  appendChild(items, element) {\n    return element._appendChild(items);\n  }\n  /**\n   * Inserts a child node or a list of child nodes on the given index and sets the parent of these nodes to\n   * this element.\n   *\n   * @see module:engine/view/element~Element#_insertChild\n   * @param index Offset at which nodes should be inserted.\n   * @param items Items to be inserted.\n   * @param element Element to which items will be inserted.\n   * @returns Number of inserted nodes.\n   */\n  insertChild(index, items, element) {\n    return element._insertChild(index, items);\n  }\n  /**\n   * Removes the given number of child nodes starting at the given index and set the parent of these nodes to `null`.\n   *\n   * @see module:engine/view/element~Element#_removeChildren\n   * @param index Offset from which nodes will be removed.\n   * @param howMany Number of nodes to remove.\n   * @param element Element which children will be removed.\n   * @returns The array containing removed nodes.\n   */\n  removeChildren(index, howMany, element) {\n    return element._removeChildren(index, howMany);\n  }\n  /**\n   * Removes given element from the view structure. Will not have effect on detached elements.\n   *\n   * @param element Element which will be removed.\n   * @returns The array containing removed nodes.\n   */\n  remove(element) {\n    const parent2 = element.parent;\n    if (parent2) {\n      return this.removeChildren(parent2.getChildIndex(element), 1, parent2);\n    }\n    return [];\n  }\n  /**\n   * Replaces given element with the new one in the view structure. Will not have effect on detached elements.\n   *\n   * @param oldElement Element which will be replaced.\n   * @param newElement Element which will be inserted in the place of the old element.\n   * @returns Whether old element was successfully replaced.\n   */\n  replace(oldElement, newElement) {\n    const parent2 = oldElement.parent;\n    if (parent2) {\n      const index = parent2.getChildIndex(oldElement);\n      this.removeChildren(index, 1, parent2);\n      this.insertChild(index, newElement, parent2);\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Removes given element from view structure and places its children in its position.\n   * It does nothing if element has no parent.\n   *\n   * @param element Element to unwrap.\n   */\n  unwrapElement(element) {\n    const parent2 = element.parent;\n    if (parent2) {\n      const index = parent2.getChildIndex(element);\n      this.remove(element);\n      this.insertChild(index, element.getChildren(), parent2);\n    }\n  }\n  /**\n   * Renames element by creating a copy of a given element but with its name changed and then moving contents of the\n   * old element to the new one.\n   *\n   * Since this function creates a new element and removes the given one, the new element is returned to keep reference.\n   *\n   * @param newName New element name.\n   * @param  element Element to be renamed.\n   * @returns New element or null if the old element was not replaced (happens for detached elements).\n   */\n  rename(newName, element) {\n    const newElement = new Element(this.document, newName, element.getAttributes(), element.getChildren());\n    return this.replace(element, newElement) ? newElement : null;\n  }\n  /**\n   * Adds or overwrites element's attribute with a specified key and value.\n   *\n   * ```ts\n   * writer.setAttribute( 'href', 'http://ckeditor.com', linkElement );\n   * ```\n   *\n   * @see module:engine/view/element~Element#_setAttribute\n   * @param key Attribute key.\n   * @param value Attribute value.\n   * @param element Element for which attribute will be set.\n   */\n  setAttribute(key, value, element) {\n    element._setAttribute(key, value);\n  }\n  /**\n   * Removes attribute from the element.\n   *\n   * ```ts\n   * writer.removeAttribute( 'href', linkElement );\n   * ```\n   *\n   * @see module:engine/view/element~Element#_removeAttribute\n   * @param key Attribute key.\n   * @param element Element from which attribute will be removed.\n   */\n  removeAttribute(key, element) {\n    element._removeAttribute(key);\n  }\n  /**\n   * Adds specified class to the element.\n   *\n   * ```ts\n   * writer.addClass( 'foo', linkElement );\n   * writer.addClass( [ 'foo', 'bar' ], linkElement );\n   * ```\n   *\n   * @see module:engine/view/element~Element#_addClass\n   * @param className Single class name or array of class names which will be added.\n   * @param element Element for which class will be added.\n   */\n  addClass(className, element) {\n    element._addClass(className);\n  }\n  /**\n   * Removes specified class from the element.\n   *\n   * ```ts\n   * writer.removeClass( 'foo', linkElement );\n   * writer.removeClass( [ 'foo', 'bar' ], linkElement );\n   * ```\n   *\n   * @see module:engine/view/element~Element#_removeClass\n   * @param className Single class name or array of class names which will be removed.\n   * @param element Element from which class will be removed.\n   */\n  removeClass(className, element) {\n    element._removeClass(className);\n  }\n  setStyle(property, valueOrElement, element) {\n    if (isPlainObject_default(property) && element === void 0) {\n      valueOrElement._setStyle(property);\n    } else {\n      element._setStyle(property, valueOrElement);\n    }\n  }\n  /**\n   * Removes specified style from the element.\n   *\n   * ```ts\n   * writer.removeStyle( 'color', element );  // Removes 'color' style.\n   * writer.removeStyle( [ 'color', 'border-top' ], element ); // Removes both 'color' and 'border-top' styles.\n   * ```\n   *\n   * **Note**: This method can work with normalized style names if\n   * {@link module:engine/controller/datacontroller~DataController#addStyleProcessorRules a particular style processor rule is enabled}.\n   * See {@link module:engine/view/stylesmap~StylesMap#remove `StylesMap#remove()`} for details.\n   *\n   * @see module:engine/view/element~Element#_removeStyle\n   * @param property Style property name or names to be removed.\n   * @param element Element from which style will be removed.\n   */\n  removeStyle(property, element) {\n    element._removeStyle(property);\n  }\n  /**\n   * Sets a custom property on element. Unlike attributes, custom properties are not rendered to the DOM,\n   * so they can be used to add special data to elements.\n   *\n   * @see module:engine/view/element~Element#_setCustomProperty\n   * @param key Custom property name/key.\n   * @param value Custom property value to be stored.\n   * @param element Element for which custom property will be set.\n   */\n  setCustomProperty(key, value, element) {\n    element._setCustomProperty(key, value);\n  }\n  /**\n   * Removes a custom property stored under the given key.\n   *\n   * @see module:engine/view/element~Element#_removeCustomProperty\n   * @param key Name/key of the custom property to be removed.\n   * @param element Element from which the custom property will be removed.\n   * @returns Returns true if property was removed.\n   */\n  removeCustomProperty(key, element) {\n    return element._removeCustomProperty(key);\n  }\n  /**\n   * Creates position at the given location. The location can be specified as:\n   *\n   * * a {@link module:engine/view/position~Position position},\n   * * parent element and offset (offset defaults to `0`),\n   * * parent element and `'end'` (sets position at the end of that element),\n   * * {@link module:engine/view/item~Item view item} and `'before'` or `'after'` (sets position before or after given view item).\n   *\n   * This method is a shortcut to other constructors such as:\n   *\n   * * {@link #createPositionBefore},\n   * * {@link #createPositionAfter},\n   *\n   * @param offset Offset or one of the flags. Used only when first parameter is a {@link module:engine/view/item~Item view item}.\n   */\n  createPositionAt(itemOrPosition, offset) {\n    return Position._createAt(itemOrPosition, offset);\n  }\n  /**\n   * Creates a new position after given view item.\n   *\n   * @param item View item after which the position should be located.\n   */\n  createPositionAfter(item) {\n    return Position._createAfter(item);\n  }\n  /**\n   * Creates a new position before given view item.\n   *\n   * @param item View item before which the position should be located.\n   */\n  createPositionBefore(item) {\n    return Position._createBefore(item);\n  }\n  /**\n   * Creates a range spanning from `start` position to `end` position.\n   *\n   * **Note:** This factory method creates it's own {@link module:engine/view/position~Position} instances basing on passed values.\n   *\n   * @param start Start position.\n   * @param end End position. If not set, range will be collapsed at `start` position.\n   */\n  createRange(start, end) {\n    return new Range(start, end);\n  }\n  /**\n   * Creates a range that starts before given {@link module:engine/view/item~Item view item} and ends after it.\n   */\n  createRangeOn(item) {\n    return Range._createOn(item);\n  }\n  /**\n   * Creates a range inside an {@link module:engine/view/element~Element element} which starts before the first child of\n   * that element and ends after the last child of that element.\n   *\n   * @param element Element which is a parent for the range.\n   */\n  createRangeIn(element) {\n    return Range._createIn(element);\n  }\n  createSelection(...args) {\n    return new Selection(...args);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/styles/utils.js\nvar HEX_COLOR_REGEXP = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nvar RGB_COLOR_REGEXP = /^rgb\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}[0-9]{1,3}[ %]?\\)$/i;\nvar RGBA_COLOR_REGEXP = /^rgba\\([ ]?([0-9]{1,3}[ %]?,[ ]?){3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;\nvar HSL_COLOR_REGEXP = /^hsl\\([ ]?([0-9]{1,3}[ %]?[,]?[ ]*){3}(1|[0-9]+%|[0]?\\.?[0-9]+)?\\)$/i;\nvar HSLA_COLOR_REGEXP = /^hsla\\([ ]?([0-9]{1,3}[ %]?,[ ]?){2,3}(1|[0-9]+%|[0]?\\.?[0-9]+)\\)$/i;\nvar CSS_SHORTHAND_VALUE_REGEXP = /\\w+\\((?:[^()]|\\([^()]*\\))*\\)|\\S+/gi;\nvar COLOR_NAMES = /* @__PURE__ */ new Set([\n  // CSS Level 1\n  \"black\",\n  \"silver\",\n  \"gray\",\n  \"white\",\n  \"maroon\",\n  \"red\",\n  \"purple\",\n  \"fuchsia\",\n  \"green\",\n  \"lime\",\n  \"olive\",\n  \"yellow\",\n  \"navy\",\n  \"blue\",\n  \"teal\",\n  \"aqua\",\n  // CSS Level 2 (Revision 1)\n  \"orange\",\n  // CSS Color Module Level 3\n  \"aliceblue\",\n  \"antiquewhite\",\n  \"aquamarine\",\n  \"azure\",\n  \"beige\",\n  \"bisque\",\n  \"blanchedalmond\",\n  \"blueviolet\",\n  \"brown\",\n  \"burlywood\",\n  \"cadetblue\",\n  \"chartreuse\",\n  \"chocolate\",\n  \"coral\",\n  \"cornflowerblue\",\n  \"cornsilk\",\n  \"crimson\",\n  \"cyan\",\n  \"darkblue\",\n  \"darkcyan\",\n  \"darkgoldenrod\",\n  \"darkgray\",\n  \"darkgreen\",\n  \"darkgrey\",\n  \"darkkhaki\",\n  \"darkmagenta\",\n  \"darkolivegreen\",\n  \"darkorange\",\n  \"darkorchid\",\n  \"darkred\",\n  \"darksalmon\",\n  \"darkseagreen\",\n  \"darkslateblue\",\n  \"darkslategray\",\n  \"darkslategrey\",\n  \"darkturquoise\",\n  \"darkviolet\",\n  \"deeppink\",\n  \"deepskyblue\",\n  \"dimgray\",\n  \"dimgrey\",\n  \"dodgerblue\",\n  \"firebrick\",\n  \"floralwhite\",\n  \"forestgreen\",\n  \"gainsboro\",\n  \"ghostwhite\",\n  \"gold\",\n  \"goldenrod\",\n  \"greenyellow\",\n  \"grey\",\n  \"honeydew\",\n  \"hotpink\",\n  \"indianred\",\n  \"indigo\",\n  \"ivory\",\n  \"khaki\",\n  \"lavender\",\n  \"lavenderblush\",\n  \"lawngreen\",\n  \"lemonchiffon\",\n  \"lightblue\",\n  \"lightcoral\",\n  \"lightcyan\",\n  \"lightgoldenrodyellow\",\n  \"lightgray\",\n  \"lightgreen\",\n  \"lightgrey\",\n  \"lightpink\",\n  \"lightsalmon\",\n  \"lightseagreen\",\n  \"lightskyblue\",\n  \"lightslategray\",\n  \"lightslategrey\",\n  \"lightsteelblue\",\n  \"lightyellow\",\n  \"limegreen\",\n  \"linen\",\n  \"magenta\",\n  \"mediumaquamarine\",\n  \"mediumblue\",\n  \"mediumorchid\",\n  \"mediumpurple\",\n  \"mediumseagreen\",\n  \"mediumslateblue\",\n  \"mediumspringgreen\",\n  \"mediumturquoise\",\n  \"mediumvioletred\",\n  \"midnightblue\",\n  \"mintcream\",\n  \"mistyrose\",\n  \"moccasin\",\n  \"navajowhite\",\n  \"oldlace\",\n  \"olivedrab\",\n  \"orangered\",\n  \"orchid\",\n  \"palegoldenrod\",\n  \"palegreen\",\n  \"paleturquoise\",\n  \"palevioletred\",\n  \"papayawhip\",\n  \"peachpuff\",\n  \"peru\",\n  \"pink\",\n  \"plum\",\n  \"powderblue\",\n  \"rosybrown\",\n  \"royalblue\",\n  \"saddlebrown\",\n  \"salmon\",\n  \"sandybrown\",\n  \"seagreen\",\n  \"seashell\",\n  \"sienna\",\n  \"skyblue\",\n  \"slateblue\",\n  \"slategray\",\n  \"slategrey\",\n  \"snow\",\n  \"springgreen\",\n  \"steelblue\",\n  \"tan\",\n  \"thistle\",\n  \"tomato\",\n  \"turquoise\",\n  \"violet\",\n  \"wheat\",\n  \"whitesmoke\",\n  \"yellowgreen\",\n  // CSS Color Module Level 3 (System Colors)\n  \"activeborder\",\n  \"activecaption\",\n  \"appworkspace\",\n  \"background\",\n  \"buttonface\",\n  \"buttonhighlight\",\n  \"buttonshadow\",\n  \"buttontext\",\n  \"captiontext\",\n  \"graytext\",\n  \"highlight\",\n  \"highlighttext\",\n  \"inactiveborder\",\n  \"inactivecaption\",\n  \"inactivecaptiontext\",\n  \"infobackground\",\n  \"infotext\",\n  \"menu\",\n  \"menutext\",\n  \"scrollbar\",\n  \"threeddarkshadow\",\n  \"threedface\",\n  \"threedhighlight\",\n  \"threedlightshadow\",\n  \"threedshadow\",\n  \"window\",\n  \"windowframe\",\n  \"windowtext\",\n  // CSS Color Module Level 4\n  \"rebeccapurple\",\n  // Keywords\n  \"currentcolor\",\n  \"transparent\"\n]);\nfunction isColor(string) {\n  if (string.startsWith(\"#\")) {\n    return HEX_COLOR_REGEXP.test(string);\n  }\n  if (string.startsWith(\"rgb\")) {\n    return RGB_COLOR_REGEXP.test(string) || RGBA_COLOR_REGEXP.test(string);\n  }\n  if (string.startsWith(\"hsl\")) {\n    return HSL_COLOR_REGEXP.test(string) || HSLA_COLOR_REGEXP.test(string);\n  }\n  return COLOR_NAMES.has(string.toLowerCase());\n}\nvar lengthRegExp = /^([+-]?[0-9]*([.][0-9]+)?(px|cm|mm|in|pc|pt|ch|em|ex|rem|vh|vw|vmin|vmax)|0)$/;\nfunction isLength2(string) {\n  return lengthRegExp.test(string);\n}\nvar PERCENTAGE_VALUE_REGEXP = /^[+-]?[0-9]*([.][0-9]+)?%$/;\nfunction isPercentage(string) {\n  return PERCENTAGE_VALUE_REGEXP.test(string);\n}\nvar repeatValues = [\"repeat-x\", \"repeat-y\", \"repeat\", \"space\", \"round\", \"no-repeat\"];\nfunction isRepeat(string) {\n  return repeatValues.includes(string);\n}\nvar positionValues = [\"center\", \"top\", \"bottom\", \"left\", \"right\"];\nfunction isPosition(string) {\n  return positionValues.includes(string);\n}\nvar attachmentValues = [\"fixed\", \"scroll\", \"local\"];\nfunction isAttachment(string) {\n  return attachmentValues.includes(string);\n}\nvar urlRegExp = /^url\\(/;\nfunction isURL(string) {\n  return urlRegExp.test(string);\n}\nfunction getShorthandValues(string) {\n  const matches = string.matchAll(CSS_SHORTHAND_VALUE_REGEXP);\n  return Array.from(matches).map((i) => i[0]);\n}\n\n// node_modules/@ckeditor/ckeditor5-engine/src/view/styles/background.js\nfunction addBackgroundRules(stylesProcessor) {\n  stylesProcessor.setNormalizer(\"background\", getBackgroundNormalizer());\n  stylesProcessor.setNormalizer(\"background-color\", getBackgroundColorNormalizer());\n  stylesProcessor.setReducer(\"background\", getBackgroundReducer());\n  stylesProcessor.setStyleRelation(\"background\", [\"background-color\"]);\n}\nfunction getBackgroundNormalizer() {\n  return (value) => {\n    const background = {};\n    const parts = getShorthandValues(value);\n    for (const part of parts) {\n      if (isRepeat(part)) {\n        background.repeat = background.repeat || [];\n        background.repeat.push(part);\n      } else if (isPosition(part)) {\n        background.position = background.position || [];\n        background.position.push(part);\n      } else if (isAttachment(part)) {\n        background.attachment = part;\n      } else if (isColor(part)) {\n        background.color = part;\n      } else if (isURL(part)) {\n        background.image = part;\n      }\n    }\n    return {\n      path: \"background\",\n      value: background\n    };\n  };\n}\nfunction getBackgroundColorNormalizer() {\n  return (value) => ({ path: \"background.color\", value });\n}\nfunction getBackgroundReducer() {\n  return (value) => {\n    const ret = [];\n    ret.push([\"background-color\", value.color]);\n    return ret;\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/commandcollection.js\nvar CommandCollection = class {\n  /**\n   * Creates collection instance.\n   */\n  constructor() {\n    this._commands = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Registers a new command.\n   *\n   * @param commandName The name of the command.\n   */\n  add(commandName, command) {\n    this._commands.set(commandName, command);\n  }\n  /**\n   * Retrieves a command from the collection.\n   *\n   * @param commandName The name of the command.\n   */\n  get(commandName) {\n    return this._commands.get(commandName);\n  }\n  /**\n   * Executes a command.\n   *\n   * @param commandName The name of the command.\n   * @param commandParams Command parameters.\n   * @returns The value returned by the {@link module:core/command~Command#execute `command.execute()`}.\n   */\n  execute(commandName, ...commandParams) {\n    const command = this.get(commandName);\n    if (!command) {\n      throw new CKEditorError(\"commandcollection-command-not-found\", this, { commandName });\n    }\n    return command.execute(...commandParams);\n  }\n  /**\n   * Returns iterator of command names.\n   */\n  *names() {\n    yield* this._commands.keys();\n  }\n  /**\n   * Returns iterator of command instances.\n   */\n  *commands() {\n    yield* this._commands.values();\n  }\n  /**\n   * Iterable interface.\n   *\n   * Returns `[ commandName, commandInstance ]` pairs.\n   */\n  [Symbol.iterator]() {\n    return this._commands[Symbol.iterator]();\n  }\n  /**\n   * Destroys all collection commands.\n   */\n  destroy() {\n    for (const command of this.commands()) {\n      command.destroy();\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/editingkeystrokehandler.js\nvar EditingKeystrokeHandler = class extends KeystrokeHandler {\n  /**\n   * Creates an instance of the keystroke handler.\n   */\n  constructor(editor) {\n    super();\n    this.editor = editor;\n  }\n  /**\n   * Registers a handler for the specified keystroke.\n   *\n   * The handler can be specified as a command name or a callback.\n   *\n   * @param keystroke Keystroke defined in a format accepted by\n   * the {@link module:utils/keyboard~parseKeystroke} function.\n   * @param callback If a string is passed, then the keystroke will\n   * {@link module:core/editor/editor~Editor#execute execute a command}.\n   * If a function, then it will be called with the\n   * {@link module:engine/view/observer/keyobserver~KeyEventData key event data} object and\n   * a `cancel()` helper to both `preventDefault()` and `stopPropagation()` of the event.\n   * @param options Additional options.\n   * @param options.priority The priority of the keystroke callback. The higher the priority value\n   * the sooner the callback will be executed. Keystrokes having the same priority\n   * are called in the order they were added.\n   */\n  set(keystroke, callback, options = {}) {\n    if (typeof callback == \"string\") {\n      const commandName = callback;\n      callback = (evtData, cancel2) => {\n        this.editor.execute(commandName);\n        cancel2();\n      };\n    }\n    super.set(keystroke, callback, options);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/editor/editor.js\nvar Editor = class extends ObservableMixin() {\n  /**\n   * Creates a new instance of the editor class.\n   *\n   * Usually, not to be used directly. See the static {@link module:core/editor/editor~Editor.create `create()`} method.\n   *\n   * @param config The editor configuration.\n   */\n  constructor(config = {}) {\n    super();\n    const constructor = this.constructor;\n    const language = config.language || constructor.defaultConfig && constructor.defaultConfig.language;\n    this._context = config.context || new Context({ language });\n    this._context._addEditor(this, !config.context);\n    const availablePlugins = Array.from(constructor.builtinPlugins || []);\n    this.config = new Config(config, constructor.defaultConfig);\n    this.config.define(\"plugins\", availablePlugins);\n    this.config.define(this._context._getEditorConfig());\n    this.plugins = new PluginCollection(this, availablePlugins, this._context.plugins);\n    this.locale = this._context.locale;\n    this.t = this.locale.t;\n    this._readOnlyLocks = /* @__PURE__ */ new Set();\n    this.commands = new CommandCollection();\n    this.set(\"state\", \"initializing\");\n    this.once(\"ready\", () => this.state = \"ready\", { priority: \"high\" });\n    this.once(\"destroy\", () => this.state = \"destroyed\", { priority: \"high\" });\n    this.model = new Model();\n    this.on(\"change:isReadOnly\", () => {\n      this.model.document.isReadOnly = this.isReadOnly;\n    });\n    const stylesProcessor = new StylesProcessor();\n    this.data = new DataController(this.model, stylesProcessor);\n    this.editing = new EditingController(this.model, stylesProcessor);\n    this.editing.view.document.bind(\"isReadOnly\").to(this);\n    this.conversion = new Conversion([this.editing.downcastDispatcher, this.data.downcastDispatcher], this.data.upcastDispatcher);\n    this.conversion.addAlias(\"dataDowncast\", this.data.downcastDispatcher);\n    this.conversion.addAlias(\"editingDowncast\", this.editing.downcastDispatcher);\n    this.keystrokes = new EditingKeystrokeHandler(this);\n    this.keystrokes.listenTo(this.editing.view.document);\n  }\n  /**\n   * Defines whether the editor is in the read-only mode.\n   *\n   * In read-only mode the editor {@link #commands commands} are disabled so it is not possible\n   * to modify the document by using them. Also, the editable element(s) become non-editable.\n   *\n   * In order to make the editor read-only, you need to call the {@link #enableReadOnlyMode} method:\n   *\n   * ```ts\n   * editor.enableReadOnlyMode( 'feature-id' );\n   * ```\n   *\n   * Later, to turn off the read-only mode, call {@link #disableReadOnlyMode}:\n   *\n   * ```ts\n   * editor.disableReadOnlyMode( 'feature-id' );\n   * ```\n   *\n   * @readonly\n   * @observable\n   */\n  get isReadOnly() {\n    return this._readOnlyLocks.size > 0;\n  }\n  set isReadOnly(value) {\n    throw new CKEditorError(\"editor-isreadonly-has-no-setter\");\n  }\n  /**\n   * Turns on the read-only mode in the editor.\n   *\n   * Editor can be switched to or out of the read-only mode by many features, under various circumstances. The editor supports locking\n   * mechanism for the read-only mode. It enables easy control over the read-only mode when many features wants to turn it on or off at\n   * the same time, without conflicting with each other. It guarantees that you will not make the editor editable accidentally (which\n   * could lead to errors).\n   *\n   * Each read-only mode request is identified by a unique id (also called \"lock\"). If multiple plugins requested to turn on the\n   * read-only mode, then, the editor will become editable only after all these plugins turn the read-only mode off (using the same ids).\n   *\n   * Note, that you cannot force the editor to disable the read-only mode if other plugins set it.\n   *\n   * After the first `enableReadOnlyMode()` call, the {@link #isReadOnly `isReadOnly` property} will be set to `true`:\n   *\n   * ```ts\n   * editor.isReadOnly; // `false`.\n   * editor.enableReadOnlyMode( 'my-feature-id' );\n   * editor.isReadOnly; // `true`.\n   * ```\n   *\n   * You can turn off the read-only mode (\"clear the lock\") using the {@link #disableReadOnlyMode `disableReadOnlyMode()`} method:\n   *\n   * ```ts\n   * editor.enableReadOnlyMode( 'my-feature-id' );\n   * // ...\n   * editor.disableReadOnlyMode( 'my-feature-id' );\n   * editor.isReadOnly; // `false`.\n   * ```\n   *\n   * All \"locks\" need to be removed to enable editing:\n   *\n   * ```ts\n   * editor.enableReadOnlyMode( 'my-feature-id' );\n   * editor.enableReadOnlyMode( 'my-other-feature-id' );\n   * // ...\n   * editor.disableReadOnlyMode( 'my-feature-id' );\n   * editor.isReadOnly; // `true`.\n   * editor.disableReadOnlyMode( 'my-other-feature-id' );\n   * editor.isReadOnly; // `false`.\n   * ```\n   *\n   * @param lockId A unique ID for setting the editor to the read-only state.\n   */\n  enableReadOnlyMode(lockId) {\n    if (typeof lockId !== \"string\" && typeof lockId !== \"symbol\") {\n      throw new CKEditorError(\"editor-read-only-lock-id-invalid\", null, { lockId });\n    }\n    if (this._readOnlyLocks.has(lockId)) {\n      return;\n    }\n    this._readOnlyLocks.add(lockId);\n    if (this._readOnlyLocks.size === 1) {\n      this.fire(\"change:isReadOnly\", \"isReadOnly\", true, false);\n    }\n  }\n  /**\n   * Removes the read-only lock from the editor with given lock ID.\n   *\n   * When no lock is present on the editor anymore, then the {@link #isReadOnly `isReadOnly` property} will be set to `false`.\n   *\n   * @param lockId The lock ID for setting the editor to the read-only state.\n   */\n  disableReadOnlyMode(lockId) {\n    if (typeof lockId !== \"string\" && typeof lockId !== \"symbol\") {\n      throw new CKEditorError(\"editor-read-only-lock-id-invalid\", null, { lockId });\n    }\n    if (!this._readOnlyLocks.has(lockId)) {\n      return;\n    }\n    this._readOnlyLocks.delete(lockId);\n    if (this._readOnlyLocks.size === 0) {\n      this.fire(\"change:isReadOnly\", \"isReadOnly\", false, true);\n    }\n  }\n  /**\n   * Loads and initializes plugins specified in the configuration.\n   *\n   * @returns A promise which resolves once the initialization is completed, providing an array of loaded plugins.\n   */\n  initPlugins() {\n    const config = this.config;\n    const plugins = config.get(\"plugins\");\n    const removePlugins = config.get(\"removePlugins\") || [];\n    const extraPlugins = config.get(\"extraPlugins\") || [];\n    const substitutePlugins = config.get(\"substitutePlugins\") || [];\n    return this.plugins.init(plugins.concat(extraPlugins), removePlugins, substitutePlugins);\n  }\n  /**\n   * Destroys the editor instance, releasing all resources used by it.\n   *\n   * **Note** The editor cannot be destroyed during the initialization phase so if it is called\n   * while the editor {@link #state is being initialized}, it will wait for the editor initialization before destroying it.\n   *\n   * @fires destroy\n   * @returns A promise that resolves once the editor instance is fully destroyed.\n   */\n  destroy() {\n    let readyPromise = Promise.resolve();\n    if (this.state == \"initializing\") {\n      readyPromise = new Promise((resolve) => this.once(\"ready\", resolve));\n    }\n    return readyPromise.then(() => {\n      this.fire(\"destroy\");\n      this.stopListening();\n      this.commands.destroy();\n    }).then(() => this.plugins.destroy()).then(() => {\n      this.model.destroy();\n      this.data.destroy();\n      this.editing.destroy();\n      this.keystrokes.destroy();\n    }).then(() => this._context._removeEditor(this));\n  }\n  /**\n   * Executes the specified command with given parameters.\n   *\n   * Shorthand for:\n   *\n   * ```ts\n   * editor.commands.get( commandName ).execute( ... );\n   * ```\n   *\n   * @param commandName The name of the command to execute.\n   * @param commandParams Command parameters.\n   * @returns The value returned by the {@link module:core/commandcollection~CommandCollection#execute `commands.execute()`}.\n   */\n  execute(commandName, ...commandParams) {\n    try {\n      return this.commands.execute(commandName, ...commandParams);\n    } catch (err) {\n      CKEditorError.rethrowUnexpectedError(err, this);\n    }\n  }\n  /**\n   * Focuses the editor.\n   *\n   * **Note** To explicitly focus the editing area of the editor, use the\n   * {@link module:engine/view/view~View#focus `editor.editing.view.focus()`} method of the editing view.\n   *\n   * Check out the {@glink framework/deep-dive/ui/focus-tracking#focus-in-the-editor-ui Focus in the editor UI} section\n   * of the {@glink framework/deep-dive/ui/focus-tracking Deep dive into focus tracking} guide to learn more.\n   */\n  focus() {\n    this.editing.view.focus();\n  }\n  /* istanbul ignore next -- @preserve */\n  /**\n   * Creates and initializes a new editor instance.\n   *\n   * This is an abstract method. Every editor type needs to implement its own initialization logic.\n   *\n   * See the `create()` methods of the existing editor types to learn how to use them:\n   *\n   * * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}\n   * * {@link module:editor-balloon/ballooneditor~BalloonEditor.create `BalloonEditor.create()`}\n   * * {@link module:editor-decoupled/decouplededitor~DecoupledEditor.create `DecoupledEditor.create()`}\n   * * {@link module:editor-inline/inlineeditor~InlineEditor.create `InlineEditor.create()`}\n   */\n  static create(...args) {\n    throw new Error(\"This is an abstract method.\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/editor/utils/attachtoform.js\nfunction attachToForm(editor) {\n  if (!isFunction_default(editor.updateSourceElement)) {\n    throw new CKEditorError(\"attachtoform-missing-elementapi-interface\", editor);\n  }\n  const sourceElement = editor.sourceElement;\n  if (isTextArea(sourceElement) && sourceElement.form) {\n    let originalSubmit;\n    const form = sourceElement.form;\n    const onSubmit = () => editor.updateSourceElement();\n    if (isFunction_default(form.submit)) {\n      originalSubmit = form.submit;\n      form.submit = () => {\n        onSubmit();\n        originalSubmit.apply(form);\n      };\n    }\n    form.addEventListener(\"submit\", onSubmit);\n    editor.on(\"destroy\", () => {\n      form.removeEventListener(\"submit\", onSubmit);\n      if (originalSubmit) {\n        form.submit = originalSubmit;\n      }\n    });\n  }\n}\nfunction isTextArea(sourceElement) {\n  return !!sourceElement && sourceElement.tagName.toLowerCase() === \"textarea\";\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin.js\nfunction DataApiMixin(base) {\n  class Mixin extends base {\n    setData(data) {\n      this.data.set(data);\n    }\n    getData(options) {\n      return this.data.get(options);\n    }\n  }\n  return Mixin;\n}\n{\n  const mixin = DataApiMixin(Object);\n  DataApiMixin.setData = mixin.prototype.setData;\n  DataApiMixin.getData = mixin.prototype.getData;\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/editor/utils/elementapimixin.js\nfunction ElementApiMixin(base) {\n  class Mixin extends base {\n    updateSourceElement(data) {\n      if (!this.sourceElement) {\n        throw new CKEditorError(\"editor-missing-sourceelement\", this);\n      }\n      const shouldUpdateSourceElement = this.config.get(\"updateSourceElementOnDestroy\");\n      const isSourceElementTextArea = this.sourceElement instanceof HTMLTextAreaElement;\n      if (!shouldUpdateSourceElement && !isSourceElementTextArea) {\n        setDataInElement(this.sourceElement, \"\");\n        return;\n      }\n      const dataToSet = typeof data === \"string\" ? data : this.data.get();\n      setDataInElement(this.sourceElement, dataToSet);\n    }\n  }\n  return Mixin;\n}\nElementApiMixin.updateSourceElement = ElementApiMixin(Object).prototype.updateSourceElement;\n\n// node_modules/@ckeditor/ckeditor5-core/src/command.js\nvar Command = class extends ObservableMixin() {\n  /**\n   * Creates a new `Command` instance.\n   *\n   * @param editor The editor on which this command will be used.\n   */\n  constructor(editor) {\n    super();\n    this.editor = editor;\n    this.set(\"value\", void 0);\n    this.set(\"isEnabled\", false);\n    this._affectsData = true;\n    this._isEnabledBasedOnSelection = true;\n    this._disableStack = /* @__PURE__ */ new Set();\n    this.decorate(\"execute\");\n    this.listenTo(this.editor.model.document, \"change\", () => {\n      this.refresh();\n    });\n    this.listenTo(editor, \"change:isReadOnly\", () => {\n      this.refresh();\n    });\n    this.on(\"set:isEnabled\", (evt) => {\n      if (!this.affectsData) {\n        return;\n      }\n      const selection = editor.model.document.selection;\n      const selectionInGraveyard = selection.getFirstPosition().root.rootName == \"$graveyard\";\n      const canEditAtSelection = !selectionInGraveyard && editor.model.canEditAt(selection);\n      if (editor.isReadOnly || this._isEnabledBasedOnSelection && !canEditAtSelection) {\n        evt.return = false;\n        evt.stop();\n      }\n    }, { priority: \"highest\" });\n    this.on(\"execute\", (evt) => {\n      if (!this.isEnabled) {\n        evt.stop();\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * A flag indicating whether a command execution changes the editor data or not.\n   *\n   * Commands with `affectsData` set to `false` will not be automatically disabled in\n   * the {@link module:core/editor/editor~Editor#isReadOnly read-only mode} and\n   * {@glink features/read-only#related-features other editor modes} with restricted user write permissions.\n   *\n   * **Note:** You do not have to set it for your every command. It is `true` by default.\n   *\n   * @default true\n   */\n  get affectsData() {\n    return this._affectsData;\n  }\n  set affectsData(affectsData) {\n    this._affectsData = affectsData;\n  }\n  /**\n   * Refreshes the command. The command should update its {@link #isEnabled} and {@link #value} properties\n   * in this method.\n   *\n   * This method is automatically called when\n   * {@link module:engine/model/document~Document#event:change any changes are applied to the document}.\n   */\n  refresh() {\n    this.isEnabled = true;\n  }\n  /**\n   * Disables the command.\n   *\n   * Command may be disabled by multiple features or algorithms (at once). When disabling a command, unique id should be passed\n   * (e.g. the feature name). The same identifier should be used when {@link #clearForceDisabled enabling back} the command.\n   * The command becomes enabled only after all features {@link #clearForceDisabled enabled it back}.\n   *\n   * Disabling and enabling a command:\n   *\n   * ```ts\n   * command.isEnabled; // -> true\n   * command.forceDisabled( 'MyFeature' );\n   * command.isEnabled; // -> false\n   * command.clearForceDisabled( 'MyFeature' );\n   * command.isEnabled; // -> true\n   * ```\n   *\n   * Command disabled by multiple features:\n   *\n   * ```ts\n   * command.forceDisabled( 'MyFeature' );\n   * command.forceDisabled( 'OtherFeature' );\n   * command.clearForceDisabled( 'MyFeature' );\n   * command.isEnabled; // -> false\n   * command.clearForceDisabled( 'OtherFeature' );\n   * command.isEnabled; // -> true\n   * ```\n   *\n   * Multiple disabling with the same identifier is redundant:\n   *\n   * ```ts\n   * command.forceDisabled( 'MyFeature' );\n   * command.forceDisabled( 'MyFeature' );\n   * command.clearForceDisabled( 'MyFeature' );\n   * command.isEnabled; // -> true\n   * ```\n   *\n   * **Note:** some commands or algorithms may have more complex logic when it comes to enabling or disabling certain commands,\n   * so the command might be still disabled after {@link #clearForceDisabled} was used.\n   *\n   * @param id Unique identifier for disabling. Use the same id when {@link #clearForceDisabled enabling back} the command.\n   */\n  forceDisabled(id) {\n    this._disableStack.add(id);\n    if (this._disableStack.size == 1) {\n      this.on(\"set:isEnabled\", forceDisable2, { priority: \"highest\" });\n      this.isEnabled = false;\n    }\n  }\n  /**\n   * Clears forced disable previously set through {@link #forceDisabled}. See {@link #forceDisabled}.\n   *\n   * @param id Unique identifier, equal to the one passed in {@link #forceDisabled} call.\n   */\n  clearForceDisabled(id) {\n    this._disableStack.delete(id);\n    if (this._disableStack.size == 0) {\n      this.off(\"set:isEnabled\", forceDisable2);\n      this.refresh();\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * A command may accept parameters. They will be passed from {@link module:core/editor/editor~Editor#execute `editor.execute()`}\n   * to the command.\n   *\n   * The `execute()` method will automatically abort when the command is disabled ({@link #isEnabled} is `false`).\n   * This behavior is implemented by a high priority listener to the {@link #event:execute} event.\n   *\n   * In order to see how to disable a command from \"outside\" see the {@link #isEnabled} documentation.\n   *\n   * This method may return a value, which would be forwarded all the way down to the\n   * {@link module:core/editor/editor~Editor#execute `editor.execute()`}.\n   *\n   * @fires execute\n   */\n  execute(...args) {\n    return void 0;\n  }\n  // eslint-disable-line @typescript-eslint/no-unused-vars\n  /**\n   * Destroys the command.\n   */\n  destroy() {\n    this.stopListening();\n  }\n};\nfunction forceDisable2(evt) {\n  evt.return = false;\n  evt.stop();\n}\n\n// node_modules/@ckeditor/ckeditor5-core/src/pendingactions.js\nvar PendingActions = class extends ContextPlugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"PendingActions\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this.set(\"hasAny\", false);\n    this._actions = new Collection({ idProperty: \"_id\" });\n    this._actions.delegate(\"add\", \"remove\").to(this);\n  }\n  /**\n   * Adds an action to the list of pending actions.\n   *\n   * This method returns an action object with an observable message property.\n   * The action object can be later used in the {@link #remove} method. It also allows you to change the message.\n   *\n   * @param message The action message.\n   * @returns An observable object that represents a pending action.\n   */\n  add(message) {\n    if (typeof message !== \"string\") {\n      throw new CKEditorError(\"pendingactions-add-invalid-message\", this);\n    }\n    const action = new (ObservableMixin())();\n    action.set(\"message\", message);\n    this._actions.add(action);\n    this.hasAny = true;\n    return action;\n  }\n  /**\n   * Removes an action from the list of pending actions.\n   *\n   * @param action An action object.\n   */\n  remove(action) {\n    this._actions.remove(action);\n    this.hasAny = !!this._actions.length;\n  }\n  /**\n   * Returns the first action from the list or null if the list is empty\n   *\n   * @returns The pending action object.\n   */\n  get first() {\n    return this._actions.get(0);\n  }\n  /**\n   * Iterable interface.\n   */\n  [Symbol.iterator]() {\n    return this._actions[Symbol.iterator]();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-core/src/index.js\nimport cancel from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/cancel.svg\";\nimport caption from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/caption.svg\";\nimport check from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/check.svg\";\nimport cog from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/cog.svg\";\nimport colorPalette from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/color-palette.svg\";\nimport eraser from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/eraser.svg\";\nimport history from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/history.svg\";\nimport lowVision from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/low-vision.svg\";\nimport textAlternative from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/text-alternative.svg\";\nimport loupe from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/loupe.svg\";\nimport previousArrow from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/previous-arrow.svg\";\nimport nextArrow from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/next-arrow.svg\";\nimport image from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/image.svg\";\nimport imageUpload from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/image-upload.svg\";\nimport imageAssetManager from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/image-asset-manager.svg\";\nimport imageUrl from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/image-url.svg\";\nimport alignBottom from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-bottom.svg\";\nimport alignMiddle from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-middle.svg\";\nimport alignTop from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-top.svg\";\nimport alignLeft from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-left.svg\";\nimport alignCenter from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-center.svg\";\nimport alignRight from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-right.svg\";\nimport alignJustify from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/align-justify.svg\";\nimport objectBlockLeft from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-left.svg\";\nimport objectCenter from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-center.svg\";\nimport objectBlockRight from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-right.svg\";\nimport objectFullWidth from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-full-width.svg\";\nimport objectInline from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline.svg\";\nimport objectLeft from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline-left.svg\";\nimport objectRight from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-inline-right.svg\";\nimport objectSizeFull from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-full.svg\";\nimport objectSizeLarge from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-large.svg\";\nimport objectSizeSmall from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-small.svg\";\nimport objectSizeMedium from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/object-size-medium.svg\";\nimport pencil from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/pencil.svg\";\nimport pilcrow from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/pilcrow.svg\";\nimport quote from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/quote.svg\";\nimport threeVerticalDots from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/three-vertical-dots.svg\";\nimport dragIndicator from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/drag-indicator.svg\";\nimport bold from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/bold.svg\";\nimport paragraph from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/paragraph.svg\";\nimport plus from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/plus.svg\";\nimport text from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/text.svg\";\nimport importExport from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/importexport.svg\";\nimport redo from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/redo.svg\";\nimport undo from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/undo.svg\";\nimport bulletedList from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/bulletedlist.svg\";\nimport numberedList from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/numberedlist.svg\";\nimport todoList from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/todolist.svg\";\nimport codeBlock from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/codeblock.svg\";\nimport browseFiles from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/browse-files.svg\";\nimport heading1 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading1.svg\";\nimport heading2 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading2.svg\";\nimport heading3 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading3.svg\";\nimport heading4 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading4.svg\";\nimport heading5 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading5.svg\";\nimport heading6 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/heading6.svg\";\nimport horizontalLine from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/horizontalline.svg\";\nimport html from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/html.svg\";\nimport indent from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/indent.svg\";\nimport outdent from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/outdent.svg\";\nimport table from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/table.svg\";\nvar icons = {\n  bold,\n  cancel,\n  caption,\n  check,\n  cog,\n  colorPalette,\n  eraser,\n  history,\n  image,\n  imageUpload,\n  imageAssetManager,\n  imageUrl,\n  lowVision,\n  textAlternative,\n  loupe,\n  previousArrow,\n  nextArrow,\n  importExport,\n  paragraph,\n  plus,\n  text,\n  alignBottom,\n  alignMiddle,\n  alignTop,\n  alignLeft,\n  alignCenter,\n  alignRight,\n  alignJustify,\n  objectLeft,\n  objectCenter,\n  objectRight,\n  objectFullWidth,\n  objectInline,\n  objectBlockLeft,\n  objectBlockRight,\n  objectSizeFull,\n  objectSizeLarge,\n  objectSizeSmall,\n  objectSizeMedium,\n  pencil,\n  pilcrow,\n  quote,\n  threeVerticalDots,\n  dragIndicator,\n  redo,\n  undo,\n  bulletedList,\n  numberedList,\n  todoList,\n  codeBlock,\n  browseFiles,\n  heading1,\n  heading2,\n  heading3,\n  heading4,\n  heading5,\n  heading6,\n  horizontalLine,\n  html,\n  indent,\n  outdent,\n  table\n};\n\nexport {\n  env_default,\n  EventInfo,\n  uid,\n  priorities_default,\n  CKEditorError,\n  logWarning,\n  EmitterMixin,\n  isObject_default,\n  identity_default,\n  assignIn_default,\n  upperFirst_default,\n  cloneDeepWith_default,\n  debounce_default,\n  escapeRegExp_default,\n  isElement_default,\n  throttle_default,\n  ObservableMixin,\n  ElementReplacer,\n  count,\n  compareArrays,\n  isIterable,\n  createElement,\n  isNode,\n  DomEmitterMixin,\n  global_default,\n  getDataFromElement,\n  isRange,\n  Rect,\n  resizeobserver_default,\n  toUnit,\n  isVisible,\n  getOptimalPosition,\n  keyCodes,\n  getCode,\n  parseKeystroke,\n  getEnvKeystrokeText,\n  getLocalizedArrowKeyCodeDirection,\n  isForwardArrowKeyCode,\n  toArray,\n  Collection,\n  first,\n  FocusTracker,\n  KeystrokeHandler,\n  toMap,\n  delay,\n  verifyLicense,\n  isInsideSurrogatePair,\n  isInsideCombinedSymbol,\n  isInsideEmojiSequence,\n  Plugin,\n  Command,\n  Context,\n  ContextPlugin,\n  enablePlaceholder,\n  BubblingEventInfo,\n  Observer,\n  DomEventData,\n  DomEventObserver,\n  FocusObserver,\n  DataTransfer,\n  Element2 as Element,\n  TreeWalker2 as TreeWalker,\n  LiveRange,\n  NoOperation,\n  transformSets,\n  LivePosition,\n  ClickObserver,\n  MouseObserver,\n  UpcastWriter,\n  isLength2 as isLength,\n  isPercentage,\n  addBackgroundRules,\n  Editor,\n  attachToForm,\n  DataApiMixin,\n  ElementApiMixin,\n  PendingActions,\n  icons\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-utils/src/ckeditorerror.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nlodash-es/lodash.js:\n  (**\n   * @license\n   * Lodash (Custom Build) <https://lodash.com/>\n   * Build: `lodash modularize exports=\"es\" -o ./`\n   * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n   * Released under MIT license <https://lodash.com/license>\n   * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n   * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/getdatafromelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/env.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/fastdiff.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/diff.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/difftochanges.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/mix.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/spy.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/eventinfo.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/uid.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/priorities.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/version.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/version.js:\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-utils/src/emittermixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-utils/src/observablemixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/elementreplacer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/abortabledebounce.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/count.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/comparearrays.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/isiterable.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/createelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/config.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/isnode.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/iswindow.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/emittermixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/global.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-utils/src/dom/findclosestscrollableancestor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/getancestors.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/getborderwidths.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/istext.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/isrange.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/getpositionedancestor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/rect.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/resizeobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/setdatainelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/tounit.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/indexof.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/insertat.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/iscomment.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/isvalidattributename.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/isvisible.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/position.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/remove.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/dom/scroll.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/keyboard.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/language.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/toarray.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/translation-service.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore else -- @preserve *)\n\n@ckeditor/ckeditor5-utils/src/locale.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/collection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/first.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/focustracker.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/keystrokehandler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/objecttomap.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/tomap.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/wait.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/retry.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/splicearray.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/delay.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/verifylicense.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/unicode.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-utils/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/plugin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/plugincollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/context.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/contextplugin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/placeholder.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/typecheckable.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/node.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/text.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/textproxy.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/matcher.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/stylesmap.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/element.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/containerelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/editableelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/rooteditableelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/treewalker.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/position.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/range.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/selection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/documentselection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/bubblingeventinfo.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/bubblingemittermixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-engine/src/view/document.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/attributeelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/emptyelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/uielement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/rawelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/documentfragment.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/downcastwriter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/filler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/renderer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/domconverter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/observer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/domeventdata.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/domeventobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/keyobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/fakeselectionobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/mutationobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/focusobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/selectionobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/compositionobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/datatransfer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/inputobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/arrowkeysobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/tabobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/view.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-engine/src/model/typecheckable.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/node.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/nodelist.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/text.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/textproxy.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/element.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/treewalker.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/position.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/range.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/mapper.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/modelconsumable.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/downcastdispatcher.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/selection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/liverange.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/documentselection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/conversionhelpers.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/downcasthelpers.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore else: This is always true because otherwise it would not register a reducer callback. -- @preserve *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/autoparagraphing.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/upcasthelpers.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/selection-post-fixer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/controller/editingcontroller.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/viewconsumable.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/schema.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/upcastdispatcher.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/dataprocessor/basichtmlwriter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/dataprocessor/htmldataprocessor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/controller/datacontroller.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/conversion/conversion.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/operation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/moveoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/insertoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/splitoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/mergeoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/markeroperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/attributeoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/nooperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/renameoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/rootattributeoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/rootoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/operationfactory.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/transform.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/liveposition.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/batch.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/differ.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/history.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/rootelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/document.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/markercollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/operation/detachoperation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/documentfragment.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/writer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/deletecontent.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/getselectedcontent.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/insertcontent.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore else -- @preserve *)\n  (* istanbul ignore if -- @preserve *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/insertobject.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/utils/modifyselection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/model/model.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/clickobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/upcastwriter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/styles/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/styles/background.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/styles/border.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/styles/margin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/view/styles/padding.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-engine/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/commandcollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/editingkeystrokehandler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/editor/editor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-core/src/editor/utils/attachtoform.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/editor/utils/dataapimixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/editor/utils/elementapimixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/command.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/multicommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/editor/utils/securesourceelement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/pendingactions.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-core/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-XX3CIG5U.js.map\n","import {\n  CKEditorError,\n  Collection,\n  ContextPlugin,\n  DomEmitterMixin,\n  EmitterMixin,\n  FocusTracker,\n  KeystrokeHandler,\n  ObservableMixin,\n  Plugin,\n  Rect,\n  assignIn_default,\n  cloneDeepWith_default,\n  createElement,\n  debounce_default,\n  delay,\n  env_default,\n  escapeRegExp_default,\n  first,\n  getEnvKeystrokeText,\n  getOptimalPosition,\n  global_default,\n  icons,\n  isElement_default,\n  isIterable,\n  isNode,\n  isObject_default,\n  isRange,\n  isVisible,\n  logWarning,\n  priorities_default,\n  resizeobserver_default,\n  throttle_default,\n  toArray,\n  toUnit,\n  uid,\n  verifyLicense\n} from \"./chunk-XX3CIG5U.js\";\nimport {\n  __commonJS,\n  __toESM\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/color-name/index.js\nvar require_color_name = __commonJS({\n  \"node_modules/color-name/index.js\"(exports, module) {\n    \"use strict\";\n    module.exports = {\n      \"aliceblue\": [240, 248, 255],\n      \"antiquewhite\": [250, 235, 215],\n      \"aqua\": [0, 255, 255],\n      \"aquamarine\": [127, 255, 212],\n      \"azure\": [240, 255, 255],\n      \"beige\": [245, 245, 220],\n      \"bisque\": [255, 228, 196],\n      \"black\": [0, 0, 0],\n      \"blanchedalmond\": [255, 235, 205],\n      \"blue\": [0, 0, 255],\n      \"blueviolet\": [138, 43, 226],\n      \"brown\": [165, 42, 42],\n      \"burlywood\": [222, 184, 135],\n      \"cadetblue\": [95, 158, 160],\n      \"chartreuse\": [127, 255, 0],\n      \"chocolate\": [210, 105, 30],\n      \"coral\": [255, 127, 80],\n      \"cornflowerblue\": [100, 149, 237],\n      \"cornsilk\": [255, 248, 220],\n      \"crimson\": [220, 20, 60],\n      \"cyan\": [0, 255, 255],\n      \"darkblue\": [0, 0, 139],\n      \"darkcyan\": [0, 139, 139],\n      \"darkgoldenrod\": [184, 134, 11],\n      \"darkgray\": [169, 169, 169],\n      \"darkgreen\": [0, 100, 0],\n      \"darkgrey\": [169, 169, 169],\n      \"darkkhaki\": [189, 183, 107],\n      \"darkmagenta\": [139, 0, 139],\n      \"darkolivegreen\": [85, 107, 47],\n      \"darkorange\": [255, 140, 0],\n      \"darkorchid\": [153, 50, 204],\n      \"darkred\": [139, 0, 0],\n      \"darksalmon\": [233, 150, 122],\n      \"darkseagreen\": [143, 188, 143],\n      \"darkslateblue\": [72, 61, 139],\n      \"darkslategray\": [47, 79, 79],\n      \"darkslategrey\": [47, 79, 79],\n      \"darkturquoise\": [0, 206, 209],\n      \"darkviolet\": [148, 0, 211],\n      \"deeppink\": [255, 20, 147],\n      \"deepskyblue\": [0, 191, 255],\n      \"dimgray\": [105, 105, 105],\n      \"dimgrey\": [105, 105, 105],\n      \"dodgerblue\": [30, 144, 255],\n      \"firebrick\": [178, 34, 34],\n      \"floralwhite\": [255, 250, 240],\n      \"forestgreen\": [34, 139, 34],\n      \"fuchsia\": [255, 0, 255],\n      \"gainsboro\": [220, 220, 220],\n      \"ghostwhite\": [248, 248, 255],\n      \"gold\": [255, 215, 0],\n      \"goldenrod\": [218, 165, 32],\n      \"gray\": [128, 128, 128],\n      \"green\": [0, 128, 0],\n      \"greenyellow\": [173, 255, 47],\n      \"grey\": [128, 128, 128],\n      \"honeydew\": [240, 255, 240],\n      \"hotpink\": [255, 105, 180],\n      \"indianred\": [205, 92, 92],\n      \"indigo\": [75, 0, 130],\n      \"ivory\": [255, 255, 240],\n      \"khaki\": [240, 230, 140],\n      \"lavender\": [230, 230, 250],\n      \"lavenderblush\": [255, 240, 245],\n      \"lawngreen\": [124, 252, 0],\n      \"lemonchiffon\": [255, 250, 205],\n      \"lightblue\": [173, 216, 230],\n      \"lightcoral\": [240, 128, 128],\n      \"lightcyan\": [224, 255, 255],\n      \"lightgoldenrodyellow\": [250, 250, 210],\n      \"lightgray\": [211, 211, 211],\n      \"lightgreen\": [144, 238, 144],\n      \"lightgrey\": [211, 211, 211],\n      \"lightpink\": [255, 182, 193],\n      \"lightsalmon\": [255, 160, 122],\n      \"lightseagreen\": [32, 178, 170],\n      \"lightskyblue\": [135, 206, 250],\n      \"lightslategray\": [119, 136, 153],\n      \"lightslategrey\": [119, 136, 153],\n      \"lightsteelblue\": [176, 196, 222],\n      \"lightyellow\": [255, 255, 224],\n      \"lime\": [0, 255, 0],\n      \"limegreen\": [50, 205, 50],\n      \"linen\": [250, 240, 230],\n      \"magenta\": [255, 0, 255],\n      \"maroon\": [128, 0, 0],\n      \"mediumaquamarine\": [102, 205, 170],\n      \"mediumblue\": [0, 0, 205],\n      \"mediumorchid\": [186, 85, 211],\n      \"mediumpurple\": [147, 112, 219],\n      \"mediumseagreen\": [60, 179, 113],\n      \"mediumslateblue\": [123, 104, 238],\n      \"mediumspringgreen\": [0, 250, 154],\n      \"mediumturquoise\": [72, 209, 204],\n      \"mediumvioletred\": [199, 21, 133],\n      \"midnightblue\": [25, 25, 112],\n      \"mintcream\": [245, 255, 250],\n      \"mistyrose\": [255, 228, 225],\n      \"moccasin\": [255, 228, 181],\n      \"navajowhite\": [255, 222, 173],\n      \"navy\": [0, 0, 128],\n      \"oldlace\": [253, 245, 230],\n      \"olive\": [128, 128, 0],\n      \"olivedrab\": [107, 142, 35],\n      \"orange\": [255, 165, 0],\n      \"orangered\": [255, 69, 0],\n      \"orchid\": [218, 112, 214],\n      \"palegoldenrod\": [238, 232, 170],\n      \"palegreen\": [152, 251, 152],\n      \"paleturquoise\": [175, 238, 238],\n      \"palevioletred\": [219, 112, 147],\n      \"papayawhip\": [255, 239, 213],\n      \"peachpuff\": [255, 218, 185],\n      \"peru\": [205, 133, 63],\n      \"pink\": [255, 192, 203],\n      \"plum\": [221, 160, 221],\n      \"powderblue\": [176, 224, 230],\n      \"purple\": [128, 0, 128],\n      \"rebeccapurple\": [102, 51, 153],\n      \"red\": [255, 0, 0],\n      \"rosybrown\": [188, 143, 143],\n      \"royalblue\": [65, 105, 225],\n      \"saddlebrown\": [139, 69, 19],\n      \"salmon\": [250, 128, 114],\n      \"sandybrown\": [244, 164, 96],\n      \"seagreen\": [46, 139, 87],\n      \"seashell\": [255, 245, 238],\n      \"sienna\": [160, 82, 45],\n      \"silver\": [192, 192, 192],\n      \"skyblue\": [135, 206, 235],\n      \"slateblue\": [106, 90, 205],\n      \"slategray\": [112, 128, 144],\n      \"slategrey\": [112, 128, 144],\n      \"snow\": [255, 250, 250],\n      \"springgreen\": [0, 255, 127],\n      \"steelblue\": [70, 130, 180],\n      \"tan\": [210, 180, 140],\n      \"teal\": [0, 128, 128],\n      \"thistle\": [216, 191, 216],\n      \"tomato\": [255, 99, 71],\n      \"turquoise\": [64, 224, 208],\n      \"violet\": [238, 130, 238],\n      \"wheat\": [245, 222, 179],\n      \"white\": [255, 255, 255],\n      \"whitesmoke\": [245, 245, 245],\n      \"yellow\": [255, 255, 0],\n      \"yellowgreen\": [154, 205, 50]\n    };\n  }\n});\n\n// node_modules/color-convert/conversions.js\nvar require_conversions = __commonJS({\n  \"node_modules/color-convert/conversions.js\"(exports, module) {\n    var cssKeywords = require_color_name();\n    var reverseKeywords = {};\n    for (const key of Object.keys(cssKeywords)) {\n      reverseKeywords[cssKeywords[key]] = key;\n    }\n    var convert2 = {\n      rgb: { channels: 3, labels: \"rgb\" },\n      hsl: { channels: 3, labels: \"hsl\" },\n      hsv: { channels: 3, labels: \"hsv\" },\n      hwb: { channels: 3, labels: \"hwb\" },\n      cmyk: { channels: 4, labels: \"cmyk\" },\n      xyz: { channels: 3, labels: \"xyz\" },\n      lab: { channels: 3, labels: \"lab\" },\n      lch: { channels: 3, labels: \"lch\" },\n      hex: { channels: 1, labels: [\"hex\"] },\n      keyword: { channels: 1, labels: [\"keyword\"] },\n      ansi16: { channels: 1, labels: [\"ansi16\"] },\n      ansi256: { channels: 1, labels: [\"ansi256\"] },\n      hcg: { channels: 3, labels: [\"h\", \"c\", \"g\"] },\n      apple: { channels: 3, labels: [\"r16\", \"g16\", \"b16\"] },\n      gray: { channels: 1, labels: [\"gray\"] }\n    };\n    module.exports = convert2;\n    for (const model of Object.keys(convert2)) {\n      if (!(\"channels\" in convert2[model])) {\n        throw new Error(\"missing channels property: \" + model);\n      }\n      if (!(\"labels\" in convert2[model])) {\n        throw new Error(\"missing channel labels property: \" + model);\n      }\n      if (convert2[model].labels.length !== convert2[model].channels) {\n        throw new Error(\"channel and label counts mismatch: \" + model);\n      }\n      const { channels, labels } = convert2[model];\n      delete convert2[model].channels;\n      delete convert2[model].labels;\n      Object.defineProperty(convert2[model], \"channels\", { value: channels });\n      Object.defineProperty(convert2[model], \"labels\", { value: labels });\n    }\n    convert2.rgb.hsl = function(rgb) {\n      const r = rgb[0] / 255;\n      const g = rgb[1] / 255;\n      const b = rgb[2] / 255;\n      const min = Math.min(r, g, b);\n      const max = Math.max(r, g, b);\n      const delta = max - min;\n      let h;\n      let s;\n      if (max === min) {\n        h = 0;\n      } else if (r === max) {\n        h = (g - b) / delta;\n      } else if (g === max) {\n        h = 2 + (b - r) / delta;\n      } else if (b === max) {\n        h = 4 + (r - g) / delta;\n      }\n      h = Math.min(h * 60, 360);\n      if (h < 0) {\n        h += 360;\n      }\n      const l = (min + max) / 2;\n      if (max === min) {\n        s = 0;\n      } else if (l <= 0.5) {\n        s = delta / (max + min);\n      } else {\n        s = delta / (2 - max - min);\n      }\n      return [h, s * 100, l * 100];\n    };\n    convert2.rgb.hsv = function(rgb) {\n      let rdif;\n      let gdif;\n      let bdif;\n      let h;\n      let s;\n      const r = rgb[0] / 255;\n      const g = rgb[1] / 255;\n      const b = rgb[2] / 255;\n      const v = Math.max(r, g, b);\n      const diff = v - Math.min(r, g, b);\n      const diffc = function(c) {\n        return (v - c) / 6 / diff + 1 / 2;\n      };\n      if (diff === 0) {\n        h = 0;\n        s = 0;\n      } else {\n        s = diff / v;\n        rdif = diffc(r);\n        gdif = diffc(g);\n        bdif = diffc(b);\n        if (r === v) {\n          h = bdif - gdif;\n        } else if (g === v) {\n          h = 1 / 3 + rdif - bdif;\n        } else if (b === v) {\n          h = 2 / 3 + gdif - rdif;\n        }\n        if (h < 0) {\n          h += 1;\n        } else if (h > 1) {\n          h -= 1;\n        }\n      }\n      return [\n        h * 360,\n        s * 100,\n        v * 100\n      ];\n    };\n    convert2.rgb.hwb = function(rgb) {\n      const r = rgb[0];\n      const g = rgb[1];\n      let b = rgb[2];\n      const h = convert2.rgb.hsl(rgb)[0];\n      const w = 1 / 255 * Math.min(r, Math.min(g, b));\n      b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n      return [h, w * 100, b * 100];\n    };\n    convert2.rgb.cmyk = function(rgb) {\n      const r = rgb[0] / 255;\n      const g = rgb[1] / 255;\n      const b = rgb[2] / 255;\n      const k = Math.min(1 - r, 1 - g, 1 - b);\n      const c = (1 - r - k) / (1 - k) || 0;\n      const m = (1 - g - k) / (1 - k) || 0;\n      const y = (1 - b - k) / (1 - k) || 0;\n      return [c * 100, m * 100, y * 100, k * 100];\n    };\n    function comparativeDistance(x, y) {\n      return (x[0] - y[0]) ** 2 + (x[1] - y[1]) ** 2 + (x[2] - y[2]) ** 2;\n    }\n    convert2.rgb.keyword = function(rgb) {\n      const reversed = reverseKeywords[rgb];\n      if (reversed) {\n        return reversed;\n      }\n      let currentClosestDistance = Infinity;\n      let currentClosestKeyword;\n      for (const keyword of Object.keys(cssKeywords)) {\n        const value = cssKeywords[keyword];\n        const distance = comparativeDistance(rgb, value);\n        if (distance < currentClosestDistance) {\n          currentClosestDistance = distance;\n          currentClosestKeyword = keyword;\n        }\n      }\n      return currentClosestKeyword;\n    };\n    convert2.keyword.rgb = function(keyword) {\n      return cssKeywords[keyword];\n    };\n    convert2.rgb.xyz = function(rgb) {\n      let r = rgb[0] / 255;\n      let g = rgb[1] / 255;\n      let b = rgb[2] / 255;\n      r = r > 0.04045 ? ((r + 0.055) / 1.055) ** 2.4 : r / 12.92;\n      g = g > 0.04045 ? ((g + 0.055) / 1.055) ** 2.4 : g / 12.92;\n      b = b > 0.04045 ? ((b + 0.055) / 1.055) ** 2.4 : b / 12.92;\n      const x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n      const y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n      const z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n      return [x * 100, y * 100, z * 100];\n    };\n    convert2.rgb.lab = function(rgb) {\n      const xyz = convert2.rgb.xyz(rgb);\n      let x = xyz[0];\n      let y = xyz[1];\n      let z = xyz[2];\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n      x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116;\n      y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116;\n      z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116;\n      const l = 116 * y - 16;\n      const a = 500 * (x - y);\n      const b = 200 * (y - z);\n      return [l, a, b];\n    };\n    convert2.hsl.rgb = function(hsl) {\n      const h = hsl[0] / 360;\n      const s = hsl[1] / 100;\n      const l = hsl[2] / 100;\n      let t2;\n      let t3;\n      let val;\n      if (s === 0) {\n        val = l * 255;\n        return [val, val, val];\n      }\n      if (l < 0.5) {\n        t2 = l * (1 + s);\n      } else {\n        t2 = l + s - l * s;\n      }\n      const t1 = 2 * l - t2;\n      const rgb = [0, 0, 0];\n      for (let i = 0; i < 3; i++) {\n        t3 = h + 1 / 3 * -(i - 1);\n        if (t3 < 0) {\n          t3++;\n        }\n        if (t3 > 1) {\n          t3--;\n        }\n        if (6 * t3 < 1) {\n          val = t1 + (t2 - t1) * 6 * t3;\n        } else if (2 * t3 < 1) {\n          val = t2;\n        } else if (3 * t3 < 2) {\n          val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n        } else {\n          val = t1;\n        }\n        rgb[i] = val * 255;\n      }\n      return rgb;\n    };\n    convert2.hsl.hsv = function(hsl) {\n      const h = hsl[0];\n      let s = hsl[1] / 100;\n      let l = hsl[2] / 100;\n      let smin = s;\n      const lmin = Math.max(l, 0.01);\n      l *= 2;\n      s *= l <= 1 ? l : 2 - l;\n      smin *= lmin <= 1 ? lmin : 2 - lmin;\n      const v = (l + s) / 2;\n      const sv = l === 0 ? 2 * smin / (lmin + smin) : 2 * s / (l + s);\n      return [h, sv * 100, v * 100];\n    };\n    convert2.hsv.rgb = function(hsv) {\n      const h = hsv[0] / 60;\n      const s = hsv[1] / 100;\n      let v = hsv[2] / 100;\n      const hi = Math.floor(h) % 6;\n      const f = h - Math.floor(h);\n      const p = 255 * v * (1 - s);\n      const q = 255 * v * (1 - s * f);\n      const t = 255 * v * (1 - s * (1 - f));\n      v *= 255;\n      switch (hi) {\n        case 0:\n          return [v, t, p];\n        case 1:\n          return [q, v, p];\n        case 2:\n          return [p, v, t];\n        case 3:\n          return [p, q, v];\n        case 4:\n          return [t, p, v];\n        case 5:\n          return [v, p, q];\n      }\n    };\n    convert2.hsv.hsl = function(hsv) {\n      const h = hsv[0];\n      const s = hsv[1] / 100;\n      const v = hsv[2] / 100;\n      const vmin = Math.max(v, 0.01);\n      let sl;\n      let l;\n      l = (2 - s) * v;\n      const lmin = (2 - s) * vmin;\n      sl = s * vmin;\n      sl /= lmin <= 1 ? lmin : 2 - lmin;\n      sl = sl || 0;\n      l /= 2;\n      return [h, sl * 100, l * 100];\n    };\n    convert2.hwb.rgb = function(hwb) {\n      const h = hwb[0] / 360;\n      let wh = hwb[1] / 100;\n      let bl = hwb[2] / 100;\n      const ratio = wh + bl;\n      let f;\n      if (ratio > 1) {\n        wh /= ratio;\n        bl /= ratio;\n      }\n      const i = Math.floor(6 * h);\n      const v = 1 - bl;\n      f = 6 * h - i;\n      if ((i & 1) !== 0) {\n        f = 1 - f;\n      }\n      const n = wh + f * (v - wh);\n      let r;\n      let g;\n      let b;\n      switch (i) {\n        default:\n        case 6:\n        case 0:\n          r = v;\n          g = n;\n          b = wh;\n          break;\n        case 1:\n          r = n;\n          g = v;\n          b = wh;\n          break;\n        case 2:\n          r = wh;\n          g = v;\n          b = n;\n          break;\n        case 3:\n          r = wh;\n          g = n;\n          b = v;\n          break;\n        case 4:\n          r = n;\n          g = wh;\n          b = v;\n          break;\n        case 5:\n          r = v;\n          g = wh;\n          b = n;\n          break;\n      }\n      return [r * 255, g * 255, b * 255];\n    };\n    convert2.cmyk.rgb = function(cmyk) {\n      const c = cmyk[0] / 100;\n      const m = cmyk[1] / 100;\n      const y = cmyk[2] / 100;\n      const k = cmyk[3] / 100;\n      const r = 1 - Math.min(1, c * (1 - k) + k);\n      const g = 1 - Math.min(1, m * (1 - k) + k);\n      const b = 1 - Math.min(1, y * (1 - k) + k);\n      return [r * 255, g * 255, b * 255];\n    };\n    convert2.xyz.rgb = function(xyz) {\n      const x = xyz[0] / 100;\n      const y = xyz[1] / 100;\n      const z = xyz[2] / 100;\n      let r;\n      let g;\n      let b;\n      r = x * 3.2406 + y * -1.5372 + z * -0.4986;\n      g = x * -0.9689 + y * 1.8758 + z * 0.0415;\n      b = x * 0.0557 + y * -0.204 + z * 1.057;\n      r = r > 31308e-7 ? 1.055 * r ** (1 / 2.4) - 0.055 : r * 12.92;\n      g = g > 31308e-7 ? 1.055 * g ** (1 / 2.4) - 0.055 : g * 12.92;\n      b = b > 31308e-7 ? 1.055 * b ** (1 / 2.4) - 0.055 : b * 12.92;\n      r = Math.min(Math.max(0, r), 1);\n      g = Math.min(Math.max(0, g), 1);\n      b = Math.min(Math.max(0, b), 1);\n      return [r * 255, g * 255, b * 255];\n    };\n    convert2.xyz.lab = function(xyz) {\n      let x = xyz[0];\n      let y = xyz[1];\n      let z = xyz[2];\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n      x = x > 8856e-6 ? x ** (1 / 3) : 7.787 * x + 16 / 116;\n      y = y > 8856e-6 ? y ** (1 / 3) : 7.787 * y + 16 / 116;\n      z = z > 8856e-6 ? z ** (1 / 3) : 7.787 * z + 16 / 116;\n      const l = 116 * y - 16;\n      const a = 500 * (x - y);\n      const b = 200 * (y - z);\n      return [l, a, b];\n    };\n    convert2.lab.xyz = function(lab) {\n      const l = lab[0];\n      const a = lab[1];\n      const b = lab[2];\n      let x;\n      let y;\n      let z;\n      y = (l + 16) / 116;\n      x = a / 500 + y;\n      z = y - b / 200;\n      const y2 = y ** 3;\n      const x2 = x ** 3;\n      const z2 = z ** 3;\n      y = y2 > 8856e-6 ? y2 : (y - 16 / 116) / 7.787;\n      x = x2 > 8856e-6 ? x2 : (x - 16 / 116) / 7.787;\n      z = z2 > 8856e-6 ? z2 : (z - 16 / 116) / 7.787;\n      x *= 95.047;\n      y *= 100;\n      z *= 108.883;\n      return [x, y, z];\n    };\n    convert2.lab.lch = function(lab) {\n      const l = lab[0];\n      const a = lab[1];\n      const b = lab[2];\n      let h;\n      const hr = Math.atan2(b, a);\n      h = hr * 360 / 2 / Math.PI;\n      if (h < 0) {\n        h += 360;\n      }\n      const c = Math.sqrt(a * a + b * b);\n      return [l, c, h];\n    };\n    convert2.lch.lab = function(lch) {\n      const l = lch[0];\n      const c = lch[1];\n      const h = lch[2];\n      const hr = h / 360 * 2 * Math.PI;\n      const a = c * Math.cos(hr);\n      const b = c * Math.sin(hr);\n      return [l, a, b];\n    };\n    convert2.rgb.ansi16 = function(args, saturation = null) {\n      const [r, g, b] = args;\n      let value = saturation === null ? convert2.rgb.hsv(args)[2] : saturation;\n      value = Math.round(value / 50);\n      if (value === 0) {\n        return 30;\n      }\n      let ansi = 30 + (Math.round(b / 255) << 2 | Math.round(g / 255) << 1 | Math.round(r / 255));\n      if (value === 2) {\n        ansi += 60;\n      }\n      return ansi;\n    };\n    convert2.hsv.ansi16 = function(args) {\n      return convert2.rgb.ansi16(convert2.hsv.rgb(args), args[2]);\n    };\n    convert2.rgb.ansi256 = function(args) {\n      const r = args[0];\n      const g = args[1];\n      const b = args[2];\n      if (r === g && g === b) {\n        if (r < 8) {\n          return 16;\n        }\n        if (r > 248) {\n          return 231;\n        }\n        return Math.round((r - 8) / 247 * 24) + 232;\n      }\n      const ansi = 16 + 36 * Math.round(r / 255 * 5) + 6 * Math.round(g / 255 * 5) + Math.round(b / 255 * 5);\n      return ansi;\n    };\n    convert2.ansi16.rgb = function(args) {\n      let color = args % 10;\n      if (color === 0 || color === 7) {\n        if (args > 50) {\n          color += 3.5;\n        }\n        color = color / 10.5 * 255;\n        return [color, color, color];\n      }\n      const mult = (~~(args > 50) + 1) * 0.5;\n      const r = (color & 1) * mult * 255;\n      const g = (color >> 1 & 1) * mult * 255;\n      const b = (color >> 2 & 1) * mult * 255;\n      return [r, g, b];\n    };\n    convert2.ansi256.rgb = function(args) {\n      if (args >= 232) {\n        const c = (args - 232) * 10 + 8;\n        return [c, c, c];\n      }\n      args -= 16;\n      let rem;\n      const r = Math.floor(args / 36) / 5 * 255;\n      const g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n      const b = rem % 6 / 5 * 255;\n      return [r, g, b];\n    };\n    convert2.rgb.hex = function(args) {\n      const integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255);\n      const string = integer.toString(16).toUpperCase();\n      return \"000000\".substring(string.length) + string;\n    };\n    convert2.hex.rgb = function(args) {\n      const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n      if (!match) {\n        return [0, 0, 0];\n      }\n      let colorString = match[0];\n      if (match[0].length === 3) {\n        colorString = colorString.split(\"\").map((char) => {\n          return char + char;\n        }).join(\"\");\n      }\n      const integer = parseInt(colorString, 16);\n      const r = integer >> 16 & 255;\n      const g = integer >> 8 & 255;\n      const b = integer & 255;\n      return [r, g, b];\n    };\n    convert2.rgb.hcg = function(rgb) {\n      const r = rgb[0] / 255;\n      const g = rgb[1] / 255;\n      const b = rgb[2] / 255;\n      const max = Math.max(Math.max(r, g), b);\n      const min = Math.min(Math.min(r, g), b);\n      const chroma = max - min;\n      let grayscale;\n      let hue;\n      if (chroma < 1) {\n        grayscale = min / (1 - chroma);\n      } else {\n        grayscale = 0;\n      }\n      if (chroma <= 0) {\n        hue = 0;\n      } else if (max === r) {\n        hue = (g - b) / chroma % 6;\n      } else if (max === g) {\n        hue = 2 + (b - r) / chroma;\n      } else {\n        hue = 4 + (r - g) / chroma;\n      }\n      hue /= 6;\n      hue %= 1;\n      return [hue * 360, chroma * 100, grayscale * 100];\n    };\n    convert2.hsl.hcg = function(hsl) {\n      const s = hsl[1] / 100;\n      const l = hsl[2] / 100;\n      const c = l < 0.5 ? 2 * s * l : 2 * s * (1 - l);\n      let f = 0;\n      if (c < 1) {\n        f = (l - 0.5 * c) / (1 - c);\n      }\n      return [hsl[0], c * 100, f * 100];\n    };\n    convert2.hsv.hcg = function(hsv) {\n      const s = hsv[1] / 100;\n      const v = hsv[2] / 100;\n      const c = s * v;\n      let f = 0;\n      if (c < 1) {\n        f = (v - c) / (1 - c);\n      }\n      return [hsv[0], c * 100, f * 100];\n    };\n    convert2.hcg.rgb = function(hcg) {\n      const h = hcg[0] / 360;\n      const c = hcg[1] / 100;\n      const g = hcg[2] / 100;\n      if (c === 0) {\n        return [g * 255, g * 255, g * 255];\n      }\n      const pure = [0, 0, 0];\n      const hi = h % 1 * 6;\n      const v = hi % 1;\n      const w = 1 - v;\n      let mg = 0;\n      switch (Math.floor(hi)) {\n        case 0:\n          pure[0] = 1;\n          pure[1] = v;\n          pure[2] = 0;\n          break;\n        case 1:\n          pure[0] = w;\n          pure[1] = 1;\n          pure[2] = 0;\n          break;\n        case 2:\n          pure[0] = 0;\n          pure[1] = 1;\n          pure[2] = v;\n          break;\n        case 3:\n          pure[0] = 0;\n          pure[1] = w;\n          pure[2] = 1;\n          break;\n        case 4:\n          pure[0] = v;\n          pure[1] = 0;\n          pure[2] = 1;\n          break;\n        default:\n          pure[0] = 1;\n          pure[1] = 0;\n          pure[2] = w;\n      }\n      mg = (1 - c) * g;\n      return [\n        (c * pure[0] + mg) * 255,\n        (c * pure[1] + mg) * 255,\n        (c * pure[2] + mg) * 255\n      ];\n    };\n    convert2.hcg.hsv = function(hcg) {\n      const c = hcg[1] / 100;\n      const g = hcg[2] / 100;\n      const v = c + g * (1 - c);\n      let f = 0;\n      if (v > 0) {\n        f = c / v;\n      }\n      return [hcg[0], f * 100, v * 100];\n    };\n    convert2.hcg.hsl = function(hcg) {\n      const c = hcg[1] / 100;\n      const g = hcg[2] / 100;\n      const l = g * (1 - c) + 0.5 * c;\n      let s = 0;\n      if (l > 0 && l < 0.5) {\n        s = c / (2 * l);\n      } else if (l >= 0.5 && l < 1) {\n        s = c / (2 * (1 - l));\n      }\n      return [hcg[0], s * 100, l * 100];\n    };\n    convert2.hcg.hwb = function(hcg) {\n      const c = hcg[1] / 100;\n      const g = hcg[2] / 100;\n      const v = c + g * (1 - c);\n      return [hcg[0], (v - c) * 100, (1 - v) * 100];\n    };\n    convert2.hwb.hcg = function(hwb) {\n      const w = hwb[1] / 100;\n      const b = hwb[2] / 100;\n      const v = 1 - b;\n      const c = v - w;\n      let g = 0;\n      if (c < 1) {\n        g = (v - c) / (1 - c);\n      }\n      return [hwb[0], c * 100, g * 100];\n    };\n    convert2.apple.rgb = function(apple) {\n      return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255];\n    };\n    convert2.rgb.apple = function(rgb) {\n      return [rgb[0] / 255 * 65535, rgb[1] / 255 * 65535, rgb[2] / 255 * 65535];\n    };\n    convert2.gray.rgb = function(args) {\n      return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n    };\n    convert2.gray.hsl = function(args) {\n      return [0, 0, args[0]];\n    };\n    convert2.gray.hsv = convert2.gray.hsl;\n    convert2.gray.hwb = function(gray) {\n      return [0, 100, gray[0]];\n    };\n    convert2.gray.cmyk = function(gray) {\n      return [0, 0, 0, gray[0]];\n    };\n    convert2.gray.lab = function(gray) {\n      return [gray[0], 0, 0];\n    };\n    convert2.gray.hex = function(gray) {\n      const val = Math.round(gray[0] / 100 * 255) & 255;\n      const integer = (val << 16) + (val << 8) + val;\n      const string = integer.toString(16).toUpperCase();\n      return \"000000\".substring(string.length) + string;\n    };\n    convert2.rgb.gray = function(rgb) {\n      const val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n      return [val / 255 * 100];\n    };\n  }\n});\n\n// node_modules/color-convert/route.js\nvar require_route = __commonJS({\n  \"node_modules/color-convert/route.js\"(exports, module) {\n    var conversions = require_conversions();\n    function buildGraph() {\n      const graph = {};\n      const models = Object.keys(conversions);\n      for (let len = models.length, i = 0; i < len; i++) {\n        graph[models[i]] = {\n          // http://jsperf.com/1-vs-infinity\n          // micro-opt, but this is simple.\n          distance: -1,\n          parent: null\n        };\n      }\n      return graph;\n    }\n    function deriveBFS(fromModel) {\n      const graph = buildGraph();\n      const queue = [fromModel];\n      graph[fromModel].distance = 0;\n      while (queue.length) {\n        const current = queue.pop();\n        const adjacents = Object.keys(conversions[current]);\n        for (let len = adjacents.length, i = 0; i < len; i++) {\n          const adjacent = adjacents[i];\n          const node = graph[adjacent];\n          if (node.distance === -1) {\n            node.distance = graph[current].distance + 1;\n            node.parent = current;\n            queue.unshift(adjacent);\n          }\n        }\n      }\n      return graph;\n    }\n    function link(from, to) {\n      return function(args) {\n        return to(from(args));\n      };\n    }\n    function wrapConversion(toModel, graph) {\n      const path = [graph[toModel].parent, toModel];\n      let fn = conversions[graph[toModel].parent][toModel];\n      let cur = graph[toModel].parent;\n      while (graph[cur].parent) {\n        path.unshift(graph[cur].parent);\n        fn = link(conversions[graph[cur].parent][cur], fn);\n        cur = graph[cur].parent;\n      }\n      fn.conversion = path;\n      return fn;\n    }\n    module.exports = function(fromModel) {\n      const graph = deriveBFS(fromModel);\n      const conversion = {};\n      const models = Object.keys(graph);\n      for (let len = models.length, i = 0; i < len; i++) {\n        const toModel = models[i];\n        const node = graph[toModel];\n        if (node.parent === null) {\n          continue;\n        }\n        conversion[toModel] = wrapConversion(toModel, graph);\n      }\n      return conversion;\n    };\n  }\n});\n\n// node_modules/color-convert/index.js\nvar require_color_convert = __commonJS({\n  \"node_modules/color-convert/index.js\"(exports, module) {\n    var conversions = require_conversions();\n    var route = require_route();\n    var convert2 = {};\n    var models = Object.keys(conversions);\n    function wrapRaw(fn) {\n      const wrappedFn = function(...args) {\n        const arg0 = args[0];\n        if (arg0 === void 0 || arg0 === null) {\n          return arg0;\n        }\n        if (arg0.length > 1) {\n          args = arg0;\n        }\n        return fn(args);\n      };\n      if (\"conversion\" in fn) {\n        wrappedFn.conversion = fn.conversion;\n      }\n      return wrappedFn;\n    }\n    function wrapRounded(fn) {\n      const wrappedFn = function(...args) {\n        const arg0 = args[0];\n        if (arg0 === void 0 || arg0 === null) {\n          return arg0;\n        }\n        if (arg0.length > 1) {\n          args = arg0;\n        }\n        const result = fn(args);\n        if (typeof result === \"object\") {\n          for (let len = result.length, i = 0; i < len; i++) {\n            result[i] = Math.round(result[i]);\n          }\n        }\n        return result;\n      };\n      if (\"conversion\" in fn) {\n        wrappedFn.conversion = fn.conversion;\n      }\n      return wrappedFn;\n    }\n    models.forEach((fromModel) => {\n      convert2[fromModel] = {};\n      Object.defineProperty(convert2[fromModel], \"channels\", { value: conversions[fromModel].channels });\n      Object.defineProperty(convert2[fromModel], \"labels\", { value: conversions[fromModel].labels });\n      const routes = route(fromModel);\n      const routeModels = Object.keys(routes);\n      routeModels.forEach((toModel) => {\n        const fn = routes[toModel];\n        convert2[fromModel][toModel] = wrapRounded(fn);\n        convert2[fromModel][toModel].raw = wrapRaw(fn);\n      });\n    });\n    module.exports = convert2;\n  }\n});\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js\nfunction clickOutsideHandler({ emitter, activator, callback, contextElements }) {\n  emitter.listenTo(document, \"mousedown\", (evt, domEvt) => {\n    if (!activator()) {\n      return;\n    }\n    const path = typeof domEvt.composedPath == \"function\" ? domEvt.composedPath() : [];\n    const contextElementsList = typeof contextElements == \"function\" ? contextElements() : contextElements;\n    for (const contextElement of contextElementsList) {\n      if (contextElement.contains(domEvt.target) || path.includes(contextElement)) {\n        return;\n      }\n    }\n    callback();\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/csstransitiondisablermixin.js\nfunction CssTransitionDisablerMixin(view) {\n  class Mixin extends view {\n    disableCssTransitions() {\n      this._isCssTransitionsDisabled = true;\n    }\n    enableCssTransitions() {\n      this._isCssTransitionsDisabled = false;\n    }\n    constructor(...args) {\n      super(...args);\n      this.set(\"_isCssTransitionsDisabled\", false);\n      this.initializeCssTransitionDisablerMixin();\n    }\n    initializeCssTransitionDisablerMixin() {\n      this.extendTemplate({\n        attributes: {\n          class: [\n            this.bindTemplate.if(\"_isCssTransitionsDisabled\", \"ck-transitions-disabled\")\n          ]\n        }\n      });\n    }\n  }\n  return Mixin;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/viewcollection.js\nvar ViewCollection = class extends Collection {\n  /**\n   * Creates a new instance of the {@link module:ui/viewcollection~ViewCollection}.\n   *\n   * @param initialItems The initial items of the collection.\n   */\n  constructor(initialItems = []) {\n    super(initialItems, {\n      // An #id Number attribute should be legal and not break the `ViewCollection` instance.\n      // https://github.com/ckeditor/ckeditor5-ui/issues/93\n      idProperty: \"viewUid\"\n    });\n    this.on(\"add\", (evt, view, index) => {\n      this._renderViewIntoCollectionParent(view, index);\n    });\n    this.on(\"remove\", (evt, view) => {\n      if (view.element && this._parentElement) {\n        view.element.remove();\n      }\n    });\n    this._parentElement = null;\n  }\n  /**\n   * Destroys the view collection along with child views.\n   * See the view {@link module:ui/view~View#destroy} method.\n   */\n  destroy() {\n    this.map((view) => view.destroy());\n  }\n  /**\n   * Sets the parent HTML element of this collection. When parent is set, {@link #add adding} and\n   * {@link #remove removing} views in the collection synchronizes their\n   * {@link module:ui/view~View#element elements} in the parent element.\n   *\n   * @param element A new parent element.\n   */\n  setParent(elementOrDocFragment) {\n    this._parentElement = elementOrDocFragment;\n    for (const view of this) {\n      this._renderViewIntoCollectionParent(view);\n    }\n  }\n  /**\n   * Delegates selected events coming from within views in the collection to any\n   * {@link module:utils/emittermixin~Emitter}.\n   *\n   * For the following views and collection:\n   *\n   * ```ts\n   * const viewA = new View();\n   * const viewB = new View();\n   * const viewC = new View();\n   *\n   * const views = parentView.createCollection();\n   *\n   * views.delegate( 'eventX' ).to( viewB );\n   * views.delegate( 'eventX', 'eventY' ).to( viewC );\n   *\n   * views.add( viewA );\n   * ```\n   *\n   * the `eventX` is delegated (fired by) `viewB` and `viewC` along with `customData`:\n   *\n   * ```ts\n   * viewA.fire( 'eventX', customData );\n   * ```\n   *\n   * and `eventY` is delegated (fired by) `viewC` along with `customData`:\n   *\n   * ```ts\n   * viewA.fire( 'eventY', customData );\n   * ```\n   *\n   * See {@link module:utils/emittermixin~Emitter#delegate}.\n   *\n   * @param events {@link module:ui/view~View} event names to be delegated to another\n   * {@link module:utils/emittermixin~Emitter}.\n   * @returns Object with `to` property, a function which accepts the destination\n   * of {@link module:utils/emittermixin~Emitter#delegate delegated} events.\n   */\n  delegate(...events) {\n    if (!events.length || !isStringArray(events)) {\n      throw new CKEditorError(\"ui-viewcollection-delegate-wrong-events\", this);\n    }\n    return {\n      to: (dest) => {\n        for (const view of this) {\n          for (const evtName of events) {\n            view.delegate(evtName).to(dest);\n          }\n        }\n        this.on(\"add\", (evt, view) => {\n          for (const evtName of events) {\n            view.delegate(evtName).to(dest);\n          }\n        });\n        this.on(\"remove\", (evt, view) => {\n          for (const evtName of events) {\n            view.stopDelegating(evtName, dest);\n          }\n        });\n      }\n    };\n  }\n  /**\n   * This method {@link module:ui/view~View#render renders} a new view added to the collection.\n   *\n   * If the {@link #_parentElement parent element} of the collection is set, this method also adds\n   * the view's {@link module:ui/view~View#element} as a child of the parent in DOM at a specified index.\n   *\n   * **Note**: If index is not specified, the view's element is pushed as the last child\n   * of the parent element.\n   *\n   * @param view A new view added to the collection.\n   * @param index An index the view holds in the collection. When not specified,\n   * the view is added at the end.\n   */\n  _renderViewIntoCollectionParent(view, index) {\n    if (!view.isRendered) {\n      view.render();\n    }\n    if (view.element && this._parentElement) {\n      this._parentElement.insertBefore(view.element, this._parentElement.children[index]);\n    }\n  }\n  /**\n   * Removes a child view from the collection. If the {@link #setParent parent element} of the\n   * collection has been set, the {@link module:ui/view~View#element element} of the view is also removed\n   * in DOM, reflecting the order of the collection.\n   *\n   * See the {@link #add} method.\n   *\n   * @param subject The view to remove, its id or index in the collection.\n   * @returns The removed view.\n   */\n  remove(subject) {\n    return super.remove(subject);\n  }\n};\nfunction isStringArray(arr) {\n  return arr.every((a) => typeof a == \"string\");\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/template.js\nvar xhtmlNs = \"http://www.w3.org/1999/xhtml\";\nvar Template = class extends EmitterMixin() {\n  /**\n   * Creates an instance of the {@link ~Template} class.\n   *\n   * @param def The definition of the template.\n   */\n  constructor(def) {\n    super();\n    Object.assign(this, normalize(clone(def)));\n    this._isRendered = false;\n    this._revertData = null;\n  }\n  /**\n   * Renders a DOM Node (an HTML element or text) out of the template.\n   *\n   * ```ts\n   * const domNode = new Template( { ... } ).render();\n   * ```\n   *\n   * See: {@link #apply}.\n   */\n  render() {\n    const node = this._renderNode({\n      intoFragment: true\n    });\n    this._isRendered = true;\n    return node;\n  }\n  /**\n   * Applies the template to an existing DOM Node, either HTML element or text.\n   *\n   * **Note:** No new DOM nodes will be created. Applying extends:\n   *\n   * {@link module:ui/template~TemplateDefinition attributes},\n   * {@link module:ui/template~TemplateDefinition event listeners}, and\n   * `textContent` of {@link module:ui/template~TemplateDefinition children} only.\n   *\n   * **Note:** Existing `class` and `style` attributes are extended when a template\n   * is applied to an HTML element, while other attributes and `textContent` are overridden.\n   *\n   * **Note:** The process of applying a template can be easily reverted using the\n   * {@link module:ui/template~Template#revert} method.\n   *\n   * ```ts\n   * const element = document.createElement( 'div' );\n   * const observable = new Model( { divClass: 'my-div' } );\n   * const emitter = Object.create( EmitterMixin );\n   * const bind = Template.bind( observable, emitter );\n   *\n   * new Template( {\n   * \tattributes: {\n   * \t\tid: 'first-div',\n   * \t\tclass: bind.to( 'divClass' )\n   * \t},\n   * \ton: {\n   * \t\tclick: bind( 'elementClicked' ) // Will be fired by the observable.\n   * \t},\n   * \tchildren: [\n   * \t\t'Div text.'\n   * \t]\n   * } ).apply( element );\n   *\n   * console.log( element.outerHTML ); // -> '<div id=\"first-div\" class=\"my-div\"></div>'\n   * ```\n   *\n   * @see module:ui/template~Template#render\n   * @see module:ui/template~Template#revert\n   * @param node Root node for the template to apply.\n   */\n  apply(node) {\n    this._revertData = getEmptyRevertData();\n    this._renderNode({\n      node,\n      intoFragment: false,\n      isApplying: true,\n      revertData: this._revertData\n    });\n    return node;\n  }\n  /**\n   * Reverts a template {@link module:ui/template~Template#apply applied} to a DOM node.\n   *\n   * @param node The root node for the template to revert. In most of the cases, it is the\n   * same node used by {@link module:ui/template~Template#apply}.\n   */\n  revert(node) {\n    if (!this._revertData) {\n      throw new CKEditorError(\"ui-template-revert-not-applied\", [this, node]);\n    }\n    this._revertTemplateFromNode(node, this._revertData);\n  }\n  /**\n   * Returns an iterator which traverses the template in search of {@link module:ui/view~View}\n   * instances and returns them one by one.\n   *\n   * ```ts\n   * const viewFoo = new View();\n   * const viewBar = new View();\n   * const viewBaz = new View();\n   * const template = new Template( {\n   * \ttag: 'div',\n   * \tchildren: [\n   * \t\tviewFoo,\n   * \t\t{\n   * \t\t\ttag: 'div',\n   * \t\t\tchildren: [\n   * \t\t\t\tviewBar\n   * \t\t\t]\n   * \t\t},\n   * \t\tviewBaz\n   * \t]\n   * } );\n   *\n   * // Logs: viewFoo, viewBar, viewBaz\n   * for ( const view of template.getViews() ) {\n   * \tconsole.log( view );\n   * }\n   * ```\n   */\n  *getViews() {\n    function* search(def) {\n      if (def.children) {\n        for (const child of def.children) {\n          if (isView(child)) {\n            yield child;\n          } else if (isTemplate(child)) {\n            yield* search(child);\n          }\n        }\n      }\n    }\n    yield* search(this);\n  }\n  /**\n   * An entry point to the interface which binds DOM nodes to\n   * {@link module:utils/observablemixin~Observable observables}.\n   * There are two types of bindings:\n   *\n   * * HTML element attributes or text `textContent` synchronized with attributes of an\n   * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}\n   * and {@link module:ui/template~BindChain#if}.\n   *\n   * ```ts\n   * const bind = Template.bind( observable, emitter );\n   *\n   * new Template( {\n   * \tattributes: {\n   * \t\t// Binds the element \"class\" attribute to observable#classAttribute.\n   * \t\tclass: bind.to( 'classAttribute' )\n   * \t}\n   * } ).render();\n   * ```\n   *\n   * * DOM events fired on HTML element propagated through\n   * {@link module:utils/observablemixin~Observable}. Learn more about {@link module:ui/template~BindChain#to}.\n   *\n   * ```ts\n   * const bind = Template.bind( observable, emitter );\n   *\n   * new Template( {\n   * \ton: {\n   * \t\t// Will be fired by the observable.\n   * \t\tclick: bind( 'elementClicked' )\n   * \t}\n   * } ).render();\n   * ```\n   *\n   * Also see {@link module:ui/view~View#bindTemplate}.\n   *\n   * @param observable An observable which provides boundable attributes.\n   * @param emitter An emitter that listens to observable attribute\n   * changes or DOM Events (depending on the kind of the binding). Usually, a {@link module:ui/view~View} instance.\n   */\n  static bind(observable, emitter) {\n    return {\n      to(eventNameOrFunctionOrAttribute, callback) {\n        return new TemplateToBinding({\n          eventNameOrFunction: eventNameOrFunctionOrAttribute,\n          attribute: eventNameOrFunctionOrAttribute,\n          observable,\n          emitter,\n          callback\n        });\n      },\n      if(attribute, valueIfTrue, callback) {\n        return new TemplateIfBinding({\n          observable,\n          emitter,\n          attribute,\n          valueIfTrue,\n          callback\n        });\n      }\n    };\n  }\n  /**\n   * Extends an existing {@link module:ui/template~Template} instance with some additional content\n   * from another {@link module:ui/template~TemplateDefinition}.\n   *\n   * ```ts\n   * const bind = Template.bind( observable, emitter );\n   *\n   * const template = new Template( {\n   * \ttag: 'p',\n   * \tattributes: {\n   * \t\tclass: 'a',\n   * \t\tdata-x: bind.to( 'foo' )\n   * \t},\n   * \tchildren: [\n   * \t\t{\n   * \t\t\ttag: 'span',\n   * \t\t\tattributes: {\n   * \t\t\t\tclass: 'b'\n   * \t\t\t},\n   * \t\t\tchildren: [\n   * \t\t\t\t'Span'\n   * \t\t\t]\n   * \t\t}\n   * \t]\n   *  } );\n   *\n   * // Instance-level extension.\n   * Template.extend( template, {\n   * \tattributes: {\n   * \t\tclass: 'b',\n   * \t\tdata-x: bind.to( 'bar' )\n   * \t},\n   * \tchildren: [\n   * \t\t{\n   * \t\t\tattributes: {\n   * \t\t\t\tclass: 'c'\n   * \t\t\t}\n   * \t\t}\n   * \t]\n   * } );\n   *\n   * // Child extension.\n   * Template.extend( template.children[ 0 ], {\n   * \tattributes: {\n   * \t\tclass: 'd'\n   * \t}\n   * } );\n   * ```\n   *\n   * the `outerHTML` of `template.render()` is:\n   *\n   * ```html\n   * <p class=\"a b\" data-x=\"{ observable.foo } { observable.bar }\">\n   * \t<span class=\"b c d\">Span</span>\n   * </p>\n   * ```\n   *\n   * @param template An existing template instance to be extended.\n   * @param def Additional definition to be applied to a template.\n   */\n  static extend(template, def) {\n    if (template._isRendered) {\n      throw new CKEditorError(\"template-extend-render\", [this, template]);\n    }\n    extendTemplate(template, normalize(clone(def)));\n  }\n  /**\n   * Renders a DOM Node (either an HTML element or text) out of the template.\n   *\n   * @param data Rendering data.\n   */\n  _renderNode(data) {\n    let isInvalid;\n    if (data.node) {\n      isInvalid = this.tag && this.text;\n    } else {\n      isInvalid = this.tag ? this.text : !this.text;\n    }\n    if (isInvalid) {\n      throw new CKEditorError(\"ui-template-wrong-syntax\", this);\n    }\n    if (this.text) {\n      return this._renderText(data);\n    } else {\n      return this._renderElement(data);\n    }\n  }\n  /**\n   * Renders an HTML element out of the template.\n   *\n   * @param data Rendering data.\n   */\n  _renderElement(data) {\n    let node = data.node;\n    if (!node) {\n      node = data.node = document.createElementNS(this.ns || xhtmlNs, this.tag);\n    }\n    this._renderAttributes(data);\n    this._renderElementChildren(data);\n    this._setUpListeners(data);\n    return node;\n  }\n  /**\n   * Renders a text node out of {@link module:ui/template~Template#text}.\n   *\n   * @param data Rendering data.\n   */\n  _renderText(data) {\n    let node = data.node;\n    if (node) {\n      data.revertData.text = node.textContent;\n    } else {\n      node = data.node = document.createTextNode(\"\");\n    }\n    if (hasTemplateBinding(this.text)) {\n      this._bindToObservable({\n        schema: this.text,\n        updater: getTextUpdater(node),\n        data\n      });\n    } else {\n      node.textContent = this.text.join(\"\");\n    }\n    return node;\n  }\n  /**\n   * Renders HTML element attributes out of {@link module:ui/template~Template#attributes}.\n   *\n   * @param data Rendering data.\n   */\n  _renderAttributes(data) {\n    if (!this.attributes) {\n      return;\n    }\n    const node = data.node;\n    const revertData = data.revertData;\n    for (const attrName in this.attributes) {\n      const domAttrValue = node.getAttribute(attrName);\n      const attrValue = this.attributes[attrName];\n      if (revertData) {\n        revertData.attributes[attrName] = domAttrValue;\n      }\n      const attrNs = isNamespaced(attrValue) ? attrValue[0].ns : null;\n      if (hasTemplateBinding(attrValue)) {\n        const valueToBind = isNamespaced(attrValue) ? attrValue[0].value : attrValue;\n        if (revertData && shouldExtend(attrName)) {\n          valueToBind.unshift(domAttrValue);\n        }\n        this._bindToObservable({\n          schema: valueToBind,\n          updater: getAttributeUpdater(node, attrName, attrNs),\n          data\n        });\n      } else if (attrName == \"style\" && typeof attrValue[0] !== \"string\") {\n        this._renderStyleAttribute(attrValue[0], data);\n      } else {\n        if (revertData && domAttrValue && shouldExtend(attrName)) {\n          attrValue.unshift(domAttrValue);\n        }\n        const value = attrValue.map((val) => val ? val.value || val : val).reduce((prev, next) => prev.concat(next), []).reduce(arrayValueReducer, \"\");\n        if (!isFalsy(value)) {\n          node.setAttributeNS(attrNs, attrName, value);\n        }\n      }\n    }\n  }\n  /**\n   * Renders the `style` attribute of an HTML element based on\n   * {@link module:ui/template~Template#attributes}.\n   *\n   * A style attribute is an object with static values:\n   *\n   * ```ts\n   * attributes: {\n   * \tstyle: {\n   * \t\tcolor: 'red'\n   * \t}\n   * }\n   * ```\n   *\n   * or values bound to {@link module:ui/model~Model} properties:\n   *\n   * ```ts\n   * attributes: {\n   * \tstyle: {\n   * \t\tcolor: bind.to( ... )\n   * \t}\n   * }\n   * ```\n   *\n   * Note: The `style` attribute is rendered without setting the namespace. It does not seem to be\n   * needed.\n   *\n   * @param styles Styles located in `attributes.style` of {@link module:ui/template~TemplateDefinition}.\n   * @param data Rendering data.\n   */\n  _renderStyleAttribute(styles, data) {\n    const node = data.node;\n    for (const styleName in styles) {\n      const styleValue = styles[styleName];\n      if (hasTemplateBinding(styleValue)) {\n        this._bindToObservable({\n          schema: [styleValue],\n          updater: getStyleUpdater(node, styleName),\n          data\n        });\n      } else {\n        node.style[styleName] = styleValue;\n      }\n    }\n  }\n  /**\n   * Recursively renders HTML element's children from {@link module:ui/template~Template#children}.\n   *\n   * @param data Rendering data.\n   */\n  _renderElementChildren(data) {\n    const node = data.node;\n    const container = data.intoFragment ? document.createDocumentFragment() : node;\n    const isApplying = data.isApplying;\n    let childIndex = 0;\n    for (const child of this.children) {\n      if (isViewCollection(child)) {\n        if (!isApplying) {\n          child.setParent(node);\n          for (const view of child) {\n            container.appendChild(view.element);\n          }\n        }\n      } else if (isView(child)) {\n        if (!isApplying) {\n          if (!child.isRendered) {\n            child.render();\n          }\n          container.appendChild(child.element);\n        }\n      } else if (isNode(child)) {\n        container.appendChild(child);\n      } else {\n        if (isApplying) {\n          const revertData = data.revertData;\n          const childRevertData = getEmptyRevertData();\n          revertData.children.push(childRevertData);\n          child._renderNode({\n            intoFragment: false,\n            node: container.childNodes[childIndex++],\n            isApplying: true,\n            revertData: childRevertData\n          });\n        } else {\n          container.appendChild(child.render());\n        }\n      }\n    }\n    if (data.intoFragment) {\n      node.appendChild(container);\n    }\n  }\n  /**\n   * Activates `on` event listeners from the {@link module:ui/template~TemplateDefinition}\n   * on an HTML element.\n   *\n   * @param data Rendering data.\n   */\n  _setUpListeners(data) {\n    if (!this.eventListeners) {\n      return;\n    }\n    for (const key in this.eventListeners) {\n      const revertBindings = this.eventListeners[key].map((schemaItem) => {\n        const [domEvtName, domSelector] = key.split(\"@\");\n        return schemaItem.activateDomEventListener(domEvtName, domSelector, data);\n      });\n      if (data.revertData) {\n        data.revertData.bindings.push(revertBindings);\n      }\n    }\n  }\n  /**\n   * For a given {@link module:ui/template~TemplateValueSchema} containing {@link module:ui/template~TemplateBinding}\n   * activates the binding and sets its initial value.\n   *\n   * Note: {@link module:ui/template~TemplateValueSchema} can be for HTML element attributes or\n   * text node `textContent`.\n   *\n   * @param options Binding options.\n   * @param options.updater A function which updates the DOM (like attribute or text).\n   * @param options.data Rendering data.\n   */\n  _bindToObservable({ schema, updater, data }) {\n    const revertData = data.revertData;\n    syncValueSchemaValue(schema, updater, data);\n    const revertBindings = schema.filter((item) => !isFalsy(item)).filter((item) => item.observable).map((templateBinding) => templateBinding.activateAttributeListener(schema, updater, data));\n    if (revertData) {\n      revertData.bindings.push(revertBindings);\n    }\n  }\n  /**\n   * Reverts {@link module:ui/template~RenderData#revertData template data} from a node to\n   * return it to the original state.\n   *\n   * @param node A node to be reverted.\n   * @param revertData An object that stores information about what changes have been made by\n   * {@link #apply} to the node. See {@link module:ui/template~RenderData#revertData} for more information.\n   */\n  _revertTemplateFromNode(node, revertData) {\n    for (const binding of revertData.bindings) {\n      for (const revertBinding of binding) {\n        revertBinding();\n      }\n    }\n    if (revertData.text) {\n      node.textContent = revertData.text;\n      return;\n    }\n    const element = node;\n    for (const attrName in revertData.attributes) {\n      const attrValue = revertData.attributes[attrName];\n      if (attrValue === null) {\n        element.removeAttribute(attrName);\n      } else {\n        element.setAttribute(attrName, attrValue);\n      }\n    }\n    for (let i = 0; i < revertData.children.length; ++i) {\n      this._revertTemplateFromNode(element.childNodes[i], revertData.children[i]);\n    }\n  }\n};\nvar TemplateBinding = class {\n  /**\n   * Creates an instance of the {@link module:ui/template~TemplateBinding} class.\n   *\n   * @param def The definition of the binding.\n   */\n  constructor(def) {\n    this.attribute = def.attribute;\n    this.observable = def.observable;\n    this.emitter = def.emitter;\n    this.callback = def.callback;\n  }\n  /**\n   * Returns the value of the binding. It is the value of the {@link module:ui/template~TemplateBinding#attribute} in\n   * {@link module:ui/template~TemplateBinding#observable}. The value may be processed by the\n   * {@link module:ui/template~TemplateBinding#callback}, if such has been passed to the binding.\n   *\n   * @param node A native DOM node, passed to the custom {@link module:ui/template~TemplateBinding#callback}.\n   * @returns The value of {@link module:ui/template~TemplateBinding#attribute} in\n   * {@link module:ui/template~TemplateBinding#observable}.\n   */\n  getValue(node) {\n    const value = this.observable[this.attribute];\n    return this.callback ? this.callback(value, node) : value;\n  }\n  /**\n   * Activates the listener which waits for changes of the {@link module:ui/template~TemplateBinding#attribute} in\n   * {@link module:ui/template~TemplateBinding#observable}, then updates the DOM with the aggregated\n   * value of {@link module:ui/template~TemplateValueSchema}.\n   *\n   * @param schema A full schema to generate an attribute or text in the DOM.\n   * @param updater A DOM updater function used to update the native DOM attribute or text.\n   * @param data Rendering data.\n   * @returns A function to sever the listener binding.\n   */\n  activateAttributeListener(schema, updater, data) {\n    const callback = () => syncValueSchemaValue(schema, updater, data);\n    this.emitter.listenTo(this.observable, `change:${this.attribute}`, callback);\n    return () => {\n      this.emitter.stopListening(this.observable, `change:${this.attribute}`, callback);\n    };\n  }\n};\nvar TemplateToBinding = class extends TemplateBinding {\n  constructor(def) {\n    super(def);\n    this.eventNameOrFunction = def.eventNameOrFunction;\n  }\n  /**\n   * Activates the listener for the native DOM event, which when fired, is propagated by\n   * the {@link module:ui/template~TemplateBinding#emitter}.\n   *\n   * @param domEvtName The name of the native DOM event.\n   * @param domSelector The selector in the DOM to filter delegated events.\n   * @param data Rendering data.\n   * @returns A function to sever the listener binding.\n   */\n  activateDomEventListener(domEvtName, domSelector, data) {\n    const callback = (evt, domEvt) => {\n      if (!domSelector || domEvt.target.matches(domSelector)) {\n        if (typeof this.eventNameOrFunction == \"function\") {\n          this.eventNameOrFunction(domEvt);\n        } else {\n          this.observable.fire(this.eventNameOrFunction, domEvt);\n        }\n      }\n    };\n    this.emitter.listenTo(data.node, domEvtName, callback);\n    return () => {\n      this.emitter.stopListening(data.node, domEvtName, callback);\n    };\n  }\n};\nvar TemplateIfBinding = class extends TemplateBinding {\n  constructor(def) {\n    super(def);\n    this.valueIfTrue = def.valueIfTrue;\n  }\n  /**\n   * @inheritDoc\n   */\n  getValue(node) {\n    const value = super.getValue(node);\n    return isFalsy(value) ? false : this.valueIfTrue || true;\n  }\n};\nfunction hasTemplateBinding(schema) {\n  if (!schema) {\n    return false;\n  }\n  if (schema.value) {\n    schema = schema.value;\n  }\n  if (Array.isArray(schema)) {\n    return schema.some(hasTemplateBinding);\n  } else if (schema instanceof TemplateBinding) {\n    return true;\n  }\n  return false;\n}\nfunction getValueSchemaValue(schema, node) {\n  return schema.map((schemaItem) => {\n    if (schemaItem instanceof TemplateBinding) {\n      return schemaItem.getValue(node);\n    }\n    return schemaItem;\n  });\n}\nfunction syncValueSchemaValue(schema, updater, { node }) {\n  const values = getValueSchemaValue(schema, node);\n  let value;\n  if (schema.length == 1 && schema[0] instanceof TemplateIfBinding) {\n    value = values[0];\n  } else {\n    value = values.reduce(arrayValueReducer, \"\");\n  }\n  if (isFalsy(value)) {\n    updater.remove();\n  } else {\n    updater.set(value);\n  }\n}\nfunction getTextUpdater(node) {\n  return {\n    set(value) {\n      node.textContent = value;\n    },\n    remove() {\n      node.textContent = \"\";\n    }\n  };\n}\nfunction getAttributeUpdater(el, attrName, ns) {\n  return {\n    set(value) {\n      el.setAttributeNS(ns, attrName, value);\n    },\n    remove() {\n      el.removeAttributeNS(ns, attrName);\n    }\n  };\n}\nfunction getStyleUpdater(el, styleName) {\n  return {\n    set(value) {\n      el.style[styleName] = value;\n    },\n    remove() {\n      el.style[styleName] = null;\n    }\n  };\n}\nfunction clone(def) {\n  const clone2 = cloneDeepWith_default(def, (value) => {\n    if (value && (value instanceof TemplateBinding || isTemplate(value) || isView(value) || isViewCollection(value))) {\n      return value;\n    }\n  });\n  return clone2;\n}\nfunction normalize(def) {\n  if (typeof def == \"string\") {\n    def = normalizePlainTextDefinition(def);\n  } else if (def.text) {\n    normalizeTextDefinition(def);\n  }\n  if (def.on) {\n    def.eventListeners = normalizeListeners(def.on);\n    delete def.on;\n  }\n  if (!def.text) {\n    if (def.attributes) {\n      normalizeAttributes(def.attributes);\n    }\n    const children = [];\n    if (def.children) {\n      if (isViewCollection(def.children)) {\n        children.push(def.children);\n      } else {\n        for (const child of def.children) {\n          if (isTemplate(child) || isView(child) || isNode(child)) {\n            children.push(child);\n          } else {\n            children.push(new Template(child));\n          }\n        }\n      }\n    }\n    def.children = children;\n  }\n  return def;\n}\nfunction normalizeAttributes(attributes) {\n  for (const a in attributes) {\n    if (attributes[a].value) {\n      attributes[a].value = toArray(attributes[a].value);\n    }\n    arrayify(attributes, a);\n  }\n}\nfunction normalizeListeners(listeners) {\n  for (const l in listeners) {\n    arrayify(listeners, l);\n  }\n  return listeners;\n}\nfunction normalizePlainTextDefinition(def) {\n  return {\n    text: [def]\n  };\n}\nfunction normalizeTextDefinition(def) {\n  def.text = toArray(def.text);\n}\nfunction arrayify(obj, key) {\n  obj[key] = toArray(obj[key]);\n}\nfunction arrayValueReducer(prev, cur) {\n  if (isFalsy(cur)) {\n    return prev;\n  } else if (isFalsy(prev)) {\n    return cur;\n  } else {\n    return `${prev} ${cur}`;\n  }\n}\nfunction extendObjectValueArray(obj, ext) {\n  for (const a in ext) {\n    if (obj[a]) {\n      obj[a].push(...ext[a]);\n    } else {\n      obj[a] = ext[a];\n    }\n  }\n}\nfunction extendTemplate(template, def) {\n  if (def.attributes) {\n    if (!template.attributes) {\n      template.attributes = {};\n    }\n    extendObjectValueArray(template.attributes, def.attributes);\n  }\n  if (def.eventListeners) {\n    if (!template.eventListeners) {\n      template.eventListeners = {};\n    }\n    extendObjectValueArray(template.eventListeners, def.eventListeners);\n  }\n  if (def.text) {\n    template.text.push(...def.text);\n  }\n  if (def.children && def.children.length) {\n    if (template.children.length != def.children.length) {\n      throw new CKEditorError(\"ui-template-extend-children-mismatch\", template);\n    }\n    let childIndex = 0;\n    for (const childDef of def.children) {\n      extendTemplate(template.children[childIndex++], childDef);\n    }\n  }\n}\nfunction isFalsy(value) {\n  return !value && value !== 0;\n}\nfunction isView(item) {\n  return item instanceof View;\n}\nfunction isTemplate(item) {\n  return item instanceof Template;\n}\nfunction isViewCollection(item) {\n  return item instanceof ViewCollection;\n}\nfunction isNamespaced(attrValue) {\n  return isObject_default(attrValue[0]) && attrValue[0].ns;\n}\nfunction getEmptyRevertData() {\n  return {\n    children: [],\n    bindings: [],\n    attributes: {}\n  };\n}\nfunction shouldExtend(attrName) {\n  return attrName == \"class\" || attrName == \"style\";\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/view.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/globals/globals.css\";\nvar View = class extends DomEmitterMixin(ObservableMixin()) {\n  /**\n   * Creates an instance of the {@link module:ui/view~View} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param locale The localization services instance.\n   */\n  constructor(locale) {\n    super();\n    this.element = null;\n    this.isRendered = false;\n    this.locale = locale;\n    this.t = locale && locale.t;\n    this._viewCollections = new Collection();\n    this._unboundChildren = this.createCollection();\n    this._viewCollections.on(\"add\", (evt, collection) => {\n      collection.locale = locale;\n      collection.t = locale && locale.t;\n    });\n    this.decorate(\"render\");\n  }\n  /**\n   * Shorthand for {@link module:ui/template~Template.bind}, a binding\n   * {@link module:ui/template~BindChain interface} pre–configured for the view instance.\n   *\n   * It provides {@link module:ui/template~BindChain#to `to()`} and\n   * {@link module:ui/template~BindChain#if `if()`} methods that initialize bindings with\n   * observable attributes and attach DOM listeners.\n   *\n   * ```ts\n   * class SampleView extends View {\n   * \tconstructor( locale ) {\n   * \t\tsuper( locale );\n   *\n   * \t\tconst bind = this.bindTemplate;\n   *\n   * \t\t// These {@link module:utils/observablemixin~Observable observable} attributes will control\n   * \t\t// the state of the view in DOM.\n   * \t\tthis.set( {\n   * \t\t\telementClass: 'foo',\n   * \t\t \tisEnabled: true\n   * \t\t } );\n   *\n   * \t\tthis.setTemplate( {\n   * \t\t\ttag: 'p',\n   *\n   * \t\t\tattributes: {\n   * \t\t\t\t// The class HTML attribute will follow elementClass\n   * \t\t\t\t// and isEnabled view attributes.\n   * \t\t\t\tclass: [\n   * \t\t\t\t\tbind.to( 'elementClass' )\n   * \t\t\t\t\tbind.if( 'isEnabled', 'present-when-enabled' )\n   * \t\t\t\t]\n   * \t\t\t},\n   *\n   * \t\t\ton: {\n   * \t\t\t\t// The view will fire the \"clicked\" event upon clicking <p> in DOM.\n   * \t\t\t\tclick: bind.to( 'clicked' )\n   * \t\t\t}\n   * \t\t} );\n   * \t}\n   * }\n   * ```\n   */\n  get bindTemplate() {\n    if (this._bindTemplate) {\n      return this._bindTemplate;\n    }\n    return this._bindTemplate = Template.bind(this, this);\n  }\n  /**\n   * Creates a new collection of views, which can be used as\n   * {@link module:ui/template~Template#children} of this view.\n   *\n   * ```ts\n   * class SampleView extends View {\n   * \tconstructor( locale ) {\n   * \t\tsuper( locale );\n   *\n   * \t\tconst child = new ChildView( locale );\n   * \t\tthis.items = this.createCollection( [ child ] );\n   *\n   * \t\tthis.setTemplate( {\n   * \t\t\ttag: 'p',\n   *\n   * \t\t\t// `items` collection will render here.\n   * \t\t\tchildren: this.items\n   * \t\t} );\n   * \t}\n   * }\n   *\n   * const view = new SampleView( locale );\n   * view.render();\n   *\n   * // It will append <p><child#element></p> to the <body>.\n   * document.body.appendChild( view.element );\n   * ```\n   *\n   * @param views Initial views of the collection.\n   * @returns A new collection of view instances.\n   */\n  createCollection(views) {\n    const collection = new ViewCollection(views);\n    this._viewCollections.add(collection);\n    return collection;\n  }\n  /**\n   * Registers a new child view under the view instance. Once registered, a child\n   * view is managed by its parent, including {@link #render rendering}\n   * and {@link #destroy destruction}.\n   *\n   * To revert this, use {@link #deregisterChild}.\n   *\n   * ```ts\n   * class SampleView extends View {\n   * \tconstructor( locale ) {\n   * \t\tsuper( locale );\n   *\n   * \t\tthis.childA = new SomeChildView( locale );\n   * \t\tthis.childB = new SomeChildView( locale );\n   *\n   * \t\tthis.setTemplate( { tag: 'p' } );\n   *\n   * \t\t// Register the children.\n   * \t\tthis.registerChild( [ this.childA, this.childB ] );\n   * \t}\n   *\n   * \trender() {\n   * \t\tsuper.render();\n   *\n   * \t\tthis.element.appendChild( this.childA.element );\n   * \t\tthis.element.appendChild( this.childB.element );\n   * \t}\n   * }\n   *\n   * const view = new SampleView( locale );\n   *\n   * view.render();\n   *\n   * // Will append <p><childA#element><b></b><childB#element></p>.\n   * document.body.appendChild( view.element );\n   * ```\n   *\n   * **Note**: There's no need to add child views if they're already referenced in the\n   * {@link #template}:\n   *\n   * ```ts\n   * class SampleView extends View {\n   * \tconstructor( locale ) {\n   * \t\tsuper( locale );\n   *\n   * \t\tthis.childA = new SomeChildView( locale );\n   * \t\tthis.childB = new SomeChildView( locale );\n   *\n   * \t\tthis.setTemplate( {\n   * \t\t\ttag: 'p',\n   *\n   * \t\t\t// These children will be added automatically. There's no\n   * \t\t\t// need to call {@link #registerChild} for any of them.\n   * \t\t\tchildren: [ this.childA, this.childB ]\n   * \t\t} );\n   * \t}\n   *\n   * \t// ...\n   * }\n   * ```\n   *\n   * @param children Children views to be registered.\n   */\n  registerChild(children) {\n    if (!isIterable(children)) {\n      children = [children];\n    }\n    for (const child of children) {\n      this._unboundChildren.add(child);\n    }\n  }\n  /**\n   * The opposite of {@link #registerChild}. Removes a child view from this view instance.\n   * Once removed, the child is no longer managed by its parent, e.g. it can safely\n   * become a child of another parent view.\n   *\n   * @see #registerChild\n   * @param children Child views to be removed.\n   */\n  deregisterChild(children) {\n    if (!isIterable(children)) {\n      children = [children];\n    }\n    for (const child of children) {\n      this._unboundChildren.remove(child);\n    }\n  }\n  /**\n   * Sets the {@link #template} of the view with with given definition.\n   *\n   * A shorthand for:\n   *\n   * ```ts\n   * view.setTemplate( definition );\n   * ```\n   *\n   * @param definition Definition of view's template.\n   */\n  setTemplate(definition) {\n    this.template = new Template(definition);\n  }\n  /**\n   * {@link module:ui/template~Template.extend Extends} the {@link #template} of the view with\n   * with given definition.\n   *\n   * A shorthand for:\n   *\n   * ```ts\n   * Template.extend( view.template, definition );\n   * ```\n   *\n   * **Note**: Is requires the {@link #template} to be already set. See {@link #setTemplate}.\n   *\n   * @param definition Definition which extends the {@link #template}.\n   */\n  extendTemplate(definition) {\n    Template.extend(this.template, definition);\n  }\n  /**\n   * Recursively renders the view.\n   *\n   * Once the view is rendered:\n   * * the {@link #element} becomes an HTML element out of {@link #template},\n   * * the {@link #isRendered} flag is set `true`.\n   *\n   * **Note**: The children of the view:\n   * * defined directly in the {@link #template}\n   * * residing in collections created by the {@link #createCollection} method,\n   * * and added by {@link #registerChild}\n   * are also rendered in the process.\n   *\n   * In general, `render()` method is the right place to keep the code which refers to the\n   * {@link #element} and should be executed at the very beginning of the view's life cycle.\n   *\n   * It is possible to {@link module:ui/template~Template.extend} the {@link #template} before\n   * the view is rendered. To allow an early customization of the view (e.g. by its parent),\n   * such references should be done in `render()`.\n   *\n   * ```ts\n   * class SampleView extends View {\n   * \tconstructor() {\n   * \t\tthis.setTemplate( {\n   * \t\t\t// ...\n   * \t\t} );\n   * \t},\n   *\n   * \trender() {\n   * \t\t// View#element becomes available.\n   * \t\tsuper.render();\n   *\n   * \t\t// The \"scroll\" listener depends on #element.\n   * \t\tthis.listenTo( window, 'scroll', () => {\n   * \t\t\t// A reference to #element would render the #template and make it non-extendable.\n   * \t\t\tif ( window.scrollY > 0 ) {\n   * \t\t\t\tthis.element.scrollLeft = 100;\n   * \t\t\t} else {\n   * \t\t\t\tthis.element.scrollLeft = 0;\n   * \t\t\t}\n   * \t\t} );\n   * \t}\n   * }\n   *\n   * const view = new SampleView();\n   *\n   * // Let's customize the view before it gets rendered.\n   * view.extendTemplate( {\n   * \tattributes: {\n   * \t\tclass: [\n   * \t\t\t'additional-class'\n   * \t\t]\n   * \t}\n   * } );\n   *\n   * // Late rendering allows customization of the view.\n   * view.render();\n   * ```\n   */\n  render() {\n    if (this.isRendered) {\n      throw new CKEditorError(\"ui-view-render-already-rendered\", this);\n    }\n    if (this.template) {\n      this.element = this.template.render();\n      this.registerChild(this.template.getViews());\n    }\n    this.isRendered = true;\n  }\n  /**\n   * Recursively destroys the view instance and child views added by {@link #registerChild} and\n   * residing in collections created by the {@link #createCollection}.\n   *\n   * Destruction disables all event listeners:\n   * * created on the view, e.g. `view.on( 'event', () => {} )`,\n   * * defined in the {@link #template} for DOM events.\n   */\n  destroy() {\n    this.stopListening();\n    this._viewCollections.map((c) => c.destroy());\n    if (this.template && this.template._revertData) {\n      this.template.revert(this.element);\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/icon/iconview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/icon/icon.css\";\nvar IconView = class _IconView extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor() {\n    super();\n    const bind = this.bindTemplate;\n    this.set(\"content\", \"\");\n    this.set(\"viewBox\", \"0 0 20 20\");\n    this.set(\"fillColor\", \"\");\n    this.set(\"isColorInherited\", true);\n    this.set(\"isVisible\", true);\n    this.setTemplate({\n      tag: \"svg\",\n      ns: \"http://www.w3.org/2000/svg\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-icon\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value),\n          // Exclude icon internals from the CSS reset to allow rich (non-monochromatic) icons\n          // (https://github.com/ckeditor/ckeditor5/issues/12599).\n          \"ck-reset_all-excluded\",\n          // The class to remove the dynamic color inheritance is toggleable\n          // (https://github.com/ckeditor/ckeditor5/issues/12599).\n          bind.if(\"isColorInherited\", \"ck-icon_inherit-color\")\n        ],\n        viewBox: bind.to(\"viewBox\")\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this._updateXMLContent();\n    this._colorFillPaths();\n    this.on(\"change:content\", () => {\n      this._updateXMLContent();\n      this._colorFillPaths();\n    });\n    this.on(\"change:fillColor\", () => {\n      this._colorFillPaths();\n    });\n  }\n  /**\n   * Updates the {@link #element} with the value of {@link #content}.\n   */\n  _updateXMLContent() {\n    if (this.content) {\n      const parsed = new DOMParser().parseFromString(this.content.trim(), \"image/svg+xml\");\n      const svg = parsed.querySelector(\"svg\");\n      const viewBox = svg.getAttribute(\"viewBox\");\n      if (viewBox) {\n        this.viewBox = viewBox;\n      }\n      for (const { name, value } of Array.from(svg.attributes)) {\n        if (_IconView.presentationalAttributeNames.includes(name)) {\n          this.element.setAttribute(name, value);\n        }\n      }\n      while (this.element.firstChild) {\n        this.element.removeChild(this.element.firstChild);\n      }\n      while (svg.childNodes.length > 0) {\n        this.element.appendChild(svg.childNodes[0]);\n      }\n    }\n  }\n  /**\n   * Fills all child `path.ck-icon__fill` with the `#fillColor`.\n   */\n  _colorFillPaths() {\n    if (this.fillColor) {\n      this.element.querySelectorAll(\".ck-icon__fill\").forEach((path) => {\n        path.style.fill = this.fillColor;\n      });\n    }\n  }\n};\nIconView.presentationalAttributeNames = [\n  \"alignment-baseline\",\n  \"baseline-shift\",\n  \"clip-path\",\n  \"clip-rule\",\n  \"color\",\n  \"color-interpolation\",\n  \"color-interpolation-filters\",\n  \"color-rendering\",\n  \"cursor\",\n  \"direction\",\n  \"display\",\n  \"dominant-baseline\",\n  \"fill\",\n  \"fill-opacity\",\n  \"fill-rule\",\n  \"filter\",\n  \"flood-color\",\n  \"flood-opacity\",\n  \"font-family\",\n  \"font-size\",\n  \"font-size-adjust\",\n  \"font-stretch\",\n  \"font-style\",\n  \"font-variant\",\n  \"font-weight\",\n  \"image-rendering\",\n  \"letter-spacing\",\n  \"lighting-color\",\n  \"marker-end\",\n  \"marker-mid\",\n  \"marker-start\",\n  \"mask\",\n  \"opacity\",\n  \"overflow\",\n  \"paint-order\",\n  \"pointer-events\",\n  \"shape-rendering\",\n  \"stop-color\",\n  \"stop-opacity\",\n  \"stroke\",\n  \"stroke-dasharray\",\n  \"stroke-dashoffset\",\n  \"stroke-linecap\",\n  \"stroke-linejoin\",\n  \"stroke-miterlimit\",\n  \"stroke-opacity\",\n  \"stroke-width\",\n  \"text-anchor\",\n  \"text-decoration\",\n  \"text-overflow\",\n  \"text-rendering\",\n  \"transform\",\n  \"unicode-bidi\",\n  \"vector-effect\",\n  \"visibility\",\n  \"white-space\",\n  \"word-spacing\",\n  \"writing-mode\"\n];\nvar iconview_default = IconView;\n\n// node_modules/@ckeditor/ckeditor5-ui/src/button/buttonlabelview.js\nvar ButtonLabelView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor() {\n    super();\n    this.set({\n      style: void 0,\n      text: void 0,\n      id: void 0\n    });\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-button__label\"\n        ],\n        style: bind.to(\"style\"),\n        id: bind.to(\"id\")\n      },\n      children: [\n        {\n          text: bind.to(\"text\")\n        }\n      ]\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/button/buttonview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/button/button.css\";\nvar ButtonView = class extends View {\n  /**\n   * Creates an instance of the button view class.\n   *\n   * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n   * @param labelView The instance of the button's label. If not provided, an instance of\n   * {@link module:ui/button/buttonlabelview~ButtonLabelView} is used.\n   */\n  constructor(locale, labelView = new ButtonLabelView()) {\n    super(locale);\n    this._focusDelayed = null;\n    const bind = this.bindTemplate;\n    const ariaLabelUid = uid();\n    this.set(\"ariaLabel\", void 0);\n    this.set(\"ariaLabelledBy\", `ck-editor__aria-label_${ariaLabelUid}`);\n    this.set(\"class\", void 0);\n    this.set(\"labelStyle\", void 0);\n    this.set(\"icon\", void 0);\n    this.set(\"isEnabled\", true);\n    this.set(\"isOn\", false);\n    this.set(\"isVisible\", true);\n    this.set(\"isToggleable\", false);\n    this.set(\"keystroke\", void 0);\n    this.set(\"label\", void 0);\n    this.set(\"role\", void 0);\n    this.set(\"tabindex\", -1);\n    this.set(\"tooltip\", false);\n    this.set(\"tooltipPosition\", \"s\");\n    this.set(\"type\", \"button\");\n    this.set(\"withText\", false);\n    this.set(\"withKeystroke\", false);\n    this.children = this.createCollection();\n    this.labelView = this._setupLabelView(labelView);\n    this.iconView = new iconview_default();\n    this.iconView.extendTemplate({\n      attributes: {\n        class: \"ck-button__icon\"\n      }\n    });\n    this.keystrokeView = this._createKeystrokeView();\n    this.bind(\"_tooltipString\").to(this, \"tooltip\", this, \"label\", this, \"keystroke\", this._getTooltipString.bind(this));\n    const template = {\n      tag: \"button\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-button\",\n          bind.to(\"class\"),\n          bind.if(\"isEnabled\", \"ck-disabled\", (value) => !value),\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value),\n          bind.to(\"isOn\", (value) => value ? \"ck-on\" : \"ck-off\"),\n          bind.if(\"withText\", \"ck-button_with-text\"),\n          bind.if(\"withKeystroke\", \"ck-button_with-keystroke\")\n        ],\n        role: bind.to(\"role\"),\n        type: bind.to(\"type\", (value) => value ? value : \"button\"),\n        tabindex: bind.to(\"tabindex\"),\n        \"aria-label\": bind.to(\"ariaLabel\"),\n        \"aria-labelledby\": bind.to(\"ariaLabelledBy\"),\n        \"aria-disabled\": bind.if(\"isEnabled\", true, (value) => !value),\n        \"aria-pressed\": bind.to(\"isOn\", (value) => this.isToggleable ? String(!!value) : false),\n        \"data-cke-tooltip-text\": bind.to(\"_tooltipString\"),\n        \"data-cke-tooltip-position\": bind.to(\"tooltipPosition\")\n      },\n      children: this.children,\n      on: {\n        click: bind.to((evt) => {\n          if (this.isEnabled) {\n            this.fire(\"execute\");\n          } else {\n            evt.preventDefault();\n          }\n        })\n      }\n    };\n    if (env_default.isSafari) {\n      if (!this._focusDelayed) {\n        this._focusDelayed = delay(() => this.focus(), 0);\n      }\n      template.on.mousedown = bind.to(() => {\n        this._focusDelayed();\n      });\n      template.on.mouseup = bind.to(() => {\n        this._focusDelayed.cancel();\n      });\n    }\n    this.setTemplate(template);\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    if (this.icon) {\n      this.iconView.bind(\"content\").to(this, \"icon\");\n      this.children.add(this.iconView);\n    }\n    this.children.add(this.labelView);\n    if (this.withKeystroke && this.keystroke) {\n      this.children.add(this.keystrokeView);\n    }\n  }\n  /**\n   * Focuses the {@link #element} of the button.\n   */\n  focus() {\n    this.element.focus();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    if (this._focusDelayed) {\n      this._focusDelayed.cancel();\n    }\n    super.destroy();\n  }\n  /**\n   * Binds the label view instance it with button attributes.\n   */\n  _setupLabelView(labelView) {\n    labelView.bind(\"text\", \"style\", \"id\").to(this, \"label\", \"labelStyle\", \"ariaLabelledBy\");\n    return labelView;\n  }\n  /**\n   * Creates a view that displays a keystroke next to a {@link #labelView label }\n   * and binds it with button attributes.\n   */\n  _createKeystrokeView() {\n    const keystrokeView = new View();\n    keystrokeView.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-button__keystroke\"\n        ]\n      },\n      children: [\n        {\n          text: this.bindTemplate.to(\"keystroke\", (text) => getEnvKeystrokeText(text))\n        }\n      ]\n    });\n    return keystrokeView;\n  }\n  /**\n   * Gets the text for the tooltip from the combination of\n   * {@link #tooltip}, {@link #label} and {@link #keystroke} attributes.\n   *\n   * @see #tooltip\n   * @see #_tooltipString\n   * @param tooltip Button tooltip.\n   * @param label Button label.\n   * @param keystroke Button keystroke.\n   */\n  _getTooltipString(tooltip, label, keystroke) {\n    if (tooltip) {\n      if (typeof tooltip == \"string\") {\n        return tooltip;\n      } else {\n        if (keystroke) {\n          keystroke = getEnvKeystrokeText(keystroke);\n        }\n        if (tooltip instanceof Function) {\n          return tooltip(label, keystroke);\n        } else {\n          return `${label}${keystroke ? ` (${keystroke})` : \"\"}`;\n        }\n      }\n    }\n    return \"\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js\nimport dropdownArrowIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/icons/dropdown-arrow.svg\";\nvar DropdownButtonView = class extends ButtonView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.arrowView = this._createArrowView();\n    this.extendTemplate({\n      attributes: {\n        \"aria-haspopup\": true,\n        \"aria-expanded\": this.bindTemplate.to(\"isOn\", (value) => String(value))\n      }\n    });\n    this.delegate(\"execute\").to(this, \"open\");\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.children.add(this.arrowView);\n  }\n  /**\n   * Creates a {@link module:ui/icon/iconview~IconView} instance as {@link #arrowView}.\n   */\n  _createArrowView() {\n    const arrowView = new iconview_default();\n    arrowView.content = dropdownArrowIcon;\n    arrowView.extendTemplate({\n      attributes: {\n        class: \"ck-dropdown__arrow\"\n      }\n    });\n    return arrowView;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js\nfunction normalizeToolbarConfig(config) {\n  if (Array.isArray(config)) {\n    return {\n      items: config,\n      removeItems: []\n    };\n  }\n  const predefinedConfigOptions = {\n    items: [],\n    removeItems: []\n  };\n  if (!config) {\n    return predefinedConfigOptions;\n  }\n  return {\n    ...predefinedConfigOptions,\n    ...config\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/focuscycler.js\nvar FocusCycler = class extends EmitterMixin() {\n  /**\n   * Creates an instance of the focus cycler utility.\n   *\n   * @param options Configuration options.\n   */\n  constructor(options) {\n    super();\n    this.focusables = options.focusables;\n    this.focusTracker = options.focusTracker;\n    this.keystrokeHandler = options.keystrokeHandler;\n    this.actions = options.actions;\n    if (options.actions && options.keystrokeHandler) {\n      for (const methodName in options.actions) {\n        let actions = options.actions[methodName];\n        if (typeof actions == \"string\") {\n          actions = [actions];\n        }\n        for (const keystroke of actions) {\n          options.keystrokeHandler.set(keystroke, (data, cancel) => {\n            this[methodName]();\n            cancel();\n          });\n        }\n      }\n    }\n    this.on(\"forwardCycle\", () => this.focusFirst(), { priority: \"low\" });\n    this.on(\"backwardCycle\", () => this.focusLast(), { priority: \"low\" });\n  }\n  /**\n   * Returns the first focusable view in {@link #focusables}.\n   * Returns `null` if there is none.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  get first() {\n    return this.focusables.find(isDomFocusable) || null;\n  }\n  /**\n   * Returns the last focusable view in {@link #focusables}.\n   * Returns `null` if there is none.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  get last() {\n    return this.focusables.filter(isDomFocusable).slice(-1)[0] || null;\n  }\n  /**\n   * Returns the next focusable view in {@link #focusables} based on {@link #current}.\n   * Returns `null` if there is none.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  get next() {\n    return this._getDomFocusableItem(1);\n  }\n  /**\n   * Returns the previous focusable view in {@link #focusables} based on {@link #current}.\n   * Returns `null` if there is none.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  get previous() {\n    return this._getDomFocusableItem(-1);\n  }\n  /**\n   * An index of the view in the {@link #focusables} which is focused according\n   * to {@link #focusTracker}. Returns `null` when there is no such view.\n   */\n  get current() {\n    let index = null;\n    if (this.focusTracker.focusedElement === null) {\n      return null;\n    }\n    this.focusables.find((view, viewIndex) => {\n      const focused = view.element === this.focusTracker.focusedElement;\n      if (focused) {\n        index = viewIndex;\n      }\n      return focused;\n    });\n    return index;\n  }\n  /**\n   * Focuses the {@link #first} item in {@link #focusables}.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  focusFirst() {\n    this._focus(this.first, 1);\n  }\n  /**\n   * Focuses the {@link #last} item in {@link #focusables}.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  focusLast() {\n    this._focus(this.last, -1);\n  }\n  /**\n   * Focuses the {@link #next} item in {@link #focusables}.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  focusNext() {\n    const next = this.next;\n    if (next && this.focusables.getIndex(next) === this.current) {\n      this.fire(\"forwardCycle\");\n      return;\n    }\n    if (next === this.first) {\n      this.fire(\"forwardCycle\");\n    } else {\n      this._focus(next, 1);\n    }\n  }\n  /**\n   * Focuses the {@link #previous} item in {@link #focusables}.\n   *\n   * **Note**: Hidden views (e.g. with `display: none`) are ignored.\n   */\n  focusPrevious() {\n    const previous = this.previous;\n    if (previous && this.focusables.getIndex(previous) === this.current) {\n      this.fire(\"backwardCycle\");\n      return;\n    }\n    if (previous === this.last) {\n      this.fire(\"backwardCycle\");\n    } else {\n      this._focus(previous, -1);\n    }\n  }\n  /**\n   * Focuses the given view if it exists.\n   *\n   * @param view The view to be focused\n   * @param direction The direction of the focus if the view has focusable children.\n   * @returns\n   */\n  _focus(view, direction) {\n    if (view && this.focusTracker.focusedElement !== view.element) {\n      view.focus(direction);\n    }\n  }\n  /**\n   * Returns the next or previous focusable view in {@link #focusables} with respect\n   * to {@link #current}.\n   *\n   * @param step Either `1` for checking forward from {@link #current} or `-1` for checking backwards.\n   */\n  _getDomFocusableItem(step) {\n    const collectionLength = this.focusables.length;\n    if (!collectionLength) {\n      return null;\n    }\n    const current = this.current;\n    if (current === null) {\n      return this[step === 1 ? \"first\" : \"last\"];\n    }\n    let focusableItem = this.focusables.get(current);\n    let index = (current + collectionLength + step) % collectionLength;\n    do {\n      const focusableItemCandidate = this.focusables.get(index);\n      if (isDomFocusable(focusableItemCandidate)) {\n        focusableItem = focusableItemCandidate;\n        break;\n      }\n      index = (index + collectionLength + step) % collectionLength;\n    } while (index !== current);\n    return focusableItem;\n  }\n};\nfunction isDomFocusable(view) {\n  return isFocusable(view) && isVisible(view.element);\n}\nfunction isFocusable(view) {\n  return !!(\"focus\" in view && typeof view.focus == \"function\");\n}\nfunction isViewWithFocusCycler(view) {\n  return isFocusable(view) && \"focusCycler\" in view && view.focusCycler instanceof FocusCycler;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarseparatorview.js\nvar ToolbarSeparatorView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-toolbar__separator\"\n        ]\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarlinebreakview.js\nvar ToolbarLineBreakView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-toolbar__line-break\"\n        ]\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/preventdefault.js\nfunction preventDefault(view) {\n  return view.bindTemplate.to((evt) => {\n    if (evt.target === view.element) {\n      evt.preventDefault();\n    }\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownpanelview.js\nvar DropdownPanelView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"isVisible\", false);\n    this.set(\"position\", \"se\");\n    this.children = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-reset\",\n          \"ck-dropdown__panel\",\n          bind.to(\"position\", (value) => `ck-dropdown__panel_${value}`),\n          bind.if(\"isVisible\", \"ck-dropdown__panel-visible\")\n        ],\n        tabindex: \"-1\"\n      },\n      children: this.children,\n      on: {\n        // Drag and drop in the panel should not break the selection in the editor.\n        // https://github.com/ckeditor/ckeditor5-ui/issues/228\n        selectstart: bind.to((evt) => {\n          if (evt.target.tagName.toLocaleLowerCase() === \"input\") {\n            return;\n          }\n          evt.preventDefault();\n        })\n      }\n    });\n  }\n  /**\n   * Focuses the first view in the {@link #children} collection.\n   *\n   * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n   */\n  focus() {\n    if (this.children.length) {\n      const firstChild = this.children.first;\n      if (typeof firstChild.focus === \"function\") {\n        firstChild.focus();\n      } else {\n        logWarning(\"ui-dropdown-panel-focus-child-missing-focus\", { childView: this.children.first, dropdownPanel: this });\n      }\n    }\n  }\n  /**\n   * Focuses the view element or last item in view collection on opening dropdown's panel.\n   *\n   * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.\n   */\n  focusLast() {\n    if (this.children.length) {\n      const lastChild = this.children.last;\n      if (typeof lastChild.focusLast === \"function\") {\n        lastChild.focusLast();\n      } else {\n        lastChild.focus();\n      }\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dropdown/dropdownview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/dropdown.css\";\nvar DropdownView = class _DropdownView extends View {\n  /**\n   * Creates an instance of the dropdown.\n   *\n   * Also see {@link #render}.\n   *\n   * @param locale The localization services instance.\n   */\n  constructor(locale, buttonView, panelView) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.buttonView = buttonView;\n    this.panelView = panelView;\n    this.set(\"isOpen\", false);\n    this.set(\"isEnabled\", true);\n    this.set(\"class\", void 0);\n    this.set(\"id\", void 0);\n    this.set(\"panelPosition\", \"auto\");\n    this.panelView.bind(\"isVisible\").to(this, \"isOpen\");\n    this.keystrokes = new KeystrokeHandler();\n    this.focusTracker = new FocusTracker();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-dropdown\",\n          bind.to(\"class\"),\n          bind.if(\"isEnabled\", \"ck-disabled\", (value) => !value)\n        ],\n        id: bind.to(\"id\"),\n        \"aria-describedby\": bind.to(\"ariaDescribedById\")\n      },\n      children: [\n        buttonView,\n        panelView\n      ]\n    });\n    buttonView.extendTemplate({\n      attributes: {\n        class: [\n          \"ck-dropdown__button\"\n        ],\n        \"data-cke-tooltip-disabled\": bind.to(\"isOpen\")\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.focusTracker.add(this.buttonView.element);\n    this.focusTracker.add(this.panelView.element);\n    this.listenTo(this.buttonView, \"open\", () => {\n      this.isOpen = !this.isOpen;\n    });\n    this.on(\"change:isOpen\", (evt, name, isOpen) => {\n      if (!isOpen) {\n        return;\n      }\n      if (this.panelPosition === \"auto\") {\n        const optimalPanelPosition = _DropdownView._getOptimalPosition({\n          element: this.panelView.element,\n          target: this.buttonView.element,\n          fitInViewport: true,\n          positions: this._panelPositions\n        });\n        this.panelView.position = optimalPanelPosition ? optimalPanelPosition.name : this._panelPositions[0].name;\n      } else {\n        this.panelView.position = this.panelPosition;\n      }\n    });\n    this.keystrokes.listenTo(this.element);\n    const closeDropdown = (data, cancel) => {\n      if (this.isOpen) {\n        this.isOpen = false;\n        cancel();\n      }\n    };\n    this.keystrokes.set(\"arrowdown\", (data, cancel) => {\n      if (this.buttonView.isEnabled && !this.isOpen) {\n        this.isOpen = true;\n        cancel();\n      }\n    });\n    this.keystrokes.set(\"arrowright\", (data, cancel) => {\n      if (this.isOpen) {\n        cancel();\n      }\n    });\n    this.keystrokes.set(\"arrowleft\", closeDropdown);\n    this.keystrokes.set(\"esc\", closeDropdown);\n  }\n  /**\n   * Focuses the {@link #buttonView}.\n   */\n  focus() {\n    this.buttonView.focus();\n  }\n  /**\n   * Returns {@link #panelView panel} positions to be used by the\n   * {@link module:utils/dom/position~getOptimalPosition `getOptimalPosition()`}\n   * utility considering the direction of the language the UI of the editor is displayed in.\n   */\n  get _panelPositions() {\n    const { south, north, southEast, southWest, northEast, northWest, southMiddleEast, southMiddleWest, northMiddleEast, northMiddleWest } = _DropdownView.defaultPanelPositions;\n    if (this.locale.uiLanguageDirection !== \"rtl\") {\n      return [\n        southEast,\n        southWest,\n        southMiddleEast,\n        southMiddleWest,\n        south,\n        northEast,\n        northWest,\n        northMiddleEast,\n        northMiddleWest,\n        north\n      ];\n    } else {\n      return [\n        southWest,\n        southEast,\n        southMiddleWest,\n        southMiddleEast,\n        south,\n        northWest,\n        northEast,\n        northMiddleWest,\n        northMiddleEast,\n        north\n      ];\n    }\n  }\n};\nDropdownView.defaultPanelPositions = {\n  south: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) / 2,\n      name: \"s\"\n    };\n  },\n  southEast: (buttonRect) => {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left,\n      name: \"se\"\n    };\n  },\n  southWest: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left - panelRect.width + buttonRect.width,\n      name: \"sw\"\n    };\n  },\n  southMiddleEast: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) / 4,\n      name: \"sme\"\n    };\n  },\n  southMiddleWest: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.bottom,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) * 3 / 4,\n      name: \"smw\"\n    };\n  },\n  north: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) / 2,\n      name: \"n\"\n    };\n  },\n  northEast: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left,\n      name: \"ne\"\n    };\n  },\n  northWest: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left - panelRect.width + buttonRect.width,\n      name: \"nw\"\n    };\n  },\n  northMiddleEast: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) / 4,\n      name: \"nme\"\n    };\n  },\n  northMiddleWest: (buttonRect, panelRect) => {\n    return {\n      top: buttonRect.top - panelRect.height,\n      left: buttonRect.left - (panelRect.width - buttonRect.width) * 3 / 4,\n      name: \"nmw\"\n    };\n  }\n};\nDropdownView._getOptimalPosition = getOptimalPosition;\nvar dropdownview_default = DropdownView;\n\n// node_modules/@ckeditor/ckeditor5-ui/src/list/listitemview.js\nvar ListItemView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"isVisible\", true);\n    this.children = this.createCollection();\n    this.setTemplate({\n      tag: \"li\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-list__item\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ],\n        role: \"presentation\"\n      },\n      children: this.children\n    });\n  }\n  /**\n   * Focuses the list item.\n   */\n  focus() {\n    if (this.children.first) {\n      this.children.first.focus();\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/label/labelview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/label/label.css\";\nvar LabelView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.set(\"text\", void 0);\n    this.set(\"for\", void 0);\n    this.id = `ck-editor__label_${uid()}`;\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"label\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-label\"\n        ],\n        id: this.id,\n        for: bind.to(\"for\")\n      },\n      children: [\n        {\n          text: bind.to(\"text\")\n        }\n      ]\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/list/listseparatorview.js\nvar ListSeparatorView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.setTemplate({\n      tag: \"li\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-list__separator\"\n        ]\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/list/listitemgroupview.js\nvar ListItemGroupView = class extends View {\n  /**\n   * Creates an instance of the list item group view class.\n   *\n   * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n   * @param labelView The instance of the group's label. If not provided, an instance of\n   * {@link module:ui/label/labelview~LabelView} is used.\n   */\n  constructor(locale, labelView = new LabelView()) {\n    super(locale);\n    const bind = this.bindTemplate;\n    const nestedList = new ListView(locale);\n    this.set({\n      label: \"\",\n      isVisible: true\n    });\n    this.labelView = labelView;\n    this.labelView.bind(\"text\").to(this, \"label\");\n    this.children = this.createCollection();\n    this.children.addMany([this.labelView, nestedList]);\n    nestedList.set({\n      role: \"group\",\n      ariaLabelledBy: labelView.id\n    });\n    nestedList.focusTracker.destroy();\n    nestedList.keystrokes.destroy();\n    this.items = nestedList.items;\n    this.setTemplate({\n      tag: \"li\",\n      attributes: {\n        role: \"presentation\",\n        class: [\n          \"ck\",\n          \"ck-list__group\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ]\n      },\n      children: this.children\n    });\n  }\n  /**\n   * Focuses the list item (which is not a separator).\n   */\n  focus() {\n    if (this.items) {\n      const firstListItem = this.items.find((item) => !(item instanceof ListSeparatorView));\n      if (firstListItem) {\n        firstListItem.focus();\n      }\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/list/listview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/list/list.css\";\nvar ListView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this._listItemGroupToChangeListeners = /* @__PURE__ */ new WeakMap();\n    const bind = this.bindTemplate;\n    this.focusables = new ViewCollection();\n    this.items = this.createCollection();\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusCycler = new FocusCycler({\n      focusables: this.focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate list items backwards using the arrowup key.\n        focusPrevious: \"arrowup\",\n        // Navigate toolbar items forwards using the arrowdown key.\n        focusNext: \"arrowdown\"\n      }\n    });\n    this.set(\"ariaLabel\", void 0);\n    this.set(\"ariaLabelledBy\", void 0);\n    this.set(\"role\", void 0);\n    this.setTemplate({\n      tag: \"ul\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-reset\",\n          \"ck-list\"\n        ],\n        role: bind.to(\"role\"),\n        \"aria-label\": bind.to(\"ariaLabel\"),\n        \"aria-labelledby\": bind.to(\"ariaLabelledBy\")\n      },\n      children: this.items\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    for (const item of this.items) {\n      if (item instanceof ListItemGroupView) {\n        this._registerFocusableItemsGroup(item);\n      } else if (item instanceof ListItemView) {\n        this._registerFocusableListItem(item);\n      }\n    }\n    this.items.on(\"change\", (evt, data) => {\n      for (const removed of data.removed) {\n        if (removed instanceof ListItemGroupView) {\n          this._deregisterFocusableItemsGroup(removed);\n        } else {\n          this._deregisterFocusableListItem(removed);\n        }\n      }\n      for (const added of Array.from(data.added).reverse()) {\n        if (added instanceof ListItemGroupView) {\n          this._registerFocusableItemsGroup(added, data.index);\n        } else {\n          this._registerFocusableListItem(added, data.index);\n        }\n      }\n    });\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the first focusable in {@link #items}.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the first focusable in {@link #items}.\n   */\n  focusFirst() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the last focusable in {@link #items}.\n   */\n  focusLast() {\n    this._focusCycler.focusLast();\n  }\n  /**\n   * Registers a list item view in the focus tracker.\n   *\n   * @param item The list item view to be registered.\n   * @param index Index of the list item view in the {@link #items} collection. If not specified, the item will be added at the end.\n   */\n  _registerFocusableListItem(item, index) {\n    this.focusTracker.add(item.element);\n    this.focusables.add(item, index);\n  }\n  /**\n   * Removes a list item view from the focus tracker.\n   *\n   * @param item The list item view to be removed.\n   */\n  _deregisterFocusableListItem(item) {\n    this.focusTracker.remove(item.element);\n    this.focusables.remove(item);\n  }\n  /**\n   * Gets a callback that will be called when the `items` collection of a {@link module:ui/list/listitemgroupview~ListItemGroupView}\n   * change.\n   *\n   * @param groupView The group view for which the callback will be created.\n   * @returns The callback function to be used for the items `change` event listener in a group.\n   */\n  _getOnGroupItemsChangeCallback(groupView) {\n    return (evt, data) => {\n      for (const removed of data.removed) {\n        this._deregisterFocusableListItem(removed);\n      }\n      for (const added of Array.from(data.added).reverse()) {\n        this._registerFocusableListItem(added, this.items.getIndex(groupView) + data.index);\n      }\n    };\n  }\n  /**\n   * Registers a list item group view (and its children) in the focus tracker.\n   *\n   * @param groupView A group view to be registered.\n   * @param groupIndex Index of the group view in the {@link #items} collection. If not specified, the group will be added at the end.\n   */\n  _registerFocusableItemsGroup(groupView, groupIndex) {\n    Array.from(groupView.items).forEach((child, childIndex) => {\n      const registeredChildIndex = typeof groupIndex !== \"undefined\" ? groupIndex + childIndex : void 0;\n      this._registerFocusableListItem(child, registeredChildIndex);\n    });\n    const groupItemsChangeCallback = this._getOnGroupItemsChangeCallback(groupView);\n    this._listItemGroupToChangeListeners.set(groupView, groupItemsChangeCallback);\n    groupView.items.on(\"change\", groupItemsChangeCallback);\n  }\n  /**\n   * Removes a list item group view (and its children) from the focus tracker.\n   *\n   * @param groupView The group view to be removed.\n   */\n  _deregisterFocusableItemsGroup(groupView) {\n    for (const child of groupView.items) {\n      this._deregisterFocusableListItem(child);\n    }\n    groupView.items.off(\"change\", this._listItemGroupToChangeListeners.get(groupView));\n    this._listItemGroupToChangeListeners.delete(groupView);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dropdown/button/splitbuttonview.js\nimport dropdownArrowIcon2 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/icons/dropdown-arrow.svg\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/splitbutton.css\";\nvar SplitButtonView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale, actionButton) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"class\", void 0);\n    this.set(\"labelStyle\", void 0);\n    this.set(\"icon\", void 0);\n    this.set(\"isEnabled\", true);\n    this.set(\"isOn\", false);\n    this.set(\"isToggleable\", false);\n    this.set(\"isVisible\", true);\n    this.set(\"keystroke\", void 0);\n    this.set(\"withKeystroke\", false);\n    this.set(\"label\", void 0);\n    this.set(\"tabindex\", -1);\n    this.set(\"tooltip\", false);\n    this.set(\"tooltipPosition\", \"s\");\n    this.set(\"type\", \"button\");\n    this.set(\"withText\", false);\n    this.children = this.createCollection();\n    this.actionView = this._createActionView(actionButton);\n    this.arrowView = this._createArrowView();\n    this.keystrokes = new KeystrokeHandler();\n    this.focusTracker = new FocusTracker();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-splitbutton\",\n          bind.to(\"class\"),\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value),\n          this.arrowView.bindTemplate.if(\"isOn\", \"ck-splitbutton_open\")\n        ]\n      },\n      children: this.children\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.children.add(this.actionView);\n    this.children.add(this.arrowView);\n    this.focusTracker.add(this.actionView.element);\n    this.focusTracker.add(this.arrowView.element);\n    this.keystrokes.listenTo(this.element);\n    this.keystrokes.set(\"arrowright\", (evt, cancel) => {\n      if (this.focusTracker.focusedElement === this.actionView.element) {\n        this.arrowView.focus();\n        cancel();\n      }\n    });\n    this.keystrokes.set(\"arrowleft\", (evt, cancel) => {\n      if (this.focusTracker.focusedElement === this.arrowView.element) {\n        this.actionView.focus();\n        cancel();\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the {@link module:ui/button/buttonview~ButtonView#element} of the action part of split button.\n   */\n  focus() {\n    this.actionView.focus();\n  }\n  /**\n   * Creates a {@link module:ui/button/buttonview~ButtonView} instance as {@link #actionView} and binds it with main split button\n   * attributes.\n   */\n  _createActionView(actionButton) {\n    const actionView = actionButton || new ButtonView();\n    if (!actionButton) {\n      actionView.bind(\"icon\", \"isEnabled\", \"isOn\", \"isToggleable\", \"keystroke\", \"label\", \"tabindex\", \"tooltip\", \"tooltipPosition\", \"type\", \"withText\").to(this);\n    }\n    actionView.extendTemplate({\n      attributes: {\n        class: \"ck-splitbutton__action\"\n      }\n    });\n    actionView.delegate(\"execute\").to(this);\n    return actionView;\n  }\n  /**\n   * Creates a {@link module:ui/button/buttonview~ButtonView} instance as {@link #arrowView} and binds it with main split button\n   * attributes.\n   */\n  _createArrowView() {\n    const arrowView = new ButtonView();\n    const bind = arrowView.bindTemplate;\n    arrowView.icon = dropdownArrowIcon2;\n    arrowView.extendTemplate({\n      attributes: {\n        class: [\n          \"ck-splitbutton__arrow\"\n        ],\n        \"data-cke-tooltip-disabled\": bind.to(\"isOn\"),\n        \"aria-haspopup\": true,\n        \"aria-expanded\": bind.to(\"isOn\", (value) => String(value))\n      }\n    });\n    arrowView.bind(\"isEnabled\").to(this);\n    arrowView.bind(\"label\").to(this);\n    arrowView.bind(\"tooltip\").to(this);\n    arrowView.delegate(\"execute\").to(this, \"open\");\n    return arrowView;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/button/switchbuttonview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/button/switchbutton.css\";\nvar SwitchButtonView = class extends ButtonView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.isToggleable = true;\n    this.toggleSwitchView = this._createToggleView();\n    this.extendTemplate({\n      attributes: {\n        class: \"ck-switchbutton\"\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.children.add(this.toggleSwitchView);\n  }\n  /**\n   * Creates a toggle child view.\n   */\n  _createToggleView() {\n    const toggleSwitchView = new View();\n    toggleSwitchView.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-button__toggle\"\n        ]\n      },\n      children: [\n        {\n          tag: \"span\",\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-button__toggle__inner\"\n            ]\n          }\n        }\n      ]\n    });\n    return toggleSwitchView;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dropdown/utils.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/toolbardropdown.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dropdown/listdropdown.css\";\nfunction createDropdown(locale, ButtonClassOrInstance = DropdownButtonView) {\n  const buttonView = typeof ButtonClassOrInstance == \"function\" ? new ButtonClassOrInstance(locale) : ButtonClassOrInstance;\n  const panelView = new DropdownPanelView(locale);\n  const dropdownView = new dropdownview_default(locale, buttonView, panelView);\n  buttonView.bind(\"isEnabled\").to(dropdownView);\n  if (buttonView instanceof SplitButtonView) {\n    buttonView.arrowView.bind(\"isOn\").to(dropdownView, \"isOpen\");\n  } else {\n    buttonView.bind(\"isOn\").to(dropdownView, \"isOpen\");\n  }\n  addDefaultBehavior(dropdownView);\n  return dropdownView;\n}\nfunction addToolbarToDropdown(dropdownView, buttonsOrCallback, options = {}) {\n  dropdownView.extendTemplate({\n    attributes: {\n      class: [\"ck-toolbar-dropdown\"]\n    }\n  });\n  if (dropdownView.isOpen) {\n    addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options);\n  } else {\n    dropdownView.once(\"change:isOpen\", () => addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options), { priority: \"highest\" });\n  }\n  if (options.enableActiveItemFocusOnDropdownOpen) {\n    focusChildOnDropdownOpen(dropdownView, () => dropdownView.toolbarView.items.find((item) => item.isOn));\n  }\n}\nfunction addToolbarToOpenDropdown(dropdownView, buttonsOrCallback, options) {\n  const locale = dropdownView.locale;\n  const t = locale.t;\n  const toolbarView = dropdownView.toolbarView = new ToolbarView(locale);\n  const buttons = typeof buttonsOrCallback == \"function\" ? buttonsOrCallback() : buttonsOrCallback;\n  toolbarView.ariaLabel = options.ariaLabel || t(\"Dropdown toolbar\");\n  if (options.maxWidth) {\n    toolbarView.maxWidth = options.maxWidth;\n  }\n  if (options.class) {\n    toolbarView.class = options.class;\n  }\n  if (options.isCompact) {\n    toolbarView.isCompact = options.isCompact;\n  }\n  if (options.isVertical) {\n    toolbarView.isVertical = true;\n  }\n  if (buttons instanceof ViewCollection) {\n    toolbarView.items.bindTo(buttons).using((item) => item);\n  } else {\n    toolbarView.items.addMany(buttons);\n  }\n  dropdownView.panelView.children.add(toolbarView);\n  toolbarView.items.delegate(\"execute\").to(dropdownView);\n}\nfunction addListToDropdown(dropdownView, itemsOrCallback, options = {}) {\n  if (dropdownView.isOpen) {\n    addListToOpenDropdown(dropdownView, itemsOrCallback, options);\n  } else {\n    dropdownView.once(\"change:isOpen\", () => addListToOpenDropdown(dropdownView, itemsOrCallback, options), { priority: \"highest\" });\n  }\n  focusChildOnDropdownOpen(dropdownView, () => dropdownView.listView.items.find((item) => {\n    if (item instanceof ListItemView) {\n      return item.children.first.isOn;\n    }\n    return false;\n  }));\n}\nfunction addListToOpenDropdown(dropdownView, itemsOrCallback, options) {\n  const locale = dropdownView.locale;\n  const listView = dropdownView.listView = new ListView(locale);\n  const items = typeof itemsOrCallback == \"function\" ? itemsOrCallback() : itemsOrCallback;\n  listView.ariaLabel = options.ariaLabel;\n  listView.role = options.role;\n  bindViewCollectionItemsToDefinitions(dropdownView, listView.items, items, locale);\n  dropdownView.panelView.children.add(listView);\n  listView.items.delegate(\"execute\").to(dropdownView);\n}\nfunction focusChildOnDropdownOpen(dropdownView, childSelectorCallback) {\n  dropdownView.on(\"change:isOpen\", () => {\n    if (!dropdownView.isOpen) {\n      return;\n    }\n    const childToFocus = childSelectorCallback();\n    if (!childToFocus) {\n      return;\n    }\n    if (typeof childToFocus.focus === \"function\") {\n      childToFocus.focus();\n    } else {\n      logWarning(\"ui-dropdown-focus-child-on-open-child-missing-focus\", { view: childToFocus });\n    }\n  }, { priority: priorities_default.low - 10 });\n}\nfunction addDefaultBehavior(dropdownView) {\n  closeDropdownOnClickOutside(dropdownView);\n  closeDropdownOnExecute(dropdownView);\n  closeDropdownOnBlur(dropdownView);\n  focusDropdownContentsOnArrows(dropdownView);\n  focusDropdownButtonOnClose(dropdownView);\n  focusDropdownPanelOnOpen(dropdownView);\n}\nfunction closeDropdownOnClickOutside(dropdownView) {\n  dropdownView.on(\"render\", () => {\n    clickOutsideHandler({\n      emitter: dropdownView,\n      activator: () => dropdownView.isOpen,\n      callback: () => {\n        dropdownView.isOpen = false;\n      },\n      contextElements: () => [\n        dropdownView.element,\n        ...dropdownView.focusTracker._elements\n      ]\n    });\n  });\n}\nfunction closeDropdownOnExecute(dropdownView) {\n  dropdownView.on(\"execute\", (evt) => {\n    if (evt.source instanceof SwitchButtonView) {\n      return;\n    }\n    dropdownView.isOpen = false;\n  });\n}\nfunction closeDropdownOnBlur(dropdownView) {\n  dropdownView.focusTracker.on(\"change:isFocused\", (evt, name, isFocused) => {\n    if (dropdownView.isOpen && !isFocused) {\n      dropdownView.isOpen = false;\n    }\n  });\n}\nfunction focusDropdownContentsOnArrows(dropdownView) {\n  dropdownView.keystrokes.set(\"arrowdown\", (data, cancel) => {\n    if (dropdownView.isOpen) {\n      dropdownView.panelView.focus();\n      cancel();\n    }\n  });\n  dropdownView.keystrokes.set(\"arrowup\", (data, cancel) => {\n    if (dropdownView.isOpen) {\n      dropdownView.panelView.focusLast();\n      cancel();\n    }\n  });\n}\nfunction focusDropdownButtonOnClose(dropdownView) {\n  dropdownView.on(\"change:isOpen\", (evt, name, isOpen) => {\n    if (isOpen) {\n      return;\n    }\n    const element = dropdownView.panelView.element;\n    if (element && element.contains(global_default.document.activeElement)) {\n      dropdownView.buttonView.focus();\n    }\n  });\n}\nfunction focusDropdownPanelOnOpen(dropdownView) {\n  dropdownView.on(\"change:isOpen\", (evt, name, isOpen) => {\n    if (!isOpen) {\n      return;\n    }\n    dropdownView.panelView.focus();\n  }, { priority: \"low\" });\n}\nfunction bindViewCollectionItemsToDefinitions(dropdownView, listItems, definitions, locale) {\n  listItems.bindTo(definitions).using((def) => {\n    if (def.type === \"separator\") {\n      return new ListSeparatorView(locale);\n    } else if (def.type === \"group\") {\n      const groupView = new ListItemGroupView(locale);\n      groupView.set({ label: def.label });\n      bindViewCollectionItemsToDefinitions(dropdownView, groupView.items, def.items, locale);\n      groupView.items.delegate(\"execute\").to(dropdownView);\n      return groupView;\n    } else if (def.type === \"button\" || def.type === \"switchbutton\") {\n      const listItemView = new ListItemView(locale);\n      let buttonView;\n      if (def.type === \"button\") {\n        buttonView = new ButtonView(locale);\n        buttonView.extendTemplate({\n          attributes: {\n            \"aria-checked\": buttonView.bindTemplate.to(\"isOn\")\n          }\n        });\n      } else {\n        buttonView = new SwitchButtonView(locale);\n      }\n      buttonView.bind(...Object.keys(def.model)).to(def.model);\n      buttonView.delegate(\"execute\").to(listItemView);\n      listItemView.children.add(buttonView);\n      return listItemView;\n    }\n    return null;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/toolbarview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/toolbar/toolbar.css\";\nvar { threeVerticalDots } = icons;\nvar NESTED_TOOLBAR_ICONS = {\n  alignLeft: icons.alignLeft,\n  bold: icons.bold,\n  importExport: icons.importExport,\n  paragraph: icons.paragraph,\n  plus: icons.plus,\n  text: icons.text,\n  threeVerticalDots: icons.threeVerticalDots,\n  pilcrow: icons.pilcrow,\n  dragIndicator: icons.dragIndicator\n};\nvar ToolbarView = class extends View {\n  /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~ToolbarView} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param locale The localization services instance.\n   * @param options Configuration options of the toolbar.\n   */\n  constructor(locale, options) {\n    super(locale);\n    const bind = this.bindTemplate;\n    const t = this.t;\n    this.options = options || {};\n    this.set(\"ariaLabel\", t(\"Editor toolbar\"));\n    this.set(\"maxWidth\", \"auto\");\n    this.items = this.createCollection();\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this.set(\"class\", void 0);\n    this.set(\"isCompact\", false);\n    this.itemsView = new ItemsView(locale);\n    this.children = this.createCollection();\n    this.children.add(this.itemsView);\n    this.focusables = this.createCollection();\n    const isRtl = locale.uiLanguageDirection === \"rtl\";\n    this._focusCycler = new FocusCycler({\n      focusables: this.focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate toolbar items backwards using the arrow[left,up] keys.\n        focusPrevious: [isRtl ? \"arrowright\" : \"arrowleft\", \"arrowup\"],\n        // Navigate toolbar items forwards using the arrow[right,down] keys.\n        focusNext: [isRtl ? \"arrowleft\" : \"arrowright\", \"arrowdown\"]\n      }\n    });\n    const classes = [\n      \"ck\",\n      \"ck-toolbar\",\n      bind.to(\"class\"),\n      bind.if(\"isCompact\", \"ck-toolbar_compact\")\n    ];\n    if (this.options.shouldGroupWhenFull && this.options.isFloating) {\n      classes.push(\"ck-toolbar_floating\");\n    }\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: classes,\n        role: \"toolbar\",\n        \"aria-label\": bind.to(\"ariaLabel\"),\n        style: {\n          maxWidth: bind.to(\"maxWidth\")\n        },\n        tabindex: -1\n      },\n      children: this.children,\n      on: {\n        // https://github.com/ckeditor/ckeditor5-ui/issues/206\n        mousedown: preventDefault(this)\n      }\n    });\n    this._behavior = this.options.shouldGroupWhenFull ? new DynamicGrouping(this) : new StaticLayout(this);\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.focusTracker.add(this.element);\n    for (const item of this.items) {\n      this.focusTracker.add(item.element);\n    }\n    this.items.on(\"add\", (evt, item) => {\n      this.focusTracker.add(item.element);\n    });\n    this.items.on(\"remove\", (evt, item) => {\n      this.focusTracker.remove(item.element);\n    });\n    this.keystrokes.listenTo(this.element);\n    this._behavior.render(this);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this._behavior.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n    return super.destroy();\n  }\n  /**\n   * Focuses the first focusable in {@link #focusables}.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the last focusable in {@link #focusables}.\n   */\n  focusLast() {\n    this._focusCycler.focusLast();\n  }\n  /**\n   * A utility that expands the plain toolbar configuration into\n   * {@link module:ui/toolbar/toolbarview~ToolbarView#items} using a given component factory.\n   *\n   * @param itemsOrConfig The toolbar items or the entire toolbar configuration object.\n   * @param factory A factory producing toolbar items.\n   * @param removeItems An array of items names to be removed from the configuration. When present, applies\n   * to this toolbar and all nested ones as well.\n   */\n  fillFromConfig(itemsOrConfig, factory, removeItems) {\n    this.items.addMany(this._buildItemsFromConfig(itemsOrConfig, factory, removeItems));\n  }\n  /**\n   * A utility that expands the plain toolbar configuration into a list of view items using a given component factory.\n   *\n   * @param itemsOrConfig The toolbar items or the entire toolbar configuration object.\n   * @param factory A factory producing toolbar items.\n   * @param removeItems An array of items names to be removed from the configuration. When present, applies\n   * to this toolbar and all nested ones as well.\n   */\n  _buildItemsFromConfig(itemsOrConfig, factory, removeItems) {\n    const config = normalizeToolbarConfig(itemsOrConfig);\n    const normalizedRemoveItems = removeItems || config.removeItems;\n    const itemsToAdd = this._cleanItemsConfiguration(config.items, factory, normalizedRemoveItems).map((item) => {\n      if (isObject_default(item)) {\n        return this._createNestedToolbarDropdown(item, factory, normalizedRemoveItems);\n      } else if (item === \"|\") {\n        return new ToolbarSeparatorView();\n      } else if (item === \"-\") {\n        return new ToolbarLineBreakView();\n      }\n      return factory.create(item);\n    }).filter((item) => !!item);\n    return itemsToAdd;\n  }\n  /**\n   * Cleans up the {@link module:ui/toolbar/toolbarview~ToolbarView#items} of the toolbar by removing unwanted items and\n   * duplicated (obsolete) separators or line breaks.\n   *\n   * @param items The toolbar items configuration.\n   * @param factory A factory producing toolbar items.\n   * @param removeItems An array of items names to be removed from the configuration.\n   * @returns Items after the clean-up.\n   */\n  _cleanItemsConfiguration(items, factory, removeItems) {\n    const filteredItems = items.filter((item, idx, items2) => {\n      if (item === \"|\") {\n        return true;\n      }\n      if (removeItems.indexOf(item) !== -1) {\n        return false;\n      }\n      if (item === \"-\") {\n        if (this.options.shouldGroupWhenFull) {\n          logWarning(\"toolbarview-line-break-ignored-when-grouping-items\", items2);\n          return false;\n        }\n        return true;\n      }\n      if (!isObject_default(item) && !factory.has(item)) {\n        logWarning(\"toolbarview-item-unavailable\", { item });\n        return false;\n      }\n      return true;\n    });\n    return this._cleanSeparatorsAndLineBreaks(filteredItems);\n  }\n  /**\n   * Remove leading, trailing, and duplicated separators (`-` and `|`).\n   *\n   * @returns Toolbar items after the separator and line break clean-up.\n   */\n  _cleanSeparatorsAndLineBreaks(items) {\n    const nonSeparatorPredicate = (item) => item !== \"-\" && item !== \"|\";\n    const count = items.length;\n    const firstCommandItemIndex = items.findIndex(nonSeparatorPredicate);\n    if (firstCommandItemIndex === -1) {\n      return [];\n    }\n    const lastCommandItemIndex = count - items.slice().reverse().findIndex(nonSeparatorPredicate);\n    return items.slice(firstCommandItemIndex, lastCommandItemIndex).filter((name, idx, items2) => {\n      if (nonSeparatorPredicate(name)) {\n        return true;\n      }\n      const isDuplicated = idx > 0 && items2[idx - 1] === name;\n      return !isDuplicated;\n    });\n  }\n  /**\n   * Creates a user-defined dropdown containing a toolbar with items.\n   *\n   * @param definition A definition of the nested toolbar dropdown.\n   * @param definition.label A label of the dropdown.\n   * @param definition.icon An icon of the drop-down. One of 'bold', 'plus', 'text', 'importExport', 'alignLeft',\n   * 'paragraph' or an SVG string. When `false` is passed, no icon will be used.\n   * @param definition.withText When set `true`, the label of the dropdown will be visible. See\n   * {@link module:ui/button/buttonview~ButtonView#withText} to learn more.\n   * @param definition.tooltip A tooltip of the dropdown button. See\n   * {@link module:ui/button/buttonview~ButtonView#tooltip} to learn more. Defaults to `true`.\n   * @param componentFactory Component factory used to create items\n   * of the nested toolbar.\n   */\n  _createNestedToolbarDropdown(definition, componentFactory, removeItems) {\n    let { label, icon, items, tooltip = true, withText = false } = definition;\n    items = this._cleanItemsConfiguration(items, componentFactory, removeItems);\n    if (!items.length) {\n      return null;\n    }\n    const locale = this.locale;\n    const dropdownView = createDropdown(locale);\n    if (!label) {\n      logWarning(\"toolbarview-nested-toolbar-dropdown-missing-label\", definition);\n    }\n    dropdownView.class = \"ck-toolbar__nested-toolbar-dropdown\";\n    dropdownView.buttonView.set({\n      label,\n      tooltip,\n      withText: !!withText\n    });\n    if (icon !== false) {\n      dropdownView.buttonView.icon = NESTED_TOOLBAR_ICONS[icon] || icon || threeVerticalDots;\n    } else {\n      dropdownView.buttonView.withText = true;\n    }\n    addToolbarToDropdown(dropdownView, () => dropdownView.toolbarView._buildItemsFromConfig(items, componentFactory, removeItems));\n    return dropdownView;\n  }\n};\nvar ItemsView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.children = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-toolbar__items\"\n        ]\n      },\n      children: this.children\n    });\n  }\n};\nvar StaticLayout = class {\n  /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~StaticLayout} toolbar\n   * behavior.\n   *\n   * @param view An instance of the toolbar that this behavior is added to.\n   */\n  constructor(view) {\n    const bind = view.bindTemplate;\n    view.set(\"isVertical\", false);\n    view.itemsView.children.bindTo(view.items).using((item) => item);\n    view.focusables.bindTo(view.items).using((item) => isFocusable(item) ? item : null);\n    view.extendTemplate({\n      attributes: {\n        class: [\n          // When vertical, the toolbar has an additional CSS class.\n          bind.if(\"isVertical\", \"ck-toolbar_vertical\")\n        ]\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n  }\n};\nvar DynamicGrouping = class {\n  /**\n   * Creates an instance of the {@link module:ui/toolbar/toolbarview~DynamicGrouping} toolbar\n   * behavior.\n   *\n   * @param view An instance of the toolbar that this behavior is added to.\n   */\n  constructor(view) {\n    this.resizeObserver = null;\n    this.cachedPadding = null;\n    this.shouldUpdateGroupingOnNextResize = false;\n    this.view = view;\n    this.viewChildren = view.children;\n    this.viewFocusables = view.focusables;\n    this.viewItemsView = view.itemsView;\n    this.viewFocusTracker = view.focusTracker;\n    this.viewLocale = view.locale;\n    this.ungroupedItems = view.createCollection();\n    this.groupedItems = view.createCollection();\n    this.groupedItemsDropdown = this._createGroupedItemsDropdown();\n    view.itemsView.children.bindTo(this.ungroupedItems).using((item) => item);\n    this.ungroupedItems.on(\"change\", this._updateFocusCyclableItems.bind(this));\n    view.children.on(\"change\", this._updateFocusCyclableItems.bind(this));\n    view.items.on(\"change\", (evt, changeData) => {\n      const index = changeData.index;\n      const added = Array.from(changeData.added);\n      for (const removedItem of changeData.removed) {\n        if (index >= this.ungroupedItems.length) {\n          this.groupedItems.remove(removedItem);\n        } else {\n          this.ungroupedItems.remove(removedItem);\n        }\n      }\n      for (let currentIndex = index; currentIndex < index + added.length; currentIndex++) {\n        const addedItem = added[currentIndex - index];\n        if (currentIndex > this.ungroupedItems.length) {\n          this.groupedItems.add(addedItem, currentIndex - this.ungroupedItems.length);\n        } else {\n          this.ungroupedItems.add(addedItem, currentIndex);\n        }\n      }\n      this._updateGrouping();\n    });\n    view.extendTemplate({\n      attributes: {\n        class: [\n          // To group items dynamically, the toolbar needs a dedicated CSS class.\n          \"ck-toolbar_grouping\"\n        ]\n      }\n    });\n  }\n  /**\n   * Enables dynamic items grouping based on the dimensions of the toolbar.\n   *\n   * @param view An instance of the toolbar that this behavior is added to.\n   */\n  render(view) {\n    this.viewElement = view.element;\n    this._enableGroupingOnResize();\n    this._enableGroupingOnMaxWidthChange(view);\n  }\n  /**\n   * Cleans up the internals used by this behavior.\n   */\n  destroy() {\n    this.groupedItemsDropdown.destroy();\n    this.resizeObserver.destroy();\n  }\n  /**\n   * When called, it will check if any of the {@link #ungroupedItems} do not fit into a single row of the toolbar,\n   * and it will move them to the {@link #groupedItems} when it happens.\n   *\n   * At the same time, it will also check if there is enough space in the toolbar for the first of the\n   * {@link #groupedItems} to be returned back to {@link #ungroupedItems} and still fit into a single row\n   * without the toolbar wrapping.\n   */\n  _updateGrouping() {\n    if (!this.viewElement.ownerDocument.body.contains(this.viewElement)) {\n      return;\n    }\n    if (!isVisible(this.viewElement)) {\n      this.shouldUpdateGroupingOnNextResize = true;\n      return;\n    }\n    const initialGroupedItemsCount = this.groupedItems.length;\n    let wereItemsGrouped;\n    while (this._areItemsOverflowing) {\n      this._groupLastItem();\n      wereItemsGrouped = true;\n    }\n    if (!wereItemsGrouped && this.groupedItems.length) {\n      while (this.groupedItems.length && !this._areItemsOverflowing) {\n        this._ungroupFirstItem();\n      }\n      if (this._areItemsOverflowing) {\n        this._groupLastItem();\n      }\n    }\n    if (this.groupedItems.length !== initialGroupedItemsCount) {\n      this.view.fire(\"groupedItemsUpdate\");\n    }\n  }\n  /**\n   * Returns `true` when {@link module:ui/toolbar/toolbarview~ToolbarView#element} children visually overflow,\n   * for instance if the toolbar is narrower than its members. Returns `false` otherwise.\n   */\n  get _areItemsOverflowing() {\n    if (!this.ungroupedItems.length) {\n      return false;\n    }\n    const element = this.viewElement;\n    const uiLanguageDirection = this.viewLocale.uiLanguageDirection;\n    const lastChildRect = new Rect(element.lastChild);\n    const toolbarRect = new Rect(element);\n    if (!this.cachedPadding) {\n      const computedStyle = global_default.window.getComputedStyle(element);\n      const paddingProperty = uiLanguageDirection === \"ltr\" ? \"paddingRight\" : \"paddingLeft\";\n      this.cachedPadding = Number.parseInt(computedStyle[paddingProperty]);\n    }\n    if (uiLanguageDirection === \"ltr\") {\n      return lastChildRect.right > toolbarRect.right - this.cachedPadding;\n    } else {\n      return lastChildRect.left < toolbarRect.left + this.cachedPadding;\n    }\n  }\n  /**\n   * Enables the functionality that prevents {@link #ungroupedItems} from overflowing (wrapping to the next row)\n   * upon resize when there is little space available. Instead, the toolbar items are moved to the\n   * {@link #groupedItems} collection and displayed in a dropdown at the end of the row (which has its own nested toolbar).\n   *\n   * When called, the toolbar will automatically analyze the location of its {@link #ungroupedItems} and \"group\"\n   * them in the dropdown if necessary. It will also observe the browser window for size changes in\n   * the future and respond to them by grouping more items or reverting already grouped back, depending\n   * on the visual space available.\n   */\n  _enableGroupingOnResize() {\n    let previousWidth;\n    this.resizeObserver = new resizeobserver_default(this.viewElement, (entry) => {\n      if (!previousWidth || previousWidth !== entry.contentRect.width || this.shouldUpdateGroupingOnNextResize) {\n        this.shouldUpdateGroupingOnNextResize = false;\n        this._updateGrouping();\n        previousWidth = entry.contentRect.width;\n      }\n    });\n    this._updateGrouping();\n  }\n  /**\n   * Enables the grouping functionality, just like {@link #_enableGroupingOnResize} but the difference is that\n   * it listens to the changes of {@link module:ui/toolbar/toolbarview~ToolbarView#maxWidth} instead.\n   */\n  _enableGroupingOnMaxWidthChange(view) {\n    view.on(\"change:maxWidth\", () => {\n      this._updateGrouping();\n    });\n  }\n  /**\n   * When called, it will remove the last item from {@link #ungroupedItems} and move it back\n   * to the {@link #groupedItems} collection.\n   *\n   * The opposite of {@link #_ungroupFirstItem}.\n   */\n  _groupLastItem() {\n    if (!this.groupedItems.length) {\n      this.viewChildren.add(new ToolbarSeparatorView());\n      this.viewChildren.add(this.groupedItemsDropdown);\n      this.viewFocusTracker.add(this.groupedItemsDropdown.element);\n    }\n    this.groupedItems.add(this.ungroupedItems.remove(this.ungroupedItems.last), 0);\n  }\n  /**\n   * Moves the very first item belonging to {@link #groupedItems} back\n   * to the {@link #ungroupedItems} collection.\n   *\n   * The opposite of {@link #_groupLastItem}.\n   */\n  _ungroupFirstItem() {\n    this.ungroupedItems.add(this.groupedItems.remove(this.groupedItems.first));\n    if (!this.groupedItems.length) {\n      this.viewChildren.remove(this.groupedItemsDropdown);\n      this.viewChildren.remove(this.viewChildren.last);\n      this.viewFocusTracker.remove(this.groupedItemsDropdown.element);\n    }\n  }\n  /**\n   * Creates the {@link #groupedItemsDropdown} that hosts the members of the {@link #groupedItems}\n   * collection when there is not enough space in the toolbar to display all items in a single row.\n   */\n  _createGroupedItemsDropdown() {\n    const locale = this.viewLocale;\n    const t = locale.t;\n    const dropdown = createDropdown(locale);\n    dropdown.class = \"ck-toolbar__grouped-dropdown\";\n    dropdown.panelPosition = locale.uiLanguageDirection === \"ltr\" ? \"sw\" : \"se\";\n    addToolbarToDropdown(dropdown, this.groupedItems);\n    dropdown.buttonView.set({\n      label: t(\"Show more items\"),\n      tooltip: true,\n      tooltipPosition: locale.uiLanguageDirection === \"rtl\" ? \"se\" : \"sw\",\n      icon: threeVerticalDots\n    });\n    return dropdown;\n  }\n  /**\n   * Updates the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables focus–cyclable items}\n   * collection so it represents the up–to–date state of the UI from the perspective of the user.\n   *\n   * For instance, the {@link #groupedItemsDropdown} can show up and hide but when it is visible,\n   * it must be subject to focus cycling in the toolbar.\n   *\n   * See the {@link module:ui/toolbar/toolbarview~ToolbarView#focusables collection} documentation\n   * to learn more about the purpose of this method.\n   */\n  _updateFocusCyclableItems() {\n    this.viewFocusables.clear();\n    this.ungroupedItems.map((item) => {\n      if (isFocusable(item)) {\n        this.viewFocusables.add(item);\n      }\n    });\n    if (this.groupedItems.length) {\n      this.viewFocusables.add(this.groupedItemsDropdown);\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/formheader/formheaderview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/formheader/formheader.css\";\nvar FormHeaderView = class extends View {\n  /**\n   * Creates an instance of the form header class.\n   *\n   * @param locale The locale instance.\n   * @param options.label A label.\n   * @param options.class An additional class.\n   */\n  constructor(locale, options = {}) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"label\", options.label || \"\");\n    this.set(\"class\", options.class || null);\n    this.children = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-form__header\",\n          bind.to(\"class\")\n        ]\n      },\n      children: this.children\n    });\n    if (options.icon) {\n      this.iconView = new iconview_default();\n      this.iconView.content = options.icon;\n      this.children.add(this.iconView);\n    }\n    const label = new View(locale);\n    label.setTemplate({\n      tag: \"h2\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-form__header__label\"\n        ]\n      },\n      children: [\n        { text: bind.to(\"label\") }\n      ]\n    });\n    this.children.add(label);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/draggableviewmixin.js\nfunction DraggableViewMixin(view) {\n  class DraggableMixin extends view {\n    /**\n     * @inheritdoc\n     */\n    constructor(...args) {\n      super(...args);\n      this._onDragBound = this._onDrag.bind(this);\n      this._onDragEndBound = this._onDragEnd.bind(this);\n      this._lastDraggingCoordinates = { x: 0, y: 0 };\n      this.on(\"render\", () => {\n        this._attachListeners();\n      });\n      this.set(\"isDragging\", false);\n    }\n    /**\n     * Attaches the listeners for the drag start.\n     */\n    _attachListeners() {\n      this.listenTo(this.element, \"mousedown\", this._onDragStart.bind(this));\n      this.listenTo(this.element, \"touchstart\", this._onDragStart.bind(this));\n    }\n    /**\n     * Attaches the listeners for the dragging and drag end.\n     */\n    _attachDragListeners() {\n      this.listenTo(global_default.document, \"mouseup\", this._onDragEndBound);\n      this.listenTo(global_default.document, \"touchend\", this._onDragEndBound);\n      this.listenTo(global_default.document, \"mousemove\", this._onDragBound);\n      this.listenTo(global_default.document, \"touchmove\", this._onDragBound);\n    }\n    /**\n     * Detaches the listeners after the drag end.\n     */\n    _detachDragListeners() {\n      this.stopListening(global_default.document, \"mouseup\", this._onDragEndBound);\n      this.stopListening(global_default.document, \"touchend\", this._onDragEndBound);\n      this.stopListening(global_default.document, \"mousemove\", this._onDragBound);\n      this.stopListening(global_default.document, \"touchmove\", this._onDragBound);\n    }\n    /**\n     * Starts the dragging listeners and sets the initial view coordinates.\n     */\n    _onDragStart(evt, domEvt) {\n      if (!this._isHandleElementPressed(domEvt)) {\n        return;\n      }\n      this._attachDragListeners();\n      let x = 0;\n      let y = 0;\n      if (domEvt instanceof MouseEvent) {\n        x = domEvt.clientX;\n        y = domEvt.clientY;\n      } else {\n        x = domEvt.touches[0].clientX;\n        y = domEvt.touches[0].clientY;\n      }\n      this._lastDraggingCoordinates = { x, y };\n      this.isDragging = true;\n    }\n    /**\n     * Updates the view coordinates and fires the `drag` event.\n     */\n    _onDrag(evt, domEvt) {\n      if (!this.isDragging) {\n        this._detachDragListeners();\n        return;\n      }\n      let newX = 0;\n      let newY = 0;\n      if (domEvt instanceof MouseEvent) {\n        newX = domEvt.clientX;\n        newY = domEvt.clientY;\n      } else {\n        newX = domEvt.touches[0].clientX;\n        newY = domEvt.touches[0].clientY;\n      }\n      domEvt.preventDefault();\n      this.fire(\"drag\", {\n        deltaX: Math.round(newX - this._lastDraggingCoordinates.x),\n        deltaY: Math.round(newY - this._lastDraggingCoordinates.y)\n      });\n      this._lastDraggingCoordinates = { x: newX, y: newY };\n    }\n    /**\n     * Stops the dragging and detaches the listeners.\n     */\n    _onDragEnd() {\n      this._detachDragListeners();\n      this.isDragging = false;\n    }\n    /**\n     * Checks if the drag handle element was pressed.\n     */\n    _isHandleElementPressed(domEvt) {\n      if (!this.dragHandleElement) {\n        return false;\n      }\n      return this.dragHandleElement === domEvt.target || domEvt.target instanceof HTMLElement && this.dragHandleElement.contains(domEvt.target);\n    }\n  }\n  return DraggableMixin;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogactionsview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dialog/dialogactions.css\";\nvar DialogActionsView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.children = this.createCollection();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusTracker = new FocusTracker();\n    this._focusables = new ViewCollection();\n    this.focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this._focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-dialog__actions\"\n        ]\n      },\n      children: this.children\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * Creates the button views based on the given definitions.\n   * Then adds them to the {@link #children} collection and to the focus cycler.\n   */\n  setButtons(definitions) {\n    for (const definition of definitions) {\n      const button = new ButtonView(this.locale);\n      let property;\n      button.on(\"execute\", () => definition.onExecute());\n      if (definition.onCreate) {\n        definition.onCreate(button);\n      }\n      for (property in definition) {\n        if (property != \"onExecute\" && property != \"onCreate\") {\n          button.set(property, definition[property]);\n        }\n      }\n      this.children.add(button);\n    }\n    this._updateFocusCyclableItems();\n  }\n  /**\n   * @inheritDoc\n   */\n  focus(direction) {\n    if (direction === -1) {\n      this.focusCycler.focusLast();\n    } else {\n      this.focusCycler.focusFirst();\n    }\n  }\n  /**\n   * Add all elements from the {@link #children} collection to the {@link #_focusables} collection\n   * and to the {@link #_focusTracker} instance.\n   */\n  _updateFocusCyclableItems() {\n    Array.from(this.children).forEach((v) => {\n      this._focusables.add(v);\n      this._focusTracker.add(v.element);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogcontentview.js\nvar DialogContentView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.children = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\"ck\", \"ck-dialog__content\"]\n      },\n      children: this.children\n    });\n  }\n  /**\n   * Removes all the child views.\n   */\n  reset() {\n    while (this.children.length) {\n      this.children.remove(0);\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/dialog/dialogview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/dialog/dialog.css\";\nimport cancelIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-core/theme/icons/cancel.svg\";\nvar DialogViewPosition = {\n  SCREEN_CENTER: \"screen-center\",\n  EDITOR_CENTER: \"editor-center\",\n  EDITOR_TOP_SIDE: \"editor-top-side\",\n  EDITOR_TOP_CENTER: \"editor-top-center\",\n  EDITOR_BOTTOM_CENTER: \"editor-bottom-center\",\n  EDITOR_ABOVE_CENTER: \"editor-above-center\",\n  EDITOR_BELOW_CENTER: \"editor-below-center\"\n};\nvar toPx = toUnit(\"px\");\nvar DialogView = class _DialogView extends DraggableViewMixin(View) {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale, { getCurrentDomRoot, getViewportOffset }) {\n    super(locale);\n    this.wasMoved = false;\n    const bind = this.bindTemplate;\n    const t = locale.t;\n    this.set(\"className\", \"\");\n    this.set(\"ariaLabel\", t(\"Editor dialog\"));\n    this.set(\"isModal\", false);\n    this.set(\"position\", DialogViewPosition.SCREEN_CENTER);\n    this.set(\"_isVisible\", false);\n    this.set(\"_isTransparent\", false);\n    this.set(\"_top\", 0);\n    this.set(\"_left\", 0);\n    this._getCurrentDomRoot = getCurrentDomRoot;\n    this._getViewportOffset = getViewportOffset;\n    this.decorate(\"moveTo\");\n    this.parts = this.createCollection();\n    this.keystrokes = new KeystrokeHandler();\n    this.focusTracker = new FocusTracker();\n    this._focusables = new ViewCollection();\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-dialog-overlay\",\n          bind.if(\"isModal\", \"ck-dialog-overlay__transparent\", (isModal) => !isModal),\n          bind.if(\"_isVisible\", \"ck-hidden\", (value) => !value)\n        ],\n        // Prevent from editor losing focus when clicking on the modal overlay.\n        tabindex: \"-1\"\n      },\n      children: [\n        {\n          tag: \"div\",\n          attributes: {\n            tabindex: \"-1\",\n            class: [\n              \"ck\",\n              \"ck-dialog\",\n              bind.to(\"className\")\n            ],\n            role: \"dialog\",\n            \"aria-label\": bind.to(\"ariaLabel\"),\n            style: {\n              top: bind.to(\"_top\", (top) => toPx(top)),\n              left: bind.to(\"_left\", (left) => toPx(left)),\n              visibility: bind.if(\"_isTransparent\", \"hidden\")\n            }\n          },\n          children: this.parts\n        }\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.keystrokes.set(\"Esc\", (data, cancel) => {\n      this.fire(\"close\", { source: \"escKeyPress\" });\n      cancel();\n    });\n    this.on(\"drag\", (evt, { deltaX, deltaY }) => {\n      this.wasMoved = true;\n      this.moveBy(deltaX, deltaY);\n    });\n    this.listenTo(global_default.window, \"resize\", () => {\n      if (this._isVisible && !this.wasMoved) {\n        this.updatePosition();\n      }\n    });\n    this.listenTo(global_default.document, \"scroll\", () => {\n      if (this._isVisible && !this.wasMoved) {\n        this.updatePosition();\n      }\n    });\n    this.on(\"change:_isVisible\", (evt, name, isVisible2) => {\n      if (isVisible2) {\n        this._isTransparent = true;\n        setTimeout(() => {\n          this.updatePosition();\n          this._isTransparent = false;\n          this.focus();\n        }, 10);\n      }\n    });\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * Returns the element that should be used as a drag handle.\n   */\n  get dragHandleElement() {\n    if (this.headerView) {\n      return this.headerView.element;\n    } else {\n      return null;\n    }\n  }\n  /**\n   * Creates the dialog parts. Which of them are created depends on the arguments passed to the method.\n   * There are no rules regarding the dialog construction, i.e. no part is mandatory.\n   * Each part can only be created once.\n   *\n   * @internal\n   */\n  setupParts({ icon, title, hasCloseButton = true, content, actionButtons }) {\n    if (title) {\n      this.headerView = new FormHeaderView(this.locale, { icon });\n      if (hasCloseButton) {\n        this.closeButtonView = this._createCloseButton();\n        this.headerView.children.add(this.closeButtonView);\n      }\n      this.headerView.label = title;\n      this.ariaLabel = title;\n      this.parts.add(this.headerView, 0);\n    }\n    if (content) {\n      if (content instanceof View) {\n        content = [content];\n      }\n      this.contentView = new DialogContentView(this.locale);\n      this.contentView.children.addMany(content);\n      this.parts.add(this.contentView);\n    }\n    if (actionButtons) {\n      this.actionsView = new DialogActionsView(this.locale);\n      this.actionsView.setButtons(actionButtons);\n      this.parts.add(this.actionsView);\n    }\n    this._updateFocusCyclableItems();\n  }\n  /**\n   * Focuses the first focusable element inside the dialog.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Normalises the passed coordinates to make sure the dialog view\n   * is displayed within the visible viewport and moves it there.\n   *\n   * @internal\n   */\n  moveTo(left, top) {\n    const viewportRect = this._getViewportRect();\n    const dialogRect = this._getDialogRect();\n    if (left + dialogRect.width > viewportRect.right) {\n      left = viewportRect.right - dialogRect.width;\n    }\n    if (left < viewportRect.left) {\n      left = viewportRect.left;\n    }\n    if (top < viewportRect.top) {\n      top = viewportRect.top;\n    }\n    this._moveTo(left, top);\n  }\n  /**\n   * Moves the dialog to the specified coordinates.\n   */\n  _moveTo(left, top) {\n    this._left = left;\n    this._top = top;\n  }\n  /**\n   * Moves the dialog by the specified offset.\n   *\n   * @internal\n   */\n  moveBy(left, top) {\n    this.moveTo(this._left + left, this._top + top);\n  }\n  /**\n   * Moves the dialog view to the off-screen position.\n   * Used when there's no space to display the dialog.\n   */\n  _moveOffScreen() {\n    this._moveTo(-9999, -9999);\n  }\n  /**\n   * Recalculates the dialog according to the set position and viewport\n   * and moves it to the new position.\n   */\n  updatePosition() {\n    if (!this.element || !this.element.parentNode) {\n      return;\n    }\n    const viewportRect = this._getViewportRect();\n    let configuredPosition = this.position;\n    let domRootRect;\n    if (!this._getCurrentDomRoot()) {\n      configuredPosition = DialogViewPosition.SCREEN_CENTER;\n    } else {\n      domRootRect = this._getVisibleDomRootRect(viewportRect);\n    }\n    const defaultOffset = _DialogView.defaultOffset;\n    const dialogRect = this._getDialogRect();\n    switch (configuredPosition) {\n      case DialogViewPosition.EDITOR_TOP_SIDE: {\n        if (domRootRect) {\n          const leftCoordinate = this.locale.contentLanguageDirection === \"ltr\" ? domRootRect.right - dialogRect.width - defaultOffset : domRootRect.left + defaultOffset;\n          this.moveTo(leftCoordinate, domRootRect.top + defaultOffset);\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n      case DialogViewPosition.EDITOR_CENTER: {\n        if (domRootRect) {\n          this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), Math.round(domRootRect.top + domRootRect.height / 2 - dialogRect.height / 2));\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n      case DialogViewPosition.SCREEN_CENTER: {\n        this.moveTo(Math.round((viewportRect.width - dialogRect.width) / 2), Math.round((viewportRect.height - dialogRect.height) / 2));\n        break;\n      }\n      case DialogViewPosition.EDITOR_TOP_CENTER: {\n        if (domRootRect) {\n          this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.top + defaultOffset);\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n      case DialogViewPosition.EDITOR_BOTTOM_CENTER: {\n        if (domRootRect) {\n          this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.bottom - dialogRect.height - defaultOffset);\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n      case DialogViewPosition.EDITOR_ABOVE_CENTER: {\n        if (domRootRect) {\n          this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.top - dialogRect.height - defaultOffset);\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n      case DialogViewPosition.EDITOR_BELOW_CENTER: {\n        if (domRootRect) {\n          this.moveTo(Math.round(domRootRect.left + domRootRect.width / 2 - dialogRect.width / 2), domRootRect.bottom + defaultOffset);\n        } else {\n          this._moveOffScreen();\n        }\n        break;\n      }\n    }\n  }\n  /**\n   * Calculates the visible DOM root part.\n   */\n  _getVisibleDomRootRect(viewportRect) {\n    let visibleDomRootRect = new Rect(this._getCurrentDomRoot()).getVisible();\n    if (!visibleDomRootRect) {\n      return null;\n    } else {\n      visibleDomRootRect = viewportRect.getIntersection(visibleDomRootRect);\n      if (!visibleDomRootRect) {\n        return null;\n      }\n    }\n    return visibleDomRootRect;\n  }\n  /**\n   * Calculates the dialog element rect.\n   */\n  _getDialogRect() {\n    return new Rect(this.element.firstElementChild);\n  }\n  /**\n   * Calculates the viewport rect.\n   */\n  _getViewportRect() {\n    return getConstrainedViewportRect(this._getViewportOffset());\n  }\n  /**\n   * Collects all focusable elements inside the dialog parts\n   * and adds them to the focus tracker and focus cycler.\n   */\n  _updateFocusCyclableItems() {\n    const focusables = [];\n    if (this.contentView) {\n      for (const child of this.contentView.children) {\n        if (isFocusable(child)) {\n          focusables.push(child);\n        }\n      }\n    }\n    if (this.actionsView) {\n      focusables.push(this.actionsView);\n    }\n    if (this.closeButtonView) {\n      focusables.push(this.closeButtonView);\n    }\n    focusables.forEach((focusable) => {\n      this._focusables.add(focusable);\n      this.focusTracker.add(focusable.element);\n      if (isViewWithFocusCycler(focusable)) {\n        this.listenTo(focusable.focusCycler, \"forwardCycle\", (evt) => {\n          this._focusCycler.focusNext();\n          if (this._focusCycler.next !== this._focusCycler.focusables.get(this._focusCycler.current)) {\n            evt.stop();\n          }\n        });\n        this.listenTo(focusable.focusCycler, \"backwardCycle\", (evt) => {\n          this._focusCycler.focusPrevious();\n          if (this._focusCycler.previous !== this._focusCycler.focusables.get(this._focusCycler.current)) {\n            evt.stop();\n          }\n        });\n      }\n    });\n  }\n  /**\n   * Creates a close button view that is displayed in the header view corner.\n   */\n  _createCloseButton() {\n    const buttonView = new ButtonView(this.locale);\n    const t = this.locale.t;\n    buttonView.set({\n      label: t(\"Close\"),\n      tooltip: true,\n      icon: cancelIcon\n    });\n    buttonView.on(\"execute\", () => this.fire(\"close\", { source: \"closeButton\" }));\n    return buttonView;\n  }\n};\nDialogView.defaultOffset = 15;\nvar dialogview_default = DialogView;\nfunction getConstrainedViewportRect(viewportOffset) {\n  viewportOffset = Object.assign({ top: 0, bottom: 0, left: 0, right: 0 }, viewportOffset);\n  const viewportRect = new Rect(global_default.window);\n  viewportRect.top += viewportOffset.top;\n  viewportRect.height -= viewportOffset.top;\n  viewportRect.bottom -= viewportOffset.bottom;\n  viewportRect.height -= viewportOffset.bottom;\n  viewportRect.left += viewportOffset.left;\n  viewportRect.right -= viewportOffset.right;\n  viewportRect.width -= viewportOffset.left + viewportOffset.right;\n  return viewportRect;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/balloonpanelview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonpanel.css\";\nvar toPx2 = toUnit(\"px\");\nvar defaultLimiterElement = global_default.document.body;\nvar POSITION_OFF_SCREEN = {\n  top: -99999,\n  left: -99999,\n  name: \"arrowless\",\n  config: {\n    withArrow: false\n  }\n};\nvar BalloonPanelView = class _BalloonPanelView extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"top\", 0);\n    this.set(\"left\", 0);\n    this.set(\"position\", \"arrow_nw\");\n    this.set(\"isVisible\", false);\n    this.set(\"withArrow\", true);\n    this.set(\"class\", void 0);\n    this._pinWhenIsVisibleCallback = null;\n    this.content = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-balloon-panel\",\n          bind.to(\"position\", (value) => `ck-balloon-panel_${value}`),\n          bind.if(\"isVisible\", \"ck-balloon-panel_visible\"),\n          bind.if(\"withArrow\", \"ck-balloon-panel_with-arrow\"),\n          bind.to(\"class\")\n        ],\n        style: {\n          top: bind.to(\"top\", toPx2),\n          left: bind.to(\"left\", toPx2)\n        }\n      },\n      children: this.content\n    });\n  }\n  /**\n   * Shows the panel.\n   *\n   * See {@link #isVisible}.\n   */\n  show() {\n    this.isVisible = true;\n  }\n  /**\n   * Hides the panel.\n   *\n   * See {@link #isVisible}.\n   */\n  hide() {\n    this.isVisible = false;\n  }\n  /**\n   * Attaches the panel to a specified {@link module:utils/dom/position~Options#target} with a\n   * smart positioning heuristics that chooses from available positions to make sure the panel\n   * is visible to the user i.e. within the limits of the viewport.\n   *\n   * This method accepts configuration {@link module:utils/dom/position~Options options}\n   * to set the `target`, optional `limiter` and `positions` the balloon should choose from.\n   *\n   * ```ts\n   * const panel = new BalloonPanelView( locale );\n   * const positions = BalloonPanelView.defaultPositions;\n   *\n   * panel.render();\n   *\n   * // Attach the panel to an element with the \"target\" id DOM.\n   * panel.attachTo( {\n   * \ttarget: document.querySelector( '#target' ),\n   * \tpositions: [\n   * \t\tpositions.northArrowSouth,\n   * \t\tpositions.southArrowNorth\n   * \t]\n   * } );\n   * ```\n   *\n   * **Note**: Attaching the panel will also automatically {@link #show} it.\n   *\n   * **Note**: An attached panel will not follow its target when the window is scrolled or resized.\n   * See the {@link #pin} method for a more permanent positioning strategy.\n   *\n   * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n   * Default `positions` array is {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n   */\n  attachTo(options) {\n    this.show();\n    const defaultPositions = _BalloonPanelView.defaultPositions;\n    const positionOptions = Object.assign({}, {\n      element: this.element,\n      positions: [\n        defaultPositions.southArrowNorth,\n        defaultPositions.southArrowNorthMiddleWest,\n        defaultPositions.southArrowNorthMiddleEast,\n        defaultPositions.southArrowNorthWest,\n        defaultPositions.southArrowNorthEast,\n        defaultPositions.northArrowSouth,\n        defaultPositions.northArrowSouthMiddleWest,\n        defaultPositions.northArrowSouthMiddleEast,\n        defaultPositions.northArrowSouthWest,\n        defaultPositions.northArrowSouthEast,\n        defaultPositions.viewportStickyNorth\n      ],\n      limiter: defaultLimiterElement,\n      fitInViewport: true\n    }, options);\n    const optimalPosition = _BalloonPanelView._getOptimalPosition(positionOptions) || POSITION_OFF_SCREEN;\n    const left = parseInt(optimalPosition.left);\n    const top = parseInt(optimalPosition.top);\n    const position = optimalPosition.name;\n    const config = optimalPosition.config || {};\n    const { withArrow = true } = config;\n    this.top = top;\n    this.left = left;\n    this.position = position;\n    this.withArrow = withArrow;\n  }\n  /**\n   * Works the same way as the {@link #attachTo} method except that the position of the panel is\n   * continuously updated when:\n   *\n   * * any ancestor of the {@link module:utils/dom/position~Options#target}\n   * or {@link module:utils/dom/position~Options#limiter} is scrolled,\n   * * the browser window gets resized or scrolled.\n   *\n   * Thanks to that, the panel always sticks to the {@link module:utils/dom/position~Options#target}\n   * and is immune to the changing environment.\n   *\n   * ```ts\n   * const panel = new BalloonPanelView( locale );\n   * const positions = BalloonPanelView.defaultPositions;\n   *\n   * panel.render();\n   *\n   * // Pin the panel to an element with the \"target\" id DOM.\n   * panel.pin( {\n   * \ttarget: document.querySelector( '#target' ),\n   * \tpositions: [\n   * \t\tpositions.northArrowSouth,\n   * \t\tpositions.southArrowNorth\n   * \t]\n   * } );\n   * ```\n   *\n   * To leave the pinned state, use the {@link #unpin} method.\n   *\n   * **Note**: Pinning the panel will also automatically {@link #show} it.\n   *\n   * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n   * Default `positions` array is {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView.defaultPositions}.\n   */\n  pin(options) {\n    this.unpin();\n    this._pinWhenIsVisibleCallback = () => {\n      if (this.isVisible) {\n        this._startPinning(options);\n      } else {\n        this._stopPinning();\n      }\n    };\n    this._startPinning(options);\n    this.listenTo(this, \"change:isVisible\", this._pinWhenIsVisibleCallback);\n  }\n  /**\n   * Stops pinning the panel, as set up by {@link #pin}.\n   */\n  unpin() {\n    if (this._pinWhenIsVisibleCallback) {\n      this._stopPinning();\n      this.stopListening(this, \"change:isVisible\", this._pinWhenIsVisibleCallback);\n      this._pinWhenIsVisibleCallback = null;\n      this.hide();\n    }\n  }\n  /**\n   * Starts managing the pinned state of the panel. See {@link #pin}.\n   *\n   * @param options Positioning options compatible with {@link module:utils/dom/position~getOptimalPosition}.\n   */\n  _startPinning(options) {\n    this.attachTo(options);\n    const targetElement = getDomElement(options.target);\n    const limiterElement = options.limiter ? getDomElement(options.limiter) : defaultLimiterElement;\n    this.listenTo(global_default.document, \"scroll\", (evt, domEvt) => {\n      const scrollTarget = domEvt.target;\n      const isWithinScrollTarget = targetElement && scrollTarget.contains(targetElement);\n      const isLimiterWithinScrollTarget = limiterElement && scrollTarget.contains(limiterElement);\n      if (isWithinScrollTarget || isLimiterWithinScrollTarget || !targetElement || !limiterElement) {\n        this.attachTo(options);\n      }\n    }, { useCapture: true });\n    this.listenTo(global_default.window, \"resize\", () => {\n      this.attachTo(options);\n    });\n  }\n  /**\n   * Stops managing the pinned state of the panel. See {@link #pin}.\n   */\n  _stopPinning() {\n    this.stopListening(global_default.document, \"scroll\");\n    this.stopListening(global_default.window, \"resize\");\n  }\n};\nBalloonPanelView.arrowSideOffset = 25;\nBalloonPanelView.arrowHeightOffset = 10;\nBalloonPanelView.stickyVerticalOffset = 20;\nBalloonPanelView._getOptimalPosition = getOptimalPosition;\nBalloonPanelView.defaultPositions = generatePositions();\nvar balloonpanelview_default = BalloonPanelView;\nfunction getDomElement(object) {\n  if (isElement_default(object)) {\n    return object;\n  }\n  if (isRange(object)) {\n    return object.commonAncestorContainer;\n  }\n  if (typeof object == \"function\") {\n    return getDomElement(object());\n  }\n  return null;\n}\nfunction generatePositions(options = {}) {\n  const { sideOffset = BalloonPanelView.arrowSideOffset, heightOffset = BalloonPanelView.arrowHeightOffset, stickyVerticalOffset = BalloonPanelView.stickyVerticalOffset, config } = options;\n  return {\n    // ------- North west\n    northWestArrowSouthWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - sideOffset,\n      name: \"arrow_sw\",\n      ...config && { config }\n    }),\n    northWestArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_smw\",\n      ...config && { config }\n    }),\n    northWestArrowSouth: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width / 2,\n      name: \"arrow_s\",\n      ...config && { config }\n    }),\n    northWestArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_sme\",\n      ...config && { config }\n    }),\n    northWestArrowSouthEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left - balloonRect.width + sideOffset,\n      name: \"arrow_se\",\n      ...config && { config }\n    }),\n    // ------- North\n    northArrowSouthWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - sideOffset,\n      name: \"arrow_sw\",\n      ...config && { config }\n    }),\n    northArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_smw\",\n      ...config && { config }\n    }),\n    northArrowSouth: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n      name: \"arrow_s\",\n      ...config && { config }\n    }),\n    northArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_sme\",\n      ...config && { config }\n    }),\n    northArrowSouthEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width + sideOffset,\n      name: \"arrow_se\",\n      ...config && { config }\n    }),\n    // ------- North east\n    northEastArrowSouthWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - sideOffset,\n      name: \"arrow_sw\",\n      ...config && { config }\n    }),\n    northEastArrowSouthMiddleWest: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_smw\",\n      ...config && { config }\n    }),\n    northEastArrowSouth: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width / 2,\n      name: \"arrow_s\",\n      ...config && { config }\n    }),\n    northEastArrowSouthMiddleEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_sme\",\n      ...config && { config }\n    }),\n    northEastArrowSouthEast: (targetRect, balloonRect) => ({\n      top: getNorthTop(targetRect, balloonRect),\n      left: targetRect.right - balloonRect.width + sideOffset,\n      name: \"arrow_se\",\n      ...config && { config }\n    }),\n    // ------- South west\n    southWestArrowNorthWest: (targetRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left - sideOffset,\n      name: \"arrow_nw\",\n      ...config && { config }\n    }),\n    southWestArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_nmw\",\n      ...config && { config }\n    }),\n    southWestArrowNorth: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left - balloonRect.width / 2,\n      name: \"arrow_n\",\n      ...config && { config }\n    }),\n    southWestArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_nme\",\n      ...config && { config }\n    }),\n    southWestArrowNorthEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left - balloonRect.width + sideOffset,\n      name: \"arrow_ne\",\n      ...config && { config }\n    }),\n    // ------- South\n    southArrowNorthWest: (targetRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left + targetRect.width / 2 - sideOffset,\n      name: \"arrow_nw\",\n      ...config && { config }\n    }),\n    southArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_nmw\",\n      ...config && { config }\n    }),\n    southArrowNorth: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n      name: \"arrow_n\",\n      ...config && { config }\n    }),\n    southArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_nme\",\n      ...config && { config }\n    }),\n    southArrowNorthEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.left + targetRect.width / 2 - balloonRect.width + sideOffset,\n      name: \"arrow_ne\",\n      ...config && { config }\n    }),\n    // ------- South east\n    southEastArrowNorthWest: (targetRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.right - sideOffset,\n      name: \"arrow_nw\",\n      ...config && { config }\n    }),\n    southEastArrowNorthMiddleWest: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.right - balloonRect.width * 0.25 - sideOffset,\n      name: \"arrow_nmw\",\n      ...config && { config }\n    }),\n    southEastArrowNorth: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.right - balloonRect.width / 2,\n      name: \"arrow_n\",\n      ...config && { config }\n    }),\n    southEastArrowNorthMiddleEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.right - balloonRect.width * 0.75 + sideOffset,\n      name: \"arrow_nme\",\n      ...config && { config }\n    }),\n    southEastArrowNorthEast: (targetRect, balloonRect) => ({\n      top: getSouthTop(targetRect),\n      left: targetRect.right - balloonRect.width + sideOffset,\n      name: \"arrow_ne\",\n      ...config && { config }\n    }),\n    // ------- West\n    westArrowEast: (targetRect, balloonRect) => ({\n      top: targetRect.top + targetRect.height / 2 - balloonRect.height / 2,\n      left: targetRect.left - balloonRect.width - heightOffset,\n      name: \"arrow_e\",\n      ...config && { config }\n    }),\n    // ------- East\n    eastArrowWest: (targetRect, balloonRect) => ({\n      top: targetRect.top + targetRect.height / 2 - balloonRect.height / 2,\n      left: targetRect.right + heightOffset,\n      name: \"arrow_w\",\n      ...config && { config }\n    }),\n    // ------- Sticky\n    viewportStickyNorth: (targetRect, balloonRect, viewportRect, limiterRect) => {\n      const boundaryRect = limiterRect || viewportRect;\n      if (!targetRect.getIntersection(boundaryRect)) {\n        return null;\n      }\n      if (boundaryRect.height - targetRect.height > stickyVerticalOffset) {\n        return null;\n      }\n      return {\n        top: boundaryRect.top + stickyVerticalOffset,\n        left: targetRect.left + targetRect.width / 2 - balloonRect.width / 2,\n        name: \"arrowless\",\n        config: {\n          withArrow: false,\n          ...config\n        }\n      };\n    }\n  };\n  function getNorthTop(targetRect, balloonRect) {\n    return targetRect.top - balloonRect.height - heightOffset;\n  }\n  function getSouthTop(targetRect) {\n    return targetRect.bottom + heightOffset;\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/componentfactory.js\nvar ComponentFactory = class {\n  /**\n   * Creates an instance of the factory.\n   *\n   * @param editor The editor instance.\n   */\n  constructor(editor) {\n    this._components = /* @__PURE__ */ new Map();\n    this.editor = editor;\n  }\n  /**\n   * Returns an iterator of registered component names. Names are returned in lower case.\n   */\n  *names() {\n    for (const value of this._components.values()) {\n      yield value.originalName;\n    }\n  }\n  /**\n   * Registers a component factory function that will be used by the\n   * {@link #create create} method and called with the\n   * {@link module:core/editor/editor~Editor#locale editor locale} as an argument,\n   * allowing localization of the {@link module:ui/view~View view}.\n   *\n   * @param name The name of the component.\n   * @param callback The callback that returns the component.\n   */\n  add(name, callback) {\n    this._components.set(getNormalized(name), { callback, originalName: name });\n  }\n  /**\n   * Creates an instance of a component registered in the factory under a specific name.\n   *\n   * When called, the {@link module:core/editor/editor~Editor#locale editor locale} is passed to\n   * the previously {@link #add added} factory function, allowing localization of the\n   * {@link module:ui/view~View view}.\n   *\n   * @param name The name of the component.\n   * @returns The instantiated component view.\n   */\n  create(name) {\n    if (!this.has(name)) {\n      throw new CKEditorError(\"componentfactory-item-missing\", this, { name });\n    }\n    return this._components.get(getNormalized(name)).callback(this.editor.locale);\n  }\n  /**\n   * Checks if a component of a given name is registered in the factory.\n   *\n   * @param name The name of the component.\n   */\n  has(name) {\n    return this._components.has(getNormalized(name));\n  }\n};\nfunction getNormalized(name) {\n  return String(name).toLowerCase();\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/tooltipmanager.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/tooltip/tooltip.css\";\nvar BALLOON_CLASS = \"ck-tooltip\";\nvar TooltipManager = class _TooltipManager extends DomEmitterMixin() {\n  /**\n   * Creates an instance of the tooltip manager.\n   */\n  constructor(editor) {\n    super();\n    this._currentElementWithTooltip = null;\n    this._currentTooltipPosition = null;\n    this._resizeObserver = null;\n    _TooltipManager._editors.add(editor);\n    if (_TooltipManager._instance) {\n      return _TooltipManager._instance;\n    }\n    _TooltipManager._instance = this;\n    this.tooltipTextView = new View(editor.locale);\n    this.tooltipTextView.set(\"text\", \"\");\n    this.tooltipTextView.setTemplate({\n      tag: \"span\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-tooltip__text\"\n        ]\n      },\n      children: [\n        {\n          text: this.tooltipTextView.bindTemplate.to(\"text\")\n        }\n      ]\n    });\n    this.balloonPanelView = new balloonpanelview_default(editor.locale);\n    this.balloonPanelView.class = BALLOON_CLASS;\n    this.balloonPanelView.content.add(this.tooltipTextView);\n    this._pinTooltipDebounced = debounce_default(this._pinTooltip, 600);\n    this.listenTo(global_default.document, \"mouseenter\", this._onEnterOrFocus.bind(this), { useCapture: true });\n    this.listenTo(global_default.document, \"mouseleave\", this._onLeaveOrBlur.bind(this), { useCapture: true });\n    this.listenTo(global_default.document, \"focus\", this._onEnterOrFocus.bind(this), { useCapture: true });\n    this.listenTo(global_default.document, \"blur\", this._onLeaveOrBlur.bind(this), { useCapture: true });\n    this.listenTo(global_default.document, \"scroll\", this._onScroll.bind(this), { useCapture: true });\n    this._watchdogExcluded = true;\n  }\n  /**\n   * Destroys the tooltip manager.\n   *\n   * **Note**: The manager singleton cannot be destroyed until all editors that use it are destroyed.\n   *\n   * @param editor The editor the manager was created for.\n   */\n  destroy(editor) {\n    const editorBodyViewCollection = editor.ui.view && editor.ui.view.body;\n    _TooltipManager._editors.delete(editor);\n    this.stopListening(editor.ui);\n    if (editorBodyViewCollection && editorBodyViewCollection.has(this.balloonPanelView)) {\n      editorBodyViewCollection.remove(this.balloonPanelView);\n    }\n    if (!_TooltipManager._editors.size) {\n      this._unpinTooltip();\n      this.balloonPanelView.destroy();\n      this.stopListening();\n      _TooltipManager._instance = null;\n    }\n  }\n  /**\n   * Returns {@link #balloonPanelView} {@link module:utils/dom/position~PositioningFunction positioning functions} for a given position\n   * name.\n   *\n   * @param position Name of the position (`s`, `se`, `sw`, `n`, `e`, or `w`).\n   * @returns Positioning functions to be used by the {@link #balloonPanelView}.\n   */\n  static getPositioningFunctions(position) {\n    const defaultPositions = _TooltipManager.defaultBalloonPositions;\n    return {\n      // South is most popular. We can use positioning heuristics to avoid clipping by the viewport with the sane fallback.\n      s: [\n        defaultPositions.southArrowNorth,\n        defaultPositions.southArrowNorthEast,\n        defaultPositions.southArrowNorthWest\n      ],\n      n: [defaultPositions.northArrowSouth],\n      e: [defaultPositions.eastArrowWest],\n      w: [defaultPositions.westArrowEast],\n      sw: [defaultPositions.southArrowNorthEast],\n      se: [defaultPositions.southArrowNorthWest]\n    }[position];\n  }\n  /**\n   * Handles displaying tooltips on `mouseenter` and `focus` in DOM.\n   *\n   * @param evt An object containing information about the fired event.\n   * @param domEvent The DOM event.\n   */\n  _onEnterOrFocus(evt, { target }) {\n    const elementWithTooltipAttribute = getDescendantWithTooltip(target);\n    if (!elementWithTooltipAttribute) {\n      return;\n    }\n    if (elementWithTooltipAttribute === this._currentElementWithTooltip) {\n      return;\n    }\n    this._unpinTooltip();\n    this._pinTooltipDebounced(elementWithTooltipAttribute, getTooltipData(elementWithTooltipAttribute));\n  }\n  /**\n   * Handles hiding tooltips on `mouseleave` and `blur` in DOM.\n   *\n   * @param evt An object containing information about the fired event.\n   * @param domEvent The DOM event.\n   */\n  _onLeaveOrBlur(evt, { target, relatedTarget }) {\n    if (evt.name === \"mouseleave\") {\n      if (!isElement_default(target)) {\n        return;\n      }\n      if (this._currentElementWithTooltip && target !== this._currentElementWithTooltip) {\n        return;\n      }\n      const descendantWithTooltip = getDescendantWithTooltip(target);\n      const relatedDescendantWithTooltip = getDescendantWithTooltip(relatedTarget);\n      if (descendantWithTooltip && descendantWithTooltip !== relatedDescendantWithTooltip) {\n        this._unpinTooltip();\n      }\n    } else {\n      if (this._currentElementWithTooltip && target !== this._currentElementWithTooltip) {\n        return;\n      }\n      this._unpinTooltip();\n    }\n  }\n  /**\n   * Handles hiding tooltips on `scroll` in DOM.\n   *\n   * @param evt An object containing information about the fired event.\n   * @param domEvent The DOM event.\n   */\n  _onScroll(evt, { target }) {\n    if (!this._currentElementWithTooltip) {\n      return;\n    }\n    if (target.contains(this.balloonPanelView.element) && target.contains(this._currentElementWithTooltip)) {\n      return;\n    }\n    this._unpinTooltip();\n  }\n  /**\n   * Pins the tooltip to a specific DOM element.\n   *\n   * @param options.text Text of the tooltip to display.\n   * @param options.position The position of the tooltip.\n   * @param options.cssClass Additional CSS class of the balloon with the tooltip.\n   */\n  _pinTooltip(targetDomElement, { text, position, cssClass }) {\n    const bodyViewCollection = first(_TooltipManager._editors.values()).ui.view.body;\n    if (!bodyViewCollection.has(this.balloonPanelView)) {\n      bodyViewCollection.add(this.balloonPanelView);\n    }\n    this.tooltipTextView.text = text;\n    this.balloonPanelView.pin({\n      target: targetDomElement,\n      positions: _TooltipManager.getPositioningFunctions(position)\n    });\n    this._resizeObserver = new resizeobserver_default(targetDomElement, () => {\n      if (!isVisible(targetDomElement)) {\n        this._unpinTooltip();\n      }\n    });\n    this.balloonPanelView.class = [BALLOON_CLASS, cssClass].filter((className) => className).join(\" \");\n    for (const editor of _TooltipManager._editors) {\n      this.listenTo(editor.ui, \"update\", this._updateTooltipPosition.bind(this), { priority: \"low\" });\n    }\n    this._currentElementWithTooltip = targetDomElement;\n    this._currentTooltipPosition = position;\n  }\n  /**\n   * Unpins the tooltip and cancels all queued pinning.\n   */\n  _unpinTooltip() {\n    this._pinTooltipDebounced.cancel();\n    this.balloonPanelView.unpin();\n    for (const editor of _TooltipManager._editors) {\n      this.stopListening(editor.ui, \"update\");\n    }\n    this._currentElementWithTooltip = null;\n    this._currentTooltipPosition = null;\n    if (this._resizeObserver) {\n      this._resizeObserver.destroy();\n    }\n  }\n  /**\n   * Updates the position of the tooltip so it stays in sync with the element it is pinned to.\n   *\n   * Hides the tooltip when the element is no longer visible in DOM.\n   */\n  _updateTooltipPosition() {\n    if (!isVisible(this._currentElementWithTooltip)) {\n      this._unpinTooltip();\n      return;\n    }\n    this.balloonPanelView.pin({\n      target: this._currentElementWithTooltip,\n      positions: _TooltipManager.getPositioningFunctions(this._currentTooltipPosition)\n    });\n  }\n};\nTooltipManager.defaultBalloonPositions = generatePositions({\n  heightOffset: 5,\n  sideOffset: 13\n});\nTooltipManager._editors = /* @__PURE__ */ new Set();\nTooltipManager._instance = null;\nvar tooltipmanager_default = TooltipManager;\nfunction getDescendantWithTooltip(element) {\n  if (!isElement_default(element)) {\n    return null;\n  }\n  return element.closest(\"[data-cke-tooltip-text]:not([data-cke-tooltip-disabled])\");\n}\nfunction getTooltipData(element) {\n  return {\n    text: element.dataset.ckeTooltipText,\n    position: element.dataset.ckeTooltipPosition || \"s\",\n    cssClass: element.dataset.ckeTooltipClass || \"\"\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editorui/poweredby.js\nimport poweredByIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/icons/project-logo.svg\";\nvar ICON_WIDTH = 53;\nvar ICON_HEIGHT = 10;\nvar NARROW_ROOT_HEIGHT_THRESHOLD = 50;\nvar NARROW_ROOT_WIDTH_THRESHOLD = 350;\nvar DEFAULT_LABEL = \"Powered by\";\nvar PoweredBy = class extends DomEmitterMixin() {\n  /**\n   * Creates a \"powered by\" helper for a given editor. The feature is initialized on Editor#ready\n   * event.\n   *\n   * @param editor\n   */\n  constructor(editor) {\n    super();\n    this.editor = editor;\n    this._balloonView = null;\n    this._lastFocusedEditableElement = null;\n    this._showBalloonThrottled = throttle_default(this._showBalloon.bind(this), 50, { leading: true });\n    editor.on(\"ready\", this._handleEditorReady.bind(this));\n  }\n  /**\n   * Destroys the \"powered by\" helper along with its view.\n   */\n  destroy() {\n    const balloon = this._balloonView;\n    if (balloon) {\n      balloon.unpin();\n      this._balloonView = null;\n    }\n    this._showBalloonThrottled.cancel();\n    this.stopListening();\n  }\n  /**\n   * Enables \"powered by\" label once the editor (ui) is ready.\n   */\n  _handleEditorReady() {\n    const editor = this.editor;\n    const forceVisible = !!editor.config.get(\"ui.poweredBy.forceVisible\");\n    if (!forceVisible && verifyLicense(editor.config.get(\"licenseKey\")) === \"VALID\") {\n      return;\n    }\n    if (!editor.ui.view) {\n      return;\n    }\n    editor.ui.focusTracker.on(\"change:isFocused\", (evt, data, isFocused) => {\n      this._updateLastFocusedEditableElement();\n      if (isFocused) {\n        this._showBalloon();\n      } else {\n        this._hideBalloon();\n      }\n    });\n    editor.ui.focusTracker.on(\"change:focusedElement\", (evt, data, focusedElement) => {\n      this._updateLastFocusedEditableElement();\n      if (focusedElement) {\n        this._showBalloon();\n      }\n    });\n    editor.ui.on(\"update\", () => {\n      this._showBalloonThrottled();\n    });\n  }\n  /**\n   * Creates an instance of the {@link module:ui/panel/balloon/balloonpanelview~BalloonPanelView balloon panel}\n   * with the \"powered by\" view inside ready for positioning.\n   */\n  _createBalloonView() {\n    const editor = this.editor;\n    const balloon = this._balloonView = new balloonpanelview_default();\n    const poweredByConfig = getNormalizedConfig(editor);\n    const view = new PoweredByView(editor.locale, poweredByConfig.label);\n    balloon.content.add(view);\n    balloon.set({\n      class: \"ck-powered-by-balloon\"\n    });\n    editor.ui.view.body.add(balloon);\n    editor.ui.focusTracker.add(balloon.element);\n    this._balloonView = balloon;\n  }\n  /**\n   * Attempts to display the balloon with the \"powered by\" view.\n   */\n  _showBalloon() {\n    if (!this._lastFocusedEditableElement) {\n      return;\n    }\n    const attachOptions = getBalloonAttachOptions(this.editor, this._lastFocusedEditableElement);\n    if (attachOptions) {\n      if (!this._balloonView) {\n        this._createBalloonView();\n      }\n      this._balloonView.pin(attachOptions);\n    }\n  }\n  /**\n   * Hides the \"powered by\" balloon if already visible.\n   */\n  _hideBalloon() {\n    if (this._balloonView) {\n      this._balloonView.unpin();\n    }\n  }\n  /**\n   * Updates the {@link #_lastFocusedEditableElement} based on the state of the global focus tracker.\n   */\n  _updateLastFocusedEditableElement() {\n    const editor = this.editor;\n    const isFocused = editor.ui.focusTracker.isFocused;\n    const focusedElement = editor.ui.focusTracker.focusedElement;\n    if (!isFocused || !focusedElement) {\n      this._lastFocusedEditableElement = null;\n      return;\n    }\n    const editableEditorElements = Array.from(editor.ui.getEditableElementsNames()).map((name) => {\n      return editor.ui.getEditableElement(name);\n    });\n    if (editableEditorElements.includes(focusedElement)) {\n      this._lastFocusedEditableElement = focusedElement;\n    } else {\n      this._lastFocusedEditableElement = editableEditorElements[0];\n    }\n  }\n};\nvar PoweredByView = class extends View {\n  /**\n   * Created an instance of the \"powered by\" view.\n   *\n   * @param locale The localization services instance.\n   * @param label The label text.\n   */\n  constructor(locale, label) {\n    super(locale);\n    const iconView = new iconview_default();\n    const bind = this.bindTemplate;\n    iconView.set({\n      content: poweredByIcon,\n      isColorInherited: false\n    });\n    iconView.extendTemplate({\n      attributes: {\n        style: {\n          width: ICON_WIDTH + \"px\",\n          height: ICON_HEIGHT + \"px\"\n        }\n      }\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\"ck\", \"ck-powered-by\"],\n        \"aria-hidden\": true\n      },\n      children: [\n        {\n          tag: \"a\",\n          attributes: {\n            href: \"https://ckeditor.com/?utm_source=ckeditor&utm_medium=referral&utm_campaign=701Dn000000hVgmIAE_powered_by_ckeditor_logo\",\n            target: \"_blank\",\n            tabindex: \"-1\"\n          },\n          children: [\n            ...label ? [\n              {\n                tag: \"span\",\n                attributes: {\n                  class: [\"ck\", \"ck-powered-by__label\"]\n                },\n                children: [label]\n              }\n            ] : [],\n            iconView\n          ],\n          on: {\n            dragstart: bind.to((evt) => evt.preventDefault())\n          }\n        }\n      ]\n    });\n  }\n};\nfunction getBalloonAttachOptions(editor, focusedEditableElement) {\n  const poweredByConfig = getNormalizedConfig(editor);\n  const positioningFunction = poweredByConfig.side === \"right\" ? getLowerRightCornerPosition(focusedEditableElement, poweredByConfig) : getLowerLeftCornerPosition(focusedEditableElement, poweredByConfig);\n  return {\n    target: focusedEditableElement,\n    positions: [positioningFunction]\n  };\n}\nfunction getLowerRightCornerPosition(focusedEditableElement, config) {\n  return getLowerCornerPosition(focusedEditableElement, config, (rootRect, balloonRect) => {\n    return rootRect.left + rootRect.width - balloonRect.width - config.horizontalOffset;\n  });\n}\nfunction getLowerLeftCornerPosition(focusedEditableElement, config) {\n  return getLowerCornerPosition(focusedEditableElement, config, (rootRect) => rootRect.left + config.horizontalOffset);\n}\nfunction getLowerCornerPosition(focusedEditableElement, config, getBalloonLeft) {\n  return (visibleEditableElementRect, balloonRect) => {\n    const editableElementRect = new Rect(focusedEditableElement);\n    if (editableElementRect.width < NARROW_ROOT_WIDTH_THRESHOLD || editableElementRect.height < NARROW_ROOT_HEIGHT_THRESHOLD) {\n      return null;\n    }\n    let balloonTop;\n    if (config.position === \"inside\") {\n      balloonTop = editableElementRect.bottom - balloonRect.height;\n    } else {\n      balloonTop = editableElementRect.bottom - balloonRect.height / 2;\n    }\n    balloonTop -= config.verticalOffset;\n    const balloonLeft = getBalloonLeft(editableElementRect, balloonRect);\n    const newBalloonPositionRect = visibleEditableElementRect.clone().moveTo(balloonLeft, balloonTop).getIntersection(balloonRect.clone().moveTo(balloonLeft, balloonTop));\n    const newBalloonPositionVisibleRect = newBalloonPositionRect.getVisible();\n    if (!newBalloonPositionVisibleRect || newBalloonPositionVisibleRect.getArea() < balloonRect.getArea()) {\n      return null;\n    }\n    return {\n      top: balloonTop,\n      left: balloonLeft,\n      name: `position_${config.position}-side_${config.side}`,\n      config: {\n        withArrow: false\n      }\n    };\n  };\n}\nfunction getNormalizedConfig(editor) {\n  const userConfig = editor.config.get(\"ui.poweredBy\");\n  const position = userConfig && userConfig.position || \"border\";\n  return {\n    position,\n    label: DEFAULT_LABEL,\n    verticalOffset: position === \"inside\" ? 5 : 0,\n    horizontalOffset: 5,\n    side: editor.locale.contentLanguageDirection === \"ltr\" ? \"right\" : \"left\",\n    ...userConfig\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/arialiveannouncer.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/arialiveannouncer/arialiveannouncer.css\";\nvar AriaLiveAnnouncerPoliteness = {\n  POLITE: \"polite\",\n  ASSERTIVE: \"assertive\"\n};\nvar AriaLiveAnnouncer = class {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    this.editor = editor;\n  }\n  /**\n   * Sets an announcement text to an aria region associated with a specific editor feature. The text is then\n   * announced by a screen reader to the user.\n   *\n   * If the aria region of a given name does not exist, it will be created and can be re-used later. The name of the region\n   * groups announcements originating from a specific editor feature and does not get announced by a screen reader.\n   *\n   * Using multiple regions allows for many announcements to be emitted in a short period of time. Changes to ARIA-live announcements\n   * are captured by a screen reader and read out in the order they were emitted.\n   *\n   * The default announcement politeness level is `'polite'`.\n   *\n   * ```ts\n   * // Most screen readers will queue announcements from multiple aria-live regions and read them out in the order they were emitted.\n   * editor.ui.ariaLiveAnnouncer.announce( 'image', 'Image uploaded.' );\n   * editor.ui.ariaLiveAnnouncer.announce( 'network', 'Connection lost. Reconnecting.' );\n   * ```\n   */\n  announce(regionName, announcementText, politeness = AriaLiveAnnouncerPoliteness.POLITE) {\n    const editor = this.editor;\n    if (!this.view) {\n      this.view = new AriaLiveAnnouncerView(editor.locale);\n      editor.ui.view.body.add(this.view);\n    }\n    let regionView = this.view.regionViews.find((view) => view.regionName === regionName);\n    if (!regionView) {\n      regionView = new AriaLiveAnnouncerRegionView(this.view.locale);\n      this.view.regionViews.add(regionView);\n    }\n    regionView.set({\n      regionName,\n      text: announcementText,\n      politeness\n    });\n  }\n};\nvar AriaLiveAnnouncerView = class extends View {\n  constructor(locale) {\n    super(locale);\n    this.regionViews = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-aria-live-announcer\"\n        ]\n      },\n      children: this.regionViews\n    });\n  }\n};\nvar AriaLiveAnnouncerRegionView = class extends View {\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"regionName\", \"\");\n    this.set(\"text\", \"\");\n    this.set(\"politeness\", AriaLiveAnnouncerPoliteness.POLITE);\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        role: \"region\",\n        \"data-region\": bind.to(\"regionName\"),\n        \"aria-live\": bind.to(\"politeness\")\n      },\n      children: [\n        { text: bind.to(\"text\") }\n      ]\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editorui/editorui.js\nvar EditorUI = class extends ObservableMixin() {\n  /**\n   * Creates an instance of the editor UI class.\n   *\n   * @param editor The editor instance.\n   */\n  constructor(editor) {\n    super();\n    this.isReady = false;\n    this._editableElementsMap = /* @__PURE__ */ new Map();\n    this._focusableToolbarDefinitions = [];\n    const editingView = editor.editing.view;\n    this.editor = editor;\n    this.componentFactory = new ComponentFactory(editor);\n    this.focusTracker = new FocusTracker();\n    this.tooltipManager = new tooltipmanager_default(editor);\n    this.poweredBy = new PoweredBy(editor);\n    this.ariaLiveAnnouncer = new AriaLiveAnnouncer(editor);\n    this.set(\"viewportOffset\", this._readViewportOffsetFromConfig());\n    this.once(\"ready\", () => {\n      this.isReady = true;\n    });\n    this.listenTo(editingView.document, \"layoutChanged\", this.update.bind(this));\n    this.listenTo(editingView, \"scrollToTheSelection\", this._handleScrollToTheSelection.bind(this));\n    this._initFocusTracking();\n  }\n  /**\n   * The main (outermost) DOM element of the editor UI.\n   *\n   * For example, in {@link module:editor-classic/classiceditor~ClassicEditor} it is a `<div>` which\n   * wraps the editable element and the toolbar. In {@link module:editor-inline/inlineeditor~InlineEditor}\n   * it is the editable element itself (as there is no other wrapper). However, in\n   * {@link module:editor-decoupled/decouplededitor~DecoupledEditor} it is set to `null` because this editor does not\n   * come with a single \"main\" HTML element (its editable element and toolbar are separate).\n   *\n   * This property can be understood as a shorthand for retrieving the element that a specific editor integration\n   * considers to be its main DOM element.\n   */\n  get element() {\n    return null;\n  }\n  /**\n   * Fires the {@link module:ui/editorui/editorui~EditorUI#event:update `update`} event.\n   *\n   * This method should be called when the editor UI (e.g. positions of its balloons) needs to be updated due to\n   * some environmental change which CKEditor 5 is not aware of (e.g. resize of a container in which it is used).\n   */\n  update() {\n    this.fire(\"update\");\n  }\n  /**\n   * Destroys the UI.\n   */\n  destroy() {\n    this.stopListening();\n    this.focusTracker.destroy();\n    this.tooltipManager.destroy(this.editor);\n    this.poweredBy.destroy();\n    for (const domElement of this._editableElementsMap.values()) {\n      domElement.ckeditorInstance = null;\n      this.editor.keystrokes.stopListening(domElement);\n    }\n    this._editableElementsMap = /* @__PURE__ */ new Map();\n    this._focusableToolbarDefinitions = [];\n  }\n  /**\n   * Stores the native DOM editable element used by the editor under a unique name.\n   *\n   * Also, registers the element in the editor to maintain the accessibility of the UI. When the user is editing text in a focusable\n   * editable area, they can use the <kbd>Alt</kbd> + <kbd>F10</kbd> keystroke to navigate over editor toolbars. See {@link #addToolbar}.\n   *\n   * @param rootName The unique name of the editable element.\n   * @param domElement The native DOM editable element.\n   */\n  setEditableElement(rootName, domElement) {\n    this._editableElementsMap.set(rootName, domElement);\n    if (!domElement.ckeditorInstance) {\n      domElement.ckeditorInstance = this.editor;\n    }\n    this.focusTracker.add(domElement);\n    const setUpKeystrokeHandler = () => {\n      if (this.editor.editing.view.getDomRoot(rootName)) {\n        return;\n      }\n      this.editor.keystrokes.listenTo(domElement);\n    };\n    if (this.isReady) {\n      setUpKeystrokeHandler();\n    } else {\n      this.once(\"ready\", setUpKeystrokeHandler);\n    }\n  }\n  /**\n   * Removes the editable from the editor UI. Removes all handlers added by {@link #setEditableElement}.\n   *\n   * @param rootName The name of the editable element to remove.\n   */\n  removeEditableElement(rootName) {\n    const domElement = this._editableElementsMap.get(rootName);\n    if (!domElement) {\n      return;\n    }\n    this._editableElementsMap.delete(rootName);\n    this.editor.keystrokes.stopListening(domElement);\n    this.focusTracker.remove(domElement);\n    domElement.ckeditorInstance = null;\n  }\n  /**\n   * Returns the editable editor element with the given name or null if editable does not exist.\n   *\n   * @param rootName The editable name.\n   */\n  getEditableElement(rootName = \"main\") {\n    return this._editableElementsMap.get(rootName);\n  }\n  /**\n   * Returns array of names of all editor editable elements.\n   */\n  getEditableElementsNames() {\n    return this._editableElementsMap.keys();\n  }\n  /**\n   * Adds a toolbar to the editor UI. Used primarily to maintain the accessibility of the UI.\n   *\n   * Focusable toolbars can be accessed (focused) by users by pressing the <kbd>Alt</kbd> + <kbd>F10</kbd> keystroke.\n   * Successive keystroke presses navigate over available toolbars.\n   *\n   * @param toolbarView A instance of the toolbar to be registered.\n   */\n  addToolbar(toolbarView, options = {}) {\n    if (toolbarView.isRendered) {\n      this.focusTracker.add(toolbarView.element);\n      this.editor.keystrokes.listenTo(toolbarView.element);\n    } else {\n      toolbarView.once(\"render\", () => {\n        this.focusTracker.add(toolbarView.element);\n        this.editor.keystrokes.listenTo(toolbarView.element);\n      });\n    }\n    this._focusableToolbarDefinitions.push({ toolbarView, options });\n  }\n  /**\n   * Stores all editable elements used by the editor instance.\n   *\n   * @deprecated\n   */\n  get _editableElements() {\n    console.warn(\"editor-ui-deprecated-editable-elements: The EditorUI#_editableElements property has been deprecated and will be removed in the near future.\", { editorUI: this });\n    return this._editableElementsMap;\n  }\n  /**\n   * Returns viewport offsets object:\n   *\n   * ```js\n   * {\n   * \ttop: Number,\n   * \tright: Number,\n   * \tbottom: Number,\n   * \tleft: Number\n   * }\n   * ```\n   *\n   * Only top property is currently supported.\n   */\n  _readViewportOffsetFromConfig() {\n    const editor = this.editor;\n    const viewportOffsetConfig = editor.config.get(\"ui.viewportOffset\");\n    if (viewportOffsetConfig) {\n      return viewportOffsetConfig;\n    }\n    const legacyOffsetConfig = editor.config.get(\"toolbar.viewportTopOffset\");\n    if (legacyOffsetConfig) {\n      console.warn(\"editor-ui-deprecated-viewport-offset-config: The `toolbar.vieportTopOffset` configuration option is deprecated. It will be removed from future CKEditor versions. Use `ui.viewportOffset.top` instead.\");\n      return { top: legacyOffsetConfig };\n    }\n    return { top: 0 };\n  }\n  /**\n   * Starts listening for <kbd>Alt</kbd> + <kbd>F10</kbd> and <kbd>Esc</kbd> keystrokes in the context of focusable\n   * {@link #setEditableElement editable elements} and {@link #addToolbar toolbars}\n   * to allow users navigate across the UI.\n   */\n  _initFocusTracking() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    let lastFocusedForeignElement;\n    let candidateDefinitions;\n    editor.keystrokes.set(\"Alt+F10\", (data, cancel) => {\n      const focusedElement = this.focusTracker.focusedElement;\n      if (Array.from(this._editableElementsMap.values()).includes(focusedElement) && !Array.from(editingView.domRoots.values()).includes(focusedElement)) {\n        lastFocusedForeignElement = focusedElement;\n      }\n      const currentFocusedToolbarDefinition = this._getCurrentFocusedToolbarDefinition();\n      if (!currentFocusedToolbarDefinition || !candidateDefinitions) {\n        candidateDefinitions = this._getFocusableCandidateToolbarDefinitions();\n      }\n      for (let i = 0; i < candidateDefinitions.length; i++) {\n        const candidateDefinition = candidateDefinitions.shift();\n        candidateDefinitions.push(candidateDefinition);\n        if (candidateDefinition !== currentFocusedToolbarDefinition && this._focusFocusableCandidateToolbar(candidateDefinition)) {\n          if (currentFocusedToolbarDefinition && currentFocusedToolbarDefinition.options.afterBlur) {\n            currentFocusedToolbarDefinition.options.afterBlur();\n          }\n          break;\n        }\n      }\n      cancel();\n    });\n    editor.keystrokes.set(\"Esc\", (data, cancel) => {\n      const focusedToolbarDef = this._getCurrentFocusedToolbarDefinition();\n      if (!focusedToolbarDef) {\n        return;\n      }\n      if (lastFocusedForeignElement) {\n        lastFocusedForeignElement.focus();\n        lastFocusedForeignElement = null;\n      } else {\n        editor.editing.view.focus();\n      }\n      if (focusedToolbarDef.options.afterBlur) {\n        focusedToolbarDef.options.afterBlur();\n      }\n      cancel();\n    });\n  }\n  /**\n   * Returns definitions of toolbars that could potentially be focused, sorted by their importance for the user.\n   *\n   * Focusable toolbars candidates are either:\n   * * already visible,\n   * * have `beforeFocus()` set in their {@link module:ui/editorui/editorui~FocusableToolbarDefinition definition} that suggests that\n   * they might show up when called. Keep in mind that determining whether a toolbar will show up (and become focusable) is impossible\n   * at this stage because it depends on its implementation, that in turn depends on the editing context (selection).\n   *\n   * **Note**: Contextual toolbars take precedence over regular toolbars.\n   */\n  _getFocusableCandidateToolbarDefinitions() {\n    const definitions = [];\n    for (const toolbarDef of this._focusableToolbarDefinitions) {\n      const { toolbarView, options } = toolbarDef;\n      if (isVisible(toolbarView.element) || options.beforeFocus) {\n        definitions.push(toolbarDef);\n      }\n    }\n    definitions.sort((defA, defB) => getToolbarDefinitionWeight(defA) - getToolbarDefinitionWeight(defB));\n    return definitions;\n  }\n  /**\n   * Returns a definition of the toolbar that is currently visible and focused (one of its children has focus).\n   *\n   * `null` is returned when no toolbar is currently focused.\n   */\n  _getCurrentFocusedToolbarDefinition() {\n    for (const definition of this._focusableToolbarDefinitions) {\n      if (definition.toolbarView.element && definition.toolbarView.element.contains(this.focusTracker.focusedElement)) {\n        return definition;\n      }\n    }\n    return null;\n  }\n  /**\n   * Focuses a focusable toolbar candidate using its definition.\n   *\n   * @param candidateToolbarDefinition A definition of the toolbar to focus.\n   * @returns `true` when the toolbar candidate was focused. `false` otherwise.\n   */\n  _focusFocusableCandidateToolbar(candidateToolbarDefinition) {\n    const { toolbarView, options: { beforeFocus } } = candidateToolbarDefinition;\n    if (beforeFocus) {\n      beforeFocus();\n    }\n    if (!isVisible(toolbarView.element)) {\n      return false;\n    }\n    toolbarView.focus();\n    return true;\n  }\n  /**\n   * Provides an integration between {@link #viewportOffset} and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.\n   * It allows the UI-agnostic engine method to consider user-configured viewport offsets specific for the integration.\n   *\n   * @param evt The `scrollToTheSelection` event info.\n   * @param data The payload carried by the `scrollToTheSelection` event.\n   */\n  _handleScrollToTheSelection(evt, data) {\n    const configuredViewportOffset = {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0,\n      ...this.viewportOffset\n    };\n    data.viewportOffset.top += configuredViewportOffset.top;\n    data.viewportOffset.bottom += configuredViewportOffset.bottom;\n    data.viewportOffset.left += configuredViewportOffset.left;\n    data.viewportOffset.right += configuredViewportOffset.right;\n  }\n};\nfunction getToolbarDefinitionWeight(toolbarDef) {\n  const { toolbarView, options } = toolbarDef;\n  let weight = 10;\n  if (isVisible(toolbarView.element)) {\n    weight--;\n  }\n  if (options.isContextual) {\n    weight--;\n  }\n  return weight;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editorui/bodycollection.js\nvar BodyCollection = class extends ViewCollection {\n  /**\n   * Creates a new instance of the {@link module:ui/editorui/bodycollection~BodyCollection}.\n   *\n   * @param locale The {@link module:core/editor/editor~Editor editor's locale} instance.\n   * @param initialItems The initial items of the collection.\n   */\n  constructor(locale, initialItems = []) {\n    super(initialItems);\n    this.locale = locale;\n  }\n  /**\n   * The element holding elements of the body region.\n   */\n  get bodyCollectionContainer() {\n    return this._bodyCollectionContainer;\n  }\n  /**\n   * Attaches the body collection to the DOM body element. You need to execute this method to render the content of\n   * the body collection.\n   */\n  attachToDom() {\n    this._bodyCollectionContainer = new Template({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-reset_all\",\n          \"ck-body\",\n          \"ck-rounded-corners\"\n        ],\n        dir: this.locale.uiLanguageDirection\n      },\n      children: this\n    }).render();\n    let wrapper = document.querySelector(\".ck-body-wrapper\");\n    if (!wrapper) {\n      wrapper = createElement(document, \"div\", { class: \"ck-body-wrapper\" });\n      document.body.appendChild(wrapper);\n    }\n    wrapper.appendChild(this._bodyCollectionContainer);\n  }\n  /**\n   * Detaches the collection from the DOM structure. Use this method when you do not need to use the body collection\n   * anymore to clean-up the DOM structure.\n   */\n  detachFromDom() {\n    super.destroy();\n    if (this._bodyCollectionContainer) {\n      this._bodyCollectionContainer.remove();\n    }\n    const wrapper = document.querySelector(\".ck-body-wrapper\");\n    if (wrapper && wrapper.childElementCount == 0) {\n      wrapper.remove();\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editorui/editoruiview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/editorui/editorui.css\";\nvar EditorUIView = class extends View {\n  /**\n   * Creates an instance of the editor UI view class.\n   *\n   * @param locale The locale instance.\n   */\n  constructor(locale) {\n    super(locale);\n    this.body = new BodyCollection(locale);\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.body.attachToDom();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this.body.detachFromDom();\n    return super.destroy();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editorui/boxed/boxededitoruiview.js\nvar BoxedEditorUIView = class extends EditorUIView {\n  /**\n   * Creates an instance of the boxed editor UI view class.\n   *\n   * @param locale The locale instance..\n   */\n  constructor(locale) {\n    super(locale);\n    this.top = this.createCollection();\n    this.main = this.createCollection();\n    this._voiceLabelView = this._createVoiceLabel();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-reset\",\n          \"ck-editor\",\n          \"ck-rounded-corners\"\n        ],\n        role: \"application\",\n        dir: locale.uiLanguageDirection,\n        lang: locale.uiLanguage,\n        \"aria-labelledby\": this._voiceLabelView.id\n      },\n      children: [\n        this._voiceLabelView,\n        {\n          tag: \"div\",\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-editor__top\",\n              \"ck-reset_all\"\n            ],\n            role: \"presentation\"\n          },\n          children: this.top\n        },\n        {\n          tag: \"div\",\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-editor__main\"\n            ],\n            role: \"presentation\"\n          },\n          children: this.main\n        }\n      ]\n    });\n  }\n  /**\n   * Creates a voice label view instance.\n   */\n  _createVoiceLabel() {\n    const t = this.t;\n    const voiceLabel = new LabelView();\n    voiceLabel.text = t(\"Rich Text Editor\");\n    voiceLabel.extendTemplate({\n      attributes: {\n        class: \"ck-voice-label\"\n      }\n    });\n    return voiceLabel;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editableui/editableuiview.js\nvar EditableUIView = class extends View {\n  /**\n   * Creates an instance of EditableUIView class.\n   *\n   * @param locale The locale instance.\n   * @param editingView The editing view instance the editable is related to.\n   * @param editableElement The editable element. If not specified, this view\n   * should create it. Otherwise, the existing element should be used.\n   */\n  constructor(locale, editingView, editableElement) {\n    super(locale);\n    this.name = null;\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-content\",\n          \"ck-editor__editable\",\n          \"ck-rounded-corners\"\n        ],\n        lang: locale.contentLanguage,\n        dir: locale.contentLanguageDirection\n      }\n    });\n    this.set(\"isFocused\", false);\n    this._editableElement = editableElement;\n    this._hasExternalElement = !!this._editableElement;\n    this._editingView = editingView;\n  }\n  /**\n   * Renders the view by either applying the {@link #template} to the existing\n   * {@link module:ui/editableui/editableuiview~EditableUIView#_editableElement} or assigning {@link #element}\n   * as {@link module:ui/editableui/editableuiview~EditableUIView#_editableElement}.\n   */\n  render() {\n    super.render();\n    if (this._hasExternalElement) {\n      this.template.apply(this.element = this._editableElement);\n    } else {\n      this._editableElement = this.element;\n    }\n    this.on(\"change:isFocused\", () => this._updateIsFocusedClasses());\n    this._updateIsFocusedClasses();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    if (this._hasExternalElement) {\n      this.template.revert(this._editableElement);\n    }\n    super.destroy();\n  }\n  /**\n   * Whether an external {@link #_editableElement} was passed into the constructor, which also means\n   * the view will not render its {@link #template}.\n   */\n  get hasExternalElement() {\n    return this._hasExternalElement;\n  }\n  /**\n   * Updates the `ck-focused` and `ck-blurred` CSS classes on the {@link #element} according to\n   * the {@link #isFocused} property value using the {@link #_editingView editing view} API.\n   */\n  _updateIsFocusedClasses() {\n    const editingView = this._editingView;\n    if (editingView.isRenderingInProgress) {\n      updateAfterRender(this);\n    } else {\n      update(this);\n    }\n    function update(view) {\n      editingView.change((writer) => {\n        const viewRoot = editingView.document.getRoot(view.name);\n        writer.addClass(view.isFocused ? \"ck-focused\" : \"ck-blurred\", viewRoot);\n        writer.removeClass(view.isFocused ? \"ck-blurred\" : \"ck-focused\", viewRoot);\n      });\n    }\n    function updateAfterRender(view) {\n      editingView.once(\"change:isRenderingInProgress\", (evt, name, value) => {\n        if (!value) {\n          update(view);\n        } else {\n          updateAfterRender(view);\n        }\n      });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview.js\nvar InlineEditableUIView = class extends EditableUIView {\n  /**\n   * Creates an instance of the InlineEditableUIView class.\n   *\n   * @param locale The locale instance.\n   * @param editingView The editing view instance the editable is related to.\n   * @param editableElement The editable element. If not specified, the\n   * {@link module:ui/editableui/editableuiview~EditableUIView}\n   * will create it. Otherwise, the existing element will be used.\n   * @param options Additional configuration of the view.\n   * @param options.label A function that gets called with the instance of this view as an argument\n   * and should return a string that represents the label of the editable for assistive technologies. If not provided,\n   * a default label generator is used.\n   */\n  constructor(locale, editingView, editableElement, options = {}) {\n    super(locale, editingView, editableElement);\n    const t = locale.t;\n    this.extendTemplate({\n      attributes: {\n        role: \"textbox\",\n        class: \"ck-editor__editable_inline\"\n      }\n    });\n    this._generateLabel = options.label || (() => t(\"Editor editing area: %0\", this.name));\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    const editingView = this._editingView;\n    editingView.change((writer) => {\n      const viewRoot = editingView.document.getRoot(this.name);\n      writer.setAttribute(\"aria-label\", this._generateLabel(this), viewRoot);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/notification/notification.js\nvar Notification = class extends ContextPlugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Notification\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this.on(\"show:warning\", (evt, data) => {\n      window.alert(data.message);\n    }, { priority: \"lowest\" });\n  }\n  /**\n   * Shows a success notification.\n   *\n   * By default, it fires the {@link #event:show:success `show:success` event} with the given `data`. The event namespace can be extended\n   * using the `data.namespace` option. For example:\n   *\n   * ```ts\n   * showSuccess( 'Image is uploaded.', {\n   * \tnamespace: 'upload:image'\n   * } );\n   * ```\n   *\n   * will fire the `show:success:upload:image` event.\n   *\n   * You can provide the title of the notification:\n   *\n   * ```ts\n   * showSuccess( 'Image is uploaded.', {\n   * \ttitle: 'Image upload success'\n   * } );\n   * ```\n   *\n   * @param message The content of the notification.\n   * @param data Additional data.\n   * @param data.namespace Additional event namespace.\n   * @param data.title The title of the notification.\n   */\n  showSuccess(message, data = {}) {\n    this._showNotification({\n      message,\n      type: \"success\",\n      namespace: data.namespace,\n      title: data.title\n    });\n  }\n  /**\n   * Shows an information notification.\n   *\n   * By default, it fires the {@link #event:show:info `show:info` event} with the given `data`. The event namespace can be extended\n   * using the `data.namespace` option. For example:\n   *\n   * ```ts\n   * showInfo( 'Editor is offline.', {\n   * \tnamespace: 'editor:status'\n   * } );\n   * ```\n   *\n   * will fire the `show:info:editor:status` event.\n   *\n   * You can provide the title of the notification:\n   *\n   * ```ts\n   * showInfo( 'Editor is offline.', {\n   * \ttitle: 'Network information'\n   * } );\n   * ```\n   *\n   * @param message The content of the notification.\n   * @param data Additional data.\n   * @param data.namespace Additional event namespace.\n   * @param data.title The title of the notification.\n   */\n  showInfo(message, data = {}) {\n    this._showNotification({\n      message,\n      type: \"info\",\n      namespace: data.namespace,\n      title: data.title\n    });\n  }\n  /**\n   * Shows a warning notification.\n   *\n   * By default, it fires the {@link #event:show:warning `show:warning` event}\n   * with the given `data`. The event namespace can be extended using the `data.namespace` option. For example:\n   *\n   * ```ts\n   * showWarning( 'Image upload error.', {\n   * \tnamespace: 'upload:image'\n   * } );\n   * ```\n   *\n   * will fire the `show:warning:upload:image` event.\n   *\n   * You can provide the title of the notification:\n   *\n   * ```ts\n   * showWarning( 'Image upload error.', {\n   * \ttitle: 'Upload failed'\n   * } );\n   * ```\n   *\n   * Note that each unhandled and not stopped `warning` notification will be displayed as a system alert.\n   * The plugin responsible for displaying warnings should `stop()` the event to prevent displaying it as an alert:\n   *\n   * ```ts\n   * notifications.on( 'show:warning', ( evt, data ) => {\n   * \t// Do something with the data.\n   *\n   * \t// Stop this event to prevent displaying it as an alert.\n   * \tevt.stop();\n   * } );\n   * ```\n   *\n   * You can attach many listeners to the same event and `stop()` this event in a listener with a low priority:\n   *\n   * ```ts\n   * notifications.on( 'show:warning', ( evt, data ) => {\n   * \t// Show the warning in the UI, but do not stop it.\n   * } );\n   *\n   * notifications.on( 'show:warning', ( evt, data ) => {\n   * \t// Log the warning to some error tracker.\n   *\n   * \t// Stop this event to prevent displaying it as an alert.\n   * \tevt.stop();\n   * }, { priority: 'low' } );\n   * ```\n   *\n   * @param message The content of the notification.\n   * @param data Additional data.\n   * @param data.namespace Additional event namespace.\n   * @param data.title The title of the notification.\n   */\n  showWarning(message, data = {}) {\n    this._showNotification({\n      message,\n      type: \"warning\",\n      namespace: data.namespace,\n      title: data.title\n    });\n  }\n  /**\n   * Fires the `show` event with the specified type, namespace and message.\n   *\n   * @param data The message data.\n   * @param data.message The content of the notification.\n   * @param data.type The type of the message.\n   * @param data.namespace Additional event namespace.\n   * @param data.title The title of the notification.\n   */\n  _showNotification(data) {\n    const event = data.namespace ? `show:${data.type}:${data.namespace}` : `show:${data.type}`;\n    this.fire(event, {\n      message: data.message,\n      type: data.type,\n      title: data.title || \"\"\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/model.js\nvar Model = class extends ObservableMixin() {\n  /**\n   * Creates a new Model instance.\n   *\n   * @param attributes The model state attributes to be defined during the instance creation.\n   * @param properties The (out of state) properties to be appended to the instance during creation.\n   */\n  constructor(attributes, properties) {\n    super();\n    if (properties) {\n      assignIn_default(this, properties);\n    }\n    if (attributes) {\n      this.set(attributes);\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/panel/balloon/contextualballoon.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/balloonrotator.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/fakepanel.css\";\nvar toPx3 = toUnit(\"px\");\nvar ContextualBalloon = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ContextualBalloon\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._viewToStack = /* @__PURE__ */ new Map();\n    this._idToStack = /* @__PURE__ */ new Map();\n    this._view = null;\n    this._rotatorView = null;\n    this._fakePanelsView = null;\n    this.positionLimiter = () => {\n      const view = this.editor.editing.view;\n      const viewDocument = view.document;\n      const editableElement = viewDocument.selection.editableElement;\n      if (editableElement) {\n        return view.domConverter.mapViewToDom(editableElement.root);\n      }\n      return null;\n    };\n    this.set(\"visibleView\", null);\n    this.set(\"_numberOfStacks\", 0);\n    this.set(\"_singleViewMode\", false);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    if (this._view) {\n      this._view.destroy();\n    }\n    if (this._rotatorView) {\n      this._rotatorView.destroy();\n    }\n    if (this._fakePanelsView) {\n      this._fakePanelsView.destroy();\n    }\n  }\n  /**\n   * The common balloon panel view.\n   */\n  get view() {\n    if (!this._view) {\n      this._createPanelView();\n    }\n    return this._view;\n  }\n  /**\n   * Returns `true` when the given view is in one of the stacks. Otherwise returns `false`.\n   */\n  hasView(view) {\n    return Array.from(this._viewToStack.keys()).includes(view);\n  }\n  /**\n   * Adds a new view to the stack and makes it visible if the current stack is visible\n   * or it is the first view in the balloon.\n   *\n   * @param data The configuration of the view.\n   * @param data.stackId The ID of the stack that the view is added to. Defaults to `'main'`.\n   * @param data.view The content of the balloon.\n   * @param data.position Positioning options.\n   * @param data.balloonClassName An additional CSS class added to the {@link #view balloon} when visible.\n   * @param data.withArrow Whether the {@link #view balloon} should be rendered with an arrow. Defaults to `true`.\n   * @param data.singleViewMode Whether the view should be the only visible view even if other stacks were added. Defaults to `false`.\n   */\n  add(data) {\n    if (!this._view) {\n      this._createPanelView();\n    }\n    if (this.hasView(data.view)) {\n      throw new CKEditorError(\"contextualballoon-add-view-exist\", [this, data]);\n    }\n    const stackId = data.stackId || \"main\";\n    if (!this._idToStack.has(stackId)) {\n      this._idToStack.set(stackId, /* @__PURE__ */ new Map([[data.view, data]]));\n      this._viewToStack.set(data.view, this._idToStack.get(stackId));\n      this._numberOfStacks = this._idToStack.size;\n      if (!this._visibleStack || data.singleViewMode) {\n        this.showStack(stackId);\n      }\n      return;\n    }\n    const stack = this._idToStack.get(stackId);\n    if (data.singleViewMode) {\n      this.showStack(stackId);\n    }\n    stack.set(data.view, data);\n    this._viewToStack.set(data.view, stack);\n    if (stack === this._visibleStack) {\n      this._showView(data);\n    }\n  }\n  /**\n   * Removes the given view from the stack. If the removed view was visible,\n   * the view preceding it in the stack will become visible instead.\n   * When there is no view in the stack, the next stack will be displayed.\n   * When there are no more stacks, the balloon will hide.\n   *\n   * @param view A view to be removed from the balloon.\n   */\n  remove(view) {\n    if (!this.hasView(view)) {\n      throw new CKEditorError(\"contextualballoon-remove-view-not-exist\", [this, view]);\n    }\n    const stack = this._viewToStack.get(view);\n    if (this._singleViewMode && this.visibleView === view) {\n      this._singleViewMode = false;\n    }\n    if (this.visibleView === view) {\n      if (stack.size === 1) {\n        if (this._idToStack.size > 1) {\n          this._showNextStack();\n        } else {\n          this.view.hide();\n          this.visibleView = null;\n          this._rotatorView.hideView();\n        }\n      } else {\n        this._showView(Array.from(stack.values())[stack.size - 2]);\n      }\n    }\n    if (stack.size === 1) {\n      this._idToStack.delete(this._getStackId(stack));\n      this._numberOfStacks = this._idToStack.size;\n    } else {\n      stack.delete(view);\n    }\n    this._viewToStack.delete(view);\n  }\n  /**\n   * Updates the position of the balloon using the position data of the first visible view in the stack.\n   * When new position data is given, the position data of the currently visible view will be updated.\n   *\n   * @param position Position options.\n   */\n  updatePosition(position) {\n    if (position) {\n      this._visibleStack.get(this.visibleView).position = position;\n    }\n    this.view.pin(this._getBalloonPosition());\n    this._fakePanelsView.updatePosition();\n  }\n  /**\n   * Shows the last view from the stack of a given ID.\n   */\n  showStack(id) {\n    this.visibleStack = id;\n    const stack = this._idToStack.get(id);\n    if (!stack) {\n      throw new CKEditorError(\"contextualballoon-showstack-stack-not-exist\", this);\n    }\n    if (this._visibleStack === stack) {\n      return;\n    }\n    this._showView(Array.from(stack.values()).pop());\n  }\n  /**\n   * Initializes view instances.\n   */\n  _createPanelView() {\n    this._view = new balloonpanelview_default(this.editor.locale);\n    this.editor.ui.view.body.add(this._view);\n    this.editor.ui.focusTracker.add(this._view.element);\n    this._rotatorView = this._createRotatorView();\n    this._fakePanelsView = this._createFakePanelsView();\n  }\n  /**\n   * Returns the stack of the currently visible view.\n   */\n  get _visibleStack() {\n    return this._viewToStack.get(this.visibleView);\n  }\n  /**\n   * Returns the ID of the given stack.\n   */\n  _getStackId(stack) {\n    const entry = Array.from(this._idToStack.entries()).find((entry2) => entry2[1] === stack);\n    return entry[0];\n  }\n  /**\n   * Shows the last view from the next stack.\n   */\n  _showNextStack() {\n    const stacks = Array.from(this._idToStack.values());\n    let nextIndex = stacks.indexOf(this._visibleStack) + 1;\n    if (!stacks[nextIndex]) {\n      nextIndex = 0;\n    }\n    this.showStack(this._getStackId(stacks[nextIndex]));\n  }\n  /**\n   * Shows the last view from the previous stack.\n   */\n  _showPrevStack() {\n    const stacks = Array.from(this._idToStack.values());\n    let nextIndex = stacks.indexOf(this._visibleStack) - 1;\n    if (!stacks[nextIndex]) {\n      nextIndex = stacks.length - 1;\n    }\n    this.showStack(this._getStackId(stacks[nextIndex]));\n  }\n  /**\n   * Creates a rotator view.\n   */\n  _createRotatorView() {\n    const view = new RotatorView(this.editor.locale);\n    const t = this.editor.locale.t;\n    this.view.content.add(view);\n    view.bind(\"isNavigationVisible\").to(this, \"_numberOfStacks\", this, \"_singleViewMode\", (value, isSingleViewMode) => {\n      return !isSingleViewMode && value > 1;\n    });\n    view.on(\"change:isNavigationVisible\", () => this.updatePosition(), { priority: \"low\" });\n    view.bind(\"counter\").to(this, \"visibleView\", this, \"_numberOfStacks\", (visibleView, numberOfStacks) => {\n      if (numberOfStacks < 2) {\n        return \"\";\n      }\n      const current = Array.from(this._idToStack.values()).indexOf(this._visibleStack) + 1;\n      return t(\"%0 of %1\", [current, numberOfStacks]);\n    });\n    view.buttonNextView.on(\"execute\", () => {\n      if (view.focusTracker.isFocused) {\n        this.editor.editing.view.focus();\n      }\n      this._showNextStack();\n    });\n    view.buttonPrevView.on(\"execute\", () => {\n      if (view.focusTracker.isFocused) {\n        this.editor.editing.view.focus();\n      }\n      this._showPrevStack();\n    });\n    return view;\n  }\n  /**\n   * Creates a fake panels view.\n   */\n  _createFakePanelsView() {\n    const view = new FakePanelsView(this.editor.locale, this.view);\n    view.bind(\"numberOfPanels\").to(this, \"_numberOfStacks\", this, \"_singleViewMode\", (number, isSingleViewMode) => {\n      const showPanels = !isSingleViewMode && number >= 2;\n      return showPanels ? Math.min(number - 1, 2) : 0;\n    });\n    view.listenTo(this.view, \"change:top\", () => view.updatePosition());\n    view.listenTo(this.view, \"change:left\", () => view.updatePosition());\n    this.editor.ui.view.body.add(view);\n    return view;\n  }\n  /**\n   * Sets the view as the content of the balloon and attaches the balloon using position\n   * options of the first view.\n   *\n   * @param data Configuration.\n   * @param data.view The view to show in the balloon.\n   * @param data.balloonClassName Additional class name which will be added to the {@link #view balloon}.\n   * @param data.withArrow Whether the {@link #view balloon} should be rendered with an arrow.\n   */\n  _showView({ view, balloonClassName = \"\", withArrow = true, singleViewMode = false }) {\n    this.view.class = balloonClassName;\n    this.view.withArrow = withArrow;\n    this._rotatorView.showView(view);\n    this.visibleView = view;\n    this.view.pin(this._getBalloonPosition());\n    this._fakePanelsView.updatePosition();\n    if (singleViewMode) {\n      this._singleViewMode = true;\n    }\n  }\n  /**\n   * Returns position options of the last view in the stack.\n   * This keeps the balloon in the same position when the view is changed.\n   */\n  _getBalloonPosition() {\n    let position = Array.from(this._visibleStack.values()).pop().position;\n    if (position) {\n      if (!position.limiter) {\n        position = Object.assign({}, position, {\n          limiter: this.positionLimiter\n        });\n      }\n      position = Object.assign({}, position, {\n        viewportOffsetConfig: this.editor.ui.viewportOffset\n      });\n    }\n    return position;\n  }\n};\nvar RotatorView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const t = locale.t;\n    const bind = this.bindTemplate;\n    this.set(\"isNavigationVisible\", true);\n    this.focusTracker = new FocusTracker();\n    this.buttonPrevView = this._createButtonView(t(\"Previous\"), icons.previousArrow);\n    this.buttonNextView = this._createButtonView(t(\"Next\"), icons.nextArrow);\n    this.content = this.createCollection();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-balloon-rotator\"\n        ],\n        \"z-index\": \"-1\"\n      },\n      children: [\n        {\n          tag: \"div\",\n          attributes: {\n            class: [\n              \"ck-balloon-rotator__navigation\",\n              bind.to(\"isNavigationVisible\", (value) => value ? \"\" : \"ck-hidden\")\n            ]\n          },\n          children: [\n            this.buttonPrevView,\n            {\n              tag: \"span\",\n              attributes: {\n                class: [\n                  \"ck-balloon-rotator__counter\"\n                ]\n              },\n              children: [\n                {\n                  text: bind.to(\"counter\")\n                }\n              ]\n            },\n            this.buttonNextView\n          ]\n        },\n        {\n          tag: \"div\",\n          attributes: {\n            class: \"ck-balloon-rotator__content\"\n          },\n          children: this.content\n        }\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.focusTracker.add(this.element);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n  }\n  /**\n   * Shows a given view.\n   *\n   * @param view The view to show.\n   */\n  showView(view) {\n    this.hideView();\n    this.content.add(view);\n  }\n  /**\n   * Hides the currently displayed view.\n   */\n  hideView() {\n    this.content.clear();\n  }\n  /**\n   * Creates a navigation button view.\n   *\n   * @param label The button label.\n   * @param icon The button icon.\n   */\n  _createButtonView(label, icon) {\n    const view = new ButtonView(this.locale);\n    view.set({\n      label,\n      icon,\n      tooltip: true\n    });\n    return view;\n  }\n};\nvar FakePanelsView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale, balloonPanelView) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"top\", 0);\n    this.set(\"left\", 0);\n    this.set(\"height\", 0);\n    this.set(\"width\", 0);\n    this.set(\"numberOfPanels\", 0);\n    this.content = this.createCollection();\n    this._balloonPanelView = balloonPanelView;\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck-fake-panel\",\n          bind.to(\"numberOfPanels\", (number) => number ? \"\" : \"ck-hidden\")\n        ],\n        style: {\n          top: bind.to(\"top\", toPx3),\n          left: bind.to(\"left\", toPx3),\n          width: bind.to(\"width\", toPx3),\n          height: bind.to(\"height\", toPx3)\n        }\n      },\n      children: this.content\n    });\n    this.on(\"change:numberOfPanels\", (evt, name, next, prev) => {\n      if (next > prev) {\n        this._addPanels(next - prev);\n      } else {\n        this._removePanels(prev - next);\n      }\n      this.updatePosition();\n    });\n  }\n  _addPanels(number) {\n    while (number--) {\n      const view = new View();\n      view.setTemplate({ tag: \"div\" });\n      this.content.add(view);\n      this.registerChild(view);\n    }\n  }\n  _removePanels(number) {\n    while (number--) {\n      const view = this.content.last;\n      this.content.remove(view);\n      this.deregisterChild(view);\n      view.destroy();\n    }\n  }\n  /**\n   * Updates coordinates of fake panels.\n   */\n  updatePosition() {\n    if (this.numberOfPanels) {\n      const { top, left } = this._balloonPanelView;\n      const { width, height } = new Rect(this._balloonPanelView.element);\n      Object.assign(this, { top, left, width, height });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/panel/sticky/stickypanelview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/panel/stickypanel.css\";\nvar toPx4 = toUnit(\"px\");\nvar StickyPanelView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"isActive\", false);\n    this.set(\"isSticky\", false);\n    this.set(\"limiterElement\", null);\n    this.set(\"limiterBottomOffset\", 50);\n    this.set(\"viewportTopOffset\", 0);\n    this.set(\"_marginLeft\", null);\n    this.set(\"_isStickyToTheBottomOfLimiter\", false);\n    this.set(\"_stickyTopOffset\", null);\n    this.set(\"_stickyBottomOffset\", null);\n    this.content = this.createCollection();\n    this._contentPanelPlaceholder = new Template({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-sticky-panel__placeholder\"\n        ],\n        style: {\n          display: bind.to(\"isSticky\", (isSticky) => isSticky ? \"block\" : \"none\"),\n          height: bind.to(\"isSticky\", (isSticky) => {\n            return isSticky ? toPx4(this._contentPanelRect.height) : null;\n          })\n        }\n      }\n    }).render();\n    this.contentPanelElement = new Template({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-sticky-panel__content\",\n          // Toggle class of the panel when \"sticky\" state changes in the view.\n          bind.if(\"isSticky\", \"ck-sticky-panel__content_sticky\"),\n          bind.if(\"_isStickyToTheBottomOfLimiter\", \"ck-sticky-panel__content_sticky_bottom-limit\")\n        ],\n        style: {\n          width: bind.to(\"isSticky\", (isSticky) => {\n            return isSticky ? toPx4(this._contentPanelPlaceholder.getBoundingClientRect().width) : null;\n          }),\n          top: bind.to(\"_stickyTopOffset\", (value) => value ? toPx4(value) : value),\n          bottom: bind.to(\"_stickyBottomOffset\", (value) => value ? toPx4(value) : value),\n          marginLeft: bind.to(\"_marginLeft\")\n        }\n      },\n      children: this.content\n    }).render();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-sticky-panel\"\n        ]\n      },\n      children: [\n        this._contentPanelPlaceholder,\n        this.contentPanelElement\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.checkIfShouldBeSticky();\n    this.listenTo(global_default.document, \"scroll\", () => {\n      this.checkIfShouldBeSticky();\n    }, { useCapture: true });\n    this.listenTo(this, \"change:isActive\", () => {\n      this.checkIfShouldBeSticky();\n    });\n  }\n  /**\n   * Analyzes the environment to decide whether the panel should be sticky or not.\n   * Then handles the positioning of the panel.\n   */\n  checkIfShouldBeSticky() {\n    if (!this.limiterElement || !this.isActive) {\n      this._unstick();\n      return;\n    }\n    const limiterRect = new Rect(this.limiterElement);\n    let visibleLimiterRect = limiterRect.getVisible();\n    if (visibleLimiterRect) {\n      const windowRect = new Rect(global_default.window);\n      windowRect.top += this.viewportTopOffset;\n      windowRect.height -= this.viewportTopOffset;\n      visibleLimiterRect = visibleLimiterRect.getIntersection(windowRect);\n    }\n    if (visibleLimiterRect && limiterRect.top < visibleLimiterRect.top) {\n      const visibleLimiterTop = visibleLimiterRect.top;\n      if (visibleLimiterTop + this._contentPanelRect.height + this.limiterBottomOffset > visibleLimiterRect.bottom) {\n        const stickyBottomOffset = Math.max(limiterRect.bottom - visibleLimiterRect.bottom, 0) + this.limiterBottomOffset;\n        if (limiterRect.bottom - stickyBottomOffset > limiterRect.top + this._contentPanelRect.height) {\n          this._stickToBottomOfLimiter(stickyBottomOffset);\n        } else {\n          this._unstick();\n        }\n      } else {\n        if (this._contentPanelRect.height + this.limiterBottomOffset < limiterRect.height) {\n          this._stickToTopOfAncestors(visibleLimiterTop);\n        } else {\n          this._unstick();\n        }\n      }\n    } else {\n      this._unstick();\n    }\n  }\n  /**\n   * Sticks the panel at the given CSS `top` offset.\n   *\n   * @private\n   * @param topOffset\n   */\n  _stickToTopOfAncestors(topOffset) {\n    this.isSticky = true;\n    this._isStickyToTheBottomOfLimiter = false;\n    this._stickyTopOffset = topOffset;\n    this._stickyBottomOffset = null;\n    this._marginLeft = toPx4(-global_default.window.scrollX);\n  }\n  /**\n   * Sticks the panel at the bottom of the limiter with a given CSS `bottom` offset.\n   *\n   * @private\n   * @param stickyBottomOffset\n   */\n  _stickToBottomOfLimiter(stickyBottomOffset) {\n    this.isSticky = true;\n    this._isStickyToTheBottomOfLimiter = true;\n    this._stickyTopOffset = null;\n    this._stickyBottomOffset = stickyBottomOffset;\n    this._marginLeft = toPx4(-global_default.window.scrollX);\n  }\n  /**\n   * Unsticks the panel putting it back to its original position.\n   *\n   * @private\n   */\n  _unstick() {\n    this.isSticky = false;\n    this._isStickyToTheBottomOfLimiter = false;\n    this._stickyTopOffset = null;\n    this._stickyBottomOffset = null;\n    this._marginLeft = null;\n  }\n  /**\n   * Returns the bounding rect of the {@link #contentPanelElement}.\n   *\n   * @private\n   */\n  get _contentPanelRect() {\n    return new Rect(this.contentPanelElement);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/submithandler.js\nfunction submitHandler({ view }) {\n  view.listenTo(view.element, \"submit\", (evt, domEvt) => {\n    domEvt.preventDefault();\n    view.fire(\"submit\");\n  }, { useCapture: true });\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/bindings/addkeyboardhandlingforgrid.js\nfunction addKeyboardHandlingForGrid({ keystrokeHandler, focusTracker, gridItems, numberOfColumns, uiLanguageDirection }) {\n  const getNumberOfColumns = typeof numberOfColumns === \"number\" ? () => numberOfColumns : numberOfColumns;\n  keystrokeHandler.set(\"arrowright\", getGridItemFocuser((focusedElementIndex, gridItems2) => {\n    return uiLanguageDirection === \"rtl\" ? getLeftElementIndex(focusedElementIndex, gridItems2.length) : getRightElementIndex(focusedElementIndex, gridItems2.length);\n  }));\n  keystrokeHandler.set(\"arrowleft\", getGridItemFocuser((focusedElementIndex, gridItems2) => {\n    return uiLanguageDirection === \"rtl\" ? getRightElementIndex(focusedElementIndex, gridItems2.length) : getLeftElementIndex(focusedElementIndex, gridItems2.length);\n  }));\n  keystrokeHandler.set(\"arrowup\", getGridItemFocuser((focusedElementIndex, gridItems2) => {\n    let nextIndex = focusedElementIndex - getNumberOfColumns();\n    if (nextIndex < 0) {\n      nextIndex = focusedElementIndex + getNumberOfColumns() * Math.floor(gridItems2.length / getNumberOfColumns());\n      if (nextIndex > gridItems2.length - 1) {\n        nextIndex -= getNumberOfColumns();\n      }\n    }\n    return nextIndex;\n  }));\n  keystrokeHandler.set(\"arrowdown\", getGridItemFocuser((focusedElementIndex, gridItems2) => {\n    let nextIndex = focusedElementIndex + getNumberOfColumns();\n    if (nextIndex > gridItems2.length - 1) {\n      nextIndex = focusedElementIndex % getNumberOfColumns();\n    }\n    return nextIndex;\n  }));\n  function getGridItemFocuser(getIndexToFocus) {\n    return (evt) => {\n      const focusedElement = gridItems.find((item) => item.element === focusTracker.focusedElement);\n      const focusedElementIndex = gridItems.getIndex(focusedElement);\n      const nextIndexToFocus = getIndexToFocus(focusedElementIndex, gridItems);\n      gridItems.get(nextIndexToFocus).focus();\n      evt.stopPropagation();\n      evt.preventDefault();\n    };\n  }\n  function getRightElementIndex(elementIndex, collectionLength) {\n    if (elementIndex === collectionLength - 1) {\n      return 0;\n    } else {\n      return elementIndex + 1;\n    }\n  }\n  function getLeftElementIndex(elementIndex, collectionLength) {\n    if (elementIndex === 0) {\n      return collectionLength - 1;\n    } else {\n      return elementIndex - 1;\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/collapsible/collapsibleview.js\nimport dropdownArrowIcon3 from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/icons/dropdown-arrow.svg\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/collapsible/collapsible.css\";\nvar CollapsibleView = class extends View {\n  /**\n   * Creates an instance of the collapsible view.\n   *\n   * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n   * @param childViews An optional array of initial child views to be inserted into the collapsible.\n   */\n  constructor(locale, childViews) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"isCollapsed\", false);\n    this.set(\"label\", \"\");\n    this.buttonView = this._createButtonView();\n    this.children = this.createCollection();\n    this.set(\"_collapsibleAriaLabelUid\", void 0);\n    if (childViews) {\n      this.children.addMany(childViews);\n    }\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-collapsible\",\n          bind.if(\"isCollapsed\", \"ck-collapsible_collapsed\")\n        ]\n      },\n      children: [\n        this.buttonView,\n        {\n          tag: \"div\",\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-collapsible__children\"\n            ],\n            role: \"region\",\n            hidden: bind.if(\"isCollapsed\", \"hidden\"),\n            \"aria-labelledby\": bind.to(\"_collapsibleAriaLabelUid\")\n          },\n          children: this.children\n        }\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this._collapsibleAriaLabelUid = this.buttonView.labelView.element.id;\n  }\n  /**\n   * Focuses the first focusable.\n   */\n  focus() {\n    this.buttonView.focus();\n  }\n  /**\n   * Creates the main {@link #buttonView} of the collapsible.\n   */\n  _createButtonView() {\n    const buttonView = new ButtonView(this.locale);\n    const bind = buttonView.bindTemplate;\n    buttonView.set({\n      withText: true,\n      icon: dropdownArrowIcon3\n    });\n    buttonView.extendTemplate({\n      attributes: {\n        \"aria-expanded\": bind.to(\"isOn\", (value) => String(value))\n      }\n    });\n    buttonView.bind(\"label\").to(this);\n    buttonView.bind(\"isOn\").to(this, \"isCollapsed\", (isCollapsed) => !isCollapsed);\n    buttonView.on(\"execute\", () => {\n      this.isCollapsed = !this.isCollapsed;\n    });\n    return buttonView;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/utils.js\nfunction getLocalizedColorOptions(locale, options) {\n  const t = locale.t;\n  const localizedColorNames = {\n    Black: t(\"Black\"),\n    \"Dim grey\": t(\"Dim grey\"),\n    Grey: t(\"Grey\"),\n    \"Light grey\": t(\"Light grey\"),\n    White: t(\"White\"),\n    Red: t(\"Red\"),\n    Orange: t(\"Orange\"),\n    Yellow: t(\"Yellow\"),\n    \"Light green\": t(\"Light green\"),\n    Green: t(\"Green\"),\n    Aquamarine: t(\"Aquamarine\"),\n    Turquoise: t(\"Turquoise\"),\n    \"Light blue\": t(\"Light blue\"),\n    Blue: t(\"Blue\"),\n    Purple: t(\"Purple\")\n  };\n  return options.map((colorOption) => {\n    const label = localizedColorNames[colorOption.label];\n    if (label && label != colorOption.label) {\n      colorOption.label = label;\n    }\n    return colorOption;\n  });\n}\nfunction normalizeColorOptions(options) {\n  return options.map(normalizeSingleColorDefinition).filter((option) => !!option);\n}\nfunction normalizeSingleColorDefinition(color) {\n  if (typeof color === \"string\") {\n    return {\n      model: color,\n      label: color,\n      hasBorder: false,\n      view: {\n        name: \"span\",\n        styles: {\n          color\n        }\n      }\n    };\n  } else {\n    return {\n      model: color.color,\n      label: color.label || color.color,\n      hasBorder: color.hasBorder === void 0 ? false : color.hasBorder,\n      view: {\n        name: \"span\",\n        styles: {\n          color: `${color.color}`\n        }\n      }\n    };\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/colortileview.js\nimport checkIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/icons/color-tile-check.svg\";\nvar ColorTileView = class extends ButtonView {\n  constructor(locale) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"color\", void 0);\n    this.set(\"hasBorder\", false);\n    this.icon = checkIcon;\n    this.extendTemplate({\n      attributes: {\n        style: {\n          backgroundColor: bind.to(\"color\")\n        },\n        class: [\n          \"ck\",\n          \"ck-color-grid__tile\",\n          bind.if(\"hasBorder\", \"ck-color-selector__color-tile_bordered\")\n        ]\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.iconView.fillColor = \"hsl(0, 0%, 100%)\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorgrid/colorgridview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/colorgrid/colorgrid.css\";\nvar ColorGridView = class extends View {\n  /**\n   * Creates an instance of a color grid containing {@link module:ui/colorgrid/colortileview~ColorTileView tiles}.\n   *\n   * @fires execute\n   * @param locale The localization services instance.\n   * @param options Component configuration\n   * @param options.colorDefinitions Array with definitions\n   * required to create the {@link module:ui/colorgrid/colortileview~ColorTileView tiles}.\n   * @param options.columns A number of columns to display the tiles.\n   */\n  constructor(locale, options) {\n    super(locale);\n    const colorDefinitions = options && options.colorDefinitions ? options.colorDefinitions : [];\n    this.columns = options && options.columns ? options.columns : 5;\n    const viewStyleAttribute = {\n      gridTemplateColumns: `repeat( ${this.columns}, 1fr)`\n    };\n    this.set(\"selectedColor\", void 0);\n    this.items = this.createCollection();\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this.items.on(\"add\", (evt, colorTile) => {\n      colorTile.isOn = colorTile.color === this.selectedColor;\n    });\n    colorDefinitions.forEach((color) => {\n      const colorTile = new ColorTileView();\n      colorTile.set({\n        color: color.color,\n        label: color.label,\n        tooltip: true,\n        hasBorder: color.options.hasBorder\n      });\n      colorTile.on(\"execute\", () => {\n        this.fire(\"execute\", {\n          value: color.color,\n          hasBorder: color.options.hasBorder,\n          label: color.label\n        });\n      });\n      this.items.add(colorTile);\n    });\n    this.setTemplate({\n      tag: \"div\",\n      children: this.items,\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-color-grid\"\n        ],\n        style: viewStyleAttribute\n      }\n    });\n    this.on(\"change:selectedColor\", (evt, name, selectedColor) => {\n      for (const item of this.items) {\n        item.isOn = item.color === selectedColor;\n      }\n    });\n  }\n  /**\n   * Focuses the first focusable in {@link #items}.\n   */\n  focus() {\n    if (this.items.length) {\n      this.items.first.focus();\n    }\n  }\n  /**\n   * Focuses the last focusable in {@link #items}.\n   */\n  focusLast() {\n    if (this.items.length) {\n      this.items.last.focus();\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    for (const item of this.items) {\n      this.focusTracker.add(item.element);\n    }\n    this.items.on(\"add\", (evt, item) => {\n      this.focusTracker.add(item.element);\n    });\n    this.items.on(\"remove\", (evt, item) => {\n      this.focusTracker.remove(item.element);\n    });\n    this.keystrokes.listenTo(this.element);\n    addKeyboardHandlingForGrid({\n      keystrokeHandler: this.keystrokes,\n      focusTracker: this.focusTracker,\n      gridItems: this.items,\n      numberOfColumns: this.columns,\n      uiLanguageDirection: this.locale && this.locale.uiLanguageDirection\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n};\n\n// node_modules/color-parse/index.mjs\nvar import_color_name = __toESM(require_color_name(), 1);\nvar color_parse_default = parse;\nvar baseHues = {\n  red: 0,\n  orange: 60,\n  yellow: 120,\n  green: 180,\n  blue: 240,\n  purple: 300\n};\nfunction parse(cstr) {\n  var m, parts = [], alpha = 1, space;\n  if (typeof cstr === \"string\") {\n    if (import_color_name.default[cstr]) {\n      parts = import_color_name.default[cstr].slice();\n      space = \"rgb\";\n    } else if (cstr === \"transparent\") {\n      alpha = 0;\n      space = \"rgb\";\n      parts = [0, 0, 0];\n    } else if (/^#[A-Fa-f0-9]+$/.test(cstr)) {\n      var base = cstr.slice(1);\n      var size = base.length;\n      var isShort = size <= 4;\n      alpha = 1;\n      if (isShort) {\n        parts = [\n          parseInt(base[0] + base[0], 16),\n          parseInt(base[1] + base[1], 16),\n          parseInt(base[2] + base[2], 16)\n        ];\n        if (size === 4) {\n          alpha = parseInt(base[3] + base[3], 16) / 255;\n        }\n      } else {\n        parts = [\n          parseInt(base[0] + base[1], 16),\n          parseInt(base[2] + base[3], 16),\n          parseInt(base[4] + base[5], 16)\n        ];\n        if (size === 8) {\n          alpha = parseInt(base[6] + base[7], 16) / 255;\n        }\n      }\n      if (!parts[0])\n        parts[0] = 0;\n      if (!parts[1])\n        parts[1] = 0;\n      if (!parts[2])\n        parts[2] = 0;\n      space = \"rgb\";\n    } else if (m = /^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\s*\\(([^\\)]*)\\)/.exec(cstr)) {\n      var name = m[1];\n      var isRGB = name === \"rgb\";\n      var base = name.replace(/a$/, \"\");\n      space = base;\n      var size = base === \"cmyk\" ? 4 : base === \"gray\" ? 1 : 3;\n      parts = m[2].trim().split(/\\s*[,\\/]\\s*|\\s+/).map(function(x, i) {\n        if (/%$/.test(x)) {\n          if (i === size)\n            return parseFloat(x) / 100;\n          if (base === \"rgb\")\n            return parseFloat(x) * 255 / 100;\n          return parseFloat(x);\n        } else if (base[i] === \"h\") {\n          if (/deg$/.test(x)) {\n            return parseFloat(x);\n          } else if (baseHues[x] !== void 0) {\n            return baseHues[x];\n          }\n        }\n        return parseFloat(x);\n      });\n      if (name === base)\n        parts.push(1);\n      alpha = isRGB ? 1 : parts[size] === void 0 ? 1 : parts[size];\n      parts = parts.slice(0, size);\n    } else if (cstr.length > 10 && /[0-9](?:\\s|\\/)/.test(cstr)) {\n      parts = cstr.match(/([0-9]+)/g).map(function(value) {\n        return parseFloat(value);\n      });\n      space = cstr.match(/([a-z])/ig).join(\"\").toLowerCase();\n    }\n  } else if (!isNaN(cstr)) {\n    space = \"rgb\";\n    parts = [cstr >>> 16, (cstr & 65280) >>> 8, cstr & 255];\n  } else if (Array.isArray(cstr) || cstr.length) {\n    parts = [cstr[0], cstr[1], cstr[2]];\n    space = \"rgb\";\n    alpha = cstr.length === 4 ? cstr[3] : 1;\n  } else if (cstr instanceof Object) {\n    if (cstr.r != null || cstr.red != null || cstr.R != null) {\n      space = \"rgb\";\n      parts = [\n        cstr.r || cstr.red || cstr.R || 0,\n        cstr.g || cstr.green || cstr.G || 0,\n        cstr.b || cstr.blue || cstr.B || 0\n      ];\n    } else {\n      space = \"hsl\";\n      parts = [\n        cstr.h || cstr.hue || cstr.H || 0,\n        cstr.s || cstr.saturation || cstr.S || 0,\n        cstr.l || cstr.lightness || cstr.L || cstr.b || cstr.brightness\n      ];\n    }\n    alpha = cstr.a || cstr.alpha || cstr.opacity || 1;\n    if (cstr.opacity != null)\n      alpha /= 100;\n  }\n  return {\n    space,\n    values: parts,\n    alpha\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorpicker/utils.js\nvar convert = __toESM(require_color_convert(), 1);\nfunction convertColor(color, outputFormat) {\n  if (!color) {\n    return \"\";\n  }\n  const colorObject = parseColorString(color);\n  if (!colorObject) {\n    return \"\";\n  }\n  if (colorObject.space === outputFormat) {\n    return color;\n  }\n  if (!canConvertParsedColor(colorObject)) {\n    return \"\";\n  }\n  const fromColorSpace = convert[colorObject.space];\n  const toColorSpace = fromColorSpace[outputFormat];\n  if (!toColorSpace) {\n    return \"\";\n  }\n  const convertedColorChannels = toColorSpace(colorObject.space === \"hex\" ? colorObject.hexValue : colorObject.values);\n  return formatColorOutput(convertedColorChannels, outputFormat);\n}\nfunction convertToHex(color) {\n  if (!color) {\n    return \"\";\n  }\n  const colorObject = parseColorString(color);\n  if (!colorObject) {\n    return \"#000\";\n  }\n  if (colorObject.space === \"hex\") {\n    return colorObject.hexValue;\n  }\n  return convertColor(color, \"hex\");\n}\nfunction formatColorOutput(values, format2) {\n  switch (format2) {\n    case \"hex\":\n      return `#${values}`;\n    case \"rgb\":\n      return `rgb( ${values[0]}, ${values[1]}, ${values[2]} )`;\n    case \"hsl\":\n      return `hsl( ${values[0]}, ${values[1]}%, ${values[2]}% )`;\n    case \"hwb\":\n      return `hwb( ${values[0]}, ${values[1]}, ${values[2]} )`;\n    case \"lab\":\n      return `lab( ${values[0]}% ${values[1]} ${values[2]} )`;\n    case \"lch\":\n      return `lch( ${values[0]}% ${values[1]} ${values[2]} )`;\n    default:\n      return \"\";\n  }\n}\nfunction parseColorString(colorString) {\n  if (colorString.startsWith(\"#\")) {\n    const parsedHex = color_parse_default(colorString);\n    return {\n      space: \"hex\",\n      values: parsedHex.values,\n      hexValue: colorString,\n      alpha: parsedHex.alpha\n    };\n  }\n  const parsed = color_parse_default(colorString);\n  if (!parsed.space) {\n    return null;\n  }\n  return parsed;\n}\nfunction canConvertParsedColor(parsedColor) {\n  return Object.keys(convert).includes(parsedColor.space);\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/labeledfield/labeledfieldview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/labeledfield/labeledfieldview.css\";\nvar LabeledFieldView = class extends View {\n  /**\n   * Creates an instance of the labeled field view class using a provided creator function\n   * that provides the view to be labeled.\n   *\n   * @param locale The locale instance.\n   * @param viewCreator A function that returns a {@link module:ui/view~View}\n   * that will be labeled. The following arguments are passed to the creator function:\n   *\n   * * an instance of the `LabeledFieldView` to allow binding observable properties,\n   * * an UID string that connects the {@link #labelView label} and the labeled field view in DOM,\n   * * an UID string that connects the {@link #statusView status} and the labeled field view in DOM.\n   */\n  constructor(locale, viewCreator) {\n    super(locale);\n    const viewUid = `ck-labeled-field-view-${uid()}`;\n    const statusUid = `ck-labeled-field-view-status-${uid()}`;\n    this.fieldView = viewCreator(this, viewUid, statusUid);\n    this.set(\"label\", void 0);\n    this.set(\"isEnabled\", true);\n    this.set(\"isEmpty\", true);\n    this.set(\"isFocused\", false);\n    this.set(\"errorText\", null);\n    this.set(\"infoText\", null);\n    this.set(\"class\", void 0);\n    this.set(\"placeholder\", void 0);\n    this.labelView = this._createLabelView(viewUid);\n    this.statusView = this._createStatusView(statusUid);\n    this.fieldWrapperChildren = this.createCollection([this.fieldView, this.labelView]);\n    this.bind(\"_statusText\").to(this, \"errorText\", this, \"infoText\", (errorText, infoText) => errorText || infoText);\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-labeled-field-view\",\n          bind.to(\"class\"),\n          bind.if(\"isEnabled\", \"ck-disabled\", (value) => !value),\n          bind.if(\"isEmpty\", \"ck-labeled-field-view_empty\"),\n          bind.if(\"isFocused\", \"ck-labeled-field-view_focused\"),\n          bind.if(\"placeholder\", \"ck-labeled-field-view_placeholder\"),\n          bind.if(\"errorText\", \"ck-error\")\n        ]\n      },\n      children: [\n        {\n          tag: \"div\",\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-labeled-field-view__input-wrapper\"\n            ]\n          },\n          children: this.fieldWrapperChildren\n        },\n        this.statusView\n      ]\n    });\n  }\n  /**\n   * Creates label view class instance and bind with view.\n   *\n   * @param id Unique id to set as labelView#for attribute.\n   */\n  _createLabelView(id) {\n    const labelView = new LabelView(this.locale);\n    labelView.for = id;\n    labelView.bind(\"text\").to(this, \"label\");\n    return labelView;\n  }\n  /**\n   * Creates the status view instance. It displays {@link #errorText} and {@link #infoText}\n   * next to the {@link #fieldView}. See {@link #_statusText}.\n   *\n   * @param statusUid Unique id of the status, shared with the {@link #fieldView view's}\n   * `aria-describedby` attribute.\n   */\n  _createStatusView(statusUid) {\n    const statusView = new View(this.locale);\n    const bind = this.bindTemplate;\n    statusView.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-labeled-field-view__status\",\n          bind.if(\"errorText\", \"ck-labeled-field-view__status_error\"),\n          bind.if(\"_statusText\", \"ck-hidden\", (value) => !value)\n        ],\n        id: statusUid,\n        role: bind.if(\"errorText\", \"alert\")\n      },\n      children: [\n        {\n          text: bind.to(\"_statusText\")\n        }\n      ]\n    });\n    return statusView;\n  }\n  /**\n   * Focuses the {@link #fieldView}.\n   */\n  focus(direction) {\n    this.fieldView.focus(direction);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/input/inputbase.js\nvar InputBase = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.set(\"value\", void 0);\n    this.set(\"id\", void 0);\n    this.set(\"placeholder\", void 0);\n    this.set(\"isReadOnly\", false);\n    this.set(\"hasError\", false);\n    this.set(\"ariaDescribedById\", void 0);\n    this.focusTracker = new FocusTracker();\n    this.bind(\"isFocused\").to(this.focusTracker);\n    this.set(\"isEmpty\", true);\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"input\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-input\",\n          bind.if(\"isFocused\", \"ck-input_focused\"),\n          bind.if(\"isEmpty\", \"ck-input-text_empty\"),\n          bind.if(\"hasError\", \"ck-error\")\n        ],\n        id: bind.to(\"id\"),\n        placeholder: bind.to(\"placeholder\"),\n        readonly: bind.to(\"isReadOnly\"),\n        \"aria-invalid\": bind.if(\"hasError\", true),\n        \"aria-describedby\": bind.to(\"ariaDescribedById\")\n      },\n      on: {\n        input: bind.to((...args) => {\n          this.fire(\"input\", ...args);\n          this._updateIsEmpty();\n        }),\n        change: bind.to(this._updateIsEmpty.bind(this))\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.focusTracker.add(this.element);\n    this._setDomElementValue(this.value);\n    this._updateIsEmpty();\n    this.on(\"change:value\", (evt, name, value) => {\n      this._setDomElementValue(value);\n      this._updateIsEmpty();\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n  }\n  /**\n   * Moves the focus to the input and selects the value.\n   */\n  select() {\n    this.element.select();\n  }\n  /**\n   * Focuses the input.\n   */\n  focus() {\n    this.element.focus();\n  }\n  /**\n   * Resets the value of the input\n   */\n  reset() {\n    this.value = this.element.value = \"\";\n    this._updateIsEmpty();\n  }\n  /**\n   * Updates the {@link #isEmpty} property value on demand.\n   */\n  _updateIsEmpty() {\n    this.isEmpty = isInputElementEmpty(this.element);\n  }\n  /**\n   * Sets the `value` property of the {@link #element DOM element} on demand.\n   */\n  _setDomElementValue(value) {\n    this.element.value = !value && value !== 0 ? \"\" : value;\n  }\n};\nfunction isInputElementEmpty(domElement) {\n  return !domElement.value;\n}\n\n// node_modules/@ckeditor/ckeditor5-ui/src/input/inputview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/input/input.css\";\nvar InputView = class extends InputBase {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.set(\"inputMode\", \"text\");\n    const bind = this.bindTemplate;\n    this.extendTemplate({\n      attributes: {\n        inputmode: bind.to(\"inputMode\")\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/inputtext/inputtextview.js\nvar InputTextView = class extends InputView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.extendTemplate({\n      attributes: {\n        type: \"text\",\n        class: [\n          \"ck-input-text\"\n        ]\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/textarea/textareaview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/input/input.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/textarea/textarea.css\";\n\n// node_modules/@ckeditor/ckeditor5-ui/src/labeledfield/utils.js\nvar createLabeledInputText = (labeledFieldView, viewUid, statusUid) => {\n  const inputView = new InputTextView(labeledFieldView.locale);\n  inputView.set({\n    id: viewUid,\n    ariaDescribedById: statusUid\n  });\n  inputView.bind(\"isReadOnly\").to(labeledFieldView, \"isEnabled\", (value) => !value);\n  inputView.bind(\"hasError\").to(labeledFieldView, \"errorText\", (value) => !!value);\n  inputView.on(\"input\", () => {\n    labeledFieldView.errorText = null;\n  });\n  labeledFieldView.bind(\"isEmpty\", \"isFocused\", \"placeholder\").to(inputView);\n  return inputView;\n};\n\n// node_modules/vanilla-colorful/lib/utils/math.js\nvar clamp = (number, min = 0, max = 1) => {\n  return number > max ? max : number < min ? min : number;\n};\nvar round = (number, digits = 0, base = Math.pow(10, digits)) => {\n  return Math.round(base * number) / base;\n};\n\n// node_modules/vanilla-colorful/lib/utils/convert.js\nvar angleUnits = {\n  grad: 360 / 400,\n  turn: 360,\n  rad: 360 / (Math.PI * 2)\n};\nvar hexToHsva = (hex) => rgbaToHsva(hexToRgba(hex));\nvar hexToRgba = (hex) => {\n  if (hex[0] === \"#\")\n    hex = hex.substring(1);\n  if (hex.length < 6) {\n    return {\n      r: parseInt(hex[0] + hex[0], 16),\n      g: parseInt(hex[1] + hex[1], 16),\n      b: parseInt(hex[2] + hex[2], 16),\n      a: hex.length === 4 ? round(parseInt(hex[3] + hex[3], 16) / 255, 2) : 1\n    };\n  }\n  return {\n    r: parseInt(hex.substring(0, 2), 16),\n    g: parseInt(hex.substring(2, 4), 16),\n    b: parseInt(hex.substring(4, 6), 16),\n    a: hex.length === 8 ? round(parseInt(hex.substring(6, 8), 16) / 255, 2) : 1\n  };\n};\nvar hsvaToHex = (hsva) => rgbaToHex(hsvaToRgba(hsva));\nvar hsvaToHsla = ({ h, s, v, a }) => {\n  const hh = (200 - s) * v / 100;\n  return {\n    h: round(h),\n    s: round(hh > 0 && hh < 200 ? s * v / 100 / (hh <= 100 ? hh : 200 - hh) * 100 : 0),\n    l: round(hh / 2),\n    a: round(a, 2)\n  };\n};\nvar hsvaToHslString = (hsva) => {\n  const { h, s, l } = hsvaToHsla(hsva);\n  return `hsl(${h}, ${s}%, ${l}%)`;\n};\nvar hsvaToRgba = ({ h, s, v, a }) => {\n  h = h / 360 * 6;\n  s = s / 100;\n  v = v / 100;\n  const hh = Math.floor(h), b = v * (1 - s), c = v * (1 - (h - hh) * s), d = v * (1 - (1 - h + hh) * s), module = hh % 6;\n  return {\n    r: round([v, c, b, b, d, v][module] * 255),\n    g: round([d, v, v, c, b, b][module] * 255),\n    b: round([b, b, d, v, v, c][module] * 255),\n    a: round(a, 2)\n  };\n};\nvar format = (number) => {\n  const hex = number.toString(16);\n  return hex.length < 2 ? \"0\" + hex : hex;\n};\nvar rgbaToHex = ({ r, g, b, a }) => {\n  const alphaHex = a < 1 ? format(round(a * 255)) : \"\";\n  return \"#\" + format(r) + format(g) + format(b) + alphaHex;\n};\nvar rgbaToHsva = ({ r, g, b, a }) => {\n  const max = Math.max(r, g, b);\n  const delta = max - Math.min(r, g, b);\n  const hh = delta ? max === r ? (g - b) / delta : max === g ? 2 + (b - r) / delta : 4 + (r - g) / delta : 0;\n  return {\n    h: round(60 * (hh < 0 ? hh + 6 : hh)),\n    s: round(max ? delta / max * 100 : 0),\n    v: round(max / 255 * 100),\n    a\n  };\n};\n\n// node_modules/vanilla-colorful/lib/utils/compare.js\nvar equalColorObjects = (first2, second) => {\n  if (first2 === second)\n    return true;\n  for (const prop in first2) {\n    if (first2[prop] !== second[prop])\n      return false;\n  }\n  return true;\n};\nvar equalHex = (first2, second) => {\n  if (first2.toLowerCase() === second.toLowerCase())\n    return true;\n  return equalColorObjects(hexToRgba(first2), hexToRgba(second));\n};\n\n// node_modules/vanilla-colorful/lib/utils/dom.js\nvar cache = {};\nvar tpl = (html) => {\n  let template = cache[html];\n  if (!template) {\n    template = document.createElement(\"template\");\n    template.innerHTML = html;\n    cache[html] = template;\n  }\n  return template;\n};\nvar fire = (target, type, detail) => {\n  target.dispatchEvent(new CustomEvent(type, {\n    bubbles: true,\n    detail\n  }));\n};\n\n// node_modules/vanilla-colorful/lib/components/slider.js\nvar hasTouched = false;\nvar isTouch = (e) => \"touches\" in e;\nvar isValid = (event) => {\n  if (hasTouched && !isTouch(event))\n    return false;\n  if (!hasTouched)\n    hasTouched = isTouch(event);\n  return true;\n};\nvar pointerMove = (target, event) => {\n  const pointer = isTouch(event) ? event.touches[0] : event;\n  const rect = target.el.getBoundingClientRect();\n  fire(target.el, \"move\", target.getMove({\n    x: clamp((pointer.pageX - (rect.left + window.pageXOffset)) / rect.width),\n    y: clamp((pointer.pageY - (rect.top + window.pageYOffset)) / rect.height)\n  }));\n};\nvar keyMove = (target, event) => {\n  const keyCode = event.keyCode;\n  if (keyCode > 40 || target.xy && keyCode < 37 || keyCode < 33)\n    return;\n  event.preventDefault();\n  fire(target.el, \"move\", target.getMove({\n    x: keyCode === 39 ? 0.01 : keyCode === 37 ? -0.01 : keyCode === 34 ? 0.05 : keyCode === 33 ? -0.05 : keyCode === 35 ? 1 : keyCode === 36 ? -1 : 0,\n    y: keyCode === 40 ? 0.01 : keyCode === 38 ? -0.01 : 0\n  }, true));\n};\nvar Slider = class {\n  constructor(root, part, aria, xy) {\n    const template = tpl(`<div role=\"slider\" tabindex=\"0\" part=\"${part}\" ${aria}><div part=\"${part}-pointer\"></div></div>`);\n    root.appendChild(template.content.cloneNode(true));\n    const el = root.querySelector(`[part=${part}]`);\n    el.addEventListener(\"mousedown\", this);\n    el.addEventListener(\"touchstart\", this);\n    el.addEventListener(\"keydown\", this);\n    this.el = el;\n    this.xy = xy;\n    this.nodes = [el.firstChild, el];\n  }\n  set dragging(state) {\n    const toggleEvent = state ? document.addEventListener : document.removeEventListener;\n    toggleEvent(hasTouched ? \"touchmove\" : \"mousemove\", this);\n    toggleEvent(hasTouched ? \"touchend\" : \"mouseup\", this);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"mousedown\":\n      case \"touchstart\":\n        event.preventDefault();\n        if (!isValid(event) || !hasTouched && event.button != 0)\n          return;\n        this.el.focus();\n        pointerMove(this, event);\n        this.dragging = true;\n        break;\n      case \"mousemove\":\n      case \"touchmove\":\n        event.preventDefault();\n        pointerMove(this, event);\n        break;\n      case \"mouseup\":\n      case \"touchend\":\n        this.dragging = false;\n        break;\n      case \"keydown\":\n        keyMove(this, event);\n        break;\n    }\n  }\n  style(styles) {\n    styles.forEach((style, i) => {\n      for (const p in style) {\n        this.nodes[i].style.setProperty(p, style[p]);\n      }\n    });\n  }\n};\n\n// node_modules/vanilla-colorful/lib/components/hue.js\nvar Hue = class extends Slider {\n  constructor(root) {\n    super(root, \"hue\", 'aria-label=\"Hue\" aria-valuemin=\"0\" aria-valuemax=\"360\"', false);\n  }\n  update({ h }) {\n    this.h = h;\n    this.style([\n      {\n        left: `${h / 360 * 100}%`,\n        color: hsvaToHslString({ h, s: 100, v: 100, a: 1 })\n      }\n    ]);\n    this.el.setAttribute(\"aria-valuenow\", `${round(h)}`);\n  }\n  getMove(offset, key) {\n    return { h: key ? clamp(this.h + offset.x * 360, 0, 360) : 360 * offset.x };\n  }\n};\n\n// node_modules/vanilla-colorful/lib/components/saturation.js\nvar Saturation = class extends Slider {\n  constructor(root) {\n    super(root, \"saturation\", 'aria-label=\"Color\"', true);\n  }\n  update(hsva) {\n    this.hsva = hsva;\n    this.style([\n      {\n        top: `${100 - hsva.v}%`,\n        left: `${hsva.s}%`,\n        color: hsvaToHslString(hsva)\n      },\n      {\n        \"background-color\": hsvaToHslString({ h: hsva.h, s: 100, v: 100, a: 1 })\n      }\n    ]);\n    this.el.setAttribute(\"aria-valuetext\", `Saturation ${round(hsva.s)}%, Brightness ${round(hsva.v)}%`);\n  }\n  getMove(offset, key) {\n    return {\n      s: key ? clamp(this.hsva.s + offset.x * 100, 0, 100) : offset.x * 100,\n      v: key ? clamp(this.hsva.v - offset.y * 100, 0, 100) : Math.round(100 - offset.y * 100)\n    };\n  }\n};\n\n// node_modules/vanilla-colorful/lib/styles/color-picker.js\nvar color_picker_default = `:host{display:flex;flex-direction:column;position:relative;width:200px;height:200px;user-select:none;-webkit-user-select:none;cursor:default}:host([hidden]){display:none!important}[role=slider]{position:relative;touch-action:none;user-select:none;-webkit-user-select:none;outline:0}[role=slider]:last-child{border-radius:0 0 8px 8px}[part$=pointer]{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;display:flex;place-content:center center;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}[part$=pointer]::after{content:\"\";width:100%;height:100%;border-radius:inherit;background-color:currentColor}[role=slider]:focus [part$=pointer]{transform:translate(-50%,-50%) scale(1.1)}`;\n\n// node_modules/vanilla-colorful/lib/styles/hue.js\nvar hue_default = `[part=hue]{flex:0 0 24px;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}[part=hue-pointer]{top:50%;z-index:2}`;\n\n// node_modules/vanilla-colorful/lib/styles/saturation.js\nvar saturation_default = `[part=saturation]{flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(to top,#000,transparent),linear-gradient(to right,#fff,rgba(255,255,255,0));box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}[part=saturation-pointer]{z-index:3}`;\n\n// node_modules/vanilla-colorful/lib/components/color-picker.js\nvar $isSame = Symbol(\"same\");\nvar $color = Symbol(\"color\");\nvar $hsva = Symbol(\"hsva\");\nvar $update = Symbol(\"update\");\nvar $parts = Symbol(\"parts\");\nvar $css = Symbol(\"css\");\nvar $sliders = Symbol(\"sliders\");\nvar ColorPicker = class extends HTMLElement {\n  static get observedAttributes() {\n    return [\"color\"];\n  }\n  get [$css]() {\n    return [color_picker_default, hue_default, saturation_default];\n  }\n  get [$sliders]() {\n    return [Saturation, Hue];\n  }\n  get color() {\n    return this[$color];\n  }\n  set color(newColor) {\n    if (!this[$isSame](newColor)) {\n      const newHsva = this.colorModel.toHsva(newColor);\n      this[$update](newHsva);\n      this[$color] = newColor;\n    }\n  }\n  constructor() {\n    super();\n    const template = tpl(`<style>${this[$css].join(\"\")}</style>`);\n    const root = this.attachShadow({ mode: \"open\" });\n    root.appendChild(template.content.cloneNode(true));\n    root.addEventListener(\"move\", this);\n    this[$parts] = this[$sliders].map((slider) => new slider(root));\n  }\n  connectedCallback() {\n    if (this.hasOwnProperty(\"color\")) {\n      const value = this.color;\n      delete this[\"color\"];\n      this.color = value;\n    } else if (!this.color) {\n      this.color = this.colorModel.defaultColor;\n    }\n  }\n  attributeChangedCallback(_attr, _oldVal, newVal) {\n    const color = this.colorModel.fromAttr(newVal);\n    if (!this[$isSame](color)) {\n      this.color = color;\n    }\n  }\n  handleEvent(event) {\n    const oldHsva = this[$hsva];\n    const newHsva = { ...oldHsva, ...event.detail };\n    this[$update](newHsva);\n    let newColor;\n    if (!equalColorObjects(newHsva, oldHsva) && !this[$isSame](newColor = this.colorModel.fromHsva(newHsva))) {\n      this[$color] = newColor;\n      fire(this, \"color-changed\", { value: newColor });\n    }\n  }\n  [$isSame](color) {\n    return this.color && this.colorModel.equal(color, this.color);\n  }\n  [$update](hsva) {\n    this[$hsva] = hsva;\n    this[$parts].forEach((part) => part.update(hsva));\n  }\n};\n\n// node_modules/vanilla-colorful/lib/entrypoints/hex.js\nvar colorModel = {\n  defaultColor: \"#000\",\n  toHsva: hexToHsva,\n  fromHsva: ({ h, s, v }) => hsvaToHex({ h, s, v, a: 1 }),\n  equal: equalHex,\n  fromAttr: (color) => color\n};\nvar HexBase = class extends ColorPicker {\n  get colorModel() {\n    return colorModel;\n  }\n};\n\n// node_modules/vanilla-colorful/hex-color-picker.js\nvar HexColorPicker = class extends HexBase {\n};\ncustomElements.define(\"hex-color-picker\", HexColorPicker);\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorpicker/colorpickerview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/colorpicker/colorpicker.css\";\nvar waitingTime = 150;\nvar ColorPickerView = class extends View {\n  /**\n   * Creates a view of color picker.\n   *\n   * @param locale\n   * @param config\n   */\n  constructor(locale, config = {}) {\n    super(locale);\n    this.set({\n      color: \"\",\n      _hexColor: \"\"\n    });\n    this.hexInputRow = this._createInputRow();\n    const children = this.createCollection();\n    if (!config.hideInput) {\n      children.add(this.hexInputRow);\n    }\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\"ck\", \"ck-color-picker\"],\n        tabindex: -1\n      },\n      children\n    });\n    this._config = config;\n    this._debounceColorPickerEvent = debounce_default((color) => {\n      this.set(\"color\", color);\n      this.fire(\"colorSelected\", { color: this.color });\n    }, waitingTime, {\n      leading: true\n    });\n    this.on(\"set:color\", (evt, propertyName, newValue) => {\n      evt.return = convertColor(newValue, this._config.format || \"hsl\");\n    });\n    this.on(\"change:color\", () => {\n      this._hexColor = convertColorToCommonHexFormat(this.color);\n    });\n    this.on(\"change:_hexColor\", () => {\n      if (document.activeElement !== this.picker) {\n        this.picker.setAttribute(\"color\", this._hexColor);\n      }\n      if (convertColorToCommonHexFormat(this.color) != convertColorToCommonHexFormat(this._hexColor)) {\n        this.color = this._hexColor;\n      }\n    });\n  }\n  /**\n   * Renders color picker in the view.\n   */\n  render() {\n    super.render();\n    this.picker = global_default.document.createElement(\"hex-color-picker\");\n    this.picker.setAttribute(\"class\", \"hex-color-picker\");\n    this.picker.setAttribute(\"tabindex\", \"-1\");\n    this._createSlidersView();\n    if (this.element) {\n      if (this.hexInputRow.element) {\n        this.element.insertBefore(this.picker, this.hexInputRow.element);\n      } else {\n        this.element.appendChild(this.picker);\n      }\n      const styleSheetForFocusedColorPicker = document.createElement(\"style\");\n      styleSheetForFocusedColorPicker.textContent = '[role=\"slider\"]:focus [part$=\"pointer\"] {border: 1px solid #fff;outline: 1px solid var(--ck-color-focus-border);box-shadow: 0 0 0 2px #fff;}';\n      this.picker.shadowRoot.appendChild(styleSheetForFocusedColorPicker);\n    }\n    this.picker.addEventListener(\"color-changed\", (event) => {\n      const customEvent = event;\n      const color = customEvent.detail.value;\n      this._debounceColorPickerEvent(color);\n    });\n  }\n  /**\n   * Focuses the first pointer in color picker.\n   *\n   */\n  focus() {\n    if (!this._config.hideInput && (env_default.isGecko || env_default.isiOS || env_default.isSafari)) {\n      const input = this.hexInputRow.children.get(1);\n      input.focus();\n    }\n    const firstSlider = this.slidersView.first;\n    firstSlider.focus();\n  }\n  /**\n   * Creates collection of sliders in color picker.\n   *\n   * @private\n   */\n  _createSlidersView() {\n    const colorPickersChildren = [...this.picker.shadowRoot.children];\n    const sliders = colorPickersChildren.filter((item) => item.getAttribute(\"role\") === \"slider\");\n    const slidersView = sliders.map((slider) => {\n      const view = new SliderView(slider);\n      return view;\n    });\n    this.slidersView = this.createCollection();\n    slidersView.forEach((item) => {\n      this.slidersView.add(item);\n    });\n  }\n  /**\n   * Creates input row for defining custom colors in color picker.\n   *\n   * @private\n   */\n  _createInputRow() {\n    const hashView = new HashView();\n    const colorInput = this._createColorInput();\n    return new ColorPickerInputRowView(this.locale, [hashView, colorInput]);\n  }\n  /**\n   * Creates the input where user can type or paste the color in hex format.\n   *\n   * @private\n   */\n  _createColorInput() {\n    const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n    const { t } = this.locale;\n    labeledInput.set({\n      label: t(\"HEX\"),\n      class: \"color-picker-hex-input\"\n    });\n    labeledInput.fieldView.bind(\"value\").to(this, \"_hexColor\", (pickerColor) => {\n      if (labeledInput.isFocused) {\n        return labeledInput.fieldView.value;\n      } else {\n        return pickerColor.startsWith(\"#\") ? pickerColor.substring(1) : pickerColor;\n      }\n    });\n    labeledInput.fieldView.on(\"input\", () => {\n      const inputValue = labeledInput.fieldView.element.value;\n      if (inputValue) {\n        const trimmedValue = inputValue.trim();\n        const hashlessInput = trimmedValue.startsWith(\"#\") ? trimmedValue.substring(1) : trimmedValue;\n        const isValidHexColor = [3, 4, 6, 8].includes(hashlessInput.length) && /(([0-9a-fA-F]{2}){3,4}|([0-9a-fA-F]){3,4})/.test(hashlessInput);\n        if (isValidHexColor) {\n          this._debounceColorPickerEvent(\"#\" + hashlessInput);\n        }\n      }\n    });\n    return labeledInput;\n  }\n};\nfunction convertColorToCommonHexFormat(inputColor) {\n  let ret = convertToHex(inputColor);\n  if (!ret) {\n    ret = \"#000\";\n  }\n  if (ret.length === 4) {\n    ret = \"#\" + [ret[1], ret[1], ret[2], ret[2], ret[3], ret[3]].join(\"\");\n  }\n  return ret.toLowerCase();\n}\nvar SliderView = class extends View {\n  /**\n   * @param element HTML elemnt of slider in color picker.\n   */\n  constructor(element) {\n    super();\n    this.element = element;\n  }\n  /**\n   * Focuses element.\n   */\n  focus() {\n    this.element.focus();\n  }\n};\nvar HashView = class extends View {\n  constructor(locale) {\n    super(locale);\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-color-picker__hash-view\"\n        ]\n      },\n      children: \"#\"\n    });\n  }\n};\nvar ColorPickerInputRowView = class extends View {\n  /**\n   * Creates an instance of the form row class.\n   *\n   * @param locale The locale instance.\n   */\n  constructor(locale, children) {\n    super(locale);\n    this.children = this.createCollection(children);\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-color-picker__row\"\n        ]\n      },\n      children: this.children\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorselector/documentcolorcollection.js\nvar DocumentColorCollection = class extends ObservableMixin(Collection) {\n  constructor(options) {\n    super(options);\n    this.set(\"isEmpty\", true);\n    this.on(\"change\", () => {\n      this.set(\"isEmpty\", this.length === 0);\n    });\n  }\n  /**\n   * Adds a color to the document color collection.\n   *\n   * This method ensures that no color duplicates are inserted (compared using\n   * the color value of the {@link module:ui/colorgrid/colorgridview~ColorDefinition}).\n   *\n   * If the item does not have an ID, it will be automatically generated and set on the item.\n   *\n   * @param index The position of the item in the collection. The item is pushed to the collection when `index` is not specified.\n   * @fires add\n   * @fires change\n   */\n  add(item, index) {\n    if (this.find((element) => element.color === item.color)) {\n      return this;\n    }\n    return super.add(item, index);\n  }\n  /**\n   * Checks if an object with given colors is present in the document color collection.\n   */\n  hasColor(color) {\n    return !!this.find((item) => item.color === color);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorgridsfragmentview.js\nvar { eraser: removeButtonIcon, colorPalette: colorPaletteIcon } = icons;\nvar ColorGridsFragmentView = class extends View {\n  /**\n   * Creates an instance of the view.\n   *\n   * @param locale The localization services instance.\n   * @param colors An array with definitions of colors to be displayed in the table.\n   * @param columns The number of columns in the color grid.\n   * @param removeButtonLabel The label of the button responsible for removing the color.\n   * @param colorPickerLabel The label of the button responsible for color picker appearing.\n   * @param documentColorsLabel The label for the section with the document colors.\n   * @param documentColorsCount The number of colors in the document colors section inside the color dropdown.\n   * @param focusTracker Tracks information about the DOM focus in the list.\n   * @param focusables A collection of views that can be focused in the view.\n   */\n  constructor(locale, { colors, columns, removeButtonLabel, documentColorsLabel, documentColorsCount, colorPickerLabel, focusTracker, focusables }) {\n    super(locale);\n    const bind = this.bindTemplate;\n    this.set(\"isVisible\", true);\n    this.focusTracker = focusTracker;\n    this.items = this.createCollection();\n    this.colorDefinitions = colors;\n    this.columns = columns;\n    this.documentColors = new DocumentColorCollection();\n    this.documentColorsCount = documentColorsCount;\n    this._focusables = focusables;\n    this._removeButtonLabel = removeButtonLabel;\n    this._colorPickerLabel = colorPickerLabel;\n    this._documentColorsLabel = documentColorsLabel;\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck-color-grids-fragment\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ]\n      },\n      children: this.items\n    });\n    this.removeColorButtonView = this._createRemoveColorButton();\n    this.items.add(this.removeColorButtonView);\n  }\n  /**\n   * Scans through the editor model and searches for text node attributes with the given attribute name.\n   * Found entries are set as document colors.\n   *\n   * All the previously stored document colors will be lost in the process.\n   *\n   * @param model The model used as a source to obtain the document colors.\n   * @param attributeName Determines the name of the related model's attribute for a given dropdown.\n   */\n  updateDocumentColors(model, attributeName) {\n    const document2 = model.document;\n    const maxCount = this.documentColorsCount;\n    this.documentColors.clear();\n    for (const root of document2.getRoots()) {\n      const range = model.createRangeIn(root);\n      for (const node of range.getItems()) {\n        if (node.is(\"$textProxy\") && node.hasAttribute(attributeName)) {\n          this._addColorToDocumentColors(node.getAttribute(attributeName));\n          if (this.documentColors.length >= maxCount) {\n            return;\n          }\n        }\n      }\n    }\n  }\n  /**\n   * Refreshes the state of the selected color in one or both {@link module:ui/colorgrid/colorgridview~ColorGridView}s\n   * available in the {@link module:ui/colorselector/colorselectorview~ColorSelectorView}. It guarantees that the selection will\n   * occur only in one of them.\n   */\n  updateSelectedColors() {\n    const documentColorsGrid = this.documentColorsGrid;\n    const staticColorsGrid = this.staticColorsGrid;\n    const selectedColor = this.selectedColor;\n    staticColorsGrid.selectedColor = selectedColor;\n    if (documentColorsGrid) {\n      documentColorsGrid.selectedColor = selectedColor;\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.staticColorsGrid = this._createStaticColorsGrid();\n    this.items.add(this.staticColorsGrid);\n    if (this.documentColorsCount) {\n      const bind = Template.bind(this.documentColors, this.documentColors);\n      const label = new LabelView(this.locale);\n      label.text = this._documentColorsLabel;\n      label.extendTemplate({\n        attributes: {\n          class: [\n            \"ck\",\n            \"ck-color-grid__label\",\n            bind.if(\"isEmpty\", \"ck-hidden\")\n          ]\n        }\n      });\n      this.items.add(label);\n      this.documentColorsGrid = this._createDocumentColorsGrid();\n      this.items.add(this.documentColorsGrid);\n    }\n    this._createColorPickerButton();\n    this._addColorSelectorElementsToFocusTracker();\n    this.focus();\n  }\n  /**\n   * Focuses the component.\n   */\n  focus() {\n    this.removeColorButtonView.focus();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n  }\n  /**\n   * Handles displaying the color picker button (if it was previously created) and making it focusable.\n   */\n  addColorPickerButton() {\n    if (this.colorPickerButtonView) {\n      this.items.add(this.colorPickerButtonView);\n      this.focusTracker.add(this.colorPickerButtonView.element);\n      this._focusables.add(this.colorPickerButtonView);\n    }\n  }\n  /**\n   * Adds color selector elements to focus tracker.\n   */\n  _addColorSelectorElementsToFocusTracker() {\n    this.focusTracker.add(this.removeColorButtonView.element);\n    this._focusables.add(this.removeColorButtonView);\n    if (this.staticColorsGrid) {\n      this.focusTracker.add(this.staticColorsGrid.element);\n      this._focusables.add(this.staticColorsGrid);\n    }\n    if (this.documentColorsGrid) {\n      this.focusTracker.add(this.documentColorsGrid.element);\n      this._focusables.add(this.documentColorsGrid);\n    }\n  }\n  /**\n   * Creates the button responsible for displaying the color picker component.\n   */\n  _createColorPickerButton() {\n    this.colorPickerButtonView = new ButtonView();\n    this.colorPickerButtonView.set({\n      label: this._colorPickerLabel,\n      withText: true,\n      icon: colorPaletteIcon,\n      class: \"ck-color-selector__color-picker\"\n    });\n    this.colorPickerButtonView.on(\"execute\", () => {\n      this.fire(\"colorPicker:show\");\n    });\n  }\n  /**\n   * Adds the remove color button as a child of the current view.\n   */\n  _createRemoveColorButton() {\n    const buttonView = new ButtonView();\n    buttonView.set({\n      withText: true,\n      icon: removeButtonIcon,\n      label: this._removeButtonLabel\n    });\n    buttonView.class = \"ck-color-selector__remove-color\";\n    buttonView.on(\"execute\", () => {\n      this.fire(\"execute\", {\n        value: null,\n        source: \"removeColorButton\"\n      });\n    });\n    buttonView.render();\n    return buttonView;\n  }\n  /**\n   * Creates a static color grid based on the editor configuration.\n   */\n  _createStaticColorsGrid() {\n    const colorGrid = new ColorGridView(this.locale, {\n      colorDefinitions: this.colorDefinitions,\n      columns: this.columns\n    });\n    colorGrid.on(\"execute\", (evt, data) => {\n      this.fire(\"execute\", {\n        value: data.value,\n        source: \"staticColorsGrid\"\n      });\n    });\n    return colorGrid;\n  }\n  /**\n   * Creates the document colors section view and binds it to {@link #documentColors}.\n   */\n  _createDocumentColorsGrid() {\n    const bind = Template.bind(this.documentColors, this.documentColors);\n    const documentColorsGrid = new ColorGridView(this.locale, {\n      columns: this.columns\n    });\n    documentColorsGrid.extendTemplate({\n      attributes: {\n        class: bind.if(\"isEmpty\", \"ck-hidden\")\n      }\n    });\n    documentColorsGrid.items.bindTo(this.documentColors).using((colorObj) => {\n      const colorTile = new ColorTileView();\n      colorTile.set({\n        color: colorObj.color,\n        hasBorder: colorObj.options && colorObj.options.hasBorder\n      });\n      if (colorObj.label) {\n        colorTile.set({\n          label: colorObj.label,\n          tooltip: true\n        });\n      }\n      colorTile.on(\"execute\", () => {\n        this.fire(\"execute\", {\n          value: colorObj.color,\n          source: \"documentColorsGrid\"\n        });\n      });\n      return colorTile;\n    });\n    this.documentColors.on(\"change:isEmpty\", (evt, name, val) => {\n      if (val) {\n        documentColorsGrid.selectedColor = null;\n      }\n    });\n    return documentColorsGrid;\n  }\n  /**\n   * Adds a given color to the document colors list. If possible, the method will attempt to use\n   * data from the {@link #colorDefinitions} (label, color options).\n   *\n   * @param color A string that stores the value of the recently applied color.\n   */\n  _addColorToDocumentColors(color) {\n    const predefinedColor = this.colorDefinitions.find((definition) => definition.color === color);\n    if (!predefinedColor) {\n      this.documentColors.add({\n        color,\n        label: color,\n        options: {\n          hasBorder: false\n        }\n      });\n    } else {\n      this.documentColors.add(Object.assign({}, predefinedColor));\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorpickerfragmentview.js\nvar ColorPickerFragmentView = class extends View {\n  /**\n   * Creates an instance of the view.\n   *\n   * @param locale The localization services instance.\n   * @param focusTracker Tracks information about the DOM focus in the list.\n   * @param focusables A collection of views that can be focused in the view..\n   * @param keystrokes An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.\n   * @param colorPickerViewConfig The configuration of color picker feature. If set to `false`, the color picker\n   * will not be rendered.\n   */\n  constructor(locale, { focusTracker, focusables, keystrokes, colorPickerViewConfig }) {\n    super(locale);\n    this.items = this.createCollection();\n    this.focusTracker = focusTracker;\n    this.keystrokes = keystrokes;\n    this.set(\"isVisible\", false);\n    this.set(\"selectedColor\", void 0);\n    this._focusables = focusables;\n    this._colorPickerViewConfig = colorPickerViewConfig;\n    const bind = this.bindTemplate;\n    const { saveButtonView, cancelButtonView } = this._createActionButtons();\n    this.saveButtonView = saveButtonView;\n    this.cancelButtonView = cancelButtonView;\n    this.actionBarView = this._createActionBarView({ saveButtonView, cancelButtonView });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck-color-picker-fragment\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ]\n      },\n      children: this.items\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    const colorPickerView = new ColorPickerView(this.locale, {\n      ...this._colorPickerViewConfig\n    });\n    this.colorPickerView = colorPickerView;\n    this.colorPickerView.render();\n    if (this.selectedColor) {\n      colorPickerView.color = this.selectedColor;\n    }\n    this.listenTo(this, \"change:selectedColor\", (evt, name, value) => {\n      colorPickerView.color = value;\n    });\n    this.items.add(this.colorPickerView);\n    this.items.add(this.actionBarView);\n    this._addColorPickersElementsToFocusTracker();\n    this._stopPropagationOnArrowsKeys();\n    this._executeOnEnterPress();\n    this._executeUponColorChange();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n  }\n  /**\n   * Focuses the color picker.\n   */\n  focus() {\n    this.colorPickerView.focus();\n  }\n  /**\n   * When color picker is focused and \"enter\" is pressed it executes command.\n   */\n  _executeOnEnterPress() {\n    this.keystrokes.set(\"enter\", (evt) => {\n      if (this.isVisible && this.focusTracker.focusedElement !== this.cancelButtonView.element) {\n        this.fire(\"execute\", {\n          value: this.selectedColor\n        });\n        evt.stopPropagation();\n        evt.preventDefault();\n      }\n    });\n  }\n  /**\n   * Removes default behavior of arrow keys in dropdown.\n   */\n  _stopPropagationOnArrowsKeys() {\n    const stopPropagation = (data) => data.stopPropagation();\n    this.keystrokes.set(\"arrowright\", stopPropagation);\n    this.keystrokes.set(\"arrowleft\", stopPropagation);\n    this.keystrokes.set(\"arrowup\", stopPropagation);\n    this.keystrokes.set(\"arrowdown\", stopPropagation);\n  }\n  /**\n   * Adds color picker elements to focus tracker.\n   */\n  _addColorPickersElementsToFocusTracker() {\n    for (const slider of this.colorPickerView.slidersView) {\n      this.focusTracker.add(slider.element);\n      this._focusables.add(slider);\n    }\n    const input = this.colorPickerView.hexInputRow.children.get(1);\n    if (input.element) {\n      this.focusTracker.add(input.element);\n      this._focusables.add(input);\n    }\n    this.focusTracker.add(this.saveButtonView.element);\n    this._focusables.add(this.saveButtonView);\n    this.focusTracker.add(this.cancelButtonView.element);\n    this._focusables.add(this.cancelButtonView);\n  }\n  /**\n   * Creates bar containing \"Save\" and \"Cancel\" buttons.\n   */\n  _createActionBarView({ saveButtonView, cancelButtonView }) {\n    const actionBarRow = new View();\n    const children = this.createCollection();\n    children.add(saveButtonView);\n    children.add(cancelButtonView);\n    actionBarRow.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-color-selector_action-bar\"\n        ]\n      },\n      children\n    });\n    return actionBarRow;\n  }\n  /**\n   * Creates \"Save\" and \"Cancel\" buttons.\n   */\n  _createActionButtons() {\n    const locale = this.locale;\n    const t = locale.t;\n    const saveButtonView = new ButtonView(locale);\n    const cancelButtonView = new ButtonView(locale);\n    saveButtonView.set({\n      icon: icons.check,\n      class: \"ck-button-save\",\n      type: \"button\",\n      withText: false,\n      label: t(\"Accept\")\n    });\n    cancelButtonView.set({\n      icon: icons.cancel,\n      class: \"ck-button-cancel\",\n      type: \"button\",\n      withText: false,\n      label: t(\"Cancel\")\n    });\n    saveButtonView.on(\"execute\", () => {\n      this.fire(\"execute\", {\n        source: \"colorPickerSaveButton\",\n        value: this.selectedColor\n      });\n    });\n    cancelButtonView.on(\"execute\", () => {\n      this.fire(\"colorPicker:cancel\");\n    });\n    return {\n      saveButtonView,\n      cancelButtonView\n    };\n  }\n  /**\n   * Fires the `execute` event if color in color picker has been changed\n   * by the user.\n   */\n  _executeUponColorChange() {\n    this.colorPickerView.on(\"colorSelected\", (evt, data) => {\n      this.fire(\"execute\", {\n        value: data.color,\n        source: \"colorPicker\"\n      });\n      this.set(\"selectedColor\", data.color);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/colorselector/colorselectorview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/colorselector/colorselector.css\";\nvar ColorSelectorView = class extends View {\n  /**\n   * Creates a view to be inserted as a child of {@link module:ui/dropdown/dropdownview~DropdownView}.\n   *\n   * @param locale The localization services instance.\n   * @param colors An array with definitions of colors to be displayed in the table.\n   * @param columns The number of columns in the color grid.\n   * @param removeButtonLabel The label of the button responsible for removing the color.\n   * @param colorPickerLabel The label of the button responsible for color picker appearing.\n   * @param documentColorsLabel The label for the section with the document colors.\n   * @param documentColorsCount The number of colors in the document colors section inside the color dropdown.\n   * @param colorPickerViewConfig The configuration of color picker feature. If set to `false`, the color picker will be hidden.\n   */\n  constructor(locale, { colors, columns, removeButtonLabel, documentColorsLabel, documentColorsCount, colorPickerLabel, colorPickerViewConfig }) {\n    super(locale);\n    this.items = this.createCollection();\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusables = new ViewCollection();\n    this._colorPickerViewConfig = colorPickerViewConfig;\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate list items backwards using the <kbd>Shift</kbd> + <kbd>Tab</kbd> keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate list items forwards using the <kbd>Tab</kbd> key.\n        focusNext: \"tab\"\n      }\n    });\n    this.colorGridsFragmentView = new ColorGridsFragmentView(locale, {\n      colors,\n      columns,\n      removeButtonLabel,\n      documentColorsLabel,\n      documentColorsCount,\n      colorPickerLabel,\n      focusTracker: this.focusTracker,\n      focusables: this._focusables\n    });\n    this.colorPickerFragmentView = new ColorPickerFragmentView(locale, {\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokes: this.keystrokes,\n      colorPickerViewConfig\n    });\n    this.set(\"_isColorGridsFragmentVisible\", true);\n    this.set(\"_isColorPickerFragmentVisible\", false);\n    this.set(\"selectedColor\", void 0);\n    this.colorGridsFragmentView.bind(\"isVisible\").to(this, \"_isColorGridsFragmentVisible\");\n    this.colorPickerFragmentView.bind(\"isVisible\").to(this, \"_isColorPickerFragmentVisible\");\n    this.on(\"change:selectedColor\", (evt, evtName, data) => {\n      this.colorGridsFragmentView.set(\"selectedColor\", data);\n      this.colorPickerFragmentView.set(\"selectedColor\", data);\n    });\n    this.colorGridsFragmentView.on(\"change:selectedColor\", (evt, evtName, data) => {\n      this.set(\"selectedColor\", data);\n    });\n    this.colorPickerFragmentView.on(\"change:selectedColor\", (evt, evtName, data) => {\n      this.set(\"selectedColor\", data);\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-color-selector\"\n        ]\n      },\n      children: this.items\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Renders the internals of the component on demand:\n   * * {@link #colorPickerFragmentView},\n   * * {@link #colorGridsFragmentView}.\n   *\n   * It allows for deferring component initialization to improve the performance.\n   *\n   * See {@link #showColorPickerFragment}, {@link #showColorGridsFragment}.\n   */\n  appendUI() {\n    this._appendColorGridsFragment();\n    if (this._colorPickerViewConfig) {\n      this._appendColorPickerFragment();\n    }\n  }\n  /**\n   * Shows the {@link #colorPickerFragmentView} and hides the {@link #colorGridsFragmentView}.\n   *\n   * **Note**: It requires {@link #appendUI} to be called first.\n   *\n   * See {@link #showColorGridsFragment}, {@link ~ColorSelectorView#event:colorPicker:show}.\n   */\n  showColorPickerFragment() {\n    if (!this.colorPickerFragmentView.colorPickerView || this._isColorPickerFragmentVisible) {\n      return;\n    }\n    this._isColorPickerFragmentVisible = true;\n    this.colorPickerFragmentView.focus();\n    this._isColorGridsFragmentVisible = false;\n  }\n  /**\n   * Shows the {@link #colorGridsFragmentView} and hides the {@link #colorPickerFragmentView}.\n   *\n   * See {@link #showColorPickerFragment}.\n   *\n   * **Note**: It requires {@link #appendUI} to be called first.\n   */\n  showColorGridsFragment() {\n    if (this._isColorGridsFragmentVisible) {\n      return;\n    }\n    this._isColorGridsFragmentVisible = true;\n    this.colorGridsFragmentView.focus();\n    this._isColorPickerFragmentVisible = false;\n  }\n  /**\n   * Focuses the first focusable element in {@link #items}.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the last focusable element in {@link #items}.\n   */\n  focusLast() {\n    this._focusCycler.focusLast();\n  }\n  /**\n   * Scans through the editor model and searches for text node attributes with the given `attributeName`.\n   * Found entries are set as document colors in {@link #colorGridsFragmentView}.\n   *\n   * All the previously stored document colors will be lost in the process.\n   *\n   * @param model The model used as a source to obtain the document colors.\n   * @param attributeName Determines the name of the related model's attribute for a given dropdown.\n   */\n  updateDocumentColors(model, attributeName) {\n    this.colorGridsFragmentView.updateDocumentColors(model, attributeName);\n  }\n  /**\n   * Refreshes the state of the selected color in one or both grids located in {@link #colorGridsFragmentView}.\n   *\n   * It guarantees that the selection will occur only in one of them.\n   */\n  updateSelectedColors() {\n    this.colorGridsFragmentView.updateSelectedColors();\n  }\n  /**\n   * Appends the view containing static and document color grid views.\n   */\n  _appendColorGridsFragment() {\n    if (this.items.length) {\n      return;\n    }\n    this.items.add(this.colorGridsFragmentView);\n    this.colorGridsFragmentView.delegate(\"execute\").to(this);\n    this.colorGridsFragmentView.delegate(\"colorPicker:show\").to(this);\n  }\n  /**\n   * Appends the view with the color picker.\n   */\n  _appendColorPickerFragment() {\n    if (this.items.length === 2) {\n      return;\n    }\n    this.items.add(this.colorPickerFragmentView);\n    if (this.colorGridsFragmentView.colorPickerButtonView) {\n      this.colorGridsFragmentView.colorPickerButtonView.on(\"execute\", () => {\n        this.showColorPickerFragment();\n      });\n    }\n    this.colorGridsFragmentView.addColorPickerButton();\n    this.colorPickerFragmentView.delegate(\"execute\").to(this);\n    this.colorPickerFragmentView.delegate(\"colorPicker:cancel\").to(this);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/search/text/searchtextqueryview.js\nvar SearchTextQueryView = class extends LabeledFieldView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale, config) {\n    const t = locale.t;\n    const viewConfig = Object.assign({}, {\n      showResetButton: true,\n      showIcon: true,\n      creator: createLabeledInputText\n    }, config);\n    super(locale, viewConfig.creator);\n    this.label = config.label;\n    this._viewConfig = viewConfig;\n    if (this._viewConfig.showIcon) {\n      this.iconView = new iconview_default();\n      this.iconView.content = icons.loupe;\n      this.fieldWrapperChildren.add(this.iconView, 0);\n      this.extendTemplate({\n        attributes: {\n          class: \"ck-search__query_with-icon\"\n        }\n      });\n    }\n    if (this._viewConfig.showResetButton) {\n      this.resetButtonView = new ButtonView(locale);\n      this.resetButtonView.set({\n        label: t(\"Clear\"),\n        icon: icons.cancel,\n        class: \"ck-search__reset\",\n        isVisible: false,\n        tooltip: true\n      });\n      this.resetButtonView.on(\"execute\", () => {\n        this.reset();\n        this.focus();\n        this.fire(\"reset\");\n      });\n      this.resetButtonView.bind(\"isVisible\").to(this.fieldView, \"isEmpty\", (isEmpty) => !isEmpty);\n      this.fieldWrapperChildren.add(this.resetButtonView);\n      this.extendTemplate({\n        attributes: {\n          class: \"ck-search__query_with-reset\"\n        }\n      });\n    }\n  }\n  /**\n   * Resets the search field to its default state.\n   */\n  reset() {\n    this.fieldView.reset();\n    if (this._viewConfig.showResetButton) {\n      this.resetButtonView.isVisible = false;\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/search/searchinfoview.js\nvar SearchInfoView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor() {\n    super();\n    const bind = this.bindTemplate;\n    this.set({\n      isVisible: false,\n      primaryText: \"\",\n      secondaryText: \"\"\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-search__info\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ],\n        tabindex: -1\n      },\n      children: [\n        {\n          tag: \"span\",\n          children: [\n            {\n              text: [bind.to(\"primaryText\")]\n            }\n          ]\n        },\n        {\n          tag: \"span\",\n          children: [\n            {\n              text: [bind.to(\"secondaryText\")]\n            }\n          ]\n        }\n      ]\n    });\n  }\n  /**\n   * Focuses the view\n   */\n  focus() {\n    this.element.focus();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/search/searchresultsview.js\nvar SearchResultsView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.children = this.createCollection();\n    this.focusTracker = new FocusTracker();\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-search__results\"\n        ],\n        tabindex: -1\n      },\n      children: this.children\n    });\n    this._focusCycler = new FocusCycler({\n      focusables: this.children,\n      focusTracker: this.focusTracker\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    for (const child of this.children) {\n      this.focusTracker.add(child.element);\n    }\n  }\n  /**\n   * Focuses the view.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the first child view.\n   */\n  focusFirst() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Focuses the last child view.\n   */\n  focusLast() {\n    this._focusCycler.focusLast();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/search/text/searchtextview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/search/search.css\";\nvar SearchTextView = class extends View {\n  /**\n   * Creates an instance of the {@link module:ui/search/text/searchtextview~SearchTextView} class.\n   *\n   * @param locale The localization services instance.\n   * @param config Configuration of the view.\n   */\n  constructor(locale, config) {\n    super(locale);\n    this._config = config;\n    this.filteredView = config.filteredView;\n    this.queryView = this._createSearchTextQueryView();\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this.resultsView = new SearchResultsView(locale);\n    this.children = this.createCollection();\n    this.focusableChildren = this.createCollection([this.queryView, this.resultsView]);\n    this.set(\"isEnabled\", true);\n    this.set(\"resultsCount\", 0);\n    this.set(\"totalItemsCount\", 0);\n    if (config.infoView && config.infoView.instance) {\n      this.infoView = config.infoView.instance;\n    } else {\n      this.infoView = new SearchInfoView();\n      this._enableDefaultInfoViewBehavior();\n      this.on(\"render\", () => {\n        this.search(\"\");\n      });\n    }\n    this.resultsView.children.addMany([this.infoView, this.filteredView]);\n    this.focusCycler = new FocusCycler({\n      focusables: this.focusableChildren,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    this.on(\"search\", (evt, { resultsCount, totalItemsCount }) => {\n      this.resultsCount = resultsCount;\n      this.totalItemsCount = totalItemsCount;\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-search\",\n          config.class || null\n        ],\n        tabindex: \"-1\"\n      },\n      children: this.children\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.children.addMany([\n      this.queryView,\n      this.resultsView\n    ]);\n    const stopPropagation = (data) => data.stopPropagation();\n    for (const focusableChild of this.focusableChildren) {\n      this.focusTracker.add(focusableChild.element);\n    }\n    this.keystrokes.listenTo(this.element);\n    this.keystrokes.set(\"arrowright\", stopPropagation);\n    this.keystrokes.set(\"arrowleft\", stopPropagation);\n    this.keystrokes.set(\"arrowup\", stopPropagation);\n    this.keystrokes.set(\"arrowdown\", stopPropagation);\n  }\n  /**\n   * Focuses the {@link #queryView}.\n   */\n  focus() {\n    this.queryView.focus();\n  }\n  /**\n   * Resets the component to its initial state.\n   */\n  reset() {\n    this.queryView.reset();\n    this.search(\"\");\n  }\n  /**\n   * Searches the {@link #filteredView} for the given query.\n   *\n   * @internal\n   * @param query The search query string.\n   */\n  search(query) {\n    const regExp = query ? new RegExp(escapeRegExp_default(query), \"ig\") : null;\n    const filteringResults = this.filteredView.filter(regExp);\n    this.fire(\"search\", { query, ...filteringResults });\n  }\n  /**\n   * Creates a search field view based on configured creator..\n   */\n  _createSearchTextQueryView() {\n    const queryView = new SearchTextQueryView(this.locale, this._config.queryView);\n    this.listenTo(queryView.fieldView, \"input\", () => {\n      this.search(queryView.fieldView.element.value);\n    });\n    queryView.on(\"reset\", () => this.reset());\n    queryView.bind(\"isEnabled\").to(this);\n    return queryView;\n  }\n  /**\n   * Initializes the default {@link #infoView} behavior with default text labels when no custom info view\n   * was specified in the view config.\n   */\n  _enableDefaultInfoViewBehavior() {\n    const t = this.locale.t;\n    const infoView = this.infoView;\n    this.on(\"search\", (evt, data) => {\n      if (!data.resultsCount) {\n        const defaultTextConfig = this._config.infoView && this._config.infoView.text;\n        let primaryText, secondaryText;\n        if (data.totalItemsCount) {\n          if (defaultTextConfig && defaultTextConfig.notFound) {\n            primaryText = defaultTextConfig.notFound.primary;\n            secondaryText = defaultTextConfig.notFound.secondary;\n          } else {\n            primaryText = t(\"No results found\");\n            secondaryText = \"\";\n          }\n        } else {\n          if (defaultTextConfig && defaultTextConfig.noSearchableItems) {\n            primaryText = defaultTextConfig.noSearchableItems.primary;\n            secondaryText = defaultTextConfig.noSearchableItems.secondary;\n          } else {\n            primaryText = t(\"No searchable items\");\n            secondaryText = \"\";\n          }\n        }\n        infoView.set({\n          primaryText: normalizeInfoText(primaryText, data),\n          secondaryText: normalizeInfoText(secondaryText, data),\n          isVisible: true\n        });\n      } else {\n        infoView.set({\n          isVisible: false\n        });\n      }\n    });\n    function normalizeInfoText(text, { query, resultsCount, totalItemsCount }) {\n      return typeof text === \"function\" ? text(query, resultsCount, totalItemsCount) : text;\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-ui/src/autocomplete/autocompleteview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/autocomplete/autocomplete.css\";\nvar AutocompleteView = class _AutocompleteView extends SearchTextView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale, config) {\n    super(locale, config);\n    this._config = config;\n    const toPx8 = toUnit(\"px\");\n    this.extendTemplate({\n      attributes: {\n        class: [\"ck-autocomplete\"]\n      }\n    });\n    const bindResultsView = this.resultsView.bindTemplate;\n    this.resultsView.set(\"isVisible\", false);\n    this.resultsView.set(\"_position\", \"s\");\n    this.resultsView.set(\"_width\", 0);\n    this.resultsView.extendTemplate({\n      attributes: {\n        class: [\n          bindResultsView.if(\"isVisible\", \"ck-hidden\", (value) => !value),\n          bindResultsView.to(\"_position\", (value) => `ck-search__results_${value}`)\n        ],\n        style: {\n          width: bindResultsView.to(\"_width\", toPx8)\n        }\n      }\n    });\n    this.focusTracker.on(\"change:isFocused\", (evt, name, isFocused) => {\n      this._updateResultsVisibility();\n      if (isFocused) {\n        this.resultsView.element.scrollTop = 0;\n      } else if (config.resetOnBlur) {\n        this.queryView.reset();\n      }\n    });\n    this.on(\"search\", () => {\n      this._updateResultsVisibility();\n      this._updateResultsViewWidthAndPosition();\n    });\n    this.keystrokes.set(\"esc\", (evt, cancel) => {\n      if (!this.resultsView.isVisible) {\n        return;\n      }\n      this.queryView.focus();\n      this.resultsView.isVisible = false;\n      cancel();\n    });\n    this.listenTo(global_default.document, \"scroll\", () => {\n      this._updateResultsViewWidthAndPosition();\n    });\n    this.on(\"change:isEnabled\", () => {\n      this._updateResultsVisibility();\n    });\n    this.filteredView.on(\"execute\", (evt, { value }) => {\n      this.focus();\n      this.reset();\n      this.queryView.fieldView.value = this.queryView.fieldView.element.value = value;\n      this.resultsView.isVisible = false;\n    });\n    this.resultsView.on(\"change:isVisible\", () => {\n      this._updateResultsViewWidthAndPosition();\n    });\n  }\n  /**\n   * Updates the position of the results view on demand.\n   */\n  _updateResultsViewWidthAndPosition() {\n    if (!this.resultsView.isVisible) {\n      return;\n    }\n    this.resultsView._width = new Rect(this.queryView.fieldView.element).width;\n    const optimalResultsPosition = _AutocompleteView._getOptimalPosition({\n      element: this.resultsView.element,\n      target: this.queryView.element,\n      fitInViewport: true,\n      positions: _AutocompleteView.defaultResultsPositions\n    });\n    this.resultsView._position = optimalResultsPosition ? optimalResultsPosition.name : \"s\";\n  }\n  /**\n   * Updates the visibility of the results view on demand.\n   */\n  _updateResultsVisibility() {\n    const queryMinChars = typeof this._config.queryMinChars === \"undefined\" ? 0 : this._config.queryMinChars;\n    const queryLength = this.queryView.fieldView.element.value.length;\n    this.resultsView.isVisible = this.focusTracker.isFocused && this.isEnabled && queryLength >= queryMinChars;\n  }\n};\nAutocompleteView.defaultResultsPositions = [\n  (fieldRect) => {\n    return {\n      top: fieldRect.bottom,\n      left: fieldRect.left,\n      name: \"s\"\n    };\n  },\n  (fieldRect, resultsRect) => {\n    return {\n      top: fieldRect.top - resultsRect.height,\n      left: fieldRect.left,\n      name: \"n\"\n    };\n  }\n];\nAutocompleteView._getOptimalPosition = getOptimalPosition;\n\n// node_modules/@ckeditor/ckeditor5-ui/src/highlightedtext/highlightedtextview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/highlightedtext/highlightedtext.css\";\n\n// node_modules/@ckeditor/ckeditor5-ui/src/spinner/spinnerview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/spinner/spinner.css\";\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/balloon/balloontoolbar.js\nvar toPx5 = toUnit(\"px\");\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/block/blockbuttonview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/toolbar/blocktoolbar.css\";\nvar toPx6 = toUnit(\"px\");\n\n// node_modules/@ckeditor/ckeditor5-ui/src/toolbar/block/blocktoolbar.js\nvar toPx7 = toUnit(\"px\");\n\nexport {\n  clickOutsideHandler,\n  CssTransitionDisablerMixin,\n  submitHandler,\n  ViewCollection,\n  View,\n  Template,\n  iconview_default,\n  ButtonView,\n  SwitchButtonView,\n  CollapsibleView,\n  getLocalizedColorOptions,\n  normalizeColorOptions,\n  LabeledFieldView,\n  DropdownButtonView,\n  FocusCycler,\n  normalizeToolbarConfig,\n  ToolbarView,\n  SplitButtonView,\n  createDropdown,\n  addToolbarToDropdown,\n  addListToDropdown,\n  focusChildOnDropdownOpen,\n  createLabeledInputText,\n  ColorSelectorView,\n  dialogview_default,\n  balloonpanelview_default,\n  EditorUI,\n  BoxedEditorUIView,\n  InlineEditableUIView,\n  Notification,\n  Model,\n  ContextualBalloon,\n  StickyPanelView\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/csstransitiondisablermixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/viewcollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/template.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/view.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/icon/iconview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/button/buttonlabelview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/button/buttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dropdown/button/dropdownbuttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/normalizetoolbarconfig.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/focuscycler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/toolbarseparatorview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/toolbarlinebreakview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/preventdefault.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dropdown/dropdownpanelview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dropdown/dropdownview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/list/listitemview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/label/labelview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/list/listseparatorview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/list/listitemgroupview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/list/listview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dropdown/button/splitbuttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/button/switchbuttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dropdown/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/toolbarview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/formheader/formheaderview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/draggableviewmixin.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dialog/dialogactionsview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dialog/dialogcontentview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dialog/dialogview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/panel/balloon/balloonpanelview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/componentfactory.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/tooltipmanager.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editorui/poweredby.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-ui/src/arialiveannouncer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editorui/editorui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editorui/bodycollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editorui/editoruiview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editorui/boxed/boxededitoruiview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editableui/editableuiview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/editableui/inline/inlineeditableuiview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/notification/notification.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/model.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/panel/balloon/contextualballoon.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/panel/sticky/stickypanelview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/injectcsstransitiondisabler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/submithandler.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/bindings/addkeyboardhandlingforgrid.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/collapsible/collapsibleview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorgrid/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorgrid/colortileview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorgrid/colorgridview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorpicker/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/labeledfield/labeledfieldview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/input/inputbase.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/input/inputview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/inputtext/inputtextview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/inputnumber/inputnumberview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/textarea/textareaview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/labeledfield/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorpicker/colorpickerview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-ui/src/colorselector/documentcolorcollection.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorselector/colorgridsfragmentview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorselector/colorpickerfragmentview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/colorselector/colorselectorview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/dialog/dialog.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/iframe/iframeview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/search/text/searchtextqueryview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/search/searchinfoview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/search/searchresultsview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/search/text/searchtextview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/autocomplete/autocompleteview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/highlightedtext/highlightedtextview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/spinner/spinnerview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/balloon/balloontoolbar.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/block/blockbuttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/toolbar/block/blocktoolbar.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-ui/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-CCHBLTQG.js.map\n","import \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  BoxedEditorUIView,\n  EditorUI,\n  InlineEditableUIView,\n  StickyPanelView,\n  ToolbarView,\n  dialogview_default,\n  normalizeToolbarConfig\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  Context,\n  DataApiMixin,\n  Editor,\n  ElementApiMixin,\n  ElementReplacer,\n  Rect,\n  attachToForm,\n  cloneDeepWith_default,\n  enablePlaceholder,\n  getDataFromElement,\n  isElement_default,\n  throttle_default\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditorui.js\nvar ClassicEditorUI = class extends EditorUI {\n  /**\n   * Creates an instance of the classic editor UI class.\n   *\n   * @param editor The editor instance.\n   * @param view The view of the UI.\n   */\n  constructor(editor, view) {\n    super(editor);\n    this.view = view;\n    this._toolbarConfig = normalizeToolbarConfig(editor.config.get(\"toolbar\"));\n    this._elementReplacer = new ElementReplacer();\n    this.listenTo(editor.editing.view, \"scrollToTheSelection\", this._handleScrollToTheSelectionWithStickyPanel.bind(this));\n  }\n  /**\n   * @inheritDoc\n   */\n  get element() {\n    return this.view.element;\n  }\n  /**\n   * Initializes the UI.\n   *\n   * @param replacementElement The DOM element that will be the source for the created editor.\n   */\n  init(replacementElement) {\n    const editor = this.editor;\n    const view = this.view;\n    const editingView = editor.editing.view;\n    const editable = view.editable;\n    const editingRoot = editingView.document.getRoot();\n    editable.name = editingRoot.rootName;\n    view.render();\n    const editableElement = editable.element;\n    this.setEditableElement(editable.name, editableElement);\n    view.editable.bind(\"isFocused\").to(this.focusTracker);\n    editingView.attachDomRoot(editableElement);\n    if (replacementElement) {\n      this._elementReplacer.replace(replacementElement, this.element);\n    }\n    this._initPlaceholder();\n    this._initToolbar();\n    this._initDialogPluginIntegration();\n    this.fire(\"ready\");\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    const view = this.view;\n    const editingView = this.editor.editing.view;\n    this._elementReplacer.restore();\n    editingView.detachDomRoot(view.editable.name);\n    view.destroy();\n  }\n  /**\n   * Initializes the editor toolbar.\n   */\n  _initToolbar() {\n    const view = this.view;\n    view.stickyPanel.bind(\"isActive\").to(this.focusTracker, \"isFocused\");\n    view.stickyPanel.limiterElement = view.element;\n    view.stickyPanel.bind(\"viewportTopOffset\").to(this, \"viewportOffset\", ({ top }) => top || 0);\n    view.toolbar.fillFromConfig(this._toolbarConfig, this.componentFactory);\n    this.addToolbar(view.toolbar);\n  }\n  /**\n   * Enable the placeholder text on the editing root.\n   */\n  _initPlaceholder() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    const editingRoot = editingView.document.getRoot();\n    const sourceElement = editor.sourceElement;\n    let placeholderText;\n    const placeholder = editor.config.get(\"placeholder\");\n    if (placeholder) {\n      placeholderText = typeof placeholder === \"string\" ? placeholder : placeholder[this.view.editable.name];\n    }\n    if (!placeholderText && sourceElement && sourceElement.tagName.toLowerCase() === \"textarea\") {\n      placeholderText = sourceElement.getAttribute(\"placeholder\");\n    }\n    if (placeholderText) {\n      editingRoot.placeholder = placeholderText;\n    }\n    enablePlaceholder({\n      view: editingView,\n      element: editingRoot,\n      isDirectHost: false,\n      keepOnFocus: true\n    });\n  }\n  /**\n   * Provides an integration between the sticky toolbar and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.\n   * It allows the UI-agnostic engine method to consider the geometry of the\n   * {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#stickyPanel} that pins to the\n   * edge of the viewport and can obscure the user caret after scrolling the window.\n   *\n   * @param evt The `scrollToTheSelection` event info.\n   * @param data The payload carried by the `scrollToTheSelection` event.\n   * @param originalArgs The original arguments passed to `scrollViewportToShowTarget()` method (see implementation to learn more).\n   */\n  _handleScrollToTheSelectionWithStickyPanel(evt, data, originalArgs) {\n    const stickyPanel = this.view.stickyPanel;\n    if (stickyPanel.isSticky) {\n      const stickyPanelHeight = new Rect(stickyPanel.element).height;\n      data.viewportOffset.top += stickyPanelHeight;\n    } else {\n      const scrollViewportOnPanelGettingSticky = () => {\n        this.editor.editing.view.scrollToTheSelection(originalArgs);\n      };\n      this.listenTo(stickyPanel, \"change:isSticky\", scrollViewportOnPanelGettingSticky);\n      setTimeout(() => {\n        this.stopListening(stickyPanel, \"change:isSticky\", scrollViewportOnPanelGettingSticky);\n      }, 20);\n    }\n  }\n  /**\n   * Provides an integration between the sticky toolbar and {@link module:ui/dialog/dialog the Dialog plugin}.\n   *\n   * It moves the dialog down to ensure that the\n   * {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#stickyPanel sticky panel}\n   * used by the editor UI will not get obscured by the dialog when the dialog uses one of its automatic positions.\n   */\n  _initDialogPluginIntegration() {\n    if (!this.editor.plugins.has(\"Dialog\")) {\n      return;\n    }\n    const stickyPanel = this.view.stickyPanel;\n    const dialogPlugin = this.editor.plugins.get(\"Dialog\");\n    dialogPlugin.on(\"show\", () => {\n      const dialogView = dialogPlugin.view;\n      dialogView.on(\"moveTo\", (evt, data) => {\n        if (!stickyPanel.isSticky || dialogView.wasMoved) {\n          return;\n        }\n        const stickyPanelContentRect = new Rect(stickyPanel.contentPanelElement);\n        if (data[1] < stickyPanelContentRect.bottom + dialogview_default.defaultOffset) {\n          data[1] = stickyPanelContentRect.bottom + dialogview_default.defaultOffset;\n        }\n      }, { priority: \"high\" });\n    }, { priority: \"low\" });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditoruiview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-editor-classic/theme/classiceditor.css\";\nvar ClassicEditorUIView = class extends BoxedEditorUIView {\n  /**\n   * Creates an instance of the classic editor UI view.\n   *\n   * @param locale The {@link module:core/editor/editor~Editor#locale} instance.\n   * @param editingView The editing view instance this view is related to.\n   * @param options Configuration options for the view instance.\n   * @param options.shouldToolbarGroupWhenFull When set `true` enables automatic items grouping\n   * in the main {@link module:editor-classic/classiceditoruiview~ClassicEditorUIView#toolbar toolbar}.\n   * See {@link module:ui/toolbar/toolbarview~ToolbarOptions#shouldGroupWhenFull} to learn more.\n   */\n  constructor(locale, editingView, options = {}) {\n    super(locale);\n    this.stickyPanel = new StickyPanelView(locale);\n    this.toolbar = new ToolbarView(locale, {\n      shouldGroupWhenFull: options.shouldToolbarGroupWhenFull\n    });\n    this.editable = new InlineEditableUIView(locale, editingView);\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.stickyPanel.content.add(this.toolbar);\n    this.top.add(this.stickyPanel);\n    this.main.add(this.editable);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-watchdog/src/watchdog.js\nvar Watchdog = class {\n  /**\n   * @param {module:watchdog/watchdog~WatchdogConfig} config The watchdog plugin configuration.\n   */\n  constructor(config) {\n    this.crashes = [];\n    this.state = \"initializing\";\n    this._now = Date.now;\n    this.crashes = [];\n    this._crashNumberLimit = typeof config.crashNumberLimit === \"number\" ? config.crashNumberLimit : 3;\n    this._minimumNonErrorTimePeriod = typeof config.minimumNonErrorTimePeriod === \"number\" ? config.minimumNonErrorTimePeriod : 5e3;\n    this._boundErrorHandler = (evt) => {\n      const error = \"error\" in evt ? evt.error : evt.reason;\n      if (error instanceof Error) {\n        this._handleError(error, evt);\n      }\n    };\n    this._listeners = {};\n    if (!this._restart) {\n      throw new Error(\"The Watchdog class was split into the abstract `Watchdog` class and the `EditorWatchdog` class. Please, use `EditorWatchdog` if you have used the `Watchdog` class previously.\");\n    }\n  }\n  /**\n   * Destroys the watchdog and releases the resources.\n   */\n  destroy() {\n    this._stopErrorHandling();\n    this._listeners = {};\n  }\n  /**\n   * Starts listening to a specific event name by registering a callback that will be executed\n   * whenever an event with a given name fires.\n   *\n   * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n   *\n   * @param eventName The event name.\n   * @param callback A callback which will be added to event listeners.\n   */\n  on(eventName, callback) {\n    if (!this._listeners[eventName]) {\n      this._listeners[eventName] = [];\n    }\n    this._listeners[eventName].push(callback);\n  }\n  /**\n   * Stops listening to the specified event name by removing the callback from event listeners.\n   *\n   * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n   *\n   * @param eventName The event name.\n   * @param callback A callback which will be removed from event listeners.\n   */\n  off(eventName, callback) {\n    this._listeners[eventName] = this._listeners[eventName].filter((cb) => cb !== callback);\n  }\n  /**\n   * Fires an event with a given event name and arguments.\n   *\n   * Note that this method differs from the CKEditor 5's default `EventEmitterMixin` implementation.\n   */\n  _fire(eventName, ...args) {\n    const callbacks = this._listeners[eventName] || [];\n    for (const callback of callbacks) {\n      callback.apply(this, [null, ...args]);\n    }\n  }\n  /**\n   * Starts error handling by attaching global error handlers.\n   */\n  _startErrorHandling() {\n    window.addEventListener(\"error\", this._boundErrorHandler);\n    window.addEventListener(\"unhandledrejection\", this._boundErrorHandler);\n  }\n  /**\n   * Stops error handling by detaching global error handlers.\n   */\n  _stopErrorHandling() {\n    window.removeEventListener(\"error\", this._boundErrorHandler);\n    window.removeEventListener(\"unhandledrejection\", this._boundErrorHandler);\n  }\n  /**\n   * Checks if an error comes from the watched item and restarts it.\n   * It reacts to {@link module:utils/ckeditorerror~CKEditorError `CKEditorError` errors} only.\n   *\n   * @fires error\n   * @param error Error.\n   * @param evt An error event.\n   */\n  _handleError(error, evt) {\n    if (this._shouldReactToError(error)) {\n      this.crashes.push({\n        message: error.message,\n        stack: error.stack,\n        // `evt.filename`, `evt.lineno` and `evt.colno` are available only in ErrorEvent events\n        filename: evt instanceof ErrorEvent ? evt.filename : void 0,\n        lineno: evt instanceof ErrorEvent ? evt.lineno : void 0,\n        colno: evt instanceof ErrorEvent ? evt.colno : void 0,\n        date: this._now()\n      });\n      const causesRestart = this._shouldRestart();\n      this.state = \"crashed\";\n      this._fire(\"stateChange\");\n      this._fire(\"error\", { error, causesRestart });\n      if (causesRestart) {\n        this._restart();\n      } else {\n        this.state = \"crashedPermanently\";\n        this._fire(\"stateChange\");\n      }\n    }\n  }\n  /**\n   * Checks whether an error should be handled by the watchdog.\n   *\n   * @param error An error that was caught by the error handling process.\n   */\n  _shouldReactToError(error) {\n    return error.is && error.is(\"CKEditorError\") && error.context !== void 0 && // In some cases the watched item should not be restarted - e.g. during the item initialization.\n    // That's why the `null` was introduced as a correct error context which does cause restarting.\n    error.context !== null && // Do not react to errors if the watchdog is in states other than `ready`.\n    this.state === \"ready\" && this._isErrorComingFromThisItem(error);\n  }\n  /**\n   * Checks if the watchdog should restart the underlying item.\n   */\n  _shouldRestart() {\n    if (this.crashes.length <= this._crashNumberLimit) {\n      return true;\n    }\n    const lastErrorTime = this.crashes[this.crashes.length - 1].date;\n    const firstMeaningfulErrorTime = this.crashes[this.crashes.length - 1 - this._crashNumberLimit].date;\n    const averageNonErrorTimePeriod = (lastErrorTime - firstMeaningfulErrorTime) / this._crashNumberLimit;\n    return averageNonErrorTimePeriod > this._minimumNonErrorTimePeriod;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-watchdog/src/utils/getsubnodes.js\nfunction getSubNodes(head, excludedProperties = /* @__PURE__ */ new Set()) {\n  const nodes = [head];\n  const subNodes = /* @__PURE__ */ new Set();\n  let nodeIndex = 0;\n  while (nodes.length > nodeIndex) {\n    const node = nodes[nodeIndex++];\n    if (subNodes.has(node) || !shouldNodeBeIncluded(node) || excludedProperties.has(node)) {\n      continue;\n    }\n    subNodes.add(node);\n    if (Symbol.iterator in node) {\n      try {\n        for (const n of node) {\n          nodes.push(n);\n        }\n      } catch (err) {\n      }\n    } else {\n      for (const key in node) {\n        if (key === \"defaultValue\") {\n          continue;\n        }\n        nodes.push(node[key]);\n      }\n    }\n  }\n  return subNodes;\n}\nfunction shouldNodeBeIncluded(node) {\n  const type = Object.prototype.toString.call(node);\n  const typeOfNode = typeof node;\n  return !(typeOfNode === \"number\" || typeOfNode === \"boolean\" || typeOfNode === \"string\" || typeOfNode === \"symbol\" || typeOfNode === \"function\" || type === \"[object Date]\" || type === \"[object RegExp]\" || type === \"[object Module]\" || node === void 0 || node === null || // This flag is meant to exclude singletons shared across editor instances. So when an error is thrown in one editor,\n  // the other editors connected through the reference to the same singleton are not restarted. This is a temporary workaround\n  // until a better solution is found.\n  // More in https://github.com/ckeditor/ckeditor5/issues/12292.\n  node._watchdogExcluded || // Skip native DOM objects, e.g. Window, nodes, events, etc.\n  node instanceof EventTarget || node instanceof Event);\n}\n\n// node_modules/@ckeditor/ckeditor5-watchdog/src/utils/areconnectedthroughproperties.js\nfunction areConnectedThroughProperties(target1, target2, excludedNodes = /* @__PURE__ */ new Set()) {\n  if (target1 === target2 && isObject(target1)) {\n    return true;\n  }\n  const subNodes1 = getSubNodes(target1, excludedNodes);\n  const subNodes2 = getSubNodes(target2, excludedNodes);\n  for (const node of subNodes1) {\n    if (subNodes2.has(node)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isObject(structure) {\n  return typeof structure === \"object\" && structure !== null;\n}\n\n// node_modules/@ckeditor/ckeditor5-watchdog/src/editorwatchdog.js\nvar EditorWatchdog = class extends Watchdog {\n  /**\n   * @param Editor The editor class.\n   * @param watchdogConfig The watchdog plugin configuration.\n   */\n  constructor(Editor2, watchdogConfig = {}) {\n    super(watchdogConfig);\n    this._editor = null;\n    this._initUsingData = true;\n    this._editables = {};\n    this._throttledSave = throttle_default(this._save.bind(this), typeof watchdogConfig.saveInterval === \"number\" ? watchdogConfig.saveInterval : 5e3);\n    if (Editor2) {\n      this._creator = (elementOrData, config) => Editor2.create(elementOrData, config);\n    }\n    this._destructor = (editor) => editor.destroy();\n  }\n  /**\n   * The current editor instance.\n   */\n  get editor() {\n    return this._editor;\n  }\n  /**\n   * @internal\n   */\n  get _item() {\n    return this._editor;\n  }\n  /**\n   * Sets the function that is responsible for the editor creation.\n   * It expects a function that should return a promise.\n   *\n   * ```ts\n   * watchdog.setCreator( ( element, config ) => ClassicEditor.create( element, config ) );\n   * ```\n   */\n  setCreator(creator) {\n    this._creator = creator;\n  }\n  /**\n   * Sets the function that is responsible for the editor destruction.\n   * Overrides the default destruction function, which destroys only the editor instance.\n   * It expects a function that should return a promise or `undefined`.\n   *\n   * ```ts\n   * watchdog.setDestructor( editor => {\n   * \t// Do something before the editor is destroyed.\n   *\n   * \treturn editor\n   * \t\t.destroy()\n   * \t\t.then( () => {\n   * \t\t\t// Do something after the editor is destroyed.\n   * \t\t} );\n   * } );\n   * ```\n   */\n  setDestructor(destructor) {\n    this._destructor = destructor;\n  }\n  /**\n   * Restarts the editor instance. This method is called whenever an editor error occurs. It fires the `restart` event and changes\n   * the state to `initializing`.\n   *\n   * @fires restart\n   */\n  _restart() {\n    return Promise.resolve().then(() => {\n      this.state = \"initializing\";\n      this._fire(\"stateChange\");\n      return this._destroy();\n    }).catch((err) => {\n      console.error(\"An error happened during the editor destroying.\", err);\n    }).then(() => {\n      const existingRoots = {};\n      const lazyRoots = [];\n      const oldRootsAttributes = this._config.rootsAttributes || {};\n      const rootsAttributes = {};\n      for (const [rootName, rootData] of Object.entries(this._data.roots)) {\n        if (rootData.isLoaded) {\n          existingRoots[rootName] = \"\";\n          rootsAttributes[rootName] = oldRootsAttributes[rootName] || {};\n        } else {\n          lazyRoots.push(rootName);\n        }\n      }\n      const updatedConfig = {\n        ...this._config,\n        extraPlugins: this._config.extraPlugins || [],\n        lazyRoots,\n        rootsAttributes,\n        _watchdogInitialData: this._data\n      };\n      delete updatedConfig.initialData;\n      updatedConfig.extraPlugins.push(EditorWatchdogInitPlugin);\n      if (this._initUsingData) {\n        return this.create(existingRoots, updatedConfig, updatedConfig.context);\n      } else {\n        if (isElement_default(this._elementOrData)) {\n          return this.create(this._elementOrData, updatedConfig, updatedConfig.context);\n        } else {\n          return this.create(this._editables, updatedConfig, updatedConfig.context);\n        }\n      }\n    }).then(() => {\n      this._fire(\"restart\");\n    });\n  }\n  /**\n   * Creates the editor instance and keeps it running, using the defined creator and destructor.\n   *\n   * @param elementOrData The editor source element or the editor data.\n   * @param config The editor configuration.\n   * @param context A context for the editor.\n   */\n  create(elementOrData = this._elementOrData, config = this._config, context) {\n    return Promise.resolve().then(() => {\n      super._startErrorHandling();\n      this._elementOrData = elementOrData;\n      this._initUsingData = typeof elementOrData == \"string\" || Object.keys(elementOrData).length > 0 && typeof Object.values(elementOrData)[0] == \"string\";\n      this._config = this._cloneEditorConfiguration(config) || {};\n      this._config.context = context;\n      return this._creator(elementOrData, this._config);\n    }).then((editor) => {\n      this._editor = editor;\n      editor.model.document.on(\"change:data\", this._throttledSave);\n      this._lastDocumentVersion = editor.model.document.version;\n      this._data = this._getData();\n      if (!this._initUsingData) {\n        this._editables = this._getEditables();\n      }\n      this.state = \"ready\";\n      this._fire(\"stateChange\");\n    });\n  }\n  /**\n   * Destroys the watchdog and the current editor instance. It fires the callback\n   * registered in {@link #setDestructor `setDestructor()`} and uses it to destroy the editor instance.\n   * It also sets the state to `destroyed`.\n   */\n  destroy() {\n    return Promise.resolve().then(() => {\n      this.state = \"destroyed\";\n      this._fire(\"stateChange\");\n      super.destroy();\n      return this._destroy();\n    });\n  }\n  _destroy() {\n    return Promise.resolve().then(() => {\n      this._stopErrorHandling();\n      this._throttledSave.cancel();\n      const editor = this._editor;\n      this._editor = null;\n      editor.model.document.off(\"change:data\", this._throttledSave);\n      return this._destructor(editor);\n    });\n  }\n  /**\n   * Saves the editor data, so it can be restored after the crash even if the data cannot be fetched at\n   * the moment of the crash.\n   */\n  _save() {\n    const version = this._editor.model.document.version;\n    try {\n      this._data = this._getData();\n      if (!this._initUsingData) {\n        this._editables = this._getEditables();\n      }\n      this._lastDocumentVersion = version;\n    } catch (err) {\n      console.error(err, \"An error happened during restoring editor data. Editor will be restored from the previously saved data.\");\n    }\n  }\n  /**\n   * @internal\n   */\n  _setExcludedProperties(props) {\n    this._excludedProps = props;\n  }\n  /**\n   * Gets all data that is required to reinitialize editor instance.\n   */\n  _getData() {\n    const editor = this._editor;\n    const roots = editor.model.document.roots.filter((root) => root.isAttached() && root.rootName != \"$graveyard\");\n    const { plugins } = editor;\n    const commentsRepository = plugins.has(\"CommentsRepository\") && plugins.get(\"CommentsRepository\");\n    const trackChanges = plugins.has(\"TrackChanges\") && plugins.get(\"TrackChanges\");\n    const data = {\n      roots: {},\n      markers: {},\n      commentThreads: JSON.stringify([]),\n      suggestions: JSON.stringify([])\n    };\n    roots.forEach((root) => {\n      data.roots[root.rootName] = {\n        content: JSON.stringify(Array.from(root.getChildren())),\n        attributes: JSON.stringify(Array.from(root.getAttributes())),\n        isLoaded: root._isLoaded\n      };\n    });\n    for (const marker of editor.model.markers) {\n      if (!marker._affectsData) {\n        continue;\n      }\n      data.markers[marker.name] = {\n        rangeJSON: marker.getRange().toJSON(),\n        usingOperation: marker._managedUsingOperations,\n        affectsData: marker._affectsData\n      };\n    }\n    if (commentsRepository) {\n      data.commentThreads = JSON.stringify(commentsRepository.getCommentThreads({ toJSON: true, skipNotAttached: true }));\n    }\n    if (trackChanges) {\n      data.suggestions = JSON.stringify(trackChanges.getSuggestions({ toJSON: true, skipNotAttached: true }));\n    }\n    return data;\n  }\n  /**\n   * For each attached model root, returns its HTML editable element (if available).\n   */\n  _getEditables() {\n    const editables = {};\n    for (const rootName of this.editor.model.document.getRootNames()) {\n      const editable = this.editor.ui.getEditableElement(rootName);\n      if (editable) {\n        editables[rootName] = editable;\n      }\n    }\n    return editables;\n  }\n  /**\n   * Traverses the error context and the current editor to find out whether these structures are connected\n   * to each other via properties.\n   *\n   * @internal\n   */\n  _isErrorComingFromThisItem(error) {\n    return areConnectedThroughProperties(this._editor, error.context, this._excludedProps);\n  }\n  /**\n   * Clones the editor configuration.\n   */\n  _cloneEditorConfiguration(config) {\n    return cloneDeepWith_default(config, (value, key) => {\n      if (isElement_default(value)) {\n        return value;\n      }\n      if (key === \"context\") {\n        return value;\n      }\n    });\n  }\n};\nvar EditorWatchdogInitPlugin = class {\n  constructor(editor) {\n    this.editor = editor;\n    this._data = editor.config.get(\"_watchdogInitialData\");\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this.editor.data.on(\"init\", (evt) => {\n      evt.stop();\n      this.editor.model.enqueueChange({ isUndoable: false }, (writer) => {\n        this._restoreCollaborationData();\n        this._restoreEditorData(writer);\n      });\n      this.editor.data.fire(\"ready\");\n    }, { priority: 1e3 - 1 });\n  }\n  /**\n   * Creates a model node (element or text) based on provided JSON.\n   */\n  _createNode(writer, jsonNode) {\n    if (\"name\" in jsonNode) {\n      const element = writer.createElement(jsonNode.name, jsonNode.attributes);\n      if (jsonNode.children) {\n        for (const child of jsonNode.children) {\n          element._appendChild(this._createNode(writer, child));\n        }\n      }\n      return element;\n    } else {\n      return writer.createText(jsonNode.data, jsonNode.attributes);\n    }\n  }\n  /**\n   * Restores the editor by setting the document data, roots attributes and markers.\n   */\n  _restoreEditorData(writer) {\n    const editor = this.editor;\n    Object.entries(this._data.roots).forEach(([rootName, { content, attributes }]) => {\n      const parsedNodes = JSON.parse(content);\n      const parsedAttributes = JSON.parse(attributes);\n      const rootElement = editor.model.document.getRoot(rootName);\n      for (const [key, value] of parsedAttributes) {\n        writer.setAttribute(key, value, rootElement);\n      }\n      for (const child of parsedNodes) {\n        const node = this._createNode(writer, child);\n        writer.insert(node, rootElement, \"end\");\n      }\n    });\n    Object.entries(this._data.markers).forEach(([markerName, markerOptions]) => {\n      const { document } = editor.model;\n      const { rangeJSON: { start, end }, ...options } = markerOptions;\n      const root = document.getRoot(start.root);\n      const startPosition = writer.createPositionFromPath(root, start.path, start.stickiness);\n      const endPosition = writer.createPositionFromPath(root, end.path, end.stickiness);\n      const range = writer.createRange(startPosition, endPosition);\n      writer.addMarker(markerName, {\n        range,\n        ...options\n      });\n    });\n  }\n  /**\n   * Restores the editor collaboration data - comment threads and suggestions.\n   */\n  _restoreCollaborationData() {\n    const parsedCommentThreads = JSON.parse(this._data.commentThreads);\n    const parsedSuggestions = JSON.parse(this._data.suggestions);\n    parsedCommentThreads.forEach((commentThreadData) => {\n      const channelId = this.editor.config.get(\"collaboration.channelId\");\n      const commentsRepository = this.editor.plugins.get(\"CommentsRepository\");\n      if (commentsRepository.hasCommentThread(commentThreadData.threadId)) {\n        const commentThread = commentsRepository.getCommentThread(commentThreadData.threadId);\n        commentThread.remove();\n      }\n      commentsRepository.addCommentThread({ channelId, ...commentThreadData });\n    });\n    parsedSuggestions.forEach((suggestionData) => {\n      const trackChangesEditing = this.editor.plugins.get(\"TrackChangesEditing\");\n      if (trackChangesEditing.hasSuggestion(suggestionData.id)) {\n        const suggestion = trackChangesEditing.getSuggestion(suggestionData.id);\n        suggestion.attributes = suggestionData.attributes;\n      } else {\n        trackChangesEditing.addSuggestionData(suggestionData);\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-watchdog/src/contextwatchdog.js\nvar mainQueueId = Symbol(\"MainQueueId\");\nvar ContextWatchdog = class extends Watchdog {\n  /**\n   * The context watchdog class constructor.\n   *\n   * ```ts\n   * const watchdog = new ContextWatchdog( Context );\n   *\n   * await watchdog.create( contextConfiguration );\n   *\n   * await watchdog.add( item );\n   * ```\n   *\n   * See the {@glink features/watchdog Watchdog feature guide} to learn more how to use this feature.\n   *\n   * @param Context The {@link module:core/context~Context} class.\n   * @param watchdogConfig The watchdog configuration.\n   */\n  constructor(Context2, watchdogConfig = {}) {\n    super(watchdogConfig);\n    this._watchdogs = /* @__PURE__ */ new Map();\n    this._context = null;\n    this._contextProps = /* @__PURE__ */ new Set();\n    this._actionQueues = new ActionQueues();\n    this._watchdogConfig = watchdogConfig;\n    this._creator = (contextConfig) => Context2.create(contextConfig);\n    this._destructor = (context) => context.destroy();\n    this._actionQueues.onEmpty(() => {\n      if (this.state === \"initializing\") {\n        this.state = \"ready\";\n        this._fire(\"stateChange\");\n      }\n    });\n  }\n  /**\n   * Sets the function that is responsible for the context creation.\n   * It expects a function that should return a promise (or `undefined`).\n   *\n   * ```ts\n   * watchdog.setCreator( config => Context.create( config ) );\n   * ```\n   */\n  setCreator(creator) {\n    this._creator = creator;\n  }\n  /**\n   * Sets the function that is responsible for the context destruction.\n   * Overrides the default destruction function, which destroys only the context instance.\n   * It expects a function that should return a promise (or `undefined`).\n   *\n   * ```ts\n   * watchdog.setDestructor( context => {\n   * \t// Do something before the context is destroyed.\n   *\n   * \treturn context\n   * \t\t.destroy()\n   * \t\t.then( () => {\n   * \t\t\t// Do something after the context is destroyed.\n   * \t\t} );\n   * } );\n   * ```\n   */\n  setDestructor(destructor) {\n    this._destructor = destructor;\n  }\n  /**\n   * The context instance. Keep in mind that this property might be changed when the context watchdog restarts,\n   * so do not keep this instance internally. Always operate on the `ContextWatchdog#context` property.\n   */\n  get context() {\n    return this._context;\n  }\n  /**\n   * Initializes the context watchdog. Once it is created, the watchdog takes care about\n   * recreating the context and the provided items, and starts the error handling mechanism.\n   *\n   * ```ts\n   * await watchdog.create( {\n   * \tplugins: []\n   * } );\n   * ```\n   *\n   * @param contextConfig The context configuration. See {@link module:core/context~Context}.\n   */\n  create(contextConfig = {}) {\n    return this._actionQueues.enqueue(mainQueueId, () => {\n      this._contextConfig = contextConfig;\n      return this._create();\n    });\n  }\n  /**\n   * Returns an item instance with the given `itemId`.\n   *\n   * ```ts\n   * const editor1 = watchdog.getItem( 'editor1' );\n   * ```\n   *\n   * @param itemId The item ID.\n   * @returns The item instance or `undefined` if an item with a given ID has not been found.\n   */\n  getItem(itemId) {\n    const watchdog = this._getWatchdog(itemId);\n    return watchdog._item;\n  }\n  /**\n   * Gets the state of the given item. See {@link #state} for a list of available states.\n   *\n   * ```ts\n   * const editor1State = watchdog.getItemState( 'editor1' );\n   * ```\n   *\n   * @param itemId Item ID.\n   * @returns The state of the item.\n   */\n  getItemState(itemId) {\n    const watchdog = this._getWatchdog(itemId);\n    return watchdog.state;\n  }\n  /**\n   * Adds items to the watchdog. Once created, instances of these items will be available using the {@link #getItem} method.\n   *\n   * Items can be passed together as an array of objects:\n   *\n   * ```ts\n   * await watchdog.add( [ {\n   * \tid: 'editor1',\n   * \ttype: 'editor',\n   * \tsourceElementOrData: document.querySelector( '#editor' ),\n   * \tconfig: {\n   * \t\tplugins: [ Essentials, Paragraph, Bold, Italic ],\n   * \t\ttoolbar: [ 'bold', 'italic', 'alignment' ]\n   * \t},\n   * \tcreator: ( element, config ) => ClassicEditor.create( element, config )\n   * } ] );\n   * ```\n   *\n   * Or one by one as objects:\n   *\n   * ```ts\n   * await watchdog.add( {\n   * \tid: 'editor1',\n   * \ttype: 'editor',\n   * \tsourceElementOrData: document.querySelector( '#editor' ),\n   * \tconfig: {\n   * \t\tplugins: [ Essentials, Paragraph, Bold, Italic ],\n   * \t\ttoolbar: [ 'bold', 'italic', 'alignment' ]\n   * \t},\n   * \tcreator: ( element, config ) => ClassicEditor.create( element, config )\n   * ] );\n   * ```\n   *\n   * Then an instance can be retrieved using the {@link #getItem} method:\n   *\n   * ```ts\n   * const editor1 = watchdog.getItem( 'editor1' );\n   * ```\n   *\n   * Note that this method can be called multiple times, but for performance reasons it is better\n   * to pass all items together.\n   *\n   * @param itemConfigurationOrItemConfigurations An item configuration object or an array of item configurations.\n   */\n  add(itemConfigurationOrItemConfigurations) {\n    const itemConfigurations = toArray(itemConfigurationOrItemConfigurations);\n    return Promise.all(itemConfigurations.map((item) => {\n      return this._actionQueues.enqueue(item.id, () => {\n        if (this.state === \"destroyed\") {\n          throw new Error(\"Cannot add items to destroyed watchdog.\");\n        }\n        if (!this._context) {\n          throw new Error(\"Context was not created yet. You should call the `ContextWatchdog#create()` method first.\");\n        }\n        let watchdog;\n        if (this._watchdogs.has(item.id)) {\n          throw new Error(`Item with the given id is already added: '${item.id}'.`);\n        }\n        if (item.type === \"editor\") {\n          watchdog = new EditorWatchdog(null, this._watchdogConfig);\n          watchdog.setCreator(item.creator);\n          watchdog._setExcludedProperties(this._contextProps);\n          if (item.destructor) {\n            watchdog.setDestructor(item.destructor);\n          }\n          this._watchdogs.set(item.id, watchdog);\n          watchdog.on(\"error\", (evt, { error, causesRestart }) => {\n            this._fire(\"itemError\", { itemId: item.id, error });\n            if (!causesRestart) {\n              return;\n            }\n            this._actionQueues.enqueue(item.id, () => new Promise((res) => {\n              const rethrowRestartEventOnce = () => {\n                watchdog.off(\"restart\", rethrowRestartEventOnce);\n                this._fire(\"itemRestart\", { itemId: item.id });\n                res();\n              };\n              watchdog.on(\"restart\", rethrowRestartEventOnce);\n            }));\n          });\n          return watchdog.create(item.sourceElementOrData, item.config, this._context);\n        } else {\n          throw new Error(`Not supported item type: '${item.type}'.`);\n        }\n      });\n    }));\n  }\n  /**\n   * Removes and destroys item(s) with given ID(s).\n   *\n   * ```ts\n   * await watchdog.remove( 'editor1' );\n   * ```\n   *\n   * Or\n   *\n   * ```ts\n   * await watchdog.remove( [ 'editor1', 'editor2' ] );\n   * ```\n   *\n   * @param itemIdOrItemIds Item ID or an array of item IDs.\n   */\n  remove(itemIdOrItemIds) {\n    const itemIds = toArray(itemIdOrItemIds);\n    return Promise.all(itemIds.map((itemId) => {\n      return this._actionQueues.enqueue(itemId, () => {\n        const watchdog = this._getWatchdog(itemId);\n        this._watchdogs.delete(itemId);\n        return watchdog.destroy();\n      });\n    }));\n  }\n  /**\n   * Destroys the context watchdog and all added items.\n   * Once the context watchdog is destroyed, new items cannot be added.\n   *\n   * ```ts\n   * await watchdog.destroy();\n   * ```\n   */\n  destroy() {\n    return this._actionQueues.enqueue(mainQueueId, () => {\n      this.state = \"destroyed\";\n      this._fire(\"stateChange\");\n      super.destroy();\n      return this._destroy();\n    });\n  }\n  /**\n   * Restarts the context watchdog.\n   */\n  _restart() {\n    return this._actionQueues.enqueue(mainQueueId, () => {\n      this.state = \"initializing\";\n      this._fire(\"stateChange\");\n      return this._destroy().catch((err) => {\n        console.error(\"An error happened during destroying the context or items.\", err);\n      }).then(() => this._create()).then(() => this._fire(\"restart\"));\n    });\n  }\n  /**\n   * Initializes the context watchdog.\n   */\n  _create() {\n    return Promise.resolve().then(() => {\n      this._startErrorHandling();\n      return this._creator(this._contextConfig);\n    }).then((context) => {\n      this._context = context;\n      this._contextProps = getSubNodes(this._context);\n      return Promise.all(Array.from(this._watchdogs.values()).map((watchdog) => {\n        watchdog._setExcludedProperties(this._contextProps);\n        return watchdog.create(void 0, void 0, this._context);\n      }));\n    });\n  }\n  /**\n   * Destroys the context instance and all added items.\n   */\n  _destroy() {\n    return Promise.resolve().then(() => {\n      this._stopErrorHandling();\n      const context = this._context;\n      this._context = null;\n      this._contextProps = /* @__PURE__ */ new Set();\n      return Promise.all(Array.from(this._watchdogs.values()).map((watchdog) => watchdog.destroy())).then(() => this._destructor(context));\n    });\n  }\n  /**\n   * Returns the watchdog for a given item ID.\n   *\n   * @param itemId Item ID.\n   */\n  _getWatchdog(itemId) {\n    const watchdog = this._watchdogs.get(itemId);\n    if (!watchdog) {\n      throw new Error(`Item with the given id was not registered: ${itemId}.`);\n    }\n    return watchdog;\n  }\n  /**\n   * Checks whether an error comes from the context instance and not from the item instances.\n   *\n   * @internal\n   */\n  _isErrorComingFromThisItem(error) {\n    for (const watchdog of this._watchdogs.values()) {\n      if (watchdog._isErrorComingFromThisItem(error)) {\n        return false;\n      }\n    }\n    return areConnectedThroughProperties(this._context, error.context);\n  }\n};\nvar ActionQueues = class {\n  constructor() {\n    this._onEmptyCallbacks = [];\n    this._queues = /* @__PURE__ */ new Map();\n    this._activeActions = 0;\n  }\n  /**\n   * Used to register callbacks that will be run when the queue becomes empty.\n   *\n   * @param onEmptyCallback A callback that will be run whenever the queue becomes empty.\n   */\n  onEmpty(onEmptyCallback) {\n    this._onEmptyCallbacks.push(onEmptyCallback);\n  }\n  /**\n   * It adds asynchronous actions (functions) to the proper queue and runs them one by one.\n   *\n   * @param queueId The action queue ID.\n   * @param action A function that should be enqueued.\n   */\n  enqueue(queueId, action) {\n    const isMainAction = queueId === mainQueueId;\n    this._activeActions++;\n    if (!this._queues.get(queueId)) {\n      this._queues.set(queueId, Promise.resolve());\n    }\n    const awaitedActions = isMainAction ? Promise.all(this._queues.values()) : Promise.all([this._queues.get(mainQueueId), this._queues.get(queueId)]);\n    const queueWithAction = awaitedActions.then(action);\n    const nonErrorQueue = queueWithAction.catch(() => {\n    });\n    this._queues.set(queueId, nonErrorQueue);\n    return queueWithAction.finally(() => {\n      this._activeActions--;\n      if (this._queues.get(queueId) === nonErrorQueue && this._activeActions === 0) {\n        this._onEmptyCallbacks.forEach((cb) => cb());\n      }\n    });\n  }\n};\nfunction toArray(elementOrArray) {\n  return Array.isArray(elementOrArray) ? elementOrArray : [elementOrArray];\n}\n\n// node_modules/@ckeditor/ckeditor5-editor-classic/src/classiceditor.js\nvar ClassicEditor = class extends DataApiMixin(ElementApiMixin(Editor)) {\n  /**\n   * Creates an instance of the classic editor.\n   *\n   * **Note:** do not use the constructor to create editor instances. Use the static\n   * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`} method instead.\n   *\n   * @param sourceElementOrData The DOM element that will be the source for the created editor\n   * or the editor's initial data. For more information see\n   * {@link module:editor-classic/classiceditor~ClassicEditor.create `ClassicEditor.create()`}.\n   * @param config The editor configuration.\n   */\n  constructor(sourceElementOrData, config = {}) {\n    if (!isElement(sourceElementOrData) && config.initialData !== void 0) {\n      throw new CKEditorError(\"editor-create-initial-data\", null);\n    }\n    super(config);\n    if (this.config.get(\"initialData\") === void 0) {\n      this.config.set(\"initialData\", getInitialData(sourceElementOrData));\n    }\n    if (isElement(sourceElementOrData)) {\n      this.sourceElement = sourceElementOrData;\n    }\n    this.model.document.createRoot();\n    const shouldToolbarGroupWhenFull = !this.config.get(\"toolbar.shouldNotGroupWhenFull\");\n    const view = new ClassicEditorUIView(this.locale, this.editing.view, {\n      shouldToolbarGroupWhenFull\n    });\n    this.ui = new ClassicEditorUI(this, view);\n    attachToForm(this);\n  }\n  /**\n   * Destroys the editor instance, releasing all resources used by it.\n   *\n   * Updates the original editor element with the data if the\n   * {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy `updateSourceElementOnDestroy`}\n   * configuration option is set to `true`.\n   */\n  destroy() {\n    if (this.sourceElement) {\n      this.updateSourceElement();\n    }\n    this.ui.destroy();\n    return super.destroy();\n  }\n  /**\n   * Creates a new classic editor instance.\n   *\n   * There are three ways how the editor can be initialized.\n   *\n   * # Replacing a DOM element (and loading data from it)\n   *\n   * You can initialize the editor using an existing DOM element:\n   *\n   * ```ts\n   * ClassicEditor\n   * \t.create( document.querySelector( '#editor' ) )\n   * \t.then( editor => {\n   * \t\tconsole.log( 'Editor was initialized', editor );\n   * \t} )\n   * \t.catch( err => {\n   * \t\tconsole.error( err.stack );\n   * \t} );\n   * ```\n   *\n   * The element's content will be used as the editor data and the element will be replaced by the editor UI.\n   *\n   * # Creating a detached editor\n   *\n   * Alternatively, you can initialize the editor by passing the initial data directly as a string.\n   * In this case, the editor will render an element that must be inserted into the DOM:\n   *\n   * ```ts\n   * ClassicEditor\n   * \t.create( '<p>Hello world!</p>' )\n   * \t.then( editor => {\n   * \t\tconsole.log( 'Editor was initialized', editor );\n   *\n   * \t\t// Initial data was provided so the editor UI element needs to be added manually to the DOM.\n   * \t\tdocument.body.appendChild( editor.ui.element );\n   * \t} )\n   * \t.catch( err => {\n   * \t\tconsole.error( err.stack );\n   * \t} );\n   * ```\n   *\n   * This lets you dynamically append the editor to your web page whenever it is convenient for you. You may use this method if your\n   * web page content is generated on the client side and the DOM structure is not ready at the moment when you initialize the editor.\n   *\n   * # Replacing a DOM element (and data provided in `config.initialData`)\n   *\n   * You can also mix these two ways by providing a DOM element to be used and passing the initial data through the configuration:\n   *\n   * ```ts\n   * ClassicEditor\n   * \t.create( document.querySelector( '#editor' ), {\n   * \t\tinitialData: '<h2>Initial data</h2><p>Foo bar.</p>'\n   * \t} )\n   * \t.then( editor => {\n   * \t\tconsole.log( 'Editor was initialized', editor );\n   * \t} )\n   * \t.catch( err => {\n   * \t\tconsole.error( err.stack );\n   * \t} );\n   * ```\n   *\n   * This method can be used to initialize the editor on an existing element with the specified content in case if your integration\n   * makes it difficult to set the content of the source element.\n   *\n   * Note that an error will be thrown if you pass the initial data both as the first parameter and also in the configuration.\n   *\n   * # Configuring the editor\n   *\n   * See the {@link module:core/editor/editorconfig~EditorConfig editor configuration documentation} to learn more about\n   * customizing plugins, toolbar and more.\n   *\n   * # Using the editor from source\n   *\n   * The code samples listed in the previous sections of this documentation assume that you are using an\n   * {@glink installation/getting-started/predefined-builds editor build} (for example – `@ckeditor/ckeditor5-build-classic`).\n   *\n   * If you want to use the classic editor from source (`@ckeditor/ckeditor5-editor-classic/src/classiceditor`),\n   * you need to define the list of\n   * {@link module:core/editor/editorconfig~EditorConfig#plugins plugins to be initialized} and\n   * {@link module:core/editor/editorconfig~EditorConfig#toolbar toolbar items}. Read more about using the editor from\n   * source in the {@glink installation/advanced/alternative-setups/integrating-from-source-webpack dedicated guide}.\n   *\n   * @param sourceElementOrData The DOM element that will be the source for the created editor\n   * or the editor's initial data.\n   *\n   * If a DOM element is passed, its content will be automatically loaded to the editor upon initialization\n   * and the {@link module:editor-classic/classiceditorui~ClassicEditorUI#element editor element} will replace the passed element\n   * in the DOM (the original one will be hidden and the editor will be injected next to it).\n   *\n   * If the {@link module:core/editor/editorconfig~EditorConfig#updateSourceElementOnDestroy updateSourceElementOnDestroy}\n   * option is set to `true`, the editor data will be set back to the original element once the editor is destroyed and when a form,\n   * in which this element is contained, is submitted (if the original element is a `<textarea>`). This ensures seamless integration\n   * with native web forms.\n   *\n   * If the initial data is passed, a detached editor will be created. In this case you need to insert it into the DOM manually.\n   * It is available under the {@link module:editor-classic/classiceditorui~ClassicEditorUI#element `editor.ui.element`} property.\n   *\n   * @param config The editor configuration.\n   * @returns A promise resolved once the editor is ready. The promise resolves with the created editor instance.\n   */\n  static create(sourceElementOrData, config = {}) {\n    return new Promise((resolve) => {\n      const editor = new this(sourceElementOrData, config);\n      resolve(editor.initPlugins().then(() => editor.ui.init(isElement(sourceElementOrData) ? sourceElementOrData : null)).then(() => editor.data.init(editor.config.get(\"initialData\"))).then(() => editor.fire(\"ready\")).then(() => editor));\n    });\n  }\n};\nClassicEditor.Context = Context;\nClassicEditor.EditorWatchdog = EditorWatchdog;\nClassicEditor.ContextWatchdog = ContextWatchdog;\nvar classiceditor_default = ClassicEditor;\nfunction getInitialData(sourceElementOrData) {\n  return isElement(sourceElementOrData) ? getDataFromElement(sourceElementOrData) : sourceElementOrData;\n}\nfunction isElement(value) {\n  return isElement_default(value);\n}\nexport {\n  classiceditor_default as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-editor-classic/src/classiceditorui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-editor-classic/src/classiceditoruiview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/watchdog.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/utils/getsubnodes.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/utils/areconnectedthroughproperties.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-watchdog/src/editorwatchdog.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/contextwatchdog.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-watchdog/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/watchdog.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-editor-classic/src/classiceditor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-editor-classic_src_classiceditor.js.map\n","import \"./chunk-GJCFV3G2.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  ContextPlugin,\n  EmitterMixin,\n  ObservableMixin\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-cloud-services/src/token/token.js\nvar DEFAULT_OPTIONS = { autoRefresh: true };\nvar DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME = 36e5;\nvar Token = class _Token extends ObservableMixin() {\n  /**\n   * Creates `Token` instance.\n   * Method `init` should be called after using the constructor or use `create` method instead.\n   *\n   * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n   * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n   */\n  constructor(tokenUrlOrRefreshToken, options = {}) {\n    super();\n    if (!tokenUrlOrRefreshToken) {\n      throw new CKEditorError(\"token-missing-token-url\", this);\n    }\n    if (options.initValue) {\n      this._validateTokenValue(options.initValue);\n    }\n    this.set(\"value\", options.initValue);\n    if (typeof tokenUrlOrRefreshToken === \"function\") {\n      this._refresh = tokenUrlOrRefreshToken;\n    } else {\n      this._refresh = () => defaultRefreshToken(tokenUrlOrRefreshToken);\n    }\n    this._options = { ...DEFAULT_OPTIONS, ...options };\n  }\n  /**\n   * Initializes the token.\n   */\n  init() {\n    return new Promise((resolve, reject) => {\n      if (!this.value) {\n        this.refreshToken().then(resolve).catch(reject);\n        return;\n      }\n      if (this._options.autoRefresh) {\n        this._registerRefreshTokenTimeout();\n      }\n      resolve(this);\n    });\n  }\n  /**\n   * Refresh token method. Useful in a method form as it can be override in tests.\n   */\n  refreshToken() {\n    return this._refresh().then((value) => {\n      this._validateTokenValue(value);\n      this.set(\"value\", value);\n      if (this._options.autoRefresh) {\n        this._registerRefreshTokenTimeout();\n      }\n      return this;\n    });\n  }\n  /**\n   * Destroys token instance. Stops refreshing.\n   */\n  destroy() {\n    clearTimeout(this._tokenRefreshTimeout);\n  }\n  /**\n   * Checks whether the provided token follows the JSON Web Tokens (JWT) format.\n   *\n   * @param tokenValue The token to validate.\n   */\n  _validateTokenValue(tokenValue) {\n    const isString = typeof tokenValue === \"string\";\n    const isPlainString = !/^\".*\"$/.test(tokenValue);\n    const isJWTFormat = isString && tokenValue.split(\".\").length === 3;\n    if (!(isPlainString && isJWTFormat)) {\n      throw new CKEditorError(\"token-not-in-jwt-format\", this);\n    }\n  }\n  /**\n   * Registers a refresh token timeout for the time taken from token.\n   */\n  _registerRefreshTokenTimeout() {\n    const tokenRefreshTimeoutTime = this._getTokenRefreshTimeoutTime();\n    clearTimeout(this._tokenRefreshTimeout);\n    this._tokenRefreshTimeout = setTimeout(() => {\n      this.refreshToken();\n    }, tokenRefreshTimeoutTime);\n  }\n  /**\n   * Returns token refresh timeout time calculated from expire time in the token payload.\n   *\n   * If the token parse fails or the token payload doesn't contain, the default DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME is returned.\n   */\n  _getTokenRefreshTimeoutTime() {\n    try {\n      const [, binaryTokenPayload] = this.value.split(\".\");\n      const { exp: tokenExpireTime } = JSON.parse(atob(binaryTokenPayload));\n      if (!tokenExpireTime) {\n        return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n      }\n      const tokenRefreshTimeoutTime = Math.floor((tokenExpireTime * 1e3 - Date.now()) / 2);\n      return tokenRefreshTimeoutTime;\n    } catch (err) {\n      return DEFAULT_TOKEN_REFRESH_TIMEOUT_TIME;\n    }\n  }\n  /**\n   * Creates a initialized {@link module:cloud-services/token/token~Token} instance.\n   *\n   * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n   * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n   */\n  static create(tokenUrlOrRefreshToken, options = {}) {\n    const token = new _Token(tokenUrlOrRefreshToken, options);\n    return token.init();\n  }\n};\nfunction defaultRefreshToken(tokenUrl) {\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n    xhr.open(\"GET\", tokenUrl);\n    xhr.addEventListener(\"load\", () => {\n      const statusCode = xhr.status;\n      const xhrResponse = xhr.response;\n      if (statusCode < 200 || statusCode > 299) {\n        return reject(new CKEditorError(\"token-cannot-download-new-token\", null));\n      }\n      return resolve(xhrResponse);\n    });\n    xhr.addEventListener(\"error\", () => reject(new Error(\"Network Error\")));\n    xhr.addEventListener(\"abort\", () => reject(new Error(\"Abort\")));\n    xhr.send();\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-cloud-services/src/uploadgateway/fileuploader.js\nvar BASE64_HEADER_REG_EXP = /^data:(\\S*?);base64,/;\nvar FileUploader = class extends EmitterMixin() {\n  /**\n   * Creates `FileUploader` instance.\n   *\n   * @param fileOrData A blob object or a data string encoded with Base64.\n   * @param token Token used for authentication.\n   * @param apiAddress API address.\n   */\n  constructor(fileOrData, token, apiAddress) {\n    super();\n    if (!fileOrData) {\n      throw new CKEditorError(\"fileuploader-missing-file\", null);\n    }\n    if (!token) {\n      throw new CKEditorError(\"fileuploader-missing-token\", null);\n    }\n    if (!apiAddress) {\n      throw new CKEditorError(\"fileuploader-missing-api-address\", null);\n    }\n    this.file = _isBase64(fileOrData) ? _base64ToBlob(fileOrData) : fileOrData;\n    this._token = token;\n    this._apiAddress = apiAddress;\n  }\n  /**\n   * Registers callback on `progress` event.\n   */\n  onProgress(callback) {\n    this.on(\"progress\", (event, data) => callback(data));\n    return this;\n  }\n  /**\n   * Registers callback on `error` event. Event is called once when error occurs.\n   */\n  onError(callback) {\n    this.once(\"error\", (event, data) => callback(data));\n    return this;\n  }\n  /**\n   * Aborts upload process.\n   */\n  abort() {\n    this.xhr.abort();\n  }\n  /**\n   * Sends XHR request to API.\n   */\n  send() {\n    this._prepareRequest();\n    this._attachXHRListeners();\n    return this._sendRequest();\n  }\n  /**\n   * Prepares XHR request.\n   */\n  _prepareRequest() {\n    const xhr = new XMLHttpRequest();\n    xhr.open(\"POST\", this._apiAddress);\n    xhr.setRequestHeader(\"Authorization\", this._token.value);\n    xhr.responseType = \"json\";\n    this.xhr = xhr;\n  }\n  /**\n   * Attaches listeners to the XHR.\n   */\n  _attachXHRListeners() {\n    const xhr = this.xhr;\n    const onError = (message) => {\n      return () => this.fire(\"error\", message);\n    };\n    xhr.addEventListener(\"error\", onError(\"Network Error\"));\n    xhr.addEventListener(\"abort\", onError(\"Abort\"));\n    if (xhr.upload) {\n      xhr.upload.addEventListener(\"progress\", (event) => {\n        if (event.lengthComputable) {\n          this.fire(\"progress\", {\n            total: event.total,\n            uploaded: event.loaded\n          });\n        }\n      });\n    }\n    xhr.addEventListener(\"load\", () => {\n      const statusCode = xhr.status;\n      const xhrResponse = xhr.response;\n      if (statusCode < 200 || statusCode > 299) {\n        return this.fire(\"error\", xhrResponse.message || xhrResponse.error);\n      }\n    });\n  }\n  /**\n   * Sends XHR request.\n   */\n  _sendRequest() {\n    const formData = new FormData();\n    const xhr = this.xhr;\n    formData.append(\"file\", this.file);\n    return new Promise((resolve, reject) => {\n      xhr.addEventListener(\"load\", () => {\n        const statusCode = xhr.status;\n        const xhrResponse = xhr.response;\n        if (statusCode < 200 || statusCode > 299) {\n          if (xhrResponse.message) {\n            return reject(new CKEditorError(\"fileuploader-uploading-data-failed\", this, { message: xhrResponse.message }));\n          }\n          return reject(xhrResponse.error);\n        }\n        return resolve(xhrResponse);\n      });\n      xhr.addEventListener(\"error\", () => reject(new Error(\"Network Error\")));\n      xhr.addEventListener(\"abort\", () => reject(new Error(\"Abort\")));\n      xhr.send(formData);\n    });\n  }\n};\nfunction _base64ToBlob(base64, sliceSize = 512) {\n  try {\n    const contentType = base64.match(BASE64_HEADER_REG_EXP)[1];\n    const base64Data = atob(base64.replace(BASE64_HEADER_REG_EXP, \"\"));\n    const byteArrays = [];\n    for (let offset = 0; offset < base64Data.length; offset += sliceSize) {\n      const slice = base64Data.slice(offset, offset + sliceSize);\n      const byteNumbers = new Array(slice.length);\n      for (let i = 0; i < slice.length; i++) {\n        byteNumbers[i] = slice.charCodeAt(i);\n      }\n      byteArrays.push(new Uint8Array(byteNumbers));\n    }\n    return new Blob(byteArrays, { type: contentType });\n  } catch (error) {\n    throw new CKEditorError(\"fileuploader-decoding-image-data-error\", null);\n  }\n}\nfunction _isBase64(string) {\n  if (typeof string !== \"string\") {\n    return false;\n  }\n  const match = string.match(BASE64_HEADER_REG_EXP);\n  return !!(match && match.length);\n}\n\n// node_modules/@ckeditor/ckeditor5-cloud-services/src/uploadgateway/uploadgateway.js\nvar UploadGateway = class {\n  /**\n   * Creates `UploadGateway` instance.\n   *\n   * @param token Token used for authentication.\n   * @param apiAddress API address.\n   */\n  constructor(token, apiAddress) {\n    if (!token) {\n      throw new CKEditorError(\"uploadgateway-missing-token\", null);\n    }\n    if (!apiAddress) {\n      throw new CKEditorError(\"uploadgateway-missing-api-address\", null);\n    }\n    this._token = token;\n    this._apiAddress = apiAddress;\n  }\n  /**\n   * Creates a {@link module:cloud-services/uploadgateway/fileuploader~FileUploader} instance that wraps\n   * file upload process. The file is being sent at a time when the\n   * {@link module:cloud-services/uploadgateway/fileuploader~FileUploader#send} method is called.\n   *\n   * ```ts\n   * const token = await Token.create( 'https://token-endpoint' );\n   * new UploadGateway( token, 'https://example.org' )\n   * \t.upload( 'FILE' )\n   * \t.onProgress( ( data ) => console.log( data ) )\n   * \t.send()\n   * \t.then( ( response ) => console.log( response ) );\n   * ```\n   *\n   * @param {Blob|String} fileOrData A blob object or a data string encoded with Base64.\n   * @returns {module:cloud-services/uploadgateway/fileuploader~FileUploader} Returns `FileUploader` instance.\n   */\n  upload(fileOrData) {\n    return new FileUploader(fileOrData, this._token, this._apiAddress);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-cloud-services/src/cloudservicescore.js\nvar CloudServicesCore = class extends ContextPlugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"CloudServicesCore\";\n  }\n  /**\n   * Creates the {@link module:cloud-services/token/token~Token} instance.\n   *\n   * @param tokenUrlOrRefreshToken Endpoint address to download the token or a callback that provides the token. If the\n   * value is a function it has to match the {@link module:cloud-services/token/token~Token#refreshToken} interface.\n   * @param options.initValue Initial value of the token.\n   * @param options.autoRefresh Specifies whether to start the refresh automatically.\n   */\n  createToken(tokenUrlOrRefreshToken, options) {\n    return new Token(tokenUrlOrRefreshToken, options);\n  }\n  /**\n   * Creates the {@link module:cloud-services/uploadgateway/uploadgateway~UploadGateway} instance.\n   *\n   * @param token Token used for authentication.\n   * @param apiAddress API address.\n   */\n  createUploadGateway(token, apiAddress) {\n    return new UploadGateway(token, apiAddress);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-cloud-services/src/cloudservices.js\nvar CloudServices = class extends ContextPlugin {\n  constructor() {\n    super(...arguments);\n    this.token = null;\n    this._tokens = /* @__PURE__ */ new Map();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"CloudServices\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [CloudServicesCore];\n  }\n  /**\n   * @inheritDoc\n   */\n  async init() {\n    const config = this.context.config;\n    const options = config.get(\"cloudServices\") || {};\n    for (const [key, value] of Object.entries(options)) {\n      this[key] = value;\n    }\n    if (!this.tokenUrl) {\n      this.token = null;\n      return;\n    }\n    const cloudServicesCore = this.context.plugins.get(\"CloudServicesCore\");\n    this.token = await cloudServicesCore.createToken(this.tokenUrl).init();\n    this._tokens.set(this.tokenUrl, this.token);\n  }\n  /**\n   * Registers an additional authentication token URL for CKEditor Cloud Services or a callback to the token value promise. See the\n   * {@link module:cloud-services/cloudservicesconfig~CloudServicesConfig#tokenUrl} for more details.\n   *\n   * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n   */\n  async registerTokenUrl(tokenUrl) {\n    if (this._tokens.has(tokenUrl)) {\n      return this.getTokenFor(tokenUrl);\n    }\n    const cloudServicesCore = this.context.plugins.get(\"CloudServicesCore\");\n    const token = await cloudServicesCore.createToken(tokenUrl).init();\n    this._tokens.set(tokenUrl, token);\n    return token;\n  }\n  /**\n   * Returns an authentication token provider previously registered by {@link #registerTokenUrl}.\n   *\n   * @param tokenUrl The authentication token URL for CKEditor Cloud Services or a callback to the token value promise.\n   */\n  getTokenFor(tokenUrl) {\n    const token = this._tokens.get(tokenUrl);\n    if (!token) {\n      throw new CKEditorError(\"cloudservices-token-not-registered\", this);\n    }\n    return token;\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    for (const token of this._tokens.values()) {\n      token.destroy();\n    }\n  }\n};\nexport {\n  CloudServices as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-cloud-services/src/token/token.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-cloud-services/src/uploadgateway/fileuploader.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore else -- @preserve *)\n\n@ckeditor/ckeditor5-cloud-services/src/uploadgateway/uploadgateway.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-cloud-services/src/cloudservicescore.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-cloud-services/src/cloudservices.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-cloud-services_src_cloudservices.js.map\n","import {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport {\n  Command,\n  NoOperation,\n  Plugin,\n  icons,\n  transformSets\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-undo/src/basecommand.js\nvar BaseCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._stack = [];\n    this._createdBatches = /* @__PURE__ */ new WeakSet();\n    this.refresh();\n    this._isEnabledBasedOnSelection = false;\n    this.listenTo(editor.data, \"set\", (evt, data) => {\n      data[1] = { ...data[1] };\n      const options = data[1];\n      if (!options.batchType) {\n        options.batchType = { isUndoable: false };\n      }\n    }, { priority: \"high\" });\n    this.listenTo(editor.data, \"set\", (evt, data) => {\n      const options = data[1];\n      if (!options.batchType.isUndoable) {\n        this.clearStack();\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.isEnabled = this._stack.length > 0;\n  }\n  /**\n   * Returns all batches created by this command.\n   */\n  get createdBatches() {\n    return this._createdBatches;\n  }\n  /**\n   * Stores a batch in the command, together with the selection state of the {@link module:engine/model/document~Document document}\n   * created by the editor which this command is registered to.\n   *\n   * @param batch The batch to add.\n   */\n  addBatch(batch) {\n    const docSelection = this.editor.model.document.selection;\n    const selection = {\n      ranges: docSelection.hasOwnRange ? Array.from(docSelection.getRanges()) : [],\n      isBackward: docSelection.isBackward\n    };\n    this._stack.push({ batch, selection });\n    this.refresh();\n  }\n  /**\n   * Removes all items from the stack.\n   */\n  clearStack() {\n    this._stack = [];\n    this.refresh();\n  }\n  /**\n   * Restores the {@link module:engine/model/document~Document#selection document selection} state after a batch was undone.\n   *\n   * @param ranges Ranges to be restored.\n   * @param isBackward A flag describing whether the restored range was selected forward or backward.\n   * @param operations Operations which has been applied since selection has been stored.\n   */\n  _restoreSelection(ranges, isBackward, operations) {\n    const model = this.editor.model;\n    const document = model.document;\n    const selectionRanges = [];\n    const transformedRangeGroups = ranges.map((range) => range.getTransformedByOperations(operations));\n    const allRanges = transformedRangeGroups.flat();\n    for (const rangeGroup of transformedRangeGroups) {\n      const transformed = rangeGroup.filter((range) => range.root != document.graveyard).filter((range) => !isRangeContainedByAnyOtherRange(range, allRanges));\n      if (!transformed.length) {\n        continue;\n      }\n      normalizeRanges(transformed);\n      selectionRanges.push(transformed[0]);\n    }\n    if (selectionRanges.length) {\n      model.change((writer) => {\n        writer.setSelection(selectionRanges, { backward: isBackward });\n      });\n    }\n  }\n  /**\n   * Undoes a batch by reversing that batch, transforming reversed batch and finally applying it.\n   * This is a helper method for {@link #execute}.\n   *\n   * @param batchToUndo The batch to be undone.\n   * @param undoingBatch The batch that will contain undoing changes.\n   */\n  _undo(batchToUndo, undoingBatch) {\n    const model = this.editor.model;\n    const document = model.document;\n    this._createdBatches.add(undoingBatch);\n    const operationsToUndo = batchToUndo.operations.slice().filter((operation) => operation.isDocumentOperation);\n    operationsToUndo.reverse();\n    for (const operationToUndo of operationsToUndo) {\n      const nextBaseVersion = operationToUndo.baseVersion + 1;\n      const historyOperations = Array.from(document.history.getOperations(nextBaseVersion));\n      const transformedSets = transformSets([operationToUndo.getReversed()], historyOperations, {\n        useRelations: true,\n        document: this.editor.model.document,\n        padWithNoOps: false,\n        forceWeakRemove: true\n      });\n      const reversedOperations = transformedSets.operationsA;\n      for (let operation of reversedOperations) {\n        const affectedSelectable = operation.affectedSelectable;\n        if (affectedSelectable && !model.canEditAt(affectedSelectable)) {\n          operation = new NoOperation(operation.baseVersion);\n        }\n        undoingBatch.addOperation(operation);\n        model.applyOperation(operation);\n        document.history.setOperationAsUndone(operationToUndo, operation);\n      }\n    }\n  }\n};\nfunction normalizeRanges(ranges) {\n  ranges.sort((a, b) => a.start.isBefore(b.start) ? -1 : 1);\n  for (let i = 1; i < ranges.length; i++) {\n    const previousRange = ranges[i - 1];\n    const joinedRange = previousRange.getJoined(ranges[i], true);\n    if (joinedRange) {\n      i--;\n      ranges.splice(i, 2, joinedRange);\n    }\n  }\n}\nfunction isRangeContainedByAnyOtherRange(range, ranges) {\n  return ranges.some((otherRange) => otherRange !== range && otherRange.containsRange(range, true));\n}\n\n// node_modules/@ckeditor/ckeditor5-undo/src/undocommand.js\nvar UndoCommand = class extends BaseCommand {\n  /**\n   * Executes the command. This method reverts a {@link module:engine/model/batch~Batch batch} added to the command's stack, transforms\n   * and applies the reverted version on the {@link module:engine/model/document~Document document} and removes the batch from the stack.\n   * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n   *\n   * @fires execute\n   * @fires revert\n   * @param batch A batch that should be undone. If not set, the last added batch will be undone.\n   */\n  execute(batch = null) {\n    const batchIndex = batch ? this._stack.findIndex((a) => a.batch == batch) : this._stack.length - 1;\n    const item = this._stack.splice(batchIndex, 1)[0];\n    const undoingBatch = this.editor.model.createBatch({ isUndo: true });\n    this.editor.model.enqueueChange(undoingBatch, () => {\n      this._undo(item.batch, undoingBatch);\n      const operations = this.editor.model.document.history.getOperations(item.batch.baseVersion);\n      this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n    });\n    this.fire(\"revert\", item.batch, undoingBatch);\n    this.refresh();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-undo/src/redocommand.js\nvar RedoCommand = class extends BaseCommand {\n  /**\n   * Executes the command. This method reverts the last {@link module:engine/model/batch~Batch batch} added to\n   * the command's stack, applies the reverted and transformed version on the\n   * {@link module:engine/model/document~Document document} and removes the batch from the stack.\n   * Then, it restores the {@link module:engine/model/document~Document#selection document selection}.\n   *\n   * @fires execute\n   */\n  execute() {\n    const item = this._stack.pop();\n    const redoingBatch = this.editor.model.createBatch({ isUndo: true });\n    this.editor.model.enqueueChange(redoingBatch, () => {\n      const lastOperation = item.batch.operations[item.batch.operations.length - 1];\n      const nextBaseVersion = lastOperation.baseVersion + 1;\n      const operations = this.editor.model.document.history.getOperations(nextBaseVersion);\n      this._restoreSelection(item.selection.ranges, item.selection.isBackward, operations);\n      this._undo(item.batch, redoingBatch);\n    });\n    this.refresh();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-undo/src/undoediting.js\nvar UndoEditing = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._batchRegistry = /* @__PURE__ */ new WeakSet();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"UndoEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    this._undoCommand = new UndoCommand(editor);\n    this._redoCommand = new RedoCommand(editor);\n    editor.commands.add(\"undo\", this._undoCommand);\n    editor.commands.add(\"redo\", this._redoCommand);\n    this.listenTo(editor.model, \"applyOperation\", (evt, args) => {\n      const operation = args[0];\n      if (!operation.isDocumentOperation) {\n        return;\n      }\n      const batch = operation.batch;\n      const isRedoBatch = this._redoCommand.createdBatches.has(batch);\n      const isUndoBatch = this._undoCommand.createdBatches.has(batch);\n      const wasProcessed = this._batchRegistry.has(batch);\n      if (wasProcessed) {\n        return;\n      }\n      this._batchRegistry.add(batch);\n      if (!batch.isUndoable) {\n        return;\n      }\n      if (isRedoBatch) {\n        this._undoCommand.addBatch(batch);\n      } else if (!isUndoBatch) {\n        this._undoCommand.addBatch(batch);\n        this._redoCommand.clearStack();\n      }\n    }, { priority: \"highest\" });\n    this.listenTo(this._undoCommand, \"revert\", (evt, undoneBatch, undoingBatch) => {\n      this._redoCommand.addBatch(undoingBatch);\n    });\n    editor.keystrokes.set(\"CTRL+Z\", \"undo\");\n    editor.keystrokes.set(\"CTRL+Y\", \"redo\");\n    editor.keystrokes.set(\"CTRL+SHIFT+Z\", \"redo\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-undo/src/undoui.js\nvar UndoUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"UndoUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const locale = editor.locale;\n    const t = editor.t;\n    const localizedUndoIcon = locale.uiLanguageDirection == \"ltr\" ? icons.undo : icons.redo;\n    const localizedRedoIcon = locale.uiLanguageDirection == \"ltr\" ? icons.redo : icons.undo;\n    this._addButton(\"undo\", t(\"Undo\"), \"CTRL+Z\", localizedUndoIcon);\n    this._addButton(\"redo\", t(\"Redo\"), \"CTRL+Y\", localizedRedoIcon);\n  }\n  /**\n   * Creates a button for the specified command.\n   *\n   * @param name Command name.\n   * @param label Button label.\n   * @param keystroke Command keystroke.\n   * @param Icon Source of the icon.\n   */\n  _addButton(name, label, keystroke, Icon) {\n    const editor = this.editor;\n    editor.ui.componentFactory.add(name, (locale) => {\n      const command = editor.commands.get(name);\n      const view = new ButtonView(locale);\n      view.set({\n        label,\n        icon: Icon,\n        keystroke,\n        tooltip: true\n      });\n      view.bind(\"isEnabled\").to(command, \"isEnabled\");\n      this.listenTo(view, \"execute\", () => {\n        editor.execute(name);\n        editor.editing.view.focus();\n      });\n      return view;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-undo/src/undo.js\nvar Undo = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [UndoEditing, UndoUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Undo\";\n  }\n};\n\nexport {\n  Undo\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-undo/src/basecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/undocommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/redocommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/undoediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/undoui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/undo.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-undo/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/undo.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-LTKJ3JKL.js.map\n","import {\n  BubblingEventInfo,\n  Command,\n  DomEventData,\n  Observer,\n  Plugin,\n  env_default\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-enter/src/utils.js\nfunction* getCopyOnEnterAttributes(schema, allAttributes) {\n  for (const attribute of allAttributes) {\n    if (attribute && schema.getAttributeProperties(attribute[0]).copyOnEnter) {\n      yield attribute;\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-enter/src/entercommand.js\nvar EnterCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  execute() {\n    this.editor.model.change((writer) => {\n      this.enterBlock(writer);\n      this.fire(\"afterExecute\", { writer });\n    });\n  }\n  /**\n   * Splits a block where the document selection is placed, in the way how the <kbd>Enter</kbd> key is expected to work:\n   *\n   * ```\n   * <p>Foo[]bar</p>   ->   <p>Foo</p><p>[]bar</p>\n   * <p>Foobar[]</p>   ->   <p>Foobar</p><p>[]</p>\n   * <p>Fo[ob]ar</p>   ->   <p>Fo</p><p>[]ar</p>\n   * ```\n   *\n   * In some cases, the split will not happen:\n   *\n   * ```\n   * // The selection parent is a limit element:\n   * <figcaption>A[bc]d</figcaption>   ->   <figcaption>A[]d</figcaption>\n   *\n   * // The selection spans over multiple elements:\n   * <h>x[x</h><p>y]y<p>   ->   <h>x</h><p>[]y</p>\n   * ```\n   *\n   * @param writer Writer to use when performing the enter action.\n   * @returns Boolean indicating if the block was split.\n   */\n  enterBlock(writer) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const schema = model.schema;\n    const isSelectionEmpty = selection.isCollapsed;\n    const range = selection.getFirstRange();\n    const startElement = range.start.parent;\n    const endElement = range.end.parent;\n    if (schema.isLimit(startElement) || schema.isLimit(endElement)) {\n      if (!isSelectionEmpty && startElement == endElement) {\n        model.deleteContent(selection);\n      }\n      return false;\n    }\n    if (isSelectionEmpty) {\n      const attributesToCopy = getCopyOnEnterAttributes(writer.model.schema, selection.getAttributes());\n      splitBlock(writer, range.start);\n      writer.setSelectionAttribute(attributesToCopy);\n      return true;\n    } else {\n      const leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n      const isContainedWithinOneElement = startElement == endElement;\n      model.deleteContent(selection, { leaveUnmerged });\n      if (leaveUnmerged) {\n        if (isContainedWithinOneElement) {\n          splitBlock(writer, selection.focus);\n          return true;\n        } else {\n          writer.setSelection(endElement, 0);\n        }\n      }\n    }\n    return false;\n  }\n};\nfunction splitBlock(writer, splitPos) {\n  writer.split(splitPos);\n  writer.setSelection(splitPos.parent.nextSibling, 0);\n}\n\n// node_modules/@ckeditor/ckeditor5-enter/src/enterobserver.js\nvar ENTER_EVENT_TYPES = {\n  insertParagraph: { isSoft: false },\n  insertLineBreak: { isSoft: true }\n};\nvar EnterObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    const doc = this.document;\n    let shiftPressed = false;\n    doc.on(\"keydown\", (evt, data) => {\n      shiftPressed = data.shiftKey;\n    });\n    doc.on(\"beforeinput\", (evt, data) => {\n      if (!this.isEnabled) {\n        return;\n      }\n      let inputType = data.inputType;\n      if (env_default.isSafari && shiftPressed && inputType == \"insertParagraph\") {\n        inputType = \"insertLineBreak\";\n      }\n      const domEvent = data.domEvent;\n      const enterEventSpec = ENTER_EVENT_TYPES[inputType];\n      if (!enterEventSpec) {\n        return;\n      }\n      const event = new BubblingEventInfo(doc, \"enter\", data.targetRanges[0]);\n      doc.fire(event, new DomEventData(view, domEvent, {\n        isSoft: enterEventSpec.isSoft\n      }));\n      if (event.stop.called) {\n        evt.stop();\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-enter/src/enter.js\nvar Enter = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Enter\";\n  }\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    view.addObserver(EnterObserver);\n    editor.commands.add(\"enter\", new EnterCommand(editor));\n    this.listenTo(viewDocument, \"enter\", (evt, data) => {\n      if (!viewDocument.isComposing) {\n        data.preventDefault();\n      }\n      if (data.isSoft) {\n        return;\n      }\n      editor.execute(\"enter\");\n      view.scrollToTheSelection();\n    }, { priority: \"low\" });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-enter/src/shiftentercommand.js\nvar ShiftEnterCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  execute() {\n    const model = this.editor.model;\n    const doc = model.document;\n    model.change((writer) => {\n      softBreakAction(model, writer, doc.selection);\n      this.fire(\"afterExecute\", { writer });\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const doc = model.document;\n    this.isEnabled = isEnabled(model.schema, doc.selection);\n  }\n};\nfunction isEnabled(schema, selection) {\n  if (selection.rangeCount > 1) {\n    return false;\n  }\n  const anchorPos = selection.anchor;\n  if (!anchorPos || !schema.checkChild(anchorPos, \"softBreak\")) {\n    return false;\n  }\n  const range = selection.getFirstRange();\n  const startElement = range.start.parent;\n  const endElement = range.end.parent;\n  if ((isInsideLimitElement(startElement, schema) || isInsideLimitElement(endElement, schema)) && startElement !== endElement) {\n    return false;\n  }\n  return true;\n}\nfunction softBreakAction(model, writer, selection) {\n  const isSelectionEmpty = selection.isCollapsed;\n  const range = selection.getFirstRange();\n  const startElement = range.start.parent;\n  const endElement = range.end.parent;\n  const isContainedWithinOneElement = startElement == endElement;\n  if (isSelectionEmpty) {\n    const attributesToCopy = getCopyOnEnterAttributes(model.schema, selection.getAttributes());\n    insertBreak(model, writer, range.end);\n    writer.removeSelectionAttribute(selection.getAttributeKeys());\n    writer.setSelectionAttribute(attributesToCopy);\n  } else {\n    const leaveUnmerged = !(range.start.isAtStart && range.end.isAtEnd);\n    model.deleteContent(selection, { leaveUnmerged });\n    if (isContainedWithinOneElement) {\n      insertBreak(model, writer, selection.focus);\n    } else {\n      if (leaveUnmerged) {\n        writer.setSelection(endElement, 0);\n      }\n    }\n  }\n}\nfunction insertBreak(model, writer, position) {\n  const breakLineElement = writer.createElement(\"softBreak\");\n  model.insertContent(breakLineElement, position);\n  writer.setSelection(breakLineElement, \"after\");\n}\nfunction isInsideLimitElement(element, schema) {\n  if (element.is(\"rootElement\")) {\n    return false;\n  }\n  return schema.isLimit(element) || isInsideLimitElement(element.parent, schema);\n}\n\n// node_modules/@ckeditor/ckeditor5-enter/src/shiftenter.js\nvar ShiftEnter = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ShiftEnter\";\n  }\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    const conversion = editor.conversion;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    schema.register(\"softBreak\", {\n      allowWhere: \"$text\",\n      isInline: true\n    });\n    conversion.for(\"upcast\").elementToElement({\n      model: \"softBreak\",\n      view: \"br\"\n    });\n    conversion.for(\"downcast\").elementToElement({\n      model: \"softBreak\",\n      view: (modelElement, { writer }) => writer.createEmptyElement(\"br\")\n    });\n    view.addObserver(EnterObserver);\n    editor.commands.add(\"shiftEnter\", new ShiftEnterCommand(editor));\n    this.listenTo(viewDocument, \"enter\", (evt, data) => {\n      if (!viewDocument.isComposing) {\n        data.preventDefault();\n      }\n      if (!data.isSoft) {\n        return;\n      }\n      editor.execute(\"shiftEnter\");\n      view.scrollToTheSelection();\n    }, { priority: \"low\" });\n  }\n};\n\nexport {\n  Enter,\n  ShiftEnter\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-enter/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/entercommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/enterobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/enter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/shiftentercommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/shiftenter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-enter/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-6GJUXDIH.js.map\n","import {\n  BubblingEventInfo,\n  Command,\n  DomEventData,\n  EventInfo,\n  FocusObserver,\n  MouseObserver,\n  ObservableMixin,\n  Observer,\n  Plugin,\n  count,\n  env_default,\n  isInsideCombinedSymbol,\n  isInsideEmojiSequence,\n  isInsideSurrogatePair,\n  keyCodes\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-typing/src/utils/changebuffer.js\nvar ChangeBuffer = class {\n  /**\n   * Creates a new instance of the change buffer.\n   *\n   * @param limit The maximum number of atomic changes which can be contained in one batch.\n   */\n  constructor(model, limit = 20) {\n    this._batch = null;\n    this.model = model;\n    this._size = 0;\n    this.limit = limit;\n    this._isLocked = false;\n    this._changeCallback = (evt, batch) => {\n      if (batch.isLocal && batch.isUndoable && batch !== this._batch) {\n        this._reset(true);\n      }\n    };\n    this._selectionChangeCallback = () => {\n      this._reset();\n    };\n    this.model.document.on(\"change\", this._changeCallback);\n    this.model.document.selection.on(\"change:range\", this._selectionChangeCallback);\n    this.model.document.selection.on(\"change:attribute\", this._selectionChangeCallback);\n  }\n  /**\n   * The current batch to which a feature should add its operations. Once the {@link #size}\n   * is reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n   */\n  get batch() {\n    if (!this._batch) {\n      this._batch = this.model.createBatch({ isTyping: true });\n    }\n    return this._batch;\n  }\n  /**\n   * The number of atomic changes in the buffer. Once it exceeds the {@link #limit},\n   * the {@link #batch batch} is set to a new one.\n   */\n  get size() {\n    return this._size;\n  }\n  /**\n   * The input number of changes into the buffer. Once the {@link #size} is\n   * reached or exceeds the {@link #limit}, the batch is set to a new instance and the size is reset.\n   *\n   * @param changeCount The number of atomic changes to input.\n   */\n  input(changeCount) {\n    this._size += changeCount;\n    if (this._size >= this.limit) {\n      this._reset(true);\n    }\n  }\n  /**\n   * Whether the buffer is locked. A locked buffer cannot be reset unless it gets unlocked.\n   */\n  get isLocked() {\n    return this._isLocked;\n  }\n  /**\n   * Locks the buffer.\n   */\n  lock() {\n    this._isLocked = true;\n  }\n  /**\n   * Unlocks the buffer.\n   */\n  unlock() {\n    this._isLocked = false;\n  }\n  /**\n   * Destroys the buffer.\n   */\n  destroy() {\n    this.model.document.off(\"change\", this._changeCallback);\n    this.model.document.selection.off(\"change:range\", this._selectionChangeCallback);\n    this.model.document.selection.off(\"change:attribute\", this._selectionChangeCallback);\n  }\n  /**\n   * Resets the change buffer.\n   *\n   * @param ignoreLock Whether internal lock {@link #isLocked} should be ignored.\n   */\n  _reset(ignoreLock = false) {\n    if (!this.isLocked || ignoreLock) {\n      this._batch = null;\n      this._size = 0;\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/deletecommand.js\nvar DeleteCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param direction The directionality of the delete describing in what direction it\n   * should consume the content when the selection is collapsed.\n   */\n  constructor(editor, direction) {\n    super(editor);\n    this.direction = direction;\n    this._buffer = new ChangeBuffer(editor.model, editor.config.get(\"typing.undoStep\"));\n    this._isEnabledBasedOnSelection = false;\n  }\n  /**\n   * The current change buffer.\n   */\n  get buffer() {\n    return this._buffer;\n  }\n  /**\n   * Executes the delete command. Depending on whether the selection is collapsed or not, deletes its content\n   * or a piece of content in the {@link #direction defined direction}.\n   *\n   * @fires execute\n   * @param options The command options.\n   * @param options.unit See {@link module:engine/model/utils/modifyselection~modifySelection}'s options.\n   * @param options.sequence A number describing which subsequent delete event it is without the key being released.\n   * See the {@link module:engine/view/document~Document#event:delete} event data.\n   * @param options.selection Selection to remove. If not set, current model selection will be used.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const doc = model.document;\n    model.enqueueChange(this._buffer.batch, (writer) => {\n      this._buffer.lock();\n      const selection = writer.createSelection(options.selection || doc.selection);\n      if (!model.canEditAt(selection)) {\n        return;\n      }\n      const sequence = options.sequence || 1;\n      const doNotResetEntireContent = selection.isCollapsed;\n      if (selection.isCollapsed) {\n        model.modifySelection(selection, {\n          direction: this.direction,\n          unit: options.unit,\n          treatEmojiAsSingleUnit: true\n        });\n      }\n      if (this._shouldEntireContentBeReplacedWithParagraph(sequence)) {\n        this._replaceEntireContentWithParagraph(writer);\n        return;\n      }\n      if (this._shouldReplaceFirstBlockWithParagraph(selection, sequence)) {\n        this.editor.execute(\"paragraph\", { selection });\n        return;\n      }\n      if (selection.isCollapsed) {\n        return;\n      }\n      let changeCount = 0;\n      selection.getFirstRange().getMinimalFlatRanges().forEach((range) => {\n        changeCount += count(range.getWalker({ singleCharacters: true, ignoreElementEnd: true, shallow: true }));\n      });\n      model.deleteContent(selection, {\n        doNotResetEntireContent,\n        direction: this.direction\n      });\n      this._buffer.input(changeCount);\n      writer.setSelection(selection);\n      this._buffer.unlock();\n    });\n  }\n  /**\n   * If the user keeps <kbd>Backspace</kbd> or <kbd>Delete</kbd> key pressed, the content of the current\n   * editable will be cleared. However, this will not yet lead to resetting the remaining block to a paragraph\n   * (which happens e.g. when the user does <kbd>Ctrl</kbd> + <kbd>A</kbd>, <kbd>Backspace</kbd>).\n   *\n   * But, if the user pressed the key in an empty editable for the first time,\n   * we want to replace the entire content with a paragraph if:\n   *\n   * * the current limit element is empty,\n   * * the paragraph is allowed in the limit element,\n   * * the limit doesn't already have a paragraph inside.\n   *\n   * See https://github.com/ckeditor/ckeditor5-typing/issues/61.\n   *\n   * @param sequence A number describing which subsequent delete event it is without the key being released.\n   */\n  _shouldEntireContentBeReplacedWithParagraph(sequence) {\n    if (sequence > 1) {\n      return false;\n    }\n    const model = this.editor.model;\n    const doc = model.document;\n    const selection = doc.selection;\n    const limitElement = model.schema.getLimitElement(selection);\n    const limitElementIsEmpty = selection.isCollapsed && selection.containsEntireContent(limitElement);\n    if (!limitElementIsEmpty) {\n      return false;\n    }\n    if (!model.schema.checkChild(limitElement, \"paragraph\")) {\n      return false;\n    }\n    const limitElementFirstChild = limitElement.getChild(0);\n    if (limitElementFirstChild && limitElementFirstChild.is(\"element\", \"paragraph\")) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * The entire content is replaced with the paragraph. Selection is moved inside the paragraph.\n   *\n   * @param writer The model writer.\n   */\n  _replaceEntireContentWithParagraph(writer) {\n    const model = this.editor.model;\n    const doc = model.document;\n    const selection = doc.selection;\n    const limitElement = model.schema.getLimitElement(selection);\n    const paragraph = writer.createElement(\"paragraph\");\n    writer.remove(writer.createRangeIn(limitElement));\n    writer.insert(paragraph, limitElement);\n    writer.setSelection(paragraph, 0);\n  }\n  /**\n   * Checks if the selection is inside an empty element that is the first child of the limit element\n   * and should be replaced with a paragraph.\n   *\n   * @param selection The selection.\n   * @param sequence A number describing which subsequent delete event it is without the key being released.\n   */\n  _shouldReplaceFirstBlockWithParagraph(selection, sequence) {\n    const model = this.editor.model;\n    if (sequence > 1 || this.direction != \"backward\") {\n      return false;\n    }\n    if (!selection.isCollapsed) {\n      return false;\n    }\n    const position = selection.getFirstPosition();\n    const limitElement = model.schema.getLimitElement(position);\n    const limitElementFirstChild = limitElement.getChild(0);\n    if (position.parent != limitElementFirstChild) {\n      return false;\n    }\n    if (!selection.containsEntireContent(limitElementFirstChild)) {\n      return false;\n    }\n    if (!model.schema.checkChild(limitElement, \"paragraph\")) {\n      return false;\n    }\n    if (limitElementFirstChild.name == \"paragraph\") {\n      return false;\n    }\n    return true;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/deleteobserver.js\nvar DELETE_CHARACTER = \"character\";\nvar DELETE_WORD = \"word\";\nvar DELETE_CODE_POINT = \"codePoint\";\nvar DELETE_SELECTION = \"selection\";\nvar DELETE_BACKWARD = \"backward\";\nvar DELETE_FORWARD = \"forward\";\nvar DELETE_EVENT_TYPES = {\n  // --------------------------------------- Backward delete types -----------------------------------------------------\n  // This happens in Safari on Mac when some content is selected and Ctrl + K is pressed.\n  deleteContent: {\n    unit: DELETE_SELECTION,\n    // According to the Input Events Level 2 spec, this delete type has no direction\n    // but to keep things simple, let's default to backward.\n    direction: DELETE_BACKWARD\n  },\n  // Chrome and Safari on Mac: Backspace or Ctrl + H\n  deleteContentBackward: {\n    // This kind of deletions must be done on the code point-level instead of target range provided by the DOM beforeinput event.\n    // Take for instance \"👨‍👩‍👧‍👧\", it equals:\n    //\n    //\t* [ \"👨\", \"ZERO WIDTH JOINER\", \"👩\", \"ZERO WIDTH JOINER\", \"👧\", \"ZERO WIDTH JOINER\", \"👧\" ]\n    //\t* or simply \"\\u{1F468}\\u200D\\u{1F469}\\u200D\\u{1F467}\\u200D\\u{1F467}\"\n    //\n    // The range provided by the browser would cause the entire multi-byte grapheme to disappear while the user\n    // intention when deleting backwards (\"👨‍👩‍👧‍👧[]\", then backspace) is gradual \"decomposition\" (first to \"👨‍👩‍👧‍[]\",\n    // then to \"👨‍👩‍[]\", etc.).\n    //\n    //\t* \"👨‍👩‍👧‍👧[]\" + backward delete (by code point)  -> results in \"👨‍👩‍👧[]\", removed the last \"👧\" 👍\n    //\t* \"👨‍👩‍👧‍👧[]\" + backward delete (by character)  -> results in \"[]\", removed the whole grapheme 👎\n    //\n    // Deleting by code-point is simply a better UX. See \"deleteContentForward\" to learn more.\n    unit: DELETE_CODE_POINT,\n    direction: DELETE_BACKWARD\n  },\n  // On Mac: Option + Backspace.\n  // On iOS: Hold the backspace for a while and the whole words will start to disappear.\n  deleteWordBackward: {\n    unit: DELETE_WORD,\n    direction: DELETE_BACKWARD\n  },\n  // Safari on Mac: Cmd + Backspace\n  deleteHardLineBackward: {\n    unit: DELETE_SELECTION,\n    direction: DELETE_BACKWARD\n  },\n  // Chrome on Mac: Cmd + Backspace.\n  deleteSoftLineBackward: {\n    unit: DELETE_SELECTION,\n    direction: DELETE_BACKWARD\n  },\n  // --------------------------------------- Forward delete types -----------------------------------------------------\n  // Chrome on Mac: Fn + Backspace or Ctrl + D\n  // Safari on Mac: Ctrl + K or Ctrl + D\n  deleteContentForward: {\n    // Unlike backward delete, this delete must be performed by character instead of by code point, which\n    // provides the best UX for working with accented letters.\n    // Take, for example \"b̂\" (\"\\u0062\\u0302\", or [ \"LATIN SMALL LETTER B\", \"COMBINING CIRCUMFLEX ACCENT\" ]):\n    //\n    //\t* \"b̂[]\" + backward delete (by code point)  -> results in \"b[]\", removed the combining mark 👍\n    //\t* \"[]b̂\" + forward delete (by code point)   -> results in \"[]^\", a bare combining mark does that not make sense when alone 👎\n    //\t* \"[]b̂\" + forward delete (by character)    -> results in \"[]\", removed both \"b\" and the combining mark 👍\n    //\n    // See: \"deleteContentBackward\" to learn more.\n    unit: DELETE_CHARACTER,\n    direction: DELETE_FORWARD\n  },\n  // On Mac: Fn + Option + Backspace.\n  deleteWordForward: {\n    unit: DELETE_WORD,\n    direction: DELETE_FORWARD\n  },\n  // Chrome on Mac: Ctrl + K (you have to disable the Link plugin first, though, because it uses the same keystroke)\n  // This is weird that it does not work in Safari on Mac despite being listed in the official shortcuts listing\n  // on Apple's webpage.\n  deleteHardLineForward: {\n    unit: DELETE_SELECTION,\n    direction: DELETE_FORWARD\n  },\n  // At this moment there is no known way to trigger this event type but let's keep it for the symmetry with\n  // deleteSoftLineBackward.\n  deleteSoftLineForward: {\n    unit: DELETE_SELECTION,\n    direction: DELETE_FORWARD\n  }\n};\nvar DeleteObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    const document = view.document;\n    let sequence = 0;\n    document.on(\"keydown\", () => {\n      sequence++;\n    });\n    document.on(\"keyup\", () => {\n      sequence = 0;\n    });\n    document.on(\"beforeinput\", (evt, data) => {\n      if (!this.isEnabled) {\n        return;\n      }\n      const { targetRanges, domEvent, inputType } = data;\n      const deleteEventSpec = DELETE_EVENT_TYPES[inputType];\n      if (!deleteEventSpec) {\n        return;\n      }\n      const deleteData = {\n        direction: deleteEventSpec.direction,\n        unit: deleteEventSpec.unit,\n        sequence\n      };\n      if (deleteData.unit == DELETE_SELECTION) {\n        deleteData.selectionToRemove = view.createSelection(targetRanges[0]);\n      }\n      if (inputType === \"deleteContentBackward\") {\n        if (env_default.isAndroid) {\n          deleteData.sequence = 1;\n        }\n        if (shouldUseTargetRanges(targetRanges)) {\n          deleteData.unit = DELETE_SELECTION;\n          deleteData.selectionToRemove = view.createSelection(targetRanges);\n        }\n      }\n      const eventInfo = new BubblingEventInfo(document, \"delete\", targetRanges[0]);\n      document.fire(eventInfo, new DomEventData(view, domEvent, deleteData));\n      if (eventInfo.stop.called) {\n        evt.stop();\n      }\n    });\n    if (env_default.isBlink) {\n      enableChromeWorkaround(this);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n};\nfunction enableChromeWorkaround(observer) {\n  const view = observer.view;\n  const document = view.document;\n  let pressedKeyCode = null;\n  let beforeInputReceived = false;\n  document.on(\"keydown\", (evt, { keyCode }) => {\n    pressedKeyCode = keyCode;\n    beforeInputReceived = false;\n  });\n  document.on(\"keyup\", (evt, { keyCode, domEvent }) => {\n    const selection = document.selection;\n    const shouldFireDeleteEvent = observer.isEnabled && keyCode == pressedKeyCode && isDeleteKeyCode(keyCode) && !selection.isCollapsed && !beforeInputReceived;\n    pressedKeyCode = null;\n    if (shouldFireDeleteEvent) {\n      const targetRange = selection.getFirstRange();\n      const eventInfo = new BubblingEventInfo(document, \"delete\", targetRange);\n      const deleteData = {\n        unit: DELETE_SELECTION,\n        direction: getDeleteDirection(keyCode),\n        selectionToRemove: selection\n      };\n      document.fire(eventInfo, new DomEventData(view, domEvent, deleteData));\n    }\n  });\n  document.on(\"beforeinput\", (evt, { inputType }) => {\n    const deleteEventSpec = DELETE_EVENT_TYPES[inputType];\n    const isMatchingBeforeInput = isDeleteKeyCode(pressedKeyCode) && deleteEventSpec && deleteEventSpec.direction == getDeleteDirection(pressedKeyCode);\n    if (isMatchingBeforeInput) {\n      beforeInputReceived = true;\n    }\n  }, { priority: \"high\" });\n  document.on(\"beforeinput\", (evt, { inputType, data }) => {\n    const shouldIgnoreBeforeInput = pressedKeyCode == keyCodes.delete && inputType == \"insertText\" && data == \"\";\n    if (shouldIgnoreBeforeInput) {\n      evt.stop();\n    }\n  }, { priority: \"high\" });\n  function isDeleteKeyCode(keyCode) {\n    return keyCode == keyCodes.backspace || keyCode == keyCodes.delete;\n  }\n  function getDeleteDirection(keyCode) {\n    return keyCode == keyCodes.backspace ? DELETE_BACKWARD : DELETE_FORWARD;\n  }\n}\nfunction shouldUseTargetRanges(targetRanges) {\n  if (targetRanges.length != 1 || targetRanges[0].isCollapsed) {\n    return false;\n  }\n  const walker = targetRanges[0].getWalker({\n    direction: \"backward\",\n    singleCharacters: true,\n    ignoreElementEnd: true\n  });\n  let count2 = 0;\n  for (const { nextPosition } of walker) {\n    if (!nextPosition.parent.is(\"$text\")) {\n      count2++;\n    } else {\n      const data = nextPosition.parent.data;\n      const offset = nextPosition.offset;\n      if (isInsideSurrogatePair(data, offset) || isInsideCombinedSymbol(data, offset) || isInsideEmojiSequence(data, offset)) {\n        continue;\n      }\n      count2++;\n    }\n    if (count2 > 1) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/delete.js\nvar Delete = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Delete\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const modelDocument = editor.model.document;\n    view.addObserver(DeleteObserver);\n    this._undoOnBackspace = false;\n    const deleteForwardCommand = new DeleteCommand(editor, \"forward\");\n    editor.commands.add(\"deleteForward\", deleteForwardCommand);\n    editor.commands.add(\"forwardDelete\", deleteForwardCommand);\n    editor.commands.add(\"delete\", new DeleteCommand(editor, \"backward\"));\n    this.listenTo(viewDocument, \"delete\", (evt, data) => {\n      if (!viewDocument.isComposing) {\n        data.preventDefault();\n      }\n      const { direction, sequence, selectionToRemove, unit } = data;\n      const commandName = direction === \"forward\" ? \"deleteForward\" : \"delete\";\n      const commandData = { sequence };\n      if (unit == \"selection\") {\n        const modelRanges = Array.from(selectionToRemove.getRanges()).map((viewRange) => {\n          return editor.editing.mapper.toModelRange(viewRange);\n        });\n        commandData.selection = editor.model.createSelection(modelRanges);\n      } else {\n        commandData.unit = unit;\n      }\n      editor.execute(commandName, commandData);\n      view.scrollToTheSelection();\n    }, { priority: \"low\" });\n    if (this.editor.plugins.has(\"UndoEditing\")) {\n      this.listenTo(viewDocument, \"delete\", (evt, data) => {\n        if (this._undoOnBackspace && data.direction == \"backward\" && data.sequence == 1 && data.unit == \"codePoint\") {\n          this._undoOnBackspace = false;\n          editor.execute(\"undo\");\n          data.preventDefault();\n          evt.stop();\n        }\n      }, { context: \"$capture\" });\n      this.listenTo(modelDocument, \"change\", () => {\n        this._undoOnBackspace = false;\n      });\n    }\n  }\n  /**\n   * If the next user action after calling this method is pressing backspace, it would undo the last change.\n   *\n   * Requires {@link module:undo/undoediting~UndoEditing} plugin. If not loaded, does nothing.\n   */\n  requestUndoOnBackspace() {\n    if (this.editor.plugins.has(\"UndoEditing\")) {\n      this._undoOnBackspace = true;\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/inserttextcommand.js\nvar InsertTextCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param undoStepSize The maximum number of atomic changes\n   * which can be contained in one batch in the command buffer.\n   */\n  constructor(editor, undoStepSize) {\n    super(editor);\n    this._buffer = new ChangeBuffer(editor.model, undoStepSize);\n    this._isEnabledBasedOnSelection = false;\n  }\n  /**\n   * The current change buffer.\n   */\n  get buffer() {\n    return this._buffer;\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this._buffer.destroy();\n  }\n  /**\n   * Executes the input command. It replaces the content within the given range with the given text.\n   * Replacing is a two step process, first the content within the range is removed and then the new text is inserted\n   * at the beginning of the range (which after the removal is a collapsed range).\n   *\n   * @fires execute\n   * @param options The command options.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const doc = model.document;\n    const text = options.text || \"\";\n    const textInsertions = text.length;\n    let selection = doc.selection;\n    if (options.selection) {\n      selection = options.selection;\n    } else if (options.range) {\n      selection = model.createSelection(options.range);\n    }\n    if (!model.canEditAt(selection)) {\n      return;\n    }\n    const resultRange = options.resultRange;\n    model.enqueueChange(this._buffer.batch, (writer) => {\n      this._buffer.lock();\n      const selectionAttributes = Array.from(doc.selection.getAttributes());\n      model.deleteContent(selection);\n      if (text) {\n        model.insertContent(writer.createText(text, selectionAttributes), selection);\n      }\n      if (resultRange) {\n        writer.setSelection(resultRange);\n      } else if (!selection.is(\"documentSelection\")) {\n        writer.setSelection(selection);\n      }\n      this._buffer.unlock();\n      this._buffer.input(textInsertions);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/inserttextobserver.js\nvar TYPING_INPUT_TYPES = [\n  // For collapsed range:\n  //\t- This one is a regular typing (all browsers, all systems).\n  //\t- This one is used by Chrome when typing accented letter – 2nd step when the user selects the accent (Mac).\n  // For non-collapsed range:\n  //\t- This one is used by Chrome when typing accented letter – when the selection box first appears (Mac).\n  //\t- This one is used by Safari when accepting spell check suggestions from the context menu (Mac).\n  \"insertText\",\n  // This one is used by Safari when typing accented letter (Mac).\n  // This one is used by Safari when accepting spell check suggestions from the autocorrection pop-up (Mac).\n  \"insertReplacementText\"\n];\nvar InsertTextObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  constructor(view) {\n    super(view);\n    this.focusObserver = view.getObserver(FocusObserver);\n    if (env_default.isAndroid) {\n      TYPING_INPUT_TYPES.push(\"insertCompositionText\");\n    }\n    const viewDocument = view.document;\n    viewDocument.on(\"beforeinput\", (evt, data) => {\n      if (!this.isEnabled) {\n        return;\n      }\n      const { data: text, targetRanges, inputType, domEvent } = data;\n      if (!TYPING_INPUT_TYPES.includes(inputType)) {\n        return;\n      }\n      this.focusObserver.flush();\n      const eventInfo = new EventInfo(viewDocument, \"insertText\");\n      viewDocument.fire(eventInfo, new DomEventData(view, domEvent, {\n        text,\n        selection: view.createSelection(targetRanges)\n      }));\n      if (eventInfo.stop.called) {\n        evt.stop();\n      }\n    });\n    viewDocument.on(\"compositionend\", (evt, { data, domEvent }) => {\n      if (!this.isEnabled || env_default.isAndroid) {\n        return;\n      }\n      if (!data) {\n        return;\n      }\n      viewDocument.fire(\"insertText\", new DomEventData(view, domEvent, {\n        text: data,\n        selection: viewDocument.selection\n      }));\n    }, { priority: \"lowest\" });\n  }\n  /**\n   * @inheritDoc\n   */\n  observe() {\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving() {\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/input.js\nvar Input = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Input\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const model = editor.model;\n    const view = editor.editing.view;\n    const modelSelection = model.document.selection;\n    view.addObserver(InsertTextObserver);\n    const insertTextCommand = new InsertTextCommand(editor, editor.config.get(\"typing.undoStep\") || 20);\n    editor.commands.add(\"insertText\", insertTextCommand);\n    editor.commands.add(\"input\", insertTextCommand);\n    this.listenTo(view.document, \"insertText\", (evt, data) => {\n      if (!view.document.isComposing) {\n        data.preventDefault();\n      }\n      const { text, selection: viewSelection, resultRange: viewResultRange } = data;\n      const modelRanges = Array.from(viewSelection.getRanges()).map((viewRange) => {\n        return editor.editing.mapper.toModelRange(viewRange);\n      });\n      let insertText = text;\n      if (env_default.isAndroid) {\n        const selectedText = Array.from(modelRanges[0].getItems()).reduce((rangeText, node) => {\n          return rangeText + (node.is(\"$textProxy\") ? node.data : \"\");\n        }, \"\");\n        if (selectedText) {\n          if (selectedText.length <= insertText.length) {\n            if (insertText.startsWith(selectedText)) {\n              insertText = insertText.substring(selectedText.length);\n              modelRanges[0].start = modelRanges[0].start.getShiftedBy(selectedText.length);\n            }\n          } else {\n            if (selectedText.startsWith(insertText)) {\n              modelRanges[0].start = modelRanges[0].start.getShiftedBy(insertText.length);\n              insertText = \"\";\n            }\n          }\n        }\n      }\n      const insertTextCommandData = {\n        text: insertText,\n        selection: model.createSelection(modelRanges)\n      };\n      if (viewResultRange) {\n        insertTextCommandData.resultRange = editor.editing.mapper.toModelRange(viewResultRange);\n      }\n      editor.execute(\"insertText\", insertTextCommandData);\n      view.scrollToTheSelection();\n    });\n    if (env_default.isAndroid) {\n      this.listenTo(view.document, \"keydown\", (evt, data) => {\n        if (modelSelection.isCollapsed || data.keyCode != 229 || !view.document.isComposing) {\n          return;\n        }\n        deleteSelectionContent(model, insertTextCommand);\n      });\n    } else {\n      this.listenTo(view.document, \"compositionstart\", () => {\n        if (modelSelection.isCollapsed) {\n          return;\n        }\n        deleteSelectionContent(model, insertTextCommand);\n      });\n    }\n  }\n};\nfunction deleteSelectionContent(model, insertTextCommand) {\n  if (!insertTextCommand.isEnabled) {\n    return;\n  }\n  const buffer = insertTextCommand.buffer;\n  buffer.lock();\n  model.enqueueChange(buffer.batch, () => {\n    model.deleteContent(model.document.selection);\n  });\n  buffer.unlock();\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/typing.js\nvar Typing = class extends Plugin {\n  static get requires() {\n    return [Input, Delete];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Typing\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/utils/getlasttextline.js\nfunction getLastTextLine(range, model) {\n  let start = range.start;\n  const text = Array.from(range.getWalker({ ignoreElementEnd: false })).reduce((rangeText, { item }) => {\n    if (!(item.is(\"$text\") || item.is(\"$textProxy\"))) {\n      start = model.createPositionAfter(item);\n      return \"\";\n    }\n    return rangeText + item.data;\n  }, \"\");\n  return { text, range: model.createRange(start, range.end) };\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/textwatcher.js\nvar TextWatcher = class extends ObservableMixin() {\n  /**\n   * Creates a text watcher instance.\n   *\n   * @param testCallback See {@link module:typing/textwatcher~TextWatcher#testCallback}.\n   */\n  constructor(model, testCallback) {\n    super();\n    this.model = model;\n    this.testCallback = testCallback;\n    this._hasMatch = false;\n    this.set(\"isEnabled\", true);\n    this.on(\"change:isEnabled\", () => {\n      if (this.isEnabled) {\n        this._startListening();\n      } else {\n        this.stopListening(model.document.selection);\n        this.stopListening(model.document);\n      }\n    });\n    this._startListening();\n  }\n  /**\n   * Flag indicating whether there is a match currently.\n   */\n  get hasMatch() {\n    return this._hasMatch;\n  }\n  /**\n   * Starts listening to the editor for typing and selection events.\n   */\n  _startListening() {\n    const model = this.model;\n    const document = model.document;\n    this.listenTo(document.selection, \"change:range\", (evt, { directChange }) => {\n      if (!directChange) {\n        return;\n      }\n      if (!document.selection.isCollapsed) {\n        if (this.hasMatch) {\n          this.fire(\"unmatched\");\n          this._hasMatch = false;\n        }\n        return;\n      }\n      this._evaluateTextBeforeSelection(\"selection\");\n    });\n    this.listenTo(document, \"change:data\", (evt, batch) => {\n      if (batch.isUndo || !batch.isLocal) {\n        return;\n      }\n      this._evaluateTextBeforeSelection(\"data\", { batch });\n    });\n  }\n  /**\n   * Checks the editor content for matched text.\n   *\n   * @fires matched:data\n   * @fires matched:selection\n   * @fires unmatched\n   *\n   * @param suffix A suffix used for generating the event name.\n   * @param data Data object for event.\n   */\n  _evaluateTextBeforeSelection(suffix, data = {}) {\n    const model = this.model;\n    const document = model.document;\n    const selection = document.selection;\n    const rangeBeforeSelection = model.createRange(model.createPositionAt(selection.focus.parent, 0), selection.focus);\n    const { text, range } = getLastTextLine(rangeBeforeSelection, model);\n    const testResult = this.testCallback(text);\n    if (!testResult && this.hasMatch) {\n      this.fire(\"unmatched\");\n    }\n    this._hasMatch = !!testResult;\n    if (testResult) {\n      const eventData = Object.assign(data, { text, range });\n      if (typeof testResult == \"object\") {\n        Object.assign(eventData, testResult);\n      }\n      this.fire(`matched:${suffix}`, eventData);\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-typing/src/twostepcaretmovement.js\nvar TwoStepCaretMovement = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"TwoStepCaretMovement\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._isNextGravityRestorationSkipped = false;\n    this.attributes = /* @__PURE__ */ new Set();\n    this._overrideUid = null;\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const model = editor.model;\n    const view = editor.editing.view;\n    const locale = editor.locale;\n    const modelSelection = model.document.selection;\n    this.listenTo(view.document, \"arrowKey\", (evt, data) => {\n      if (!modelSelection.isCollapsed) {\n        return;\n      }\n      if (data.shiftKey || data.altKey || data.ctrlKey) {\n        return;\n      }\n      const arrowRightPressed = data.keyCode == keyCodes.arrowright;\n      const arrowLeftPressed = data.keyCode == keyCodes.arrowleft;\n      if (!arrowRightPressed && !arrowLeftPressed) {\n        return;\n      }\n      const contentDirection = locale.contentLanguageDirection;\n      let isMovementHandled = false;\n      if (contentDirection === \"ltr\" && arrowRightPressed || contentDirection === \"rtl\" && arrowLeftPressed) {\n        isMovementHandled = this._handleForwardMovement(data);\n      } else {\n        isMovementHandled = this._handleBackwardMovement(data);\n      }\n      if (isMovementHandled === true) {\n        evt.stop();\n      }\n    }, { context: \"$text\", priority: \"highest\" });\n    this.listenTo(modelSelection, \"change:range\", (evt, data) => {\n      if (this._isNextGravityRestorationSkipped) {\n        this._isNextGravityRestorationSkipped = false;\n        return;\n      }\n      if (!this._isGravityOverridden) {\n        return;\n      }\n      if (!data.directChange && isBetweenDifferentAttributes(modelSelection.getFirstPosition(), this.attributes)) {\n        return;\n      }\n      this._restoreGravity();\n    });\n    this._enableClickingAfterNode();\n    this._enableInsertContentSelectionAttributesFixer();\n    this._handleDeleteContentAfterNode();\n  }\n  /**\n   * Registers a given attribute for the two-step caret movement.\n   *\n   * @param attribute Name of the attribute to handle.\n   */\n  registerAttribute(attribute) {\n    this.attributes.add(attribute);\n  }\n  /**\n   * Updates the document selection and the view according to the two–step caret movement state\n   * when moving **forwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n   *\n   * @param data Data of the key press.\n   * @returns `true` when the handler prevented caret movement.\n   */\n  _handleForwardMovement(data) {\n    const attributes = this.attributes;\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const position = selection.getFirstPosition();\n    if (this._isGravityOverridden) {\n      return false;\n    }\n    if (position.isAtStart && hasAnyAttribute(selection, attributes)) {\n      return false;\n    }\n    if (isBetweenDifferentAttributes(position, attributes)) {\n      preventCaretMovement(data);\n      if (hasAnyAttribute(selection, attributes) && isBetweenDifferentAttributes(position, attributes, true)) {\n        clearSelectionAttributes(model, attributes);\n      } else {\n        this._overrideGravity();\n      }\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Updates the document selection and the view according to the two–step caret movement state\n   * when moving **backwards**. Executed upon `keypress` in the {@link module:engine/view/view~View}.\n   *\n   * @param data Data of the key press.\n   * @returns `true` when the handler prevented caret movement\n   */\n  _handleBackwardMovement(data) {\n    const attributes = this.attributes;\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const position = selection.getFirstPosition();\n    if (this._isGravityOverridden) {\n      preventCaretMovement(data);\n      this._restoreGravity();\n      if (isBetweenDifferentAttributes(position, attributes, true)) {\n        clearSelectionAttributes(model, attributes);\n      } else {\n        setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n      }\n      return true;\n    } else {\n      if (position.isAtStart) {\n        if (hasAnyAttribute(selection, attributes)) {\n          preventCaretMovement(data);\n          setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n          return true;\n        }\n        return false;\n      }\n      if (!hasAnyAttribute(selection, attributes) && isBetweenDifferentAttributes(position, attributes, true)) {\n        preventCaretMovement(data);\n        setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n        return true;\n      }\n      if (isStepAfterAnyAttributeBoundary(position, attributes)) {\n        if (position.isAtEnd && !hasAnyAttribute(selection, attributes) && isBetweenDifferentAttributes(position, attributes)) {\n          preventCaretMovement(data);\n          setSelectionAttributesFromTheNodeBefore(model, attributes, position);\n          return true;\n        }\n        this._isNextGravityRestorationSkipped = true;\n        this._overrideGravity();\n        return false;\n      }\n    }\n    return false;\n  }\n  /**\n   * Starts listening to {@link module:engine/view/document~Document#event:mousedown} and\n   * {@link module:engine/view/document~Document#event:selectionChange} and puts the selection before/after a 2-step node\n   * if clicked at the beginning/ending of the 2-step node.\n   *\n   * The purpose of this action is to allow typing around the 2-step node directly after a click.\n   *\n   * See https://github.com/ckeditor/ckeditor5/issues/1016.\n   */\n  _enableClickingAfterNode() {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const document = editor.editing.view.document;\n    editor.editing.view.addObserver(MouseObserver);\n    let clicked = false;\n    this.listenTo(document, \"mousedown\", () => {\n      clicked = true;\n    });\n    this.listenTo(document, \"selectionChange\", () => {\n      const attributes = this.attributes;\n      if (!clicked) {\n        return;\n      }\n      clicked = false;\n      if (!selection.isCollapsed) {\n        return;\n      }\n      if (!hasAnyAttribute(selection, attributes)) {\n        return;\n      }\n      const position = selection.getFirstPosition();\n      if (!isBetweenDifferentAttributes(position, attributes)) {\n        return;\n      }\n      if (position.isAtStart || isBetweenDifferentAttributes(position, attributes, true)) {\n        clearSelectionAttributes(model, attributes);\n      } else if (!this._isGravityOverridden) {\n        this._overrideGravity();\n      }\n    });\n  }\n  /**\n   * Starts listening to {@link module:engine/model/model~Model#event:insertContent} and corrects the model\n   * selection attributes if the selection is at the end of a two-step node after inserting the content.\n   *\n   * The purpose of this action is to improve the overall UX because the user is no longer \"trapped\" by the\n   * two-step attribute of the selection, and they can type a \"clean\" (`linkHref`–less) text right away.\n   *\n   * See https://github.com/ckeditor/ckeditor5/issues/6053.\n   */\n  _enableInsertContentSelectionAttributesFixer() {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const attributes = this.attributes;\n    this.listenTo(model, \"insertContent\", () => {\n      const position = selection.getFirstPosition();\n      if (hasAnyAttribute(selection, attributes) && isBetweenDifferentAttributes(position, attributes)) {\n        clearSelectionAttributes(model, attributes);\n      }\n    }, { priority: \"low\" });\n  }\n  /**\n   * Starts listening to {@link module:engine/model/model~Model#deleteContent} and checks whether\n   * removing a content right after the tow-step attribute.\n   *\n   * If so, the selection should not preserve the two-step attribute. However, if\n   * the {@link module:typing/twostepcaretmovement~TwoStepCaretMovement} plugin is active and\n   * the selection has the two-step attribute due to overridden gravity (at the end), the two-step attribute should stay untouched.\n   *\n   * The purpose of this action is to allow removing the link text and keep the selection outside the link.\n   *\n   * See https://github.com/ckeditor/ckeditor5/issues/7521.\n   */\n  _handleDeleteContentAfterNode() {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const view = editor.editing.view;\n    let isBackspace = false;\n    let shouldPreserveAttributes = false;\n    this.listenTo(view.document, \"delete\", (evt, data) => {\n      isBackspace = data.direction === \"backward\";\n    }, { priority: \"high\" });\n    this.listenTo(model, \"deleteContent\", () => {\n      if (!isBackspace) {\n        return;\n      }\n      const position = selection.getFirstPosition();\n      shouldPreserveAttributes = hasAnyAttribute(selection, this.attributes) && !isStepAfterAnyAttributeBoundary(position, this.attributes);\n    }, { priority: \"high\" });\n    this.listenTo(model, \"deleteContent\", () => {\n      if (!isBackspace) {\n        return;\n      }\n      isBackspace = false;\n      if (shouldPreserveAttributes) {\n        return;\n      }\n      editor.model.enqueueChange(() => {\n        const position = selection.getFirstPosition();\n        if (hasAnyAttribute(selection, this.attributes) && isBetweenDifferentAttributes(position, this.attributes)) {\n          if (position.isAtStart || isBetweenDifferentAttributes(position, this.attributes, true)) {\n            clearSelectionAttributes(model, this.attributes);\n          } else if (!this._isGravityOverridden) {\n            this._overrideGravity();\n          }\n        }\n      });\n    }, { priority: \"low\" });\n  }\n  /**\n   * `true` when the gravity is overridden for the plugin.\n   */\n  get _isGravityOverridden() {\n    return !!this._overrideUid;\n  }\n  /**\n   * Overrides the gravity using the {@link module:engine/model/writer~Writer model writer}\n   * and stores the information about this fact in the {@link #_overrideUid}.\n   *\n   * A shorthand for {@link module:engine/model/writer~Writer#overrideSelectionGravity}.\n   */\n  _overrideGravity() {\n    this._overrideUid = this.editor.model.change((writer) => {\n      return writer.overrideSelectionGravity();\n    });\n  }\n  /**\n   * Restores the gravity using the {@link module:engine/model/writer~Writer model writer}.\n   *\n   * A shorthand for {@link module:engine/model/writer~Writer#restoreSelectionGravity}.\n   */\n  _restoreGravity() {\n    this.editor.model.change((writer) => {\n      writer.restoreSelectionGravity(this._overrideUid);\n      this._overrideUid = null;\n    });\n  }\n};\nfunction hasAnyAttribute(selection, attributes) {\n  for (const observedAttribute of attributes) {\n    if (selection.hasAttribute(observedAttribute)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction setSelectionAttributesFromTheNodeBefore(model, attributes, position) {\n  const nodeBefore = position.nodeBefore;\n  model.change((writer) => {\n    if (nodeBefore) {\n      const attributes2 = [];\n      const isInlineObject = model.schema.isObject(nodeBefore) && model.schema.isInline(nodeBefore);\n      for (const [key, value] of nodeBefore.getAttributes()) {\n        if (model.schema.checkAttribute(\"$text\", key) && (!isInlineObject || model.schema.getAttributeProperties(key).copyFromObject !== false)) {\n          attributes2.push([key, value]);\n        }\n      }\n      writer.setSelectionAttribute(attributes2);\n    } else {\n      writer.removeSelectionAttribute(attributes);\n    }\n  });\n}\nfunction clearSelectionAttributes(model, attributes) {\n  model.change((writer) => {\n    writer.removeSelectionAttribute(attributes);\n  });\n}\nfunction preventCaretMovement(data) {\n  data.preventDefault();\n}\nfunction isStepAfterAnyAttributeBoundary(position, attributes) {\n  const positionBefore = position.getShiftedBy(-1);\n  return isBetweenDifferentAttributes(positionBefore, attributes);\n}\nfunction isBetweenDifferentAttributes(position, attributes, isStrict = false) {\n  const { nodeBefore, nodeAfter } = position;\n  for (const observedAttribute of attributes) {\n    const attrBefore = nodeBefore ? nodeBefore.getAttribute(observedAttribute) : void 0;\n    const attrAfter = nodeAfter ? nodeAfter.getAttribute(observedAttribute) : void 0;\n    if (isStrict && (attrBefore === void 0 || attrAfter === void 0)) {\n      continue;\n    }\n    if (attrAfter !== attrBefore) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/texttransformation.js\nvar TRANSFORMATIONS = {\n  // Common symbols:\n  copyright: { from: \"(c)\", to: \"©\" },\n  registeredTrademark: { from: \"(r)\", to: \"®\" },\n  trademark: { from: \"(tm)\", to: \"™\" },\n  // Mathematical:\n  oneHalf: { from: /(^|[^/a-z0-9])(1\\/2)([^/a-z0-9])$/i, to: [null, \"½\", null] },\n  oneThird: { from: /(^|[^/a-z0-9])(1\\/3)([^/a-z0-9])$/i, to: [null, \"⅓\", null] },\n  twoThirds: { from: /(^|[^/a-z0-9])(2\\/3)([^/a-z0-9])$/i, to: [null, \"⅔\", null] },\n  oneForth: { from: /(^|[^/a-z0-9])(1\\/4)([^/a-z0-9])$/i, to: [null, \"¼\", null] },\n  threeQuarters: { from: /(^|[^/a-z0-9])(3\\/4)([^/a-z0-9])$/i, to: [null, \"¾\", null] },\n  lessThanOrEqual: { from: \"<=\", to: \"≤\" },\n  greaterThanOrEqual: { from: \">=\", to: \"≥\" },\n  notEqual: { from: \"!=\", to: \"≠\" },\n  arrowLeft: { from: \"<-\", to: \"←\" },\n  arrowRight: { from: \"->\", to: \"→\" },\n  // Typography:\n  horizontalEllipsis: { from: \"...\", to: \"…\" },\n  enDash: { from: /(^| )(--)( )$/, to: [null, \"–\", null] },\n  emDash: { from: /(^| )(---)( )$/, to: [null, \"—\", null] },\n  // Quotations:\n  // English, US\n  quotesPrimary: { from: buildQuotesRegExp('\"'), to: [null, \"“\", null, \"”\"] },\n  quotesSecondary: { from: buildQuotesRegExp(\"'\"), to: [null, \"‘\", null, \"’\"] },\n  // English, UK\n  quotesPrimaryEnGb: { from: buildQuotesRegExp(\"'\"), to: [null, \"‘\", null, \"’\"] },\n  quotesSecondaryEnGb: { from: buildQuotesRegExp('\"'), to: [null, \"“\", null, \"”\"] },\n  // Polish\n  quotesPrimaryPl: { from: buildQuotesRegExp('\"'), to: [null, \"„\", null, \"”\"] },\n  quotesSecondaryPl: { from: buildQuotesRegExp(\"'\"), to: [null, \"‚\", null, \"’\"] }\n};\nfunction buildQuotesRegExp(quoteCharacter) {\n  return new RegExp(`(^|\\\\s)(${quoteCharacter})([^${quoteCharacter}]*)(${quoteCharacter})$`);\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/utils/findattributerange.js\nfunction findAttributeRange(position, attributeName, value, model) {\n  return model.createRange(findAttributeRangeBound(position, attributeName, value, true, model), findAttributeRangeBound(position, attributeName, value, false, model));\n}\nfunction findAttributeRangeBound(position, attributeName, value, lookBack, model) {\n  let node = position.textNode || (lookBack ? position.nodeBefore : position.nodeAfter);\n  let lastNode = null;\n  while (node && node.getAttribute(attributeName) == value) {\n    lastNode = node;\n    node = lookBack ? node.previousSibling : node.nextSibling;\n  }\n  return lastNode ? model.createPositionAt(lastNode, lookBack ? \"before\" : \"after\") : position;\n}\n\n// node_modules/@ckeditor/ckeditor5-typing/src/utils/inlinehighlight.js\nfunction inlineHighlight(editor, attributeName, tagName, className) {\n  const view = editor.editing.view;\n  const highlightedElements = /* @__PURE__ */ new Set();\n  view.document.registerPostFixer((writer) => {\n    const selection = editor.model.document.selection;\n    let changed = false;\n    if (selection.hasAttribute(attributeName)) {\n      const modelRange = findAttributeRange(selection.getFirstPosition(), attributeName, selection.getAttribute(attributeName), editor.model);\n      const viewRange = editor.editing.mapper.toViewRange(modelRange);\n      for (const item of viewRange.getItems()) {\n        if (item.is(\"element\", tagName) && !item.hasClass(className)) {\n          writer.addClass(className, item);\n          highlightedElements.add(item);\n          changed = true;\n        }\n      }\n    }\n    return changed;\n  });\n  editor.conversion.for(\"editingDowncast\").add((dispatcher) => {\n    dispatcher.on(\"insert\", removeHighlight, { priority: \"highest\" });\n    dispatcher.on(\"remove\", removeHighlight, { priority: \"highest\" });\n    dispatcher.on(\"attribute\", removeHighlight, { priority: \"highest\" });\n    dispatcher.on(\"selection\", removeHighlight, { priority: \"highest\" });\n    function removeHighlight() {\n      view.change((writer) => {\n        for (const item of highlightedElements.values()) {\n          writer.removeClass(className, item);\n          highlightedElements.delete(item);\n        }\n      });\n    }\n  });\n}\n\nexport {\n  Input,\n  Delete,\n  Typing,\n  getLastTextLine,\n  TextWatcher,\n  TwoStepCaretMovement,\n  findAttributeRange,\n  inlineHighlight\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-typing/src/utils/changebuffer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/deletecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/deleteobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/delete.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/inserttextcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/inserttextobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/input.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/typing.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/utils/getlasttextline.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/textwatcher.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/twostepcaretmovement.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/texttransformation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/utils/findattributerange.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/utils/inlinehighlight.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-typing/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-W7WGVHCV.js.map\n","import {\n  Enter\n} from \"./chunk-6GJUXDIH.js\";\nimport {\n  Delete\n} from \"./chunk-W7WGVHCV.js\";\nimport {\n  ContextualBalloon,\n  Template,\n  ToolbarView,\n  View,\n  balloonpanelview_default,\n  iconview_default\n} from \"./chunk-CCHBLTQG.js\";\nimport {\n  CKEditorError,\n  DomEmitterMixin,\n  EmitterMixin,\n  MouseObserver,\n  ObservableMixin,\n  Plugin,\n  Rect,\n  TreeWalker,\n  compareArrays,\n  env_default,\n  getLocalizedArrowKeyCodeDirection,\n  global_default,\n  isForwardArrowKeyCode,\n  keyCodes,\n  logWarning,\n  throttle_default,\n  toArray\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-widget/src/highlightstack.js\nvar HighlightStack = class extends EmitterMixin() {\n  constructor() {\n    super(...arguments);\n    this._stack = [];\n  }\n  /**\n   * Adds highlight descriptor to the stack.\n   *\n   * @fires change:top\n   */\n  add(descriptor, writer) {\n    const stack = this._stack;\n    const oldTop = stack[0];\n    this._insertDescriptor(descriptor);\n    const newTop = stack[0];\n    if (oldTop !== newTop && !compareDescriptors(oldTop, newTop)) {\n      this.fire(\"change:top\", {\n        oldDescriptor: oldTop,\n        newDescriptor: newTop,\n        writer\n      });\n    }\n  }\n  /**\n   * Removes highlight descriptor from the stack.\n   *\n   * @fires change:top\n   * @param id Id of the descriptor to remove.\n   */\n  remove(id, writer) {\n    const stack = this._stack;\n    const oldTop = stack[0];\n    this._removeDescriptor(id);\n    const newTop = stack[0];\n    if (oldTop !== newTop && !compareDescriptors(oldTop, newTop)) {\n      this.fire(\"change:top\", {\n        oldDescriptor: oldTop,\n        newDescriptor: newTop,\n        writer\n      });\n    }\n  }\n  /**\n   * Inserts a given descriptor in correct place in the stack. It also takes care about updating information\n   * when descriptor with same id is already present.\n   */\n  _insertDescriptor(descriptor) {\n    const stack = this._stack;\n    const index = stack.findIndex((item) => item.id === descriptor.id);\n    if (compareDescriptors(descriptor, stack[index])) {\n      return;\n    }\n    if (index > -1) {\n      stack.splice(index, 1);\n    }\n    let i = 0;\n    while (stack[i] && shouldABeBeforeB(stack[i], descriptor)) {\n      i++;\n    }\n    stack.splice(i, 0, descriptor);\n  }\n  /**\n   * Removes descriptor with given id from the stack.\n   *\n   * @param id Descriptor's id.\n   */\n  _removeDescriptor(id) {\n    const stack = this._stack;\n    const index = stack.findIndex((item) => item.id === id);\n    if (index > -1) {\n      stack.splice(index, 1);\n    }\n  }\n};\nfunction compareDescriptors(a, b) {\n  return a && b && a.priority == b.priority && classesToString(a.classes) == classesToString(b.classes);\n}\nfunction shouldABeBeforeB(a, b) {\n  if (a.priority > b.priority) {\n    return true;\n  } else if (a.priority < b.priority) {\n    return false;\n  }\n  return classesToString(a.classes) > classesToString(b.classes);\n}\nfunction classesToString(classes) {\n  return Array.isArray(classes) ? classes.sort().join(\",\") : classes;\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/utils.js\nimport dragHandleIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-widget/theme/icons/drag-handle.svg\";\nvar WIDGET_CLASS_NAME = \"ck-widget\";\nvar WIDGET_SELECTED_CLASS_NAME = \"ck-widget_selected\";\nfunction isWidget(node) {\n  if (!node.is(\"element\")) {\n    return false;\n  }\n  return !!node.getCustomProperty(\"widget\");\n}\nfunction toWidget(element, writer, options = {}) {\n  if (!element.is(\"containerElement\")) {\n    throw new CKEditorError(\"widget-to-widget-wrong-element-type\", null, { element });\n  }\n  writer.setAttribute(\"contenteditable\", \"false\", element);\n  writer.addClass(WIDGET_CLASS_NAME, element);\n  writer.setCustomProperty(\"widget\", true, element);\n  element.getFillerOffset = getFillerOffset;\n  writer.setCustomProperty(\"widgetLabel\", [], element);\n  if (options.label) {\n    setLabel(element, options.label);\n  }\n  if (options.hasSelectionHandle) {\n    addSelectionHandle(element, writer);\n  }\n  setHighlightHandling(element, writer);\n  return element;\n}\nfunction addHighlight(element, descriptor, writer) {\n  if (descriptor.classes) {\n    writer.addClass(toArray(descriptor.classes), element);\n  }\n  if (descriptor.attributes) {\n    for (const key in descriptor.attributes) {\n      writer.setAttribute(key, descriptor.attributes[key], element);\n    }\n  }\n}\nfunction removeHighlight(element, descriptor, writer) {\n  if (descriptor.classes) {\n    writer.removeClass(toArray(descriptor.classes), element);\n  }\n  if (descriptor.attributes) {\n    for (const key in descriptor.attributes) {\n      writer.removeAttribute(key, element);\n    }\n  }\n}\nfunction setHighlightHandling(element, writer, add = addHighlight, remove = removeHighlight) {\n  const stack = new HighlightStack();\n  stack.on(\"change:top\", (evt, data) => {\n    if (data.oldDescriptor) {\n      remove(element, data.oldDescriptor, data.writer);\n    }\n    if (data.newDescriptor) {\n      add(element, data.newDescriptor, data.writer);\n    }\n  });\n  const addHighlightCallback = (element2, descriptor, writer2) => stack.add(descriptor, writer2);\n  const removeHighlightCallback = (element2, id, writer2) => stack.remove(id, writer2);\n  writer.setCustomProperty(\"addHighlight\", addHighlightCallback, element);\n  writer.setCustomProperty(\"removeHighlight\", removeHighlightCallback, element);\n}\nfunction setLabel(element, labelOrCreator) {\n  const widgetLabel = element.getCustomProperty(\"widgetLabel\");\n  widgetLabel.push(labelOrCreator);\n}\nfunction getLabel(element) {\n  const widgetLabel = element.getCustomProperty(\"widgetLabel\");\n  return widgetLabel.reduce((prev, current) => {\n    if (typeof current === \"function\") {\n      return prev ? prev + \". \" + current() : current();\n    } else {\n      return prev ? prev + \". \" + current : current;\n    }\n  }, \"\");\n}\nfunction toWidgetEditable(editable, writer, options = {}) {\n  writer.addClass([\"ck-editor__editable\", \"ck-editor__nested-editable\"], editable);\n  writer.setAttribute(\"role\", \"textbox\", editable);\n  if (options.label) {\n    writer.setAttribute(\"aria-label\", options.label, editable);\n  }\n  writer.setAttribute(\"contenteditable\", editable.isReadOnly ? \"false\" : \"true\", editable);\n  editable.on(\"change:isReadOnly\", (evt, property, is) => {\n    writer.setAttribute(\"contenteditable\", is ? \"false\" : \"true\", editable);\n  });\n  editable.on(\"change:isFocused\", (evt, property, is) => {\n    if (is) {\n      writer.addClass(\"ck-editor__nested-editable_focused\", editable);\n    } else {\n      writer.removeClass(\"ck-editor__nested-editable_focused\", editable);\n    }\n  });\n  setHighlightHandling(editable, writer);\n  return editable;\n}\nfunction findOptimalInsertionRange(selection, model) {\n  const selectedElement = selection.getSelectedElement();\n  if (selectedElement) {\n    const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(selection);\n    if (typeAroundFakeCaretPosition) {\n      return model.createRange(model.createPositionAt(selectedElement, typeAroundFakeCaretPosition));\n    }\n  }\n  return model.schema.findOptimalInsertionRange(selection);\n}\nfunction getFillerOffset() {\n  return null;\n}\nfunction addSelectionHandle(widgetElement, writer) {\n  const selectionHandle = writer.createUIElement(\"div\", { class: \"ck ck-widget__selection-handle\" }, function(domDocument) {\n    const domElement = this.toDomElement(domDocument);\n    const icon = new iconview_default();\n    icon.set(\"content\", dragHandleIcon);\n    icon.render();\n    domElement.appendChild(icon.element);\n    return domElement;\n  });\n  writer.insert(writer.createPositionAt(widgetElement, 0), selectionHandle);\n  writer.addClass([\"ck-widget_with-selection-handle\"], widgetElement);\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgettypearound/utils.js\nvar TYPE_AROUND_SELECTION_ATTRIBUTE = \"widget-type-around\";\nfunction isTypeAroundWidget(viewElement, modelElement, schema) {\n  return !!viewElement && isWidget(viewElement) && !schema.isInline(modelElement);\n}\nfunction getClosestTypeAroundDomButton(domElement) {\n  return domElement.closest(\".ck-widget__type-around__button\");\n}\nfunction getTypeAroundButtonPosition(domElement) {\n  return domElement.classList.contains(\"ck-widget__type-around__button_before\") ? \"before\" : \"after\";\n}\nfunction getClosestWidgetViewElement(domElement, domConverter) {\n  const widgetDomElement = domElement.closest(\".ck-widget\");\n  return domConverter.mapDomToView(widgetDomElement);\n}\nfunction getTypeAroundFakeCaretPosition(selection) {\n  return selection.getAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgettypearound/widgettypearound.js\nimport returnIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-widget/theme/icons/return-arrow.svg\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-widget/theme/widgettypearound.css\";\nvar POSSIBLE_INSERTION_POSITIONS = [\"before\", \"after\"];\nvar RETURN_ARROW_ICON_ELEMENT = new DOMParser().parseFromString(returnIcon, \"image/svg+xml\").firstChild;\nvar PLUGIN_DISABLED_EDITING_ROOT_CLASS = \"ck-widget__type-around_disabled\";\nvar WidgetTypeAround = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._currentFakeCaretModelElement = null;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"WidgetTypeAround\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Enter, Delete];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    this.on(\"change:isEnabled\", (evt, data, isEnabled) => {\n      editingView.change((writer) => {\n        for (const root of editingView.document.roots) {\n          if (isEnabled) {\n            writer.removeClass(PLUGIN_DISABLED_EDITING_ROOT_CLASS, root);\n          } else {\n            writer.addClass(PLUGIN_DISABLED_EDITING_ROOT_CLASS, root);\n          }\n        }\n      });\n      if (!isEnabled) {\n        editor.model.change((writer) => {\n          writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n        });\n      }\n    });\n    this._enableTypeAroundUIInjection();\n    this._enableInsertingParagraphsOnButtonClick();\n    this._enableInsertingParagraphsOnEnterKeypress();\n    this._enableInsertingParagraphsOnTypingKeystroke();\n    this._enableTypeAroundFakeCaretActivationUsingKeyboardArrows();\n    this._enableDeleteIntegration();\n    this._enableInsertContentIntegration();\n    this._enableInsertObjectIntegration();\n    this._enableDeleteContentIntegration();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this._currentFakeCaretModelElement = null;\n  }\n  /**\n   * Inserts a new paragraph next to a widget element with the selection anchored in it.\n   *\n   * **Note**: This method is heavily user-oriented and will both focus the editing view and scroll\n   * the viewport to the selection in the inserted paragraph.\n   *\n   * @param widgetModelElement The model widget element next to which a paragraph is inserted.\n   * @param position The position where the paragraph is inserted. Either `'before'` or `'after'` the widget.\n   */\n  _insertParagraph(widgetModelElement, position) {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    const attributesToCopy = editor.model.schema.getAttributesWithProperty(widgetModelElement, \"copyOnReplace\", true);\n    editor.execute(\"insertParagraph\", {\n      position: editor.model.createPositionAt(widgetModelElement, position),\n      attributes: attributesToCopy\n    });\n    editingView.focus();\n    editingView.scrollToTheSelection();\n  }\n  /**\n   * A wrapper for the {@link module:utils/emittermixin~Emitter#listenTo} method that executes the callbacks only\n   * when the plugin {@link #isEnabled is enabled}.\n   *\n   * @param emitter The object that fires the event.\n   * @param event The name of the event.\n   * @param callback The function to be called on event.\n   * @param options Additional options.\n   * @param options.priority The priority of this event callback. The higher the priority value the sooner\n   * the callback will be fired. Events having the same priority are called in the order they were added.\n   */\n  _listenToIfEnabled(emitter, event, callback, options) {\n    this.listenTo(emitter, event, (...args) => {\n      if (this.isEnabled) {\n        callback(...args);\n      }\n    }, options);\n  }\n  /**\n   * Similar to {@link #_insertParagraph}, this method inserts a paragraph except that it\n   * does not expect a position. Instead, it performs the insertion next to a selected widget\n   * according to the `widget-type-around` model selection attribute value (fake caret position).\n   *\n   * Because this method requires the `widget-type-around` attribute to be set,\n   * the insertion can only happen when the widget's fake caret is active (e.g. activated\n   * using the keyboard).\n   *\n   * @returns Returns `true` when the paragraph was inserted (the attribute was present) and `false` otherwise.\n   */\n  _insertParagraphAccordingToFakeCaretPosition() {\n    const editor = this.editor;\n    const model = editor.model;\n    const modelSelection = model.document.selection;\n    const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(modelSelection);\n    if (!typeAroundFakeCaretPosition) {\n      return false;\n    }\n    const selectedModelElement = modelSelection.getSelectedElement();\n    this._insertParagraph(selectedModelElement, typeAroundFakeCaretPosition);\n    return true;\n  }\n  /**\n   * Creates a listener in the editing conversion pipeline that injects the widget type around\n   * UI into every single widget instance created in the editor.\n   *\n   * The UI is delivered as a {@link module:engine/view/uielement~UIElement}\n   * wrapper which renders DOM buttons that users can use to insert paragraphs.\n   */\n  _enableTypeAroundUIInjection() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    const t = editor.locale.t;\n    const buttonTitles = {\n      before: t(\"Insert paragraph before block\"),\n      after: t(\"Insert paragraph after block\")\n    };\n    editor.editing.downcastDispatcher.on(\"insert\", (evt, data, conversionApi) => {\n      const viewElement = conversionApi.mapper.toViewElement(data.item);\n      if (!viewElement) {\n        return;\n      }\n      if (isTypeAroundWidget(viewElement, data.item, schema)) {\n        injectUIIntoWidget(conversionApi.writer, buttonTitles, viewElement);\n        const widgetLabel = viewElement.getCustomProperty(\"widgetLabel\");\n        widgetLabel.push(() => {\n          return this.isEnabled ? t(\"Press Enter to type after or press Shift + Enter to type before the widget\") : \"\";\n        });\n      }\n    }, { priority: \"low\" });\n  }\n  /**\n   * Brings support for the fake caret that appears when either:\n   *\n   * * the selection moves to a widget from a position next to it using arrow keys,\n   * * the arrow key is pressed when the widget is already selected.\n   *\n   * The fake caret lets the user know that they can start typing or just press\n   * <kbd>Enter</kbd> to insert a paragraph at the position next to a widget as suggested by the fake caret.\n   *\n   * The fake caret disappears when the user changes the selection or the editor\n   * gets blurred.\n   *\n   * The whole idea is as follows:\n   *\n   * 1. A user does one of the 2 scenarios described at the beginning.\n   * 2. The \"keydown\" listener is executed and the decision is made whether to show or hide the fake caret.\n   * 3. If it should show up, the `widget-type-around` model selection attribute is set indicating\n   *    on which side of the widget it should appear.\n   * 4. The selection dispatcher reacts to the selection attribute and sets CSS classes responsible for the\n   *    fake caret on the view widget.\n   * 5. If the fake caret should disappear, the selection attribute is removed and the dispatcher\n   *    does the CSS class clean-up in the view.\n   * 6. Additionally, `change:range` and `FocusTracker#isFocused` listeners also remove the selection\n   *    attribute (the former also removes widget CSS classes).\n   */\n  _enableTypeAroundFakeCaretActivationUsingKeyboardArrows() {\n    const editor = this.editor;\n    const model = editor.model;\n    const modelSelection = model.document.selection;\n    const schema = model.schema;\n    const editingView = editor.editing.view;\n    this._listenToIfEnabled(editingView.document, \"arrowKey\", (evt, domEventData) => {\n      this._handleArrowKeyPress(evt, domEventData);\n    }, { context: [isWidget, \"$text\"], priority: \"high\" });\n    this._listenToIfEnabled(modelSelection, \"change:range\", (evt, data) => {\n      if (!data.directChange) {\n        return;\n      }\n      editor.model.change((writer) => {\n        writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n      });\n    });\n    this._listenToIfEnabled(model.document, \"change:data\", () => {\n      const selectedModelElement = modelSelection.getSelectedElement();\n      if (selectedModelElement) {\n        const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n        if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n          return;\n        }\n      }\n      editor.model.change((writer) => {\n        writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n      });\n    });\n    this._listenToIfEnabled(editor.editing.downcastDispatcher, \"selection\", (evt, data, conversionApi) => {\n      const writer = conversionApi.writer;\n      if (this._currentFakeCaretModelElement) {\n        const selectedViewElement2 = conversionApi.mapper.toViewElement(this._currentFakeCaretModelElement);\n        if (selectedViewElement2) {\n          writer.removeClass(POSSIBLE_INSERTION_POSITIONS.map(positionToWidgetCssClass), selectedViewElement2);\n          this._currentFakeCaretModelElement = null;\n        }\n      }\n      const selectedModelElement = data.selection.getSelectedElement();\n      if (!selectedModelElement) {\n        return;\n      }\n      const selectedViewElement = conversionApi.mapper.toViewElement(selectedModelElement);\n      if (!isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n        return;\n      }\n      const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(data.selection);\n      if (!typeAroundFakeCaretPosition) {\n        return;\n      }\n      writer.addClass(positionToWidgetCssClass(typeAroundFakeCaretPosition), selectedViewElement);\n      this._currentFakeCaretModelElement = selectedModelElement;\n    });\n    this._listenToIfEnabled(editor.ui.focusTracker, \"change:isFocused\", (evt, name, isFocused) => {\n      if (!isFocused) {\n        editor.model.change((writer) => {\n          writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n        });\n      }\n    });\n    function positionToWidgetCssClass(position) {\n      return `ck-widget_type-around_show-fake-caret_${position}`;\n    }\n  }\n  /**\n   * A listener executed on each \"keydown\" in the view document, a part of\n   * {@link #_enableTypeAroundFakeCaretActivationUsingKeyboardArrows}.\n   *\n   * It decides whether the arrow keypress should activate the fake caret or not (also whether it should\n   * be deactivated).\n   *\n   * The fake caret activation is done by setting the `widget-type-around` model selection attribute\n   * in this listener, and stopping and preventing the event that would normally be handled by the widget\n   * plugin that is responsible for the regular keyboard navigation near/across all widgets (that\n   * includes inline widgets, which are ignored by the widget type around plugin).\n   */\n  _handleArrowKeyPress(evt, domEventData) {\n    const editor = this.editor;\n    const model = editor.model;\n    const modelSelection = model.document.selection;\n    const schema = model.schema;\n    const editingView = editor.editing.view;\n    const keyCode = domEventData.keyCode;\n    const isForward = isForwardArrowKeyCode(keyCode, editor.locale.contentLanguageDirection);\n    const selectedViewElement = editingView.document.selection.getSelectedElement();\n    const selectedModelElement = editor.editing.mapper.toModelElement(selectedViewElement);\n    let shouldStopAndPreventDefault;\n    if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n      shouldStopAndPreventDefault = this._handleArrowKeyPressOnSelectedWidget(isForward);\n    } else if (modelSelection.isCollapsed) {\n      shouldStopAndPreventDefault = this._handleArrowKeyPressWhenSelectionNextToAWidget(isForward);\n    } else if (!domEventData.shiftKey) {\n      shouldStopAndPreventDefault = this._handleArrowKeyPressWhenNonCollapsedSelection(isForward);\n    }\n    if (shouldStopAndPreventDefault) {\n      domEventData.preventDefault();\n      evt.stop();\n    }\n  }\n  /**\n   * Handles the keyboard navigation on \"keydown\" when a widget is currently selected and activates or deactivates\n   * the fake caret for that widget, depending on the current value of the `widget-type-around` model\n   * selection attribute and the direction of the pressed arrow key.\n   *\n   * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n   * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n   * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n   * process the event any further. Returns `false` otherwise.\n   */\n  _handleArrowKeyPressOnSelectedWidget(isForward) {\n    const editor = this.editor;\n    const model = editor.model;\n    const modelSelection = model.document.selection;\n    const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(modelSelection);\n    return model.change((writer) => {\n      if (typeAroundFakeCaretPosition) {\n        const isLeavingWidget = typeAroundFakeCaretPosition === (isForward ? \"after\" : \"before\");\n        if (!isLeavingWidget) {\n          writer.removeSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE);\n          return true;\n        }\n      } else {\n        writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? \"after\" : \"before\");\n        return true;\n      }\n      return false;\n    });\n  }\n  /**\n   * Handles the keyboard navigation on \"keydown\" when **no** widget is selected but the selection is **directly** next\n   * to one and upon the fake caret should become active for this widget upon arrow keypress\n   * (AKA entering/selecting the widget).\n   *\n   * **Note**: This code mirrors the implementation from the widget plugin but also adds the selection attribute.\n   * Unfortunately, there is no safe way to let the widget plugin do the selection part first and then just set the\n   * selection attribute here in the widget type around plugin. This is why this code must duplicate some from the widget plugin.\n   *\n   * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n   * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n   * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n   * process the event any further. Returns `false` otherwise.\n   */\n  _handleArrowKeyPressWhenSelectionNextToAWidget(isForward) {\n    const editor = this.editor;\n    const model = editor.model;\n    const schema = model.schema;\n    const widgetPlugin = editor.plugins.get(\"Widget\");\n    const modelElementNextToSelection = widgetPlugin._getObjectElementNextToSelection(isForward);\n    const viewElementNextToSelection = editor.editing.mapper.toViewElement(modelElementNextToSelection);\n    if (isTypeAroundWidget(viewElementNextToSelection, modelElementNextToSelection, schema)) {\n      model.change((writer) => {\n        widgetPlugin._setSelectionOverElement(modelElementNextToSelection);\n        writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? \"before\" : \"after\");\n      });\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Handles the keyboard navigation on \"keydown\" when a widget is currently selected (together with some other content)\n   * and the widget is the first or last element in the selection. It activates or deactivates the fake caret for that widget.\n   *\n   * @param isForward `true` when the pressed arrow key was responsible for the forward model selection movement\n   * as in {@link module:utils/keyboard~isForwardArrowKeyCode}.\n   * @returns Returns `true` when the keypress was handled and no other keydown listener of the editor should\n   * process the event any further. Returns `false` otherwise.\n   */\n  _handleArrowKeyPressWhenNonCollapsedSelection(isForward) {\n    const editor = this.editor;\n    const model = editor.model;\n    const schema = model.schema;\n    const mapper = editor.editing.mapper;\n    const modelSelection = model.document.selection;\n    const selectedModelNode = isForward ? modelSelection.getLastPosition().nodeBefore : modelSelection.getFirstPosition().nodeAfter;\n    const selectedViewNode = mapper.toViewElement(selectedModelNode);\n    if (isTypeAroundWidget(selectedViewNode, selectedModelNode, schema)) {\n      model.change((writer) => {\n        writer.setSelection(selectedModelNode, \"on\");\n        writer.setSelectionAttribute(TYPE_AROUND_SELECTION_ATTRIBUTE, isForward ? \"after\" : \"before\");\n      });\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Registers a `mousedown` listener for the view document which intercepts events\n   * coming from the widget type around UI, which happens when a user clicks one of the buttons\n   * that insert a paragraph next to a widget.\n   */\n  _enableInsertingParagraphsOnButtonClick() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    this._listenToIfEnabled(editingView.document, \"mousedown\", (evt, domEventData) => {\n      const button = getClosestTypeAroundDomButton(domEventData.domTarget);\n      if (!button) {\n        return;\n      }\n      const buttonPosition = getTypeAroundButtonPosition(button);\n      const widgetViewElement = getClosestWidgetViewElement(button, editingView.domConverter);\n      const widgetModelElement = editor.editing.mapper.toModelElement(widgetViewElement);\n      this._insertParagraph(widgetModelElement, buttonPosition);\n      domEventData.preventDefault();\n      evt.stop();\n    });\n  }\n  /**\n   * Creates the <kbd>Enter</kbd> key listener on the view document that allows the user to insert a paragraph\n   * near the widget when either:\n   *\n   * * The fake caret was first activated using the arrow keys,\n   * * The entire widget is selected in the model.\n   *\n   * In the first case, the new paragraph is inserted according to the `widget-type-around` selection\n   * attribute (see {@link #_handleArrowKeyPress}).\n   *\n   * In the second case, the new paragraph is inserted based on whether a soft (<kbd>Shift</kbd>+<kbd>Enter</kbd>) keystroke\n   * was pressed or not.\n   */\n  _enableInsertingParagraphsOnEnterKeypress() {\n    const editor = this.editor;\n    const selection = editor.model.document.selection;\n    const editingView = editor.editing.view;\n    this._listenToIfEnabled(editingView.document, \"enter\", (evt, domEventData) => {\n      if (evt.eventPhase != \"atTarget\") {\n        return;\n      }\n      const selectedModelElement = selection.getSelectedElement();\n      const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n      const schema = editor.model.schema;\n      let wasHandled;\n      if (this._insertParagraphAccordingToFakeCaretPosition()) {\n        wasHandled = true;\n      } else if (isTypeAroundWidget(selectedViewElement, selectedModelElement, schema)) {\n        this._insertParagraph(selectedModelElement, domEventData.isSoft ? \"before\" : \"after\");\n        wasHandled = true;\n      }\n      if (wasHandled) {\n        domEventData.preventDefault();\n        evt.stop();\n      }\n    }, { context: isWidget });\n  }\n  /**\n   * Similar to the {@link #_enableInsertingParagraphsOnEnterKeypress}, it allows the user\n   * to insert a paragraph next to a widget when the fake caret was activated using arrow\n   * keys but it responds to typing instead of <kbd>Enter</kbd>.\n   *\n   * Listener enabled by this method will insert a new paragraph according to the `widget-type-around`\n   * model selection attribute as the user simply starts typing, which creates the impression that the fake caret\n   * behaves like a real one rendered by the browser (AKA your text appears where the caret was).\n   *\n   * **Note**: At the moment this listener creates 2 undo steps: one for the `insertParagraph` command\n   * and another one for actual typing. It is not a disaster but this may need to be fixed\n   * sooner or later.\n   */\n  _enableInsertingParagraphsOnTypingKeystroke() {\n    const editor = this.editor;\n    const viewDocument = editor.editing.view.document;\n    this._listenToIfEnabled(viewDocument, \"insertText\", (evt, data) => {\n      if (this._insertParagraphAccordingToFakeCaretPosition()) {\n        data.selection = viewDocument.selection;\n      }\n    }, { priority: \"high\" });\n    if (env_default.isAndroid) {\n      this._listenToIfEnabled(viewDocument, \"keydown\", (evt, data) => {\n        if (data.keyCode == 229) {\n          this._insertParagraphAccordingToFakeCaretPosition();\n        }\n      });\n    } else {\n      this._listenToIfEnabled(viewDocument, \"compositionstart\", () => {\n        this._insertParagraphAccordingToFakeCaretPosition();\n      }, { priority: \"high\" });\n    }\n  }\n  /**\n   * It creates a \"delete\" event listener on the view document to handle cases when the <kbd>Delete</kbd> or <kbd>Backspace</kbd>\n   * is pressed and the fake caret is currently active.\n   *\n   * The fake caret should create an illusion of a real browser caret so that when it appears before or after\n   * a widget, pressing <kbd>Delete</kbd> or <kbd>Backspace</kbd> should remove a widget or delete the content\n   * before or after a widget (depending on the content surrounding the widget).\n   */\n  _enableDeleteIntegration() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    const model = editor.model;\n    const schema = model.schema;\n    this._listenToIfEnabled(editingView.document, \"delete\", (evt, domEventData) => {\n      if (evt.eventPhase != \"atTarget\") {\n        return;\n      }\n      const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(model.document.selection);\n      if (!typeAroundFakeCaretPosition) {\n        return;\n      }\n      const direction = domEventData.direction;\n      const selectedModelWidget = model.document.selection.getSelectedElement();\n      const isFakeCaretBefore = typeAroundFakeCaretPosition === \"before\";\n      const isDeleteForward = direction == \"forward\";\n      const shouldDeleteEntireWidget = isFakeCaretBefore === isDeleteForward;\n      if (shouldDeleteEntireWidget) {\n        editor.execute(\"delete\", {\n          selection: model.createSelection(selectedModelWidget, \"on\")\n        });\n      } else {\n        const range = schema.getNearestSelectionRange(model.createPositionAt(selectedModelWidget, typeAroundFakeCaretPosition), direction);\n        if (range) {\n          if (!range.isCollapsed) {\n            model.change((writer) => {\n              writer.setSelection(range);\n              editor.execute(isDeleteForward ? \"deleteForward\" : \"delete\");\n            });\n          } else {\n            const probe = model.createSelection(range.start);\n            model.modifySelection(probe, { direction });\n            if (!probe.focus.isEqual(range.start)) {\n              model.change((writer) => {\n                writer.setSelection(range);\n                editor.execute(isDeleteForward ? \"deleteForward\" : \"delete\");\n              });\n            } else {\n              const deepestEmptyRangeAncestor = getDeepestEmptyElementAncestor(schema, range.start.parent);\n              model.deleteContent(model.createSelection(deepestEmptyRangeAncestor, \"on\"), {\n                doNotAutoparagraph: true\n              });\n            }\n          }\n        }\n      }\n      domEventData.preventDefault();\n      evt.stop();\n    }, { context: isWidget });\n  }\n  /**\n   * Attaches the {@link module:engine/model/model~Model#event:insertContent} event listener that, for instance, allows the user to paste\n   * content near a widget when the fake caret is first activated using the arrow keys.\n   *\n   * The content is inserted according to the `widget-type-around` selection attribute (see {@link #_handleArrowKeyPress}).\n   */\n  _enableInsertContentIntegration() {\n    const editor = this.editor;\n    const model = this.editor.model;\n    const documentSelection = model.document.selection;\n    this._listenToIfEnabled(editor.model, \"insertContent\", (evt, [content, selectable]) => {\n      if (selectable && !selectable.is(\"documentSelection\")) {\n        return;\n      }\n      const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n      if (!typeAroundFakeCaretPosition) {\n        return;\n      }\n      evt.stop();\n      return model.change((writer) => {\n        const selectedElement = documentSelection.getSelectedElement();\n        const position = model.createPositionAt(selectedElement, typeAroundFakeCaretPosition);\n        const selection = writer.createSelection(position);\n        const result = model.insertContent(content, selection);\n        writer.setSelection(selection);\n        return result;\n      });\n    }, { priority: \"high\" });\n  }\n  /**\n   * Attaches the {@link module:engine/model/model~Model#event:insertObject} event listener that modifies the\n   * `options.findOptimalPosition`parameter to position of fake caret in relation to selected element\n   * to reflect user's intent of desired insertion position.\n   *\n   * The object is inserted according to the `widget-type-around` selection attribute (see {@link #_handleArrowKeyPress}).\n   */\n  _enableInsertObjectIntegration() {\n    const editor = this.editor;\n    const model = this.editor.model;\n    const documentSelection = model.document.selection;\n    this._listenToIfEnabled(editor.model, \"insertObject\", (evt, args) => {\n      const [, selectable, options = {}] = args;\n      if (selectable && !selectable.is(\"documentSelection\")) {\n        return;\n      }\n      const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n      if (!typeAroundFakeCaretPosition) {\n        return;\n      }\n      options.findOptimalPosition = typeAroundFakeCaretPosition;\n      args[3] = options;\n    }, { priority: \"high\" });\n  }\n  /**\n   * Attaches the {@link module:engine/model/model~Model#event:deleteContent} event listener to block the event when the fake\n   * caret is active.\n   *\n   * This is required for cases that trigger {@link module:engine/model/model~Model#deleteContent `model.deleteContent()`}\n   * before calling {@link module:engine/model/model~Model#insertContent `model.insertContent()`} like, for instance,\n   * plain text pasting.\n   */\n  _enableDeleteContentIntegration() {\n    const editor = this.editor;\n    const model = this.editor.model;\n    const documentSelection = model.document.selection;\n    this._listenToIfEnabled(editor.model, \"deleteContent\", (evt, [selection]) => {\n      if (selection && !selection.is(\"documentSelection\")) {\n        return;\n      }\n      const typeAroundFakeCaretPosition = getTypeAroundFakeCaretPosition(documentSelection);\n      if (typeAroundFakeCaretPosition) {\n        evt.stop();\n      }\n    }, { priority: \"high\" });\n  }\n};\nfunction injectUIIntoWidget(viewWriter, buttonTitles, widgetViewElement) {\n  const typeAroundWrapper = viewWriter.createUIElement(\"div\", {\n    class: \"ck ck-reset_all ck-widget__type-around\"\n  }, function(domDocument) {\n    const wrapperDomElement = this.toDomElement(domDocument);\n    injectButtons(wrapperDomElement, buttonTitles);\n    injectFakeCaret(wrapperDomElement);\n    return wrapperDomElement;\n  });\n  viewWriter.insert(viewWriter.createPositionAt(widgetViewElement, \"end\"), typeAroundWrapper);\n}\nfunction injectButtons(wrapperDomElement, buttonTitles) {\n  for (const position of POSSIBLE_INSERTION_POSITIONS) {\n    const buttonTemplate = new Template({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-widget__type-around__button\",\n          `ck-widget__type-around__button_${position}`\n        ],\n        title: buttonTitles[position],\n        \"aria-hidden\": \"true\"\n      },\n      children: [\n        wrapperDomElement.ownerDocument.importNode(RETURN_ARROW_ICON_ELEMENT, true)\n      ]\n    });\n    wrapperDomElement.appendChild(buttonTemplate.render());\n  }\n}\nfunction injectFakeCaret(wrapperDomElement) {\n  const caretTemplate = new Template({\n    tag: \"div\",\n    attributes: {\n      class: [\n        \"ck\",\n        \"ck-widget__type-around__fake-caret\"\n      ]\n    }\n  });\n  wrapperDomElement.appendChild(caretTemplate.render());\n}\nfunction getDeepestEmptyElementAncestor(schema, element) {\n  let deepestEmptyAncestor = element;\n  for (const ancestor of element.getAncestors({ parentFirst: true })) {\n    if (ancestor.childCount > 1 || schema.isLimit(ancestor)) {\n      break;\n    }\n    deepestEmptyAncestor = ancestor;\n  }\n  return deepestEmptyAncestor;\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/verticalnavigation.js\nfunction verticalNavigationHandler(editing) {\n  const model = editing.model;\n  return (evt, data) => {\n    const arrowUpPressed = data.keyCode == keyCodes.arrowup;\n    const arrowDownPressed = data.keyCode == keyCodes.arrowdown;\n    const expandSelection = data.shiftKey;\n    const selection = model.document.selection;\n    if (!arrowUpPressed && !arrowDownPressed) {\n      return;\n    }\n    const isForward = arrowDownPressed;\n    if (expandSelection && selectionWillShrink(selection, isForward)) {\n      return;\n    }\n    const range = findTextRangeFromSelection(editing, selection, isForward);\n    if (!range) {\n      return;\n    }\n    if (range.isCollapsed) {\n      if (selection.isCollapsed) {\n        return;\n      } else if (expandSelection) {\n        return;\n      }\n    }\n    if (range.isCollapsed || isSingleLineRange(editing, range, isForward)) {\n      model.change((writer) => {\n        const newPosition = isForward ? range.end : range.start;\n        if (expandSelection) {\n          const newSelection = model.createSelection(selection.anchor);\n          newSelection.setFocus(newPosition);\n          writer.setSelection(newSelection);\n        } else {\n          writer.setSelection(newPosition);\n        }\n      });\n      evt.stop();\n      data.preventDefault();\n      data.stopPropagation();\n    }\n  };\n}\nfunction findTextRangeFromSelection(editing, selection, isForward) {\n  const model = editing.model;\n  if (isForward) {\n    const startPosition = selection.isCollapsed ? selection.focus : selection.getLastPosition();\n    const endPosition = getNearestNonInlineLimit(model, startPosition, \"forward\");\n    if (!endPosition) {\n      return null;\n    }\n    const range = model.createRange(startPosition, endPosition);\n    const lastRangePosition = getNearestTextPosition(model.schema, range, \"backward\");\n    if (lastRangePosition) {\n      return model.createRange(startPosition, lastRangePosition);\n    }\n    return null;\n  } else {\n    const endPosition = selection.isCollapsed ? selection.focus : selection.getFirstPosition();\n    const startPosition = getNearestNonInlineLimit(model, endPosition, \"backward\");\n    if (!startPosition) {\n      return null;\n    }\n    const range = model.createRange(startPosition, endPosition);\n    const firstRangePosition = getNearestTextPosition(model.schema, range, \"forward\");\n    if (firstRangePosition) {\n      return model.createRange(firstRangePosition, endPosition);\n    }\n    return null;\n  }\n}\nfunction getNearestNonInlineLimit(model, startPosition, direction) {\n  const schema = model.schema;\n  const range = model.createRangeIn(startPosition.root);\n  const walkerValueType = direction == \"forward\" ? \"elementStart\" : \"elementEnd\";\n  for (const { previousPosition, item, type } of range.getWalker({ startPosition, direction })) {\n    if (schema.isLimit(item) && !schema.isInline(item)) {\n      return previousPosition;\n    }\n    if (type == walkerValueType && schema.isBlock(item)) {\n      return null;\n    }\n  }\n  return null;\n}\nfunction getNearestTextPosition(schema, range, direction) {\n  const position = direction == \"backward\" ? range.end : range.start;\n  if (schema.checkChild(position, \"$text\")) {\n    return position;\n  }\n  for (const { nextPosition } of range.getWalker({ direction })) {\n    if (schema.checkChild(nextPosition, \"$text\")) {\n      return nextPosition;\n    }\n  }\n  return null;\n}\nfunction isSingleLineRange(editing, modelRange, isForward) {\n  const model = editing.model;\n  const domConverter = editing.view.domConverter;\n  if (isForward) {\n    const probe = model.createSelection(modelRange.start);\n    model.modifySelection(probe);\n    if (!probe.focus.isAtEnd && !modelRange.start.isEqual(probe.focus)) {\n      modelRange = model.createRange(probe.focus, modelRange.end);\n    }\n  }\n  const viewRange = editing.mapper.toViewRange(modelRange);\n  const domRange = domConverter.viewRangeToDom(viewRange);\n  const rects = Rect.getDomRangeRects(domRange);\n  let boundaryVerticalPosition;\n  for (const rect of rects) {\n    if (boundaryVerticalPosition === void 0) {\n      boundaryVerticalPosition = Math.round(rect.bottom);\n      continue;\n    }\n    if (Math.round(rect.top) >= boundaryVerticalPosition) {\n      return false;\n    }\n    boundaryVerticalPosition = Math.max(boundaryVerticalPosition, Math.round(rect.bottom));\n  }\n  return true;\n}\nfunction selectionWillShrink(selection, isForward) {\n  return !selection.isCollapsed && selection.isBackward == isForward;\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widget.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-widget/theme/widget.css\";\nvar Widget = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._previouslySelected = /* @__PURE__ */ new Set();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Widget\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [WidgetTypeAround, Delete];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    this.editor.editing.downcastDispatcher.on(\"selection\", (evt, data, conversionApi) => {\n      const viewWriter = conversionApi.writer;\n      const modelSelection = data.selection;\n      if (modelSelection.isCollapsed) {\n        return;\n      }\n      const selectedModelElement = modelSelection.getSelectedElement();\n      if (!selectedModelElement) {\n        return;\n      }\n      const selectedViewElement = editor.editing.mapper.toViewElement(selectedModelElement);\n      if (!isWidget(selectedViewElement)) {\n        return;\n      }\n      if (!conversionApi.consumable.consume(modelSelection, \"selection\")) {\n        return;\n      }\n      viewWriter.setSelection(viewWriter.createRangeOn(selectedViewElement), {\n        fake: true,\n        label: getLabel(selectedViewElement)\n      });\n    });\n    this.editor.editing.downcastDispatcher.on(\"selection\", (evt, data, conversionApi) => {\n      this._clearPreviouslySelectedWidgets(conversionApi.writer);\n      const viewWriter = conversionApi.writer;\n      const viewSelection = viewWriter.document.selection;\n      let lastMarked = null;\n      for (const range of viewSelection.getRanges()) {\n        for (const value of range) {\n          const node = value.item;\n          if (isWidget(node) && !isChild(node, lastMarked)) {\n            viewWriter.addClass(WIDGET_SELECTED_CLASS_NAME, node);\n            this._previouslySelected.add(node);\n            lastMarked = node;\n          }\n        }\n      }\n    }, { priority: \"low\" });\n    view.addObserver(MouseObserver);\n    this.listenTo(viewDocument, \"mousedown\", (...args) => this._onMousedown(...args));\n    this.listenTo(viewDocument, \"arrowKey\", (...args) => {\n      this._handleSelectionChangeOnArrowKeyPress(...args);\n    }, { context: [isWidget, \"$text\"] });\n    this.listenTo(viewDocument, \"arrowKey\", (...args) => {\n      this._preventDefaultOnArrowKeyPress(...args);\n    }, { context: \"$root\" });\n    this.listenTo(viewDocument, \"arrowKey\", verticalNavigationHandler(this.editor.editing), { context: \"$text\" });\n    this.listenTo(viewDocument, \"delete\", (evt, data) => {\n      if (this._handleDelete(data.direction == \"forward\")) {\n        data.preventDefault();\n        evt.stop();\n      }\n    }, { context: \"$root\" });\n  }\n  /**\n   * Handles {@link module:engine/view/document~Document#event:mousedown mousedown} events on widget elements.\n   */\n  _onMousedown(eventInfo, domEventData) {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    let element = domEventData.target;\n    if (domEventData.domEvent.detail >= 3) {\n      if (this._selectBlockContent(element)) {\n        domEventData.preventDefault();\n      }\n      return;\n    }\n    if (isInsideNestedEditable(element)) {\n      return;\n    }\n    if (!isWidget(element)) {\n      element = element.findAncestor(isWidget);\n      if (!element) {\n        return;\n      }\n    }\n    if (env_default.isAndroid) {\n      domEventData.preventDefault();\n    }\n    if (!viewDocument.isFocused) {\n      view.focus();\n    }\n    const modelElement = editor.editing.mapper.toModelElement(element);\n    this._setSelectionOverElement(modelElement);\n  }\n  /**\n   * Selects entire block content, e.g. on triple click it selects entire paragraph.\n   */\n  _selectBlockContent(element) {\n    const editor = this.editor;\n    const model = editor.model;\n    const mapper = editor.editing.mapper;\n    const schema = model.schema;\n    const viewElement = mapper.findMappedViewAncestor(this.editor.editing.view.createPositionAt(element, 0));\n    const modelElement = findTextBlockAncestor(mapper.toModelElement(viewElement), model.schema);\n    if (!modelElement) {\n      return false;\n    }\n    model.change((writer) => {\n      const nextTextBlock = !schema.isLimit(modelElement) ? findNextTextBlock(writer.createPositionAfter(modelElement), schema) : null;\n      const start = writer.createPositionAt(modelElement, 0);\n      const end = nextTextBlock ? writer.createPositionAt(nextTextBlock, 0) : writer.createPositionAt(modelElement, \"end\");\n      writer.setSelection(writer.createRange(start, end));\n    });\n    return true;\n  }\n  /**\n   * Handles {@link module:engine/view/document~Document#event:keydown keydown} events and changes\n   * the model selection when:\n   *\n   * * arrow key is pressed when the widget is selected,\n   * * the selection is next to a widget and the widget should become selected upon the arrow key press.\n   *\n   * See {@link #_preventDefaultOnArrowKeyPress}.\n   */\n  _handleSelectionChangeOnArrowKeyPress(eventInfo, domEventData) {\n    const keyCode = domEventData.keyCode;\n    const model = this.editor.model;\n    const schema = model.schema;\n    const modelSelection = model.document.selection;\n    const objectElement = modelSelection.getSelectedElement();\n    const direction = getLocalizedArrowKeyCodeDirection(keyCode, this.editor.locale.contentLanguageDirection);\n    const isForward = direction == \"down\" || direction == \"right\";\n    const isVerticalNavigation = direction == \"up\" || direction == \"down\";\n    if (objectElement && schema.isObject(objectElement)) {\n      const position = isForward ? modelSelection.getLastPosition() : modelSelection.getFirstPosition();\n      const newRange = schema.getNearestSelectionRange(position, isForward ? \"forward\" : \"backward\");\n      if (newRange) {\n        model.change((writer) => {\n          writer.setSelection(newRange);\n        });\n        domEventData.preventDefault();\n        eventInfo.stop();\n      }\n      return;\n    }\n    if (!modelSelection.isCollapsed && !domEventData.shiftKey) {\n      const firstPosition = modelSelection.getFirstPosition();\n      const lastPosition = modelSelection.getLastPosition();\n      const firstSelectedNode = firstPosition.nodeAfter;\n      const lastSelectedNode = lastPosition.nodeBefore;\n      if (firstSelectedNode && schema.isObject(firstSelectedNode) || lastSelectedNode && schema.isObject(lastSelectedNode)) {\n        model.change((writer) => {\n          writer.setSelection(isForward ? lastPosition : firstPosition);\n        });\n        domEventData.preventDefault();\n        eventInfo.stop();\n      }\n      return;\n    }\n    if (!modelSelection.isCollapsed) {\n      return;\n    }\n    const objectElementNextToSelection = this._getObjectElementNextToSelection(isForward);\n    if (objectElementNextToSelection && schema.isObject(objectElementNextToSelection)) {\n      if (schema.isInline(objectElementNextToSelection) && isVerticalNavigation) {\n        return;\n      }\n      this._setSelectionOverElement(objectElementNextToSelection);\n      domEventData.preventDefault();\n      eventInfo.stop();\n    }\n  }\n  /**\n   * Handles {@link module:engine/view/document~Document#event:keydown keydown} events and prevents\n   * the default browser behavior to make sure the fake selection is not being moved from a fake selection\n   * container.\n   *\n   * See {@link #_handleSelectionChangeOnArrowKeyPress}.\n   */\n  _preventDefaultOnArrowKeyPress(eventInfo, domEventData) {\n    const model = this.editor.model;\n    const schema = model.schema;\n    const objectElement = model.document.selection.getSelectedElement();\n    if (objectElement && schema.isObject(objectElement)) {\n      domEventData.preventDefault();\n      eventInfo.stop();\n    }\n  }\n  /**\n   * Handles delete keys: backspace and delete.\n   *\n   * @param isForward Set to true if delete was performed in forward direction.\n   * @returns Returns `true` if keys were handled correctly.\n   */\n  _handleDelete(isForward) {\n    const modelDocument = this.editor.model.document;\n    const modelSelection = modelDocument.selection;\n    if (!this.editor.model.canEditAt(modelSelection)) {\n      return;\n    }\n    if (!modelSelection.isCollapsed) {\n      return;\n    }\n    const objectElement = this._getObjectElementNextToSelection(isForward);\n    if (objectElement) {\n      this.editor.model.change((writer) => {\n        let previousNode = modelSelection.anchor.parent;\n        while (previousNode.isEmpty) {\n          const nodeToRemove = previousNode;\n          previousNode = nodeToRemove.parent;\n          writer.remove(nodeToRemove);\n        }\n        this._setSelectionOverElement(objectElement);\n      });\n      return true;\n    }\n  }\n  /**\n   * Sets {@link module:engine/model/selection~Selection document's selection} over given element.\n   *\n   * @internal\n   */\n  _setSelectionOverElement(element) {\n    this.editor.model.change((writer) => {\n      writer.setSelection(writer.createRangeOn(element));\n    });\n  }\n  /**\n   * Checks if {@link module:engine/model/element~Element element} placed next to the current\n   * {@link module:engine/model/selection~Selection model selection} exists and is marked in\n   * {@link module:engine/model/schema~Schema schema} as `object`.\n   *\n   * @internal\n   * @param forward Direction of checking.\n   */\n  _getObjectElementNextToSelection(forward) {\n    const model = this.editor.model;\n    const schema = model.schema;\n    const modelSelection = model.document.selection;\n    const probe = model.createSelection(modelSelection);\n    model.modifySelection(probe, { direction: forward ? \"forward\" : \"backward\" });\n    if (probe.isEqual(modelSelection)) {\n      return null;\n    }\n    const objectElement = forward ? probe.focus.nodeBefore : probe.focus.nodeAfter;\n    if (!!objectElement && schema.isObject(objectElement)) {\n      return objectElement;\n    }\n    return null;\n  }\n  /**\n   * Removes CSS class from previously selected widgets.\n   */\n  _clearPreviouslySelectedWidgets(writer) {\n    for (const widget of this._previouslySelected) {\n      writer.removeClass(WIDGET_SELECTED_CLASS_NAME, widget);\n    }\n    this._previouslySelected.clear();\n  }\n};\nfunction isInsideNestedEditable(element) {\n  let currentElement = element;\n  while (currentElement) {\n    if (currentElement.is(\"editableElement\") && !currentElement.is(\"rootElement\")) {\n      return true;\n    }\n    if (isWidget(currentElement)) {\n      return false;\n    }\n    currentElement = currentElement.parent;\n  }\n  return false;\n}\nfunction isChild(element, parent) {\n  if (!parent) {\n    return false;\n  }\n  return Array.from(element.getAncestors()).includes(parent);\n}\nfunction findTextBlockAncestor(modelElement, schema) {\n  for (const element of modelElement.getAncestors({ includeSelf: true, parentFirst: true })) {\n    if (schema.checkChild(element, \"$text\")) {\n      return element;\n    }\n    if (schema.isLimit(element) && !schema.isObject(element)) {\n      break;\n    }\n  }\n  return null;\n}\nfunction findNextTextBlock(position, schema) {\n  const treeWalker = new TreeWalker({ startPosition: position });\n  for (const { item } of treeWalker) {\n    if (schema.isLimit(item) || !item.is(\"element\")) {\n      return null;\n    }\n    if (schema.checkChild(item, \"$text\")) {\n      return item;\n    }\n  }\n  return null;\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgettoolbarrepository.js\nvar WidgetToolbarRepository = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._toolbarDefinitions = /* @__PURE__ */ new Map();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ContextualBalloon];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"WidgetToolbarRepository\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    if (editor.plugins.has(\"BalloonToolbar\")) {\n      const balloonToolbar = editor.plugins.get(\"BalloonToolbar\");\n      this.listenTo(balloonToolbar, \"show\", (evt) => {\n        if (isWidgetSelected(editor.editing.view.document.selection)) {\n          evt.stop();\n        }\n      }, { priority: \"high\" });\n    }\n    this._balloon = this.editor.plugins.get(\"ContextualBalloon\");\n    this.on(\"change:isEnabled\", () => {\n      this._updateToolbarsVisibility();\n    });\n    this.listenTo(editor.ui, \"update\", () => {\n      this._updateToolbarsVisibility();\n    });\n    this.listenTo(editor.ui.focusTracker, \"change:isFocused\", () => {\n      this._updateToolbarsVisibility();\n    }, { priority: \"low\" });\n  }\n  destroy() {\n    super.destroy();\n    for (const toolbarConfig of this._toolbarDefinitions.values()) {\n      toolbarConfig.view.destroy();\n    }\n  }\n  /**\n   * Registers toolbar in the WidgetToolbarRepository. It renders it in the `ContextualBalloon` based on the value of the invoked\n   * `getRelatedElement` function. Toolbar items are gathered from `items` array.\n   * The balloon's CSS class is by default `ck-toolbar-container` and may be override with the `balloonClassName` option.\n   *\n   * Note: This method should be called in the {@link module:core/plugin~PluginInterface#afterInit `Plugin#afterInit()`}\n   * callback (or later) to make sure that the given toolbar items were already registered by other plugins.\n   *\n   * @param toolbarId An id for the toolbar. Used to\n   * @param options.ariaLabel Label used by assistive technologies to describe this toolbar element.\n   * @param options.items Array of toolbar items.\n   * @param options.getRelatedElement Callback which returns an element the toolbar should be attached to.\n   * @param options.balloonClassName CSS class for the widget balloon.\n   */\n  register(toolbarId, { ariaLabel, items, getRelatedElement, balloonClassName = \"ck-toolbar-container\" }) {\n    if (!items.length) {\n      logWarning(\"widget-toolbar-no-items\", { toolbarId });\n      return;\n    }\n    const editor = this.editor;\n    const t = editor.t;\n    const toolbarView = new ToolbarView(editor.locale);\n    toolbarView.ariaLabel = ariaLabel || t(\"Widget toolbar\");\n    if (this._toolbarDefinitions.has(toolbarId)) {\n      throw new CKEditorError(\"widget-toolbar-duplicated\", this, { toolbarId });\n    }\n    const toolbarDefinition = {\n      view: toolbarView,\n      getRelatedElement,\n      balloonClassName,\n      itemsConfig: items,\n      initialized: false\n    };\n    editor.ui.addToolbar(toolbarView, {\n      isContextual: true,\n      beforeFocus: () => {\n        const relatedElement = getRelatedElement(editor.editing.view.document.selection);\n        if (relatedElement) {\n          this._showToolbar(toolbarDefinition, relatedElement);\n        }\n      },\n      afterBlur: () => {\n        this._hideToolbar(toolbarDefinition);\n      }\n    });\n    this._toolbarDefinitions.set(toolbarId, toolbarDefinition);\n  }\n  /**\n   * Iterates over stored toolbars and makes them visible or hidden.\n   */\n  _updateToolbarsVisibility() {\n    let maxRelatedElementDepth = 0;\n    let deepestRelatedElement = null;\n    let deepestToolbarDefinition = null;\n    for (const definition of this._toolbarDefinitions.values()) {\n      const relatedElement = definition.getRelatedElement(this.editor.editing.view.document.selection);\n      if (!this.isEnabled || !relatedElement) {\n        if (this._isToolbarInBalloon(definition)) {\n          this._hideToolbar(definition);\n        }\n      } else if (!this.editor.ui.focusTracker.isFocused) {\n        if (this._isToolbarVisible(definition)) {\n          this._hideToolbar(definition);\n        }\n      } else {\n        const relatedElementDepth = relatedElement.getAncestors().length;\n        if (relatedElementDepth > maxRelatedElementDepth) {\n          maxRelatedElementDepth = relatedElementDepth;\n          deepestRelatedElement = relatedElement;\n          deepestToolbarDefinition = definition;\n        }\n      }\n    }\n    if (deepestToolbarDefinition) {\n      this._showToolbar(deepestToolbarDefinition, deepestRelatedElement);\n    }\n  }\n  /**\n   * Hides the given toolbar.\n   */\n  _hideToolbar(toolbarDefinition) {\n    this._balloon.remove(toolbarDefinition.view);\n    this.stopListening(this._balloon, \"change:visibleView\");\n  }\n  /**\n   * Shows up the toolbar if the toolbar is not visible.\n   * Otherwise, repositions the toolbar's balloon when toolbar's view is the most top view in balloon stack.\n   *\n   * It might happen here that the toolbar's view is under another view. Then do nothing as the other toolbar view\n   * should be still visible after the {@link module:ui/editorui/editorui~EditorUI#event:update}.\n   */\n  _showToolbar(toolbarDefinition, relatedElement) {\n    if (this._isToolbarVisible(toolbarDefinition)) {\n      repositionContextualBalloon(this.editor, relatedElement);\n    } else if (!this._isToolbarInBalloon(toolbarDefinition)) {\n      if (!toolbarDefinition.initialized) {\n        toolbarDefinition.initialized = true;\n        toolbarDefinition.view.fillFromConfig(toolbarDefinition.itemsConfig, this.editor.ui.componentFactory);\n      }\n      this._balloon.add({\n        view: toolbarDefinition.view,\n        position: getBalloonPositionData(this.editor, relatedElement),\n        balloonClassName: toolbarDefinition.balloonClassName\n      });\n      this.listenTo(this._balloon, \"change:visibleView\", () => {\n        for (const definition of this._toolbarDefinitions.values()) {\n          if (this._isToolbarVisible(definition)) {\n            const relatedElement2 = definition.getRelatedElement(this.editor.editing.view.document.selection);\n            repositionContextualBalloon(this.editor, relatedElement2);\n          }\n        }\n      });\n    }\n  }\n  _isToolbarVisible(toolbar) {\n    return this._balloon.visibleView === toolbar.view;\n  }\n  _isToolbarInBalloon(toolbar) {\n    return this._balloon.hasView(toolbar.view);\n  }\n};\nfunction repositionContextualBalloon(editor, relatedElement) {\n  const balloon = editor.plugins.get(\"ContextualBalloon\");\n  const position = getBalloonPositionData(editor, relatedElement);\n  balloon.updatePosition(position);\n}\nfunction getBalloonPositionData(editor, relatedElement) {\n  const editingView = editor.editing.view;\n  const defaultPositions = balloonpanelview_default.defaultPositions;\n  return {\n    target: editingView.domConverter.mapViewToDom(relatedElement),\n    positions: [\n      defaultPositions.northArrowSouth,\n      defaultPositions.northArrowSouthWest,\n      defaultPositions.northArrowSouthEast,\n      defaultPositions.southArrowNorth,\n      defaultPositions.southArrowNorthWest,\n      defaultPositions.southArrowNorthEast,\n      defaultPositions.viewportStickyNorth\n    ]\n  };\n}\nfunction isWidgetSelected(selection) {\n  const viewElement = selection.getSelectedElement();\n  return !!(viewElement && isWidget(viewElement));\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/resizerstate.js\nvar ResizeState = class extends ObservableMixin() {\n  /**\n   * @param options Resizer options.\n   */\n  constructor(options) {\n    super();\n    this.set(\"activeHandlePosition\", null);\n    this.set(\"proposedWidthPercents\", null);\n    this.set(\"proposedWidth\", null);\n    this.set(\"proposedHeight\", null);\n    this.set(\"proposedHandleHostWidth\", null);\n    this.set(\"proposedHandleHostHeight\", null);\n    this._options = options;\n    this._referenceCoordinates = null;\n  }\n  /**\n   * The original width (pixels) of the resized object when the resize process was started.\n   */\n  get originalWidth() {\n    return this._originalWidth;\n  }\n  /**\n   * The original height (pixels) of the resized object when the resize process was started.\n   */\n  get originalHeight() {\n    return this._originalHeight;\n  }\n  /**\n   * The original width (percents) of the resized object when the resize process was started.\n   */\n  get originalWidthPercents() {\n    return this._originalWidthPercents;\n  }\n  /**\n   * A width to height ratio of the resized image.\n   */\n  get aspectRatio() {\n    return this._aspectRatio;\n  }\n  /**\n   *\n   * @param domResizeHandle The handle used to calculate the reference point.\n   */\n  begin(domResizeHandle, domHandleHost, domResizeHost) {\n    const clientRect = new Rect(domHandleHost);\n    this.activeHandlePosition = getHandlePosition(domResizeHandle);\n    this._referenceCoordinates = getAbsoluteBoundaryPoint(domHandleHost, getOppositePosition(this.activeHandlePosition));\n    this._originalWidth = clientRect.width;\n    this._originalHeight = clientRect.height;\n    this._aspectRatio = clientRect.width / clientRect.height;\n    const widthStyle = domResizeHost.style.width;\n    if (widthStyle && widthStyle.match(/^\\d+(\\.\\d*)?%$/)) {\n      this._originalWidthPercents = parseFloat(widthStyle);\n    } else {\n      this._originalWidthPercents = calculateHostPercentageWidth(domResizeHost, clientRect);\n    }\n  }\n  update(newSize) {\n    this.proposedWidth = newSize.width;\n    this.proposedHeight = newSize.height;\n    this.proposedWidthPercents = newSize.widthPercents;\n    this.proposedHandleHostWidth = newSize.handleHostWidth;\n    this.proposedHandleHostHeight = newSize.handleHostHeight;\n  }\n};\nfunction calculateHostPercentageWidth(domResizeHost, resizeHostRect) {\n  const domResizeHostParent = domResizeHost.parentElement;\n  let parentWidth = parseFloat(domResizeHostParent.ownerDocument.defaultView.getComputedStyle(domResizeHostParent).width);\n  const ancestorLevelLimit = 5;\n  let currentLevel = 0;\n  let checkedElement = domResizeHostParent;\n  while (isNaN(parentWidth)) {\n    checkedElement = checkedElement.parentElement;\n    if (++currentLevel > ancestorLevelLimit) {\n      return 0;\n    }\n    parentWidth = parseFloat(domResizeHostParent.ownerDocument.defaultView.getComputedStyle(checkedElement).width);\n  }\n  return resizeHostRect.width / parentWidth * 100;\n}\nfunction getAbsoluteBoundaryPoint(element, resizerPosition) {\n  const elementRect = new Rect(element);\n  const positionParts = resizerPosition.split(\"-\");\n  const ret = {\n    x: positionParts[1] == \"right\" ? elementRect.right : elementRect.left,\n    y: positionParts[0] == \"bottom\" ? elementRect.bottom : elementRect.top\n  };\n  ret.x += element.ownerDocument.defaultView.scrollX;\n  ret.y += element.ownerDocument.defaultView.scrollY;\n  return ret;\n}\nfunction getResizerHandleClass(resizerPosition) {\n  return `ck-widget__resizer__handle-${resizerPosition}`;\n}\nfunction getHandlePosition(domHandle) {\n  const resizerPositions = [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"];\n  for (const position of resizerPositions) {\n    if (domHandle.classList.contains(getResizerHandleClass(position))) {\n      return position;\n    }\n  }\n}\nfunction getOppositePosition(position) {\n  const parts = position.split(\"-\");\n  const replacements = {\n    top: \"bottom\",\n    bottom: \"top\",\n    left: \"right\",\n    right: \"left\"\n  };\n  return `${replacements[parts[0]]}-${replacements[parts[1]]}`;\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/sizeview.js\nvar SizeView = class extends View {\n  constructor() {\n    super();\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-size-view\",\n          bind.to(\"_viewPosition\", (value) => value ? `ck-orientation-${value}` : \"\")\n        ],\n        style: {\n          display: bind.if(\"_isVisible\", \"none\", (visible) => !visible)\n        }\n      },\n      children: [{\n        text: bind.to(\"_label\")\n      }]\n    });\n  }\n  /**\n   * A method used for binding the `SizeView` instance properties to the `ResizeState` instance observable properties.\n   *\n   * @internal\n   * @param options An object defining the resizer options, used for setting the proper size label.\n   * @param resizeState The `ResizeState` class instance, used for keeping the `SizeView` state up to date.\n   */\n  _bindToState(options, resizeState) {\n    this.bind(\"_isVisible\").to(resizeState, \"proposedWidth\", resizeState, \"proposedHeight\", (width, height) => width !== null && height !== null);\n    this.bind(\"_label\").to(resizeState, \"proposedHandleHostWidth\", resizeState, \"proposedHandleHostHeight\", resizeState, \"proposedWidthPercents\", (width, height, widthPercents) => {\n      if (options.unit === \"px\") {\n        return `${width}×${height}`;\n      } else {\n        return `${widthPercents}%`;\n      }\n    });\n    this.bind(\"_viewPosition\").to(\n      resizeState,\n      \"activeHandlePosition\",\n      resizeState,\n      \"proposedHandleHostWidth\",\n      resizeState,\n      \"proposedHandleHostHeight\",\n      // If the widget is too small to contain the size label, display the label above.\n      (position, width, height) => width < 50 || height < 50 ? \"above-center\" : position\n    );\n  }\n  /**\n   * A method used for cleaning up. It removes the bindings and hides the view.\n   *\n   * @internal\n   */\n  _dismiss() {\n    this.unbind();\n    this._isVisible = false;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgetresize/resizer.js\nvar Resizer = class extends ObservableMixin() {\n  /**\n   * @param options Resizer options.\n   */\n  constructor(options) {\n    super();\n    this._viewResizerWrapper = null;\n    this._options = options;\n    this.set(\"isEnabled\", true);\n    this.set(\"isSelected\", false);\n    this.bind(\"isVisible\").to(this, \"isEnabled\", this, \"isSelected\", (isEnabled, isSelected) => isEnabled && isSelected);\n    this.decorate(\"begin\");\n    this.decorate(\"cancel\");\n    this.decorate(\"commit\");\n    this.decorate(\"updateSize\");\n    this.on(\"commit\", (event) => {\n      if (!this.state.proposedWidth && !this.state.proposedWidthPercents) {\n        this._cleanup();\n        event.stop();\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * Stores the state of the resizable host geometry, such as the original width, the currently proposed height, etc.\n   *\n   * Note that a new state is created for each resize transaction.\n   */\n  get state() {\n    return this._state;\n  }\n  /**\n   * Makes resizer visible in the UI.\n   */\n  show() {\n    const editingView = this._options.editor.editing.view;\n    editingView.change((writer) => {\n      writer.removeClass(\"ck-hidden\", this._viewResizerWrapper);\n    });\n  }\n  /**\n   * Hides resizer in the UI.\n   */\n  hide() {\n    const editingView = this._options.editor.editing.view;\n    editingView.change((writer) => {\n      writer.addClass(\"ck-hidden\", this._viewResizerWrapper);\n    });\n  }\n  /**\n   * Attaches the resizer to the DOM.\n   */\n  attach() {\n    const that = this;\n    const widgetElement = this._options.viewElement;\n    const editingView = this._options.editor.editing.view;\n    editingView.change((writer) => {\n      const viewResizerWrapper = writer.createUIElement(\"div\", {\n        class: \"ck ck-reset_all ck-widget__resizer\"\n      }, function(domDocument) {\n        const domElement = this.toDomElement(domDocument);\n        that._appendHandles(domElement);\n        that._appendSizeUI(domElement);\n        return domElement;\n      });\n      writer.insert(writer.createPositionAt(widgetElement, \"end\"), viewResizerWrapper);\n      writer.addClass(\"ck-widget_with-resizer\", widgetElement);\n      this._viewResizerWrapper = viewResizerWrapper;\n      if (!this.isVisible) {\n        this.hide();\n      }\n    });\n    this.on(\"change:isVisible\", () => {\n      if (this.isVisible) {\n        this.show();\n        this.redraw();\n      } else {\n        this.hide();\n      }\n    });\n  }\n  /**\n   * Starts the resizing process.\n   *\n   * Creates a new {@link #state} for the current process.\n   *\n   * @fires begin\n   * @param domResizeHandle Clicked handle.\n   */\n  begin(domResizeHandle) {\n    this._state = new ResizeState(this._options);\n    this._sizeView._bindToState(this._options, this.state);\n    this._initialViewWidth = this._options.viewElement.getStyle(\"width\");\n    this.state.begin(domResizeHandle, this._getHandleHost(), this._getResizeHost());\n  }\n  /**\n   * Updates the proposed size based on `domEventData`.\n   *\n   * @fires updateSize\n   */\n  updateSize(domEventData) {\n    const newSize = this._proposeNewSize(domEventData);\n    const editingView = this._options.editor.editing.view;\n    editingView.change((writer) => {\n      const unit = this._options.unit || \"%\";\n      const newWidth = (unit === \"%\" ? newSize.widthPercents : newSize.width) + unit;\n      writer.setStyle(\"width\", newWidth, this._options.viewElement);\n    });\n    const domHandleHost = this._getHandleHost();\n    const domHandleHostRect = new Rect(domHandleHost);\n    const handleHostWidth = Math.round(domHandleHostRect.width);\n    const handleHostHeight = Math.round(domHandleHostRect.height);\n    const domResizeHostRect = new Rect(domHandleHost);\n    newSize.width = Math.round(domResizeHostRect.width);\n    newSize.height = Math.round(domResizeHostRect.height);\n    this.redraw(domHandleHostRect);\n    this.state.update({\n      ...newSize,\n      handleHostWidth,\n      handleHostHeight\n    });\n  }\n  /**\n   * Applies the geometry proposed with the resizer.\n   *\n   * @fires commit\n   */\n  commit() {\n    const unit = this._options.unit || \"%\";\n    const newValue = (unit === \"%\" ? this.state.proposedWidthPercents : this.state.proposedWidth) + unit;\n    this._options.editor.editing.view.change(() => {\n      this._cleanup();\n      this._options.onCommit(newValue);\n    });\n  }\n  /**\n   * Cancels and rejects the proposed resize dimensions, hiding the UI.\n   *\n   * @fires cancel\n   */\n  cancel() {\n    this._cleanup();\n  }\n  /**\n   * Destroys the resizer.\n   */\n  destroy() {\n    this.cancel();\n  }\n  /**\n   * Redraws the resizer.\n   *\n   * @param handleHostRect Handle host rectangle might be given to improve performance.\n   */\n  redraw(handleHostRect) {\n    const domWrapper = this._domResizerWrapper;\n    if (!existsInDom(domWrapper)) {\n      return;\n    }\n    const widgetWrapper = domWrapper.parentElement;\n    const handleHost = this._getHandleHost();\n    const resizerWrapper = this._viewResizerWrapper;\n    const currentDimensions = [\n      resizerWrapper.getStyle(\"width\"),\n      resizerWrapper.getStyle(\"height\"),\n      resizerWrapper.getStyle(\"left\"),\n      resizerWrapper.getStyle(\"top\")\n    ];\n    let newDimensions;\n    if (widgetWrapper.isSameNode(handleHost)) {\n      const clientRect = handleHostRect || new Rect(handleHost);\n      newDimensions = [\n        clientRect.width + \"px\",\n        clientRect.height + \"px\",\n        void 0,\n        void 0\n      ];\n    } else {\n      newDimensions = [\n        handleHost.offsetWidth + \"px\",\n        handleHost.offsetHeight + \"px\",\n        handleHost.offsetLeft + \"px\",\n        handleHost.offsetTop + \"px\"\n      ];\n    }\n    if (compareArrays(currentDimensions, newDimensions) !== \"same\") {\n      this._options.editor.editing.view.change((writer) => {\n        writer.setStyle({\n          width: newDimensions[0],\n          height: newDimensions[1],\n          left: newDimensions[2],\n          top: newDimensions[3]\n        }, resizerWrapper);\n      });\n    }\n  }\n  containsHandle(domElement) {\n    return this._domResizerWrapper.contains(domElement);\n  }\n  static isResizeHandle(domElement) {\n    return domElement.classList.contains(\"ck-widget__resizer__handle\");\n  }\n  /**\n   * Cleans up the context state.\n   */\n  _cleanup() {\n    this._sizeView._dismiss();\n    const editingView = this._options.editor.editing.view;\n    editingView.change((writer) => {\n      writer.setStyle(\"width\", this._initialViewWidth, this._options.viewElement);\n    });\n  }\n  /**\n   * Calculates the proposed size as the resize handles are dragged.\n   *\n   * @param domEventData Event data that caused the size update request. It should be used to calculate the proposed size.\n   */\n  _proposeNewSize(domEventData) {\n    const state = this.state;\n    const currentCoordinates = extractCoordinates(domEventData);\n    const isCentered = this._options.isCentered ? this._options.isCentered(this) : true;\n    const enlargement = {\n      x: state._referenceCoordinates.x - (currentCoordinates.x + state.originalWidth),\n      y: currentCoordinates.y - state.originalHeight - state._referenceCoordinates.y\n    };\n    if (isCentered && state.activeHandlePosition.endsWith(\"-right\")) {\n      enlargement.x = currentCoordinates.x - (state._referenceCoordinates.x + state.originalWidth);\n    }\n    if (isCentered) {\n      enlargement.x *= 2;\n    }\n    let width = Math.abs(state.originalWidth + enlargement.x);\n    let height = Math.abs(state.originalHeight + enlargement.y);\n    const dominant = width / state.aspectRatio > height ? \"width\" : \"height\";\n    if (dominant == \"width\") {\n      height = width / state.aspectRatio;\n    } else {\n      width = height * state.aspectRatio;\n    }\n    return {\n      width: Math.round(width),\n      height: Math.round(height),\n      widthPercents: Math.min(Math.round(state.originalWidthPercents / state.originalWidth * width * 100) / 100, 100)\n    };\n  }\n  /**\n   * Obtains the resize host.\n   *\n   * Resize host is an object that receives dimensions which are the result of resizing.\n   */\n  _getResizeHost() {\n    const widgetWrapper = this._domResizerWrapper.parentElement;\n    return this._options.getResizeHost(widgetWrapper);\n  }\n  /**\n   * Obtains the handle host.\n   *\n   * Handle host is an object that the handles are aligned to.\n   *\n   * Handle host will not always be an entire widget itself. Take an image as an example. The image widget\n   * contains an image and a caption. Only the image should be surrounded with handles.\n   */\n  _getHandleHost() {\n    const widgetWrapper = this._domResizerWrapper.parentElement;\n    return this._options.getHandleHost(widgetWrapper);\n  }\n  /**\n   * DOM container of the entire resize UI.\n   *\n   * Note that this property will have a value only after the element bound with the resizer is rendered\n   * (otherwise `null`).\n   */\n  get _domResizerWrapper() {\n    return this._options.editor.editing.view.domConverter.mapViewToDom(this._viewResizerWrapper);\n  }\n  /**\n   * Renders the resize handles in the DOM.\n   *\n   * @param domElement The resizer wrapper.\n   */\n  _appendHandles(domElement) {\n    const resizerPositions = [\"top-left\", \"top-right\", \"bottom-right\", \"bottom-left\"];\n    for (const currentPosition of resizerPositions) {\n      domElement.appendChild(new Template({\n        tag: \"div\",\n        attributes: {\n          class: `ck-widget__resizer__handle ${getResizerClass(currentPosition)}`\n        }\n      }).render());\n    }\n  }\n  /**\n   * Sets up the {@link #_sizeView} property and adds it to the passed `domElement`.\n   */\n  _appendSizeUI(domElement) {\n    this._sizeView = new SizeView();\n    this._sizeView.render();\n    domElement.appendChild(this._sizeView.element);\n  }\n};\nfunction getResizerClass(resizerPosition) {\n  return `ck-widget__resizer__handle-${resizerPosition}`;\n}\nfunction extractCoordinates(event) {\n  return {\n    x: event.pageX,\n    y: event.pageY\n  };\n}\nfunction existsInDom(element) {\n  return element && element.ownerDocument && element.ownerDocument.contains(element);\n}\n\n// node_modules/@ckeditor/ckeditor5-widget/src/widgetresize.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-widget/theme/widgetresize.css\";\nvar WidgetResize = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._resizers = /* @__PURE__ */ new Map();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"WidgetResize\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editing = this.editor.editing;\n    const domDocument = global_default.window.document;\n    this.set(\"selectedResizer\", null);\n    this.set(\"_activeResizer\", null);\n    editing.view.addObserver(MouseObserver);\n    this._observer = new (DomEmitterMixin())();\n    this.listenTo(editing.view.document, \"mousedown\", this._mouseDownListener.bind(this), { priority: \"high\" });\n    this._observer.listenTo(domDocument, \"mousemove\", this._mouseMoveListener.bind(this));\n    this._observer.listenTo(domDocument, \"mouseup\", this._mouseUpListener.bind(this));\n    this._redrawSelectedResizerThrottled = throttle_default(() => this.redrawSelectedResizer(), 200);\n    this.editor.ui.on(\"update\", this._redrawSelectedResizerThrottled);\n    this.editor.model.document.on(\"change\", () => {\n      for (const [viewElement, resizer] of this._resizers) {\n        if (!viewElement.isAttached()) {\n          this._resizers.delete(viewElement);\n          resizer.destroy();\n        }\n      }\n    }, { priority: \"lowest\" });\n    this._observer.listenTo(global_default.window, \"resize\", this._redrawSelectedResizerThrottled);\n    const viewSelection = this.editor.editing.view.document.selection;\n    viewSelection.on(\"change\", () => {\n      const selectedElement = viewSelection.getSelectedElement();\n      const resizer = this.getResizerByViewElement(selectedElement) || null;\n      if (resizer) {\n        this.select(resizer);\n      } else {\n        this.deselect();\n      }\n    });\n  }\n  /**\n   * Redraws the selected resizer if there is any selected resizer and if it is visible.\n   */\n  redrawSelectedResizer() {\n    if (this.selectedResizer && this.selectedResizer.isVisible) {\n      this.selectedResizer.redraw();\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this._observer.stopListening();\n    for (const resizer of this._resizers.values()) {\n      resizer.destroy();\n    }\n    this._redrawSelectedResizerThrottled.cancel();\n  }\n  /**\n   * Marks resizer as selected.\n   */\n  select(resizer) {\n    this.deselect();\n    this.selectedResizer = resizer;\n    this.selectedResizer.isSelected = true;\n  }\n  /**\n   * Deselects currently set resizer.\n   */\n  deselect() {\n    if (this.selectedResizer) {\n      this.selectedResizer.isSelected = false;\n    }\n    this.selectedResizer = null;\n  }\n  /**\n   * @param options Resizer options.\n   */\n  attachTo(options) {\n    const resizer = new Resizer(options);\n    const plugins = this.editor.plugins;\n    resizer.attach();\n    if (plugins.has(\"WidgetToolbarRepository\")) {\n      const widgetToolbarRepository = plugins.get(\"WidgetToolbarRepository\");\n      resizer.on(\"begin\", () => {\n        widgetToolbarRepository.forceDisabled(\"resize\");\n      }, { priority: \"lowest\" });\n      resizer.on(\"cancel\", () => {\n        widgetToolbarRepository.clearForceDisabled(\"resize\");\n      }, { priority: \"highest\" });\n      resizer.on(\"commit\", () => {\n        widgetToolbarRepository.clearForceDisabled(\"resize\");\n      }, { priority: \"highest\" });\n    }\n    this._resizers.set(options.viewElement, resizer);\n    const viewSelection = this.editor.editing.view.document.selection;\n    const selectedElement = viewSelection.getSelectedElement();\n    if (this.getResizerByViewElement(selectedElement) == resizer) {\n      this.select(resizer);\n    }\n    return resizer;\n  }\n  /**\n   * Returns a resizer created for a given view element (widget element).\n   *\n   * @param viewElement View element associated with the resizer.\n   */\n  getResizerByViewElement(viewElement) {\n    return this._resizers.get(viewElement);\n  }\n  /**\n   * Returns a resizer that contains a given resize handle.\n   */\n  _getResizerByHandle(domResizeHandle) {\n    for (const resizer of this._resizers.values()) {\n      if (resizer.containsHandle(domResizeHandle)) {\n        return resizer;\n      }\n    }\n  }\n  /**\n   * @param domEventData Native DOM event.\n   */\n  _mouseDownListener(event, domEventData) {\n    const resizeHandle = domEventData.domTarget;\n    if (!Resizer.isResizeHandle(resizeHandle)) {\n      return;\n    }\n    this._activeResizer = this._getResizerByHandle(resizeHandle) || null;\n    if (this._activeResizer) {\n      this._activeResizer.begin(resizeHandle);\n      event.stop();\n      domEventData.preventDefault();\n    }\n  }\n  /**\n   * @param domEventData Native DOM event.\n   */\n  _mouseMoveListener(event, domEventData) {\n    if (this._activeResizer) {\n      this._activeResizer.updateSize(domEventData);\n    }\n  }\n  _mouseUpListener() {\n    if (this._activeResizer) {\n      this._activeResizer.commit();\n      this._activeResizer = null;\n    }\n  }\n};\n\nexport {\n  isWidget,\n  toWidget,\n  toWidgetEditable,\n  findOptimalInsertionRange,\n  Widget,\n  WidgetToolbarRepository,\n  WidgetResize\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-widget/src/highlightstack.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgettypearound/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgettypearound/widgettypearound.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/verticalnavigation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widget.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgettoolbarrepository.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgetresize/resizerstate.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgetresize/sizeview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgetresize/resizer.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/widgetresize.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-widget/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-ZGNJRE43.js.map\n","import {\n  Widget,\n  isWidget\n} from \"./chunk-ZGNJRE43.js\";\nimport {\n  View\n} from \"./chunk-CCHBLTQG.js\";\nimport {\n  DataTransfer,\n  DomEmitterMixin,\n  DomEventObserver,\n  EventInfo,\n  LiveRange,\n  MouseObserver,\n  Plugin,\n  Rect,\n  createElement,\n  delay,\n  env_default,\n  global_default,\n  resizeobserver_default,\n  throttle_default,\n  toUnit,\n  uid\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardobserver.js\nvar ClipboardObserver = class extends DomEventObserver {\n  constructor(view) {\n    super(view);\n    this.domEventType = [\n      \"paste\",\n      \"copy\",\n      \"cut\",\n      \"drop\",\n      \"dragover\",\n      \"dragstart\",\n      \"dragend\",\n      \"dragenter\",\n      \"dragleave\"\n    ];\n    const viewDocument = this.document;\n    this.listenTo(viewDocument, \"paste\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n    this.listenTo(viewDocument, \"drop\", handleInput(\"clipboardInput\"), { priority: \"low\" });\n    this.listenTo(viewDocument, \"dragover\", handleInput(\"dragging\"), { priority: \"low\" });\n    function handleInput(type) {\n      return (evt, data) => {\n        data.preventDefault();\n        const targetRanges = data.dropRange ? [data.dropRange] : null;\n        const eventInfo = new EventInfo(viewDocument, type);\n        viewDocument.fire(eventInfo, {\n          dataTransfer: data.dataTransfer,\n          method: evt.name,\n          targetRanges,\n          target: data.target,\n          domEvent: data.domEvent\n        });\n        if (eventInfo.stop.called) {\n          data.stopPropagation();\n        }\n      };\n    }\n  }\n  onDomEvent(domEvent) {\n    const nativeDataTransfer = \"clipboardData\" in domEvent ? domEvent.clipboardData : domEvent.dataTransfer;\n    const cacheFiles = domEvent.type == \"drop\" || domEvent.type == \"paste\";\n    const evtData = {\n      dataTransfer: new DataTransfer(nativeDataTransfer, { cacheFiles })\n    };\n    if (domEvent.type == \"drop\" || domEvent.type == \"dragover\") {\n      evtData.dropRange = getDropViewRange(this.view, domEvent);\n    }\n    this.fire(domEvent.type, domEvent, evtData);\n  }\n};\nfunction getDropViewRange(view, domEvent) {\n  const domDoc = domEvent.target.ownerDocument;\n  const x = domEvent.clientX;\n  const y = domEvent.clientY;\n  let domRange;\n  if (domDoc.caretRangeFromPoint && domDoc.caretRangeFromPoint(x, y)) {\n    domRange = domDoc.caretRangeFromPoint(x, y);\n  } else if (domEvent.rangeParent) {\n    domRange = domDoc.createRange();\n    domRange.setStart(domEvent.rangeParent, domEvent.rangeOffset);\n    domRange.collapse(true);\n  }\n  if (domRange) {\n    return view.domConverter.domRangeToView(domRange);\n  }\n  return null;\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml.js\nfunction plainTextToHtml(text) {\n  text = text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\r?\\n\\r?\\n/g, \"</p><p>\").replace(/\\r?\\n/g, \"<br>\").replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").replace(/^\\s/, \"&nbsp;\").replace(/\\s$/, \"&nbsp;\").replace(/\\s\\s/g, \" &nbsp;\");\n  if (text.includes(\"</p><p>\") || text.includes(\"<br>\")) {\n    text = `<p>${text}</p>`;\n  }\n  return text;\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/utils/normalizeclipboarddata.js\nfunction normalizeClipboardData(data) {\n  return data.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n    if (spaces.length == 1) {\n      return \" \";\n    }\n    return spaces;\n  }).replace(/<!--[\\s\\S]*?-->/g, \"\");\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/utils/viewtoplaintext.js\nvar smallPaddingElements = [\"figcaption\", \"li\"];\nvar listElements = [\"ol\", \"ul\"];\nfunction viewToPlainText(viewItem) {\n  if (viewItem.is(\"$text\") || viewItem.is(\"$textProxy\")) {\n    return viewItem.data;\n  }\n  if (viewItem.is(\"element\", \"img\") && viewItem.hasAttribute(\"alt\")) {\n    return viewItem.getAttribute(\"alt\");\n  }\n  if (viewItem.is(\"element\", \"br\")) {\n    return \"\\n\";\n  }\n  let text = \"\";\n  let prev = null;\n  for (const child of viewItem.getChildren()) {\n    text += newLinePadding(child, prev) + viewToPlainText(child);\n    prev = child;\n  }\n  return text;\n}\nfunction newLinePadding(element, previous) {\n  if (!previous) {\n    return \"\";\n  }\n  if (element.is(\"element\", \"li\") && !element.isEmpty && element.getChild(0).is(\"containerElement\")) {\n    return \"\\n\\n\";\n  }\n  if (listElements.includes(element.name) && listElements.includes(previous.name)) {\n    return \"\\n\\n\";\n  }\n  if (!element.is(\"containerElement\") && !previous.is(\"containerElement\")) {\n    return \"\";\n  }\n  if (smallPaddingElements.includes(element.name) || smallPaddingElements.includes(previous.name)) {\n    return \"\\n\";\n  }\n  return \"\\n\\n\";\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/clipboardpipeline.js\nvar ClipboardPipeline = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ClipboardPipeline\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    view.addObserver(ClipboardObserver);\n    this._setupPasteDrop();\n    this._setupCopyCut();\n  }\n  /**\n   * Fires Clipboard `'outputTransformation'` event for given parameters.\n   *\n   * @internal\n   */\n  _fireOutputTransformationEvent(dataTransfer, selection, method) {\n    const content = this.editor.model.getSelectedContent(selection);\n    this.fire(\"outputTransformation\", {\n      dataTransfer,\n      content,\n      method\n    });\n  }\n  /**\n   * The clipboard paste pipeline.\n   */\n  _setupPasteDrop() {\n    const editor = this.editor;\n    const model = editor.model;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    this.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n      if (data.method == \"paste\" && !editor.model.canEditAt(editor.model.document.selection)) {\n        evt.stop();\n      }\n    }, { priority: \"highest\" });\n    this.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n      const dataTransfer = data.dataTransfer;\n      let content;\n      if (data.content) {\n        content = data.content;\n      } else {\n        let contentData = \"\";\n        if (dataTransfer.getData(\"text/html\")) {\n          contentData = normalizeClipboardData(dataTransfer.getData(\"text/html\"));\n        } else if (dataTransfer.getData(\"text/plain\")) {\n          contentData = plainTextToHtml(dataTransfer.getData(\"text/plain\"));\n        }\n        content = this.editor.data.htmlProcessor.toView(contentData);\n      }\n      const eventInfo = new EventInfo(this, \"inputTransformation\");\n      this.fire(eventInfo, {\n        content,\n        dataTransfer,\n        targetRanges: data.targetRanges,\n        method: data.method\n      });\n      if (eventInfo.stop.called) {\n        evt.stop();\n      }\n      view.scrollToTheSelection();\n    }, { priority: \"low\" });\n    this.listenTo(this, \"inputTransformation\", (evt, data) => {\n      if (data.content.isEmpty) {\n        return;\n      }\n      const dataController = this.editor.data;\n      const modelFragment = dataController.toModel(data.content, \"$clipboardHolder\");\n      if (modelFragment.childCount == 0) {\n        return;\n      }\n      evt.stop();\n      model.change(() => {\n        this.fire(\"contentInsertion\", {\n          content: modelFragment,\n          method: data.method,\n          dataTransfer: data.dataTransfer,\n          targetRanges: data.targetRanges\n        });\n      });\n    }, { priority: \"low\" });\n    this.listenTo(this, \"contentInsertion\", (evt, data) => {\n      data.resultRange = model.insertContent(data.content);\n    }, { priority: \"low\" });\n  }\n  /**\n   * The clipboard copy/cut pipeline.\n   */\n  _setupCopyCut() {\n    const editor = this.editor;\n    const modelDocument = editor.model.document;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const onCopyCut = (evt, data) => {\n      const dataTransfer = data.dataTransfer;\n      data.preventDefault();\n      this._fireOutputTransformationEvent(dataTransfer, modelDocument.selection, evt.name);\n    };\n    this.listenTo(viewDocument, \"copy\", onCopyCut, { priority: \"low\" });\n    this.listenTo(viewDocument, \"cut\", (evt, data) => {\n      if (!editor.model.canEditAt(editor.model.document.selection)) {\n        data.preventDefault();\n      } else {\n        onCopyCut(evt, data);\n      }\n    }, { priority: \"low\" });\n    this.listenTo(this, \"outputTransformation\", (evt, data) => {\n      const content = editor.data.toView(data.content);\n      viewDocument.fire(\"clipboardOutput\", {\n        dataTransfer: data.dataTransfer,\n        content,\n        method: data.method\n      });\n    }, { priority: \"low\" });\n    this.listenTo(viewDocument, \"clipboardOutput\", (evt, data) => {\n      if (!data.content.isEmpty) {\n        data.dataTransfer.setData(\"text/html\", this.editor.data.htmlProcessor.toData(data.content));\n        data.dataTransfer.setData(\"text/plain\", viewToPlainText(data.content));\n      }\n      if (data.method == \"cut\") {\n        editor.model.deleteContent(modelDocument.selection);\n      }\n    }, { priority: \"low\" });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/lineview.js\nvar toPx = toUnit(\"px\");\nvar LineView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor() {\n    super();\n    const bind = this.bindTemplate;\n    this.set({\n      isVisible: false,\n      left: null,\n      top: null,\n      width: null\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-clipboard-drop-target-line\",\n          bind.if(\"isVisible\", \"ck-hidden\", (value) => !value)\n        ],\n        style: {\n          left: bind.to(\"left\", (left) => toPx(left)),\n          top: bind.to(\"top\", (top) => toPx(top)),\n          width: bind.to(\"width\", (width) => toPx(width))\n        }\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/dragdroptarget.js\nvar DragDropTarget = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this.removeDropMarkerDelayed = delay(() => this.removeDropMarker(), 40);\n    this._updateDropMarkerThrottled = throttle_default((targetRange) => this._updateDropMarker(targetRange), 40);\n    this._reconvertMarkerThrottled = throttle_default(() => {\n      if (this.editor.model.markers.has(\"drop-target\")) {\n        this.editor.editing.reconvertMarker(\"drop-target\");\n      }\n    }, 0);\n    this._dropTargetLineView = new LineView();\n    this._domEmitter = new (DomEmitterMixin())();\n    this._scrollables = /* @__PURE__ */ new Map();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"DragDropTarget\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this._setupDropMarker();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this._domEmitter.stopListening();\n    for (const { resizeObserver } of this._scrollables.values()) {\n      resizeObserver.destroy();\n    }\n    this._updateDropMarkerThrottled.cancel();\n    this.removeDropMarkerDelayed.cancel();\n    this._reconvertMarkerThrottled.cancel();\n    return super.destroy();\n  }\n  /**\n   * Finds the drop target range and updates the drop marker.\n   *\n   * @internal\n   */\n  updateDropMarker(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n    this.removeDropMarkerDelayed.cancel();\n    const targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n    if (!targetRange) {\n      return;\n    }\n    if (draggedRange && draggedRange.containsRange(targetRange)) {\n      return this.removeDropMarker();\n    }\n    this._updateDropMarkerThrottled(targetRange);\n  }\n  /**\n   * Finds the final drop target range.\n   *\n   * @internal\n   */\n  getFinalDropRange(targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n    const targetRange = findDropTargetRange(this.editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange);\n    this.removeDropMarker();\n    return targetRange;\n  }\n  /**\n   * Removes the drop target marker.\n   *\n   * @internal\n   */\n  removeDropMarker() {\n    const model = this.editor.model;\n    this.removeDropMarkerDelayed.cancel();\n    this._updateDropMarkerThrottled.cancel();\n    this._dropTargetLineView.isVisible = false;\n    if (model.markers.has(\"drop-target\")) {\n      model.change((writer) => {\n        writer.removeMarker(\"drop-target\");\n      });\n    }\n  }\n  /**\n   * Creates downcast conversion for the drop target marker.\n   */\n  _setupDropMarker() {\n    const editor = this.editor;\n    editor.ui.view.body.add(this._dropTargetLineView);\n    editor.conversion.for(\"editingDowncast\").markerToHighlight({\n      model: \"drop-target\",\n      view: {\n        classes: [\"ck-clipboard-drop-target-range\"]\n      }\n    });\n    editor.conversion.for(\"editingDowncast\").markerToElement({\n      model: \"drop-target\",\n      view: (data, { writer }) => {\n        if (editor.model.schema.checkChild(data.markerRange.start, \"$text\")) {\n          this._dropTargetLineView.isVisible = false;\n          return this._createDropTargetPosition(writer);\n        } else {\n          if (data.markerRange.isCollapsed) {\n            this._updateDropTargetLine(data.markerRange);\n          } else {\n            this._dropTargetLineView.isVisible = false;\n          }\n        }\n      }\n    });\n  }\n  /**\n   * Updates the drop target marker to the provided range.\n   *\n   * @param targetRange The range to set the marker to.\n   */\n  _updateDropMarker(targetRange) {\n    const editor = this.editor;\n    const markers = editor.model.markers;\n    editor.model.change((writer) => {\n      if (markers.has(\"drop-target\")) {\n        if (!markers.get(\"drop-target\").getRange().isEqual(targetRange)) {\n          writer.updateMarker(\"drop-target\", { range: targetRange });\n        }\n      } else {\n        writer.addMarker(\"drop-target\", {\n          range: targetRange,\n          usingOperation: false,\n          affectsData: false\n        });\n      }\n    });\n  }\n  /**\n   * Creates the UI element for vertical (in-line) drop target.\n   */\n  _createDropTargetPosition(writer) {\n    return writer.createUIElement(\"span\", { class: \"ck ck-clipboard-drop-target-position\" }, function(domDocument) {\n      const domElement = this.toDomElement(domDocument);\n      domElement.append(\"⁠\", domDocument.createElement(\"span\"), \"⁠\");\n      return domElement;\n    });\n  }\n  /**\n   * Updates the horizontal drop target line.\n   */\n  _updateDropTargetLine(range) {\n    const editing = this.editor.editing;\n    const nodeBefore = range.start.nodeBefore;\n    const nodeAfter = range.start.nodeAfter;\n    const nodeParent = range.start.parent;\n    const viewElementBefore = nodeBefore ? editing.mapper.toViewElement(nodeBefore) : null;\n    const domElementBefore = viewElementBefore ? editing.view.domConverter.mapViewToDom(viewElementBefore) : null;\n    const viewElementAfter = nodeAfter ? editing.mapper.toViewElement(nodeAfter) : null;\n    const domElementAfter = viewElementAfter ? editing.view.domConverter.mapViewToDom(viewElementAfter) : null;\n    const viewElementParent = editing.mapper.toViewElement(nodeParent);\n    if (!viewElementParent) {\n      return;\n    }\n    const domElementParent = editing.view.domConverter.mapViewToDom(viewElementParent);\n    const domScrollableRect = this._getScrollableRect(viewElementParent);\n    const { scrollX, scrollY } = global_default.window;\n    const rectBefore = domElementBefore ? new Rect(domElementBefore) : null;\n    const rectAfter = domElementAfter ? new Rect(domElementAfter) : null;\n    const rectParent = new Rect(domElementParent).excludeScrollbarsAndBorders();\n    const above = rectBefore ? rectBefore.bottom : rectParent.top;\n    const below = rectAfter ? rectAfter.top : rectParent.bottom;\n    const parentStyle = global_default.window.getComputedStyle(domElementParent);\n    const top = above <= below ? (above + below) / 2 : below;\n    if (domScrollableRect.top < top && top < domScrollableRect.bottom) {\n      const left = rectParent.left + parseFloat(parentStyle.paddingLeft);\n      const right = rectParent.right - parseFloat(parentStyle.paddingRight);\n      const leftClamped = Math.max(left + scrollX, domScrollableRect.left);\n      const rightClamped = Math.min(right + scrollX, domScrollableRect.right);\n      this._dropTargetLineView.set({\n        isVisible: true,\n        left: leftClamped,\n        top: top + scrollY,\n        width: rightClamped - leftClamped\n      });\n    } else {\n      this._dropTargetLineView.isVisible = false;\n    }\n  }\n  /**\n   * Finds the closest scrollable element rect for the given view element.\n   */\n  _getScrollableRect(viewElement) {\n    const rootName = viewElement.root.rootName;\n    let domScrollable;\n    if (this._scrollables.has(rootName)) {\n      domScrollable = this._scrollables.get(rootName).domElement;\n    } else {\n      const domElement = this.editor.editing.view.domConverter.mapViewToDom(viewElement);\n      domScrollable = findScrollableElement(domElement);\n      this._domEmitter.listenTo(domScrollable, \"scroll\", this._reconvertMarkerThrottled, { usePassive: true });\n      const resizeObserver = new resizeobserver_default(domScrollable, this._reconvertMarkerThrottled);\n      this._scrollables.set(rootName, {\n        domElement: domScrollable,\n        resizeObserver\n      });\n    }\n    return new Rect(domScrollable).excludeScrollbarsAndBorders();\n  }\n};\nfunction findDropTargetRange(editor, targetViewElement, targetViewRanges, clientX, clientY, blockMode, draggedRange) {\n  const model = editor.model;\n  const mapper = editor.editing.mapper;\n  const targetModelElement = getClosestMappedModelElement(editor, targetViewElement);\n  let modelElement = targetModelElement;\n  while (modelElement) {\n    if (!blockMode) {\n      if (model.schema.checkChild(modelElement, \"$text\")) {\n        if (targetViewRanges) {\n          const targetViewPosition = targetViewRanges[0].start;\n          const targetModelPosition = mapper.toModelPosition(targetViewPosition);\n          const canDropOnPosition = !draggedRange || Array.from(draggedRange.getItems()).every((item) => model.schema.checkChild(targetModelPosition, item));\n          if (canDropOnPosition) {\n            if (model.schema.checkChild(targetModelPosition, \"$text\")) {\n              return model.createRange(targetModelPosition);\n            } else if (targetViewPosition) {\n              return findDropTargetRangeForElement(editor, getClosestMappedModelElement(editor, targetViewPosition.parent), clientX, clientY);\n            }\n          }\n        }\n      } else if (model.schema.isInline(modelElement)) {\n        return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n      }\n    }\n    if (model.schema.isBlock(modelElement)) {\n      return findDropTargetRangeForElement(editor, modelElement, clientX, clientY);\n    } else if (model.schema.checkChild(modelElement, \"$block\")) {\n      const childNodes = Array.from(modelElement.getChildren()).filter((node) => node.is(\"element\") && !shouldIgnoreElement(editor, node));\n      let startIndex = 0;\n      let endIndex = childNodes.length;\n      if (endIndex == 0) {\n        return model.createRange(model.createPositionAt(modelElement, \"end\"));\n      }\n      while (startIndex < endIndex - 1) {\n        const middleIndex = Math.floor((startIndex + endIndex) / 2);\n        const side = findElementSide(editor, childNodes[middleIndex], clientX, clientY);\n        if (side == \"before\") {\n          endIndex = middleIndex;\n        } else {\n          startIndex = middleIndex;\n        }\n      }\n      return findDropTargetRangeForElement(editor, childNodes[startIndex], clientX, clientY);\n    }\n    modelElement = modelElement.parent;\n  }\n  return null;\n}\nfunction shouldIgnoreElement(editor, modelElement) {\n  const mapper = editor.editing.mapper;\n  const domConverter = editor.editing.view.domConverter;\n  const viewElement = mapper.toViewElement(modelElement);\n  if (!viewElement) {\n    return true;\n  }\n  const domElement = domConverter.mapViewToDom(viewElement);\n  return global_default.window.getComputedStyle(domElement).float != \"none\";\n}\nfunction findDropTargetRangeForElement(editor, modelElement, clientX, clientY) {\n  const model = editor.model;\n  return model.createRange(model.createPositionAt(modelElement, findElementSide(editor, modelElement, clientX, clientY)));\n}\nfunction findElementSide(editor, modelElement, clientX, clientY) {\n  const mapper = editor.editing.mapper;\n  const domConverter = editor.editing.view.domConverter;\n  const viewElement = mapper.toViewElement(modelElement);\n  const domElement = domConverter.mapViewToDom(viewElement);\n  const rect = new Rect(domElement);\n  if (editor.model.schema.isInline(modelElement)) {\n    return clientX < (rect.left + rect.right) / 2 ? \"before\" : \"after\";\n  } else {\n    return clientY < (rect.top + rect.bottom) / 2 ? \"before\" : \"after\";\n  }\n}\nfunction getClosestMappedModelElement(editor, element) {\n  const mapper = editor.editing.mapper;\n  const view = editor.editing.view;\n  const targetModelElement = mapper.toModelElement(element);\n  if (targetModelElement) {\n    return targetModelElement;\n  }\n  const viewPosition = view.createPositionBefore(element);\n  const viewElement = mapper.findMappedViewAncestor(viewPosition);\n  return mapper.toModelElement(viewElement);\n}\nfunction findScrollableElement(domNode) {\n  let domElement = domNode;\n  do {\n    domElement = domElement.parentElement;\n    const overflow = global_default.window.getComputedStyle(domElement).overflowY;\n    if (overflow == \"auto\" || overflow == \"scroll\") {\n      break;\n    }\n  } while (domElement.tagName != \"BODY\");\n  return domElement;\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/dragdropblocktoolbar.js\nvar DragDropBlockToolbar = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._isBlockDragging = false;\n    this._domEmitter = new (DomEmitterMixin())();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"DragDropBlockToolbar\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    this.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n      if (isReadOnly) {\n        this.forceDisabled(\"readOnlyMode\");\n        this._isBlockDragging = false;\n      } else {\n        this.clearForceDisabled(\"readOnlyMode\");\n      }\n    });\n    if (env_default.isAndroid) {\n      this.forceDisabled(\"noAndroidSupport\");\n    }\n    if (editor.plugins.has(\"BlockToolbar\")) {\n      const blockToolbar = editor.plugins.get(\"BlockToolbar\");\n      const element = blockToolbar.buttonView.element;\n      this._domEmitter.listenTo(element, \"dragstart\", (evt, data) => this._handleBlockDragStart(data));\n      this._domEmitter.listenTo(global_default.document, \"dragover\", (evt, data) => this._handleBlockDragging(data));\n      this._domEmitter.listenTo(global_default.document, \"drop\", (evt, data) => this._handleBlockDragging(data));\n      this._domEmitter.listenTo(global_default.document, \"dragend\", () => this._handleBlockDragEnd(), { useCapture: true });\n      if (this.isEnabled) {\n        element.setAttribute(\"draggable\", \"true\");\n      }\n      this.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n        element.setAttribute(\"draggable\", isEnabled ? \"true\" : \"false\");\n      });\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this._domEmitter.stopListening();\n    return super.destroy();\n  }\n  /**\n   * The `dragstart` event handler.\n   */\n  _handleBlockDragStart(domEvent) {\n    if (!this.isEnabled) {\n      return;\n    }\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const view = this.editor.editing.view;\n    const blocks = Array.from(selection.getSelectedBlocks());\n    const draggedRange = model.createRange(model.createPositionBefore(blocks[0]), model.createPositionAfter(blocks[blocks.length - 1]));\n    model.change((writer) => writer.setSelection(draggedRange));\n    this._isBlockDragging = true;\n    view.focus();\n    view.getObserver(ClipboardObserver).onDomEvent(domEvent);\n  }\n  /**\n   * The `dragover` and `drop` event handler.\n   */\n  _handleBlockDragging(domEvent) {\n    if (!this.isEnabled || !this._isBlockDragging) {\n      return;\n    }\n    const clientX = domEvent.clientX + (this.editor.locale.contentLanguageDirection == \"ltr\" ? 100 : -100);\n    const clientY = domEvent.clientY;\n    const target = document.elementFromPoint(clientX, clientY);\n    const view = this.editor.editing.view;\n    if (!target || !target.closest(\".ck-editor__editable\")) {\n      return;\n    }\n    view.getObserver(ClipboardObserver).onDomEvent({\n      ...domEvent,\n      type: domEvent.type,\n      dataTransfer: domEvent.dataTransfer,\n      target,\n      clientX,\n      clientY,\n      preventDefault: () => domEvent.preventDefault(),\n      stopPropagation: () => domEvent.stopPropagation()\n    });\n  }\n  /**\n   * The `dragend` event handler.\n   */\n  _handleBlockDragEnd() {\n    this._isBlockDragging = false;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/dragdrop.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-clipboard/theme/clipboard.css\";\nvar DragDrop = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._clearDraggableAttributesDelayed = delay(() => this._clearDraggableAttributes(), 40);\n    this._blockMode = false;\n    this._domEmitter = new (DomEmitterMixin())();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"DragDrop\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ClipboardPipeline, Widget, DragDropTarget, DragDropBlockToolbar];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    this._draggedRange = null;\n    this._draggingUid = \"\";\n    this._draggableElement = null;\n    view.addObserver(ClipboardObserver);\n    view.addObserver(MouseObserver);\n    this._setupDragging();\n    this._setupContentInsertionIntegration();\n    this._setupClipboardInputIntegration();\n    this._setupDraggableAttributeHandling();\n    this.listenTo(editor, \"change:isReadOnly\", (evt, name, isReadOnly) => {\n      if (isReadOnly) {\n        this.forceDisabled(\"readOnlyMode\");\n      } else {\n        this.clearForceDisabled(\"readOnlyMode\");\n      }\n    });\n    this.on(\"change:isEnabled\", (evt, name, isEnabled) => {\n      if (!isEnabled) {\n        this._finalizeDragging(false);\n      }\n    });\n    if (env_default.isAndroid) {\n      this.forceDisabled(\"noAndroidSupport\");\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    if (this._draggedRange) {\n      this._draggedRange.detach();\n      this._draggedRange = null;\n    }\n    if (this._previewContainer) {\n      this._previewContainer.remove();\n    }\n    this._domEmitter.stopListening();\n    this._clearDraggableAttributesDelayed.cancel();\n    return super.destroy();\n  }\n  /**\n   * Drag and drop events handling.\n   */\n  _setupDragging() {\n    const editor = this.editor;\n    const model = editor.model;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const dragDropTarget = editor.plugins.get(DragDropTarget);\n    this.listenTo(viewDocument, \"dragstart\", (evt, data) => {\n      if (data.target && data.target.is(\"editableElement\")) {\n        data.preventDefault();\n        return;\n      }\n      this._prepareDraggedRange(data.target);\n      if (!this._draggedRange) {\n        data.preventDefault();\n        return;\n      }\n      this._draggingUid = uid();\n      data.dataTransfer.effectAllowed = this.isEnabled ? \"copyMove\" : \"copy\";\n      data.dataTransfer.setData(\"application/ckeditor5-dragging-uid\", this._draggingUid);\n      const draggedSelection = model.createSelection(this._draggedRange.toRange());\n      const clipboardPipeline = this.editor.plugins.get(\"ClipboardPipeline\");\n      clipboardPipeline._fireOutputTransformationEvent(data.dataTransfer, draggedSelection, \"dragstart\");\n      const { dataTransfer, domTarget, domEvent } = data;\n      const { clientX } = domEvent;\n      this._updatePreview({ dataTransfer, domTarget, clientX });\n      data.stopPropagation();\n      if (!this.isEnabled) {\n        this._draggedRange.detach();\n        this._draggedRange = null;\n        this._draggingUid = \"\";\n      }\n    }, { priority: \"low\" });\n    this.listenTo(viewDocument, \"dragend\", (evt, data) => {\n      this._finalizeDragging(!data.dataTransfer.isCanceled && data.dataTransfer.dropEffect == \"move\");\n    }, { priority: \"low\" });\n    this._domEmitter.listenTo(global_default.document, \"dragend\", () => {\n      this._blockMode = false;\n    }, { useCapture: true });\n    this.listenTo(viewDocument, \"dragenter\", () => {\n      if (!this.isEnabled) {\n        return;\n      }\n      view.focus();\n    });\n    this.listenTo(viewDocument, \"dragleave\", () => {\n      dragDropTarget.removeDropMarkerDelayed();\n    });\n    this.listenTo(viewDocument, \"dragging\", (evt, data) => {\n      if (!this.isEnabled) {\n        data.dataTransfer.dropEffect = \"none\";\n        return;\n      }\n      const { clientX, clientY } = data.domEvent;\n      dragDropTarget.updateDropMarker(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n      if (!this._draggedRange) {\n        data.dataTransfer.dropEffect = \"copy\";\n      }\n      if (!env_default.isGecko) {\n        if (data.dataTransfer.effectAllowed == \"copy\") {\n          data.dataTransfer.dropEffect = \"copy\";\n        } else if ([\"all\", \"copyMove\"].includes(data.dataTransfer.effectAllowed)) {\n          data.dataTransfer.dropEffect = \"move\";\n        }\n      }\n      evt.stop();\n    }, { priority: \"low\" });\n  }\n  /**\n   * Integration with the `clipboardInput` event.\n   */\n  _setupClipboardInputIntegration() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const dragDropTarget = editor.plugins.get(DragDropTarget);\n    this.listenTo(viewDocument, \"clipboardInput\", (evt, data) => {\n      if (data.method != \"drop\") {\n        return;\n      }\n      const { clientX, clientY } = data.domEvent;\n      const targetRange = dragDropTarget.getFinalDropRange(data.target, data.targetRanges, clientX, clientY, this._blockMode, this._draggedRange);\n      if (!targetRange) {\n        this._finalizeDragging(false);\n        evt.stop();\n        return;\n      }\n      if (this._draggedRange && this._draggingUid != data.dataTransfer.getData(\"application/ckeditor5-dragging-uid\")) {\n        this._draggedRange.detach();\n        this._draggedRange = null;\n        this._draggingUid = \"\";\n      }\n      const isMove = getFinalDropEffect(data.dataTransfer) == \"move\";\n      if (isMove && this._draggedRange && this._draggedRange.containsRange(targetRange, true)) {\n        this._finalizeDragging(false);\n        evt.stop();\n        return;\n      }\n      data.targetRanges = [editor.editing.mapper.toViewRange(targetRange)];\n    }, { priority: \"high\" });\n  }\n  /**\n   * Integration with the `contentInsertion` event of the clipboard pipeline.\n   */\n  _setupContentInsertionIntegration() {\n    const clipboardPipeline = this.editor.plugins.get(ClipboardPipeline);\n    clipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n      if (!this.isEnabled || data.method !== \"drop\") {\n        return;\n      }\n      const ranges = data.targetRanges.map((viewRange) => this.editor.editing.mapper.toModelRange(viewRange));\n      this.editor.model.change((writer) => writer.setSelection(ranges));\n    }, { priority: \"high\" });\n    clipboardPipeline.on(\"contentInsertion\", (evt, data) => {\n      if (!this.isEnabled || data.method !== \"drop\") {\n        return;\n      }\n      const isMove = getFinalDropEffect(data.dataTransfer) == \"move\";\n      const isSuccess = !data.resultRange || !data.resultRange.isCollapsed;\n      this._finalizeDragging(isSuccess && isMove);\n    }, { priority: \"lowest\" });\n  }\n  /**\n   * Adds listeners that add the `draggable` attribute to the elements while the mouse button is down so the dragging could start.\n   */\n  _setupDraggableAttributeHandling() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    this.listenTo(viewDocument, \"mousedown\", (evt, data) => {\n      if (env_default.isAndroid || !data) {\n        return;\n      }\n      this._clearDraggableAttributesDelayed.cancel();\n      let draggableElement = findDraggableWidget(data.target);\n      if (env_default.isBlink && !editor.isReadOnly && !draggableElement && !viewDocument.selection.isCollapsed) {\n        const selectedElement = viewDocument.selection.getSelectedElement();\n        if (!selectedElement || !isWidget(selectedElement)) {\n          draggableElement = viewDocument.selection.editableElement;\n        }\n      }\n      if (draggableElement) {\n        view.change((writer) => {\n          writer.setAttribute(\"draggable\", \"true\", draggableElement);\n        });\n        this._draggableElement = editor.editing.mapper.toModelElement(draggableElement);\n      }\n    });\n    this.listenTo(viewDocument, \"mouseup\", () => {\n      if (!env_default.isAndroid) {\n        this._clearDraggableAttributesDelayed();\n      }\n    });\n  }\n  /**\n   * Removes the `draggable` attribute from the element that was used for dragging.\n   */\n  _clearDraggableAttributes() {\n    const editing = this.editor.editing;\n    editing.view.change((writer) => {\n      if (this._draggableElement && this._draggableElement.root.rootName != \"$graveyard\") {\n        writer.removeAttribute(\"draggable\", editing.mapper.toViewElement(this._draggableElement));\n      }\n      this._draggableElement = null;\n    });\n  }\n  /**\n   * Deletes the dragged content from its original range and clears the dragging state.\n   *\n   * @param moved Whether the move succeeded.\n   */\n  _finalizeDragging(moved) {\n    const editor = this.editor;\n    const model = editor.model;\n    const dragDropTarget = editor.plugins.get(DragDropTarget);\n    dragDropTarget.removeDropMarker();\n    this._clearDraggableAttributes();\n    if (editor.plugins.has(\"WidgetToolbarRepository\")) {\n      const widgetToolbarRepository = editor.plugins.get(\"WidgetToolbarRepository\");\n      widgetToolbarRepository.clearForceDisabled(\"dragDrop\");\n    }\n    this._draggingUid = \"\";\n    if (this._previewContainer) {\n      this._previewContainer.remove();\n      this._previewContainer = void 0;\n    }\n    if (!this._draggedRange) {\n      return;\n    }\n    if (moved && this.isEnabled) {\n      model.change((writer) => {\n        const selection = model.createSelection(this._draggedRange);\n        model.deleteContent(selection, { doNotAutoparagraph: true });\n        const selectionParent = selection.getFirstPosition().parent;\n        if (selectionParent.isEmpty && !model.schema.checkChild(selectionParent, \"$text\") && model.schema.checkChild(selectionParent, \"paragraph\")) {\n          writer.insertElement(\"paragraph\", selectionParent, 0);\n        }\n      });\n    }\n    this._draggedRange.detach();\n    this._draggedRange = null;\n  }\n  /**\n   * Sets the dragged source range based on event target and document selection.\n   */\n  _prepareDraggedRange(target) {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const draggableWidget = target ? findDraggableWidget(target) : null;\n    if (draggableWidget) {\n      const modelElement = editor.editing.mapper.toModelElement(draggableWidget);\n      this._draggedRange = LiveRange.fromRange(model.createRangeOn(modelElement));\n      this._blockMode = model.schema.isBlock(modelElement);\n      if (editor.plugins.has(\"WidgetToolbarRepository\")) {\n        const widgetToolbarRepository = editor.plugins.get(\"WidgetToolbarRepository\");\n        widgetToolbarRepository.forceDisabled(\"dragDrop\");\n      }\n      return;\n    }\n    if (selection.isCollapsed && !selection.getFirstPosition().parent.isEmpty) {\n      return;\n    }\n    const blocks = Array.from(selection.getSelectedBlocks());\n    const draggedRange = selection.getFirstRange();\n    if (blocks.length == 0) {\n      this._draggedRange = LiveRange.fromRange(draggedRange);\n      return;\n    }\n    const blockRange = getRangeIncludingFullySelectedParents(model, blocks);\n    if (blocks.length > 1) {\n      this._draggedRange = LiveRange.fromRange(blockRange);\n      this._blockMode = true;\n    } else if (blocks.length == 1) {\n      const touchesBlockEdges = draggedRange.start.isTouching(blockRange.start) && draggedRange.end.isTouching(blockRange.end);\n      this._draggedRange = LiveRange.fromRange(touchesBlockEdges ? blockRange : draggedRange);\n      this._blockMode = touchesBlockEdges;\n    }\n    model.change((writer) => writer.setSelection(this._draggedRange.toRange()));\n  }\n  /**\n   * Updates the dragged preview image.\n   */\n  _updatePreview({ dataTransfer, domTarget, clientX }) {\n    const view = this.editor.editing.view;\n    const editable = view.document.selection.editableElement;\n    const domEditable = view.domConverter.mapViewToDom(editable);\n    const computedStyle = global_default.window.getComputedStyle(domEditable);\n    if (!this._previewContainer) {\n      this._previewContainer = createElement(global_default.document, \"div\", {\n        style: \"position: fixed; left: -999999px;\"\n      });\n      global_default.document.body.appendChild(this._previewContainer);\n    } else if (this._previewContainer.firstElementChild) {\n      this._previewContainer.removeChild(this._previewContainer.firstElementChild);\n    }\n    const domRect = new Rect(domEditable);\n    if (domEditable.contains(domTarget)) {\n      return;\n    }\n    const domEditablePaddingLeft = parseFloat(computedStyle.paddingLeft);\n    const preview = createElement(global_default.document, \"div\");\n    preview.className = \"ck ck-content\";\n    preview.style.width = computedStyle.width;\n    preview.style.paddingLeft = `${domRect.left - clientX + domEditablePaddingLeft}px`;\n    if (env_default.isiOS) {\n      preview.style.backgroundColor = \"white\";\n    }\n    preview.innerHTML = dataTransfer.getData(\"text/html\");\n    dataTransfer.setDragImage(preview, 0, 0);\n    this._previewContainer.appendChild(preview);\n  }\n};\nfunction getFinalDropEffect(dataTransfer) {\n  if (env_default.isGecko) {\n    return dataTransfer.dropEffect;\n  }\n  return [\"all\", \"copyMove\"].includes(dataTransfer.effectAllowed) ? \"move\" : \"copy\";\n}\nfunction findDraggableWidget(target) {\n  if (target.is(\"editableElement\")) {\n    return null;\n  }\n  if (target.hasClass(\"ck-widget__selection-handle\")) {\n    return target.findAncestor(isWidget);\n  }\n  if (isWidget(target)) {\n    return target;\n  }\n  const ancestor = target.findAncestor((node) => isWidget(node) || node.is(\"editableElement\"));\n  if (isWidget(ancestor)) {\n    return ancestor;\n  }\n  return null;\n}\nfunction getRangeIncludingFullySelectedParents(model, elements) {\n  const firstElement = elements[0];\n  const lastElement = elements[elements.length - 1];\n  const parent = firstElement.getCommonAncestor(lastElement);\n  const startPosition = model.createPositionBefore(firstElement);\n  const endPosition = model.createPositionAfter(lastElement);\n  if (parent && parent.is(\"element\") && !model.schema.isLimit(parent)) {\n    const parentRange = model.createRangeOn(parent);\n    const touchesStart = startPosition.isTouching(parentRange.start);\n    const touchesEnd = endPosition.isTouching(parentRange.end);\n    if (touchesStart && touchesEnd) {\n      return getRangeIncludingFullySelectedParents(model, [parent]);\n    }\n  }\n  return model.createRange(startPosition, endPosition);\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/pasteplaintext.js\nvar PastePlainText = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"PastePlainText\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ClipboardPipeline];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const model = editor.model;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const selection = model.document.selection;\n    let shiftPressed = false;\n    view.addObserver(ClipboardObserver);\n    this.listenTo(viewDocument, \"keydown\", (evt, data) => {\n      shiftPressed = data.shiftKey;\n    });\n    editor.plugins.get(ClipboardPipeline).on(\"contentInsertion\", (evt, data) => {\n      if (!shiftPressed && !isPlainTextFragment(data.content, model.schema)) {\n        return;\n      }\n      model.change((writer) => {\n        const textAttributes = Array.from(selection.getAttributes()).filter(([key]) => model.schema.getAttributeProperties(key).isFormatting);\n        if (!selection.isCollapsed) {\n          model.deleteContent(selection, { doNotAutoparagraph: true });\n        }\n        textAttributes.push(...selection.getAttributes());\n        const range = writer.createRangeIn(data.content);\n        for (const item of range.getItems()) {\n          if (item.is(\"$textProxy\")) {\n            writer.setAttributes(textAttributes, item);\n          }\n        }\n      });\n    });\n  }\n};\nfunction isPlainTextFragment(documentFragment, schema) {\n  if (documentFragment.childCount > 1) {\n    return false;\n  }\n  const child = documentFragment.getChild(0);\n  if (schema.isObject(child)) {\n    return false;\n  }\n  return Array.from(child.getAttributeKeys()).length == 0;\n}\n\n// node_modules/@ckeditor/ckeditor5-clipboard/src/clipboard.js\nvar Clipboard = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Clipboard\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ClipboardPipeline, DragDrop, PastePlainText];\n  }\n};\n\nexport {\n  ClipboardPipeline,\n  Clipboard\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-clipboard/src/clipboardobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/utils/plaintexttohtml.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/utils/normalizeclipboarddata.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/utils/viewtoplaintext.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/clipboardpipeline.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/lineview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore file -- @preserve *)\n\n@ckeditor/ckeditor5-clipboard/src/dragdroptarget.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-clipboard/src/dragdropblocktoolbar.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/dragdrop.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/pasteplaintext.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/clipboard.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-clipboard/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/clipboard.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-UHWQXN2Z.js.map\n","import {\n  Undo\n} from \"./chunk-LTKJ3JKL.js\";\nimport {\n  Clipboard\n} from \"./chunk-UHWQXN2Z.js\";\nimport \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-2524DH5P.js\";\nimport {\n  Enter,\n  ShiftEnter\n} from \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-BHRKVRIW.js\";\nimport {\n  Typing\n} from \"./chunk-W7WGVHCV.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  Plugin,\n  getCode,\n  parseKeystroke\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-select-all/src/selectallcommand.js\nvar SelectAllCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this.affectsData = false;\n  }\n  /**\n   * @inheritDoc\n   */\n  execute() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    let scopeElement = model.schema.getLimitElement(selection);\n    if (selection.containsEntireContent(scopeElement) || !isSelectAllScope(model.schema, scopeElement)) {\n      do {\n        scopeElement = scopeElement.parent;\n        if (!scopeElement) {\n          return;\n        }\n      } while (!isSelectAllScope(model.schema, scopeElement));\n    }\n    model.change((writer) => {\n      writer.setSelection(scopeElement, \"in\");\n    });\n  }\n};\nfunction isSelectAllScope(schema, element) {\n  return schema.isLimit(element) && (schema.checkChild(element, \"$text\") || schema.checkChild(element, \"paragraph\"));\n}\n\n// node_modules/@ckeditor/ckeditor5-select-all/src/selectallediting.js\nvar SELECT_ALL_KEYSTROKE = parseKeystroke(\"Ctrl+A\");\nvar SelectAllEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"SelectAllEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    editor.commands.add(\"selectAll\", new SelectAllCommand(editor));\n    this.listenTo(viewDocument, \"keydown\", (eventInfo, domEventData) => {\n      if (getCode(domEventData) === SELECT_ALL_KEYSTROKE) {\n        editor.execute(\"selectAll\");\n        domEventData.preventDefault();\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-select-all/src/selectallui.js\nimport selectAllIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-select-all/theme/icons/select-all.svg\";\nvar SelectAllUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"SelectAllUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.ui.componentFactory.add(\"selectAll\", (locale) => {\n      const command = editor.commands.get(\"selectAll\");\n      const view = new ButtonView(locale);\n      const t = locale.t;\n      view.set({\n        label: t(\"Select all\"),\n        icon: selectAllIcon,\n        keystroke: \"Ctrl+A\",\n        tooltip: true\n      });\n      view.bind(\"isEnabled\").to(command, \"isEnabled\");\n      this.listenTo(view, \"execute\", () => {\n        editor.execute(\"selectAll\");\n        editor.editing.view.focus();\n      });\n      return view;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-select-all/src/selectall.js\nvar SelectAll = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [SelectAllEditing, SelectAllUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"SelectAll\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-essentials/src/essentials.js\nvar Essentials = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Clipboard, Enter, SelectAll, ShiftEnter, Typing, Undo];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Essentials\";\n  }\n};\nexport {\n  Essentials as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-select-all/src/selectallcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-select-all/src/selectallediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-select-all/src/selectallui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-select-all/src/selectall.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-select-all/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-select-all/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/select-all.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-essentials/src/essentials.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-essentials_src_essentials.js.map\n","import {\n  ButtonView,\n  View\n} from \"./chunk-CCHBLTQG.js\";\nimport {\n  CKEditorError,\n  Collection,\n  ObservableMixin,\n  PendingActions,\n  Plugin,\n  logWarning,\n  uid\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-upload/src/filereader.js\nvar FileReader = class extends ObservableMixin() {\n  /**\n   * Creates an instance of the FileReader.\n   */\n  constructor() {\n    super();\n    const reader = new window.FileReader();\n    this._reader = reader;\n    this._data = void 0;\n    this.set(\"loaded\", 0);\n    reader.onprogress = (evt) => {\n      this.loaded = evt.loaded;\n    };\n  }\n  /**\n   * Returns error that occurred during file reading.\n   */\n  get error() {\n    return this._reader.error;\n  }\n  /**\n   * Holds the data of an already loaded file. The file must be first loaded\n   * by using {@link module:upload/filereader~FileReader#read `read()`}.\n   */\n  get data() {\n    return this._data;\n  }\n  /**\n   * Reads the provided file.\n   *\n   * @param file Native File object.\n   * @returns Returns a promise that will be resolved with file's content.\n   * The promise will be rejected in case of an error or when the reading process is aborted.\n   */\n  read(file) {\n    const reader = this._reader;\n    this.total = file.size;\n    return new Promise((resolve, reject) => {\n      reader.onload = () => {\n        const result = reader.result;\n        this._data = result;\n        resolve(result);\n      };\n      reader.onerror = () => {\n        reject(\"error\");\n      };\n      reader.onabort = () => {\n        reject(\"aborted\");\n      };\n      this._reader.readAsDataURL(file);\n    });\n  }\n  /**\n   * Aborts file reader.\n   */\n  abort() {\n    this._reader.abort();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-upload/src/filerepository.js\nvar FileRepository = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this.loaders = new Collection();\n    this._loadersMap = /* @__PURE__ */ new Map();\n    this._pendingAction = null;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FileRepository\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [PendingActions];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this.loaders.on(\"change\", () => this._updatePendingAction());\n    this.set(\"uploaded\", 0);\n    this.set(\"uploadTotal\", null);\n    this.bind(\"uploadedPercent\").to(this, \"uploaded\", this, \"uploadTotal\", (uploaded, total) => {\n      return total ? uploaded / total * 100 : 0;\n    });\n  }\n  /**\n   * Returns the loader associated with specified file or promise.\n   *\n   * To get loader by id use `fileRepository.loaders.get( id )`.\n   *\n   * @param fileOrPromise Native file or promise handle.\n   */\n  getLoader(fileOrPromise) {\n    return this._loadersMap.get(fileOrPromise) || null;\n  }\n  /**\n   * Creates a loader instance for the given file.\n   *\n   * Requires {@link #createUploadAdapter} factory to be defined.\n   *\n   * @param fileOrPromise Native File object or native Promise object which resolves to a File.\n   */\n  createLoader(fileOrPromise) {\n    if (!this.createUploadAdapter) {\n      logWarning(\"filerepository-no-upload-adapter\");\n      return null;\n    }\n    const loader = new FileLoader(Promise.resolve(fileOrPromise), this.createUploadAdapter);\n    this.loaders.add(loader);\n    this._loadersMap.set(fileOrPromise, loader);\n    if (fileOrPromise instanceof Promise) {\n      loader.file.then((file) => {\n        this._loadersMap.set(file, loader);\n      }).catch(() => {\n      });\n    }\n    loader.on(\"change:uploaded\", () => {\n      let aggregatedUploaded = 0;\n      for (const loader2 of this.loaders) {\n        aggregatedUploaded += loader2.uploaded;\n      }\n      this.uploaded = aggregatedUploaded;\n    });\n    loader.on(\"change:uploadTotal\", () => {\n      let aggregatedTotal = 0;\n      for (const loader2 of this.loaders) {\n        if (loader2.uploadTotal) {\n          aggregatedTotal += loader2.uploadTotal;\n        }\n      }\n      this.uploadTotal = aggregatedTotal;\n    });\n    return loader;\n  }\n  /**\n   * Destroys the given loader.\n   *\n   * @param fileOrPromiseOrLoader File or Promise associated with that loader or loader itself.\n   */\n  destroyLoader(fileOrPromiseOrLoader) {\n    const loader = fileOrPromiseOrLoader instanceof FileLoader ? fileOrPromiseOrLoader : this.getLoader(fileOrPromiseOrLoader);\n    loader._destroy();\n    this.loaders.remove(loader);\n    this._loadersMap.forEach((value, key) => {\n      if (value === loader) {\n        this._loadersMap.delete(key);\n      }\n    });\n  }\n  /**\n   * Registers or deregisters pending action bound with upload progress.\n   */\n  _updatePendingAction() {\n    const pendingActions = this.editor.plugins.get(PendingActions);\n    if (this.loaders.length) {\n      if (!this._pendingAction) {\n        const t = this.editor.t;\n        const getMessage = (value) => `${t(\"Upload in progress\")} ${parseInt(value)}%.`;\n        this._pendingAction = pendingActions.add(getMessage(this.uploadedPercent));\n        this._pendingAction.bind(\"message\").to(this, \"uploadedPercent\", getMessage);\n      }\n    } else {\n      pendingActions.remove(this._pendingAction);\n      this._pendingAction = null;\n    }\n  }\n};\nvar FileLoader = class extends ObservableMixin() {\n  /**\n   * Creates a new instance of `FileLoader`.\n   *\n   * @param filePromise A promise which resolves to a file instance.\n   * @param uploadAdapterCreator The function which returns {@link module:upload/filerepository~UploadAdapter} instance.\n   */\n  constructor(filePromise, uploadAdapterCreator) {\n    super();\n    this.id = uid();\n    this._filePromiseWrapper = this._createFilePromiseWrapper(filePromise);\n    this._adapter = uploadAdapterCreator(this);\n    this._reader = new FileReader();\n    this.set(\"status\", \"idle\");\n    this.set(\"uploaded\", 0);\n    this.set(\"uploadTotal\", null);\n    this.bind(\"uploadedPercent\").to(this, \"uploaded\", this, \"uploadTotal\", (uploaded, total) => {\n      return total ? uploaded / total * 100 : 0;\n    });\n    this.set(\"uploadResponse\", null);\n  }\n  /**\n   * A `Promise` which resolves to a `File` instance associated with this file loader.\n   */\n  get file() {\n    if (!this._filePromiseWrapper) {\n      return Promise.resolve(null);\n    } else {\n      return this._filePromiseWrapper.promise.then((file) => this._filePromiseWrapper ? file : null);\n    }\n  }\n  /**\n   * Returns the file data. To read its data, you need for first load the file\n   * by using the {@link module:upload/filerepository~FileLoader#read `read()`} method.\n   */\n  get data() {\n    return this._reader.data;\n  }\n  /**\n   * Reads file using {@link module:upload/filereader~FileReader}.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `filerepository-read-wrong-status` when status\n   * is different than `idle`.\n   *\n   * Example usage:\n   *\n   * ```ts\n   * fileLoader.read()\n   * \t.then( data => { ... } )\n   * \t.catch( err => {\n   * \t\tif ( err === 'aborted' ) {\n   * \t\t\tconsole.log( 'Reading aborted.' );\n   * \t\t} else {\n   * \t\t\tconsole.log( 'Reading error.', err );\n   * \t\t}\n   * \t} );\n   * ```\n   *\n   * @returns Returns promise that will be resolved with read data. Promise will be rejected if error\n   * occurs or if read process is aborted.\n   */\n  read() {\n    if (this.status != \"idle\") {\n      throw new CKEditorError(\"filerepository-read-wrong-status\", this);\n    }\n    this.status = \"reading\";\n    return this.file.then((file) => this._reader.read(file)).then((data) => {\n      if (this.status !== \"reading\") {\n        throw this.status;\n      }\n      this.status = \"idle\";\n      return data;\n    }).catch((err) => {\n      if (err === \"aborted\") {\n        this.status = \"aborted\";\n        throw \"aborted\";\n      }\n      this.status = \"error\";\n      throw this._reader.error ? this._reader.error : err;\n    });\n  }\n  /**\n   * Reads file using the provided {@link module:upload/filerepository~UploadAdapter}.\n   *\n   * Throws {@link module:utils/ckeditorerror~CKEditorError CKEditorError} `filerepository-upload-wrong-status` when status\n   * is different than `idle`.\n   * Example usage:\n   *\n   * ```ts\n   * fileLoader.upload()\n   * \t.then( data => { ... } )\n   * \t.catch( e => {\n   * \t\tif ( e === 'aborted' ) {\n   * \t\t\tconsole.log( 'Uploading aborted.' );\n   * \t\t} else {\n   * \t\t\tconsole.log( 'Uploading error.', e );\n   * \t\t}\n   * \t} );\n   * ```\n   *\n   * @returns Returns promise that will be resolved with response data. Promise will be rejected if error\n   * occurs or if read process is aborted.\n   */\n  upload() {\n    if (this.status != \"idle\") {\n      throw new CKEditorError(\"filerepository-upload-wrong-status\", this);\n    }\n    this.status = \"uploading\";\n    return this.file.then(() => this._adapter.upload()).then((data) => {\n      this.uploadResponse = data;\n      this.status = \"idle\";\n      return data;\n    }).catch((err) => {\n      if (this.status === \"aborted\") {\n        throw \"aborted\";\n      }\n      this.status = \"error\";\n      throw err;\n    });\n  }\n  /**\n   * Aborts loading process.\n   */\n  abort() {\n    const status = this.status;\n    this.status = \"aborted\";\n    if (!this._filePromiseWrapper.isFulfilled) {\n      this._filePromiseWrapper.promise.catch(() => {\n      });\n      this._filePromiseWrapper.rejecter(\"aborted\");\n    } else if (status == \"reading\") {\n      this._reader.abort();\n    } else if (status == \"uploading\" && this._adapter.abort) {\n      this._adapter.abort();\n    }\n    this._destroy();\n  }\n  /**\n   * Performs cleanup.\n   *\n   * @internal\n   */\n  _destroy() {\n    this._filePromiseWrapper = void 0;\n    this._reader = void 0;\n    this._adapter = void 0;\n    this.uploadResponse = void 0;\n  }\n  /**\n   * Wraps a given file promise into another promise giving additional\n   * control (resolving, rejecting, checking if fulfilled) over it.\n   *\n   * @param filePromise The initial file promise to be wrapped.\n   */\n  _createFilePromiseWrapper(filePromise) {\n    const wrapper = {};\n    wrapper.promise = new Promise((resolve, reject) => {\n      wrapper.rejecter = reject;\n      wrapper.isFulfilled = false;\n      filePromise.then((file) => {\n        wrapper.isFulfilled = true;\n        resolve(file);\n      }).catch((err) => {\n        wrapper.isFulfilled = true;\n        reject(err);\n      });\n    });\n    return wrapper;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-upload/src/ui/filedialogbuttonview.js\nvar FileDialogButtonView = class extends ButtonView {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.buttonView = this;\n    this._fileInputView = new FileInputView(locale);\n    this._fileInputView.bind(\"acceptedType\").to(this);\n    this._fileInputView.bind(\"allowMultipleFiles\").to(this);\n    this._fileInputView.delegate(\"done\").to(this);\n    this.on(\"execute\", () => {\n      this._fileInputView.open();\n    });\n    this.extendTemplate({\n      attributes: {\n        class: \"ck-file-dialog-button\"\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.children.add(this._fileInputView);\n  }\n};\nvar FileInputView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.set(\"acceptedType\", void 0);\n    this.set(\"allowMultipleFiles\", false);\n    const bind = this.bindTemplate;\n    this.setTemplate({\n      tag: \"input\",\n      attributes: {\n        class: [\n          \"ck-hidden\"\n        ],\n        type: \"file\",\n        tabindex: \"-1\",\n        accept: bind.to(\"acceptedType\"),\n        multiple: bind.to(\"allowMultipleFiles\")\n      },\n      on: {\n        // Removing from code coverage since we cannot programmatically set input element files.\n        change: bind.to(\n          /* istanbul ignore next -- @preserve */\n          () => {\n            if (this.element && this.element.files && this.element.files.length) {\n              this.fire(\"done\", this.element.files);\n            }\n            this.element.value = \"\";\n          }\n        )\n      }\n    });\n  }\n  /**\n   * Opens file dialog.\n   */\n  open() {\n    this.element.click();\n  }\n};\n\nexport {\n  FileRepository,\n  FileDialogButtonView\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-upload/src/filereader.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/filerepository.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/ui/filedialogbuttonview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/adapters/base64uploadadapter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/adapters/simpleuploadadapter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-upload/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/upload.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-KQSKBC7C.js.map\n","import {\n  FileRepository\n} from \"./chunk-KQSKBC7C.js\";\nimport \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Plugin\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-adapter-ckfinder/src/utils.js\nvar TOKEN_COOKIE_NAME = \"ckCsrfToken\";\nvar TOKEN_LENGTH = 40;\nvar tokenCharset = \"abcdefghijklmnopqrstuvwxyz0123456789\";\nfunction getCsrfToken() {\n  let token = getCookie(TOKEN_COOKIE_NAME);\n  if (!token || token.length != TOKEN_LENGTH) {\n    token = generateToken(TOKEN_LENGTH);\n    setCookie(TOKEN_COOKIE_NAME, token);\n  }\n  return token;\n}\nfunction getCookie(name) {\n  name = name.toLowerCase();\n  const parts = document.cookie.split(\";\");\n  for (const part of parts) {\n    const pair = part.split(\"=\");\n    const key = decodeURIComponent(pair[0].trim().toLowerCase());\n    if (key === name) {\n      return decodeURIComponent(pair[1]);\n    }\n  }\n  return null;\n}\nfunction setCookie(name, value) {\n  document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/\";\n}\nfunction generateToken(length) {\n  let result = \"\";\n  const randValues = new Uint8Array(length);\n  window.crypto.getRandomValues(randValues);\n  for (let j = 0; j < randValues.length; j++) {\n    const character = tokenCharset.charAt(randValues[j] % tokenCharset.length);\n    result += Math.random() > 0.5 ? character.toUpperCase() : character;\n  }\n  return result;\n}\n\n// node_modules/@ckeditor/ckeditor5-adapter-ckfinder/src/uploadadapter.js\nvar CKFinderUploadAdapter = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FileRepository];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"CKFinderUploadAdapter\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const url = this.editor.config.get(\"ckfinder.uploadUrl\");\n    if (!url) {\n      return;\n    }\n    this.editor.plugins.get(FileRepository).createUploadAdapter = (loader) => new UploadAdapter(loader, url, this.editor.t);\n  }\n};\nvar UploadAdapter = class {\n  /**\n   * Creates a new adapter instance.\n   */\n  constructor(loader, url, t) {\n    this.loader = loader;\n    this.url = url;\n    this.t = t;\n  }\n  /**\n   * Starts the upload process.\n   *\n   * @see module:upload/filerepository~UploadAdapter#upload\n   */\n  upload() {\n    return this.loader.file.then((file) => {\n      return new Promise((resolve, reject) => {\n        this._initRequest();\n        this._initListeners(resolve, reject, file);\n        this._sendRequest(file);\n      });\n    });\n  }\n  /**\n   * Aborts the upload process.\n   *\n   * @see module:upload/filerepository~UploadAdapter#abort\n   */\n  abort() {\n    if (this.xhr) {\n      this.xhr.abort();\n    }\n  }\n  /**\n   * Initializes the XMLHttpRequest object.\n   */\n  _initRequest() {\n    const xhr = this.xhr = new XMLHttpRequest();\n    xhr.open(\"POST\", this.url, true);\n    xhr.responseType = \"json\";\n  }\n  /**\n   * Initializes XMLHttpRequest listeners.\n   *\n   * @param resolve Callback function to be called when the request is successful.\n   * @param reject Callback function to be called when the request cannot be completed.\n   * @param file File instance to be uploaded.\n   */\n  _initListeners(resolve, reject, file) {\n    const xhr = this.xhr;\n    const loader = this.loader;\n    const t = this.t;\n    const genericError = t(\"Cannot upload file:\") + ` ${file.name}.`;\n    xhr.addEventListener(\"error\", () => reject(genericError));\n    xhr.addEventListener(\"abort\", () => reject());\n    xhr.addEventListener(\"load\", () => {\n      const response = xhr.response;\n      if (!response || !response.uploaded) {\n        return reject(response && response.error && response.error.message ? response.error.message : genericError);\n      }\n      resolve({\n        default: response.url\n      });\n    });\n    if (xhr.upload) {\n      xhr.upload.addEventListener(\"progress\", (evt) => {\n        if (evt.lengthComputable) {\n          loader.uploadTotal = evt.total;\n          loader.uploaded = evt.loaded;\n        }\n      });\n    }\n  }\n  /**\n   * Prepares the data and sends the request.\n   *\n   * @param file File instance to be uploaded.\n   */\n  _sendRequest(file) {\n    const data = new FormData();\n    data.append(\"upload\", file);\n    data.append(\"ckCsrfToken\", getCsrfToken());\n    this.xhr.send(data);\n  }\n};\nexport {\n  CKFinderUploadAdapter as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-adapter-ckfinder/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-adapter-ckfinder/src/uploadadapter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore else -- @preserve *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-adapter-ckfinder_src_uploadadapter.js.map\n","import \"./chunk-BHRKVRIW.js\";\nimport {\n  Delete\n} from \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  LiveRange,\n  Plugin,\n  first\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-autoformat/src/blockautoformatediting.js\nfunction blockAutoformatEditing(editor, plugin, pattern, callbackOrCommand) {\n  let callback;\n  let command = null;\n  if (typeof callbackOrCommand == \"function\") {\n    callback = callbackOrCommand;\n  } else {\n    command = editor.commands.get(callbackOrCommand);\n    callback = () => {\n      editor.execute(callbackOrCommand);\n    };\n  }\n  editor.model.document.on(\"change:data\", (evt, batch) => {\n    if (command && !command.isEnabled || !plugin.isEnabled) {\n      return;\n    }\n    const range = first(editor.model.document.selection.getRanges());\n    if (!range.isCollapsed) {\n      return;\n    }\n    if (batch.isUndo || !batch.isLocal) {\n      return;\n    }\n    const changes = Array.from(editor.model.document.differ.getChanges());\n    const entry = changes[0];\n    if (changes.length != 1 || entry.type !== \"insert\" || entry.name != \"$text\" || entry.length != 1) {\n      return;\n    }\n    const blockToFormat = entry.position.parent;\n    if (blockToFormat.is(\"element\", \"codeBlock\")) {\n      return;\n    }\n    if (blockToFormat.is(\"element\", \"listItem\") && typeof callbackOrCommand !== \"function\" && ![\"numberedList\", \"bulletedList\", \"todoList\"].includes(callbackOrCommand)) {\n      return;\n    }\n    if (command && command.value === true) {\n      return;\n    }\n    const firstNode = blockToFormat.getChild(0);\n    const firstNodeRange = editor.model.createRangeOn(firstNode);\n    if (!firstNodeRange.containsRange(range) && !range.end.isEqual(firstNodeRange.end)) {\n      return;\n    }\n    const match = pattern.exec(firstNode.data.substr(0, range.end.offset));\n    if (!match) {\n      return;\n    }\n    editor.model.enqueueChange((writer) => {\n      const start = writer.createPositionAt(blockToFormat, 0);\n      const end = writer.createPositionAt(blockToFormat, match[0].length);\n      const range2 = new LiveRange(start, end);\n      const wasChanged = callback({ match });\n      if (wasChanged !== false) {\n        writer.remove(range2);\n        const selectionRange = editor.model.document.selection.getFirstRange();\n        const blockRange = writer.createRangeIn(blockToFormat);\n        if (blockToFormat.isEmpty && !blockRange.isEqual(selectionRange) && !blockRange.containsRange(selectionRange, true)) {\n          writer.remove(blockToFormat);\n        }\n      }\n      range2.detach();\n      editor.model.enqueueChange(() => {\n        const deletePlugin = editor.plugins.get(\"Delete\");\n        deletePlugin.requestUndoOnBackspace();\n      });\n    });\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-autoformat/src/inlineautoformatediting.js\nfunction inlineAutoformatEditing(editor, plugin, testRegexpOrCallback, formatCallback) {\n  let regExp;\n  let testCallback;\n  if (testRegexpOrCallback instanceof RegExp) {\n    regExp = testRegexpOrCallback;\n  } else {\n    testCallback = testRegexpOrCallback;\n  }\n  testCallback = testCallback || ((text) => {\n    let result;\n    const remove = [];\n    const format = [];\n    while ((result = regExp.exec(text)) !== null) {\n      if (result && result.length < 4) {\n        break;\n      }\n      let { index, \"1\": leftDel, \"2\": content, \"3\": rightDel } = result;\n      const found = leftDel + content + rightDel;\n      index += result[0].length - found.length;\n      const delStart = [\n        index,\n        index + leftDel.length\n      ];\n      const delEnd = [\n        index + leftDel.length + content.length,\n        index + leftDel.length + content.length + rightDel.length\n      ];\n      remove.push(delStart);\n      remove.push(delEnd);\n      format.push([index + leftDel.length, index + leftDel.length + content.length]);\n    }\n    return {\n      remove,\n      format\n    };\n  });\n  editor.model.document.on(\"change:data\", (evt, batch) => {\n    if (batch.isUndo || !batch.isLocal || !plugin.isEnabled) {\n      return;\n    }\n    const model = editor.model;\n    const selection = model.document.selection;\n    if (!selection.isCollapsed) {\n      return;\n    }\n    const changes = Array.from(model.document.differ.getChanges());\n    const entry = changes[0];\n    if (changes.length != 1 || entry.type !== \"insert\" || entry.name != \"$text\" || entry.length != 1) {\n      return;\n    }\n    const focus = selection.focus;\n    const block = focus.parent;\n    const { text, range } = getTextAfterCode(model.createRange(model.createPositionAt(block, 0), focus), model);\n    const testOutput = testCallback(text);\n    const rangesToFormat = testOutputToRanges(range.start, testOutput.format, model);\n    const rangesToRemove = testOutputToRanges(range.start, testOutput.remove, model);\n    if (!(rangesToFormat.length && rangesToRemove.length)) {\n      return;\n    }\n    model.enqueueChange((writer) => {\n      const hasChanged = formatCallback(writer, rangesToFormat);\n      if (hasChanged === false) {\n        return;\n      }\n      for (const range2 of rangesToRemove.reverse()) {\n        writer.remove(range2);\n      }\n      model.enqueueChange(() => {\n        const deletePlugin = editor.plugins.get(\"Delete\");\n        deletePlugin.requestUndoOnBackspace();\n      });\n    });\n  });\n}\nfunction testOutputToRanges(start, arrays, model) {\n  return arrays.filter((array) => array[0] !== void 0 && array[1] !== void 0).map((array) => {\n    return model.createRange(start.getShiftedBy(array[0]), start.getShiftedBy(array[1]));\n  });\n}\nfunction getTextAfterCode(range, model) {\n  let start = range.start;\n  const text = Array.from(range.getItems()).reduce((rangeText, node) => {\n    if (!(node.is(\"$text\") || node.is(\"$textProxy\")) || node.getAttribute(\"code\")) {\n      start = model.createPositionAfter(node);\n      return \"\";\n    }\n    return rangeText + node.data;\n  }, \"\");\n  return { text, range: model.createRange(start, range.end) };\n}\n\n// node_modules/@ckeditor/ckeditor5-autoformat/src/autoformat.js\nvar Autoformat = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Delete];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Autoformat\";\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    this._addListAutoformats();\n    this._addBasicStylesAutoformats();\n    this._addHeadingAutoformats();\n    this._addBlockQuoteAutoformats();\n    this._addCodeBlockAutoformats();\n    this._addHorizontalLineAutoformats();\n  }\n  /**\n   * Adds autoformatting related to the {@link module:list/list~List}.\n   *\n   * When typed:\n   * - `* ` or `- ` &ndash; A paragraph will be changed into a bulleted list.\n   * - `1. ` or `1) ` &ndash; A paragraph will be changed into a numbered list (\"1\" can be any digit or a list of digits).\n   * - `[] ` or `[ ] ` &ndash; A paragraph will be changed into a to-do list.\n   * - `[x] ` or `[ x ] ` &ndash; A paragraph will be changed into a checked to-do list.\n   */\n  _addListAutoformats() {\n    const commands = this.editor.commands;\n    if (commands.get(\"bulletedList\")) {\n      blockAutoformatEditing(this.editor, this, /^[*-]\\s$/, \"bulletedList\");\n    }\n    if (commands.get(\"numberedList\")) {\n      blockAutoformatEditing(this.editor, this, /^1[.|)]\\s$/, \"numberedList\");\n    }\n    if (commands.get(\"todoList\")) {\n      blockAutoformatEditing(this.editor, this, /^\\[\\s?\\]\\s$/, \"todoList\");\n    }\n    if (commands.get(\"checkTodoList\")) {\n      blockAutoformatEditing(this.editor, this, /^\\[\\s?x\\s?\\]\\s$/, () => {\n        this.editor.execute(\"todoList\");\n        this.editor.execute(\"checkTodoList\");\n      });\n    }\n  }\n  /**\n   * Adds autoformatting related to the {@link module:basic-styles/bold~Bold},\n   * {@link module:basic-styles/italic~Italic}, {@link module:basic-styles/code~Code}\n   * and {@link module:basic-styles/strikethrough~Strikethrough}\n   *\n   * When typed:\n   * - `**foobar**` &ndash; `**` characters are removed and `foobar` is set to bold,\n   * - `__foobar__` &ndash; `__` characters are removed and `foobar` is set to bold,\n   * - `*foobar*` &ndash; `*` characters are removed and `foobar` is set to italic,\n   * - `_foobar_` &ndash; `_` characters are removed and `foobar` is set to italic,\n   * - ``` `foobar` &ndash; ``` ` ``` characters are removed and `foobar` is set to code,\n   * - `~~foobar~~` &ndash; `~~` characters are removed and `foobar` is set to strikethrough.\n   */\n  _addBasicStylesAutoformats() {\n    const commands = this.editor.commands;\n    if (commands.get(\"bold\")) {\n      const boldCallback = getCallbackFunctionForInlineAutoformat(this.editor, \"bold\");\n      inlineAutoformatEditing(this.editor, this, /(?:^|\\s)(\\*\\*)([^*]+)(\\*\\*)$/g, boldCallback);\n      inlineAutoformatEditing(this.editor, this, /(?:^|\\s)(__)([^_]+)(__)$/g, boldCallback);\n    }\n    if (commands.get(\"italic\")) {\n      const italicCallback = getCallbackFunctionForInlineAutoformat(this.editor, \"italic\");\n      inlineAutoformatEditing(this.editor, this, /(?:^|\\s)(\\*)([^*_]+)(\\*)$/g, italicCallback);\n      inlineAutoformatEditing(this.editor, this, /(?:^|\\s)(_)([^_]+)(_)$/g, italicCallback);\n    }\n    if (commands.get(\"code\")) {\n      const codeCallback = getCallbackFunctionForInlineAutoformat(this.editor, \"code\");\n      inlineAutoformatEditing(this.editor, this, /(`)([^`]+)(`)$/g, codeCallback);\n    }\n    if (commands.get(\"strikethrough\")) {\n      const strikethroughCallback = getCallbackFunctionForInlineAutoformat(this.editor, \"strikethrough\");\n      inlineAutoformatEditing(this.editor, this, /(~~)([^~]+)(~~)$/g, strikethroughCallback);\n    }\n  }\n  /**\n   * Adds autoformatting related to {@link module:heading/heading~Heading}.\n   *\n   * It is using a number at the end of the command name to associate it with the proper trigger:\n   *\n   * * `heading` with a `heading1` value will be executed when typing `#`,\n   * * `heading` with a `heading2` value will be executed when typing `##`,\n   * * ... up to `heading6` for `######`.\n   */\n  _addHeadingAutoformats() {\n    const command = this.editor.commands.get(\"heading\");\n    if (command) {\n      command.modelElements.filter((name) => name.match(/^heading[1-6]$/)).forEach((modelName) => {\n        const level = modelName[7];\n        const pattern = new RegExp(`^(#{${level}})\\\\s$`);\n        blockAutoformatEditing(this.editor, this, pattern, () => {\n          if (!command.isEnabled || command.value === modelName) {\n            return false;\n          }\n          this.editor.execute(\"heading\", { value: modelName });\n        });\n      });\n    }\n  }\n  /**\n   * Adds autoformatting related to {@link module:block-quote/blockquote~BlockQuote}.\n   *\n   * When typed:\n   * * `> ` &ndash; A paragraph will be changed to a block quote.\n   */\n  _addBlockQuoteAutoformats() {\n    if (this.editor.commands.get(\"blockQuote\")) {\n      blockAutoformatEditing(this.editor, this, /^>\\s$/, \"blockQuote\");\n    }\n  }\n  /**\n   * Adds autoformatting related to {@link module:code-block/codeblock~CodeBlock}.\n   *\n   * When typed:\n   * - `` ``` `` &ndash; A paragraph will be changed to a code block.\n   */\n  _addCodeBlockAutoformats() {\n    const editor = this.editor;\n    const selection = editor.model.document.selection;\n    if (editor.commands.get(\"codeBlock\")) {\n      blockAutoformatEditing(editor, this, /^```$/, () => {\n        if (selection.getFirstPosition().parent.is(\"element\", \"listItem\")) {\n          return false;\n        }\n        this.editor.execute(\"codeBlock\", {\n          usePreviousLanguageChoice: true\n        });\n      });\n    }\n  }\n  /**\n   * Adds autoformatting related to {@link module:horizontal-line/horizontalline~HorizontalLine}.\n   *\n   * When typed:\n   * - `` --- `` &ndash; Will be replaced with a horizontal line.\n   */\n  _addHorizontalLineAutoformats() {\n    if (this.editor.commands.get(\"horizontalLine\")) {\n      blockAutoformatEditing(this.editor, this, /^---$/, \"horizontalLine\");\n    }\n  }\n};\nfunction getCallbackFunctionForInlineAutoformat(editor, attributeKey) {\n  return (writer, rangesToFormat) => {\n    const command = editor.commands.get(attributeKey);\n    if (!command.isEnabled) {\n      return false;\n    }\n    const validRanges = editor.model.schema.getValidRanges(rangesToFormat, attributeKey);\n    for (const range of validRanges) {\n      writer.setAttribute(attributeKey, true, range);\n    }\n    writer.removeSelectionAttribute(attributeKey);\n  };\n}\nexport {\n  Autoformat as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-autoformat/src/blockautoformatediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-autoformat/src/inlineautoformatediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-autoformat/src/autoformat.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-autoformat_src_autoformat.js.map\n","import {\n  Command\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/attributecommand.js\nvar AttributeCommand = class extends Command {\n  /**\n   * @param attributeKey Attribute that will be set by the command.\n   */\n  constructor(editor, attributeKey) {\n    super(editor);\n    this.attributeKey = attributeKey;\n  }\n  /**\n   * Updates the command's {@link #value} and {@link #isEnabled} based on the current selection.\n   */\n  refresh() {\n    const model = this.editor.model;\n    const doc = model.document;\n    this.value = this._getValueFromFirstAllowedNode();\n    this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n  }\n  /**\n   * Executes the command &ndash; applies the attribute to the selection or removes it from the selection.\n   *\n   * If the command is active (`value == true`), it will remove attributes. Otherwise, it will set attributes.\n   *\n   * The execution result differs, depending on the {@link module:engine/model/document~Document#selection}:\n   *\n   * * If the selection is on a range, the command applies the attribute to all nodes in that range\n   * (if they are allowed to have this attribute by the {@link module:engine/model/schema~Schema schema}).\n   * * If the selection is collapsed in a non-empty node, the command applies the attribute to the\n   * {@link module:engine/model/document~Document#selection} itself (note that typed characters copy attributes from the selection).\n   * * If the selection is collapsed in an empty node, the command applies the attribute to the parent node of the selection (note\n   * that the selection inherits all attributes from a node if it is in an empty node).\n   *\n   * @fires execute\n   * @param options Command options.\n   * @param options.forceValue If set, it will force the command behavior. If `true`,\n   * the command will apply the attribute, otherwise the command will remove the attribute.\n   * If not set, the command will look for its current value to decide what it should do.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const doc = model.document;\n    const selection = doc.selection;\n    const value = options.forceValue === void 0 ? !this.value : options.forceValue;\n    model.change((writer) => {\n      if (selection.isCollapsed) {\n        if (value) {\n          writer.setSelectionAttribute(this.attributeKey, true);\n        } else {\n          writer.removeSelectionAttribute(this.attributeKey);\n        }\n      } else {\n        const ranges = model.schema.getValidRanges(selection.getRanges(), this.attributeKey);\n        for (const range of ranges) {\n          if (value) {\n            writer.setAttribute(this.attributeKey, value, range);\n          } else {\n            writer.removeAttribute(this.attributeKey, range);\n          }\n        }\n      }\n    });\n  }\n  /**\n   * Checks the attribute value of the first node in the selection that allows the attribute.\n   * For the collapsed selection returns the selection attribute.\n   *\n   * @returns The attribute value.\n   */\n  _getValueFromFirstAllowedNode() {\n    const model = this.editor.model;\n    const schema = model.schema;\n    const selection = model.document.selection;\n    if (selection.isCollapsed) {\n      return selection.hasAttribute(this.attributeKey);\n    }\n    for (const range of selection.getRanges()) {\n      for (const item of range.getItems()) {\n        if (schema.checkAttribute(item, this.attributeKey)) {\n          return item.hasAttribute(this.attributeKey);\n        }\n      }\n    }\n    return false;\n  }\n};\n\nexport {\n  AttributeCommand\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-basic-styles/src/attributecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-LVH5WX2D.js.map\n","import {\n  AttributeCommand\n} from \"./chunk-LVH5WX2D.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Plugin,\n  icons\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldediting.js\nvar BOLD = \"bold\";\nvar BoldEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"BoldEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.model.schema.extend(\"$text\", { allowAttributes: BOLD });\n    editor.model.schema.setAttributeProperties(BOLD, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n    editor.conversion.attributeToElement({\n      model: BOLD,\n      view: \"strong\",\n      upcastAlso: [\n        \"b\",\n        (viewElement) => {\n          const fontWeight = viewElement.getStyle(\"font-weight\");\n          if (!fontWeight) {\n            return null;\n          }\n          if (fontWeight == \"bold\" || Number(fontWeight) >= 600) {\n            return {\n              name: true,\n              styles: [\"font-weight\"]\n            };\n          }\n          return null;\n        }\n      ]\n    });\n    editor.commands.add(BOLD, new AttributeCommand(editor, BOLD));\n    editor.keystrokes.set(\"CTRL+B\", BOLD);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/bold/boldui.js\nvar BOLD2 = \"bold\";\nvar BoldUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"BoldUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    editor.ui.componentFactory.add(BOLD2, (locale) => {\n      const command = editor.commands.get(BOLD2);\n      const view = new ButtonView(locale);\n      view.set({\n        label: t(\"Bold\"),\n        icon: icons.bold,\n        keystroke: \"CTRL+B\",\n        tooltip: true,\n        isToggleable: true\n      });\n      view.bind(\"isOn\", \"isEnabled\").to(command, \"value\", \"isEnabled\");\n      this.listenTo(view, \"execute\", () => {\n        editor.execute(BOLD2);\n        editor.editing.view.focus();\n      });\n      return view;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/bold.js\nvar Bold = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [BoldEditing, BoldUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Bold\";\n  }\n};\nexport {\n  Bold as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-basic-styles/src/bold/boldediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-basic-styles/src/bold/boldui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-basic-styles/src/bold.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-basic-styles_src_bold.js.map\n","import {\n  AttributeCommand\n} from \"./chunk-LVH5WX2D.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Plugin\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicediting.js\nvar ITALIC = \"italic\";\nvar ItalicEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ItalicEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.model.schema.extend(\"$text\", { allowAttributes: ITALIC });\n    editor.model.schema.setAttributeProperties(ITALIC, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n    editor.conversion.attributeToElement({\n      model: ITALIC,\n      view: \"i\",\n      upcastAlso: [\n        \"em\",\n        {\n          styles: {\n            \"font-style\": \"italic\"\n          }\n        }\n      ]\n    });\n    editor.commands.add(ITALIC, new AttributeCommand(editor, ITALIC));\n    editor.keystrokes.set(\"CTRL+I\", ITALIC);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/italic/italicui.js\nimport italicIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-basic-styles/theme/icons/italic.svg\";\nvar ITALIC2 = \"italic\";\nvar ItalicUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ItalicUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    editor.ui.componentFactory.add(ITALIC2, (locale) => {\n      const command = editor.commands.get(ITALIC2);\n      const view = new ButtonView(locale);\n      view.set({\n        label: t(\"Italic\"),\n        icon: italicIcon,\n        keystroke: \"CTRL+I\",\n        tooltip: true,\n        isToggleable: true\n      });\n      view.bind(\"isOn\", \"isEnabled\").to(command, \"value\", \"isEnabled\");\n      this.listenTo(view, \"execute\", () => {\n        editor.execute(ITALIC2);\n        editor.editing.view.focus();\n      });\n      return view;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-basic-styles/src/italic.js\nvar Italic = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ItalicEditing, ItalicUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Italic\";\n  }\n};\nexport {\n  Italic as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-basic-styles/src/italic/italicediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-basic-styles/src/italic/italicui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-basic-styles/src/italic.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-basic-styles_src_italic.js.map\n","import \"./chunk-2524DH5P.js\";\nimport {\n  Enter\n} from \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-BHRKVRIW.js\";\nimport {\n  Delete\n} from \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  Plugin,\n  first,\n  icons\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-block-quote/src/blockquotecommand.js\nvar BlockQuoteCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.value = this._getValue();\n    this.isEnabled = this._checkEnabled();\n  }\n  /**\n   * Executes the command. When the command {@link #value is on}, all top-most block quotes within\n   * the selection will be removed. If it is off, all selected blocks will be wrapped with\n   * a block quote.\n   *\n   * @fires execute\n   * @param options Command options.\n   * @param options.forceValue If set, it will force the command behavior. If `true`, the command will apply a block quote,\n   * otherwise the command will remove the block quote. If not set, the command will act basing on its current value.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const schema = model.schema;\n    const selection = model.document.selection;\n    const blocks = Array.from(selection.getSelectedBlocks());\n    const value = options.forceValue === void 0 ? !this.value : options.forceValue;\n    model.change((writer) => {\n      if (!value) {\n        this._removeQuote(writer, blocks.filter(findQuote));\n      } else {\n        const blocksToQuote = blocks.filter((block) => {\n          return findQuote(block) || checkCanBeQuoted(schema, block);\n        });\n        this._applyQuote(writer, blocksToQuote);\n      }\n    });\n  }\n  /**\n   * Checks the command's {@link #value}.\n   */\n  _getValue() {\n    const selection = this.editor.model.document.selection;\n    const firstBlock = first(selection.getSelectedBlocks());\n    return !!(firstBlock && findQuote(firstBlock));\n  }\n  /**\n   * Checks whether the command can be enabled in the current context.\n   *\n   * @returns Whether the command should be enabled.\n   */\n  _checkEnabled() {\n    if (this.value) {\n      return true;\n    }\n    const selection = this.editor.model.document.selection;\n    const schema = this.editor.model.schema;\n    const firstBlock = first(selection.getSelectedBlocks());\n    if (!firstBlock) {\n      return false;\n    }\n    return checkCanBeQuoted(schema, firstBlock);\n  }\n  /**\n   * Removes the quote from given blocks.\n   *\n   * If blocks which are supposed to be \"unquoted\" are in the middle of a quote,\n   * start it or end it, then the quote will be split (if needed) and the blocks\n   * will be moved out of it, so other quoted blocks remained quoted.\n   */\n  _removeQuote(writer, blocks) {\n    getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange) => {\n      if (groupRange.start.isAtStart && groupRange.end.isAtEnd) {\n        writer.unwrap(groupRange.start.parent);\n        return;\n      }\n      if (groupRange.start.isAtStart) {\n        const positionBefore = writer.createPositionBefore(groupRange.start.parent);\n        writer.move(groupRange, positionBefore);\n        return;\n      }\n      if (!groupRange.end.isAtEnd) {\n        writer.split(groupRange.end);\n      }\n      const positionAfter = writer.createPositionAfter(groupRange.end.parent);\n      writer.move(groupRange, positionAfter);\n    });\n  }\n  /**\n   * Applies the quote to given blocks.\n   */\n  _applyQuote(writer, blocks) {\n    const quotesToMerge = [];\n    getRangesOfBlockGroups(writer, blocks).reverse().forEach((groupRange) => {\n      let quote = findQuote(groupRange.start);\n      if (!quote) {\n        quote = writer.createElement(\"blockQuote\");\n        writer.wrap(groupRange, quote);\n      }\n      quotesToMerge.push(quote);\n    });\n    quotesToMerge.reverse().reduce((currentQuote, nextQuote) => {\n      if (currentQuote.nextSibling == nextQuote) {\n        writer.merge(writer.createPositionAfter(currentQuote));\n        return currentQuote;\n      }\n      return nextQuote;\n    });\n  }\n};\nfunction findQuote(elementOrPosition) {\n  return elementOrPosition.parent.name == \"blockQuote\" ? elementOrPosition.parent : null;\n}\nfunction getRangesOfBlockGroups(writer, blocks) {\n  let startPosition;\n  let i = 0;\n  const ranges = [];\n  while (i < blocks.length) {\n    const block = blocks[i];\n    const nextBlock = blocks[i + 1];\n    if (!startPosition) {\n      startPosition = writer.createPositionBefore(block);\n    }\n    if (!nextBlock || block.nextSibling != nextBlock) {\n      ranges.push(writer.createRange(startPosition, writer.createPositionAfter(block)));\n      startPosition = null;\n    }\n    i++;\n  }\n  return ranges;\n}\nfunction checkCanBeQuoted(schema, block) {\n  const isBQAllowed = schema.checkChild(block.parent, \"blockQuote\");\n  const isBlockAllowedInBQ = schema.checkChild([\"$root\", \"blockQuote\"], block);\n  return isBQAllowed && isBlockAllowedInBQ;\n}\n\n// node_modules/@ckeditor/ckeditor5-block-quote/src/blockquoteediting.js\nvar BlockQuoteEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"BlockQuoteEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Enter, Delete];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    editor.commands.add(\"blockQuote\", new BlockQuoteCommand(editor));\n    schema.register(\"blockQuote\", {\n      inheritAllFrom: \"$container\"\n    });\n    editor.conversion.elementToElement({ model: \"blockQuote\", view: \"blockquote\" });\n    editor.model.document.registerPostFixer((writer) => {\n      const changes = editor.model.document.differ.getChanges();\n      for (const entry of changes) {\n        if (entry.type == \"insert\") {\n          const element = entry.position.nodeAfter;\n          if (!element) {\n            continue;\n          }\n          if (element.is(\"element\", \"blockQuote\") && element.isEmpty) {\n            writer.remove(element);\n            return true;\n          } else if (element.is(\"element\", \"blockQuote\") && !schema.checkChild(entry.position, element)) {\n            writer.unwrap(element);\n            return true;\n          } else if (element.is(\"element\")) {\n            const range = writer.createRangeIn(element);\n            for (const child of range.getItems()) {\n              if (child.is(\"element\", \"blockQuote\") && !schema.checkChild(writer.createPositionBefore(child), child)) {\n                writer.unwrap(child);\n                return true;\n              }\n            }\n          }\n        } else if (entry.type == \"remove\") {\n          const parent = entry.position.parent;\n          if (parent.is(\"element\", \"blockQuote\") && parent.isEmpty) {\n            writer.remove(parent);\n            return true;\n          }\n        }\n      }\n      return false;\n    });\n    const viewDocument = this.editor.editing.view.document;\n    const selection = editor.model.document.selection;\n    const blockQuoteCommand = editor.commands.get(\"blockQuote\");\n    this.listenTo(viewDocument, \"enter\", (evt, data) => {\n      if (!selection.isCollapsed || !blockQuoteCommand.value) {\n        return;\n      }\n      const positionParent = selection.getLastPosition().parent;\n      if (positionParent.isEmpty) {\n        editor.execute(\"blockQuote\");\n        editor.editing.view.scrollToTheSelection();\n        data.preventDefault();\n        evt.stop();\n      }\n    }, { context: \"blockquote\" });\n    this.listenTo(viewDocument, \"delete\", (evt, data) => {\n      if (data.direction != \"backward\" || !selection.isCollapsed || !blockQuoteCommand.value) {\n        return;\n      }\n      const positionParent = selection.getLastPosition().parent;\n      if (positionParent.isEmpty && !positionParent.previousSibling) {\n        editor.execute(\"blockQuote\");\n        editor.editing.view.scrollToTheSelection();\n        data.preventDefault();\n        evt.stop();\n      }\n    }, { context: \"blockquote\" });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-block-quote/src/blockquoteui.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-block-quote/theme/blockquote.css\";\nvar BlockQuoteUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"BlockQuoteUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    editor.ui.componentFactory.add(\"blockQuote\", (locale) => {\n      const command = editor.commands.get(\"blockQuote\");\n      const buttonView = new ButtonView(locale);\n      buttonView.set({\n        label: t(\"Block quote\"),\n        icon: icons.quote,\n        tooltip: true,\n        isToggleable: true\n      });\n      buttonView.bind(\"isOn\", \"isEnabled\").to(command, \"value\", \"isEnabled\");\n      this.listenTo(buttonView, \"execute\", () => {\n        editor.execute(\"blockQuote\");\n        editor.editing.view.focus();\n      });\n      return buttonView;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-block-quote/src/blockquote.js\nvar BlockQuote = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [BlockQuoteEditing, BlockQuoteUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"BlockQuote\";\n  }\n};\nexport {\n  BlockQuote as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-block-quote/src/blockquotecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-block-quote/src/blockquoteediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-block-quote/src/blockquoteui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-block-quote/src/blockquote.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-block-quote_src_blockquote.js.map\n","import {\n  FileRepository\n} from \"./chunk-KQSKBC7C.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Plugin,\n  logWarning\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-easy-image/src/cloudservicesuploadadapter.js\nvar CloudServicesUploadAdapter = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"CloudServicesUploadAdapter\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [\"CloudServices\", FileRepository];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const cloudServices = editor.plugins.get(\"CloudServices\");\n    const token = cloudServices.token;\n    const uploadUrl = cloudServices.uploadUrl;\n    if (!token) {\n      return;\n    }\n    const cloudServicesCore = editor.plugins.get(\"CloudServicesCore\");\n    this._uploadGateway = cloudServicesCore.createUploadGateway(token, uploadUrl);\n    editor.plugins.get(FileRepository).createUploadAdapter = (loader) => {\n      return new Adapter(this._uploadGateway, loader);\n    };\n  }\n};\nvar Adapter = class {\n  constructor(uploadGateway, loader) {\n    this.uploadGateway = uploadGateway;\n    this.loader = loader;\n  }\n  upload() {\n    return this.loader.file.then((file) => {\n      this.fileUploader = this.uploadGateway.upload(file);\n      this.fileUploader.on(\"progress\", (evt, data) => {\n        this.loader.uploadTotal = data.total;\n        this.loader.uploaded = data.uploaded;\n      });\n      return this.fileUploader.send();\n    });\n  }\n  abort() {\n    this.fileUploader.abort();\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-easy-image/src/easyimage.js\nvar EasyImage = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"EasyImage\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [CloudServicesUploadAdapter, \"ImageUpload\"];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    if (!editor.plugins.has(\"ImageBlockEditing\") && !editor.plugins.has(\"ImageInlineEditing\")) {\n      logWarning(\"easy-image-image-feature-missing\", editor);\n    }\n  }\n};\nexport {\n  EasyImage as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-easy-image/src/cloudservicesuploadadapter.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-easy-image/src/easyimage.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-easy-image_src_easyimage.js.map\n","import {\n  Command,\n  Plugin,\n  first\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-paragraph/src/paragraphcommand.js\nvar ParagraphCommand = class extends Command {\n  constructor(editor) {\n    super(editor);\n    this._isEnabledBasedOnSelection = false;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const document = model.document;\n    const block = first(document.selection.getSelectedBlocks());\n    this.value = !!block && block.is(\"element\", \"paragraph\");\n    this.isEnabled = !!block && checkCanBecomeParagraph(block, model.schema);\n  }\n  /**\n   * Executes the command. All the blocks (see {@link module:engine/model/schema~Schema}) in the selection\n   * will be turned to paragraphs.\n   *\n   * @fires execute\n   * @param options Options for the executed command.\n   * @param options.selection The selection that the command should be applied to. By default,\n   * if not provided, the command is applied to the {@link module:engine/model/document~Document#selection}.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const document = model.document;\n    const selection = options.selection || document.selection;\n    if (!model.canEditAt(selection)) {\n      return;\n    }\n    model.change((writer) => {\n      const blocks = selection.getSelectedBlocks();\n      for (const block of blocks) {\n        if (!block.is(\"element\", \"paragraph\") && checkCanBecomeParagraph(block, model.schema)) {\n          writer.rename(block, \"paragraph\");\n        }\n      }\n    });\n  }\n};\nfunction checkCanBecomeParagraph(block, schema) {\n  return schema.checkChild(block.parent, \"paragraph\") && !schema.isObject(block);\n}\n\n// node_modules/@ckeditor/ckeditor5-paragraph/src/insertparagraphcommand.js\nvar InsertParagraphCommand = class extends Command {\n  constructor(editor) {\n    super(editor);\n    this._isEnabledBasedOnSelection = false;\n  }\n  /**\n   * Executes the command.\n   *\n   * @param options Options for the executed command.\n   * @param options.position The model position at which the new paragraph will be inserted.\n   * @param options.attributes Attributes keys and values to set on a inserted paragraph.\n   * @fires execute\n   */\n  execute(options) {\n    const model = this.editor.model;\n    const attributes = options.attributes;\n    let position = options.position;\n    if (!model.canEditAt(position)) {\n      return;\n    }\n    model.change((writer) => {\n      position = this._findPositionToInsertParagraph(position, writer);\n      if (!position) {\n        return;\n      }\n      const paragraph = writer.createElement(\"paragraph\");\n      if (attributes) {\n        model.schema.setAllowedAttributes(paragraph, attributes, writer);\n      }\n      model.insertContent(paragraph, position);\n      writer.setSelection(paragraph, \"in\");\n    });\n  }\n  /**\n   * Returns the best position to insert a new paragraph.\n   */\n  _findPositionToInsertParagraph(position, writer) {\n    const model = this.editor.model;\n    if (model.schema.checkChild(position, \"paragraph\")) {\n      return position;\n    }\n    const allowedParent = model.schema.findAllowedParent(position, \"paragraph\");\n    if (!allowedParent) {\n      return null;\n    }\n    const positionParent = position.parent;\n    const isTextAllowed = model.schema.checkChild(positionParent, \"$text\");\n    if (positionParent.isEmpty || isTextAllowed && position.isAtEnd) {\n      return model.createPositionAfter(positionParent);\n    }\n    if (!positionParent.isEmpty && isTextAllowed && position.isAtStart) {\n      return model.createPositionBefore(positionParent);\n    }\n    return writer.split(position, allowedParent).position;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-paragraph/src/paragraph.js\nvar Paragraph = class _Paragraph extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Paragraph\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const model = editor.model;\n    editor.commands.add(\"paragraph\", new ParagraphCommand(editor));\n    editor.commands.add(\"insertParagraph\", new InsertParagraphCommand(editor));\n    model.schema.register(\"paragraph\", { inheritAllFrom: \"$block\" });\n    editor.conversion.elementToElement({ model: \"paragraph\", view: \"p\" });\n    editor.conversion.for(\"upcast\").elementToElement({\n      model: (viewElement, { writer }) => {\n        if (!_Paragraph.paragraphLikeElements.has(viewElement.name)) {\n          return null;\n        }\n        if (viewElement.isEmpty) {\n          return null;\n        }\n        return writer.createElement(\"paragraph\");\n      },\n      view: /.+/,\n      converterPriority: \"low\"\n    });\n  }\n};\nParagraph.paragraphLikeElements = /* @__PURE__ */ new Set([\n  \"blockquote\",\n  \"dd\",\n  \"div\",\n  \"dt\",\n  \"h1\",\n  \"h2\",\n  \"h3\",\n  \"h4\",\n  \"h5\",\n  \"h6\",\n  \"li\",\n  \"p\",\n  \"td\",\n  \"th\"\n]);\nvar paragraph_default = Paragraph;\n\nexport {\n  paragraph_default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-paragraph/src/paragraphcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-paragraph/src/insertparagraphcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-paragraph/src/paragraph.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-2NBVD3VO.js.map\n","import {\n  paragraph_default\n} from \"./chunk-2NBVD3VO.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  Model,\n  addListToDropdown,\n  createDropdown\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Collection,\n  Command,\n  Plugin,\n  first,\n  icons,\n  priorities_default\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-paragraph/src/paragraphbuttonui.js\nvar icon = icons.paragraph;\n\n// node_modules/@ckeditor/ckeditor5-heading/src/headingcommand.js\nvar HeadingCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor Editor instance.\n   * @param modelElements Names of the element which this command can apply in the model.\n   */\n  constructor(editor, modelElements) {\n    super(editor);\n    this.modelElements = modelElements;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const block = first(this.editor.model.document.selection.getSelectedBlocks());\n    this.value = !!block && this.modelElements.includes(block.name) && block.name;\n    this.isEnabled = !!block && this.modelElements.some((heading) => checkCanBecomeHeading(block, heading, this.editor.model.schema));\n  }\n  /**\n   * Executes the command. Applies the heading to the selected blocks or, if the first selected\n   * block is a heading already, turns selected headings (of this level only) to paragraphs.\n   *\n   * @param options.value Name of the element which this command will apply in the model.\n   * @fires execute\n   */\n  execute(options) {\n    const model = this.editor.model;\n    const document = model.document;\n    const modelElement = options.value;\n    model.change((writer) => {\n      const blocks = Array.from(document.selection.getSelectedBlocks()).filter((block) => {\n        return checkCanBecomeHeading(block, modelElement, model.schema);\n      });\n      for (const block of blocks) {\n        if (!block.is(\"element\", modelElement)) {\n          writer.rename(block, modelElement);\n        }\n      }\n    });\n  }\n};\nfunction checkCanBecomeHeading(block, heading, schema) {\n  return schema.checkChild(block.parent, heading) && !schema.isObject(block);\n}\n\n// node_modules/@ckeditor/ckeditor5-heading/src/headingediting.js\nvar defaultModelElement = \"paragraph\";\nvar HeadingEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"HeadingEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"heading\", {\n      options: [\n        { model: \"paragraph\", title: \"Paragraph\", class: \"ck-heading_paragraph\" },\n        { model: \"heading1\", view: \"h2\", title: \"Heading 1\", class: \"ck-heading_heading1\" },\n        { model: \"heading2\", view: \"h3\", title: \"Heading 2\", class: \"ck-heading_heading2\" },\n        { model: \"heading3\", view: \"h4\", title: \"Heading 3\", class: \"ck-heading_heading3\" }\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [paragraph_default];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const options = editor.config.get(\"heading.options\");\n    const modelElements = [];\n    for (const option of options) {\n      if (option.model === \"paragraph\") {\n        continue;\n      }\n      editor.model.schema.register(option.model, {\n        inheritAllFrom: \"$block\"\n      });\n      editor.conversion.elementToElement(option);\n      modelElements.push(option.model);\n    }\n    this._addDefaultH1Conversion(editor);\n    editor.commands.add(\"heading\", new HeadingCommand(editor, modelElements));\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    const editor = this.editor;\n    const enterCommand = editor.commands.get(\"enter\");\n    const options = editor.config.get(\"heading.options\");\n    if (enterCommand) {\n      this.listenTo(enterCommand, \"afterExecute\", (evt, data) => {\n        const positionParent = editor.model.document.selection.getFirstPosition().parent;\n        const isHeading = options.some((option) => positionParent.is(\"element\", option.model));\n        if (isHeading && !positionParent.is(\"element\", defaultModelElement) && positionParent.childCount === 0) {\n          data.writer.rename(positionParent, defaultModelElement);\n        }\n      });\n    }\n  }\n  /**\n   * Adds default conversion for `h1` -> `heading1` with a low priority.\n   *\n   * @param editor Editor instance on which to add the `h1` conversion.\n   */\n  _addDefaultH1Conversion(editor) {\n    editor.conversion.for(\"upcast\").elementToElement({\n      model: \"heading1\",\n      view: \"h1\",\n      // With a `low` priority, `paragraph` plugin autoparagraphing mechanism is executed. Make sure\n      // this listener is called before it. If not, `h1` will be transformed into a paragraph.\n      converterPriority: priorities_default.low + 1\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-heading/src/utils.js\nfunction getLocalizedOptions(editor) {\n  const t = editor.t;\n  const localizedTitles = {\n    \"Paragraph\": t(\"Paragraph\"),\n    \"Heading 1\": t(\"Heading 1\"),\n    \"Heading 2\": t(\"Heading 2\"),\n    \"Heading 3\": t(\"Heading 3\"),\n    \"Heading 4\": t(\"Heading 4\"),\n    \"Heading 5\": t(\"Heading 5\"),\n    \"Heading 6\": t(\"Heading 6\")\n  };\n  return editor.config.get(\"heading.options\").map((option) => {\n    const title = localizedTitles[option.title];\n    if (title && title != option.title) {\n      option.title = title;\n    }\n    return option;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-heading/src/headingui.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-heading/theme/heading.css\";\nvar HeadingUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"HeadingUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    const options = getLocalizedOptions(editor);\n    const defaultTitle = t(\"Choose heading\");\n    const accessibleLabel = t(\"Heading\");\n    editor.ui.componentFactory.add(\"heading\", (locale) => {\n      const titles = {};\n      const itemDefinitions = new Collection();\n      const headingCommand = editor.commands.get(\"heading\");\n      const paragraphCommand = editor.commands.get(\"paragraph\");\n      const commands = [headingCommand];\n      for (const option of options) {\n        const def = {\n          type: \"button\",\n          model: new Model({\n            label: option.title,\n            class: option.class,\n            role: \"menuitemradio\",\n            withText: true\n          })\n        };\n        if (option.model === \"paragraph\") {\n          def.model.bind(\"isOn\").to(paragraphCommand, \"value\");\n          def.model.set(\"commandName\", \"paragraph\");\n          commands.push(paragraphCommand);\n        } else {\n          def.model.bind(\"isOn\").to(headingCommand, \"value\", (value) => value === option.model);\n          def.model.set({\n            commandName: \"heading\",\n            commandValue: option.model\n          });\n        }\n        itemDefinitions.add(def);\n        titles[option.model] = option.title;\n      }\n      const dropdownView = createDropdown(locale);\n      addListToDropdown(dropdownView, itemDefinitions, {\n        ariaLabel: accessibleLabel,\n        role: \"menu\"\n      });\n      dropdownView.buttonView.set({\n        ariaLabel: accessibleLabel,\n        ariaLabelledBy: void 0,\n        isOn: false,\n        withText: true,\n        tooltip: accessibleLabel\n      });\n      dropdownView.extendTemplate({\n        attributes: {\n          class: [\n            \"ck-heading-dropdown\"\n          ]\n        }\n      });\n      dropdownView.bind(\"isEnabled\").toMany(commands, \"isEnabled\", (...areEnabled) => {\n        return areEnabled.some((isEnabled) => isEnabled);\n      });\n      dropdownView.buttonView.bind(\"label\").to(headingCommand, \"value\", paragraphCommand, \"value\", (value, para) => {\n        const whichModel = value || para && \"paragraph\";\n        if (typeof whichModel === \"boolean\") {\n          return defaultTitle;\n        }\n        if (!titles[whichModel]) {\n          return defaultTitle;\n        }\n        return titles[whichModel];\n      });\n      this.listenTo(dropdownView, \"execute\", (evt) => {\n        const { commandName, commandValue } = evt.source;\n        editor.execute(commandName, commandValue ? { value: commandValue } : void 0);\n        editor.editing.view.focus();\n      });\n      return dropdownView;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-heading/src/heading.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-heading/theme/heading.css\";\nvar Heading = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [HeadingEditing, HeadingUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Heading\";\n  }\n};\nexport {\n  Heading as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-paragraph/src/paragraphbuttonui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-paragraph/src/augmentation.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-paragraph/src/index.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\nckeditor5/src/paragraph.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-heading/src/headingcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-heading/src/headingediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-heading/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-heading/src/headingui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-heading/src/heading.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-heading_src_heading.js.map\n","import {\n  Observer\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imageloadobserver.js\nvar ImageLoadObserver = class extends Observer {\n  /**\n   * @inheritDoc\n   */\n  observe(domRoot) {\n    this.listenTo(domRoot, \"load\", (event, domEvent) => {\n      const domElement = domEvent.target;\n      if (this.checkShouldIgnoreEventFromTarget(domElement)) {\n        return;\n      }\n      if (domElement.tagName == \"IMG\") {\n        this._fireEvents(domEvent);\n      }\n    }, { useCapture: true });\n  }\n  /**\n   * @inheritDoc\n   */\n  stopObserving(domRoot) {\n    this.stopListening(domRoot);\n  }\n  /**\n   * Fires {@link module:engine/view/document~Document#event:layoutChanged} and\n   * {@link module:engine/view/document~Document#event:imageLoaded}\n   * if observer {@link #isEnabled is enabled}.\n   *\n   * @param domEvent The DOM event.\n   */\n  _fireEvents(domEvent) {\n    if (this.isEnabled) {\n      this.document.fire(\"layoutChanged\");\n      this.document.fire(\"imageLoaded\", domEvent);\n    }\n  }\n};\n\nexport {\n  ImageLoadObserver\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/image/imageloadobserver.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-5UJG77VP.js.map\n","import {\n  findOptimalInsertionRange,\n  isWidget,\n  toWidget\n} from \"./chunk-ZGNJRE43.js\";\nimport {\n  DomEmitterMixin,\n  Plugin,\n  first,\n  global_default\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/utils.js\nfunction createInlineImageViewElement(writer) {\n  return writer.createContainerElement(\"span\", { class: \"image-inline\" }, writer.createEmptyElement(\"img\"));\n}\nfunction createBlockImageViewElement(writer) {\n  return writer.createContainerElement(\"figure\", { class: \"image\" }, [\n    writer.createEmptyElement(\"img\"),\n    writer.createSlot(\"children\")\n  ]);\n}\nfunction getImgViewElementMatcher(editor, matchImageType) {\n  const imageUtils = editor.plugins.get(\"ImageUtils\");\n  const areBothImagePluginsLoaded = editor.plugins.has(\"ImageInlineEditing\") && editor.plugins.has(\"ImageBlockEditing\");\n  return (element) => {\n    if (!imageUtils.isInlineImageView(element)) {\n      return null;\n    }\n    if (!areBothImagePluginsLoaded) {\n      return getPositiveMatchPattern(element);\n    }\n    const imageType = element.getStyle(\"display\") == \"block\" || element.findAncestor(imageUtils.isBlockImageView) ? \"imageBlock\" : \"imageInline\";\n    if (imageType !== matchImageType) {\n      return null;\n    }\n    return getPositiveMatchPattern(element);\n  };\n  function getPositiveMatchPattern(element) {\n    const pattern = {\n      name: true\n    };\n    if (element.hasAttribute(\"src\")) {\n      pattern.attributes = [\"src\"];\n    }\n    return pattern;\n  }\n}\nfunction determineImageTypeForInsertionAtSelection(schema, selection) {\n  const firstBlock = first(selection.getSelectedBlocks());\n  if (!firstBlock || schema.isObject(firstBlock)) {\n    return \"imageBlock\";\n  }\n  if (firstBlock.isEmpty && firstBlock.name != \"listItem\") {\n    return \"imageBlock\";\n  }\n  return \"imageInline\";\n}\nfunction getSizeValueIfInPx(size) {\n  if (size && size.endsWith(\"px\")) {\n    return parseInt(size);\n  }\n  return null;\n}\nfunction widthAndHeightStylesAreBothSet(viewElement) {\n  const widthStyle = getSizeValueIfInPx(viewElement.getStyle(\"width\"));\n  const heightStyle = getSizeValueIfInPx(viewElement.getStyle(\"height\"));\n  return !!(widthStyle && heightStyle);\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageutils.js\nvar IMAGE_WIDGETS_CLASSES_MATCH_REGEXP = /^(image|image-inline)$/;\nvar ImageUtils = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this._domEmitter = new (DomEmitterMixin())();\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageUtils\";\n  }\n  /**\n   * Checks if the provided model element is an `image` or `imageInline`.\n   */\n  isImage(modelElement) {\n    return this.isInlineImage(modelElement) || this.isBlockImage(modelElement);\n  }\n  /**\n   * Checks if the provided view element represents an inline image.\n   *\n   * Also, see {@link module:image/imageutils~ImageUtils#isImageWidget}.\n   */\n  isInlineImageView(element) {\n    return !!element && element.is(\"element\", \"img\");\n  }\n  /**\n   * Checks if the provided view element represents a block image.\n   *\n   * Also, see {@link module:image/imageutils~ImageUtils#isImageWidget}.\n   */\n  isBlockImageView(element) {\n    return !!element && element.is(\"element\", \"figure\") && element.hasClass(\"image\");\n  }\n  /**\n   * Handles inserting single file. This method unifies image insertion using {@link module:widget/utils~findOptimalInsertionRange}\n   * method.\n   *\n   * ```ts\n   * const imageUtils = editor.plugins.get( 'ImageUtils' );\n   *\n   * imageUtils.insertImage( { src: 'path/to/image.jpg' } );\n   * ```\n   *\n   * @param attributes Attributes of the inserted image.\n   * This method filters out the attributes which are disallowed by the {@link module:engine/model/schema~Schema}.\n   * @param selectable Place to insert the image. If not specified,\n   * the {@link module:widget/utils~findOptimalInsertionRange} logic will be applied for the block images\n   * and `model.document.selection` for the inline images.\n   *\n   * **Note**: If `selectable` is passed, this helper will not be able to set selection attributes (such as `linkHref`)\n   * and apply them to the new image. In this case, make sure all selection attributes are passed in `attributes`.\n   *\n   * @param imageType Image type of inserted image. If not specified,\n   * it will be determined automatically depending of editor config or place of the insertion.\n   * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n   * The default is `true`.\n   * @return The inserted model image element.\n   */\n  insertImage(attributes = {}, selectable = null, imageType = null, options = {}) {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const determinedImageType = determineImageTypeForInsertion(editor, selectable || selection, imageType);\n    attributes = {\n      ...Object.fromEntries(selection.getAttributes()),\n      ...attributes\n    };\n    for (const attributeName in attributes) {\n      if (!model.schema.checkAttribute(determinedImageType, attributeName)) {\n        delete attributes[attributeName];\n      }\n    }\n    return model.change((writer) => {\n      const { setImageSizes = true } = options;\n      const imageElement = writer.createElement(determinedImageType, attributes);\n      model.insertObject(imageElement, selectable, null, {\n        setSelection: \"on\",\n        // If we want to insert a block image (for whatever reason) then we don't want to split text blocks.\n        // This applies only when we don't have the selectable specified (i.e., we insert multiple block images at once).\n        findOptimalPosition: !selectable && determinedImageType != \"imageInline\" ? \"auto\" : void 0\n      });\n      if (imageElement.parent) {\n        if (setImageSizes) {\n          this.setImageNaturalSizeAttributes(imageElement);\n        }\n        return imageElement;\n      }\n      return null;\n    });\n  }\n  /**\n   * Reads original image sizes and sets them as `width` and `height`.\n   *\n   * The `src` attribute may not be available if the user is using an upload adapter. In such a case,\n   * this method is called again after the upload process is complete and the `src` attribute is available.\n   */\n  setImageNaturalSizeAttributes(imageElement) {\n    const src = imageElement.getAttribute(\"src\");\n    if (!src) {\n      return;\n    }\n    if (imageElement.getAttribute(\"width\") || imageElement.getAttribute(\"height\")) {\n      return;\n    }\n    this.editor.model.change((writer) => {\n      const img = new global_default.window.Image();\n      this._domEmitter.listenTo(img, \"load\", () => {\n        if (!imageElement.getAttribute(\"width\") && !imageElement.getAttribute(\"height\")) {\n          this.editor.model.enqueueChange(writer.batch, (writer2) => {\n            writer2.setAttribute(\"width\", img.naturalWidth, imageElement);\n            writer2.setAttribute(\"height\", img.naturalHeight, imageElement);\n          });\n        }\n        this._domEmitter.stopListening(img, \"load\");\n      });\n      img.src = src;\n    });\n  }\n  /**\n   * Returns an image widget editing view element if one is selected or is among the selection's ancestors.\n   */\n  getClosestSelectedImageWidget(selection) {\n    const selectionPosition = selection.getFirstPosition();\n    if (!selectionPosition) {\n      return null;\n    }\n    const viewElement = selection.getSelectedElement();\n    if (viewElement && this.isImageWidget(viewElement)) {\n      return viewElement;\n    }\n    let parent = selectionPosition.parent;\n    while (parent) {\n      if (parent.is(\"element\") && this.isImageWidget(parent)) {\n        return parent;\n      }\n      parent = parent.parent;\n    }\n    return null;\n  }\n  /**\n   * Returns a image model element if one is selected or is among the selection's ancestors.\n   */\n  getClosestSelectedImageElement(selection) {\n    const selectedElement = selection.getSelectedElement();\n    return this.isImage(selectedElement) ? selectedElement : selection.getFirstPosition().findAncestor(\"imageBlock\");\n  }\n  /**\n   * Returns an image widget editing view based on the passed image view.\n   */\n  getImageWidgetFromImageView(imageView) {\n    return imageView.findAncestor({ classes: IMAGE_WIDGETS_CLASSES_MATCH_REGEXP });\n  }\n  /**\n   * Checks if image can be inserted at current model selection.\n   *\n   * @internal\n   */\n  isImageAllowed() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    return isImageAllowedInParent(this.editor, selection) && isNotInsideImage(selection);\n  }\n  /**\n   * Converts a given {@link module:engine/view/element~Element} to an image widget:\n   * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the image widget\n   * element.\n   * * Calls the {@link module:widget/utils~toWidget} function with the proper element's label creator.\n   *\n   * @param writer An instance of the view writer.\n   * @param label The element's label. It will be concatenated with the image `alt` attribute if one is present.\n   */\n  toImageWidget(viewElement, writer, label) {\n    writer.setCustomProperty(\"image\", true, viewElement);\n    const labelCreator = () => {\n      const imgElement = this.findViewImgElement(viewElement);\n      const altText = imgElement.getAttribute(\"alt\");\n      return altText ? `${altText} ${label}` : label;\n    };\n    return toWidget(viewElement, writer, { label: labelCreator });\n  }\n  /**\n   * Checks if a given view element is an image widget.\n   */\n  isImageWidget(viewElement) {\n    return !!viewElement.getCustomProperty(\"image\") && isWidget(viewElement);\n  }\n  /**\n   * Checks if the provided model element is an `image`.\n   */\n  isBlockImage(modelElement) {\n    return !!modelElement && modelElement.is(\"element\", \"imageBlock\");\n  }\n  /**\n   * Checks if the provided model element is an `imageInline`.\n   */\n  isInlineImage(modelElement) {\n    return !!modelElement && modelElement.is(\"element\", \"imageInline\");\n  }\n  /**\n   * Get the view `<img>` from another view element, e.g. a widget (`<figure class=\"image\">`), a link (`<a>`).\n   *\n   * The `<img>` can be located deep in other elements, so this helper performs a deep tree search.\n   */\n  findViewImgElement(figureView) {\n    if (this.isInlineImageView(figureView)) {\n      return figureView;\n    }\n    const editingView = this.editor.editing.view;\n    for (const { item } of editingView.createRangeIn(figureView)) {\n      if (this.isInlineImageView(item)) {\n        return item;\n      }\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    this._domEmitter.stopListening();\n    return super.destroy();\n  }\n};\nfunction isImageAllowedInParent(editor, selection) {\n  const imageType = determineImageTypeForInsertion(editor, selection, null);\n  if (imageType == \"imageBlock\") {\n    const parent = getInsertImageParent(selection, editor.model);\n    if (editor.model.schema.checkChild(parent, \"imageBlock\")) {\n      return true;\n    }\n  } else if (editor.model.schema.checkChild(selection.focus, \"imageInline\")) {\n    return true;\n  }\n  return false;\n}\nfunction isNotInsideImage(selection) {\n  return [...selection.focus.getAncestors()].every((ancestor) => !ancestor.is(\"element\", \"imageBlock\"));\n}\nfunction getInsertImageParent(selection, model) {\n  const insertionRange = findOptimalInsertionRange(selection, model);\n  const parent = insertionRange.start.parent;\n  if (parent.isEmpty && !parent.is(\"element\", \"$root\")) {\n    return parent.parent;\n  }\n  return parent;\n}\nfunction determineImageTypeForInsertion(editor, selectable, imageType) {\n  const schema = editor.model.schema;\n  const configImageInsertType = editor.config.get(\"image.insert.type\");\n  if (!editor.plugins.has(\"ImageBlockEditing\")) {\n    return \"imageInline\";\n  }\n  if (!editor.plugins.has(\"ImageInlineEditing\")) {\n    return \"imageBlock\";\n  }\n  if (imageType) {\n    return imageType;\n  }\n  if (configImageInsertType === \"inline\") {\n    return \"imageInline\";\n  }\n  if (configImageInsertType !== \"auto\") {\n    return \"imageBlock\";\n  }\n  if (selectable.is(\"selection\")) {\n    return determineImageTypeForInsertionAtSelection(schema, selectable);\n  }\n  return schema.checkChild(selectable, \"imageInline\") ? \"imageInline\" : \"imageBlock\";\n}\n\nexport {\n  createInlineImageViewElement,\n  createBlockImageViewElement,\n  getImgViewElementMatcher,\n  determineImageTypeForInsertionAtSelection,\n  getSizeValueIfInPx,\n  widthAndHeightStylesAreBothSet,\n  ImageUtils\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/image/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageutils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-MPGKEZT5.js.map\n","import {\n  ImageLoadObserver\n} from \"./chunk-5UJG77VP.js\";\nimport {\n  ImageUtils,\n  createBlockImageViewElement,\n  determineImageTypeForInsertionAtSelection,\n  getImgViewElementMatcher,\n  getSizeValueIfInPx,\n  widthAndHeightStylesAreBothSet\n} from \"./chunk-MPGKEZT5.js\";\nimport {\n  ClipboardPipeline\n} from \"./chunk-UHWQXN2Z.js\";\nimport {\n  Command,\n  Plugin,\n  UpcastWriter,\n  first,\n  logWarning,\n  toArray\n} from \"./chunk-XX3CIG5U.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/converters.js\nfunction upcastImageFigure(imageUtils) {\n  const converter = (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.test(data.viewItem, { name: true, classes: \"image\" })) {\n      return;\n    }\n    const viewImage = imageUtils.findViewImgElement(data.viewItem);\n    if (!viewImage || !conversionApi.consumable.test(viewImage, { name: true })) {\n      return;\n    }\n    conversionApi.consumable.consume(data.viewItem, { name: true, classes: \"image\" });\n    const conversionResult = conversionApi.convertItem(viewImage, data.modelCursor);\n    const modelImage = first(conversionResult.modelRange.getItems());\n    if (!modelImage) {\n      conversionApi.consumable.revert(data.viewItem, { name: true, classes: \"image\" });\n      return;\n    }\n    conversionApi.convertChildren(data.viewItem, modelImage);\n    conversionApi.updateConversionResult(modelImage, data);\n  };\n  return (dispatcher) => {\n    dispatcher.on(\"element:figure\", converter);\n  };\n}\nfunction downcastSrcsetAttribute(imageUtils, imageType) {\n  const converter = (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const writer = conversionApi.writer;\n    const element = conversionApi.mapper.toViewElement(data.item);\n    const img = imageUtils.findViewImgElement(element);\n    if (data.attributeNewValue === null) {\n      writer.removeAttribute(\"srcset\", img);\n      writer.removeAttribute(\"sizes\", img);\n    } else {\n      if (data.attributeNewValue) {\n        writer.setAttribute(\"srcset\", data.attributeNewValue, img);\n        writer.setAttribute(\"sizes\", \"100vw\", img);\n      }\n    }\n  };\n  return (dispatcher) => {\n    dispatcher.on(`attribute:srcset:${imageType}`, converter);\n  };\n}\nfunction downcastImageAttribute(imageUtils, imageType, attributeKey) {\n  const converter = (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const viewWriter = conversionApi.writer;\n    const element = conversionApi.mapper.toViewElement(data.item);\n    const img = imageUtils.findViewImgElement(element);\n    viewWriter.setAttribute(data.attributeKey, data.attributeNewValue || \"\", img);\n  };\n  return (dispatcher) => {\n    dispatcher.on(`attribute:${attributeKey}:${imageType}`, converter);\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/insertimagecommand.js\nvar InsertImageCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    const configImageInsertType = editor.config.get(\"image.insert.type\");\n    if (!editor.plugins.has(\"ImageBlockEditing\")) {\n      if (configImageInsertType === \"block\") {\n        logWarning(\"image-block-plugin-required\");\n      }\n    }\n    if (!editor.plugins.has(\"ImageInlineEditing\")) {\n      if (configImageInsertType === \"inline\") {\n        logWarning(\"image-inline-plugin-required\");\n      }\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    this.isEnabled = imageUtils.isImageAllowed();\n  }\n  /**\n   * Executes the command.\n   *\n   * @fires execute\n   * @param options Options for the executed command.\n   * @param options.source The image source or an array of image sources to insert.\n   * See the documentation of the command to learn more about accepted formats.\n   */\n  execute(options) {\n    const sourceDefinitions = toArray(options.source);\n    const selection = this.editor.model.document.selection;\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    const selectionAttributes = Object.fromEntries(selection.getAttributes());\n    sourceDefinitions.forEach((sourceDefinition, index) => {\n      const selectedElement = selection.getSelectedElement();\n      if (typeof sourceDefinition === \"string\") {\n        sourceDefinition = { src: sourceDefinition };\n      }\n      if (index && selectedElement && imageUtils.isImage(selectedElement)) {\n        const position = this.editor.model.createPositionAfter(selectedElement);\n        imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes }, position);\n      } else {\n        imageUtils.insertImage({ ...sourceDefinition, ...selectionAttributes });\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/replaceimagesourcecommand.js\nvar ReplaceImageSourceCommand = class extends Command {\n  constructor(editor) {\n    super(editor);\n    this.decorate(\"cleanupImage\");\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const element = this.editor.model.document.selection.getSelectedElement();\n    this.isEnabled = imageUtils.isImage(element);\n    this.value = this.isEnabled ? element.getAttribute(\"src\") : null;\n  }\n  /**\n   * Executes the command.\n   *\n   * @fires execute\n   * @param options Options for the executed command.\n   * @param options.source The image source to replace.\n   */\n  execute(options) {\n    const image = this.editor.model.document.selection.getSelectedElement();\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    this.editor.model.change((writer) => {\n      writer.setAttribute(\"src\", options.source, image);\n      this.cleanupImage(writer, image);\n      imageUtils.setImageNaturalSizeAttributes(image);\n    });\n  }\n  /**\n   * Cleanup image attributes that are not relevant to the new source.\n   *\n   * Removed attributes are: 'srcset', 'sizes', 'sources', 'width', 'height', 'alt'.\n   *\n   * This method is decorated, to allow custom cleanup logic.\n   * For example, to remove 'myImageId' attribute after 'src' has changed:\n   *\n   * ```ts\n   * replaceImageSourceCommand.on( 'cleanupImage', ( eventInfo, [ writer, image ] ) => {\n   * \twriter.removeAttribute( 'myImageId', image );\n   * } );\n   * ```\n   */\n  cleanupImage(writer, image) {\n    writer.removeAttribute(\"srcset\", image);\n    writer.removeAttribute(\"sizes\", image);\n    writer.removeAttribute(\"sources\", image);\n    writer.removeAttribute(\"width\", image);\n    writer.removeAttribute(\"height\", image);\n    writer.removeAttribute(\"alt\", image);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imageediting.js\nvar ImageEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const conversion = editor.conversion;\n    editor.editing.view.addObserver(ImageLoadObserver);\n    conversion.for(\"upcast\").attributeToAttribute({\n      view: {\n        name: \"img\",\n        key: \"alt\"\n      },\n      model: \"alt\"\n    }).attributeToAttribute({\n      view: {\n        name: \"img\",\n        key: \"srcset\"\n      },\n      model: \"srcset\"\n    });\n    const insertImageCommand = new InsertImageCommand(editor);\n    const replaceImageSourceCommand = new ReplaceImageSourceCommand(editor);\n    editor.commands.add(\"insertImage\", insertImageCommand);\n    editor.commands.add(\"replaceImageSource\", replaceImageSourceCommand);\n    editor.commands.add(\"imageInsert\", insertImageCommand);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagesizeattributes.js\nvar ImageSizeAttributes = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageSizeAttributes\";\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    this._registerSchema();\n    this._registerConverters(\"imageBlock\");\n    this._registerConverters(\"imageInline\");\n  }\n  /**\n   * Registers the `width` and `height` attributes for inline and block images.\n   */\n  _registerSchema() {\n    if (this.editor.plugins.has(\"ImageBlockEditing\")) {\n      this.editor.model.schema.extend(\"imageBlock\", { allowAttributes: [\"width\", \"height\"] });\n    }\n    if (this.editor.plugins.has(\"ImageInlineEditing\")) {\n      this.editor.model.schema.extend(\"imageInline\", { allowAttributes: [\"width\", \"height\"] });\n    }\n  }\n  /**\n   * Registers converters for `width` and `height` attributes.\n   */\n  _registerConverters(imageType) {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const viewElementName = imageType === \"imageBlock\" ? \"figure\" : \"img\";\n    editor.conversion.for(\"upcast\").attributeToAttribute({\n      view: {\n        name: viewElementName,\n        styles: {\n          width: /.+/\n        }\n      },\n      model: {\n        key: \"width\",\n        value: (viewElement) => {\n          if (widthAndHeightStylesAreBothSet(viewElement)) {\n            return getSizeValueIfInPx(viewElement.getStyle(\"width\"));\n          }\n          return null;\n        }\n      }\n    }).attributeToAttribute({\n      view: {\n        name: viewElementName,\n        key: \"width\"\n      },\n      model: \"width\"\n    }).attributeToAttribute({\n      view: {\n        name: viewElementName,\n        styles: {\n          height: /.+/\n        }\n      },\n      model: {\n        key: \"height\",\n        value: (viewElement) => {\n          if (widthAndHeightStylesAreBothSet(viewElement)) {\n            return getSizeValueIfInPx(viewElement.getStyle(\"height\"));\n          }\n          return null;\n        }\n      }\n    }).attributeToAttribute({\n      view: {\n        name: viewElementName,\n        key: \"height\"\n      },\n      model: \"height\"\n    });\n    editor.conversion.for(\"editingDowncast\").add((dispatcher) => {\n      attachDowncastConverter(dispatcher, \"width\", \"width\", true);\n      attachDowncastConverter(dispatcher, \"height\", \"height\", true);\n    });\n    editor.conversion.for(\"dataDowncast\").add((dispatcher) => {\n      attachDowncastConverter(dispatcher, \"width\", \"width\", false);\n      attachDowncastConverter(dispatcher, \"height\", \"height\", false);\n    });\n    function attachDowncastConverter(dispatcher, modelAttributeName, viewAttributeName, setRatioForInlineImage) {\n      dispatcher.on(`attribute:${modelAttributeName}:${imageType}`, (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.item, evt.name)) {\n          return;\n        }\n        const viewWriter = conversionApi.writer;\n        const viewElement = conversionApi.mapper.toViewElement(data.item);\n        const img = imageUtils.findViewImgElement(viewElement);\n        if (data.attributeNewValue !== null) {\n          viewWriter.setAttribute(viewAttributeName, data.attributeNewValue, img);\n        } else {\n          viewWriter.removeAttribute(viewAttributeName, img);\n        }\n        if (data.item.hasAttribute(\"sources\")) {\n          return;\n        }\n        const isResized = data.item.hasAttribute(\"resizedWidth\");\n        if (imageType === \"imageInline\" && !isResized && !setRatioForInlineImage) {\n          return;\n        }\n        const width = data.item.getAttribute(\"width\");\n        const height = data.item.getAttribute(\"height\");\n        if (width && height) {\n          viewWriter.setStyle(\"aspect-ratio\", `${width}/${height}`, img);\n        }\n      });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imagetypecommand.js\nvar ImageTypeCommand = class extends Command {\n  /**\n   * @inheritDoc\n   *\n   * @param modelElementName Model element name the command converts to.\n   */\n  constructor(editor, modelElementName) {\n    super(editor);\n    this._modelElementName = modelElementName;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n    if (this._modelElementName === \"imageBlock\") {\n      this.isEnabled = imageUtils.isInlineImage(element);\n    } else {\n      this.isEnabled = imageUtils.isBlockImage(element);\n    }\n  }\n  /**\n   * Executes the command and changes the type of a selected image.\n   *\n   * @fires execute\n   * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n   * The default is `true`.\n   * @returns An object containing references to old and new model image elements\n   * (for before and after the change) so external integrations can hook into the decorated\n   * `execute` event and handle this change. `null` if the type change failed.\n   */\n  execute(options = {}) {\n    const editor = this.editor;\n    const model = this.editor.model;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const oldElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n    const attributes = Object.fromEntries(oldElement.getAttributes());\n    if (!attributes.src && !attributes.uploadId) {\n      return null;\n    }\n    return model.change((writer) => {\n      const { setImageSizes = true } = options;\n      const markers = Array.from(model.markers).filter((marker) => marker.getRange().containsItem(oldElement));\n      const newElement = imageUtils.insertImage(attributes, model.createSelection(oldElement, \"on\"), this._modelElementName, { setImageSizes });\n      if (!newElement) {\n        return null;\n      }\n      const newElementRange = writer.createRangeOn(newElement);\n      for (const marker of markers) {\n        const markerRange = marker.getRange();\n        const range = markerRange.root.rootName != \"$graveyard\" ? markerRange.getJoined(newElementRange, true) : newElementRange;\n        writer.updateMarker(marker, { range });\n      }\n      return {\n        oldElement,\n        newElement\n      };\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imageplaceholder.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageplaceholder.css\";\nvar ImagePlaceholder = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImagePlaceholder\";\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    this._setupSchema();\n    this._setupConversion();\n    this._setupLoadListener();\n  }\n  /**\n   * Extends model schema.\n   */\n  _setupSchema() {\n    const schema = this.editor.model.schema;\n    if (schema.isRegistered(\"imageBlock\")) {\n      schema.extend(\"imageBlock\", {\n        allowAttributes: [\"placeholder\"]\n      });\n    }\n    if (schema.isRegistered(\"imageInline\")) {\n      schema.extend(\"imageInline\", {\n        allowAttributes: [\"placeholder\"]\n      });\n    }\n  }\n  /**\n   * Registers converters.\n   */\n  _setupConversion() {\n    const editor = this.editor;\n    const conversion = editor.conversion;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    conversion.for(\"editingDowncast\").add((dispatcher) => {\n      dispatcher.on(\"attribute:placeholder\", (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.test(data.item, evt.name)) {\n          return;\n        }\n        if (!data.item.is(\"element\", \"imageBlock\") && !data.item.is(\"element\", \"imageInline\")) {\n          return;\n        }\n        conversionApi.consumable.consume(data.item, evt.name);\n        const viewWriter = conversionApi.writer;\n        const element = conversionApi.mapper.toViewElement(data.item);\n        const img = imageUtils.findViewImgElement(element);\n        if (data.attributeNewValue) {\n          viewWriter.addClass(\"image_placeholder\", img);\n          viewWriter.setStyle(\"background-image\", `url(${data.attributeNewValue})`, img);\n          viewWriter.setCustomProperty(\"editingPipeline:doNotReuseOnce\", true, img);\n        } else {\n          viewWriter.removeClass(\"image_placeholder\", img);\n          viewWriter.removeStyle(\"background-image\", img);\n        }\n      });\n    });\n  }\n  /**\n   * Prepares listener for image load.\n   */\n  _setupLoadListener() {\n    const editor = this.editor;\n    const model = editor.model;\n    const editing = editor.editing;\n    const editingView = editing.view;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    editingView.addObserver(ImageLoadObserver);\n    this.listenTo(editingView.document, \"imageLoaded\", (evt, domEvent) => {\n      const imgViewElement = editingView.domConverter.mapDomToView(domEvent.target);\n      if (!imgViewElement) {\n        return;\n      }\n      const viewElement = imageUtils.getImageWidgetFromImageView(imgViewElement);\n      if (!viewElement) {\n        return;\n      }\n      const modelElement = editing.mapper.toModelElement(viewElement);\n      if (!modelElement || !modelElement.hasAttribute(\"placeholder\")) {\n        return;\n      }\n      model.enqueueChange({ isUndoable: false }, (writer) => {\n        writer.removeAttribute(\"placeholder\", modelElement);\n      });\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imageblockediting.js\nvar ImageBlockEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageBlockEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    schema.register(\"imageBlock\", {\n      inheritAllFrom: \"$blockObject\",\n      allowAttributes: [\"alt\", \"src\", \"srcset\"]\n    });\n    this._setupConversion();\n    if (editor.plugins.has(\"ImageInlineEditing\")) {\n      editor.commands.add(\"imageTypeBlock\", new ImageTypeCommand(this.editor, \"imageBlock\"));\n      this._setupClipboardIntegration();\n    }\n  }\n  /**\n   * Configures conversion pipelines to support upcasting and downcasting\n   * block images (block image widgets) and their attributes.\n   */\n  _setupConversion() {\n    const editor = this.editor;\n    const t = editor.t;\n    const conversion = editor.conversion;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    conversion.for(\"dataDowncast\").elementToStructure({\n      model: \"imageBlock\",\n      view: (modelElement, { writer }) => createBlockImageViewElement(writer)\n    });\n    conversion.for(\"editingDowncast\").elementToStructure({\n      model: \"imageBlock\",\n      view: (modelElement, { writer }) => imageUtils.toImageWidget(createBlockImageViewElement(writer), writer, t(\"image widget\"))\n    });\n    conversion.for(\"downcast\").add(downcastImageAttribute(imageUtils, \"imageBlock\", \"src\")).add(downcastImageAttribute(imageUtils, \"imageBlock\", \"alt\")).add(downcastSrcsetAttribute(imageUtils, \"imageBlock\"));\n    conversion.for(\"upcast\").elementToElement({\n      view: getImgViewElementMatcher(editor, \"imageBlock\"),\n      model: (viewImage, { writer }) => writer.createElement(\"imageBlock\", viewImage.hasAttribute(\"src\") ? { src: viewImage.getAttribute(\"src\") } : void 0)\n    }).add(upcastImageFigure(imageUtils));\n  }\n  /**\n   * Integrates the plugin with the clipboard pipeline.\n   *\n   * Idea is that the feature should recognize the user's intent when an **inline** image is\n   * pasted or dropped. If such an image is pasted/dropped:\n   *\n   * * into an empty block (e.g. an empty paragraph),\n   * * on another object (e.g. some block widget).\n   *\n   * it gets converted into a block image on the fly. We assume this is the user's intent\n   * if they decided to put their image there.\n   *\n   * See the `ImageInlineEditing` for the similar integration that works in the opposite direction.\n   *\n   * The feature also sets image `width` and `height` attributes on paste.\n   */\n  _setupClipboardIntegration() {\n    const editor = this.editor;\n    const model = editor.model;\n    const editingView = editor.editing.view;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const clipboardPipeline = editor.plugins.get(\"ClipboardPipeline\");\n    this.listenTo(clipboardPipeline, \"inputTransformation\", (evt, data) => {\n      const docFragmentChildren = Array.from(data.content.getChildren());\n      let modelRange;\n      if (!docFragmentChildren.every(imageUtils.isInlineImageView)) {\n        return;\n      }\n      if (data.targetRanges) {\n        modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);\n      } else {\n        modelRange = model.document.selection.getFirstRange();\n      }\n      const selection = model.createSelection(modelRange);\n      if (determineImageTypeForInsertionAtSelection(model.schema, selection) === \"imageBlock\") {\n        const writer = new UpcastWriter(editingView.document);\n        const blockViewImages = docFragmentChildren.map((inlineViewImage) => writer.createElement(\"figure\", { class: \"image\" }, inlineViewImage));\n        data.content = writer.createDocumentFragment(blockViewImages);\n      }\n    });\n    this.listenTo(clipboardPipeline, \"contentInsertion\", (evt, data) => {\n      if (data.method !== \"paste\") {\n        return;\n      }\n      model.change((writer) => {\n        const range = writer.createRangeIn(data.content);\n        for (const item of range.getItems()) {\n          if (item.is(\"element\", \"imageBlock\")) {\n            imageUtils.setImageNaturalSizeAttributes(item);\n          }\n        }\n      });\n    });\n  }\n};\n\nexport {\n  downcastSrcsetAttribute,\n  downcastImageAttribute,\n  ImageEditing,\n  ImageSizeAttributes,\n  ImageTypeCommand,\n  ImagePlaceholder,\n  ImageBlockEditing\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/image/converters.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/insertimagecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/replaceimagesourcecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/imageediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagesizeattributes.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/imagetypecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/imageplaceholder.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/imageblockediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=chunk-MBUPU22L.js.map\n","import {\n  ImageBlockEditing,\n  ImageEditing,\n  ImagePlaceholder,\n  ImageSizeAttributes,\n  ImageTypeCommand,\n  downcastImageAttribute,\n  downcastSrcsetAttribute\n} from \"./chunk-MBUPU22L.js\";\nimport \"./chunk-5UJG77VP.js\";\nimport {\n  ImageUtils,\n  createInlineImageViewElement,\n  determineImageTypeForInsertionAtSelection,\n  getImgViewElementMatcher\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport {\n  ClipboardPipeline\n} from \"./chunk-UHWQXN2Z.js\";\nimport {\n  Widget\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  CollapsibleView,\n  ContextualBalloon,\n  CssTransitionDisablerMixin,\n  FocusCycler,\n  LabeledFieldView,\n  SplitButtonView,\n  View,\n  ViewCollection,\n  balloonpanelview_default,\n  clickOutsideHandler,\n  createDropdown,\n  createLabeledInputText,\n  submitHandler\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  FocusTracker,\n  KeystrokeHandler,\n  Plugin,\n  UpcastWriter,\n  icons,\n  logWarning\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativecommand.js\nvar ImageTextAlternativeCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n    this.isEnabled = !!element;\n    if (this.isEnabled && element.hasAttribute(\"alt\")) {\n      this.value = element.getAttribute(\"alt\");\n    } else {\n      this.value = false;\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * @fires execute\n   * @param options\n   * @param options.newValue The new value of the `alt` attribute to set.\n   */\n  execute(options) {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const model = editor.model;\n    const imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n    model.change((writer) => {\n      writer.setAttribute(\"alt\", options.newValue, imageElement);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeediting.js\nvar ImageTextAlternativeEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageTextAlternativeEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this.editor.commands.add(\"imageTextAlternative\", new ImageTextAlternativeCommand(this.editor));\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/ui/textalternativeformview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/textalternativeform.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css\";\nvar TextAlternativeFormView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    const t = this.locale.t;\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this.labeledInput = this._createLabeledInputView();\n    this.saveButtonView = this._createButton(t(\"Save\"), icons.check, \"ck-button-save\");\n    this.saveButtonView.type = \"submit\";\n    this.cancelButtonView = this._createButton(t(\"Cancel\"), icons.cancel, \"ck-button-cancel\", \"cancel\");\n    this._focusables = new ViewCollection();\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    this.setTemplate({\n      tag: \"form\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-text-alternative-form\",\n          \"ck-responsive-form\"\n        ],\n        // https://github.com/ckeditor/ckeditor5-image/issues/40\n        tabindex: \"-1\"\n      },\n      children: [\n        this.labeledInput,\n        this.saveButtonView,\n        this.cancelButtonView\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    this.keystrokes.listenTo(this.element);\n    submitHandler({ view: this });\n    [this.labeledInput, this.saveButtonView, this.cancelButtonView].forEach((v) => {\n      this._focusables.add(v);\n      this.focusTracker.add(v.element);\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Creates the button view.\n   *\n   * @param label The button label\n   * @param icon The button's icon.\n   * @param className The additional button CSS class name.\n   * @param eventName The event name that the ButtonView#execute event will be delegated to.\n   * @returns The button view instance.\n   */\n  _createButton(label, icon, className, eventName) {\n    const button = new ButtonView(this.locale);\n    button.set({\n      label,\n      icon,\n      tooltip: true\n    });\n    button.extendTemplate({\n      attributes: {\n        class: className\n      }\n    });\n    if (eventName) {\n      button.delegate(\"execute\").to(this, eventName);\n    }\n    return button;\n  }\n  /**\n   * Creates an input with a label.\n   *\n   * @returns Labeled field view instance.\n   */\n  _createLabeledInputView() {\n    const t = this.locale.t;\n    const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n    labeledInput.label = t(\"Text alternative\");\n    return labeledInput;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/ui/utils.js\nfunction repositionContextualBalloon(editor) {\n  const balloon = editor.plugins.get(\"ContextualBalloon\");\n  const imageUtils = editor.plugins.get(\"ImageUtils\");\n  if (imageUtils.getClosestSelectedImageWidget(editor.editing.view.document.selection)) {\n    const position = getBalloonPositionData(editor);\n    balloon.updatePosition(position);\n  }\n}\nfunction getBalloonPositionData(editor) {\n  const editingView = editor.editing.view;\n  const defaultPositions = balloonpanelview_default.defaultPositions;\n  const imageUtils = editor.plugins.get(\"ImageUtils\");\n  return {\n    target: editingView.domConverter.mapViewToDom(imageUtils.getClosestSelectedImageWidget(editingView.document.selection)),\n    positions: [\n      defaultPositions.northArrowSouth,\n      defaultPositions.northArrowSouthWest,\n      defaultPositions.northArrowSouthEast,\n      defaultPositions.southArrowNorth,\n      defaultPositions.southArrowNorthWest,\n      defaultPositions.southArrowNorthEast,\n      defaultPositions.viewportStickyNorth\n    ]\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeui.js\nvar ImageTextAlternativeUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ContextualBalloon];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageTextAlternativeUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    this._createButton();\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    if (this._form) {\n      this._form.destroy();\n    }\n  }\n  /**\n   * Creates a button showing the balloon panel for changing the image text alternative and\n   * registers it in the editor {@link module:ui/componentfactory~ComponentFactory ComponentFactory}.\n   */\n  _createButton() {\n    const editor = this.editor;\n    const t = editor.t;\n    editor.ui.componentFactory.add(\"imageTextAlternative\", (locale) => {\n      const command = editor.commands.get(\"imageTextAlternative\");\n      const view = new ButtonView(locale);\n      view.set({\n        label: t(\"Change image text alternative\"),\n        icon: icons.textAlternative,\n        tooltip: true\n      });\n      view.bind(\"isEnabled\").to(command, \"isEnabled\");\n      view.bind(\"isOn\").to(command, \"value\", (value) => !!value);\n      this.listenTo(view, \"execute\", () => {\n        this._showForm();\n      });\n      return view;\n    });\n  }\n  /**\n   * Creates the {@link module:image/imagetextalternative/ui/textalternativeformview~TextAlternativeFormView}\n   * form.\n   */\n  _createForm() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    this._balloon = this.editor.plugins.get(\"ContextualBalloon\");\n    this._form = new (CssTransitionDisablerMixin(TextAlternativeFormView))(editor.locale);\n    this._form.render();\n    this.listenTo(this._form, \"submit\", () => {\n      editor.execute(\"imageTextAlternative\", {\n        newValue: this._form.labeledInput.fieldView.element.value\n      });\n      this._hideForm(true);\n    });\n    this.listenTo(this._form, \"cancel\", () => {\n      this._hideForm(true);\n    });\n    this._form.keystrokes.set(\"Esc\", (data, cancel) => {\n      this._hideForm(true);\n      cancel();\n    });\n    this.listenTo(editor.ui, \"update\", () => {\n      if (!imageUtils.getClosestSelectedImageWidget(viewDocument.selection)) {\n        this._hideForm(true);\n      } else if (this._isVisible) {\n        repositionContextualBalloon(editor);\n      }\n    });\n    clickOutsideHandler({\n      emitter: this._form,\n      activator: () => this._isVisible,\n      contextElements: () => [this._balloon.view.element],\n      callback: () => this._hideForm()\n    });\n  }\n  /**\n   * Shows the {@link #_form} in the {@link #_balloon}.\n   */\n  _showForm() {\n    if (this._isVisible) {\n      return;\n    }\n    if (!this._form) {\n      this._createForm();\n    }\n    const editor = this.editor;\n    const command = editor.commands.get(\"imageTextAlternative\");\n    const labeledInput = this._form.labeledInput;\n    this._form.disableCssTransitions();\n    if (!this._isInBalloon) {\n      this._balloon.add({\n        view: this._form,\n        position: getBalloonPositionData(editor)\n      });\n    }\n    labeledInput.fieldView.value = labeledInput.fieldView.element.value = command.value || \"\";\n    this._form.labeledInput.fieldView.select();\n    this._form.enableCssTransitions();\n  }\n  /**\n   * Removes the {@link #_form} from the {@link #_balloon}.\n   *\n   * @param focusEditable Controls whether the editing view is focused afterwards.\n   */\n  _hideForm(focusEditable = false) {\n    if (!this._isInBalloon) {\n      return;\n    }\n    if (this._form.focusTracker.isFocused) {\n      this._form.saveButtonView.focus();\n    }\n    this._balloon.remove(this._form);\n    if (focusEditable) {\n      this.editor.editing.view.focus();\n    }\n  }\n  /**\n   * Returns `true` when the {@link #_form} is the visible view in the {@link #_balloon}.\n   */\n  get _isVisible() {\n    return !!this._balloon && this._balloon.visibleView === this._form;\n  }\n  /**\n   * Returns `true` when the {@link #_form} is in the {@link #_balloon}.\n   */\n  get _isInBalloon() {\n    return !!this._balloon && this._balloon.hasView(this._form);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetextalternative.js\nvar ImageTextAlternative = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageTextAlternativeEditing, ImageTextAlternativeUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageTextAlternative\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageinsert/ui/imageinsertformview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageinsert.css\";\nvar ImageInsertFormView = class extends View {\n  /**\n   * Creates a view for the dropdown panel of {@link module:image/imageinsert/imageinsertui~ImageInsertUI}.\n   *\n   * @param locale The localization services instance.\n   * @param integrations An integrations object that contains components (or tokens for components) to be shown in the panel view.\n   */\n  constructor(locale, integrations = []) {\n    super(locale);\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusables = new ViewCollection();\n    this.children = this.createCollection();\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    for (const view of integrations) {\n      this.children.add(view);\n      this._focusables.add(view);\n      if (view instanceof CollapsibleView) {\n        this._focusables.addMany(view.children);\n      }\n    }\n    if (this._focusables.length > 1) {\n      for (const view of this._focusables) {\n        if (isViewWithFocusCycler(view)) {\n          view.focusCycler.on(\"forwardCycle\", (evt) => {\n            this._focusCycler.focusNext();\n            evt.stop();\n          });\n          view.focusCycler.on(\"backwardCycle\", (evt) => {\n            this._focusCycler.focusPrevious();\n            evt.stop();\n          });\n        }\n      }\n    }\n    this.setTemplate({\n      tag: \"form\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-image-insert-form\"\n        ],\n        tabindex: -1\n      },\n      children: this.children\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    submitHandler({\n      view: this\n    });\n    for (const view of this._focusables) {\n      this.focusTracker.add(view.element);\n    }\n    this.keystrokes.listenTo(this.element);\n    const stopPropagation = (data) => data.stopPropagation();\n    this.keystrokes.set(\"arrowright\", stopPropagation);\n    this.keystrokes.set(\"arrowleft\", stopPropagation);\n    this.keystrokes.set(\"arrowup\", stopPropagation);\n    this.keystrokes.set(\"arrowdown\", stopPropagation);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the first {@link #_focusables focusable} in the form.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n};\nfunction isViewWithFocusCycler(view) {\n  return \"focusCycler\" in view;\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageinsert/imageinsertui.js\nvar ImageInsertUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageInsertUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._integrations = /* @__PURE__ */ new Map();\n    editor.config.define(\"image.insert.integrations\", [\n      \"upload\",\n      \"assetManager\",\n      \"url\"\n    ]);\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const selection = editor.model.document.selection;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    this.set(\"isImageSelected\", false);\n    this.listenTo(editor.model.document, \"change\", () => {\n      this.isImageSelected = imageUtils.isImage(selection.getSelectedElement());\n    });\n    const componentCreator = (locale) => this._createToolbarComponent(locale);\n    editor.ui.componentFactory.add(\"insertImage\", componentCreator);\n    editor.ui.componentFactory.add(\"imageInsert\", componentCreator);\n  }\n  /**\n   * Registers the insert image dropdown integration.\n   */\n  registerIntegration({ name, observable, buttonViewCreator, formViewCreator, requiresForm }) {\n    if (this._integrations.has(name)) {\n      logWarning(\"image-insert-integration-exists\", { name });\n    }\n    this._integrations.set(name, {\n      observable,\n      buttonViewCreator,\n      formViewCreator,\n      requiresForm: !!requiresForm\n    });\n  }\n  /**\n   * Creates the toolbar component.\n   */\n  _createToolbarComponent(locale) {\n    const editor = this.editor;\n    const t = locale.t;\n    const integrations = this._prepareIntegrations();\n    if (!integrations.length) {\n      return null;\n    }\n    let dropdownButton;\n    const firstIntegration = integrations[0];\n    if (integrations.length == 1) {\n      if (!firstIntegration.requiresForm) {\n        return firstIntegration.buttonViewCreator(true);\n      }\n      dropdownButton = firstIntegration.buttonViewCreator(true);\n    } else {\n      const actionButton = firstIntegration.buttonViewCreator(false);\n      dropdownButton = new SplitButtonView(locale, actionButton);\n      dropdownButton.tooltip = true;\n      dropdownButton.bind(\"label\").to(this, \"isImageSelected\", (isImageSelected) => isImageSelected ? t(\"Replace image\") : t(\"Insert image\"));\n    }\n    const dropdownView = this.dropdownView = createDropdown(locale, dropdownButton);\n    const observables = integrations.map(({ observable }) => observable);\n    dropdownView.bind(\"isEnabled\").toMany(observables, \"isEnabled\", (...isEnabled) => isEnabled.some((isEnabled2) => isEnabled2));\n    dropdownView.once(\"change:isOpen\", () => {\n      const integrationViews = integrations.map(({ formViewCreator }) => formViewCreator(integrations.length == 1));\n      const imageInsertFormView = new ImageInsertFormView(editor.locale, integrationViews);\n      dropdownView.panelView.children.add(imageInsertFormView);\n    });\n    return dropdownView;\n  }\n  /**\n   * Validates the integrations list.\n   */\n  _prepareIntegrations() {\n    const editor = this.editor;\n    const items = editor.config.get(\"image.insert.integrations\");\n    const result = [];\n    if (!items.length) {\n      logWarning(\"image-insert-integrations-not-specified\");\n      return result;\n    }\n    for (const item of items) {\n      if (!this._integrations.has(item)) {\n        if (![\"upload\", \"assetManager\", \"url\"].includes(item)) {\n          logWarning(\"image-insert-unknown-integration\", { item });\n        }\n        continue;\n      }\n      result.push(this._integrations.get(item));\n    }\n    if (!result.length) {\n      logWarning(\"image-insert-integrations-not-registered\");\n    }\n    return result;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageblock.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/image.css\";\nvar ImageBlock = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageBlockEditing, Widget, ImageTextAlternative, ImageInsertUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageBlock\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image/imageinlineediting.js\nvar ImageInlineEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageEditing, ImageSizeAttributes, ImageUtils, ImagePlaceholder, ClipboardPipeline];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageInlineEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    schema.register(\"imageInline\", {\n      inheritAllFrom: \"$inlineObject\",\n      allowAttributes: [\"alt\", \"src\", \"srcset\"]\n    });\n    schema.addChildCheck((context, childDefinition) => {\n      if (context.endsWith(\"caption\") && childDefinition.name === \"imageInline\") {\n        return false;\n      }\n    });\n    this._setupConversion();\n    if (editor.plugins.has(\"ImageBlockEditing\")) {\n      editor.commands.add(\"imageTypeInline\", new ImageTypeCommand(this.editor, \"imageInline\"));\n      this._setupClipboardIntegration();\n    }\n  }\n  /**\n   * Configures conversion pipelines to support upcasting and downcasting\n   * inline images (inline image widgets) and their attributes.\n   */\n  _setupConversion() {\n    const editor = this.editor;\n    const t = editor.t;\n    const conversion = editor.conversion;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    conversion.for(\"dataDowncast\").elementToElement({\n      model: \"imageInline\",\n      view: (modelElement, { writer }) => writer.createEmptyElement(\"img\")\n    });\n    conversion.for(\"editingDowncast\").elementToStructure({\n      model: \"imageInline\",\n      view: (modelElement, { writer }) => imageUtils.toImageWidget(createInlineImageViewElement(writer), writer, t(\"image widget\"))\n    });\n    conversion.for(\"downcast\").add(downcastImageAttribute(imageUtils, \"imageInline\", \"src\")).add(downcastImageAttribute(imageUtils, \"imageInline\", \"alt\")).add(downcastSrcsetAttribute(imageUtils, \"imageInline\"));\n    conversion.for(\"upcast\").elementToElement({\n      view: getImgViewElementMatcher(editor, \"imageInline\"),\n      model: (viewImage, { writer }) => writer.createElement(\"imageInline\", viewImage.hasAttribute(\"src\") ? { src: viewImage.getAttribute(\"src\") } : void 0)\n    });\n  }\n  /**\n   * Integrates the plugin with the clipboard pipeline.\n   *\n   * Idea is that the feature should recognize the user's intent when an **block** image is\n   * pasted or dropped. If such an image is pasted/dropped into a non-empty block\n   * (e.g. a paragraph with some text) it gets converted into an inline image on the fly.\n   *\n   * We assume this is the user's intent if they decided to put their image there.\n   *\n   * **Note**: If a block image has a caption, it will not be converted to an inline image\n   * to avoid the confusion. Captions are added on purpose and they should never be lost\n   * in the clipboard pipeline.\n   *\n   * See the `ImageBlockEditing` for the similar integration that works in the opposite direction.\n   *\n   * The feature also sets image `width` and `height` attributes when pasting.\n   */\n  _setupClipboardIntegration() {\n    const editor = this.editor;\n    const model = editor.model;\n    const editingView = editor.editing.view;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const clipboardPipeline = editor.plugins.get(\"ClipboardPipeline\");\n    this.listenTo(clipboardPipeline, \"inputTransformation\", (evt, data) => {\n      const docFragmentChildren = Array.from(data.content.getChildren());\n      let modelRange;\n      if (!docFragmentChildren.every(imageUtils.isBlockImageView)) {\n        return;\n      }\n      if (data.targetRanges) {\n        modelRange = editor.editing.mapper.toModelRange(data.targetRanges[0]);\n      } else {\n        modelRange = model.document.selection.getFirstRange();\n      }\n      const selection = model.createSelection(modelRange);\n      if (determineImageTypeForInsertionAtSelection(model.schema, selection) === \"imageInline\") {\n        const writer = new UpcastWriter(editingView.document);\n        const inlineViewImages = docFragmentChildren.map((blockViewImage) => {\n          if (blockViewImage.childCount === 1) {\n            Array.from(blockViewImage.getAttributes()).forEach((attribute) => writer.setAttribute(...attribute, imageUtils.findViewImgElement(blockViewImage)));\n            return blockViewImage.getChild(0);\n          } else {\n            return blockViewImage;\n          }\n        });\n        data.content = writer.createDocumentFragment(inlineViewImages);\n      }\n    });\n    this.listenTo(clipboardPipeline, \"contentInsertion\", (evt, data) => {\n      if (data.method !== \"paste\") {\n        return;\n      }\n      model.change((writer) => {\n        const range = writer.createRangeIn(data.content);\n        for (const item of range.getItems()) {\n          if (item.is(\"element\", \"imageInline\")) {\n            imageUtils.setImageNaturalSizeAttributes(item);\n          }\n        }\n      });\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageinline.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/image.css\";\nvar ImageInline = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageInlineEditing, Widget, ImageTextAlternative, ImageInsertUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageInline\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/image.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/image.css\";\nvar Image = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageBlock, ImageInline];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Image\";\n  }\n};\nexport {\n  Image as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagetextalternative/ui/textalternativeformview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/ui/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagetextalternative/imagetextalternativeui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagetextalternative.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageinsert/ui/imageinsertformview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageinsert/imageinsertui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageblock.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image/imageinlineediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageinline.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/image.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_image.js.map\n","import {\n  ImageBlockEditing\n} from \"./chunk-MBUPU22L.js\";\nimport \"./chunk-5UJG77VP.js\";\nimport {\n  ImageUtils\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport \"./chunk-UHWQXN2Z.js\";\nimport {\n  toWidgetEditable\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  Element,\n  Plugin,\n  enablePlaceholder,\n  icons\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagecaption/toggleimagecaptioncommand.js\nvar ToggleImageCaptionCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    if (!editor.plugins.has(ImageBlockEditing)) {\n      this.isEnabled = false;\n      this.value = false;\n      return;\n    }\n    const selection = editor.model.document.selection;\n    const selectedElement = selection.getSelectedElement();\n    if (!selectedElement) {\n      const ancestorCaptionElement = imageCaptionUtils.getCaptionFromModelSelection(selection);\n      this.isEnabled = !!ancestorCaptionElement;\n      this.value = !!ancestorCaptionElement;\n      return;\n    }\n    this.isEnabled = imageUtils.isImage(selectedElement);\n    if (!this.isEnabled) {\n      this.value = false;\n    } else {\n      this.value = !!imageCaptionUtils.getCaptionFromImageModelElement(selectedElement);\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * ```ts\n   * editor.execute( 'toggleImageCaption' );\n   * ```\n   *\n   * @param options Options for the executed command.\n   * @param options.focusCaptionOnShow When true and the caption shows up, the selection will be moved into it straight away.\n   * @fires execute\n   */\n  execute(options = {}) {\n    const { focusCaptionOnShow } = options;\n    this.editor.model.change((writer) => {\n      if (this.value) {\n        this._hideImageCaption(writer);\n      } else {\n        this._showImageCaption(writer, focusCaptionOnShow);\n      }\n    });\n  }\n  /**\n   * Shows the caption of the `<imageBlock>` or `<imageInline>`. Also:\n   *\n   * * it converts `<imageInline>` to `<imageBlock>` to show the caption,\n   * * it attempts to restore the caption content from the `ImageCaptionEditing` caption registry,\n   * * it moves the selection to the caption right away, it the `focusCaptionOnShow` option was set.\n   */\n  _showImageCaption(writer, focusCaptionOnShow) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const imageCaptionEditing = this.editor.plugins.get(\"ImageCaptionEditing\");\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    let selectedImage = selection.getSelectedElement();\n    const savedCaption = imageCaptionEditing._getSavedCaption(selectedImage);\n    if (imageUtils.isInlineImage(selectedImage)) {\n      this.editor.execute(\"imageTypeBlock\");\n      selectedImage = selection.getSelectedElement();\n    }\n    const newCaptionElement = savedCaption || writer.createElement(\"caption\");\n    writer.append(newCaptionElement, selectedImage);\n    if (focusCaptionOnShow) {\n      writer.setSelection(newCaptionElement, \"in\");\n    }\n  }\n  /**\n   * Hides the caption of a selected image (or an image caption the selection is anchored to).\n   *\n   * The content of the caption is stored in the `ImageCaptionEditing` caption registry to make this\n   * a reversible action.\n   */\n  _hideImageCaption(writer) {\n    const editor = this.editor;\n    const selection = editor.model.document.selection;\n    const imageCaptionEditing = editor.plugins.get(\"ImageCaptionEditing\");\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    let selectedImage = selection.getSelectedElement();\n    let captionElement;\n    if (selectedImage) {\n      captionElement = imageCaptionUtils.getCaptionFromImageModelElement(selectedImage);\n    } else {\n      captionElement = imageCaptionUtils.getCaptionFromModelSelection(selection);\n      selectedImage = captionElement.parent;\n    }\n    imageCaptionEditing._saveCaption(selectedImage, captionElement);\n    writer.setSelection(selectedImage, \"on\");\n    writer.remove(captionElement);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionutils.js\nvar ImageCaptionUtils = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageCaptionUtils\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * Returns the caption model element from a given image element. Returns `null` if no caption is found.\n   */\n  getCaptionFromImageModelElement(imageModelElement) {\n    for (const node of imageModelElement.getChildren()) {\n      if (!!node && node.is(\"element\", \"caption\")) {\n        return node;\n      }\n    }\n    return null;\n  }\n  /**\n   * Returns the caption model element for a model selection. Returns `null` if the selection has no caption element ancestor.\n   */\n  getCaptionFromModelSelection(selection) {\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    const captionElement = selection.getFirstPosition().findAncestor(\"caption\");\n    if (!captionElement) {\n      return null;\n    }\n    if (imageUtils.isBlockImage(captionElement.parent)) {\n      return captionElement;\n    }\n    return null;\n  }\n  /**\n   * {@link module:engine/view/matcher~Matcher} pattern. Checks if a given element is a `<figcaption>` element that is placed\n   * inside the image `<figure>` element.\n   * @returns Returns the object accepted by {@link module:engine/view/matcher~Matcher} or `null` if the element\n   * cannot be matched.\n   */\n  matchImageCaptionViewElement(element) {\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    if (element.name == \"figcaption\" && imageUtils.isBlockImageView(element.parent)) {\n      return { name: true };\n    }\n    return null;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionediting.js\nvar ImageCaptionEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils, ImageCaptionUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageCaptionEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._savedCaptionsMap = /* @__PURE__ */ new WeakMap();\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    if (!schema.isRegistered(\"caption\")) {\n      schema.register(\"caption\", {\n        allowIn: \"imageBlock\",\n        allowContentOf: \"$block\",\n        isLimit: true\n      });\n    } else {\n      schema.extend(\"caption\", {\n        allowIn: \"imageBlock\"\n      });\n    }\n    editor.commands.add(\"toggleImageCaption\", new ToggleImageCaptionCommand(this.editor));\n    this._setupConversion();\n    this._setupImageTypeCommandsIntegration();\n    this._registerCaptionReconversion();\n  }\n  /**\n   * Configures conversion pipelines to support upcasting and downcasting\n   * image captions.\n   */\n  _setupConversion() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    const t = editor.t;\n    editor.conversion.for(\"upcast\").elementToElement({\n      view: (element) => imageCaptionUtils.matchImageCaptionViewElement(element),\n      model: \"caption\"\n    });\n    editor.conversion.for(\"dataDowncast\").elementToElement({\n      model: \"caption\",\n      view: (modelElement, { writer }) => {\n        if (!imageUtils.isBlockImage(modelElement.parent)) {\n          return null;\n        }\n        return writer.createContainerElement(\"figcaption\");\n      }\n    });\n    editor.conversion.for(\"editingDowncast\").elementToElement({\n      model: \"caption\",\n      view: (modelElement, { writer }) => {\n        if (!imageUtils.isBlockImage(modelElement.parent)) {\n          return null;\n        }\n        const figcaptionElement = writer.createEditableElement(\"figcaption\");\n        writer.setCustomProperty(\"imageCaption\", true, figcaptionElement);\n        figcaptionElement.placeholder = t(\"Enter image caption\");\n        enablePlaceholder({\n          view,\n          element: figcaptionElement,\n          keepOnFocus: true\n        });\n        const imageAlt = modelElement.parent.getAttribute(\"alt\");\n        const label = imageAlt ? t(\"Caption for image: %0\", [imageAlt]) : t(\"Caption for the image\");\n        return toWidgetEditable(figcaptionElement, writer, { label });\n      }\n    });\n  }\n  /**\n   * Integrates with {@link module:image/image/imagetypecommand~ImageTypeCommand image type commands}\n   * to make sure the caption is preserved when the type of an image changes so it can be restored\n   * in the future if the user decides they want their caption back.\n   */\n  _setupImageTypeCommandsIntegration() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    const imageTypeInlineCommand = editor.commands.get(\"imageTypeInline\");\n    const imageTypeBlockCommand = editor.commands.get(\"imageTypeBlock\");\n    const handleImageTypeChange = (evt) => {\n      if (!evt.return) {\n        return;\n      }\n      const { oldElement, newElement } = evt.return;\n      if (!oldElement) {\n        return;\n      }\n      if (imageUtils.isBlockImage(oldElement)) {\n        const oldCaptionElement = imageCaptionUtils.getCaptionFromImageModelElement(oldElement);\n        if (oldCaptionElement) {\n          this._saveCaption(newElement, oldCaptionElement);\n          return;\n        }\n      }\n      const savedOldElementCaption = this._getSavedCaption(oldElement);\n      if (savedOldElementCaption) {\n        this._saveCaption(newElement, savedOldElementCaption);\n      }\n    };\n    if (imageTypeInlineCommand) {\n      this.listenTo(imageTypeInlineCommand, \"execute\", handleImageTypeChange, { priority: \"low\" });\n    }\n    if (imageTypeBlockCommand) {\n      this.listenTo(imageTypeBlockCommand, \"execute\", handleImageTypeChange, { priority: \"low\" });\n    }\n  }\n  /**\n   * Returns the saved {@link module:engine/model/element~Element#toJSON JSONified} caption\n   * of an image model element.\n   *\n   * See {@link #_saveCaption}.\n   *\n   * @internal\n   * @param imageModelElement The model element the caption should be returned for.\n   * @returns The model caption element or `null` if there is none.\n   */\n  _getSavedCaption(imageModelElement) {\n    const jsonObject = this._savedCaptionsMap.get(imageModelElement);\n    return jsonObject ? Element.fromJSON(jsonObject) : null;\n  }\n  /**\n   * Saves a {@link module:engine/model/element~Element#toJSON JSONified} caption for\n   * an image element to allow restoring it in the future.\n   *\n   * A caption is saved every time it gets hidden and/or the type of an image changes. The\n   * user should be able to restore it on demand.\n   *\n   * **Note**: The caption cannot be stored in the image model element attribute because,\n   * for instance, when the model state propagates to collaborators, the attribute would get\n   * lost (mainly because it does not convert to anything when the caption is hidden) and\n   * the states of collaborators' models would de-synchronize causing numerous issues.\n   *\n   * See {@link #_getSavedCaption}.\n   *\n   * @internal\n   * @param imageModelElement The model element the caption is saved for.\n   * @param caption The caption model element to be saved.\n   */\n  _saveCaption(imageModelElement, caption) {\n    this._savedCaptionsMap.set(imageModelElement, caption.toJSON());\n  }\n  /**\n   * Reconverts image caption when image alt attribute changes.\n   * The change of alt attribute is reflected in caption's aria-label attribute.\n   */\n  _registerCaptionReconversion() {\n    const editor = this.editor;\n    const model = editor.model;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    model.document.on(\"change:data\", () => {\n      const changes = model.document.differ.getChanges();\n      for (const change of changes) {\n        if (change.attributeKey !== \"alt\") {\n          continue;\n        }\n        const image = change.range.start.nodeAfter;\n        if (imageUtils.isBlockImage(image)) {\n          const caption = imageCaptionUtils.getCaptionFromImageModelElement(image);\n          if (!caption) {\n            return;\n          }\n          editor.editing.reconvertItem(caption);\n        }\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionui.js\nvar ImageCaptionUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageCaptionUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageCaptionUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    const imageCaptionUtils = editor.plugins.get(\"ImageCaptionUtils\");\n    const t = editor.t;\n    editor.ui.componentFactory.add(\"toggleImageCaption\", (locale) => {\n      const command = editor.commands.get(\"toggleImageCaption\");\n      const view = new ButtonView(locale);\n      view.set({\n        icon: icons.caption,\n        tooltip: true,\n        isToggleable: true\n      });\n      view.bind(\"isOn\", \"isEnabled\").to(command, \"value\", \"isEnabled\");\n      view.bind(\"label\").to(command, \"value\", (value) => value ? t(\"Toggle caption off\") : t(\"Toggle caption on\"));\n      this.listenTo(view, \"execute\", () => {\n        editor.execute(\"toggleImageCaption\", { focusCaptionOnShow: true });\n        const modelCaptionElement = imageCaptionUtils.getCaptionFromModelSelection(editor.model.document.selection);\n        if (modelCaptionElement) {\n          const figcaptionElement = editor.editing.mapper.toViewElement(modelCaptionElement);\n          editingView.scrollToTheSelection();\n          editingView.change((writer) => {\n            writer.addClass(\"image__caption_highlighted\", figcaptionElement);\n          });\n        }\n        editor.editing.view.focus();\n      });\n      return view;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagecaption.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imagecaption.css\";\nvar ImageCaption = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageCaptionEditing, ImageCaptionUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageCaption\";\n  }\n};\nexport {\n  ImageCaption as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imagecaption/toggleimagecaptioncommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionutils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore if: paranoid check -- @preserve *)\n\n@ckeditor/ckeditor5-image/src/imagecaption/imagecaptionui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagecaption.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_imagecaption.js.map\n","import {\n  ImageUtils\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  SplitButtonView,\n  addToolbarToDropdown,\n  createDropdown\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  Plugin,\n  first,\n  icons,\n  identity_default,\n  isObject_default,\n  logWarning\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestylecommand.js\nvar ImageStyleCommand = class extends Command {\n  /**\n   * Creates an instance of the image style command. When executed, the command applies one of\n   * {@link module:image/imageconfig~ImageStyleConfig#options style options} to the currently selected image.\n   *\n   * @param editor The editor instance.\n   * @param styles The style options that this command supports.\n   */\n  constructor(editor, styles) {\n    super(editor);\n    this._defaultStyles = {\n      imageBlock: false,\n      imageInline: false\n    };\n    this._styles = new Map(styles.map((style) => {\n      if (style.isDefault) {\n        for (const modelElementName of style.modelElements) {\n          this._defaultStyles[modelElementName] = style.name;\n        }\n      }\n      return [style.name, style];\n    }));\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const element = imageUtils.getClosestSelectedImageElement(this.editor.model.document.selection);\n    this.isEnabled = !!element;\n    if (!this.isEnabled) {\n      this.value = false;\n    } else if (element.hasAttribute(\"imageStyle\")) {\n      this.value = element.getAttribute(\"imageStyle\");\n    } else {\n      this.value = this._defaultStyles[element.name];\n    }\n  }\n  /**\n   * Executes the command and applies the style to the currently selected image:\n   *\n   * ```ts\n   * editor.execute( 'imageStyle', { value: 'side' } );\n   * ```\n   *\n   * **Note**: Executing this command may change the image model element if the desired style requires an image\n   * of a different type. Learn more about {@link module:image/imageconfig~ImageStyleOptionDefinition#modelElements model element}\n   * configuration for the style option.\n   *\n   * @param options.value The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).\n   * @param options.setImageSizes Specifies whether the image `width` and `height` attributes should be set automatically.\n   * The default is `true`.\n   * @fires execute\n   */\n  execute(options = {}) {\n    const editor = this.editor;\n    const model = editor.model;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    model.change((writer) => {\n      const requestedStyle = options.value;\n      const { setImageSizes = true } = options;\n      let imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n      if (requestedStyle && this.shouldConvertImageType(requestedStyle, imageElement)) {\n        this.editor.execute(imageUtils.isBlockImage(imageElement) ? \"imageTypeInline\" : \"imageTypeBlock\", { setImageSizes });\n        imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n      }\n      if (!requestedStyle || this._styles.get(requestedStyle).isDefault) {\n        writer.removeAttribute(\"imageStyle\", imageElement);\n      } else {\n        writer.setAttribute(\"imageStyle\", requestedStyle, imageElement);\n      }\n      if (setImageSizes) {\n        imageUtils.setImageNaturalSizeAttributes(imageElement);\n      }\n    });\n  }\n  /**\n   * Returns `true` if requested style change would trigger the image type change.\n   *\n   * @param requestedStyle The name of the style (as configured in {@link module:image/imageconfig~ImageStyleConfig#options}).\n   * @param imageElement The image model element.\n   */\n  shouldConvertImageType(requestedStyle, imageElement) {\n    const supportedTypes = this._styles.get(requestedStyle).modelElements;\n    return !supportedTypes.includes(imageElement.name);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle/utils.js\nvar { objectFullWidth, objectInline, objectLeft, objectRight, objectCenter, objectBlockLeft, objectBlockRight } = icons;\nvar DEFAULT_OPTIONS = {\n  // This style represents an image placed in the line of text.\n  get inline() {\n    return {\n      name: \"inline\",\n      title: \"In line\",\n      icon: objectInline,\n      modelElements: [\"imageInline\"],\n      isDefault: true\n    };\n  },\n  // This style represents an image aligned to the left and wrapped with text.\n  get alignLeft() {\n    return {\n      name: \"alignLeft\",\n      title: \"Left aligned image\",\n      icon: objectLeft,\n      modelElements: [\"imageBlock\", \"imageInline\"],\n      className: \"image-style-align-left\"\n    };\n  },\n  // This style represents an image aligned to the left.\n  get alignBlockLeft() {\n    return {\n      name: \"alignBlockLeft\",\n      title: \"Left aligned image\",\n      icon: objectBlockLeft,\n      modelElements: [\"imageBlock\"],\n      className: \"image-style-block-align-left\"\n    };\n  },\n  // This style represents a centered image.\n  get alignCenter() {\n    return {\n      name: \"alignCenter\",\n      title: \"Centered image\",\n      icon: objectCenter,\n      modelElements: [\"imageBlock\"],\n      className: \"image-style-align-center\"\n    };\n  },\n  // This style represents an image aligned to the right and wrapped with text.\n  get alignRight() {\n    return {\n      name: \"alignRight\",\n      title: \"Right aligned image\",\n      icon: objectRight,\n      modelElements: [\"imageBlock\", \"imageInline\"],\n      className: \"image-style-align-right\"\n    };\n  },\n  // This style represents an image aligned to the right.\n  get alignBlockRight() {\n    return {\n      name: \"alignBlockRight\",\n      title: \"Right aligned image\",\n      icon: objectBlockRight,\n      modelElements: [\"imageBlock\"],\n      className: \"image-style-block-align-right\"\n    };\n  },\n  // This option is equal to the situation when no style is applied.\n  get block() {\n    return {\n      name: \"block\",\n      title: \"Centered image\",\n      icon: objectCenter,\n      modelElements: [\"imageBlock\"],\n      isDefault: true\n    };\n  },\n  // This represents a side image.\n  get side() {\n    return {\n      name: \"side\",\n      title: \"Side image\",\n      icon: objectRight,\n      modelElements: [\"imageBlock\"],\n      className: \"image-style-side\"\n    };\n  }\n};\nvar DEFAULT_ICONS = {\n  full: objectFullWidth,\n  left: objectBlockLeft,\n  right: objectBlockRight,\n  center: objectCenter,\n  inlineLeft: objectLeft,\n  inlineRight: objectRight,\n  inline: objectInline\n};\nvar DEFAULT_DROPDOWN_DEFINITIONS = [{\n  name: \"imageStyle:wrapText\",\n  title: \"Wrap text\",\n  defaultItem: \"imageStyle:alignLeft\",\n  items: [\"imageStyle:alignLeft\", \"imageStyle:alignRight\"]\n}, {\n  name: \"imageStyle:breakText\",\n  title: \"Break text\",\n  defaultItem: \"imageStyle:block\",\n  items: [\"imageStyle:alignBlockLeft\", \"imageStyle:block\", \"imageStyle:alignBlockRight\"]\n}];\nfunction normalizeStyles(config) {\n  const configuredStyles = config.configuredStyles.options || [];\n  const styles = configuredStyles.map((arrangement) => normalizeDefinition(arrangement)).filter((arrangement) => isValidOption(arrangement, config));\n  return styles;\n}\nfunction getDefaultStylesConfiguration(isBlockPluginLoaded, isInlinePluginLoaded) {\n  if (isBlockPluginLoaded && isInlinePluginLoaded) {\n    return {\n      options: [\n        \"inline\",\n        \"alignLeft\",\n        \"alignRight\",\n        \"alignCenter\",\n        \"alignBlockLeft\",\n        \"alignBlockRight\",\n        \"block\",\n        \"side\"\n      ]\n    };\n  } else if (isBlockPluginLoaded) {\n    return {\n      options: [\"block\", \"side\"]\n    };\n  } else if (isInlinePluginLoaded) {\n    return {\n      options: [\"inline\", \"alignLeft\", \"alignRight\"]\n    };\n  }\n  return {};\n}\nfunction getDefaultDropdownDefinitions(pluginCollection) {\n  if (pluginCollection.has(\"ImageBlockEditing\") && pluginCollection.has(\"ImageInlineEditing\")) {\n    return [...DEFAULT_DROPDOWN_DEFINITIONS];\n  } else {\n    return [];\n  }\n}\nfunction normalizeDefinition(definition) {\n  if (typeof definition === \"string\") {\n    if (!DEFAULT_OPTIONS[definition]) {\n      definition = { name: definition };\n    } else {\n      definition = { ...DEFAULT_OPTIONS[definition] };\n    }\n  } else {\n    definition = extendStyle(DEFAULT_OPTIONS[definition.name], definition);\n  }\n  if (typeof definition.icon === \"string\") {\n    definition.icon = DEFAULT_ICONS[definition.icon] || definition.icon;\n  }\n  return definition;\n}\nfunction isValidOption(option, { isBlockPluginLoaded, isInlinePluginLoaded }) {\n  const { modelElements, name } = option;\n  if (!modelElements || !modelElements.length || !name) {\n    warnInvalidStyle({ style: option });\n    return false;\n  } else {\n    const supportedElements = [isBlockPluginLoaded ? \"imageBlock\" : null, isInlinePluginLoaded ? \"imageInline\" : null];\n    if (!modelElements.some((elementName) => supportedElements.includes(elementName))) {\n      logWarning(\"image-style-missing-dependency\", {\n        style: option,\n        missingPlugins: modelElements.map((name2) => name2 === \"imageBlock\" ? \"ImageBlockEditing\" : \"ImageInlineEditing\")\n      });\n      return false;\n    }\n  }\n  return true;\n}\nfunction extendStyle(source, style) {\n  const extendedStyle = { ...style };\n  for (const prop in source) {\n    if (!Object.prototype.hasOwnProperty.call(style, prop)) {\n      extendedStyle[prop] = source[prop];\n    }\n  }\n  return extendedStyle;\n}\nfunction warnInvalidStyle(info) {\n  logWarning(\"image-style-configuration-definition-invalid\", info);\n}\nvar utils_default = {\n  normalizeStyles,\n  getDefaultStylesConfiguration,\n  getDefaultDropdownDefinitions,\n  warnInvalidStyle,\n  DEFAULT_OPTIONS,\n  DEFAULT_ICONS,\n  DEFAULT_DROPDOWN_DEFINITIONS\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle/converters.js\nfunction modelToViewStyleAttribute(styles) {\n  return (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const newStyle = getStyleDefinitionByName(data.attributeNewValue, styles);\n    const oldStyle = getStyleDefinitionByName(data.attributeOldValue, styles);\n    const viewElement = conversionApi.mapper.toViewElement(data.item);\n    const viewWriter = conversionApi.writer;\n    if (oldStyle) {\n      viewWriter.removeClass(oldStyle.className, viewElement);\n    }\n    if (newStyle) {\n      viewWriter.addClass(newStyle.className, viewElement);\n    }\n  };\n}\nfunction viewToModelStyleAttribute(styles) {\n  const nonDefaultStyles = {\n    imageInline: styles.filter((style) => !style.isDefault && style.modelElements.includes(\"imageInline\")),\n    imageBlock: styles.filter((style) => !style.isDefault && style.modelElements.includes(\"imageBlock\"))\n  };\n  return (evt, data, conversionApi) => {\n    if (!data.modelRange) {\n      return;\n    }\n    const viewElement = data.viewItem;\n    const modelImageElement = first(data.modelRange.getItems());\n    if (!modelImageElement) {\n      return;\n    }\n    if (!conversionApi.schema.checkAttribute(modelImageElement, \"imageStyle\")) {\n      return;\n    }\n    for (const style of nonDefaultStyles[modelImageElement.name]) {\n      if (conversionApi.consumable.consume(viewElement, { classes: style.className })) {\n        conversionApi.writer.setAttribute(\"imageStyle\", style.name, modelImageElement);\n      }\n    }\n  };\n}\nfunction getStyleDefinitionByName(name, styles) {\n  for (const style of styles) {\n    if (style.name === name) {\n      return style;\n    }\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestyleediting.js\nvar ImageStyleEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageStyleEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const { normalizeStyles: normalizeStyles2, getDefaultStylesConfiguration: getDefaultStylesConfiguration2 } = utils_default;\n    const editor = this.editor;\n    const isBlockPluginLoaded = editor.plugins.has(\"ImageBlockEditing\");\n    const isInlinePluginLoaded = editor.plugins.has(\"ImageInlineEditing\");\n    editor.config.define(\"image.styles\", getDefaultStylesConfiguration2(isBlockPluginLoaded, isInlinePluginLoaded));\n    this.normalizedStyles = normalizeStyles2({\n      configuredStyles: editor.config.get(\"image.styles\"),\n      isBlockPluginLoaded,\n      isInlinePluginLoaded\n    });\n    this._setupConversion(isBlockPluginLoaded, isInlinePluginLoaded);\n    this._setupPostFixer();\n    editor.commands.add(\"imageStyle\", new ImageStyleCommand(editor, this.normalizedStyles));\n  }\n  /**\n   * Sets the editor conversion taking the presence of\n   * {@link module:image/image/imageinlineediting~ImageInlineEditing `ImageInlineEditing`}\n   * and {@link module:image/image/imageblockediting~ImageBlockEditing `ImageBlockEditing`} plugins into consideration.\n   */\n  _setupConversion(isBlockPluginLoaded, isInlinePluginLoaded) {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    const modelToViewConverter = modelToViewStyleAttribute(this.normalizedStyles);\n    const viewToModelConverter = viewToModelStyleAttribute(this.normalizedStyles);\n    editor.editing.downcastDispatcher.on(\"attribute:imageStyle\", modelToViewConverter);\n    editor.data.downcastDispatcher.on(\"attribute:imageStyle\", modelToViewConverter);\n    if (isBlockPluginLoaded) {\n      schema.extend(\"imageBlock\", { allowAttributes: \"imageStyle\" });\n      editor.data.upcastDispatcher.on(\"element:figure\", viewToModelConverter, { priority: \"low\" });\n    }\n    if (isInlinePluginLoaded) {\n      schema.extend(\"imageInline\", { allowAttributes: \"imageStyle\" });\n      editor.data.upcastDispatcher.on(\"element:img\", viewToModelConverter, { priority: \"low\" });\n    }\n  }\n  /**\n   * Registers a post-fixer that will make sure that the style attribute value is correct for a specific image type (block vs inline).\n   */\n  _setupPostFixer() {\n    const editor = this.editor;\n    const document = editor.model.document;\n    const imageUtils = editor.plugins.get(ImageUtils);\n    const stylesMap = new Map(this.normalizedStyles.map((style) => [style.name, style]));\n    document.registerPostFixer((writer) => {\n      let changed = false;\n      for (const change of document.differ.getChanges()) {\n        if (change.type == \"insert\" || change.type == \"attribute\" && change.attributeKey == \"imageStyle\") {\n          let element = change.type == \"insert\" ? change.position.nodeAfter : change.range.start.nodeAfter;\n          if (element && element.is(\"element\", \"paragraph\") && element.childCount > 0) {\n            element = element.getChild(0);\n          }\n          if (!imageUtils.isImage(element)) {\n            continue;\n          }\n          const imageStyle = element.getAttribute(\"imageStyle\");\n          if (!imageStyle) {\n            continue;\n          }\n          const imageStyleDefinition = stylesMap.get(imageStyle);\n          if (!imageStyleDefinition || !imageStyleDefinition.modelElements.includes(element.name)) {\n            writer.removeAttribute(\"imageStyle\", element);\n            changed = true;\n          }\n        }\n      }\n      return changed;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle/imagestyleui.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imagestyle.css\";\nvar ImageStyleUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageStyleEditing];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageStyleUI\";\n  }\n  /**\n   * Returns the default localized style titles provided by the plugin.\n   *\n   * The following localized titles corresponding with\n   * {@link module:image/imagestyle/utils#DEFAULT_OPTIONS} are available:\n   *\n   * * `'Wrap text'`,\n   * * `'Break text'`,\n   * * `'In line'`,\n   * * `'Full size image'`,\n   * * `'Side image'`,\n   * * `'Left aligned image'`,\n   * * `'Centered image'`,\n   * * `'Right aligned image'`\n   */\n  get localizedDefaultStylesTitles() {\n    const t = this.editor.t;\n    return {\n      \"Wrap text\": t(\"Wrap text\"),\n      \"Break text\": t(\"Break text\"),\n      \"In line\": t(\"In line\"),\n      \"Full size image\": t(\"Full size image\"),\n      \"Side image\": t(\"Side image\"),\n      \"Left aligned image\": t(\"Left aligned image\"),\n      \"Centered image\": t(\"Centered image\"),\n      \"Right aligned image\": t(\"Right aligned image\")\n    };\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const plugins = this.editor.plugins;\n    const toolbarConfig = this.editor.config.get(\"image.toolbar\") || [];\n    const imageStyleEditing = plugins.get(\"ImageStyleEditing\");\n    const definedStyles = translateStyles(imageStyleEditing.normalizedStyles, this.localizedDefaultStylesTitles);\n    for (const styleConfig of definedStyles) {\n      this._createButton(styleConfig);\n    }\n    const definedDropdowns = translateStyles([\n      ...toolbarConfig.filter(isObject_default),\n      ...utils_default.getDefaultDropdownDefinitions(plugins)\n    ], this.localizedDefaultStylesTitles);\n    for (const dropdownConfig of definedDropdowns) {\n      this._createDropdown(dropdownConfig, definedStyles);\n    }\n  }\n  /**\n   * Creates a dropdown and stores it in the editor {@link module:ui/componentfactory~ComponentFactory}.\n   */\n  _createDropdown(dropdownConfig, definedStyles) {\n    const factory = this.editor.ui.componentFactory;\n    factory.add(dropdownConfig.name, (locale) => {\n      let defaultButton;\n      const { defaultItem, items, title } = dropdownConfig;\n      const buttonViews = items.filter((itemName) => definedStyles.find(({ name }) => getUIComponentName(name) === itemName)).map((buttonName) => {\n        const button = factory.create(buttonName);\n        if (buttonName === defaultItem) {\n          defaultButton = button;\n        }\n        return button;\n      });\n      if (items.length !== buttonViews.length) {\n        utils_default.warnInvalidStyle({ dropdown: dropdownConfig });\n      }\n      const dropdownView = createDropdown(locale, SplitButtonView);\n      const splitButtonView = dropdownView.buttonView;\n      const splitButtonViewArrow = splitButtonView.arrowView;\n      addToolbarToDropdown(dropdownView, buttonViews, { enableActiveItemFocusOnDropdownOpen: true });\n      splitButtonView.set({\n        label: getDropdownButtonTitle(title, defaultButton.label),\n        class: null,\n        tooltip: true\n      });\n      splitButtonViewArrow.unbind(\"label\");\n      splitButtonViewArrow.set({\n        label: title\n      });\n      splitButtonView.bind(\"icon\").toMany(buttonViews, \"isOn\", (...areOn) => {\n        const index = areOn.findIndex(identity_default);\n        return index < 0 ? defaultButton.icon : buttonViews[index].icon;\n      });\n      splitButtonView.bind(\"label\").toMany(buttonViews, \"isOn\", (...areOn) => {\n        const index = areOn.findIndex(identity_default);\n        return getDropdownButtonTitle(title, index < 0 ? defaultButton.label : buttonViews[index].label);\n      });\n      splitButtonView.bind(\"isOn\").toMany(buttonViews, \"isOn\", (...areOn) => areOn.some(identity_default));\n      splitButtonView.bind(\"class\").toMany(buttonViews, \"isOn\", (...areOn) => areOn.some(identity_default) ? \"ck-splitbutton_flatten\" : void 0);\n      splitButtonView.on(\"execute\", () => {\n        if (!buttonViews.some(({ isOn }) => isOn)) {\n          defaultButton.fire(\"execute\");\n        } else {\n          dropdownView.isOpen = !dropdownView.isOpen;\n        }\n      });\n      dropdownView.bind(\"isEnabled\").toMany(buttonViews, \"isEnabled\", (...areEnabled) => areEnabled.some(identity_default));\n      this.listenTo(dropdownView, \"execute\", () => {\n        this.editor.editing.view.focus();\n      });\n      return dropdownView;\n    });\n  }\n  /**\n   * Creates a button and stores it in the editor {@link module:ui/componentfactory~ComponentFactory}.\n   */\n  _createButton(buttonConfig) {\n    const buttonName = buttonConfig.name;\n    this.editor.ui.componentFactory.add(getUIComponentName(buttonName), (locale) => {\n      const command = this.editor.commands.get(\"imageStyle\");\n      const view = new ButtonView(locale);\n      view.set({\n        label: buttonConfig.title,\n        icon: buttonConfig.icon,\n        tooltip: true,\n        isToggleable: true\n      });\n      view.bind(\"isEnabled\").to(command, \"isEnabled\");\n      view.bind(\"isOn\").to(command, \"value\", (value) => value === buttonName);\n      view.on(\"execute\", this._executeCommand.bind(this, buttonName));\n      return view;\n    });\n  }\n  _executeCommand(name) {\n    this.editor.execute(\"imageStyle\", { value: name });\n    this.editor.editing.view.focus();\n  }\n};\nfunction translateStyles(styles, titles) {\n  for (const style of styles) {\n    if (titles[style.title]) {\n      style.title = titles[style.title];\n    }\n  }\n  return styles;\n}\nfunction getUIComponentName(name) {\n  return `imageStyle:${name}`;\n}\nfunction getDropdownButtonTitle(dropdownTitle, buttonTitle) {\n  return (dropdownTitle ? dropdownTitle + \": \" : \"\") + buttonTitle;\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagestyle.js\nvar ImageStyle = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageStyleEditing, ImageStyleUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageStyle\";\n  }\n};\nexport {\n  ImageStyle as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imagestyle/imagestylecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagestyle/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagestyle/converters.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagestyle/imagestyleediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagestyle/imagestyleui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imagestyle.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_imagestyle.js.map\n","import {\n  ImageUtils\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport {\n  WidgetToolbarRepository\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Plugin,\n  isObject_default\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imagetoolbar.js\nvar ImageToolbar = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [WidgetToolbarRepository, ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageToolbar\";\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    const editor = this.editor;\n    const t = editor.t;\n    const widgetToolbarRepository = editor.plugins.get(WidgetToolbarRepository);\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    widgetToolbarRepository.register(\"image\", {\n      ariaLabel: t(\"Image toolbar\"),\n      items: normalizeDeclarativeConfig(editor.config.get(\"image.toolbar\") || []),\n      getRelatedElement: (selection) => imageUtils.getClosestSelectedImageWidget(selection)\n    });\n  }\n};\nfunction normalizeDeclarativeConfig(config) {\n  return config.map((item) => isObject_default(item) ? item.name : item);\n}\nexport {\n  ImageToolbar as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imagetoolbar.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_imagetoolbar.js.map\n","import {\n  ImageUtils\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport {\n  ClipboardPipeline\n} from \"./chunk-UHWQXN2Z.js\";\nimport \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport {\n  FileDialogButtonView,\n  FileRepository\n} from \"./chunk-KQSKBC7C.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  Notification\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  Plugin,\n  UpcastWriter,\n  env_default,\n  global_default,\n  icons,\n  toArray\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload/utils.js\nfunction createImageTypeRegExp(types) {\n  const regExpSafeNames = types.map((type) => type.replace(\"+\", \"\\\\+\"));\n  return new RegExp(`^image\\\\/(${regExpSafeNames.join(\"|\")})$`);\n}\nfunction fetchLocalImage(image) {\n  return new Promise((resolve, reject) => {\n    const imageSrc = image.getAttribute(\"src\");\n    fetch(imageSrc).then((resource) => resource.blob()).then((blob) => {\n      const mimeType = getImageMimeType(blob, imageSrc);\n      const ext = mimeType.replace(\"image/\", \"\");\n      const filename = `image.${ext}`;\n      const file = new File([blob], filename, { type: mimeType });\n      resolve(file);\n    }).catch((err) => {\n      return err && err.name === \"TypeError\" ? convertLocalImageOnCanvas(imageSrc).then(resolve).catch(reject) : reject(err);\n    });\n  });\n}\nfunction isLocalImage(imageUtils, node) {\n  if (!imageUtils.isInlineImageView(node) || !node.getAttribute(\"src\")) {\n    return false;\n  }\n  return !!node.getAttribute(\"src\").match(/^data:image\\/\\w+;base64,/g) || !!node.getAttribute(\"src\").match(/^blob:/g);\n}\nfunction getImageMimeType(blob, src) {\n  if (blob.type) {\n    return blob.type;\n  } else if (src.match(/data:(image\\/\\w+);base64/)) {\n    return src.match(/data:(image\\/\\w+);base64/)[1].toLowerCase();\n  } else {\n    return \"image/jpeg\";\n  }\n}\nfunction convertLocalImageOnCanvas(imageSrc) {\n  return getBlobFromCanvas(imageSrc).then((blob) => {\n    const mimeType = getImageMimeType(blob, imageSrc);\n    const ext = mimeType.replace(\"image/\", \"\");\n    const filename = `image.${ext}`;\n    return new File([blob], filename, { type: mimeType });\n  });\n}\nfunction getBlobFromCanvas(imageSrc) {\n  return new Promise((resolve, reject) => {\n    const image = global_default.document.createElement(\"img\");\n    image.addEventListener(\"load\", () => {\n      const canvas = global_default.document.createElement(\"canvas\");\n      canvas.width = image.width;\n      canvas.height = image.height;\n      const ctx = canvas.getContext(\"2d\");\n      ctx.drawImage(image, 0, 0);\n      canvas.toBlob((blob) => blob ? resolve(blob) : reject());\n    });\n    image.addEventListener(\"error\", () => reject());\n    image.src = imageSrc;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadui.js\nvar ImageUploadUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageUploadUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    const componentCreator = (locale) => {\n      const view = new FileDialogButtonView(locale);\n      const command = editor.commands.get(\"uploadImage\");\n      const imageTypes = editor.config.get(\"image.upload.types\");\n      const imageTypesRegExp = createImageTypeRegExp(imageTypes);\n      view.set({\n        acceptedType: imageTypes.map((type) => `image/${type}`).join(\",\"),\n        allowMultipleFiles: true,\n        label: t(\"Upload image from computer\"),\n        icon: icons.imageUpload,\n        tooltip: true\n      });\n      view.bind(\"isEnabled\").to(command);\n      view.on(\"done\", (evt, files) => {\n        const imagesToUpload = Array.from(files).filter((file) => imageTypesRegExp.test(file.type));\n        if (imagesToUpload.length) {\n          editor.execute(\"uploadImage\", { file: imagesToUpload });\n          editor.editing.view.focus();\n        }\n      });\n      return view;\n    };\n    editor.ui.componentFactory.add(\"uploadImage\", componentCreator);\n    editor.ui.componentFactory.add(\"imageUpload\", componentCreator);\n    if (editor.plugins.has(\"ImageInsertUI\")) {\n      const imageInsertUI = editor.plugins.get(\"ImageInsertUI\");\n      const command = editor.commands.get(\"uploadImage\");\n      imageInsertUI.registerIntegration({\n        name: \"upload\",\n        observable: command,\n        buttonViewCreator: () => {\n          const uploadImageButton = editor.ui.componentFactory.create(\"uploadImage\");\n          uploadImageButton.bind(\"label\").to(imageInsertUI, \"isImageSelected\", (isImageSelected) => isImageSelected ? t(\"Replace image from computer\") : t(\"Upload image from computer\"));\n          return uploadImageButton;\n        },\n        formViewCreator: () => {\n          const uploadImageButton = editor.ui.componentFactory.create(\"uploadImage\");\n          uploadImageButton.withText = true;\n          uploadImageButton.bind(\"label\").to(imageInsertUI, \"isImageSelected\", (isImageSelected) => isImageSelected ? t(\"Replace from computer\") : t(\"Upload from computer\"));\n          uploadImageButton.on(\"execute\", () => {\n            imageInsertUI.dropdownView.isOpen = false;\n          });\n          return uploadImageButton;\n        }\n      });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadprogress.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageuploadprogress.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageuploadicon.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageuploadloader.css\";\nvar ImageUploadProgress = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageUploadProgress\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this.uploadStatusChange = (evt, data, conversionApi) => {\n      const editor2 = this.editor;\n      const modelImage = data.item;\n      const uploadId = modelImage.getAttribute(\"uploadId\");\n      if (!conversionApi.consumable.consume(data.item, evt.name)) {\n        return;\n      }\n      const imageUtils = editor2.plugins.get(\"ImageUtils\");\n      const fileRepository = editor2.plugins.get(FileRepository);\n      const status = uploadId ? data.attributeNewValue : null;\n      const placeholder = this.placeholder;\n      const viewFigure = editor2.editing.mapper.toViewElement(modelImage);\n      const viewWriter = conversionApi.writer;\n      if (status == \"reading\") {\n        _startAppearEffect(viewFigure, viewWriter);\n        _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);\n        return;\n      }\n      if (status == \"uploading\") {\n        const loader = fileRepository.loaders.get(uploadId);\n        _startAppearEffect(viewFigure, viewWriter);\n        if (!loader) {\n          _showPlaceholder(imageUtils, placeholder, viewFigure, viewWriter);\n        } else {\n          _hidePlaceholder(viewFigure, viewWriter);\n          _showProgressBar(viewFigure, viewWriter, loader, editor2.editing.view);\n          _displayLocalImage(imageUtils, viewFigure, viewWriter, loader);\n        }\n        return;\n      }\n      if (status == \"complete\" && fileRepository.loaders.get(uploadId)) {\n        _showCompleteIcon(viewFigure, viewWriter, editor2.editing.view);\n      }\n      _hideProgressBar(viewFigure, viewWriter);\n      _hidePlaceholder(viewFigure, viewWriter);\n      _stopAppearEffect(viewFigure, viewWriter);\n    };\n    this.placeholder = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    if (editor.plugins.has(\"ImageBlockEditing\")) {\n      editor.editing.downcastDispatcher.on(\"attribute:uploadStatus:imageBlock\", this.uploadStatusChange);\n    }\n    if (editor.plugins.has(\"ImageInlineEditing\")) {\n      editor.editing.downcastDispatcher.on(\"attribute:uploadStatus:imageInline\", this.uploadStatusChange);\n    }\n  }\n};\nfunction _startAppearEffect(viewFigure, writer) {\n  if (!viewFigure.hasClass(\"ck-appear\")) {\n    writer.addClass(\"ck-appear\", viewFigure);\n  }\n}\nfunction _stopAppearEffect(viewFigure, writer) {\n  writer.removeClass(\"ck-appear\", viewFigure);\n}\nfunction _showPlaceholder(imageUtils, placeholder, viewFigure, writer) {\n  if (!viewFigure.hasClass(\"ck-image-upload-placeholder\")) {\n    writer.addClass(\"ck-image-upload-placeholder\", viewFigure);\n  }\n  const viewImg = imageUtils.findViewImgElement(viewFigure);\n  if (viewImg.getAttribute(\"src\") !== placeholder) {\n    writer.setAttribute(\"src\", placeholder, viewImg);\n  }\n  if (!_getUIElement(viewFigure, \"placeholder\")) {\n    writer.insert(writer.createPositionAfter(viewImg), _createPlaceholder(writer));\n  }\n}\nfunction _hidePlaceholder(viewFigure, writer) {\n  if (viewFigure.hasClass(\"ck-image-upload-placeholder\")) {\n    writer.removeClass(\"ck-image-upload-placeholder\", viewFigure);\n  }\n  _removeUIElement(viewFigure, writer, \"placeholder\");\n}\nfunction _showProgressBar(viewFigure, writer, loader, view) {\n  const progressBar = _createProgressBar(writer);\n  writer.insert(writer.createPositionAt(viewFigure, \"end\"), progressBar);\n  loader.on(\"change:uploadedPercent\", (evt, name, value) => {\n    view.change((writer2) => {\n      writer2.setStyle(\"width\", value + \"%\", progressBar);\n    });\n  });\n}\nfunction _hideProgressBar(viewFigure, writer) {\n  _removeUIElement(viewFigure, writer, \"progressBar\");\n}\nfunction _showCompleteIcon(viewFigure, writer, view) {\n  const completeIcon = writer.createUIElement(\"div\", { class: \"ck-image-upload-complete-icon\" });\n  writer.insert(writer.createPositionAt(viewFigure, \"end\"), completeIcon);\n  setTimeout(() => {\n    view.change((writer2) => writer2.remove(writer2.createRangeOn(completeIcon)));\n  }, 3e3);\n}\nfunction _createProgressBar(writer) {\n  const progressBar = writer.createUIElement(\"div\", { class: \"ck-progress-bar\" });\n  writer.setCustomProperty(\"progressBar\", true, progressBar);\n  return progressBar;\n}\nfunction _createPlaceholder(writer) {\n  const placeholder = writer.createUIElement(\"div\", { class: \"ck-upload-placeholder-loader\" });\n  writer.setCustomProperty(\"placeholder\", true, placeholder);\n  return placeholder;\n}\nfunction _getUIElement(imageFigure, uniqueProperty) {\n  for (const child of imageFigure.getChildren()) {\n    if (child.getCustomProperty(uniqueProperty)) {\n      return child;\n    }\n  }\n}\nfunction _removeUIElement(viewFigure, writer, uniqueProperty) {\n  const element = _getUIElement(viewFigure, uniqueProperty);\n  if (element) {\n    writer.remove(writer.createRangeOn(element));\n  }\n}\nfunction _displayLocalImage(imageUtils, viewFigure, writer, loader) {\n  if (loader.data) {\n    const viewImg = imageUtils.findViewImgElement(viewFigure);\n    writer.setAttribute(\"src\", loader.data, viewImg);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload/uploadimagecommand.js\nvar UploadImageCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const selectedElement = editor.model.document.selection.getSelectedElement();\n    this.isEnabled = imageUtils.isImageAllowed() || imageUtils.isImage(selectedElement);\n  }\n  /**\n   * Executes the command.\n   *\n   * @fires execute\n   * @param options Options for the executed command.\n   * @param options.file The image file or an array of image files to upload.\n   */\n  execute(options) {\n    const files = toArray(options.file);\n    const selection = this.editor.model.document.selection;\n    const imageUtils = this.editor.plugins.get(\"ImageUtils\");\n    const selectionAttributes = Object.fromEntries(selection.getAttributes());\n    files.forEach((file, index) => {\n      const selectedElement = selection.getSelectedElement();\n      if (index && selectedElement && imageUtils.isImage(selectedElement)) {\n        const position = this.editor.model.createPositionAfter(selectedElement);\n        this._uploadImage(file, selectionAttributes, position);\n      } else {\n        this._uploadImage(file, selectionAttributes);\n      }\n    });\n  }\n  /**\n   * Handles uploading single file.\n   */\n  _uploadImage(file, attributes, position) {\n    const editor = this.editor;\n    const fileRepository = editor.plugins.get(FileRepository);\n    const loader = fileRepository.createLoader(file);\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    if (!loader) {\n      return;\n    }\n    imageUtils.insertImage({ ...attributes, uploadId: loader.id }, position);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload/imageuploadediting.js\nvar ImageUploadEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FileRepository, Notification, ClipboardPipeline, ImageUtils];\n  }\n  static get pluginName() {\n    return \"ImageUploadEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"image\", {\n      upload: {\n        types: [\"jpeg\", \"png\", \"gif\", \"bmp\", \"webp\", \"tiff\"]\n      }\n    });\n    this._uploadImageElements = /* @__PURE__ */ new Map();\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const doc = editor.model.document;\n    const conversion = editor.conversion;\n    const fileRepository = editor.plugins.get(FileRepository);\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const clipboardPipeline = editor.plugins.get(\"ClipboardPipeline\");\n    const imageTypes = createImageTypeRegExp(editor.config.get(\"image.upload.types\"));\n    const uploadImageCommand = new UploadImageCommand(editor);\n    editor.commands.add(\"uploadImage\", uploadImageCommand);\n    editor.commands.add(\"imageUpload\", uploadImageCommand);\n    conversion.for(\"upcast\").attributeToAttribute({\n      view: {\n        name: \"img\",\n        key: \"uploadId\"\n      },\n      model: \"uploadId\"\n    });\n    this.listenTo(editor.editing.view.document, \"clipboardInput\", (evt, data) => {\n      if (isHtmlIncluded(data.dataTransfer)) {\n        return;\n      }\n      const images = Array.from(data.dataTransfer.files).filter((file) => {\n        if (!file) {\n          return false;\n        }\n        return imageTypes.test(file.type);\n      });\n      if (!images.length) {\n        return;\n      }\n      evt.stop();\n      editor.model.change((writer) => {\n        if (data.targetRanges) {\n          writer.setSelection(data.targetRanges.map((viewRange) => editor.editing.mapper.toModelRange(viewRange)));\n        }\n        editor.execute(\"uploadImage\", { file: images });\n      });\n    });\n    this.listenTo(clipboardPipeline, \"inputTransformation\", (evt, data) => {\n      const fetchableImages = Array.from(editor.editing.view.createRangeIn(data.content)).map((value) => value.item).filter((viewElement) => isLocalImage(imageUtils, viewElement) && !viewElement.getAttribute(\"uploadProcessed\")).map((viewElement) => {\n        return { promise: fetchLocalImage(viewElement), imageElement: viewElement };\n      });\n      if (!fetchableImages.length) {\n        return;\n      }\n      const writer = new UpcastWriter(editor.editing.view.document);\n      for (const fetchableImage of fetchableImages) {\n        writer.setAttribute(\"uploadProcessed\", true, fetchableImage.imageElement);\n        const loader = fileRepository.createLoader(fetchableImage.promise);\n        if (loader) {\n          writer.setAttribute(\"src\", \"\", fetchableImage.imageElement);\n          writer.setAttribute(\"uploadId\", loader.id, fetchableImage.imageElement);\n        }\n      }\n    });\n    editor.editing.view.document.on(\"dragover\", (evt, data) => {\n      data.preventDefault();\n    });\n    doc.on(\"change\", () => {\n      const changes = doc.differ.getChanges({ includeChangesInGraveyard: true }).reverse();\n      const insertedImagesIds = /* @__PURE__ */ new Set();\n      for (const entry of changes) {\n        if (entry.type == \"insert\" && entry.name != \"$text\") {\n          const item = entry.position.nodeAfter;\n          const isInsertedInGraveyard = entry.position.root.rootName == \"$graveyard\";\n          for (const imageElement of getImagesFromChangeItem(editor, item)) {\n            const uploadId = imageElement.getAttribute(\"uploadId\");\n            if (!uploadId) {\n              continue;\n            }\n            const loader = fileRepository.loaders.get(uploadId);\n            if (!loader) {\n              continue;\n            }\n            if (isInsertedInGraveyard) {\n              if (!insertedImagesIds.has(uploadId)) {\n                loader.abort();\n              }\n            } else {\n              insertedImagesIds.add(uploadId);\n              this._uploadImageElements.set(uploadId, imageElement);\n              if (loader.status == \"idle\") {\n                this._readAndUpload(loader);\n              }\n            }\n          }\n        }\n      }\n    });\n    this.on(\"uploadComplete\", (evt, { imageElement, data }) => {\n      const urls = data.urls ? data.urls : data;\n      this.editor.model.change((writer) => {\n        writer.setAttribute(\"src\", urls.default, imageElement);\n        this._parseAndSetSrcsetAttributeOnImage(urls, imageElement, writer);\n        imageUtils.setImageNaturalSizeAttributes(imageElement);\n      });\n    }, { priority: \"low\" });\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    const schema = this.editor.model.schema;\n    if (this.editor.plugins.has(\"ImageBlockEditing\")) {\n      schema.extend(\"imageBlock\", {\n        allowAttributes: [\"uploadId\", \"uploadStatus\"]\n      });\n    }\n    if (this.editor.plugins.has(\"ImageInlineEditing\")) {\n      schema.extend(\"imageInline\", {\n        allowAttributes: [\"uploadId\", \"uploadStatus\"]\n      });\n    }\n  }\n  /**\n   * Reads and uploads an image.\n   *\n   * The image is read from the disk and as a Base64-encoded string it is set temporarily to\n   * `image[src]`. When the image is successfully uploaded, the temporary data is replaced with the target\n   * image's URL (the URL to the uploaded image on the server).\n   */\n  _readAndUpload(loader) {\n    const editor = this.editor;\n    const model = editor.model;\n    const t = editor.locale.t;\n    const fileRepository = editor.plugins.get(FileRepository);\n    const notification = editor.plugins.get(Notification);\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const imageUploadElements = this._uploadImageElements;\n    model.enqueueChange({ isUndoable: false }, (writer) => {\n      writer.setAttribute(\"uploadStatus\", \"reading\", imageUploadElements.get(loader.id));\n    });\n    return loader.read().then(() => {\n      const promise = loader.upload();\n      const imageElement = imageUploadElements.get(loader.id);\n      if (env_default.isSafari) {\n        const viewFigure = editor.editing.mapper.toViewElement(imageElement);\n        const viewImg = imageUtils.findViewImgElement(viewFigure);\n        editor.editing.view.once(\"render\", () => {\n          if (!viewImg.parent) {\n            return;\n          }\n          const domFigure = editor.editing.view.domConverter.mapViewToDom(viewImg.parent);\n          if (!domFigure) {\n            return;\n          }\n          const originalDisplay = domFigure.style.display;\n          domFigure.style.display = \"none\";\n          domFigure._ckHack = domFigure.offsetHeight;\n          domFigure.style.display = originalDisplay;\n        });\n      }\n      model.enqueueChange({ isUndoable: false }, (writer) => {\n        writer.setAttribute(\"uploadStatus\", \"uploading\", imageElement);\n      });\n      return promise;\n    }).then((data) => {\n      model.enqueueChange({ isUndoable: false }, (writer) => {\n        const imageElement = imageUploadElements.get(loader.id);\n        writer.setAttribute(\"uploadStatus\", \"complete\", imageElement);\n        this.fire(\"uploadComplete\", { data, imageElement });\n      });\n      clean();\n    }).catch((error) => {\n      if (loader.status !== \"error\" && loader.status !== \"aborted\") {\n        throw error;\n      }\n      if (loader.status == \"error\" && error) {\n        notification.showWarning(error, {\n          title: t(\"Upload failed\"),\n          namespace: \"upload\"\n        });\n      }\n      model.enqueueChange({ isUndoable: false }, (writer) => {\n        writer.remove(imageUploadElements.get(loader.id));\n      });\n      clean();\n    });\n    function clean() {\n      model.enqueueChange({ isUndoable: false }, (writer) => {\n        const imageElement = imageUploadElements.get(loader.id);\n        writer.removeAttribute(\"uploadId\", imageElement);\n        writer.removeAttribute(\"uploadStatus\", imageElement);\n        imageUploadElements.delete(loader.id);\n      });\n      fileRepository.destroyLoader(loader);\n    }\n  }\n  /**\n   * Creates the `srcset` attribute based on a given file upload response and sets it as an attribute to a specific image element.\n   *\n   * @param data Data object from which `srcset` will be created.\n   * @param image The image element on which the `srcset` attribute will be set.\n   */\n  _parseAndSetSrcsetAttributeOnImage(data, image, writer) {\n    let maxWidth = 0;\n    const srcsetAttribute = Object.keys(data).filter((key) => {\n      const width = parseInt(key, 10);\n      if (!isNaN(width)) {\n        maxWidth = Math.max(maxWidth, width);\n        return true;\n      }\n    }).map((key) => `${data[key]} ${key}w`).join(\", \");\n    if (srcsetAttribute != \"\") {\n      const attributes = {\n        srcset: srcsetAttribute\n      };\n      if (!image.hasAttribute(\"width\") && !image.hasAttribute(\"height\")) {\n        attributes.width = maxWidth;\n      }\n      writer.setAttributes(attributes, image);\n    }\n  }\n};\nfunction isHtmlIncluded(dataTransfer) {\n  return Array.from(dataTransfer.types).includes(\"text/html\") && dataTransfer.getData(\"text/html\") !== \"\";\n}\nfunction getImagesFromChangeItem(editor, item) {\n  const imageUtils = editor.plugins.get(\"ImageUtils\");\n  return Array.from(editor.model.createRangeOn(item)).filter((value) => imageUtils.isImage(value.item)).map((value) => value.item);\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageupload.js\nvar ImageUpload = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageUpload\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUploadEditing, ImageUploadUI, ImageUploadProgress];\n  }\n};\nexport {\n  ImageUpload as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imageupload/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageupload/imageuploadui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageupload/imageuploadprogress.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageupload/uploadimagecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageupload/imageuploadediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n  (* istanbul ignore next -- @preserve *)\n\n@ckeditor/ckeditor5-image/src/imageupload.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_imageupload.js.map\n","import {\n  ImageLoadObserver\n} from \"./chunk-5UJG77VP.js\";\nimport {\n  ImageUtils,\n  widthAndHeightStylesAreBothSet\n} from \"./chunk-MPGKEZT5.js\";\nimport \"./chunk-SA55FI2N.js\";\nimport {\n  WidgetResize\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  DropdownButtonView,\n  Model,\n  addListToDropdown,\n  createDropdown\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  Collection,\n  Command,\n  Plugin,\n  icons\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageresize/resizeimagecommand.js\nvar ResizeImageCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const element = imageUtils.getClosestSelectedImageElement(editor.model.document.selection);\n    this.isEnabled = !!element;\n    if (!element || !element.hasAttribute(\"resizedWidth\")) {\n      this.value = null;\n    } else {\n      this.value = {\n        width: element.getAttribute(\"resizedWidth\"),\n        height: null\n      };\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * ```ts\n   * // Sets the width to 50%:\n   * editor.execute( 'resizeImage', { width: '50%' } );\n   *\n   * // Removes the width attribute:\n   * editor.execute( 'resizeImage', { width: null } );\n   * ```\n   *\n   * @param options\n   * @param options.width The new width of the image.\n   * @fires execute\n   */\n  execute(options) {\n    const editor = this.editor;\n    const model = editor.model;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    const imageElement = imageUtils.getClosestSelectedImageElement(model.document.selection);\n    this.value = {\n      width: options.width,\n      height: null\n    };\n    if (imageElement) {\n      model.change((writer) => {\n        writer.setAttribute(\"resizedWidth\", options.width, imageElement);\n        writer.removeAttribute(\"resizedHeight\", imageElement);\n        imageUtils.setImageNaturalSizeAttributes(imageElement);\n      });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizeediting.js\nvar ImageResizeEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageResizeEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"image\", {\n      resizeUnit: \"%\",\n      resizeOptions: [\n        {\n          name: \"resizeImage:original\",\n          value: null,\n          icon: \"original\"\n        },\n        {\n          name: \"resizeImage:25\",\n          value: \"25\",\n          icon: \"small\"\n        },\n        {\n          name: \"resizeImage:50\",\n          value: \"50\",\n          icon: \"medium\"\n        },\n        {\n          name: \"resizeImage:75\",\n          value: \"75\",\n          icon: \"large\"\n        }\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const resizeImageCommand = new ResizeImageCommand(editor);\n    this._registerSchema();\n    this._registerConverters(\"imageBlock\");\n    this._registerConverters(\"imageInline\");\n    editor.commands.add(\"resizeImage\", resizeImageCommand);\n    editor.commands.add(\"imageResize\", resizeImageCommand);\n  }\n  _registerSchema() {\n    if (this.editor.plugins.has(\"ImageBlockEditing\")) {\n      this.editor.model.schema.extend(\"imageBlock\", { allowAttributes: [\"resizedWidth\", \"resizedHeight\"] });\n    }\n    if (this.editor.plugins.has(\"ImageInlineEditing\")) {\n      this.editor.model.schema.extend(\"imageInline\", { allowAttributes: [\"resizedWidth\", \"resizedHeight\"] });\n    }\n  }\n  /**\n   * Registers image resize converters.\n   *\n   * @param imageType The type of the image.\n   */\n  _registerConverters(imageType) {\n    const editor = this.editor;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    editor.conversion.for(\"downcast\").add((dispatcher) => dispatcher.on(`attribute:resizedWidth:${imageType}`, (evt, data, conversionApi) => {\n      if (!conversionApi.consumable.consume(data.item, evt.name)) {\n        return;\n      }\n      const viewWriter = conversionApi.writer;\n      const viewImg = conversionApi.mapper.toViewElement(data.item);\n      if (data.attributeNewValue !== null) {\n        viewWriter.setStyle(\"width\", data.attributeNewValue, viewImg);\n        viewWriter.addClass(\"image_resized\", viewImg);\n      } else {\n        viewWriter.removeStyle(\"width\", viewImg);\n        viewWriter.removeClass(\"image_resized\", viewImg);\n      }\n    }));\n    editor.conversion.for(\"dataDowncast\").attributeToAttribute({\n      model: {\n        name: imageType,\n        key: \"resizedHeight\"\n      },\n      view: (modelAttributeValue) => ({\n        key: \"style\",\n        value: {\n          \"height\": modelAttributeValue\n        }\n      })\n    });\n    editor.conversion.for(\"editingDowncast\").add((dispatcher) => dispatcher.on(`attribute:resizedHeight:${imageType}`, (evt, data, conversionApi) => {\n      if (!conversionApi.consumable.consume(data.item, evt.name)) {\n        return;\n      }\n      const viewWriter = conversionApi.writer;\n      const viewImg = conversionApi.mapper.toViewElement(data.item);\n      const target = imageType === \"imageInline\" ? imageUtils.findViewImgElement(viewImg) : viewImg;\n      if (data.attributeNewValue !== null) {\n        viewWriter.setStyle(\"height\", data.attributeNewValue, target);\n      } else {\n        viewWriter.removeStyle(\"height\", target);\n      }\n    }));\n    editor.conversion.for(\"upcast\").attributeToAttribute({\n      view: {\n        name: imageType === \"imageBlock\" ? \"figure\" : \"img\",\n        styles: {\n          width: /.+/\n        }\n      },\n      model: {\n        key: \"resizedWidth\",\n        value: (viewElement) => {\n          if (widthAndHeightStylesAreBothSet(viewElement)) {\n            return null;\n          }\n          return viewElement.getStyle(\"width\");\n        }\n      }\n    });\n    editor.conversion.for(\"upcast\").attributeToAttribute({\n      view: {\n        name: imageType === \"imageBlock\" ? \"figure\" : \"img\",\n        styles: {\n          height: /.+/\n        }\n      },\n      model: {\n        key: \"resizedHeight\",\n        value: (viewElement) => {\n          if (widthAndHeightStylesAreBothSet(viewElement)) {\n            return null;\n          }\n          return viewElement.getStyle(\"height\");\n        }\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizebuttons.js\nvar RESIZE_ICONS = {\n  small: icons.objectSizeSmall,\n  medium: icons.objectSizeMedium,\n  large: icons.objectSizeLarge,\n  original: icons.objectSizeFull\n};\nvar ImageResizeButtons = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageResizeEditing];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageResizeButtons\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._resizeUnit = editor.config.get(\"image.resizeUnit\");\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const options = editor.config.get(\"image.resizeOptions\");\n    const command = editor.commands.get(\"resizeImage\");\n    this.bind(\"isEnabled\").to(command);\n    for (const option of options) {\n      this._registerImageResizeButton(option);\n    }\n    this._registerImageResizeDropdown(options);\n  }\n  /**\n   * A helper function that creates a standalone button component for the plugin.\n   *\n   * @param resizeOption A model of the resize option.\n   */\n  _registerImageResizeButton(option) {\n    const editor = this.editor;\n    const { name, value, icon } = option;\n    const optionValueWithUnit = value ? value + this._resizeUnit : null;\n    editor.ui.componentFactory.add(name, (locale) => {\n      const button = new ButtonView(locale);\n      const command = editor.commands.get(\"resizeImage\");\n      const labelText = this._getOptionLabelValue(option, true);\n      if (!RESIZE_ICONS[icon]) {\n        throw new CKEditorError(\"imageresizebuttons-missing-icon\", editor, option);\n      }\n      button.set({\n        // Use the `label` property for a verbose description (because of ARIA).\n        label: labelText,\n        icon: RESIZE_ICONS[icon],\n        tooltip: labelText,\n        isToggleable: true\n      });\n      button.bind(\"isEnabled\").to(this);\n      button.bind(\"isOn\").to(command, \"value\", getIsOnButtonCallback(optionValueWithUnit));\n      this.listenTo(button, \"execute\", () => {\n        editor.execute(\"resizeImage\", { width: optionValueWithUnit });\n      });\n      return button;\n    });\n  }\n  /**\n   * A helper function that creates a dropdown component for the plugin containing all the resize options defined in\n   * the editor configuration.\n   *\n   * @param options An array of configured options.\n   */\n  _registerImageResizeDropdown(options) {\n    const editor = this.editor;\n    const t = editor.t;\n    const originalSizeOption = options.find((option) => !option.value);\n    const componentCreator = (locale) => {\n      const command = editor.commands.get(\"resizeImage\");\n      const dropdownView = createDropdown(locale, DropdownButtonView);\n      const dropdownButton = dropdownView.buttonView;\n      const accessibleLabel = t(\"Resize image\");\n      dropdownButton.set({\n        tooltip: accessibleLabel,\n        commandValue: originalSizeOption.value,\n        icon: RESIZE_ICONS.medium,\n        isToggleable: true,\n        label: this._getOptionLabelValue(originalSizeOption),\n        withText: true,\n        class: \"ck-resize-image-button\",\n        ariaLabel: accessibleLabel,\n        ariaLabelledBy: void 0\n      });\n      dropdownButton.bind(\"label\").to(command, \"value\", (commandValue) => {\n        if (commandValue && commandValue.width) {\n          return commandValue.width;\n        } else {\n          return this._getOptionLabelValue(originalSizeOption);\n        }\n      });\n      dropdownView.bind(\"isEnabled\").to(this);\n      addListToDropdown(dropdownView, () => this._getResizeDropdownListItemDefinitions(options, command), {\n        ariaLabel: t(\"Image resize list\"),\n        role: \"menu\"\n      });\n      this.listenTo(dropdownView, \"execute\", (evt) => {\n        editor.execute(evt.source.commandName, { width: evt.source.commandValue });\n        editor.editing.view.focus();\n      });\n      return dropdownView;\n    };\n    editor.ui.componentFactory.add(\"resizeImage\", componentCreator);\n    editor.ui.componentFactory.add(\"imageResize\", componentCreator);\n  }\n  /**\n   * A helper function for creating an option label value string.\n   *\n   * @param option A resize option object.\n   * @param forTooltip An optional flag for creating a tooltip label.\n   * @returns A user-defined label combined from the numeric value and the resize unit or the default label\n   * for reset options (`Original`).\n   */\n  _getOptionLabelValue(option, forTooltip = false) {\n    const t = this.editor.t;\n    if (option.label) {\n      return option.label;\n    } else if (forTooltip) {\n      if (option.value) {\n        return t(\"Resize image to %0\", option.value + this._resizeUnit);\n      } else {\n        return t(\"Resize image to the original size\");\n      }\n    } else {\n      if (option.value) {\n        return option.value + this._resizeUnit;\n      } else {\n        return t(\"Original\");\n      }\n    }\n  }\n  /**\n   * A helper function that parses the resize options and returns list item definitions ready for use in the dropdown.\n   *\n   * @param options The resize options.\n   * @param command The resize image command.\n   * @returns Dropdown item definitions.\n   */\n  _getResizeDropdownListItemDefinitions(options, command) {\n    const itemDefinitions = new Collection();\n    options.map((option) => {\n      const optionValueWithUnit = option.value ? option.value + this._resizeUnit : null;\n      const definition = {\n        type: \"button\",\n        model: new Model({\n          commandName: \"resizeImage\",\n          commandValue: optionValueWithUnit,\n          label: this._getOptionLabelValue(option),\n          role: \"menuitemradio\",\n          withText: true,\n          icon: null\n        })\n      };\n      definition.model.bind(\"isOn\").to(command, \"value\", getIsOnButtonCallback(optionValueWithUnit));\n      itemDefinitions.add(definition);\n    });\n    return itemDefinitions;\n  }\n};\nfunction getIsOnButtonCallback(value) {\n  return (commandValue) => {\n    const objectCommandValue = commandValue;\n    if (value === null && objectCommandValue === value) {\n      return true;\n    }\n    return objectCommandValue !== null && objectCommandValue.width === value;\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageresize/imageresizehandles.js\nvar RESIZABLE_IMAGES_CSS_SELECTOR = \"figure.image.ck-widget > img,figure.image.ck-widget > picture > img,figure.image.ck-widget > a > img,figure.image.ck-widget > a > picture > img,span.image-inline.ck-widget > img,span.image-inline.ck-widget > picture > img\";\nvar RESIZED_IMAGE_CLASS = \"image_resized\";\nvar ImageResizeHandles = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [WidgetResize, ImageUtils];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageResizeHandles\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const command = this.editor.commands.get(\"resizeImage\");\n    this.bind(\"isEnabled\").to(command);\n    this._setupResizerCreator();\n  }\n  /**\n   * Attaches the listeners responsible for creating a resizer for each image, except for images inside the HTML embed preview.\n   */\n  _setupResizerCreator() {\n    const editor = this.editor;\n    const editingView = editor.editing.view;\n    const imageUtils = editor.plugins.get(\"ImageUtils\");\n    editingView.addObserver(ImageLoadObserver);\n    this.listenTo(editingView.document, \"imageLoaded\", (evt, domEvent) => {\n      if (!domEvent.target.matches(RESIZABLE_IMAGES_CSS_SELECTOR)) {\n        return;\n      }\n      const domConverter = editor.editing.view.domConverter;\n      const imageView = domConverter.domToView(domEvent.target);\n      const widgetView = imageUtils.getImageWidgetFromImageView(imageView);\n      let resizer = this.editor.plugins.get(WidgetResize).getResizerByViewElement(widgetView);\n      if (resizer) {\n        resizer.redraw();\n        return;\n      }\n      const mapper = editor.editing.mapper;\n      const imageModel = mapper.toModelElement(widgetView);\n      resizer = editor.plugins.get(WidgetResize).attachTo({\n        unit: editor.config.get(\"image.resizeUnit\"),\n        modelElement: imageModel,\n        viewElement: widgetView,\n        editor,\n        getHandleHost(domWidgetElement) {\n          return domWidgetElement.querySelector(\"img\");\n        },\n        getResizeHost() {\n          return domConverter.mapViewToDom(mapper.toViewElement(imageModel.parent));\n        },\n        // TODO consider other positions.\n        isCentered() {\n          const imageStyle = imageModel.getAttribute(\"imageStyle\");\n          return !imageStyle || imageStyle == \"block\" || imageStyle == \"alignCenter\";\n        },\n        onCommit(newValue) {\n          editingView.change((writer) => {\n            writer.removeClass(RESIZED_IMAGE_CLASS, widgetView);\n          });\n          editor.execute(\"resizeImage\", { width: newValue });\n        }\n      });\n      resizer.on(\"updateSize\", () => {\n        if (!widgetView.hasClass(RESIZED_IMAGE_CLASS)) {\n          editingView.change((writer) => {\n            writer.addClass(RESIZED_IMAGE_CLASS, widgetView);\n          });\n        }\n        const target = imageModel.name === \"imageInline\" ? imageView : widgetView;\n        if (target.getStyle(\"height\")) {\n          editingView.change((writer) => {\n            writer.removeStyle(\"height\", target);\n          });\n        }\n      });\n      resizer.bind(\"isEnabled\").to(this);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-image/src/imageresize.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-image/theme/imageresize.css\";\nvar ImageResize = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ImageResizeEditing, ImageResizeHandles, ImageResizeButtons];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ImageResize\";\n  }\n};\nexport {\n  ImageResize as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-image/src/imageresize/resizeimagecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageresize/imageresizeediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageresize/imageresizebuttons.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageresize/imageresizehandles.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-image/src/imageresize.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-image_src_imageresize.js.map\n","import \"./chunk-SA55FI2N.js\";\nimport {\n  ClipboardPipeline\n} from \"./chunk-UHWQXN2Z.js\";\nimport {\n  isWidget\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-BHRKVRIW.js\";\nimport {\n  Delete,\n  Input,\n  TextWatcher,\n  TwoStepCaretMovement,\n  findAttributeRange,\n  getLastTextLine,\n  inlineHighlight\n} from \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  ContextualBalloon,\n  CssTransitionDisablerMixin,\n  FocusCycler,\n  LabeledFieldView,\n  SwitchButtonView,\n  View,\n  ViewCollection,\n  clickOutsideHandler,\n  createLabeledInputText,\n  submitHandler\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  ClickObserver,\n  Collection,\n  Command,\n  FocusTracker,\n  KeystrokeHandler,\n  ObservableMixin,\n  Plugin,\n  env_default,\n  first,\n  icons,\n  keyCodes,\n  toMap,\n  upperFirst_default\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-link/src/utils/automaticdecorators.js\nvar AutomaticDecorators = class {\n  constructor() {\n    this._definitions = /* @__PURE__ */ new Set();\n  }\n  /**\n   * Gives information about the number of decorators stored in the {@link module:link/utils/automaticdecorators~AutomaticDecorators}\n   * instance.\n   */\n  get length() {\n    return this._definitions.size;\n  }\n  /**\n   * Adds automatic decorator objects or an array with them to be used during downcasting.\n   *\n   * @param item A configuration object of automatic rules for decorating links. It might also be an array of such objects.\n   */\n  add(item) {\n    if (Array.isArray(item)) {\n      item.forEach((item2) => this._definitions.add(item2));\n    } else {\n      this._definitions.add(item);\n    }\n  }\n  /**\n   * Provides the conversion helper used in the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add} method.\n   *\n   * @returns A dispatcher function used as conversion helper in {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add}.\n   */\n  getDispatcher() {\n    return (dispatcher) => {\n      dispatcher.on(\"attribute:linkHref\", (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.test(data.item, \"attribute:linkHref\")) {\n          return;\n        }\n        if (!(data.item.is(\"selection\") || conversionApi.schema.isInline(data.item))) {\n          return;\n        }\n        const viewWriter = conversionApi.writer;\n        const viewSelection = viewWriter.document.selection;\n        for (const item of this._definitions) {\n          const viewElement = viewWriter.createAttributeElement(\"a\", item.attributes, {\n            priority: 5\n          });\n          if (item.classes) {\n            viewWriter.addClass(item.classes, viewElement);\n          }\n          for (const key in item.styles) {\n            viewWriter.setStyle(key, item.styles[key], viewElement);\n          }\n          viewWriter.setCustomProperty(\"link\", true, viewElement);\n          if (item.callback(data.attributeNewValue)) {\n            if (data.item.is(\"selection\")) {\n              viewWriter.wrap(viewSelection.getFirstRange(), viewElement);\n            } else {\n              viewWriter.wrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n            }\n          } else {\n            viewWriter.unwrap(conversionApi.mapper.toViewRange(data.range), viewElement);\n          }\n        }\n      }, { priority: \"high\" });\n    };\n  }\n  /**\n   * Provides the conversion helper used in the {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add} method\n   * when linking images.\n   *\n   * @returns A dispatcher function used as conversion helper in {@link module:engine/conversion/downcasthelpers~DowncastHelpers#add}.\n   */\n  getDispatcherForLinkedImage() {\n    return (dispatcher) => {\n      dispatcher.on(\"attribute:linkHref:imageBlock\", (evt, data, { writer, mapper }) => {\n        const viewFigure = mapper.toViewElement(data.item);\n        const linkInImage = Array.from(viewFigure.getChildren()).find((child) => child.is(\"element\", \"a\"));\n        for (const item of this._definitions) {\n          const attributes = toMap(item.attributes);\n          if (item.callback(data.attributeNewValue)) {\n            for (const [key, val] of attributes) {\n              if (key === \"class\") {\n                writer.addClass(val, linkInImage);\n              } else {\n                writer.setAttribute(key, val, linkInImage);\n              }\n            }\n            if (item.classes) {\n              writer.addClass(item.classes, linkInImage);\n            }\n            for (const key in item.styles) {\n              writer.setStyle(key, item.styles[key], linkInImage);\n            }\n          } else {\n            for (const [key, val] of attributes) {\n              if (key === \"class\") {\n                writer.removeClass(val, linkInImage);\n              } else {\n                writer.removeAttribute(key, linkInImage);\n              }\n            }\n            if (item.classes) {\n              writer.removeClass(item.classes, linkInImage);\n            }\n            for (const key in item.styles) {\n              writer.removeStyle(key, linkInImage);\n            }\n          }\n        }\n      });\n    };\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-link/src/utils.js\nvar ATTRIBUTE_WHITESPACES = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205f\\u3000]/g;\nvar SAFE_URL = /^(?:(?:https?|ftps?|mailto):|[^a-z]|[a-z+.-]+(?:[^a-z+.:-]|$))/i;\nvar EMAIL_REG_EXP = /^[\\S]+@((?![-_])(?:[-\\w\\u00a1-\\uffff]{0,63}[^-_]\\.))+(?:[a-z\\u00a1-\\uffff]{2,})$/i;\nvar PROTOCOL_REG_EXP = /^((\\w+:(\\/{2,})?)|(\\W))/i;\nvar LINK_KEYSTROKE = \"Ctrl+K\";\nfunction isLinkElement(node) {\n  return node.is(\"attributeElement\") && !!node.getCustomProperty(\"link\");\n}\nfunction createLinkElement(href, { writer }) {\n  const linkElement = writer.createAttributeElement(\"a\", { href }, { priority: 5 });\n  writer.setCustomProperty(\"link\", true, linkElement);\n  return linkElement;\n}\nfunction ensureSafeUrl(url) {\n  const urlString = String(url);\n  return isSafeUrl(urlString) ? urlString : \"#\";\n}\nfunction isSafeUrl(url) {\n  const normalizedUrl = url.replace(ATTRIBUTE_WHITESPACES, \"\");\n  return !!normalizedUrl.match(SAFE_URL);\n}\nfunction getLocalizedDecorators(t, decorators) {\n  const localizedDecoratorsLabels = {\n    \"Open in a new tab\": t(\"Open in a new tab\"),\n    \"Downloadable\": t(\"Downloadable\")\n  };\n  decorators.forEach((decorator) => {\n    if (\"label\" in decorator && localizedDecoratorsLabels[decorator.label]) {\n      decorator.label = localizedDecoratorsLabels[decorator.label];\n    }\n    return decorator;\n  });\n  return decorators;\n}\nfunction normalizeDecorators(decorators) {\n  const retArray = [];\n  if (decorators) {\n    for (const [key, value] of Object.entries(decorators)) {\n      const decorator = Object.assign({}, value, { id: `link${upperFirst_default(key)}` });\n      retArray.push(decorator);\n    }\n  }\n  return retArray;\n}\nfunction isLinkableElement(element, schema) {\n  if (!element) {\n    return false;\n  }\n  return schema.checkAttribute(element.name, \"linkHref\");\n}\nfunction isEmail(value) {\n  return EMAIL_REG_EXP.test(value);\n}\nfunction addLinkProtocolIfApplicable(link, defaultProtocol) {\n  const protocol = isEmail(link) ? \"mailto:\" : defaultProtocol;\n  const isProtocolNeeded = !!protocol && !linkHasProtocol(link);\n  return link && isProtocolNeeded ? protocol + link : link;\n}\nfunction linkHasProtocol(link) {\n  return PROTOCOL_REG_EXP.test(link);\n}\nfunction openLink(link) {\n  window.open(link, \"_blank\", \"noopener\");\n}\n\n// node_modules/@ckeditor/ckeditor5-link/src/linkcommand.js\nvar LinkCommand = class extends Command {\n  constructor() {\n    super(...arguments);\n    this.manualDecorators = new Collection();\n    this.automaticDecorators = new AutomaticDecorators();\n  }\n  /**\n   * Synchronizes the state of {@link #manualDecorators} with the currently present elements in the model.\n   */\n  restoreManualDecoratorStates() {\n    for (const manualDecorator of this.manualDecorators) {\n      manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n    }\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedElement = selection.getSelectedElement() || first(selection.getSelectedBlocks());\n    if (isLinkableElement(selectedElement, model.schema)) {\n      this.value = selectedElement.getAttribute(\"linkHref\");\n      this.isEnabled = model.schema.checkAttribute(selectedElement, \"linkHref\");\n    } else {\n      this.value = selection.getAttribute(\"linkHref\");\n      this.isEnabled = model.schema.checkAttributeInSelection(selection, \"linkHref\");\n    }\n    for (const manualDecorator of this.manualDecorators) {\n      manualDecorator.value = this._getDecoratorStateFromModel(manualDecorator.id);\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * When the selection is non-collapsed, the `linkHref` attribute will be applied to nodes inside the selection, but only to\n   * those nodes where the `linkHref` attribute is allowed (disallowed nodes will be omitted).\n   *\n   * When the selection is collapsed and is not inside the text with the `linkHref` attribute, a\n   * new {@link module:engine/model/text~Text text node} with the `linkHref` attribute will be inserted in place of the caret, but\n   * only if such element is allowed in this place. The `_data` of the inserted text will equal the `href` parameter.\n   * The selection will be updated to wrap the just inserted text node.\n   *\n   * When the selection is collapsed and inside the text with the `linkHref` attribute, the attribute value will be updated.\n   *\n   * # Decorators and model attribute management\n   *\n   * There is an optional argument to this command that applies or removes model\n   * {@glink framework/architecture/editing-engine#text-attributes text attributes} brought by\n   * {@link module:link/utils/manualdecorator~ManualDecorator manual link decorators}.\n   *\n   * Text attribute names in the model correspond to the entries in the {@link module:link/linkconfig~LinkConfig#decorators\n   * configuration}.\n   * For every decorator configured, a model text attribute exists with the \"link\" prefix. For example, a `'linkMyDecorator'` attribute\n   * corresponds to `'myDecorator'` in the configuration.\n   *\n   * To learn more about link decorators, check out the {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`}\n   * documentation.\n   *\n   * Here is how to manage decorator attributes with the link command:\n   *\n   * ```ts\n   * const linkCommand = editor.commands.get( 'link' );\n   *\n   * // Adding a new decorator attribute.\n   * linkCommand.execute( 'http://example.com', {\n   * \tlinkIsExternal: true\n   * } );\n   *\n   * // Removing a decorator attribute from the selection.\n   * linkCommand.execute( 'http://example.com', {\n   * \tlinkIsExternal: false\n   * } );\n   *\n   * // Adding multiple decorator attributes at the same time.\n   * linkCommand.execute( 'http://example.com', {\n   * \tlinkIsExternal: true,\n   * \tlinkIsDownloadable: true,\n   * } );\n   *\n   * // Removing and adding decorator attributes at the same time.\n   * linkCommand.execute( 'http://example.com', {\n   * \tlinkIsExternal: false,\n   * \tlinkFoo: true,\n   * \tlinkIsDownloadable: false,\n   * } );\n   * ```\n   *\n   * **Note**: If the decorator attribute name is not specified, its state remains untouched.\n   *\n   * **Note**: {@link module:link/unlinkcommand~UnlinkCommand#execute `UnlinkCommand#execute()`} removes all\n   * decorator attributes.\n   *\n   * @fires execute\n   * @param href Link destination.\n   * @param manualDecoratorIds The information about manual decorator attributes to be applied or removed upon execution.\n   */\n  execute(href, manualDecoratorIds = {}) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const truthyManualDecorators = [];\n    const falsyManualDecorators = [];\n    for (const name in manualDecoratorIds) {\n      if (manualDecoratorIds[name]) {\n        truthyManualDecorators.push(name);\n      } else {\n        falsyManualDecorators.push(name);\n      }\n    }\n    model.change((writer) => {\n      if (selection.isCollapsed) {\n        const position = selection.getFirstPosition();\n        if (selection.hasAttribute(\"linkHref\")) {\n          const linkText = extractTextFromSelection(selection);\n          let linkRange = findAttributeRange(position, \"linkHref\", selection.getAttribute(\"linkHref\"), model);\n          if (selection.getAttribute(\"linkHref\") === linkText) {\n            linkRange = this._updateLinkContent(model, writer, linkRange, href);\n          }\n          writer.setAttribute(\"linkHref\", href, linkRange);\n          truthyManualDecorators.forEach((item) => {\n            writer.setAttribute(item, true, linkRange);\n          });\n          falsyManualDecorators.forEach((item) => {\n            writer.removeAttribute(item, linkRange);\n          });\n          writer.setSelection(writer.createPositionAfter(linkRange.end.nodeBefore));\n        } else if (href !== \"\") {\n          const attributes = toMap(selection.getAttributes());\n          attributes.set(\"linkHref\", href);\n          truthyManualDecorators.forEach((item) => {\n            attributes.set(item, true);\n          });\n          const { end: positionAfter } = model.insertContent(writer.createText(href, attributes), position);\n          writer.setSelection(positionAfter);\n        }\n        [\"linkHref\", ...truthyManualDecorators, ...falsyManualDecorators].forEach((item) => {\n          writer.removeSelectionAttribute(item);\n        });\n      } else {\n        const ranges = model.schema.getValidRanges(selection.getRanges(), \"linkHref\");\n        const allowedRanges = [];\n        for (const element of selection.getSelectedBlocks()) {\n          if (model.schema.checkAttribute(element, \"linkHref\")) {\n            allowedRanges.push(writer.createRangeOn(element));\n          }\n        }\n        const rangesToUpdate = allowedRanges.slice();\n        for (const range of ranges) {\n          if (this._isRangeToUpdate(range, allowedRanges)) {\n            rangesToUpdate.push(range);\n          }\n        }\n        for (const range of rangesToUpdate) {\n          let linkRange = range;\n          if (rangesToUpdate.length === 1) {\n            const linkText = extractTextFromSelection(selection);\n            if (selection.getAttribute(\"linkHref\") === linkText) {\n              linkRange = this._updateLinkContent(model, writer, range, href);\n              writer.setSelection(writer.createSelection(linkRange));\n            }\n          }\n          writer.setAttribute(\"linkHref\", href, linkRange);\n          truthyManualDecorators.forEach((item) => {\n            writer.setAttribute(item, true, linkRange);\n          });\n          falsyManualDecorators.forEach((item) => {\n            writer.removeAttribute(item, linkRange);\n          });\n        }\n      }\n    });\n  }\n  /**\n   * Provides information whether a decorator with a given name is present in the currently processed selection.\n   *\n   * @param decoratorName The name of the manual decorator used in the model\n   * @returns The information whether a given decorator is currently present in the selection.\n   */\n  _getDecoratorStateFromModel(decoratorName) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedElement = selection.getSelectedElement();\n    if (isLinkableElement(selectedElement, model.schema)) {\n      return selectedElement.getAttribute(decoratorName);\n    }\n    return selection.getAttribute(decoratorName);\n  }\n  /**\n   * Checks whether specified `range` is inside an element that accepts the `linkHref` attribute.\n   *\n   * @param range A range to check.\n   * @param allowedRanges An array of ranges created on elements where the attribute is accepted.\n   */\n  _isRangeToUpdate(range, allowedRanges) {\n    for (const allowedRange of allowedRanges) {\n      if (allowedRange.containsRange(range)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Updates selected link with a new value as its content and as its href attribute.\n   *\n   * @param model Model is need to insert content.\n   * @param writer Writer is need to create text element in model.\n   * @param range A range where should be inserted content.\n   * @param href A link value which should be in the href attribute and in the content.\n   */\n  _updateLinkContent(model, writer, range, href) {\n    const text = writer.createText(href, { linkHref: href });\n    return model.insertContent(text, range);\n  }\n};\nfunction extractTextFromSelection(selection) {\n  if (selection.isCollapsed) {\n    const firstPosition = selection.getFirstPosition();\n    return firstPosition.textNode && firstPosition.textNode.data;\n  } else {\n    const rangeItems = Array.from(selection.getFirstRange().getItems());\n    if (rangeItems.length > 1) {\n      return null;\n    }\n    const firstNode = rangeItems[0];\n    if (firstNode.is(\"$text\") || firstNode.is(\"$textProxy\")) {\n      return firstNode.data;\n    }\n    return null;\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-link/src/unlinkcommand.js\nvar UnlinkCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedElement = selection.getSelectedElement();\n    if (isLinkableElement(selectedElement, model.schema)) {\n      this.isEnabled = model.schema.checkAttribute(selectedElement, \"linkHref\");\n    } else {\n      this.isEnabled = model.schema.checkAttributeInSelection(selection, \"linkHref\");\n    }\n  }\n  /**\n   * Executes the command.\n   *\n   * When the selection is collapsed, it removes the `linkHref` attribute from each node with the same `linkHref` attribute value.\n   * When the selection is non-collapsed, it removes the `linkHref` attribute from each node in selected ranges.\n   *\n   * # Decorators\n   *\n   * If {@link module:link/linkconfig~LinkConfig#decorators `config.link.decorators`} is specified,\n   * all configured decorators are removed together with the `linkHref` attribute.\n   *\n   * @fires execute\n   */\n  execute() {\n    const editor = this.editor;\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const linkCommand = editor.commands.get(\"link\");\n    model.change((writer) => {\n      const rangesToUnlink = selection.isCollapsed ? [findAttributeRange(selection.getFirstPosition(), \"linkHref\", selection.getAttribute(\"linkHref\"), model)] : model.schema.getValidRanges(selection.getRanges(), \"linkHref\");\n      for (const range of rangesToUnlink) {\n        writer.removeAttribute(\"linkHref\", range);\n        if (linkCommand) {\n          for (const manualDecorator of linkCommand.manualDecorators) {\n            writer.removeAttribute(manualDecorator.id, range);\n          }\n        }\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-link/src/utils/manualdecorator.js\nvar ManualDecorator = class extends ObservableMixin() {\n  /**\n   * Creates a new instance of {@link module:link/utils/manualdecorator~ManualDecorator}.\n   *\n   * @param config.id The name of the attribute used in the model that represents a given manual decorator.\n   * For example: `'linkIsExternal'`.\n   * @param config.label The label used in the user interface to toggle the manual decorator.\n   * @param config.attributes A set of attributes added to output data when the decorator is active for a specific link.\n   * Attributes should keep the format of attributes defined in {@link module:engine/view/elementdefinition~ElementDefinition}.\n   * @param [config.defaultValue] Controls whether the decorator is \"on\" by default.\n   */\n  constructor({ id, label, attributes, classes, styles, defaultValue }) {\n    super();\n    this.id = id;\n    this.set(\"value\", void 0);\n    this.defaultValue = defaultValue;\n    this.label = label;\n    this.attributes = attributes;\n    this.classes = classes;\n    this.styles = styles;\n  }\n  /**\n   * Returns {@link module:engine/view/matcher~MatcherPattern} with decorator attributes.\n   *\n   * @internal\n   */\n  _createPattern() {\n    return {\n      attributes: this.attributes,\n      classes: this.classes,\n      styles: this.styles\n    };\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-link/src/linkediting.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-link/theme/link.css\";\nvar HIGHLIGHT_CLASS = \"ck-link_selected\";\nvar DECORATOR_AUTOMATIC = \"automatic\";\nvar DECORATOR_MANUAL = \"manual\";\nvar EXTERNAL_LINKS_REGEXP = /^(https?:)?\\/\\//;\nvar LinkEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"LinkEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [TwoStepCaretMovement, Input, ClipboardPipeline];\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"link\", {\n      allowCreatingEmptyLinks: false,\n      addTargetToExternalLinks: false\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.model.schema.extend(\"$text\", { allowAttributes: \"linkHref\" });\n    editor.conversion.for(\"dataDowncast\").attributeToElement({ model: \"linkHref\", view: createLinkElement });\n    editor.conversion.for(\"editingDowncast\").attributeToElement({ model: \"linkHref\", view: (href, conversionApi) => {\n      return createLinkElement(ensureSafeUrl(href), conversionApi);\n    } });\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"a\",\n        attributes: {\n          href: true\n        }\n      },\n      model: {\n        key: \"linkHref\",\n        value: (viewElement) => viewElement.getAttribute(\"href\")\n      }\n    });\n    editor.commands.add(\"link\", new LinkCommand(editor));\n    editor.commands.add(\"unlink\", new UnlinkCommand(editor));\n    const linkDecorators = getLocalizedDecorators(editor.t, normalizeDecorators(editor.config.get(\"link.decorators\")));\n    this._enableAutomaticDecorators(linkDecorators.filter((item) => item.mode === DECORATOR_AUTOMATIC));\n    this._enableManualDecorators(linkDecorators.filter((item) => item.mode === DECORATOR_MANUAL));\n    const twoStepCaretMovementPlugin = editor.plugins.get(TwoStepCaretMovement);\n    twoStepCaretMovementPlugin.registerAttribute(\"linkHref\");\n    inlineHighlight(editor, \"linkHref\", \"a\", HIGHLIGHT_CLASS);\n    this._enableLinkOpen();\n    this._enableSelectionAttributesFixer();\n    this._enableClipboardIntegration();\n  }\n  /**\n   * Processes an array of configured {@link module:link/linkconfig~LinkDecoratorAutomaticDefinition automatic decorators}\n   * and registers a {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher downcast dispatcher}\n   * for each one of them. Downcast dispatchers are obtained using the\n   * {@link module:link/utils/automaticdecorators~AutomaticDecorators#getDispatcher} method.\n   *\n   * **Note**: This method also activates the automatic external link decorator if enabled with\n   * {@link module:link/linkconfig~LinkConfig#addTargetToExternalLinks `config.link.addTargetToExternalLinks`}.\n   */\n  _enableAutomaticDecorators(automaticDecoratorDefinitions) {\n    const editor = this.editor;\n    const command = editor.commands.get(\"link\");\n    const automaticDecorators = command.automaticDecorators;\n    if (editor.config.get(\"link.addTargetToExternalLinks\")) {\n      automaticDecorators.add({\n        id: \"linkIsExternal\",\n        mode: DECORATOR_AUTOMATIC,\n        callback: (url) => !!url && EXTERNAL_LINKS_REGEXP.test(url),\n        attributes: {\n          target: \"_blank\",\n          rel: \"noopener noreferrer\"\n        }\n      });\n    }\n    automaticDecorators.add(automaticDecoratorDefinitions);\n    if (automaticDecorators.length) {\n      editor.conversion.for(\"downcast\").add(automaticDecorators.getDispatcher());\n    }\n  }\n  /**\n   * Processes an array of configured {@link module:link/linkconfig~LinkDecoratorManualDefinition manual decorators},\n   * transforms them into {@link module:link/utils/manualdecorator~ManualDecorator} instances and stores them in the\n   * {@link module:link/linkcommand~LinkCommand#manualDecorators} collection (a model for manual decorators state).\n   *\n   * Also registers an {@link module:engine/conversion/downcasthelpers~DowncastHelpers#attributeToElement attribute-to-element}\n   * converter for each manual decorator and extends the {@link module:engine/model/schema~Schema model's schema}\n   * with adequate model attributes.\n   */\n  _enableManualDecorators(manualDecoratorDefinitions) {\n    if (!manualDecoratorDefinitions.length) {\n      return;\n    }\n    const editor = this.editor;\n    const command = editor.commands.get(\"link\");\n    const manualDecorators = command.manualDecorators;\n    manualDecoratorDefinitions.forEach((decoratorDefinition) => {\n      editor.model.schema.extend(\"$text\", { allowAttributes: decoratorDefinition.id });\n      const decorator = new ManualDecorator(decoratorDefinition);\n      manualDecorators.add(decorator);\n      editor.conversion.for(\"downcast\").attributeToElement({\n        model: decorator.id,\n        view: (manualDecoratorValue, { writer, schema }, { item }) => {\n          if (!(item.is(\"selection\") || schema.isInline(item))) {\n            return;\n          }\n          if (manualDecoratorValue) {\n            const element = writer.createAttributeElement(\"a\", decorator.attributes, { priority: 5 });\n            if (decorator.classes) {\n              writer.addClass(decorator.classes, element);\n            }\n            for (const key in decorator.styles) {\n              writer.setStyle(key, decorator.styles[key], element);\n            }\n            writer.setCustomProperty(\"link\", true, element);\n            return element;\n          }\n        }\n      });\n      editor.conversion.for(\"upcast\").elementToAttribute({\n        view: {\n          name: \"a\",\n          ...decorator._createPattern()\n        },\n        model: {\n          key: decorator.id\n        }\n      });\n    });\n  }\n  /**\n   * Attaches handlers for {@link module:engine/view/document~Document#event:enter} and\n   * {@link module:engine/view/document~Document#event:click} to enable link following.\n   */\n  _enableLinkOpen() {\n    const editor = this.editor;\n    const view = editor.editing.view;\n    const viewDocument = view.document;\n    this.listenTo(viewDocument, \"click\", (evt, data) => {\n      const shouldOpen = env_default.isMac ? data.domEvent.metaKey : data.domEvent.ctrlKey;\n      if (!shouldOpen) {\n        return;\n      }\n      let clickedElement = data.domTarget;\n      if (clickedElement.tagName.toLowerCase() != \"a\") {\n        clickedElement = clickedElement.closest(\"a\");\n      }\n      if (!clickedElement) {\n        return;\n      }\n      const url = clickedElement.getAttribute(\"href\");\n      if (!url) {\n        return;\n      }\n      evt.stop();\n      data.preventDefault();\n      openLink(url);\n    }, { context: \"$capture\" });\n    this.listenTo(viewDocument, \"keydown\", (evt, data) => {\n      const linkCommand = editor.commands.get(\"link\");\n      const url = linkCommand.value;\n      const shouldOpen = !!url && data.keyCode === keyCodes.enter && data.altKey;\n      if (!shouldOpen) {\n        return;\n      }\n      evt.stop();\n      openLink(url);\n    });\n  }\n  /**\n   * Watches the DocumentSelection attribute changes and removes link decorator attributes when the linkHref attribute is removed.\n   *\n   * This is to ensure that there is no left-over link decorator attributes on the document selection that is no longer in a link.\n   */\n  _enableSelectionAttributesFixer() {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    this.listenTo(selection, \"change:attribute\", (evt, { attributeKeys }) => {\n      if (!attributeKeys.includes(\"linkHref\") || selection.hasAttribute(\"linkHref\")) {\n        return;\n      }\n      model.change((writer) => {\n        removeLinkAttributesFromSelection(writer, getLinkAttributesAllowedOnText(model.schema));\n      });\n    });\n  }\n  /**\n   * Enables URL fixing on pasting.\n   */\n  _enableClipboardIntegration() {\n    const editor = this.editor;\n    const model = editor.model;\n    const defaultProtocol = this.editor.config.get(\"link.defaultProtocol\");\n    if (!defaultProtocol) {\n      return;\n    }\n    this.listenTo(editor.plugins.get(\"ClipboardPipeline\"), \"contentInsertion\", (evt, data) => {\n      model.change((writer) => {\n        const range = writer.createRangeIn(data.content);\n        for (const item of range.getItems()) {\n          if (item.hasAttribute(\"linkHref\")) {\n            const newLink = addLinkProtocolIfApplicable(item.getAttribute(\"linkHref\"), defaultProtocol);\n            writer.setAttribute(\"linkHref\", newLink, item);\n          }\n        }\n      });\n    });\n  }\n};\nfunction removeLinkAttributesFromSelection(writer, linkAttributes) {\n  writer.removeSelectionAttribute(\"linkHref\");\n  for (const attribute of linkAttributes) {\n    writer.removeSelectionAttribute(attribute);\n  }\n}\nfunction getLinkAttributesAllowedOnText(schema) {\n  const textAttributes = schema.getDefinition(\"$text\").allowAttributes;\n  return textAttributes.filter((attribute) => attribute.startsWith(\"link\"));\n}\n\n// node_modules/@ckeditor/ckeditor5-link/src/ui/linkformview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-link/theme/linkform.css\";\nvar LinkFormView = class extends View {\n  /**\n   * Creates an instance of the {@link module:link/ui/linkformview~LinkFormView} class.\n   *\n   * Also see {@link #render}.\n   *\n   * @param locale The localization services instance.\n   * @param linkCommand Reference to {@link module:link/linkcommand~LinkCommand}.\n   */\n  constructor(locale, linkCommand) {\n    super(locale);\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusables = new ViewCollection();\n    const t = locale.t;\n    this.urlInputView = this._createUrlInput();\n    this.saveButtonView = this._createButton(t(\"Save\"), icons.check, \"ck-button-save\");\n    this.saveButtonView.type = \"submit\";\n    this.cancelButtonView = this._createButton(t(\"Cancel\"), icons.cancel, \"ck-button-cancel\", \"cancel\");\n    this._manualDecoratorSwitches = this._createManualDecoratorSwitches(linkCommand);\n    this.children = this._createFormChildren(linkCommand.manualDecorators);\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    const classList = [\"ck\", \"ck-link-form\", \"ck-responsive-form\"];\n    if (linkCommand.manualDecorators.length) {\n      classList.push(\"ck-link-form_layout-vertical\", \"ck-vertical-form\");\n    }\n    this.setTemplate({\n      tag: \"form\",\n      attributes: {\n        class: classList,\n        // https://github.com/ckeditor/ckeditor5-link/issues/90\n        tabindex: \"-1\"\n      },\n      children: this.children\n    });\n  }\n  /**\n   * Obtains the state of the {@link module:ui/button/switchbuttonview~SwitchButtonView switch buttons} representing\n   * {@link module:link/linkcommand~LinkCommand#manualDecorators manual link decorators}\n   * in the {@link module:link/ui/linkformview~LinkFormView}.\n   *\n   * @returns Key-value pairs, where the key is the name of the decorator and the value is its state.\n   */\n  getDecoratorSwitchesState() {\n    return Array.from(this._manualDecoratorSwitches).reduce((accumulator, switchButton) => {\n      accumulator[switchButton.name] = switchButton.isOn;\n      return accumulator;\n    }, {});\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    submitHandler({\n      view: this\n    });\n    const childViews = [\n      this.urlInputView,\n      ...this._manualDecoratorSwitches,\n      this.saveButtonView,\n      this.cancelButtonView\n    ];\n    childViews.forEach((v) => {\n      this._focusables.add(v);\n      this.focusTracker.add(v.element);\n    });\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the fist {@link #_focusables} in the form.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Creates a labeled input view.\n   *\n   * @returns Labeled field view instance.\n   */\n  _createUrlInput() {\n    const t = this.locale.t;\n    const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n    labeledInput.label = t(\"Link URL\");\n    return labeledInput;\n  }\n  /**\n   * Creates a button view.\n   *\n   * @param label The button label.\n   * @param icon The button icon.\n   * @param className The additional button CSS class name.\n   * @param eventName An event name that the `ButtonView#execute` event will be delegated to.\n   * @returns The button view instance.\n   */\n  _createButton(label, icon, className, eventName) {\n    const button = new ButtonView(this.locale);\n    button.set({\n      label,\n      icon,\n      tooltip: true\n    });\n    button.extendTemplate({\n      attributes: {\n        class: className\n      }\n    });\n    if (eventName) {\n      button.delegate(\"execute\").to(this, eventName);\n    }\n    return button;\n  }\n  /**\n   * Populates {@link module:ui/viewcollection~ViewCollection} of {@link module:ui/button/switchbuttonview~SwitchButtonView}\n   * made based on {@link module:link/linkcommand~LinkCommand#manualDecorators}.\n   *\n   * @param linkCommand A reference to the link command.\n   * @returns ViewCollection of switch buttons.\n   */\n  _createManualDecoratorSwitches(linkCommand) {\n    const switches = this.createCollection();\n    for (const manualDecorator of linkCommand.manualDecorators) {\n      const switchButton = new SwitchButtonView(this.locale);\n      switchButton.set({\n        name: manualDecorator.id,\n        label: manualDecorator.label,\n        withText: true\n      });\n      switchButton.bind(\"isOn\").toMany([manualDecorator, linkCommand], \"value\", (decoratorValue, commandValue) => {\n        return commandValue === void 0 && decoratorValue === void 0 ? !!manualDecorator.defaultValue : !!decoratorValue;\n      });\n      switchButton.on(\"execute\", () => {\n        manualDecorator.set(\"value\", !switchButton.isOn);\n      });\n      switches.add(switchButton);\n    }\n    return switches;\n  }\n  /**\n   * Populates the {@link #children} collection of the form.\n   *\n   * If {@link module:link/linkcommand~LinkCommand#manualDecorators manual decorators} are configured in the editor, it creates an\n   * additional `View` wrapping all {@link #_manualDecoratorSwitches} switch buttons corresponding\n   * to these decorators.\n   *\n   * @param manualDecorators A reference to\n   * the collection of manual decorators stored in the link command.\n   * @returns The children of link form view.\n   */\n  _createFormChildren(manualDecorators) {\n    const children = this.createCollection();\n    children.add(this.urlInputView);\n    if (manualDecorators.length) {\n      const additionalButtonsView = new View();\n      additionalButtonsView.setTemplate({\n        tag: \"ul\",\n        children: this._manualDecoratorSwitches.map((switchButton) => ({\n          tag: \"li\",\n          children: [switchButton],\n          attributes: {\n            class: [\n              \"ck\",\n              \"ck-list__item\"\n            ]\n          }\n        })),\n        attributes: {\n          class: [\n            \"ck\",\n            \"ck-reset\",\n            \"ck-list\"\n          ]\n        }\n      });\n      children.add(additionalButtonsView);\n    }\n    children.add(this.saveButtonView);\n    children.add(this.cancelButtonView);\n    return children;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-link/src/ui/linkactionsview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-link/theme/linkactions.css\";\nimport unlinkIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-link/theme/icons/unlink.svg\";\nvar LinkActionsView = class extends View {\n  /**\n   * @inheritDoc\n   */\n  constructor(locale) {\n    super(locale);\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this._focusables = new ViewCollection();\n    const t = locale.t;\n    this.previewButtonView = this._createPreviewButton();\n    this.unlinkButtonView = this._createButton(t(\"Unlink\"), unlinkIcon, \"unlink\");\n    this.editButtonView = this._createButton(t(\"Edit link\"), icons.pencil, \"edit\");\n    this.set(\"href\", void 0);\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate fields backwards using the Shift + Tab keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate fields forwards using the Tab key.\n        focusNext: \"tab\"\n      }\n    });\n    this.setTemplate({\n      tag: \"div\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-link-actions\",\n          \"ck-responsive-form\"\n        ],\n        // https://github.com/ckeditor/ckeditor5-link/issues/90\n        tabindex: \"-1\"\n      },\n      children: [\n        this.previewButtonView,\n        this.editButtonView,\n        this.unlinkButtonView\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    const childViews = [\n      this.previewButtonView,\n      this.editButtonView,\n      this.unlinkButtonView\n    ];\n    childViews.forEach((v) => {\n      this._focusables.add(v);\n      this.focusTracker.add(v.element);\n    });\n    this.keystrokes.listenTo(this.element);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the fist {@link #_focusables} in the actions.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * Creates a button view.\n   *\n   * @param label The button label.\n   * @param icon The button icon.\n   * @param eventName An event name that the `ButtonView#execute` event will be delegated to.\n   * @returns The button view instance.\n   */\n  _createButton(label, icon, eventName) {\n    const button = new ButtonView(this.locale);\n    button.set({\n      label,\n      icon,\n      tooltip: true\n    });\n    button.delegate(\"execute\").to(this, eventName);\n    return button;\n  }\n  /**\n   * Creates a link href preview button.\n   *\n   * @returns The button view instance.\n   */\n  _createPreviewButton() {\n    const button = new ButtonView(this.locale);\n    const bind = this.bindTemplate;\n    const t = this.t;\n    button.set({\n      withText: true,\n      tooltip: t(\"Open link in new tab\")\n    });\n    button.extendTemplate({\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-link-actions__preview\"\n        ],\n        href: bind.to(\"href\", (href) => href && ensureSafeUrl(href)),\n        target: \"_blank\",\n        rel: \"noopener noreferrer\"\n      }\n    });\n    button.bind(\"label\").to(this, \"href\", (href) => {\n      return href || t(\"This link has no URL\");\n    });\n    button.bind(\"isEnabled\").to(this, \"href\", (href) => !!href);\n    button.template.tag = \"a\";\n    button.template.eventListeners = {};\n    return button;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-link/src/linkui.js\nimport linkIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-link/theme/icons/link.svg\";\nvar VISUAL_SELECTION_MARKER_NAME = \"link-ui\";\nvar LinkUI = class extends Plugin {\n  constructor() {\n    super(...arguments);\n    this.actionsView = null;\n    this.formView = null;\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ContextualBalloon];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"LinkUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.editing.view.addObserver(ClickObserver);\n    this._balloon = editor.plugins.get(ContextualBalloon);\n    this._createToolbarLinkButton();\n    this._enableBalloonActivators();\n    editor.conversion.for(\"editingDowncast\").markerToHighlight({\n      model: VISUAL_SELECTION_MARKER_NAME,\n      view: {\n        classes: [\"ck-fake-link-selection\"]\n      }\n    });\n    editor.conversion.for(\"editingDowncast\").markerToElement({\n      model: VISUAL_SELECTION_MARKER_NAME,\n      view: {\n        name: \"span\",\n        classes: [\"ck-fake-link-selection\", \"ck-fake-link-selection_collapsed\"]\n      }\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    if (this.formView) {\n      this.formView.destroy();\n    }\n    if (this.actionsView) {\n      this.actionsView.destroy();\n    }\n  }\n  /**\n   * Creates views.\n   */\n  _createViews() {\n    this.actionsView = this._createActionsView();\n    this.formView = this._createFormView();\n    this._enableUserBalloonInteractions();\n  }\n  /**\n   * Creates the {@link module:link/ui/linkactionsview~LinkActionsView} instance.\n   */\n  _createActionsView() {\n    const editor = this.editor;\n    const actionsView = new LinkActionsView(editor.locale);\n    const linkCommand = editor.commands.get(\"link\");\n    const unlinkCommand = editor.commands.get(\"unlink\");\n    actionsView.bind(\"href\").to(linkCommand, \"value\");\n    actionsView.editButtonView.bind(\"isEnabled\").to(linkCommand);\n    actionsView.unlinkButtonView.bind(\"isEnabled\").to(unlinkCommand);\n    this.listenTo(actionsView, \"edit\", () => {\n      this._addFormView();\n    });\n    this.listenTo(actionsView, \"unlink\", () => {\n      editor.execute(\"unlink\");\n      this._hideUI();\n    });\n    actionsView.keystrokes.set(\"Esc\", (data, cancel) => {\n      this._hideUI();\n      cancel();\n    });\n    actionsView.keystrokes.set(LINK_KEYSTROKE, (data, cancel) => {\n      this._addFormView();\n      cancel();\n    });\n    return actionsView;\n  }\n  /**\n   * Creates the {@link module:link/ui/linkformview~LinkFormView} instance.\n   */\n  _createFormView() {\n    const editor = this.editor;\n    const linkCommand = editor.commands.get(\"link\");\n    const defaultProtocol = editor.config.get(\"link.defaultProtocol\");\n    const allowCreatingEmptyLinks = editor.config.get(\"link.allowCreatingEmptyLinks\");\n    const formView = new (CssTransitionDisablerMixin(LinkFormView))(editor.locale, linkCommand);\n    formView.urlInputView.fieldView.bind(\"value\").to(linkCommand, \"value\");\n    formView.urlInputView.bind(\"isEnabled\").to(linkCommand, \"isEnabled\");\n    formView.saveButtonView.bind(\"isEnabled\").to(linkCommand, \"isEnabled\", formView.urlInputView, \"isEmpty\", (isCommandEnabled, isInputEmpty) => isCommandEnabled && (allowCreatingEmptyLinks || !isInputEmpty));\n    this.listenTo(formView, \"submit\", () => {\n      const { value } = formView.urlInputView.fieldView.element;\n      const parsedUrl = addLinkProtocolIfApplicable(value, defaultProtocol);\n      editor.execute(\"link\", parsedUrl, formView.getDecoratorSwitchesState());\n      this._closeFormView();\n    });\n    this.listenTo(formView, \"cancel\", () => {\n      this._closeFormView();\n    });\n    formView.keystrokes.set(\"Esc\", (data, cancel) => {\n      this._closeFormView();\n      cancel();\n    });\n    return formView;\n  }\n  /**\n   * Creates a toolbar Link button. Clicking this button will show\n   * a {@link #_balloon} attached to the selection.\n   */\n  _createToolbarLinkButton() {\n    const editor = this.editor;\n    const linkCommand = editor.commands.get(\"link\");\n    const t = editor.t;\n    editor.ui.componentFactory.add(\"link\", (locale) => {\n      const button = new ButtonView(locale);\n      button.isEnabled = true;\n      button.label = t(\"Link\");\n      button.icon = linkIcon;\n      button.keystroke = LINK_KEYSTROKE;\n      button.tooltip = true;\n      button.isToggleable = true;\n      button.bind(\"isEnabled\").to(linkCommand, \"isEnabled\");\n      button.bind(\"isOn\").to(linkCommand, \"value\", (value) => !!value);\n      this.listenTo(button, \"execute\", () => this._showUI(true));\n      return button;\n    });\n  }\n  /**\n   * Attaches actions that control whether the balloon panel containing the\n   * {@link #formView} should be displayed.\n   */\n  _enableBalloonActivators() {\n    const editor = this.editor;\n    const viewDocument = editor.editing.view.document;\n    this.listenTo(viewDocument, \"click\", () => {\n      const parentLink = this._getSelectedLinkElement();\n      if (parentLink) {\n        this._showUI();\n      }\n    });\n    editor.keystrokes.set(LINK_KEYSTROKE, (keyEvtData, cancel) => {\n      cancel();\n      if (editor.commands.get(\"link\").isEnabled) {\n        this._showUI(true);\n      }\n    });\n  }\n  /**\n   * Attaches actions that control whether the balloon panel containing the\n   * {@link #formView} is visible or not.\n   */\n  _enableUserBalloonInteractions() {\n    this.editor.keystrokes.set(\"Tab\", (data, cancel) => {\n      if (this._areActionsVisible && !this.actionsView.focusTracker.isFocused) {\n        this.actionsView.focus();\n        cancel();\n      }\n    }, {\n      // Use the high priority because the link UI navigation is more important\n      // than other feature's actions, e.g. list indentation.\n      // https://github.com/ckeditor/ckeditor5-link/issues/146\n      priority: \"high\"\n    });\n    this.editor.keystrokes.set(\"Esc\", (data, cancel) => {\n      if (this._isUIVisible) {\n        this._hideUI();\n        cancel();\n      }\n    });\n    clickOutsideHandler({\n      emitter: this.formView,\n      activator: () => this._isUIInPanel,\n      contextElements: () => [this._balloon.view.element],\n      callback: () => this._hideUI()\n    });\n  }\n  /**\n   * Adds the {@link #actionsView} to the {@link #_balloon}.\n   *\n   * @internal\n   */\n  _addActionsView() {\n    if (!this.actionsView) {\n      this._createViews();\n    }\n    if (this._areActionsInPanel) {\n      return;\n    }\n    this._balloon.add({\n      view: this.actionsView,\n      position: this._getBalloonPositionData()\n    });\n  }\n  /**\n   * Adds the {@link #formView} to the {@link #_balloon}.\n   */\n  _addFormView() {\n    if (!this.formView) {\n      this._createViews();\n    }\n    if (this._isFormInPanel) {\n      return;\n    }\n    const editor = this.editor;\n    const linkCommand = editor.commands.get(\"link\");\n    this.formView.disableCssTransitions();\n    this._balloon.add({\n      view: this.formView,\n      position: this._getBalloonPositionData()\n    });\n    this.formView.urlInputView.fieldView.value = linkCommand.value || \"\";\n    if (this._balloon.visibleView === this.formView) {\n      this.formView.urlInputView.fieldView.select();\n    }\n    this.formView.enableCssTransitions();\n  }\n  /**\n   * Closes the form view. Decides whether the balloon should be hidden completely or if the action view should be shown. This is\n   * decided upon the link command value (which has a value if the document selection is in the link).\n   *\n   * Additionally, if any {@link module:link/linkconfig~LinkConfig#decorators} are defined in the editor configuration, the state of\n   * switch buttons responsible for manual decorator handling is restored.\n   */\n  _closeFormView() {\n    const linkCommand = this.editor.commands.get(\"link\");\n    linkCommand.restoreManualDecoratorStates();\n    if (linkCommand.value !== void 0) {\n      this._removeFormView();\n    } else {\n      this._hideUI();\n    }\n  }\n  /**\n   * Removes the {@link #formView} from the {@link #_balloon}.\n   */\n  _removeFormView() {\n    if (this._isFormInPanel) {\n      this.formView.saveButtonView.focus();\n      this.formView.urlInputView.fieldView.reset();\n      this._balloon.remove(this.formView);\n      this.editor.editing.view.focus();\n      this._hideFakeVisualSelection();\n    }\n  }\n  /**\n   * Shows the correct UI type. It is either {@link #formView} or {@link #actionsView}.\n   *\n   * @internal\n   */\n  _showUI(forceVisible = false) {\n    if (!this.formView) {\n      this._createViews();\n    }\n    if (!this._getSelectedLinkElement()) {\n      this._showFakeVisualSelection();\n      this._addActionsView();\n      if (forceVisible) {\n        this._balloon.showStack(\"main\");\n      }\n      this._addFormView();\n    } else {\n      if (this._areActionsVisible) {\n        this._addFormView();\n      } else {\n        this._addActionsView();\n      }\n      if (forceVisible) {\n        this._balloon.showStack(\"main\");\n      }\n    }\n    this._startUpdatingUI();\n  }\n  /**\n   * Removes the {@link #formView} from the {@link #_balloon}.\n   *\n   * See {@link #_addFormView}, {@link #_addActionsView}.\n   */\n  _hideUI() {\n    if (!this._isUIInPanel) {\n      return;\n    }\n    const editor = this.editor;\n    this.stopListening(editor.ui, \"update\");\n    this.stopListening(this._balloon, \"change:visibleView\");\n    editor.editing.view.focus();\n    this._removeFormView();\n    this._balloon.remove(this.actionsView);\n    this._hideFakeVisualSelection();\n  }\n  /**\n   * Makes the UI react to the {@link module:ui/editorui/editorui~EditorUI#event:update} event to\n   * reposition itself when the editor UI should be refreshed.\n   *\n   * See: {@link #_hideUI} to learn when the UI stops reacting to the `update` event.\n   */\n  _startUpdatingUI() {\n    const editor = this.editor;\n    const viewDocument = editor.editing.view.document;\n    let prevSelectedLink = this._getSelectedLinkElement();\n    let prevSelectionParent = getSelectionParent();\n    const update = () => {\n      const selectedLink = this._getSelectedLinkElement();\n      const selectionParent = getSelectionParent();\n      if (prevSelectedLink && !selectedLink || !prevSelectedLink && selectionParent !== prevSelectionParent) {\n        this._hideUI();\n      } else if (this._isUIVisible) {\n        this._balloon.updatePosition(this._getBalloonPositionData());\n      }\n      prevSelectedLink = selectedLink;\n      prevSelectionParent = selectionParent;\n    };\n    function getSelectionParent() {\n      return viewDocument.selection.focus.getAncestors().reverse().find((node) => node.is(\"element\"));\n    }\n    this.listenTo(editor.ui, \"update\", update);\n    this.listenTo(this._balloon, \"change:visibleView\", update);\n  }\n  /**\n   * Returns `true` when {@link #formView} is in the {@link #_balloon}.\n   */\n  get _isFormInPanel() {\n    return !!this.formView && this._balloon.hasView(this.formView);\n  }\n  /**\n   * Returns `true` when {@link #actionsView} is in the {@link #_balloon}.\n   */\n  get _areActionsInPanel() {\n    return !!this.actionsView && this._balloon.hasView(this.actionsView);\n  }\n  /**\n   * Returns `true` when {@link #actionsView} is in the {@link #_balloon} and it is\n   * currently visible.\n   */\n  get _areActionsVisible() {\n    return !!this.actionsView && this._balloon.visibleView === this.actionsView;\n  }\n  /**\n   * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon}.\n   */\n  get _isUIInPanel() {\n    return this._isFormInPanel || this._areActionsInPanel;\n  }\n  /**\n   * Returns `true` when {@link #actionsView} or {@link #formView} is in the {@link #_balloon} and it is\n   * currently visible.\n   */\n  get _isUIVisible() {\n    const visibleView = this._balloon.visibleView;\n    return !!this.formView && visibleView == this.formView || this._areActionsVisible;\n  }\n  /**\n   * Returns positioning options for the {@link #_balloon}. They control the way the balloon is attached\n   * to the target element or selection.\n   *\n   * If the selection is collapsed and inside a link element, the panel will be attached to the\n   * entire link element. Otherwise, it will be attached to the selection.\n   */\n  _getBalloonPositionData() {\n    const view = this.editor.editing.view;\n    const model = this.editor.model;\n    const viewDocument = view.document;\n    let target;\n    if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n      const markerViewElements = Array.from(this.editor.editing.mapper.markerNameToElements(VISUAL_SELECTION_MARKER_NAME));\n      const newRange = view.createRange(view.createPositionBefore(markerViewElements[0]), view.createPositionAfter(markerViewElements[markerViewElements.length - 1]));\n      target = view.domConverter.viewRangeToDom(newRange);\n    } else {\n      target = () => {\n        const targetLink = this._getSelectedLinkElement();\n        return targetLink ? (\n          // When selection is inside link element, then attach panel to this element.\n          view.domConverter.mapViewToDom(targetLink)\n        ) : (\n          // Otherwise attach panel to the selection.\n          view.domConverter.viewRangeToDom(viewDocument.selection.getFirstRange())\n        );\n      };\n    }\n    return { target };\n  }\n  /**\n   * Returns the link {@link module:engine/view/attributeelement~AttributeElement} under\n   * the {@link module:engine/view/document~Document editing view's} selection or `null`\n   * if there is none.\n   *\n   * **Note**: For a non–collapsed selection, the link element is returned when **fully**\n   * selected and the **only** element within the selection boundaries, or when\n   * a linked widget is selected.\n   */\n  _getSelectedLinkElement() {\n    const view = this.editor.editing.view;\n    const selection = view.document.selection;\n    const selectedElement = selection.getSelectedElement();\n    if (selection.isCollapsed || selectedElement && isWidget(selectedElement)) {\n      return findLinkElementAncestor(selection.getFirstPosition());\n    } else {\n      const range = selection.getFirstRange().getTrimmed();\n      const startLink = findLinkElementAncestor(range.start);\n      const endLink = findLinkElementAncestor(range.end);\n      if (!startLink || startLink != endLink) {\n        return null;\n      }\n      if (view.createRangeIn(startLink).getTrimmed().isEqual(range)) {\n        return startLink;\n      } else {\n        return null;\n      }\n    }\n  }\n  /**\n   * Displays a fake visual selection when the contextual balloon is displayed.\n   *\n   * This adds a 'link-ui' marker into the document that is rendered as a highlight on selected text fragment.\n   */\n  _showFakeVisualSelection() {\n    const model = this.editor.model;\n    model.change((writer) => {\n      const range = model.document.selection.getFirstRange();\n      if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n        writer.updateMarker(VISUAL_SELECTION_MARKER_NAME, { range });\n      } else {\n        if (range.start.isAtEnd) {\n          const startPosition = range.start.getLastMatchingPosition(({ item }) => !model.schema.isContent(item), { boundaries: range });\n          writer.addMarker(VISUAL_SELECTION_MARKER_NAME, {\n            usingOperation: false,\n            affectsData: false,\n            range: writer.createRange(startPosition, range.end)\n          });\n        } else {\n          writer.addMarker(VISUAL_SELECTION_MARKER_NAME, {\n            usingOperation: false,\n            affectsData: false,\n            range\n          });\n        }\n      }\n    });\n  }\n  /**\n   * Hides the fake visual selection created in {@link #_showFakeVisualSelection}.\n   */\n  _hideFakeVisualSelection() {\n    const model = this.editor.model;\n    if (model.markers.has(VISUAL_SELECTION_MARKER_NAME)) {\n      model.change((writer) => {\n        writer.removeMarker(VISUAL_SELECTION_MARKER_NAME);\n      });\n    }\n  }\n};\nfunction findLinkElementAncestor(position) {\n  return position.getAncestors().find((ancestor) => isLinkElement(ancestor)) || null;\n}\n\n// node_modules/@ckeditor/ckeditor5-link/src/autolink.js\nvar MIN_LINK_LENGTH_WITH_SPACE_AT_END = 4;\nvar URL_REG_EXP = new RegExp(\n  // Group 1: Line start or after a space.\n  \"(^|\\\\s)(((?:(?:(?:https?|ftp):)?\\\\/\\\\/)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(((?!www\\\\.)|(www\\\\.))(?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.)+(?:[a-z\\\\u00a1-\\\\uffff]{2,63})))(?::\\\\d{2,5})?(?:[/?#]\\\\S*)?)|((www.|(\\\\S+@))((?![-_])(?:[-_a-z0-9\\\\u00a1-\\\\uffff]{1,63}\\\\.))+(?:[a-z\\\\u00a1-\\\\uffff]{2,63})))$\",\n  \"i\"\n);\nvar URL_GROUP_IN_MATCH = 2;\nvar AutoLink = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Delete, LinkEditing];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"AutoLink\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const selection = editor.model.document.selection;\n    selection.on(\"change:range\", () => {\n      this.isEnabled = !selection.anchor.parent.is(\"element\", \"codeBlock\");\n    });\n    this._enableTypingHandling();\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    this._enableEnterHandling();\n    this._enableShiftEnterHandling();\n    this._enablePasteLinking();\n  }\n  /**\n   * For given position, returns a range that includes the whole link that contains the position.\n   *\n   * If position is not inside a link, returns `null`.\n   */\n  _expandLinkRange(model, position) {\n    if (position.textNode && position.textNode.hasAttribute(\"linkHref\")) {\n      return findAttributeRange(position, \"linkHref\", position.textNode.getAttribute(\"linkHref\"), model);\n    } else {\n      return null;\n    }\n  }\n  /**\n   * Extends the document selection to includes all links that intersects with given `selectedRange`.\n   */\n  _selectEntireLinks(writer, selectedRange) {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const selStart = selection.getFirstPosition();\n    const selEnd = selection.getLastPosition();\n    let updatedSelection = selectedRange.getJoined(this._expandLinkRange(model, selStart) || selectedRange);\n    if (updatedSelection) {\n      updatedSelection = updatedSelection.getJoined(this._expandLinkRange(model, selEnd) || selectedRange);\n    }\n    if (updatedSelection && (updatedSelection.start.isBefore(selStart) || updatedSelection.end.isAfter(selEnd))) {\n      writer.setSelection(updatedSelection);\n    }\n  }\n  /**\n   * Enables autolinking on pasting a URL when some content is selected.\n   */\n  _enablePasteLinking() {\n    const editor = this.editor;\n    const model = editor.model;\n    const selection = model.document.selection;\n    const clipboardPipeline = editor.plugins.get(\"ClipboardPipeline\");\n    const linkCommand = editor.commands.get(\"link\");\n    clipboardPipeline.on(\"inputTransformation\", (evt, data) => {\n      if (!this.isEnabled || !linkCommand.isEnabled || selection.isCollapsed) {\n        return;\n      }\n      if (selection.rangeCount > 1) {\n        return;\n      }\n      const selectedRange = selection.getFirstRange();\n      const newLink = data.dataTransfer.getData(\"text/plain\");\n      if (!newLink) {\n        return;\n      }\n      const matches = newLink.match(URL_REG_EXP);\n      if (matches && matches[2] === newLink) {\n        model.change((writer) => {\n          this._selectEntireLinks(writer, selectedRange);\n          linkCommand.execute(newLink);\n        });\n        evt.stop();\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * Enables autolinking on typing.\n   */\n  _enableTypingHandling() {\n    const editor = this.editor;\n    const watcher = new TextWatcher(editor.model, (text) => {\n      if (!isSingleSpaceAtTheEnd(text)) {\n        return;\n      }\n      const url = getUrlAtTextEnd(text.substr(0, text.length - 1));\n      if (url) {\n        return { url };\n      }\n    });\n    watcher.on(\"matched:data\", (evt, data) => {\n      const { batch, range, url } = data;\n      if (!batch.isTyping) {\n        return;\n      }\n      const linkEnd = range.end.getShiftedBy(-1);\n      const linkStart = linkEnd.getShiftedBy(-url.length);\n      const linkRange = editor.model.createRange(linkStart, linkEnd);\n      this._applyAutoLink(url, linkRange);\n    });\n    watcher.bind(\"isEnabled\").to(this);\n  }\n  /**\n   * Enables autolinking on the <kbd>Enter</kbd> key.\n   */\n  _enableEnterHandling() {\n    const editor = this.editor;\n    const model = editor.model;\n    const enterCommand = editor.commands.get(\"enter\");\n    if (!enterCommand) {\n      return;\n    }\n    enterCommand.on(\"execute\", () => {\n      const position = model.document.selection.getFirstPosition();\n      if (!position.parent.previousSibling) {\n        return;\n      }\n      const rangeToCheck = model.createRangeIn(position.parent.previousSibling);\n      this._checkAndApplyAutoLinkOnRange(rangeToCheck);\n    });\n  }\n  /**\n   * Enables autolinking on the <kbd>Shift</kbd>+<kbd>Enter</kbd> keyboard shortcut.\n   */\n  _enableShiftEnterHandling() {\n    const editor = this.editor;\n    const model = editor.model;\n    const shiftEnterCommand = editor.commands.get(\"shiftEnter\");\n    if (!shiftEnterCommand) {\n      return;\n    }\n    shiftEnterCommand.on(\"execute\", () => {\n      const position = model.document.selection.getFirstPosition();\n      const rangeToCheck = model.createRange(model.createPositionAt(position.parent, 0), position.getShiftedBy(-1));\n      this._checkAndApplyAutoLinkOnRange(rangeToCheck);\n    });\n  }\n  /**\n   * Checks if the passed range contains a linkable text.\n   */\n  _checkAndApplyAutoLinkOnRange(rangeToCheck) {\n    const model = this.editor.model;\n    const { text, range } = getLastTextLine(rangeToCheck, model);\n    const url = getUrlAtTextEnd(text);\n    if (url) {\n      const linkRange = model.createRange(range.end.getShiftedBy(-url.length), range.end);\n      this._applyAutoLink(url, linkRange);\n    }\n  }\n  /**\n   * Applies a link on a given range if the link should be applied.\n   *\n   * @param url The URL to link.\n   * @param range The text range to apply the link attribute to.\n   */\n  _applyAutoLink(url, range) {\n    const model = this.editor.model;\n    const defaultProtocol = this.editor.config.get(\"link.defaultProtocol\");\n    const fullUrl = addLinkProtocolIfApplicable(url, defaultProtocol);\n    if (!this.isEnabled || !isLinkAllowedOnRange(range, model) || !linkHasProtocol(fullUrl) || linkIsAlreadySet(range)) {\n      return;\n    }\n    this._persistAutoLink(fullUrl, range);\n  }\n  /**\n   * Enqueues autolink changes in the model.\n   *\n   * @param url The URL to link.\n   * @param range The text range to apply the link attribute to.\n   */\n  _persistAutoLink(url, range) {\n    const model = this.editor.model;\n    const deletePlugin = this.editor.plugins.get(\"Delete\");\n    model.enqueueChange((writer) => {\n      writer.setAttribute(\"linkHref\", url, range);\n      model.enqueueChange(() => {\n        deletePlugin.requestUndoOnBackspace();\n      });\n    });\n  }\n};\nfunction isSingleSpaceAtTheEnd(text) {\n  return text.length > MIN_LINK_LENGTH_WITH_SPACE_AT_END && text[text.length - 1] === \" \" && text[text.length - 2] !== \" \";\n}\nfunction getUrlAtTextEnd(text) {\n  const match = URL_REG_EXP.exec(text);\n  return match ? match[URL_GROUP_IN_MATCH] : null;\n}\nfunction isLinkAllowedOnRange(range, model) {\n  return model.schema.checkAttributeInSelection(model.createSelection(range), \"linkHref\");\n}\nfunction linkIsAlreadySet(range) {\n  const item = range.start.nodeAfter;\n  return !!item && item.hasAttribute(\"linkHref\");\n}\n\n// node_modules/@ckeditor/ckeditor5-link/src/link.js\nvar Link = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [LinkEditing, LinkUI, AutoLink];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Link\";\n  }\n};\nexport {\n  Link as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-link/src/utils/automaticdecorators.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/linkcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/unlinkcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/utils/manualdecorator.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/linkediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/ui/linkformview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/ui/linkactionsview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/linkui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/autolink.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-link/src/link.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-link_src_link.js.map\n","import {\n  ClipboardPipeline\n} from \"./chunk-UHWQXN2Z.js\";\nimport \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-2524DH5P.js\";\nimport {\n  Enter\n} from \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-BHRKVRIW.js\";\nimport {\n  Delete\n} from \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  Command,\n  Plugin,\n  UpcastWriter,\n  first,\n  icons,\n  toArray,\n  uid\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/utils/listwalker.js\nvar ListWalker = class {\n  /**\n   * Creates a document list iterator.\n   *\n   * @param startElement The start list item block element.\n   * @param options.direction The iterating direction.\n   * @param options.includeSelf Whether start block should be included in the result (if it's matching other criteria).\n   * @param options.sameAttributes Additional attributes that must be the same for each block.\n   * @param options.sameIndent Whether blocks with the same indent level as the start block should be included\n   * in the result.\n   * @param options.lowerIndent Whether blocks with a lower indent level than the start block should be included\n   * in the result.\n   * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included\n   * in the result.\n   */\n  constructor(startElement, options) {\n    this._startElement = startElement;\n    this._referenceIndent = startElement.getAttribute(\"listIndent\");\n    this._isForward = options.direction == \"forward\";\n    this._includeSelf = !!options.includeSelf;\n    this._sameAttributes = toArray(options.sameAttributes || []);\n    this._sameIndent = !!options.sameIndent;\n    this._lowerIndent = !!options.lowerIndent;\n    this._higherIndent = !!options.higherIndent;\n  }\n  /**\n   * Performs only first step of iteration and returns the result.\n   *\n   * @param startElement The start list item block element.\n   * @param options.direction The iterating direction.\n   * @param options.includeSelf Whether start block should be included in the result (if it's matching other criteria).\n   * @param options.sameAttributes Additional attributes that must be the same for each block.\n   * @param options.sameIndent Whether blocks with the same indent level as the start block should be included\n   * in the result.\n   * @param options.lowerIndent Whether blocks with a lower indent level than the start block should be included\n   * in the result.\n   * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included\n   * in the result.\n   */\n  static first(startElement, options) {\n    const walker = new this(startElement, options);\n    const iterator = walker[Symbol.iterator]();\n    return first(iterator);\n  }\n  /**\n   * Iterable interface.\n   */\n  *[Symbol.iterator]() {\n    const nestedItems = [];\n    for (const { node } of iterateSiblingListBlocks(this._getStartNode(), this._isForward ? \"forward\" : \"backward\")) {\n      const indent = node.getAttribute(\"listIndent\");\n      if (indent < this._referenceIndent) {\n        if (!this._lowerIndent) {\n          break;\n        }\n        this._referenceIndent = indent;\n      } else if (indent > this._referenceIndent) {\n        if (!this._higherIndent) {\n          continue;\n        }\n        if (!this._isForward) {\n          nestedItems.push(node);\n          continue;\n        }\n      } else {\n        if (!this._sameIndent) {\n          if (this._higherIndent) {\n            if (nestedItems.length) {\n              yield* nestedItems;\n              nestedItems.length = 0;\n            }\n            break;\n          }\n          continue;\n        }\n        if (this._sameAttributes.some((attr) => node.getAttribute(attr) !== this._startElement.getAttribute(attr))) {\n          break;\n        }\n      }\n      if (nestedItems.length) {\n        yield* nestedItems;\n        nestedItems.length = 0;\n      }\n      yield node;\n    }\n  }\n  /**\n   * Returns the model element to start iterating.\n   */\n  _getStartNode() {\n    if (this._includeSelf) {\n      return this._startElement;\n    }\n    return this._isForward ? this._startElement.nextSibling : this._startElement.previousSibling;\n  }\n};\nfunction* iterateSiblingListBlocks(node, direction = \"forward\") {\n  const isForward = direction == \"forward\";\n  const previousNodesByIndent = [];\n  let previous = null;\n  while (isListItemBlock(node)) {\n    let previousNodeInList = null;\n    if (previous) {\n      const nodeIndent = node.getAttribute(\"listIndent\");\n      const previousNodeIndent = previous.getAttribute(\"listIndent\");\n      if (nodeIndent > previousNodeIndent) {\n        previousNodesByIndent[previousNodeIndent] = previous;\n      } else if (nodeIndent < previousNodeIndent) {\n        previousNodeInList = previousNodesByIndent[nodeIndent];\n        previousNodesByIndent.length = nodeIndent;\n      } else {\n        previousNodeInList = previous;\n      }\n    }\n    yield { node, previous, previousNodeInList };\n    previous = node;\n    node = isForward ? node.nextSibling : node.previousSibling;\n  }\n}\nvar ListBlocksIterable = class {\n  /**\n   * @param listHead The head element of a list.\n   */\n  constructor(listHead) {\n    this._listHead = listHead;\n  }\n  /**\n   * List blocks iterator.\n   *\n   * Iterates over all blocks of a list.\n   */\n  [Symbol.iterator]() {\n    return iterateSiblingListBlocks(this._listHead, \"forward\");\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/utils/model.js\nvar ListItemUid = class {\n  /**\n   * Returns the next ID.\n   *\n   * @internal\n   */\n  /* istanbul ignore next: static function definition -- @preserve */\n  static next() {\n    return uid();\n  }\n};\nfunction isListItemBlock(node) {\n  return !!node && node.is(\"element\") && node.hasAttribute(\"listItemId\");\n}\nfunction getAllListItemBlocks(listItem, options = {}) {\n  return [\n    ...getListItemBlocks(listItem, { ...options, direction: \"backward\" }),\n    ...getListItemBlocks(listItem, { ...options, direction: \"forward\" })\n  ];\n}\nfunction getListItemBlocks(listItem, options = {}) {\n  const isForward = options.direction == \"forward\";\n  const items = Array.from(new ListWalker(listItem, {\n    ...options,\n    includeSelf: isForward,\n    sameIndent: true,\n    sameAttributes: \"listItemId\"\n  }));\n  return isForward ? items : items.reverse();\n}\nfunction getNestedListBlocks(listItem) {\n  return Array.from(new ListWalker(listItem, {\n    direction: \"forward\",\n    higherIndent: true\n  }));\n}\nfunction getListItems(listItem) {\n  const backwardBlocks = new ListWalker(listItem, {\n    sameIndent: true,\n    sameAttributes: \"listType\"\n  });\n  const forwardBlocks = new ListWalker(listItem, {\n    sameIndent: true,\n    sameAttributes: \"listType\",\n    includeSelf: true,\n    direction: \"forward\"\n  });\n  return [\n    ...Array.from(backwardBlocks).reverse(),\n    ...forwardBlocks\n  ];\n}\nfunction isFirstBlockOfListItem(listBlock) {\n  const previousSibling = ListWalker.first(listBlock, {\n    sameIndent: true,\n    sameAttributes: \"listItemId\"\n  });\n  if (!previousSibling) {\n    return true;\n  }\n  return false;\n}\nfunction isLastBlockOfListItem(listBlock) {\n  const nextSibling = ListWalker.first(listBlock, {\n    direction: \"forward\",\n    sameIndent: true,\n    sameAttributes: \"listItemId\"\n  });\n  if (!nextSibling) {\n    return true;\n  }\n  return false;\n}\nfunction expandListBlocksToCompleteItems(blocks, options = {}) {\n  blocks = toArray(blocks);\n  const higherIndent = options.withNested !== false;\n  const allBlocks = /* @__PURE__ */ new Set();\n  for (const block of blocks) {\n    for (const itemBlock of getAllListItemBlocks(block, { higherIndent })) {\n      allBlocks.add(itemBlock);\n    }\n  }\n  return sortBlocks(allBlocks);\n}\nfunction expandListBlocksToCompleteList(blocks) {\n  blocks = toArray(blocks);\n  const allBlocks = /* @__PURE__ */ new Set();\n  for (const block of blocks) {\n    for (const itemBlock of getListItems(block)) {\n      allBlocks.add(itemBlock);\n    }\n  }\n  return sortBlocks(allBlocks);\n}\nfunction splitListItemBefore(listBlock, writer) {\n  const blocks = getListItemBlocks(listBlock, { direction: \"forward\" });\n  const id = ListItemUid.next();\n  for (const block of blocks) {\n    writer.setAttribute(\"listItemId\", id, block);\n  }\n  return blocks;\n}\nfunction mergeListItemBefore(listBlock, parentBlock, writer) {\n  const attributes = {};\n  for (const [key, value] of parentBlock.getAttributes()) {\n    if (key.startsWith(\"list\")) {\n      attributes[key] = value;\n    }\n  }\n  const blocks = getListItemBlocks(listBlock, { direction: \"forward\" });\n  for (const block of blocks) {\n    writer.setAttributes(attributes, block);\n  }\n  return blocks;\n}\nfunction indentBlocks(blocks, writer, { expand, indentBy = 1 } = {}) {\n  blocks = toArray(blocks);\n  const allBlocks = expand ? expandListBlocksToCompleteItems(blocks) : blocks;\n  for (const block of allBlocks) {\n    const blockIndent = block.getAttribute(\"listIndent\") + indentBy;\n    if (blockIndent < 0) {\n      removeListAttributes(block, writer);\n    } else {\n      writer.setAttribute(\"listIndent\", blockIndent, block);\n    }\n  }\n  return allBlocks;\n}\nfunction outdentBlocksWithMerge(blocks, writer) {\n  blocks = toArray(blocks);\n  const allBlocks = expandListBlocksToCompleteItems(blocks);\n  const visited = /* @__PURE__ */ new Set();\n  const referenceIndent = Math.min(...allBlocks.map((block) => block.getAttribute(\"listIndent\")));\n  const parentBlocks = /* @__PURE__ */ new Map();\n  for (const block of allBlocks) {\n    parentBlocks.set(block, ListWalker.first(block, { lowerIndent: true }));\n  }\n  for (const block of allBlocks) {\n    if (visited.has(block)) {\n      continue;\n    }\n    visited.add(block);\n    const blockIndent = block.getAttribute(\"listIndent\") - 1;\n    if (blockIndent < 0) {\n      removeListAttributes(block, writer);\n      continue;\n    }\n    if (block.getAttribute(\"listIndent\") == referenceIndent) {\n      const mergedBlocks = mergeListItemIfNotLast(block, parentBlocks.get(block), writer);\n      for (const mergedBlock of mergedBlocks) {\n        visited.add(mergedBlock);\n      }\n      if (mergedBlocks.length) {\n        continue;\n      }\n    }\n    writer.setAttribute(\"listIndent\", blockIndent, block);\n  }\n  return sortBlocks(visited);\n}\nfunction removeListAttributes(blocks, writer) {\n  blocks = toArray(blocks);\n  for (const block of blocks) {\n    if (block.is(\"element\", \"listItem\")) {\n      writer.rename(block, \"paragraph\");\n    }\n  }\n  for (const block of blocks) {\n    for (const attributeKey of block.getAttributeKeys()) {\n      if (attributeKey.startsWith(\"list\")) {\n        writer.removeAttribute(attributeKey, block);\n      }\n    }\n  }\n  return blocks;\n}\nfunction isSingleListItem(blocks) {\n  if (!blocks.length) {\n    return false;\n  }\n  const firstItemId = blocks[0].getAttribute(\"listItemId\");\n  if (!firstItemId) {\n    return false;\n  }\n  return !blocks.some((item) => item.getAttribute(\"listItemId\") != firstItemId);\n}\nfunction outdentFollowingItems(lastBlock, writer) {\n  const changedBlocks = [];\n  let currentIndent = Number.POSITIVE_INFINITY;\n  for (const { node } of iterateSiblingListBlocks(lastBlock.nextSibling, \"forward\")) {\n    const indent = node.getAttribute(\"listIndent\");\n    if (indent == 0) {\n      break;\n    }\n    if (indent < currentIndent) {\n      currentIndent = indent;\n    }\n    const newIndent = indent - currentIndent;\n    writer.setAttribute(\"listIndent\", newIndent, node);\n    changedBlocks.push(node);\n  }\n  return changedBlocks;\n}\nfunction sortBlocks(blocks) {\n  return Array.from(blocks).filter((block) => block.root.rootName !== \"$graveyard\").sort((a, b) => a.index - b.index);\n}\nfunction getSelectedBlockObject(model) {\n  const selectedElement = model.document.selection.getSelectedElement();\n  if (!selectedElement) {\n    return null;\n  }\n  if (model.schema.isObject(selectedElement) && model.schema.isBlock(selectedElement)) {\n    return selectedElement;\n  }\n  return null;\n}\nfunction canBecomeSimpleListItem(block, schema) {\n  return schema.checkChild(block.parent, \"listItem\") && schema.checkChild(block, \"$text\") && !schema.isObject(block);\n}\nfunction mergeListItemIfNotLast(block, parentBlock, writer) {\n  const parentItemBlocks = getListItemBlocks(parentBlock, { direction: \"forward\" });\n  if (parentItemBlocks.pop().index > block.index) {\n    return mergeListItemBefore(block, parentBlock, writer);\n  }\n  return [];\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listindentcommand.js\nvar ListIndentCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor The editor instance.\n   * @param indentDirection The direction of indent. If it is equal to `backward`, the command\n   * will outdent a list item.\n   */\n  constructor(editor, indentDirection) {\n    super(editor);\n    this._direction = indentDirection;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.isEnabled = this._checkEnabled();\n  }\n  /**\n   * Indents or outdents (depending on the {@link #constructor}'s `indentDirection` parameter) selected list items.\n   *\n   * @fires execute\n   * @fires afterExecute\n   */\n  execute() {\n    const model = this.editor.model;\n    const blocks = getSelectedListBlocks(model.document.selection);\n    model.change((writer) => {\n      const changedBlocks = [];\n      if (isSingleListItem(blocks) && !isFirstBlockOfListItem(blocks[0])) {\n        if (this._direction == \"forward\") {\n          changedBlocks.push(...indentBlocks(blocks, writer));\n        }\n        changedBlocks.push(...splitListItemBefore(blocks[0], writer));\n      } else {\n        if (this._direction == \"forward\") {\n          changedBlocks.push(...indentBlocks(blocks, writer, { expand: true }));\n        } else {\n          changedBlocks.push(...outdentBlocksWithMerge(blocks, writer));\n        }\n      }\n      for (const block of changedBlocks) {\n        if (!block.hasAttribute(\"listType\")) {\n          continue;\n        }\n        const previousItemBlock = ListWalker.first(block, { sameIndent: true });\n        if (previousItemBlock) {\n          writer.setAttribute(\"listType\", previousItemBlock.getAttribute(\"listType\"), block);\n        }\n      }\n      this._fireAfterExecute(changedBlocks);\n    });\n  }\n  /**\n   * Fires the `afterExecute` event.\n   *\n   * @param changedBlocks The changed list elements.\n   */\n  _fireAfterExecute(changedBlocks) {\n    this.fire(\"afterExecute\", sortBlocks(new Set(changedBlocks)));\n  }\n  /**\n   * Checks whether the command can be enabled in the current context.\n   *\n   * @returns Whether the command should be enabled.\n   */\n  _checkEnabled() {\n    let blocks = getSelectedListBlocks(this.editor.model.document.selection);\n    let firstBlock = blocks[0];\n    if (!firstBlock) {\n      return false;\n    }\n    if (this._direction == \"backward\") {\n      return true;\n    }\n    if (isSingleListItem(blocks) && !isFirstBlockOfListItem(blocks[0])) {\n      return true;\n    }\n    blocks = expandListBlocksToCompleteItems(blocks);\n    firstBlock = blocks[0];\n    const siblingItem = ListWalker.first(firstBlock, { sameIndent: true });\n    if (!siblingItem) {\n      return false;\n    }\n    if (siblingItem.getAttribute(\"listType\") == firstBlock.getAttribute(\"listType\")) {\n      return true;\n    }\n    return false;\n  }\n};\nfunction getSelectedListBlocks(selection) {\n  const blocks = Array.from(selection.getSelectedBlocks());\n  const firstNonListBlockIndex = blocks.findIndex((block) => !isListItemBlock(block));\n  if (firstNonListBlockIndex != -1) {\n    blocks.length = firstNonListBlockIndex;\n  }\n  return blocks;\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listcommand.js\nvar ListCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor The editor instance.\n   * @param type List type that will be handled by this command.\n   */\n  constructor(editor, type) {\n    super(editor);\n    this.type = type;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.value = this._getValue();\n    this.isEnabled = this._checkEnabled();\n  }\n  /**\n   * Executes the list command.\n   *\n   * @fires execute\n   * @fires afterExecute\n   * @param options Command options.\n   * @param options.forceValue If set, it will force the command behavior. If `true`, the command will try to convert the\n   * selected items and potentially the neighbor elements to the proper list items. If set to `false` it will convert selected elements\n   * to paragraphs. If not set, the command will toggle selected elements to list items or paragraphs, depending on the selection.\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const document = model.document;\n    const selectedBlockObject = getSelectedBlockObject(model);\n    const blocks = Array.from(document.selection.getSelectedBlocks()).filter((block) => model.schema.checkAttribute(block, \"listType\") || canBecomeSimpleListItem(block, model.schema));\n    const turnOff = options.forceValue !== void 0 ? !options.forceValue : this.value;\n    model.change((writer) => {\n      if (turnOff) {\n        const lastBlock = blocks[blocks.length - 1];\n        const itemBlocks = getListItemBlocks(lastBlock, { direction: \"forward\" });\n        const changedBlocks = [];\n        if (itemBlocks.length > 1) {\n          changedBlocks.push(...splitListItemBefore(itemBlocks[1], writer));\n        }\n        changedBlocks.push(...removeListAttributes(blocks, writer));\n        changedBlocks.push(...outdentFollowingItems(lastBlock, writer));\n        this._fireAfterExecute(changedBlocks);\n      } else if ((selectedBlockObject || document.selection.isCollapsed) && isListItemBlock(blocks[0])) {\n        const changedBlocks = getListItems(selectedBlockObject || blocks[0]);\n        for (const block of changedBlocks) {\n          writer.setAttribute(\"listType\", this.type, block);\n        }\n        this._fireAfterExecute(changedBlocks);\n      } else {\n        const changedBlocks = [];\n        for (const block of blocks) {\n          if (!block.hasAttribute(\"listType\")) {\n            if (!block.is(\"element\", \"listItem\") && canBecomeSimpleListItem(block, model.schema)) {\n              writer.rename(block, \"listItem\");\n            }\n            writer.setAttributes({\n              listIndent: 0,\n              listItemId: ListItemUid.next(),\n              listType: this.type\n            }, block);\n            changedBlocks.push(block);\n          } else {\n            for (const node of expandListBlocksToCompleteItems(block, { withNested: false })) {\n              if (node.getAttribute(\"listType\") != this.type) {\n                writer.setAttribute(\"listType\", this.type, node);\n                changedBlocks.push(node);\n              }\n            }\n          }\n        }\n        this._fireAfterExecute(changedBlocks);\n      }\n    });\n  }\n  /**\n   * Fires the `afterExecute` event.\n   *\n   * @param changedBlocks The changed list elements.\n   */\n  _fireAfterExecute(changedBlocks) {\n    this.fire(\"afterExecute\", sortBlocks(new Set(changedBlocks)));\n  }\n  /**\n   * Checks the command's {@link #value}.\n   *\n   * @returns The current value.\n   */\n  _getValue() {\n    const selection = this.editor.model.document.selection;\n    const blocks = Array.from(selection.getSelectedBlocks());\n    if (!blocks.length) {\n      return false;\n    }\n    for (const block of blocks) {\n      if (block.getAttribute(\"listType\") != this.type) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Checks whether the command can be enabled in the current context.\n   *\n   * @returns Whether the command should be enabled.\n   */\n  _checkEnabled() {\n    const model = this.editor.model;\n    const schema = model.schema;\n    const selection = model.document.selection;\n    const blocks = Array.from(selection.getSelectedBlocks());\n    if (!blocks.length) {\n      return false;\n    }\n    if (this.value) {\n      return true;\n    }\n    for (const block of blocks) {\n      if (schema.checkAttribute(block, \"listType\") || canBecomeSimpleListItem(block, schema)) {\n        return true;\n      }\n    }\n    return false;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listmergecommand.js\nvar ListMergeCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor The editor instance.\n   * @param direction Whether list item should be merged before or after the selected block.\n   */\n  constructor(editor, direction) {\n    super(editor);\n    this._direction = direction;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.isEnabled = this._checkEnabled();\n  }\n  /**\n   * Merges list blocks together (depending on the {@link #constructor}'s `direction` parameter).\n   *\n   * @fires execute\n   * @fires afterExecute\n   * @param options Command options.\n   * @param options.shouldMergeOnBlocksContentLevel When set `true`, merging will be performed together\n   * with {@link module:engine/model/model~Model#deleteContent} to get rid of the inline content in the selection or take advantage\n   * of the heuristics in `deleteContent()` that helps convert lists into paragraphs in certain cases.\n   */\n  execute({ shouldMergeOnBlocksContentLevel: shouldMergeOnBlocksContentLevel2 = false } = {}) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const changedBlocks = [];\n    model.change((writer) => {\n      const { firstElement, lastElement } = this._getMergeSubjectElements(selection, shouldMergeOnBlocksContentLevel2);\n      const firstIndent = firstElement.getAttribute(\"listIndent\") || 0;\n      const lastIndent = lastElement.getAttribute(\"listIndent\");\n      const lastElementId = lastElement.getAttribute(\"listItemId\");\n      if (firstIndent != lastIndent) {\n        const nestedLastElementBlocks = getNestedListBlocks(lastElement);\n        changedBlocks.push(...indentBlocks([lastElement, ...nestedLastElementBlocks], writer, {\n          indentBy: firstIndent - lastIndent,\n          // If outdenting, the entire sub-tree that follows must be included.\n          expand: firstIndent < lastIndent\n        }));\n      }\n      if (shouldMergeOnBlocksContentLevel2) {\n        let sel = selection;\n        if (selection.isCollapsed) {\n          sel = writer.createSelection(writer.createRange(writer.createPositionAt(firstElement, \"end\"), writer.createPositionAt(lastElement, 0)));\n        }\n        model.deleteContent(sel, { doNotResetEntireContent: selection.isCollapsed });\n        const lastElementAfterDelete = sel.getLastPosition().parent;\n        const nextSibling = lastElementAfterDelete.nextSibling;\n        changedBlocks.push(lastElementAfterDelete);\n        if (nextSibling && nextSibling !== lastElement && nextSibling.getAttribute(\"listItemId\") == lastElementId) {\n          changedBlocks.push(...mergeListItemBefore(nextSibling, lastElementAfterDelete, writer));\n        }\n      } else {\n        changedBlocks.push(...mergeListItemBefore(lastElement, firstElement, writer));\n      }\n      this._fireAfterExecute(changedBlocks);\n    });\n  }\n  /**\n   * Fires the `afterExecute` event.\n   *\n   * @param changedBlocks The changed list elements.\n   */\n  _fireAfterExecute(changedBlocks) {\n    this.fire(\"afterExecute\", sortBlocks(new Set(changedBlocks)));\n  }\n  /**\n   * Checks whether the command can be enabled in the current context.\n   *\n   * @returns Whether the command should be enabled.\n   */\n  _checkEnabled() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedBlockObject = getSelectedBlockObject(model);\n    if (selection.isCollapsed || selectedBlockObject) {\n      const positionParent = selectedBlockObject || selection.getFirstPosition().parent;\n      if (!isListItemBlock(positionParent)) {\n        return false;\n      }\n      const siblingNode = this._direction == \"backward\" ? positionParent.previousSibling : positionParent.nextSibling;\n      if (!siblingNode) {\n        return false;\n      }\n      if (isSingleListItem([positionParent, siblingNode])) {\n        return false;\n      }\n    } else {\n      const lastPosition = selection.getLastPosition();\n      const firstPosition = selection.getFirstPosition();\n      if (lastPosition.parent === firstPosition.parent) {\n        return false;\n      }\n      if (!isListItemBlock(lastPosition.parent)) {\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Returns the boundary elements the merge should be executed for. These are not necessarily selection's first\n   * and last position parents but sometimes sibling or even further blocks depending on the context.\n   *\n   * @param selection The selection the merge is executed for.\n   * @param shouldMergeOnBlocksContentLevel When `true`, merge is performed together with\n   * {@link module:engine/model/model~Model#deleteContent} to remove the inline content within the selection.\n   */\n  _getMergeSubjectElements(selection, shouldMergeOnBlocksContentLevel2) {\n    const model = this.editor.model;\n    const selectedBlockObject = getSelectedBlockObject(model);\n    let firstElement, lastElement;\n    if (selection.isCollapsed || selectedBlockObject) {\n      const positionParent = selectedBlockObject || selection.getFirstPosition().parent;\n      const isFirstBlock = isFirstBlockOfListItem(positionParent);\n      if (this._direction == \"backward\") {\n        lastElement = positionParent;\n        if (isFirstBlock && !shouldMergeOnBlocksContentLevel2) {\n          firstElement = ListWalker.first(positionParent, { sameIndent: true, lowerIndent: true });\n        } else {\n          firstElement = positionParent.previousSibling;\n        }\n      } else {\n        firstElement = positionParent;\n        lastElement = positionParent.nextSibling;\n      }\n    } else {\n      firstElement = selection.getFirstPosition().parent;\n      lastElement = selection.getLastPosition().parent;\n    }\n    return {\n      firstElement,\n      lastElement\n    };\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listsplitcommand.js\nvar ListSplitCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor The editor instance.\n   * @param direction Whether list item should be split before or after the selected block.\n   */\n  constructor(editor, direction) {\n    super(editor);\n    this._direction = direction;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    this.isEnabled = this._checkEnabled();\n  }\n  /**\n   * Splits the list item at the selection.\n   *\n   * @fires execute\n   * @fires afterExecute\n   */\n  execute() {\n    const editor = this.editor;\n    editor.model.change((writer) => {\n      const changedBlocks = splitListItemBefore(this._getStartBlock(), writer);\n      this._fireAfterExecute(changedBlocks);\n    });\n  }\n  /**\n   * Fires the `afterExecute` event.\n   *\n   * @param changedBlocks The changed list elements.\n   */\n  _fireAfterExecute(changedBlocks) {\n    this.fire(\"afterExecute\", sortBlocks(new Set(changedBlocks)));\n  }\n  /**\n   * Checks whether the command can be enabled in the current context.\n   *\n   * @returns Whether the command should be enabled.\n   */\n  _checkEnabled() {\n    const selection = this.editor.model.document.selection;\n    const block = this._getStartBlock();\n    return selection.isCollapsed && isListItemBlock(block) && !isFirstBlockOfListItem(block);\n  }\n  /**\n   * Returns the model element that is the main focus of the command (according to the current selection and command direction).\n   */\n  _getStartBlock() {\n    const doc = this.editor.model.document;\n    const positionParent = doc.selection.getFirstPosition().parent;\n    return this._direction == \"before\" ? positionParent : positionParent.nextSibling;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listutils.js\nvar ListUtils = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ListUtils\";\n  }\n  /**\n   * Expands the given list of selected blocks to include all the items of the lists they're in.\n   *\n   * @param blocks The list of selected blocks.\n   */\n  expandListBlocksToCompleteList(blocks) {\n    return expandListBlocksToCompleteList(blocks);\n  }\n  /**\n   * Check if the given block is the first in the list item.\n   *\n   * @param listBlock The list block element.\n   */\n  isFirstBlockOfListItem(listBlock) {\n    return isFirstBlockOfListItem(listBlock);\n  }\n  /**\n   * Returns true if the given model node is a list item block.\n   *\n   * @param node A model node.\n   */\n  isListItemBlock(node) {\n    return isListItemBlock(node);\n  }\n  /**\n   * Expands the given list of selected blocks to include the leading and tailing blocks of partially selected list items.\n   *\n   * @param blocks The list of selected blocks.\n   * @param options.withNested Whether should include nested list items.\n   */\n  expandListBlocksToCompleteItems(blocks, options = {}) {\n    return expandListBlocksToCompleteItems(blocks, options);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/utils/view.js\nfunction isListView(viewElement) {\n  return viewElement.is(\"element\", \"ol\") || viewElement.is(\"element\", \"ul\");\n}\nfunction isListItemView(viewElement) {\n  return viewElement.is(\"element\", \"li\");\n}\nfunction getIndent(listItem) {\n  let indent = 0;\n  let parent = listItem.parent;\n  while (parent) {\n    if (isListItemView(parent)) {\n      indent++;\n    } else {\n      const previousSibling = parent.previousSibling;\n      if (previousSibling && isListItemView(previousSibling)) {\n        indent++;\n      }\n    }\n    parent = parent.parent;\n  }\n  return indent;\n}\nfunction createListElement(writer, indent, type, id = getViewElementIdForListType(type, indent)) {\n  return writer.createAttributeElement(getViewElementNameForListType(type), null, {\n    priority: 2 * indent / 100 - 100,\n    id\n  });\n}\nfunction createListItemElement(writer, indent, id) {\n  return writer.createAttributeElement(\"li\", null, {\n    priority: (2 * indent + 1) / 100 - 100,\n    id\n  });\n}\nfunction getViewElementNameForListType(type) {\n  return type == \"numbered\" ? \"ol\" : \"ul\";\n}\nfunction getViewElementIdForListType(type, indent) {\n  return `list-${type}-${indent}`;\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/utils/postfixers.js\nfunction findAndAddListHeadToMap(position, itemToListHead) {\n  const previousNode = position.nodeBefore;\n  if (!isListItemBlock(previousNode)) {\n    const item = position.nodeAfter;\n    if (isListItemBlock(item)) {\n      itemToListHead.set(item, item);\n    }\n  } else {\n    let listHead = previousNode;\n    for (const { node } of iterateSiblingListBlocks(listHead, \"backward\")) {\n      listHead = node;\n      if (itemToListHead.has(listHead)) {\n        return;\n      }\n    }\n    itemToListHead.set(previousNode, listHead);\n  }\n}\nfunction fixListIndents(listNodes, writer) {\n  let maxIndent = 0;\n  let prevIndent = -1;\n  let fixBy = null;\n  let applied = false;\n  for (const { node } of listNodes) {\n    const itemIndent = node.getAttribute(\"listIndent\");\n    if (itemIndent > maxIndent) {\n      let newIndent;\n      if (fixBy === null) {\n        fixBy = itemIndent - maxIndent;\n        newIndent = maxIndent;\n      } else {\n        if (fixBy > itemIndent) {\n          fixBy = itemIndent;\n        }\n        newIndent = itemIndent - fixBy;\n      }\n      if (newIndent > prevIndent + 1) {\n        newIndent = prevIndent + 1;\n      }\n      writer.setAttribute(\"listIndent\", newIndent, node);\n      applied = true;\n      prevIndent = newIndent;\n    } else {\n      fixBy = null;\n      maxIndent = itemIndent + 1;\n      prevIndent = itemIndent;\n    }\n  }\n  return applied;\n}\nfunction fixListItemIds(listNodes, seenIds, writer) {\n  const visited = /* @__PURE__ */ new Set();\n  let applied = false;\n  for (const { node } of listNodes) {\n    if (visited.has(node)) {\n      continue;\n    }\n    let listType = node.getAttribute(\"listType\");\n    let listItemId = node.getAttribute(\"listItemId\");\n    if (seenIds.has(listItemId)) {\n      listItemId = ListItemUid.next();\n    }\n    seenIds.add(listItemId);\n    if (node.is(\"element\", \"listItem\")) {\n      if (node.getAttribute(\"listItemId\") != listItemId) {\n        writer.setAttribute(\"listItemId\", listItemId, node);\n        applied = true;\n      }\n      continue;\n    }\n    for (const block of getListItemBlocks(node, { direction: \"forward\" })) {\n      visited.add(block);\n      if (block.getAttribute(\"listType\") != listType) {\n        listItemId = ListItemUid.next();\n        listType = block.getAttribute(\"listType\");\n      }\n      if (block.getAttribute(\"listItemId\") != listItemId) {\n        writer.setAttribute(\"listItemId\", listItemId, block);\n        applied = true;\n      }\n    }\n  }\n  return applied;\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/converters.js\nfunction listItemUpcastConverter() {\n  return (evt, data, conversionApi) => {\n    const { writer, schema } = conversionApi;\n    if (!data.modelRange) {\n      return;\n    }\n    const items = Array.from(data.modelRange.getItems({ shallow: true })).filter((item) => schema.checkAttribute(item, \"listItemId\"));\n    if (!items.length) {\n      return;\n    }\n    const listItemId = ListItemUid.next();\n    const listIndent = getIndent(data.viewItem);\n    let listType = data.viewItem.parent && data.viewItem.parent.is(\"element\", \"ol\") ? \"numbered\" : \"bulleted\";\n    const firstItemListType = items[0].getAttribute(\"listType\");\n    if (firstItemListType) {\n      listType = firstItemListType;\n    }\n    const attributes = {\n      listItemId,\n      listIndent,\n      listType\n    };\n    for (const item of items) {\n      if (!item.hasAttribute(\"listItemId\")) {\n        writer.setAttributes(attributes, item);\n      }\n    }\n    if (items.length > 1) {\n      if (items[1].getAttribute(\"listItemId\") != attributes.listItemId) {\n        conversionApi.keepEmptyElement(items[0]);\n      }\n    }\n  };\n}\nfunction listUpcastCleanList() {\n  return (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.test(data.viewItem, { name: true })) {\n      return;\n    }\n    const viewWriter = new UpcastWriter(data.viewItem.document);\n    for (const child of Array.from(data.viewItem.getChildren())) {\n      if (!isListItemView(child) && !isListView(child)) {\n        viewWriter.remove(child);\n      }\n    }\n  };\n}\nfunction reconvertItemsOnDataChange(model, editing, attributeNames, listEditing) {\n  return () => {\n    const changes = model.document.differ.getChanges();\n    const itemsToRefresh = [];\n    const itemToListHead = /* @__PURE__ */ new Map();\n    const changedItems = /* @__PURE__ */ new Set();\n    for (const entry of changes) {\n      if (entry.type == \"insert\" && entry.name != \"$text\") {\n        findAndAddListHeadToMap(entry.position, itemToListHead);\n        if (!entry.attributes.has(\"listItemId\")) {\n          findAndAddListHeadToMap(entry.position.getShiftedBy(entry.length), itemToListHead);\n        } else {\n          changedItems.add(entry.position.nodeAfter);\n        }\n      } else if (entry.type == \"remove\" && entry.attributes.has(\"listItemId\")) {\n        findAndAddListHeadToMap(entry.position, itemToListHead);\n      } else if (entry.type == \"attribute\") {\n        const item = entry.range.start.nodeAfter;\n        if (attributeNames.includes(entry.attributeKey)) {\n          findAndAddListHeadToMap(entry.range.start, itemToListHead);\n          if (entry.attributeNewValue === null) {\n            findAndAddListHeadToMap(entry.range.start.getShiftedBy(1), itemToListHead);\n            if (doesItemBlockRequiresRefresh(item)) {\n              itemsToRefresh.push(item);\n            }\n          } else {\n            changedItems.add(item);\n          }\n        } else if (isListItemBlock(item)) {\n          if (doesItemBlockRequiresRefresh(item)) {\n            itemsToRefresh.push(item);\n          }\n        }\n      }\n    }\n    for (const listHead of itemToListHead.values()) {\n      itemsToRefresh.push(...collectListItemsToRefresh(listHead, changedItems));\n    }\n    for (const item of new Set(itemsToRefresh)) {\n      editing.reconvertItem(item);\n    }\n  };\n  function collectListItemsToRefresh(listHead, changedItems) {\n    const itemsToRefresh = [];\n    const visited = /* @__PURE__ */ new Set();\n    const stack = [];\n    for (const { node, previous } of iterateSiblingListBlocks(listHead, \"forward\")) {\n      if (visited.has(node)) {\n        continue;\n      }\n      const itemIndent = node.getAttribute(\"listIndent\");\n      if (previous && itemIndent < previous.getAttribute(\"listIndent\")) {\n        stack.length = itemIndent + 1;\n      }\n      stack[itemIndent] = Object.fromEntries(Array.from(node.getAttributes()).filter(([key]) => attributeNames.includes(key)));\n      const blocks = getListItemBlocks(node, { direction: \"forward\" });\n      for (const block of blocks) {\n        visited.add(block);\n        if (doesItemBlockRequiresRefresh(block, blocks)) {\n          itemsToRefresh.push(block);\n        } else if (doesItemWrappingRequiresRefresh(block, stack, changedItems)) {\n          itemsToRefresh.push(block);\n        }\n      }\n    }\n    return itemsToRefresh;\n  }\n  function doesItemBlockRequiresRefresh(item, blocks) {\n    const viewElement = editing.mapper.toViewElement(item);\n    if (!viewElement) {\n      return false;\n    }\n    const needsRefresh = listEditing.fire(\"checkElement\", {\n      modelElement: item,\n      viewElement\n    });\n    if (needsRefresh) {\n      return true;\n    }\n    if (!item.is(\"element\", \"paragraph\") && !item.is(\"element\", \"listItem\")) {\n      return false;\n    }\n    const useBogus = shouldUseBogusParagraph(item, attributeNames, blocks);\n    if (useBogus && viewElement.is(\"element\", \"p\")) {\n      return true;\n    } else if (!useBogus && viewElement.is(\"element\", \"span\")) {\n      return true;\n    }\n    return false;\n  }\n  function doesItemWrappingRequiresRefresh(item, stack, changedItems) {\n    if (changedItems.has(item)) {\n      return false;\n    }\n    const viewElement = editing.mapper.toViewElement(item);\n    let indent = stack.length - 1;\n    for (let element = viewElement.parent; !element.is(\"editableElement\"); element = element.parent) {\n      const isListItemElement = isListItemView(element);\n      const isListElement = isListView(element);\n      if (!isListElement && !isListItemElement) {\n        continue;\n      }\n      const eventName = `checkAttributes:${isListItemElement ? \"item\" : \"list\"}`;\n      const needsRefresh = listEditing.fire(eventName, {\n        viewElement: element,\n        modelAttributes: stack[indent]\n      });\n      if (needsRefresh) {\n        break;\n      }\n      if (isListElement) {\n        indent--;\n        if (indent < 0) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n}\nfunction listItemDowncastConverter(attributeNames, strategies, model, { dataPipeline } = {}) {\n  const consumer = createAttributesConsumer(attributeNames);\n  return (evt, data, conversionApi) => {\n    const { writer, mapper, consumable } = conversionApi;\n    const listItem = data.item;\n    if (!attributeNames.includes(data.attributeKey)) {\n      return;\n    }\n    if (!consumer(listItem, consumable)) {\n      return;\n    }\n    const viewElement = findMappedViewElement(listItem, mapper, model);\n    removeCustomMarkerElements(viewElement, writer, mapper);\n    unwrapListItemBlock(viewElement, writer);\n    const viewRange = insertCustomMarkerElements(listItem, viewElement, strategies, writer, { dataPipeline });\n    wrapListItemBlock(listItem, viewRange, strategies, writer);\n  };\n}\nfunction bogusParagraphCreator(attributeNames, { dataPipeline } = {}) {\n  return (modelElement, { writer }) => {\n    if (!shouldUseBogusParagraph(modelElement, attributeNames)) {\n      return null;\n    }\n    if (!dataPipeline) {\n      return writer.createContainerElement(\"span\", { class: \"ck-list-bogus-paragraph\" });\n    }\n    const viewElement = writer.createContainerElement(\"p\");\n    writer.setCustomProperty(\"dataPipeline:transparentRendering\", true, viewElement);\n    return viewElement;\n  };\n}\nfunction findMappedViewElement(element, mapper, model) {\n  const modelRange = model.createRangeOn(element);\n  const viewRange = mapper.toViewRange(modelRange).getTrimmed();\n  return viewRange.end.nodeBefore;\n}\nfunction removeCustomMarkerElements(viewElement, viewWriter, mapper) {\n  while (viewElement.parent.is(\"attributeElement\") && viewElement.parent.getCustomProperty(\"listItemWrapper\")) {\n    viewWriter.unwrap(viewWriter.createRangeIn(viewElement.parent), viewElement.parent);\n  }\n  const viewWalker = viewWriter.createPositionBefore(viewElement).getWalker({ direction: \"backward\" });\n  const markersToRemove = [];\n  for (const { item } of viewWalker) {\n    if (item.is(\"element\") && mapper.toModelElement(item)) {\n      break;\n    }\n    if (item.is(\"element\") && item.getCustomProperty(\"listItemMarker\")) {\n      markersToRemove.push(item);\n    }\n  }\n  for (const marker of markersToRemove) {\n    viewWriter.remove(marker);\n  }\n}\nfunction insertCustomMarkerElements(listItem, viewElement, strategies, writer, { dataPipeline }) {\n  let viewRange = writer.createRangeOn(viewElement);\n  if (!isFirstBlockOfListItem(listItem)) {\n    return viewRange;\n  }\n  for (const strategy of strategies) {\n    if (strategy.scope != \"itemMarker\") {\n      continue;\n    }\n    const markerElement = strategy.createElement(writer, listItem, { dataPipeline });\n    if (!markerElement) {\n      continue;\n    }\n    writer.setCustomProperty(\"listItemMarker\", true, markerElement);\n    writer.insert(viewRange.start, markerElement);\n    viewRange = writer.createRange(writer.createPositionBefore(markerElement), writer.createPositionAfter(viewElement));\n    if (!strategy.createWrapperElement || !strategy.canWrapElement) {\n      continue;\n    }\n    const wrapper = strategy.createWrapperElement(writer, listItem, { dataPipeline });\n    writer.setCustomProperty(\"listItemWrapper\", true, wrapper);\n    if (strategy.canWrapElement(listItem)) {\n      viewRange = writer.wrap(viewRange, wrapper);\n    } else {\n      viewRange = writer.wrap(writer.createRangeOn(markerElement), wrapper);\n      viewRange = writer.createRange(viewRange.start, writer.createPositionAfter(viewElement));\n    }\n  }\n  return viewRange;\n}\nfunction unwrapListItemBlock(viewElement, viewWriter) {\n  let attributeElement = viewElement.parent;\n  while (attributeElement.is(\"attributeElement\") && [\"ul\", \"ol\", \"li\"].includes(attributeElement.name)) {\n    const parentElement = attributeElement.parent;\n    viewWriter.unwrap(viewWriter.createRangeOn(viewElement), attributeElement);\n    attributeElement = parentElement;\n  }\n}\nfunction wrapListItemBlock(listItem, viewRange, strategies, writer) {\n  if (!listItem.hasAttribute(\"listIndent\")) {\n    return;\n  }\n  const listItemIndent = listItem.getAttribute(\"listIndent\");\n  let currentListItem = listItem;\n  for (let indent = listItemIndent; indent >= 0; indent--) {\n    const listItemViewElement = createListItemElement(writer, indent, currentListItem.getAttribute(\"listItemId\"));\n    const listViewElement = createListElement(writer, indent, currentListItem.getAttribute(\"listType\"));\n    for (const strategy of strategies) {\n      if ((strategy.scope == \"list\" || strategy.scope == \"item\") && currentListItem.hasAttribute(strategy.attributeName)) {\n        strategy.setAttributeOnDowncast(writer, currentListItem.getAttribute(strategy.attributeName), strategy.scope == \"list\" ? listViewElement : listItemViewElement);\n      }\n    }\n    viewRange = writer.wrap(viewRange, listItemViewElement);\n    viewRange = writer.wrap(viewRange, listViewElement);\n    if (indent == 0) {\n      break;\n    }\n    currentListItem = ListWalker.first(currentListItem, { lowerIndent: true });\n    if (!currentListItem) {\n      break;\n    }\n  }\n}\nfunction createAttributesConsumer(attributeNames) {\n  return (node, consumable) => {\n    const events = [];\n    for (const attributeName of attributeNames) {\n      if (node.hasAttribute(attributeName)) {\n        events.push(`attribute:${attributeName}`);\n      }\n    }\n    if (!events.every((event) => consumable.test(node, event) !== false)) {\n      return false;\n    }\n    events.forEach((event) => consumable.consume(node, event));\n    return true;\n  };\n}\nfunction shouldUseBogusParagraph(item, attributeNames, blocks = getAllListItemBlocks(item)) {\n  if (!isListItemBlock(item)) {\n    return false;\n  }\n  for (const attributeKey of item.getAttributeKeys()) {\n    if (attributeKey.startsWith(\"selection:\")) {\n      continue;\n    }\n    if (!attributeNames.includes(attributeKey)) {\n      return false;\n    }\n  }\n  return blocks.length < 2;\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listediting.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-list/theme/documentlist.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-list/theme/list.css\";\nvar LIST_BASE_ATTRIBUTES = [\"listType\", \"listIndent\", \"listItemId\"];\nvar ListEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ListEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Enter, Delete, ListUtils, ClipboardPipeline];\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._downcastStrategies = [];\n    editor.config.define(\"list.multiBlock\", true);\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const model = editor.model;\n    const multiBlock = editor.config.get(\"list.multiBlock\");\n    if (editor.plugins.has(\"LegacyListEditing\")) {\n      throw new CKEditorError(\"list-feature-conflict\", this, { conflictPlugin: \"LegacyListEditing\" });\n    }\n    model.schema.register(\"$listItem\", { allowAttributes: LIST_BASE_ATTRIBUTES });\n    if (multiBlock) {\n      model.schema.extend(\"$container\", { allowAttributesOf: \"$listItem\" });\n      model.schema.extend(\"$block\", { allowAttributesOf: \"$listItem\" });\n      model.schema.extend(\"$blockObject\", { allowAttributesOf: \"$listItem\" });\n    } else {\n      model.schema.register(\"listItem\", {\n        inheritAllFrom: \"$block\",\n        allowAttributesOf: \"$listItem\"\n      });\n    }\n    for (const attribute of LIST_BASE_ATTRIBUTES) {\n      model.schema.setAttributeProperties(attribute, {\n        copyOnReplace: true\n      });\n    }\n    editor.commands.add(\"numberedList\", new ListCommand(editor, \"numbered\"));\n    editor.commands.add(\"bulletedList\", new ListCommand(editor, \"bulleted\"));\n    editor.commands.add(\"indentList\", new ListIndentCommand(editor, \"forward\"));\n    editor.commands.add(\"outdentList\", new ListIndentCommand(editor, \"backward\"));\n    editor.commands.add(\"splitListItemBefore\", new ListSplitCommand(editor, \"before\"));\n    editor.commands.add(\"splitListItemAfter\", new ListSplitCommand(editor, \"after\"));\n    if (multiBlock) {\n      editor.commands.add(\"mergeListItemBackward\", new ListMergeCommand(editor, \"backward\"));\n      editor.commands.add(\"mergeListItemForward\", new ListMergeCommand(editor, \"forward\"));\n    }\n    this._setupDeleteIntegration();\n    this._setupEnterIntegration();\n    this._setupTabIntegration();\n    this._setupClipboardIntegration();\n  }\n  /**\n   * @inheritDoc\n   */\n  afterInit() {\n    const editor = this.editor;\n    const commands = editor.commands;\n    const indent = commands.get(\"indent\");\n    const outdent = commands.get(\"outdent\");\n    if (indent) {\n      indent.registerChildCommand(commands.get(\"indentList\"), { priority: \"high\" });\n    }\n    if (outdent) {\n      outdent.registerChildCommand(commands.get(\"outdentList\"), { priority: \"lowest\" });\n    }\n    this._setupModelPostFixing();\n    this._setupConversion();\n  }\n  /**\n   * Registers a downcast strategy.\n   *\n   * **Note**: Strategies must be registered in the `Plugin#init()` phase so that it can be applied\n   * in the `ListEditing#afterInit()`.\n   *\n   * @param strategy The downcast strategy to register.\n   */\n  registerDowncastStrategy(strategy) {\n    this._downcastStrategies.push(strategy);\n  }\n  /**\n   * Returns list of model attribute names that should affect downcast conversion.\n   */\n  getListAttributeNames() {\n    return [\n      ...LIST_BASE_ATTRIBUTES,\n      ...this._downcastStrategies.map((strategy) => strategy.attributeName)\n    ];\n  }\n  /**\n   * Attaches the listener to the {@link module:engine/view/document~Document#event:delete} event and handles backspace/delete\n   * keys in and around document lists.\n   */\n  _setupDeleteIntegration() {\n    const editor = this.editor;\n    const mergeBackwardCommand = editor.commands.get(\"mergeListItemBackward\");\n    const mergeForwardCommand = editor.commands.get(\"mergeListItemForward\");\n    this.listenTo(editor.editing.view.document, \"delete\", (evt, data) => {\n      const selection = editor.model.document.selection;\n      if (getSelectedBlockObject(editor.model)) {\n        return;\n      }\n      editor.model.change(() => {\n        const firstPosition = selection.getFirstPosition();\n        if (selection.isCollapsed && data.direction == \"backward\") {\n          if (!firstPosition.isAtStart) {\n            return;\n          }\n          const positionParent = firstPosition.parent;\n          if (!isListItemBlock(positionParent)) {\n            return;\n          }\n          const previousBlock = ListWalker.first(positionParent, {\n            sameAttributes: \"listType\",\n            sameIndent: true\n          });\n          if (!previousBlock && positionParent.getAttribute(\"listIndent\") === 0) {\n            if (!isLastBlockOfListItem(positionParent)) {\n              editor.execute(\"splitListItemAfter\");\n            }\n            editor.execute(\"outdentList\");\n          } else {\n            if (!mergeBackwardCommand || !mergeBackwardCommand.isEnabled) {\n              return;\n            }\n            mergeBackwardCommand.execute({\n              shouldMergeOnBlocksContentLevel: shouldMergeOnBlocksContentLevel(editor.model, \"backward\")\n            });\n          }\n          data.preventDefault();\n          evt.stop();\n        } else {\n          if (selection.isCollapsed && !selection.getLastPosition().isAtEnd) {\n            return;\n          }\n          if (!mergeForwardCommand || !mergeForwardCommand.isEnabled) {\n            return;\n          }\n          mergeForwardCommand.execute({\n            shouldMergeOnBlocksContentLevel: shouldMergeOnBlocksContentLevel(editor.model, \"forward\")\n          });\n          data.preventDefault();\n          evt.stop();\n        }\n      });\n    }, { context: \"li\" });\n  }\n  /**\n   * Attaches a listener to the {@link module:engine/view/document~Document#event:enter} event and handles enter key press\n   * in document lists.\n   */\n  _setupEnterIntegration() {\n    const editor = this.editor;\n    const model = editor.model;\n    const commands = editor.commands;\n    const enterCommand = commands.get(\"enter\");\n    this.listenTo(editor.editing.view.document, \"enter\", (evt, data) => {\n      const doc = model.document;\n      const positionParent = doc.selection.getFirstPosition().parent;\n      if (doc.selection.isCollapsed && isListItemBlock(positionParent) && positionParent.isEmpty && !data.isSoft) {\n        const isFirstBlock = isFirstBlockOfListItem(positionParent);\n        const isLastBlock = isLastBlockOfListItem(positionParent);\n        if (isFirstBlock && isLastBlock) {\n          editor.execute(\"outdentList\");\n          data.preventDefault();\n          evt.stop();\n        } else if (isFirstBlock && !isLastBlock) {\n          editor.execute(\"splitListItemAfter\");\n          data.preventDefault();\n          evt.stop();\n        } else if (isLastBlock) {\n          editor.execute(\"splitListItemBefore\");\n          data.preventDefault();\n          evt.stop();\n        }\n      }\n    }, { context: \"li\" });\n    this.listenTo(enterCommand, \"afterExecute\", () => {\n      const splitCommand = commands.get(\"splitListItemBefore\");\n      splitCommand.refresh();\n      if (!splitCommand.isEnabled) {\n        return;\n      }\n      const doc = editor.model.document;\n      const positionParent = doc.selection.getLastPosition().parent;\n      const listItemBlocks = getAllListItemBlocks(positionParent);\n      if (listItemBlocks.length === 2) {\n        splitCommand.execute();\n      }\n    });\n  }\n  /**\n   * Attaches a listener to the {@link module:engine/view/document~Document#event:tab} event and handles tab key and tab+shift keys\n   * presses in document lists.\n   */\n  _setupTabIntegration() {\n    const editor = this.editor;\n    this.listenTo(editor.editing.view.document, \"tab\", (evt, data) => {\n      const commandName = data.shiftKey ? \"outdentList\" : \"indentList\";\n      const command = this.editor.commands.get(commandName);\n      if (command.isEnabled) {\n        editor.execute(commandName);\n        data.stopPropagation();\n        data.preventDefault();\n        evt.stop();\n      }\n    }, { context: \"li\" });\n  }\n  /**\n   * Registers the conversion helpers for the document-list feature.\n   */\n  _setupConversion() {\n    const editor = this.editor;\n    const model = editor.model;\n    const attributeNames = this.getListAttributeNames();\n    const multiBlock = editor.config.get(\"list.multiBlock\");\n    const elementName = multiBlock ? \"paragraph\" : \"listItem\";\n    editor.conversion.for(\"upcast\").elementToElement({\n      view: \"li\",\n      model: (viewElement, { writer }) => writer.createElement(elementName, { listType: \"\" })\n    }).elementToElement({\n      view: \"p\",\n      model: (viewElement, { writer }) => {\n        if (viewElement.parent && viewElement.parent.is(\"element\", \"li\")) {\n          return writer.createElement(elementName, { listType: \"\" });\n        }\n        return null;\n      },\n      converterPriority: \"high\"\n    }).add((dispatcher) => {\n      dispatcher.on(\"element:li\", listItemUpcastConverter());\n      dispatcher.on(\"element:ul\", listUpcastCleanList(), { priority: \"high\" });\n      dispatcher.on(\"element:ol\", listUpcastCleanList(), { priority: \"high\" });\n    });\n    if (!multiBlock) {\n      editor.conversion.for(\"downcast\").elementToElement({\n        model: \"listItem\",\n        view: \"p\"\n      });\n    }\n    editor.conversion.for(\"editingDowncast\").elementToElement({\n      model: elementName,\n      view: bogusParagraphCreator(attributeNames),\n      converterPriority: \"high\"\n    }).add((dispatcher) => {\n      dispatcher.on(\"attribute\", listItemDowncastConverter(attributeNames, this._downcastStrategies, model));\n    });\n    editor.conversion.for(\"dataDowncast\").elementToElement({\n      model: elementName,\n      view: bogusParagraphCreator(attributeNames, { dataPipeline: true }),\n      converterPriority: \"high\"\n    }).add((dispatcher) => {\n      dispatcher.on(\"attribute\", listItemDowncastConverter(attributeNames, this._downcastStrategies, model, { dataPipeline: true }));\n    });\n    this.listenTo(model.document, \"change:data\", reconvertItemsOnDataChange(model, editor.editing, attributeNames, this), { priority: \"high\" });\n    this.on(\"checkAttributes:item\", (evt, { viewElement, modelAttributes }) => {\n      if (viewElement.id != modelAttributes.listItemId) {\n        evt.return = true;\n        evt.stop();\n      }\n    });\n    this.on(\"checkAttributes:list\", (evt, { viewElement, modelAttributes }) => {\n      if (viewElement.name != getViewElementNameForListType(modelAttributes.listType) || viewElement.id != getViewElementIdForListType(modelAttributes.listType, modelAttributes.listIndent)) {\n        evt.return = true;\n        evt.stop();\n      }\n    });\n  }\n  /**\n   * Registers model post-fixers.\n   */\n  _setupModelPostFixing() {\n    const model = this.editor.model;\n    const attributeNames = this.getListAttributeNames();\n    model.document.registerPostFixer((writer) => modelChangePostFixer(model, writer, attributeNames, this));\n    this.on(\"postFixer\", (evt, { listNodes, writer }) => {\n      evt.return = fixListIndents(listNodes, writer) || evt.return;\n    }, { priority: \"high\" });\n    this.on(\"postFixer\", (evt, { listNodes, writer, seenIds }) => {\n      evt.return = fixListItemIds(listNodes, seenIds, writer) || evt.return;\n    }, { priority: \"high\" });\n  }\n  /**\n   * Integrates the feature with the clipboard via {@link module:engine/model/model~Model#insertContent} and\n   * {@link module:engine/model/model~Model#getSelectedContent}.\n   */\n  _setupClipboardIntegration() {\n    const model = this.editor.model;\n    const clipboardPipeline = this.editor.plugins.get(\"ClipboardPipeline\");\n    this.listenTo(model, \"insertContent\", createModelIndentPasteFixer(model), { priority: \"high\" });\n    this.listenTo(clipboardPipeline, \"outputTransformation\", (evt, data) => {\n      model.change((writer) => {\n        const allContentChildren = Array.from(data.content.getChildren());\n        const lastItem = allContentChildren[allContentChildren.length - 1];\n        if (allContentChildren.length > 1 && lastItem.is(\"element\") && lastItem.isEmpty) {\n          const contentChildrenExceptLastItem = allContentChildren.slice(0, -1);\n          if (contentChildrenExceptLastItem.every(isListItemBlock)) {\n            writer.remove(lastItem);\n          }\n        }\n        if (data.method == \"copy\" || data.method == \"cut\") {\n          const allChildren = Array.from(data.content.getChildren());\n          const isSingleListItemSelected = isSingleListItem(allChildren);\n          if (isSingleListItemSelected) {\n            removeListAttributes(allChildren, writer);\n          }\n        }\n      });\n    });\n  }\n};\nfunction modelChangePostFixer(model, writer, attributeNames, listEditing) {\n  const changes = model.document.differ.getChanges();\n  const itemToListHead = /* @__PURE__ */ new Map();\n  const multiBlock = listEditing.editor.config.get(\"list.multiBlock\");\n  let applied = false;\n  for (const entry of changes) {\n    if (entry.type == \"insert\" && entry.name != \"$text\") {\n      const item = entry.position.nodeAfter;\n      if (!model.schema.checkAttribute(item, \"listItemId\")) {\n        for (const attributeName of Array.from(item.getAttributeKeys())) {\n          if (attributeNames.includes(attributeName)) {\n            writer.removeAttribute(attributeName, item);\n            applied = true;\n          }\n        }\n      }\n      findAndAddListHeadToMap(entry.position, itemToListHead);\n      if (!entry.attributes.has(\"listItemId\")) {\n        findAndAddListHeadToMap(entry.position.getShiftedBy(entry.length), itemToListHead);\n      }\n      for (const { item: innerItem, previousPosition } of model.createRangeIn(item)) {\n        if (isListItemBlock(innerItem)) {\n          findAndAddListHeadToMap(previousPosition, itemToListHead);\n        }\n      }\n    } else if (entry.type == \"remove\") {\n      findAndAddListHeadToMap(entry.position, itemToListHead);\n    } else if (entry.type == \"attribute\" && attributeNames.includes(entry.attributeKey)) {\n      findAndAddListHeadToMap(entry.range.start, itemToListHead);\n      if (entry.attributeNewValue === null) {\n        findAndAddListHeadToMap(entry.range.start.getShiftedBy(1), itemToListHead);\n      }\n    }\n    if (!multiBlock && entry.type == \"attribute\" && LIST_BASE_ATTRIBUTES.includes(entry.attributeKey)) {\n      const element = entry.range.start.nodeAfter;\n      if (entry.attributeNewValue === null && element && element.is(\"element\", \"listItem\")) {\n        writer.rename(element, \"paragraph\");\n        applied = true;\n      } else if (entry.attributeOldValue === null && element && element.is(\"element\") && element.name != \"listItem\") {\n        writer.rename(element, \"listItem\");\n        applied = true;\n      }\n    }\n  }\n  const seenIds = /* @__PURE__ */ new Set();\n  for (const listHead of itemToListHead.values()) {\n    applied = listEditing.fire(\"postFixer\", {\n      listNodes: new ListBlocksIterable(listHead),\n      listHead,\n      writer,\n      seenIds\n    }) || applied;\n  }\n  return applied;\n}\nfunction createModelIndentPasteFixer(model) {\n  return (evt, [content, selectable]) => {\n    const items = content.is(\"documentFragment\") ? Array.from(content.getChildren()) : [content];\n    if (!items.length) {\n      return;\n    }\n    const selection = selectable ? model.createSelection(selectable) : model.document.selection;\n    const position = selection.getFirstPosition();\n    let refItem;\n    if (isListItemBlock(position.parent)) {\n      refItem = position.parent;\n    } else if (isListItemBlock(position.nodeBefore)) {\n      refItem = position.nodeBefore;\n    } else {\n      return;\n    }\n    model.change((writer) => {\n      const refType = refItem.getAttribute(\"listType\");\n      const refIndent = refItem.getAttribute(\"listIndent\");\n      const firstElementIndent = items[0].getAttribute(\"listIndent\") || 0;\n      const indentDiff = Math.max(refIndent - firstElementIndent, 0);\n      for (const item of items) {\n        const isListItem = isListItemBlock(item);\n        if (refItem.is(\"element\", \"listItem\") && item.is(\"element\", \"paragraph\")) {\n          writer.rename(item, \"listItem\");\n        }\n        writer.setAttributes({\n          listIndent: (isListItem ? item.getAttribute(\"listIndent\") : 0) + indentDiff,\n          listItemId: isListItem ? item.getAttribute(\"listItemId\") : ListItemUid.next(),\n          listType: refType\n        }, item);\n      }\n    });\n  };\n}\nfunction shouldMergeOnBlocksContentLevel(model, direction) {\n  const selection = model.document.selection;\n  if (!selection.isCollapsed) {\n    return !getSelectedBlockObject(model);\n  }\n  if (direction === \"forward\") {\n    return true;\n  }\n  const firstPosition = selection.getFirstPosition();\n  const positionParent = firstPosition.parent;\n  const previousSibling = positionParent.previousSibling;\n  if (model.schema.isObject(previousSibling)) {\n    return false;\n  }\n  if (previousSibling.isEmpty) {\n    return true;\n  }\n  return isSingleListItem([positionParent, previousSibling]);\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/utils.js\nfunction createUIComponent(editor, commandName, label, icon) {\n  editor.ui.componentFactory.add(commandName, (locale) => {\n    const command = editor.commands.get(commandName);\n    const buttonView = new ButtonView(locale);\n    buttonView.set({\n      label,\n      icon,\n      tooltip: true,\n      isToggleable: true\n    });\n    buttonView.bind(\"isOn\", \"isEnabled\").to(command, \"value\", \"isEnabled\");\n    buttonView.on(\"execute\", () => {\n      editor.execute(commandName);\n      editor.editing.view.focus();\n    });\n    return buttonView;\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-list/src/list/listui.js\nvar ListUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"ListUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const t = this.editor.t;\n    createUIComponent(this.editor, \"numberedList\", t(\"Numbered List\"), icons.numberedList);\n    createUIComponent(this.editor, \"bulletedList\", t(\"Bulleted List\"), icons.bulletedList);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-list/src/list.js\nvar List = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [ListEditing, ListUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"List\";\n  }\n};\nexport {\n  List as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-list/src/list/utils/listwalker.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/utils/model.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listindentcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listmergecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listsplitcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listutils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/utils/view.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/utils/postfixers.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/converters.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list/listui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-list/src/list.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-list_src_list.js.map\n","import \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ColorSelectorView,\n  Model,\n  addListToDropdown,\n  createDropdown,\n  focusChildOnDropdownOpen,\n  getLocalizedColorOptions,\n  normalizeColorOptions\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  Collection,\n  Command,\n  Plugin,\n  addBackgroundRules,\n  isLength,\n  isPercentage\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontcommand.js\nvar FontCommand = class extends Command {\n  /**\n   * Creates an instance of the command.\n   *\n   * @param editor Editor instance.\n   * @param attributeKey The name of a model attribute on which this command operates.\n   */\n  constructor(editor, attributeKey) {\n    super(editor);\n    this.attributeKey = attributeKey;\n  }\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const doc = model.document;\n    this.value = doc.selection.getAttribute(this.attributeKey);\n    this.isEnabled = model.schema.checkAttributeInSelection(doc.selection, this.attributeKey);\n  }\n  /**\n   * Executes the command. Applies the `value` of the {@link #attributeKey} to the selection.\n   * If no `value` is passed, it removes the attribute from the selection.\n   *\n   * @param options Options for the executed command.\n   * @param options.value The value to apply.\n   * @fires execute\n   */\n  execute(options = {}) {\n    const model = this.editor.model;\n    const document = model.document;\n    const selection = document.selection;\n    const value = options.value;\n    const batch = options.batch;\n    const updateAttribute = (writer) => {\n      if (selection.isCollapsed) {\n        if (value) {\n          writer.setSelectionAttribute(this.attributeKey, value);\n        } else {\n          writer.removeSelectionAttribute(this.attributeKey);\n        }\n      } else {\n        const ranges = model.schema.getValidRanges(selection.getRanges(), this.attributeKey);\n        for (const range of ranges) {\n          if (value) {\n            writer.setAttribute(this.attributeKey, value, range);\n          } else {\n            writer.removeAttribute(this.attributeKey, range);\n          }\n        }\n      }\n    };\n    if (batch) {\n      model.enqueueChange(batch, (writer) => {\n        updateAttribute(writer);\n      });\n    } else {\n      model.change((writer) => {\n        updateAttribute(writer);\n      });\n    }\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/utils.js\nvar FONT_SIZE = \"fontSize\";\nvar FONT_FAMILY = \"fontFamily\";\nvar FONT_COLOR = \"fontColor\";\nvar FONT_BACKGROUND_COLOR = \"fontBackgroundColor\";\nfunction buildDefinition(modelAttributeKey, options) {\n  const definition = {\n    model: {\n      key: modelAttributeKey,\n      values: []\n    },\n    view: {},\n    upcastAlso: {}\n  };\n  for (const option of options) {\n    definition.model.values.push(option.model);\n    definition.view[option.model] = option.view;\n    if (option.upcastAlso) {\n      definition.upcastAlso[option.model] = option.upcastAlso;\n    }\n  }\n  return definition;\n}\nfunction renderUpcastAttribute(styleAttr) {\n  return (viewElement) => normalizeColorCode(viewElement.getStyle(styleAttr));\n}\nfunction renderDowncastElement(styleAttr) {\n  return (modelAttributeValue, { writer }) => writer.createAttributeElement(\"span\", {\n    style: `${styleAttr}:${modelAttributeValue}`\n  }, { priority: 7 });\n}\nfunction addColorSelectorToDropdown({ dropdownView, colors, columns, removeButtonLabel, colorPickerLabel, documentColorsLabel, documentColorsCount, colorPickerViewConfig }) {\n  const locale = dropdownView.locale;\n  const colorSelectorView = new ColorSelectorView(locale, {\n    colors,\n    columns,\n    removeButtonLabel,\n    colorPickerLabel,\n    documentColorsLabel,\n    documentColorsCount,\n    colorPickerViewConfig\n  });\n  dropdownView.colorSelectorView = colorSelectorView;\n  dropdownView.panelView.children.add(colorSelectorView);\n  return colorSelectorView;\n}\nfunction normalizeColorCode(value) {\n  return value.replace(/\\s/g, \"\");\n}\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilycommand.js\nvar FontFamilyCommand = class extends FontCommand {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor, FONT_FAMILY);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontfamily/utils.js\nfunction normalizeOptions(configuredOptions) {\n  return configuredOptions.map(getOptionDefinition).filter((option) => option !== void 0);\n}\nfunction getOptionDefinition(option) {\n  if (typeof option === \"object\") {\n    return option;\n  }\n  if (option === \"default\") {\n    return {\n      title: \"Default\",\n      model: void 0\n    };\n  }\n  if (typeof option !== \"string\") {\n    return void 0;\n  }\n  return generateFontPreset(option);\n}\nfunction generateFontPreset(fontDefinition) {\n  const fontNames = fontDefinition.replace(/\"|'/g, \"\").split(\",\");\n  const firstFontName = fontNames[0];\n  const cssFontNames = fontNames.map(normalizeFontNameForCSS).join(\", \");\n  return {\n    title: firstFontName,\n    model: cssFontNames,\n    view: {\n      name: \"span\",\n      styles: {\n        \"font-family\": cssFontNames\n      },\n      priority: 7\n    }\n  };\n}\nfunction normalizeFontNameForCSS(fontName) {\n  fontName = fontName.trim();\n  if (fontName.indexOf(\" \") > 0) {\n    fontName = `'${fontName}'`;\n  }\n  return fontName;\n}\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyediting.js\nvar FontFamilyEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontFamilyEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(FONT_FAMILY, {\n      options: [\n        \"default\",\n        \"Arial, Helvetica, sans-serif\",\n        \"Courier New, Courier, monospace\",\n        \"Georgia, serif\",\n        \"Lucida Sans Unicode, Lucida Grande, sans-serif\",\n        \"Tahoma, Geneva, sans-serif\",\n        \"Times New Roman, Times, serif\",\n        \"Trebuchet MS, Helvetica, sans-serif\",\n        \"Verdana, Geneva, sans-serif\"\n      ],\n      supportAllValues: false\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.model.schema.extend(\"$text\", { allowAttributes: FONT_FAMILY });\n    editor.model.schema.setAttributeProperties(FONT_FAMILY, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n    const options = normalizeOptions(editor.config.get(\"fontFamily.options\")).filter((item) => item.model);\n    const definition = buildDefinition(FONT_FAMILY, options);\n    if (editor.config.get(\"fontFamily.supportAllValues\")) {\n      this._prepareAnyValueConverters();\n      this._prepareCompatibilityConverter();\n    } else {\n      editor.conversion.attributeToElement(definition);\n    }\n    editor.commands.add(FONT_FAMILY, new FontFamilyCommand(editor));\n  }\n  /**\n   * These converters enable keeping any value found as `style=\"font-family: *\"` as a value of an attribute on a text even\n   * if it is not defined in the plugin configuration.\n   */\n  _prepareAnyValueConverters() {\n    const editor = this.editor;\n    editor.conversion.for(\"downcast\").attributeToElement({\n      model: FONT_FAMILY,\n      view: (attributeValue, { writer }) => {\n        return writer.createAttributeElement(\"span\", { style: \"font-family:\" + attributeValue }, { priority: 7 });\n      }\n    });\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      model: {\n        key: FONT_FAMILY,\n        value: (viewElement) => viewElement.getStyle(\"font-family\")\n      },\n      view: {\n        name: \"span\",\n        styles: {\n          \"font-family\": /.*/\n        }\n      }\n    });\n  }\n  /**\n   * Adds support for legacy `<font face=\"..\">` formatting.\n   */\n  _prepareCompatibilityConverter() {\n    const editor = this.editor;\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"font\",\n        attributes: {\n          \"face\": /.*/\n        }\n      },\n      model: {\n        key: FONT_FAMILY,\n        value: (viewElement) => viewElement.getAttribute(\"face\")\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyui.js\nimport fontFamilyIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-family.svg\";\nvar FontFamilyUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontFamilyUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    const options = this._getLocalizedOptions();\n    const command = editor.commands.get(FONT_FAMILY);\n    const accessibleLabel = t(\"Font Family\");\n    editor.ui.componentFactory.add(FONT_FAMILY, (locale) => {\n      const dropdownView = createDropdown(locale);\n      addListToDropdown(dropdownView, () => _prepareListOptions(options, command), {\n        role: \"menu\",\n        ariaLabel: accessibleLabel\n      });\n      dropdownView.buttonView.set({\n        label: accessibleLabel,\n        icon: fontFamilyIcon,\n        tooltip: true\n      });\n      dropdownView.extendTemplate({\n        attributes: {\n          class: \"ck-font-family-dropdown\"\n        }\n      });\n      dropdownView.bind(\"isEnabled\").to(command);\n      this.listenTo(dropdownView, \"execute\", (evt) => {\n        editor.execute(evt.source.commandName, { value: evt.source.commandParam });\n        editor.editing.view.focus();\n      });\n      return dropdownView;\n    });\n  }\n  /**\n   * Returns options as defined in `config.fontFamily.options` but processed to account for\n   * editor localization, i.e. to display {@link module:font/fontconfig~FontFamilyOption}\n   * in the correct language.\n   *\n   * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n   * when the user configuration is defined because the editor does not exist yet.\n   */\n  _getLocalizedOptions() {\n    const editor = this.editor;\n    const t = editor.t;\n    const options = normalizeOptions(editor.config.get(FONT_FAMILY).options);\n    return options.map((option) => {\n      if (option.title === \"Default\") {\n        option.title = t(\"Default\");\n      }\n      return option;\n    });\n  }\n};\nfunction _prepareListOptions(options, command) {\n  const itemDefinitions = new Collection();\n  for (const option of options) {\n    const def = {\n      type: \"button\",\n      model: new Model({\n        commandName: FONT_FAMILY,\n        commandParam: option.model,\n        label: option.title,\n        role: \"menuitemradio\",\n        withText: true\n      })\n    };\n    def.model.bind(\"isOn\").to(command, \"value\", (value) => {\n      if (value === option.model) {\n        return true;\n      }\n      if (!value || !option.model) {\n        return false;\n      }\n      return value.split(\",\")[0].replace(/'/g, \"\").toLowerCase() === option.model.toLowerCase();\n    });\n    if (option.view && typeof option.view !== \"string\" && option.view.styles) {\n      def.model.set(\"labelStyle\", `font-family: ${option.view.styles[\"font-family\"]}`);\n    }\n    itemDefinitions.add(def);\n  }\n  return itemDefinitions;\n}\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontfamily.js\nvar FontFamily = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FontFamilyEditing, FontFamilyUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontFamily\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizecommand.js\nvar FontSizeCommand = class extends FontCommand {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor, FONT_SIZE);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontsize/utils.js\nfunction normalizeOptions2(configuredOptions) {\n  return configuredOptions.map((item) => getOptionDefinition2(item)).filter((option) => option !== void 0);\n}\nvar namedPresets = {\n  get tiny() {\n    return {\n      title: \"Tiny\",\n      model: \"tiny\",\n      view: {\n        name: \"span\",\n        classes: \"text-tiny\",\n        priority: 7\n      }\n    };\n  },\n  get small() {\n    return {\n      title: \"Small\",\n      model: \"small\",\n      view: {\n        name: \"span\",\n        classes: \"text-small\",\n        priority: 7\n      }\n    };\n  },\n  get big() {\n    return {\n      title: \"Big\",\n      model: \"big\",\n      view: {\n        name: \"span\",\n        classes: \"text-big\",\n        priority: 7\n      }\n    };\n  },\n  get huge() {\n    return {\n      title: \"Huge\",\n      model: \"huge\",\n      view: {\n        name: \"span\",\n        classes: \"text-huge\",\n        priority: 7\n      }\n    };\n  }\n};\nfunction getOptionDefinition2(option) {\n  if (typeof option === \"number\") {\n    option = String(option);\n  }\n  if (typeof option === \"object\" && isFullItemDefinition(option)) {\n    return attachPriority(option);\n  }\n  const preset = findPreset(option);\n  if (preset) {\n    return attachPriority(preset);\n  }\n  if (option === \"default\") {\n    return {\n      model: void 0,\n      title: \"Default\"\n    };\n  }\n  if (isNumericalDefinition(option)) {\n    return void 0;\n  }\n  return generatePixelPreset(option);\n}\nfunction generatePixelPreset(definition) {\n  if (typeof definition === \"string\") {\n    definition = {\n      title: definition,\n      model: `${parseFloat(definition)}px`\n    };\n  }\n  definition.view = {\n    name: \"span\",\n    styles: {\n      \"font-size\": definition.model\n    }\n  };\n  return attachPriority(definition);\n}\nfunction attachPriority(definition) {\n  if (definition.view && typeof definition.view !== \"string\" && !definition.view.priority) {\n    definition.view.priority = 7;\n  }\n  return definition;\n}\nfunction findPreset(definition) {\n  return typeof definition === \"string\" ? namedPresets[definition] : namedPresets[definition.model];\n}\nfunction isFullItemDefinition(definition) {\n  return definition.title && definition.model && definition.view;\n}\nfunction isNumericalDefinition(definition) {\n  let numberValue;\n  if (typeof definition === \"object\") {\n    if (!definition.model) {\n      throw new CKEditorError(\"font-size-invalid-definition\", null, definition);\n    } else {\n      numberValue = parseFloat(definition.model);\n    }\n  } else {\n    numberValue = parseFloat(definition);\n  }\n  return isNaN(numberValue);\n}\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizeediting.js\nvar styleFontSize = [\n  \"x-small\",\n  \"x-small\",\n  \"small\",\n  \"medium\",\n  \"large\",\n  \"x-large\",\n  \"xx-large\",\n  \"xxx-large\"\n];\nvar FontSizeEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontSizeEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(FONT_SIZE, {\n      options: [\n        \"tiny\",\n        \"small\",\n        \"default\",\n        \"big\",\n        \"huge\"\n      ],\n      supportAllValues: false\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    editor.model.schema.extend(\"$text\", { allowAttributes: FONT_SIZE });\n    editor.model.schema.setAttributeProperties(FONT_SIZE, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n    const supportAllValues = editor.config.get(\"fontSize.supportAllValues\");\n    const options = normalizeOptions2(this.editor.config.get(\"fontSize.options\")).filter((item) => item.model);\n    const definition = buildDefinition(FONT_SIZE, options);\n    if (supportAllValues) {\n      this._prepareAnyValueConverters(definition);\n      this._prepareCompatibilityConverter();\n    } else {\n      editor.conversion.attributeToElement(definition);\n    }\n    editor.commands.add(FONT_SIZE, new FontSizeCommand(editor));\n  }\n  /**\n   * These converters enable keeping any value found as `style=\"font-size: *\"` as a value of an attribute on a text even\n   * if it is not defined in the plugin configuration.\n   *\n   * @param definition Converter definition out of input data.\n   */\n  _prepareAnyValueConverters(definition) {\n    const editor = this.editor;\n    const presets = definition.model.values.filter((value) => {\n      return !isLength(String(value)) && !isPercentage(String(value));\n    });\n    if (presets.length) {\n      throw new CKEditorError(\"font-size-invalid-use-of-named-presets\", null, { presets });\n    }\n    editor.conversion.for(\"downcast\").attributeToElement({\n      model: FONT_SIZE,\n      view: (attributeValue, { writer }) => {\n        if (!attributeValue) {\n          return;\n        }\n        return writer.createAttributeElement(\"span\", { style: \"font-size:\" + attributeValue }, { priority: 7 });\n      }\n    });\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      model: {\n        key: FONT_SIZE,\n        value: (viewElement) => viewElement.getStyle(\"font-size\")\n      },\n      view: {\n        name: \"span\",\n        styles: {\n          \"font-size\": /.*/\n        }\n      }\n    });\n  }\n  /**\n   * Adds support for legacy `<font size=\"..\">` formatting.\n   */\n  _prepareCompatibilityConverter() {\n    const editor = this.editor;\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"font\",\n        attributes: {\n          // Documentation mentions sizes from 1 to 7. To handle old content we support all values\n          // up to 999 but clamp it to the valid range. Why 999? It should cover accidental values\n          // similar to percentage, e.g. 100%, 200% which could be the usual mistake for font size.\n          \"size\": /^[+-]?\\d{1,3}$/\n        }\n      },\n      model: {\n        key: FONT_SIZE,\n        value: (viewElement) => {\n          const value = viewElement.getAttribute(\"size\");\n          const isRelative = value[0] === \"-\" || value[0] === \"+\";\n          let size = parseInt(value, 10);\n          if (isRelative) {\n            size = 3 + size;\n          }\n          const maxSize = styleFontSize.length - 1;\n          const clampedSize = Math.min(Math.max(size, 0), maxSize);\n          return styleFontSize[clampedSize];\n        }\n      }\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontsize/fontsizeui.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-font/theme/fontsize.css\";\nimport fontSizeIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-size.svg\";\nvar FontSizeUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontSizeUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const t = editor.t;\n    const options = this._getLocalizedOptions();\n    const command = editor.commands.get(FONT_SIZE);\n    const accessibleLabel = t(\"Font Size\");\n    editor.ui.componentFactory.add(FONT_SIZE, (locale) => {\n      const dropdownView = createDropdown(locale);\n      addListToDropdown(dropdownView, () => _prepareListOptions2(options, command), {\n        role: \"menu\",\n        ariaLabel: accessibleLabel\n      });\n      dropdownView.buttonView.set({\n        label: accessibleLabel,\n        icon: fontSizeIcon,\n        tooltip: true\n      });\n      dropdownView.extendTemplate({\n        attributes: {\n          class: [\n            \"ck-font-size-dropdown\"\n          ]\n        }\n      });\n      dropdownView.bind(\"isEnabled\").to(command);\n      this.listenTo(dropdownView, \"execute\", (evt) => {\n        editor.execute(evt.source.commandName, { value: evt.source.commandParam });\n        editor.editing.view.focus();\n      });\n      return dropdownView;\n    });\n  }\n  /**\n   * Returns options as defined in `config.fontSize.options` but processed to account for\n   * editor localization, i.e. to display {@link module:font/fontconfig~FontSizeOption}\n   * in the correct language.\n   *\n   * Note: The reason behind this method is that there is no way to use {@link module:utils/locale~Locale#t}\n   * when the user configuration is defined because the editor does not exist yet.\n   */\n  _getLocalizedOptions() {\n    const editor = this.editor;\n    const t = editor.t;\n    const localizedTitles = {\n      Default: t(\"Default\"),\n      Tiny: t(\"Tiny\"),\n      Small: t(\"Small\"),\n      Big: t(\"Big\"),\n      Huge: t(\"Huge\")\n    };\n    const options = normalizeOptions2(editor.config.get(FONT_SIZE).options);\n    return options.map((option) => {\n      const title = localizedTitles[option.title];\n      if (title && title != option.title) {\n        option = Object.assign({}, option, { title });\n      }\n      return option;\n    });\n  }\n};\nfunction _prepareListOptions2(options, command) {\n  const itemDefinitions = new Collection();\n  for (const option of options) {\n    const def = {\n      type: \"button\",\n      model: new Model({\n        commandName: FONT_SIZE,\n        commandParam: option.model,\n        label: option.title,\n        class: \"ck-fontsize-option\",\n        role: \"menuitemradio\",\n        withText: true\n      })\n    };\n    if (option.view && typeof option.view !== \"string\") {\n      if (option.view.styles) {\n        def.model.set(\"labelStyle\", `font-size:${option.view.styles[\"font-size\"]}`);\n      }\n      if (option.view.classes) {\n        def.model.set(\"class\", `${def.model.class} ${option.view.classes}`);\n      }\n    }\n    def.model.bind(\"isOn\").to(command, \"value\", (value) => value === option.model);\n    itemDefinitions.add(def);\n  }\n  return itemDefinitions;\n}\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontsize.js\nvar FontSize = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FontSizeEditing, FontSizeUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontSize\";\n  }\n  /**\n   * Normalizes and translates the {@link module:font/fontconfig~FontSizeConfig#options configuration options}\n   * to the {@link module:font/fontconfig~FontSizeOption} format.\n   *\n   * @param configuredOptions An array of options taken from the configuration.\n   */\n  normalizeSizeOptions(options) {\n    return normalizeOptions2(options);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorcommand.js\nvar FontColorCommand = class extends FontCommand {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor, FONT_COLOR);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorediting.js\nvar FontColorEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontColorEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(FONT_COLOR, {\n      colors: [\n        {\n          color: \"hsl(0, 0%, 0%)\",\n          label: \"Black\"\n        },\n        {\n          color: \"hsl(0, 0%, 30%)\",\n          label: \"Dim grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 60%)\",\n          label: \"Grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 90%)\",\n          label: \"Light grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 100%)\",\n          label: \"White\",\n          hasBorder: true\n        },\n        {\n          color: \"hsl(0, 75%, 60%)\",\n          label: \"Red\"\n        },\n        {\n          color: \"hsl(30, 75%, 60%)\",\n          label: \"Orange\"\n        },\n        {\n          color: \"hsl(60, 75%, 60%)\",\n          label: \"Yellow\"\n        },\n        {\n          color: \"hsl(90, 75%, 60%)\",\n          label: \"Light green\"\n        },\n        {\n          color: \"hsl(120, 75%, 60%)\",\n          label: \"Green\"\n        },\n        {\n          color: \"hsl(150, 75%, 60%)\",\n          label: \"Aquamarine\"\n        },\n        {\n          color: \"hsl(180, 75%, 60%)\",\n          label: \"Turquoise\"\n        },\n        {\n          color: \"hsl(210, 75%, 60%)\",\n          label: \"Light blue\"\n        },\n        {\n          color: \"hsl(240, 75%, 60%)\",\n          label: \"Blue\"\n        },\n        {\n          color: \"hsl(270, 75%, 60%)\",\n          label: \"Purple\"\n        }\n      ],\n      columns: 5\n    });\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"span\",\n        styles: {\n          \"color\": /[\\s\\S]+/\n        }\n      },\n      model: {\n        key: FONT_COLOR,\n        value: renderUpcastAttribute(\"color\")\n      }\n    });\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"font\",\n        attributes: {\n          \"color\": /^#?\\w+$/\n        }\n      },\n      model: {\n        key: FONT_COLOR,\n        value: (viewElement) => viewElement.getAttribute(\"color\")\n      }\n    });\n    editor.conversion.for(\"downcast\").attributeToElement({\n      model: FONT_COLOR,\n      view: renderDowncastElement(\"color\")\n    });\n    editor.commands.add(FONT_COLOR, new FontColorCommand(editor));\n    editor.model.schema.extend(\"$text\", { allowAttributes: FONT_COLOR });\n    editor.model.schema.setAttributeProperties(FONT_COLOR, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/ui/colorui.js\nvar ColorUI = class extends Plugin {\n  /**\n   * Creates a plugin which introduces a dropdown with a pre–configured\n   * {@link module:ui/colorselector/colorselectorview~ColorSelectorView}.\n   *\n   * @param config The configuration object.\n   * @param config.commandName The name of the command which will be executed when a color tile is clicked.\n   * @param config.componentName The name of the dropdown in the {@link module:ui/componentfactory~ComponentFactory}\n   * and the configuration scope name in `editor.config`.\n   * @param config.icon The SVG icon used by the dropdown.\n   * @param config.dropdownLabel The label used by the dropdown.\n   */\n  constructor(editor, { commandName, componentName, icon, dropdownLabel }) {\n    super(editor);\n    this.commandName = commandName;\n    this.componentName = componentName;\n    this.icon = icon;\n    this.dropdownLabel = dropdownLabel;\n    this.columns = editor.config.get(`${this.componentName}.columns`);\n    this.colorSelectorView = void 0;\n  }\n  /**\n  * @inheritDoc\n  */\n  init() {\n    const editor = this.editor;\n    const locale = editor.locale;\n    const t = locale.t;\n    const command = editor.commands.get(this.commandName);\n    const componentConfig = editor.config.get(this.componentName);\n    const colorsConfig = normalizeColorOptions(componentConfig.colors);\n    const localizedColors = getLocalizedColorOptions(locale, colorsConfig);\n    const documentColorsCount = componentConfig.documentColors;\n    const hasColorPicker = componentConfig.colorPicker !== false;\n    editor.ui.componentFactory.add(this.componentName, (locale2) => {\n      const dropdownView = createDropdown(locale2);\n      let dropdownContentRendered = false;\n      this.colorSelectorView = addColorSelectorToDropdown({\n        dropdownView,\n        colors: localizedColors.map((option) => ({\n          label: option.label,\n          color: option.model,\n          options: {\n            hasBorder: option.hasBorder\n          }\n        })),\n        columns: this.columns,\n        removeButtonLabel: t(\"Remove color\"),\n        colorPickerLabel: t(\"Color picker\"),\n        documentColorsLabel: documentColorsCount !== 0 ? t(\"Document colors\") : \"\",\n        documentColorsCount: documentColorsCount === void 0 ? this.columns : documentColorsCount,\n        colorPickerViewConfig: hasColorPicker ? componentConfig.colorPicker || {} : false\n      });\n      this.colorSelectorView.bind(\"selectedColor\").to(command, \"value\");\n      dropdownView.buttonView.set({\n        label: this.dropdownLabel,\n        icon: this.icon,\n        tooltip: true\n      });\n      dropdownView.extendTemplate({\n        attributes: {\n          class: \"ck-color-ui-dropdown\"\n        }\n      });\n      dropdownView.bind(\"isEnabled\").to(command);\n      this.colorSelectorView.on(\"execute\", (evt, data) => {\n        if (dropdownView.isOpen) {\n          editor.execute(this.commandName, {\n            value: data.value,\n            batch: this._undoStepBatch\n          });\n        }\n        if (data.source !== \"colorPicker\") {\n          editor.editing.view.focus();\n        }\n        if (data.source === \"colorPickerSaveButton\") {\n          dropdownView.isOpen = false;\n        }\n      });\n      this.colorSelectorView.on(\"colorPicker:show\", () => {\n        this._undoStepBatch = editor.model.createBatch();\n      });\n      this.colorSelectorView.on(\"colorPicker:cancel\", () => {\n        if (this._undoStepBatch.operations.length) {\n          dropdownView.isOpen = false;\n          editor.execute(\"undo\", this._undoStepBatch);\n        }\n        editor.editing.view.focus();\n      });\n      dropdownView.on(\"change:isOpen\", (evt, name, isVisible) => {\n        if (!dropdownContentRendered) {\n          dropdownContentRendered = true;\n          dropdownView.colorSelectorView.appendUI();\n        }\n        if (isVisible) {\n          if (documentColorsCount !== 0) {\n            this.colorSelectorView.updateDocumentColors(editor.model, this.componentName);\n          }\n          this.colorSelectorView.updateSelectedColors();\n          this.colorSelectorView.showColorGridsFragment();\n        }\n      });\n      focusChildOnDropdownOpen(dropdownView, () => dropdownView.colorSelectorView.colorGridsFragmentView.staticColorsGrid.items.find((item) => item.isOn));\n      return dropdownView;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontcolor/fontcolorui.js\nimport fontColorIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-color.svg\";\nvar FontColorUI = class extends ColorUI {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    const t = editor.locale.t;\n    super(editor, {\n      commandName: FONT_COLOR,\n      componentName: FONT_COLOR,\n      icon: fontColorIcon,\n      dropdownLabel: t(\"Font Color\")\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontColorUI\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontcolor.js\nvar FontColor = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FontColorEditing, FontColorUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontColor\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorcommand.js\nvar FontBackgroundColorCommand = class extends FontCommand {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor, FONT_BACKGROUND_COLOR);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorediting.js\nvar FontBackgroundColorEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontBackgroundColorEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(FONT_BACKGROUND_COLOR, {\n      colors: [\n        {\n          color: \"hsl(0, 0%, 0%)\",\n          label: \"Black\"\n        },\n        {\n          color: \"hsl(0, 0%, 30%)\",\n          label: \"Dim grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 60%)\",\n          label: \"Grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 90%)\",\n          label: \"Light grey\"\n        },\n        {\n          color: \"hsl(0, 0%, 100%)\",\n          label: \"White\",\n          hasBorder: true\n        },\n        {\n          color: \"hsl(0, 75%, 60%)\",\n          label: \"Red\"\n        },\n        {\n          color: \"hsl(30, 75%, 60%)\",\n          label: \"Orange\"\n        },\n        {\n          color: \"hsl(60, 75%, 60%)\",\n          label: \"Yellow\"\n        },\n        {\n          color: \"hsl(90, 75%, 60%)\",\n          label: \"Light green\"\n        },\n        {\n          color: \"hsl(120, 75%, 60%)\",\n          label: \"Green\"\n        },\n        {\n          color: \"hsl(150, 75%, 60%)\",\n          label: \"Aquamarine\"\n        },\n        {\n          color: \"hsl(180, 75%, 60%)\",\n          label: \"Turquoise\"\n        },\n        {\n          color: \"hsl(210, 75%, 60%)\",\n          label: \"Light blue\"\n        },\n        {\n          color: \"hsl(240, 75%, 60%)\",\n          label: \"Blue\"\n        },\n        {\n          color: \"hsl(270, 75%, 60%)\",\n          label: \"Purple\"\n        }\n      ],\n      columns: 5\n    });\n    editor.data.addStyleProcessorRules(addBackgroundRules);\n    editor.conversion.for(\"upcast\").elementToAttribute({\n      view: {\n        name: \"span\",\n        styles: {\n          \"background-color\": /[\\s\\S]+/\n        }\n      },\n      model: {\n        key: FONT_BACKGROUND_COLOR,\n        value: renderUpcastAttribute(\"background-color\")\n      }\n    });\n    editor.conversion.for(\"downcast\").attributeToElement({\n      model: FONT_BACKGROUND_COLOR,\n      view: renderDowncastElement(\"background-color\")\n    });\n    editor.commands.add(FONT_BACKGROUND_COLOR, new FontBackgroundColorCommand(editor));\n    editor.model.schema.extend(\"$text\", { allowAttributes: FONT_BACKGROUND_COLOR });\n    editor.model.schema.setAttributeProperties(FONT_BACKGROUND_COLOR, {\n      isFormatting: true,\n      copyOnEnter: true\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorui.js\nimport fontBackgroundColorIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-font/theme/icons/font-background.svg\";\nvar FontBackgroundColorUI = class extends ColorUI {\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    const t = editor.locale.t;\n    super(editor, {\n      commandName: FONT_BACKGROUND_COLOR,\n      componentName: FONT_BACKGROUND_COLOR,\n      icon: fontBackgroundColorIcon,\n      dropdownLabel: t(\"Font Background Color\")\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontBackgroundColorUI\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/fontbackgroundcolor.js\nvar FontBackgroundColor = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FontBackgroundColorEditing, FontBackgroundColorUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"FontBackgroundColor\";\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-font/src/font.js\nvar Font = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [FontFamily, FontSize, FontColor, FontBackgroundColor];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Font\";\n  }\n};\nexport {\n  Font as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-font/src/fontcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontfamily/fontfamilycommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontfamily/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontfamily/fontfamilyui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontfamily.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontsize/fontsizecommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontsize/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontsize/fontsizeediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontsize/fontsizeui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontsize.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontcolor/fontcolorcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontcolor/fontcolorediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/ui/colorui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontcolor/fontcolorui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontcolor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontbackgroundcolor/fontbackgroundcolorui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/fontbackgroundcolor.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-font/src/font.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-font_src_font.js.map\n","import \"./chunk-SA55FI2N.js\";\nimport {\n  Undo\n} from \"./chunk-LTKJ3JKL.js\";\nimport {\n  Clipboard\n} from \"./chunk-UHWQXN2Z.js\";\nimport {\n  Widget,\n  findOptimalInsertionRange,\n  toWidget\n} from \"./chunk-ZGNJRE43.js\";\nimport \"./chunk-6GJUXDIH.js\";\nimport \"./chunk-BHRKVRIW.js\";\nimport {\n  Delete\n} from \"./chunk-W7WGVHCV.js\";\nimport \"./chunk-NICE7ARI.js\";\nimport \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  CssTransitionDisablerMixin,\n  FocusCycler,\n  LabeledFieldView,\n  Template,\n  View,\n  ViewCollection,\n  createDropdown,\n  createLabeledInputText,\n  iconview_default,\n  submitHandler\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  Command,\n  FocusTracker,\n  KeystrokeHandler,\n  LivePosition,\n  LiveRange,\n  Plugin,\n  first,\n  global_default,\n  icons,\n  logWarning,\n  toArray\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/converters.js\nfunction modelToViewUrlAttributeConverter(registry, options) {\n  const converter = (evt, data, conversionApi) => {\n    if (!conversionApi.consumable.consume(data.item, evt.name)) {\n      return;\n    }\n    const url = data.attributeNewValue;\n    const viewWriter = conversionApi.writer;\n    const figure = conversionApi.mapper.toViewElement(data.item);\n    const mediaContentElement = [...figure.getChildren()].find((child) => child.getCustomProperty(\"media-content\"));\n    viewWriter.remove(mediaContentElement);\n    const mediaViewElement = registry.getMediaViewElement(viewWriter, url, options);\n    viewWriter.insert(viewWriter.createPositionAt(figure, 0), mediaViewElement);\n  };\n  return (dispatcher) => {\n    dispatcher.on(\"attribute:url:media\", converter);\n  };\n}\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/utils.js\nfunction toMediaWidget(viewElement, writer, label) {\n  writer.setCustomProperty(\"media\", true, viewElement);\n  return toWidget(viewElement, writer, { label });\n}\nfunction createMediaFigureElement(writer, registry, url, options) {\n  return writer.createContainerElement(\"figure\", { class: \"media\" }, [\n    registry.getMediaViewElement(writer, url, options),\n    writer.createSlot()\n  ]);\n}\nfunction getSelectedMediaModelWidget(selection) {\n  const selectedElement = selection.getSelectedElement();\n  if (selectedElement && selectedElement.is(\"element\", \"media\")) {\n    return selectedElement;\n  }\n  return null;\n}\nfunction insertMedia(model, url, selectable, findOptimalPosition) {\n  model.change((writer) => {\n    const mediaElement = writer.createElement(\"media\", { url });\n    model.insertObject(mediaElement, selectable, null, {\n      setSelection: \"on\",\n      findOptimalPosition: findOptimalPosition ? \"auto\" : void 0\n    });\n  });\n}\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedcommand.js\nvar MediaEmbedCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedMedia = getSelectedMediaModelWidget(selection);\n    this.value = selectedMedia ? selectedMedia.getAttribute(\"url\") : void 0;\n    this.isEnabled = isMediaSelected(selection) || isAllowedInParent(selection, model);\n  }\n  /**\n   * Executes the command, which either:\n   *\n   * * updates the URL of the selected media,\n   * * inserts the new media into the editor and puts the selection around it.\n   *\n   * @fires execute\n   * @param url The URL of the media.\n   */\n  execute(url) {\n    const model = this.editor.model;\n    const selection = model.document.selection;\n    const selectedMedia = getSelectedMediaModelWidget(selection);\n    if (selectedMedia) {\n      model.change((writer) => {\n        writer.setAttribute(\"url\", url, selectedMedia);\n      });\n    } else {\n      insertMedia(model, url, selection, true);\n    }\n  }\n};\nfunction isAllowedInParent(selection, model) {\n  const insertionRange = findOptimalInsertionRange(selection, model);\n  let parent = insertionRange.start.parent;\n  if (parent.isEmpty && !model.schema.isLimit(parent)) {\n    parent = parent.parent;\n  }\n  return model.schema.checkChild(parent, \"media\");\n}\nfunction isMediaSelected(selection) {\n  const element = selection.getSelectedElement();\n  return !!element && element.name === \"media\";\n}\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/mediaregistry.js\nimport mediaPlaceholderIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-media-embed/theme/icons/media-placeholder.svg\";\nvar mediaPlaceholderIconViewBox = \"0 0 64 42\";\nvar MediaRegistry = class {\n  /**\n   * Creates an instance of the {@link module:media-embed/mediaregistry~MediaRegistry} class.\n   *\n   * @param locale The localization services instance.\n   * @param config The configuration of the media embed feature.\n   */\n  constructor(locale, config) {\n    const providers = config.providers;\n    const extraProviders = config.extraProviders || [];\n    const removedProviders = new Set(config.removeProviders);\n    const providerDefinitions = providers.concat(extraProviders).filter((provider) => {\n      const name = provider.name;\n      if (!name) {\n        logWarning(\"media-embed-no-provider-name\", { provider });\n        return false;\n      }\n      return !removedProviders.has(name);\n    });\n    this.locale = locale;\n    this.providerDefinitions = providerDefinitions;\n  }\n  /**\n   * Checks whether the passed URL is representing a certain media type allowed in the editor.\n   *\n   * @param url The URL to be checked\n   */\n  hasMedia(url) {\n    return !!this._getMedia(url);\n  }\n  /**\n   * For the given media URL string and options, it returns the {@link module:engine/view/element~Element view element}\n   * representing that media.\n   *\n   * **Note:** If no URL is specified, an empty view element is returned.\n   *\n   * @param writer The view writer used to produce a view element.\n   * @param url The URL to be translated into a view element.\n   */\n  getMediaViewElement(writer, url, options) {\n    return this._getMedia(url).getViewElement(writer, options);\n  }\n  /**\n   * Returns a `Media` instance for the given URL.\n   *\n   * @param url The URL of the media.\n   * @returns The `Media` instance or `null` when there is none.\n   */\n  _getMedia(url) {\n    if (!url) {\n      return new Media(this.locale);\n    }\n    url = url.trim();\n    for (const definition of this.providerDefinitions) {\n      const previewRenderer = definition.html;\n      const pattern = toArray(definition.url);\n      for (const subPattern of pattern) {\n        const match = this._getUrlMatches(url, subPattern);\n        if (match) {\n          return new Media(this.locale, url, match, previewRenderer);\n        }\n      }\n    }\n    return null;\n  }\n  /**\n   * Tries to match `url` to `pattern`.\n   *\n   * @param url The URL of the media.\n   * @param pattern The pattern that should accept the media URL.\n   */\n  _getUrlMatches(url, pattern) {\n    let match = url.match(pattern);\n    if (match) {\n      return match;\n    }\n    let rawUrl = url.replace(/^https?:\\/\\//, \"\");\n    match = rawUrl.match(pattern);\n    if (match) {\n      return match;\n    }\n    rawUrl = rawUrl.replace(/^www\\./, \"\");\n    match = rawUrl.match(pattern);\n    if (match) {\n      return match;\n    }\n    return null;\n  }\n};\nvar Media = class {\n  constructor(locale, url, match, previewRenderer) {\n    this.url = this._getValidUrl(url);\n    this._locale = locale;\n    this._match = match;\n    this._previewRenderer = previewRenderer;\n  }\n  /**\n   * Returns the view element representation of the media.\n   *\n   * @param writer The view writer used to produce a view element.\n   */\n  getViewElement(writer, options) {\n    const attributes = {};\n    let viewElement;\n    if (options.renderForEditingView || options.renderMediaPreview && this.url && this._previewRenderer) {\n      if (this.url) {\n        attributes[\"data-oembed-url\"] = this.url;\n      }\n      if (options.renderForEditingView) {\n        attributes.class = \"ck-media__wrapper\";\n      }\n      const mediaHtml = this._getPreviewHtml(options);\n      viewElement = writer.createRawElement(\"div\", attributes, (domElement, domConverter) => {\n        domConverter.setContentOf(domElement, mediaHtml);\n      });\n    } else {\n      if (this.url) {\n        attributes.url = this.url;\n      }\n      viewElement = writer.createEmptyElement(options.elementName, attributes);\n    }\n    writer.setCustomProperty(\"media-content\", true, viewElement);\n    return viewElement;\n  }\n  /**\n   * Returns the HTML string of the media content preview.\n   */\n  _getPreviewHtml(options) {\n    if (this._previewRenderer) {\n      return this._previewRenderer(this._match);\n    } else {\n      if (this.url && options.renderForEditingView) {\n        return this._getPlaceholderHtml();\n      }\n      return \"\";\n    }\n  }\n  /**\n   * Returns the placeholder HTML when the media has no content preview.\n   */\n  _getPlaceholderHtml() {\n    const icon = new iconview_default();\n    const t = this._locale.t;\n    icon.content = mediaPlaceholderIcon;\n    icon.viewBox = mediaPlaceholderIconViewBox;\n    const placeholder = new Template({\n      tag: \"div\",\n      attributes: {\n        class: \"ck ck-reset_all ck-media__placeholder\"\n      },\n      children: [\n        {\n          tag: \"div\",\n          attributes: {\n            class: \"ck-media__placeholder__icon\"\n          },\n          children: [icon]\n        },\n        {\n          tag: \"a\",\n          attributes: {\n            class: \"ck-media__placeholder__url\",\n            target: \"_blank\",\n            rel: \"noopener noreferrer\",\n            href: this.url,\n            \"data-cke-tooltip-text\": t(\"Open media in new tab\")\n          },\n          children: [\n            {\n              tag: \"span\",\n              attributes: {\n                class: \"ck-media__placeholder__url__text\"\n              },\n              children: [this.url]\n            }\n          ]\n        }\n      ]\n    }).render();\n    return placeholder.outerHTML;\n  }\n  /**\n   * Returns the full URL to the specified media.\n   *\n   * @param url The URL of the media.\n   */\n  _getValidUrl(url) {\n    if (!url) {\n      return null;\n    }\n    if (url.match(/^https?/)) {\n      return url;\n    }\n    return \"https://\" + url;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedediting.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-media-embed/theme/mediaembedediting.css\";\nvar MediaEmbedEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"MediaEmbedEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"mediaEmbed\", {\n      elementName: \"oembed\",\n      providers: [\n        {\n          name: \"dailymotion\",\n          url: [\n            /^dailymotion\\.com\\/video\\/(\\w+)/,\n            /^dai.ly\\/(\\w+)/\n          ],\n          html: (match) => {\n            const id = match[1];\n            return `<div style=\"position: relative; padding-bottom: 100%; height: 0; \"><iframe src=\"https://www.dailymotion.com/embed/video/${id}\" style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" frameborder=\"0\" width=\"480\" height=\"270\" allowfullscreen allow=\"autoplay\"></iframe></div>`;\n          }\n        },\n        {\n          name: \"spotify\",\n          url: [\n            /^open\\.spotify\\.com\\/(artist\\/\\w+)/,\n            /^open\\.spotify\\.com\\/(album\\/\\w+)/,\n            /^open\\.spotify\\.com\\/(track\\/\\w+)/\n          ],\n          html: (match) => {\n            const id = match[1];\n            return `<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 126%;\"><iframe src=\"https://open.spotify.com/embed/${id}\" style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" frameborder=\"0\" allowtransparency=\"true\" allow=\"encrypted-media\"></iframe></div>`;\n          }\n        },\n        {\n          name: \"youtube\",\n          url: [\n            /^(?:m\\.)?youtube\\.com\\/watch\\?v=([\\w-]+)(?:&t=(\\d+))?/,\n            /^(?:m\\.)?youtube\\.com\\/v\\/([\\w-]+)(?:\\?t=(\\d+))?/,\n            /^youtube\\.com\\/embed\\/([\\w-]+)(?:\\?start=(\\d+))?/,\n            /^youtu\\.be\\/([\\w-]+)(?:\\?t=(\\d+))?/\n          ],\n          html: (match) => {\n            const id = match[1];\n            const time = match[2];\n            return `<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 56.2493%;\"><iframe src=\"https://www.youtube.com/embed/${id}${time ? `?start=${time}` : \"\"}\" style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe></div>`;\n          }\n        },\n        {\n          name: \"vimeo\",\n          url: [\n            /^vimeo\\.com\\/(\\d+)/,\n            /^vimeo\\.com\\/[^/]+\\/[^/]+\\/video\\/(\\d+)/,\n            /^vimeo\\.com\\/album\\/[^/]+\\/video\\/(\\d+)/,\n            /^vimeo\\.com\\/channels\\/[^/]+\\/(\\d+)/,\n            /^vimeo\\.com\\/groups\\/[^/]+\\/videos\\/(\\d+)/,\n            /^vimeo\\.com\\/ondemand\\/[^/]+\\/(\\d+)/,\n            /^player\\.vimeo\\.com\\/video\\/(\\d+)/\n          ],\n          html: (match) => {\n            const id = match[1];\n            return `<div style=\"position: relative; padding-bottom: 100%; height: 0; padding-bottom: 56.2493%;\"><iframe src=\"https://player.vimeo.com/video/${id}\" style=\"position: absolute; width: 100%; height: 100%; top: 0; left: 0;\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>`;\n          }\n        },\n        {\n          name: \"instagram\",\n          url: /^instagram\\.com\\/p\\/(\\w+)/\n        },\n        {\n          name: \"twitter\",\n          url: /^twitter\\.com/\n        },\n        {\n          name: \"googleMaps\",\n          url: [\n            /^google\\.com\\/maps/,\n            /^goo\\.gl\\/maps/,\n            /^maps\\.google\\.com/,\n            /^maps\\.app\\.goo\\.gl/\n          ]\n        },\n        {\n          name: \"flickr\",\n          url: /^flickr\\.com/\n        },\n        {\n          name: \"facebook\",\n          url: /^facebook\\.com/\n        }\n      ]\n    });\n    this.registry = new MediaRegistry(editor.locale, editor.config.get(\"mediaEmbed\"));\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const schema = editor.model.schema;\n    const t = editor.t;\n    const conversion = editor.conversion;\n    const renderMediaPreview = editor.config.get(\"mediaEmbed.previewsInData\");\n    const elementName = editor.config.get(\"mediaEmbed.elementName\");\n    const registry = this.registry;\n    editor.commands.add(\"mediaEmbed\", new MediaEmbedCommand(editor));\n    schema.register(\"media\", {\n      inheritAllFrom: \"$blockObject\",\n      allowAttributes: [\"url\"]\n    });\n    conversion.for(\"dataDowncast\").elementToStructure({\n      model: \"media\",\n      view: (modelElement, { writer }) => {\n        const url = modelElement.getAttribute(\"url\");\n        return createMediaFigureElement(writer, registry, url, {\n          elementName,\n          renderMediaPreview: !!url && renderMediaPreview\n        });\n      }\n    });\n    conversion.for(\"dataDowncast\").add(modelToViewUrlAttributeConverter(registry, {\n      elementName,\n      renderMediaPreview\n    }));\n    conversion.for(\"editingDowncast\").elementToStructure({\n      model: \"media\",\n      view: (modelElement, { writer }) => {\n        const url = modelElement.getAttribute(\"url\");\n        const figure = createMediaFigureElement(writer, registry, url, {\n          elementName,\n          renderForEditingView: true\n        });\n        return toMediaWidget(figure, writer, t(\"media widget\"));\n      }\n    });\n    conversion.for(\"editingDowncast\").add(modelToViewUrlAttributeConverter(registry, {\n      elementName,\n      renderForEditingView: true\n    }));\n    conversion.for(\"upcast\").elementToElement({\n      view: (element) => [\"oembed\", elementName].includes(element.name) && element.getAttribute(\"url\") ? { name: true } : null,\n      model: (viewMedia, { writer }) => {\n        const url = viewMedia.getAttribute(\"url\");\n        if (registry.hasMedia(url)) {\n          return writer.createElement(\"media\", { url });\n        }\n        return null;\n      }\n    }).elementToElement({\n      view: {\n        name: \"div\",\n        attributes: {\n          \"data-oembed-url\": true\n        }\n      },\n      model: (viewMedia, { writer }) => {\n        const url = viewMedia.getAttribute(\"data-oembed-url\");\n        if (registry.hasMedia(url)) {\n          return writer.createElement(\"media\", { url });\n        }\n        return null;\n      }\n    }).add((dispatcher) => {\n      const converter = (evt, data, conversionApi) => {\n        if (!conversionApi.consumable.consume(data.viewItem, { name: true, classes: \"media\" })) {\n          return;\n        }\n        const { modelRange, modelCursor } = conversionApi.convertChildren(data.viewItem, data.modelCursor);\n        data.modelRange = modelRange;\n        data.modelCursor = modelCursor;\n        const modelElement = first(modelRange.getItems());\n        if (!modelElement) {\n          conversionApi.consumable.revert(data.viewItem, { name: true, classes: \"media\" });\n        }\n      };\n      dispatcher.on(\"element:figure\", converter);\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/automediaembed.js\nvar URL_REGEXP = /^(?:http(s)?:\\/\\/)?[\\w-]+\\.[\\w-.~:/?#[\\]@!$&'()*+,;=%]+$/;\nvar AutoMediaEmbed = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [Clipboard, Delete, Undo];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"AutoMediaEmbed\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    this._timeoutId = null;\n    this._positionToInsert = null;\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const modelDocument = editor.model.document;\n    const clipboardPipeline = editor.plugins.get(\"ClipboardPipeline\");\n    this.listenTo(clipboardPipeline, \"inputTransformation\", () => {\n      const firstRange = modelDocument.selection.getFirstRange();\n      const leftLivePosition = LivePosition.fromPosition(firstRange.start);\n      leftLivePosition.stickiness = \"toPrevious\";\n      const rightLivePosition = LivePosition.fromPosition(firstRange.end);\n      rightLivePosition.stickiness = \"toNext\";\n      modelDocument.once(\"change:data\", () => {\n        this._embedMediaBetweenPositions(leftLivePosition, rightLivePosition);\n        leftLivePosition.detach();\n        rightLivePosition.detach();\n      }, { priority: \"high\" });\n    });\n    const undoCommand = editor.commands.get(\"undo\");\n    undoCommand.on(\"execute\", () => {\n      if (this._timeoutId) {\n        global_default.window.clearTimeout(this._timeoutId);\n        this._positionToInsert.detach();\n        this._timeoutId = null;\n        this._positionToInsert = null;\n      }\n    }, { priority: \"high\" });\n  }\n  /**\n   * Analyzes the part of the document between provided positions in search for a URL representing media.\n   * When the URL is found, it is automatically converted into media.\n   *\n   * @param leftPosition Left position of the selection.\n   * @param rightPosition Right position of the selection.\n   */\n  _embedMediaBetweenPositions(leftPosition, rightPosition) {\n    const editor = this.editor;\n    const mediaRegistry = editor.plugins.get(MediaEmbedEditing).registry;\n    const urlRange = new LiveRange(leftPosition, rightPosition);\n    const walker = urlRange.getWalker({ ignoreElementEnd: true });\n    let url = \"\";\n    for (const node of walker) {\n      if (node.item.is(\"$textProxy\")) {\n        url += node.item.data;\n      }\n    }\n    url = url.trim();\n    if (!url.match(URL_REGEXP)) {\n      urlRange.detach();\n      return;\n    }\n    if (!mediaRegistry.hasMedia(url)) {\n      urlRange.detach();\n      return;\n    }\n    const mediaEmbedCommand = editor.commands.get(\"mediaEmbed\");\n    if (!mediaEmbedCommand.isEnabled) {\n      urlRange.detach();\n      return;\n    }\n    this._positionToInsert = LivePosition.fromPosition(leftPosition);\n    this._timeoutId = global_default.window.setTimeout(() => {\n      editor.model.change((writer) => {\n        this._timeoutId = null;\n        writer.remove(urlRange);\n        urlRange.detach();\n        let insertionPosition = null;\n        if (this._positionToInsert.root.rootName !== \"$graveyard\") {\n          insertionPosition = this._positionToInsert;\n        }\n        insertMedia(editor.model, url, insertionPosition, false);\n        this._positionToInsert.detach();\n        this._positionToInsert = null;\n      });\n      editor.plugins.get(Delete).requestUndoOnBackspace();\n    }, 100);\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/ui/mediaformview.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-ui/theme/components/responsive-form/responsiveform.css\";\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-media-embed/theme/mediaform.css\";\nvar MediaFormView = class extends View {\n  /**\n   * @param validators Form validators used by {@link #isValid}.\n   * @param locale The localization services instance.\n   */\n  constructor(validators, locale) {\n    super(locale);\n    const t = locale.t;\n    this.focusTracker = new FocusTracker();\n    this.keystrokes = new KeystrokeHandler();\n    this.set(\"mediaURLInputValue\", \"\");\n    this.urlInputView = this._createUrlInput();\n    this.saveButtonView = this._createButton(t(\"Save\"), icons.check, \"ck-button-save\");\n    this.saveButtonView.type = \"submit\";\n    this.saveButtonView.bind(\"isEnabled\").to(this, \"mediaURLInputValue\", (value) => !!value);\n    this.cancelButtonView = this._createButton(t(\"Cancel\"), icons.cancel, \"ck-button-cancel\", \"cancel\");\n    this._focusables = new ViewCollection();\n    this._focusCycler = new FocusCycler({\n      focusables: this._focusables,\n      focusTracker: this.focusTracker,\n      keystrokeHandler: this.keystrokes,\n      actions: {\n        // Navigate form fields backwards using the <kbd>Shift</kbd> + <kbd>Tab</kbd> keystroke.\n        focusPrevious: \"shift + tab\",\n        // Navigate form fields forwards using the <kbd>Tab</kbd> key.\n        focusNext: \"tab\"\n      }\n    });\n    this._validators = validators;\n    this.setTemplate({\n      tag: \"form\",\n      attributes: {\n        class: [\n          \"ck\",\n          \"ck-media-form\",\n          \"ck-responsive-form\"\n        ],\n        tabindex: \"-1\"\n      },\n      children: [\n        this.urlInputView,\n        this.saveButtonView,\n        this.cancelButtonView\n      ]\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  render() {\n    super.render();\n    submitHandler({\n      view: this\n    });\n    const childViews = [\n      this.urlInputView,\n      this.saveButtonView,\n      this.cancelButtonView\n    ];\n    childViews.forEach((v) => {\n      this._focusables.add(v);\n      this.focusTracker.add(v.element);\n    });\n    this.keystrokes.listenTo(this.element);\n    const stopPropagation = (data) => data.stopPropagation();\n    this.keystrokes.set(\"arrowright\", stopPropagation);\n    this.keystrokes.set(\"arrowleft\", stopPropagation);\n    this.keystrokes.set(\"arrowup\", stopPropagation);\n    this.keystrokes.set(\"arrowdown\", stopPropagation);\n  }\n  /**\n   * @inheritDoc\n   */\n  destroy() {\n    super.destroy();\n    this.focusTracker.destroy();\n    this.keystrokes.destroy();\n  }\n  /**\n   * Focuses the fist {@link #_focusables} in the form.\n   */\n  focus() {\n    this._focusCycler.focusFirst();\n  }\n  /**\n   * The native DOM `value` of the {@link #urlInputView} element.\n   *\n   * **Note**: Do not confuse it with the {@link module:ui/inputtext/inputtextview~InputTextView#value}\n   * which works one way only and may not represent the actual state of the component in the DOM.\n   */\n  get url() {\n    return this.urlInputView.fieldView.element.value.trim();\n  }\n  set url(url) {\n    this.urlInputView.fieldView.element.value = url.trim();\n  }\n  /**\n   * Validates the form and returns `false` when some fields are invalid.\n   */\n  isValid() {\n    this.resetFormStatus();\n    for (const validator of this._validators) {\n      const errorText = validator(this);\n      if (errorText) {\n        this.urlInputView.errorText = errorText;\n        return false;\n      }\n    }\n    return true;\n  }\n  /**\n   * Cleans up the supplementary error and information text of the {@link #urlInputView}\n   * bringing them back to the state when the form has been displayed for the first time.\n   *\n   * See {@link #isValid}.\n   */\n  resetFormStatus() {\n    this.urlInputView.errorText = null;\n    this.urlInputView.infoText = this._urlInputViewInfoDefault;\n  }\n  /**\n   * Creates a labeled input view.\n   *\n   * @returns Labeled input view instance.\n   */\n  _createUrlInput() {\n    const t = this.locale.t;\n    const labeledInput = new LabeledFieldView(this.locale, createLabeledInputText);\n    const inputField = labeledInput.fieldView;\n    this._urlInputViewInfoDefault = t(\"Paste the media URL in the input.\");\n    this._urlInputViewInfoTip = t(\"Tip: Paste the URL into the content to embed faster.\");\n    labeledInput.label = t(\"Media URL\");\n    labeledInput.infoText = this._urlInputViewInfoDefault;\n    inputField.on(\"input\", () => {\n      labeledInput.infoText = inputField.element.value ? this._urlInputViewInfoTip : this._urlInputViewInfoDefault;\n      this.mediaURLInputValue = inputField.element.value.trim();\n    });\n    return labeledInput;\n  }\n  /**\n   * Creates a button view.\n   *\n   * @param label The button label.\n   * @param icon The button icon.\n   * @param className The additional button CSS class name.\n   * @param eventName An event name that the `ButtonView#execute` event will be delegated to.\n   * @returns The button view instance.\n   */\n  _createButton(label, icon, className, eventName) {\n    const button = new ButtonView(this.locale);\n    button.set({\n      label,\n      icon,\n      tooltip: true\n    });\n    button.extendTemplate({\n      attributes: {\n        class: className\n      }\n    });\n    if (eventName) {\n      button.delegate(\"execute\").to(this, eventName);\n    }\n    return button;\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembedui.js\nimport mediaIcon from \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-media-embed/theme/icons/media.svg\";\nvar MediaEmbedUI = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [MediaEmbedEditing];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"MediaEmbedUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const command = editor.commands.get(\"mediaEmbed\");\n    editor.ui.componentFactory.add(\"mediaEmbed\", (locale) => {\n      const dropdown = createDropdown(locale);\n      this._setUpDropdown(dropdown, command);\n      return dropdown;\n    });\n  }\n  _setUpDropdown(dropdown, command) {\n    const editor = this.editor;\n    const t = editor.t;\n    const button = dropdown.buttonView;\n    const registry = editor.plugins.get(MediaEmbedEditing).registry;\n    dropdown.once(\"change:isOpen\", () => {\n      const form = new (CssTransitionDisablerMixin(MediaFormView))(getFormValidators(editor.t, registry), editor.locale);\n      dropdown.panelView.children.add(form);\n      button.on(\"open\", () => {\n        form.disableCssTransitions();\n        form.url = command.value || \"\";\n        form.urlInputView.fieldView.select();\n        form.enableCssTransitions();\n      }, { priority: \"low\" });\n      dropdown.on(\"submit\", () => {\n        if (form.isValid()) {\n          editor.execute(\"mediaEmbed\", form.url);\n          editor.editing.view.focus();\n        }\n      });\n      dropdown.on(\"change:isOpen\", () => form.resetFormStatus());\n      dropdown.on(\"cancel\", () => {\n        editor.editing.view.focus();\n      });\n      form.delegate(\"submit\", \"cancel\").to(dropdown);\n      form.urlInputView.fieldView.bind(\"value\").to(command, \"value\");\n      form.urlInputView.bind(\"isEnabled\").to(command, \"isEnabled\");\n    });\n    dropdown.bind(\"isEnabled\").to(command);\n    button.set({\n      label: t(\"Insert media\"),\n      icon: mediaIcon,\n      tooltip: true\n    });\n  }\n};\nfunction getFormValidators(t, registry) {\n  return [\n    (form) => {\n      if (!form.url.length) {\n        return t(\"The URL must not be empty.\");\n      }\n    },\n    (form) => {\n      if (!registry.hasMedia(form.url)) {\n        return t(\"This media URL is not supported.\");\n      }\n    }\n  ];\n}\n\n// node_modules/@ckeditor/ckeditor5-media-embed/src/mediaembed.js\nimport \"/tmp/build_6afe4207/node_modules/@ckeditor/ckeditor5-media-embed/theme/mediaembed.css\";\nvar MediaEmbed = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [MediaEmbedEditing, MediaEmbedUI, AutoMediaEmbed, Widget];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"MediaEmbed\";\n  }\n};\nexport {\n  MediaEmbed as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-media-embed/src/converters.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/mediaembedcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/mediaregistry.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/mediaembedediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/automediaembed.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/ui/mediaformview.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/mediaembedui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-media-embed/src/mediaembed.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-media-embed_src_mediaembed.js.map\n","import \"./chunk-U5S3T6FN.js\";\nimport \"./chunk-GJCFV3G2.js\";\nimport {\n  ButtonView,\n  addToolbarToDropdown,\n  createDropdown\n} from \"./chunk-CCHBLTQG.js\";\nimport \"./chunk-J3DZJUY2.js\";\nimport {\n  CKEditorError,\n  Command,\n  Plugin,\n  first,\n  icons,\n  logWarning\n} from \"./chunk-XX3CIG5U.js\";\nimport \"./chunk-624QZG55.js\";\n\n// node_modules/@ckeditor/ckeditor5-alignment/src/utils.js\nvar supportedOptions = [\"left\", \"right\", \"center\", \"justify\"];\nfunction isSupported(option) {\n  return supportedOptions.includes(option);\n}\nfunction isDefault(alignment, locale) {\n  if (locale.contentLanguageDirection == \"rtl\") {\n    return alignment === \"right\";\n  } else {\n    return alignment === \"left\";\n  }\n}\nfunction normalizeAlignmentOptions(configuredOptions) {\n  const normalizedOptions = configuredOptions.map((option) => {\n    let result;\n    if (typeof option == \"string\") {\n      result = { name: option };\n    } else {\n      result = option;\n    }\n    return result;\n  }).filter((option) => {\n    const isNameValid = supportedOptions.includes(option.name);\n    if (!isNameValid) {\n      logWarning(\"alignment-config-name-not-recognized\", { option });\n    }\n    return isNameValid;\n  });\n  const classNameCount = normalizedOptions.filter((option) => Boolean(option.className)).length;\n  if (classNameCount && classNameCount < normalizedOptions.length) {\n    throw new CKEditorError(\"alignment-config-classnames-are-missing\", { configuredOptions });\n  }\n  normalizedOptions.forEach((option, index, allOptions) => {\n    const succeedingOptions = allOptions.slice(index + 1);\n    const nameAlreadyExists = succeedingOptions.some((item) => item.name == option.name);\n    if (nameAlreadyExists) {\n      throw new CKEditorError(\"alignment-config-name-already-defined\", { option, configuredOptions });\n    }\n    if (option.className) {\n      const classNameAlreadyExists = succeedingOptions.some((item) => item.className == option.className);\n      if (classNameAlreadyExists) {\n        throw new CKEditorError(\"alignment-config-classname-already-defined\", { option, configuredOptions });\n      }\n    }\n  });\n  return normalizedOptions;\n}\n\n// node_modules/@ckeditor/ckeditor5-alignment/src/alignmentcommand.js\nvar ALIGNMENT = \"alignment\";\nvar AlignmentCommand = class extends Command {\n  /**\n   * @inheritDoc\n   */\n  refresh() {\n    const editor = this.editor;\n    const locale = editor.locale;\n    const firstBlock = first(this.editor.model.document.selection.getSelectedBlocks());\n    this.isEnabled = Boolean(firstBlock) && this._canBeAligned(firstBlock);\n    if (this.isEnabled && firstBlock.hasAttribute(\"alignment\")) {\n      this.value = firstBlock.getAttribute(\"alignment\");\n    } else {\n      this.value = locale.contentLanguageDirection === \"rtl\" ? \"right\" : \"left\";\n    }\n  }\n  /**\n   * Executes the command. Applies the alignment `value` to the selected blocks.\n   * If no `value` is passed, the `value` is the default one or it is equal to the currently selected block's alignment attribute,\n   * the command will remove the attribute from the selected blocks.\n   *\n   * @param options Options for the executed command.\n   * @param options.value The value to apply.\n   * @fires execute\n   */\n  execute(options = {}) {\n    const editor = this.editor;\n    const locale = editor.locale;\n    const model = editor.model;\n    const doc = model.document;\n    const value = options.value;\n    model.change((writer) => {\n      const blocks = Array.from(doc.selection.getSelectedBlocks()).filter((block) => this._canBeAligned(block));\n      const currentAlignment = blocks[0].getAttribute(\"alignment\");\n      const removeAlignment = isDefault(value, locale) || currentAlignment === value || !value;\n      if (removeAlignment) {\n        removeAlignmentFromSelection(blocks, writer);\n      } else {\n        setAlignmentOnSelection(blocks, writer, value);\n      }\n    });\n  }\n  /**\n   * Checks whether a block can have alignment set.\n   *\n   * @param block The block to be checked.\n   */\n  _canBeAligned(block) {\n    return this.editor.model.schema.checkAttribute(block, ALIGNMENT);\n  }\n};\nfunction removeAlignmentFromSelection(blocks, writer) {\n  for (const block of blocks) {\n    writer.removeAttribute(ALIGNMENT, block);\n  }\n}\nfunction setAlignmentOnSelection(blocks, writer, alignment) {\n  for (const block of blocks) {\n    writer.setAttribute(ALIGNMENT, alignment, block);\n  }\n}\n\n// node_modules/@ckeditor/ckeditor5-alignment/src/alignmentediting.js\nvar AlignmentEditing = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"AlignmentEditing\";\n  }\n  /**\n   * @inheritDoc\n   */\n  constructor(editor) {\n    super(editor);\n    editor.config.define(\"alignment\", {\n      options: supportedOptions.map((option) => ({ name: option }))\n    });\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const locale = editor.locale;\n    const schema = editor.model.schema;\n    const options = normalizeAlignmentOptions(editor.config.get(\"alignment.options\"));\n    const optionsToConvert = options.filter((option) => isSupported(option.name) && !isDefault(option.name, locale));\n    const shouldUseClasses = optionsToConvert.some((option) => !!option.className);\n    schema.extend(\"$block\", { allowAttributes: \"alignment\" });\n    editor.model.schema.setAttributeProperties(\"alignment\", { isFormatting: true });\n    if (shouldUseClasses) {\n      editor.conversion.attributeToAttribute(buildClassDefinition(optionsToConvert));\n    } else {\n      editor.conversion.for(\"downcast\").attributeToAttribute(buildDowncastInlineDefinition(optionsToConvert));\n    }\n    const upcastInlineDefinitions = buildUpcastInlineDefinitions(optionsToConvert);\n    for (const definition of upcastInlineDefinitions) {\n      editor.conversion.for(\"upcast\").attributeToAttribute(definition);\n    }\n    const upcastCompatibilityDefinitions = buildUpcastCompatibilityDefinitions(optionsToConvert);\n    for (const definition of upcastCompatibilityDefinitions) {\n      editor.conversion.for(\"upcast\").attributeToAttribute(definition);\n    }\n    editor.commands.add(\"alignment\", new AlignmentCommand(editor));\n  }\n};\nfunction buildDowncastInlineDefinition(options) {\n  const view = {};\n  for (const { name } of options) {\n    view[name] = {\n      key: \"style\",\n      value: {\n        \"text-align\": name\n      }\n    };\n  }\n  const definition = {\n    model: {\n      key: \"alignment\",\n      values: options.map((option) => option.name)\n    },\n    view\n  };\n  return definition;\n}\nfunction buildUpcastInlineDefinitions(options) {\n  const definitions = [];\n  for (const { name } of options) {\n    definitions.push({\n      view: {\n        key: \"style\",\n        value: {\n          \"text-align\": name\n        }\n      },\n      model: {\n        key: \"alignment\",\n        value: name\n      }\n    });\n  }\n  return definitions;\n}\nfunction buildUpcastCompatibilityDefinitions(options) {\n  const definitions = [];\n  for (const { name } of options) {\n    definitions.push({\n      view: {\n        key: \"align\",\n        value: name\n      },\n      model: {\n        key: \"alignment\",\n        value: name\n      }\n    });\n  }\n  return definitions;\n}\nfunction buildClassDefinition(options) {\n  const view = {};\n  for (const option of options) {\n    view[option.name] = {\n      key: \"class\",\n      value: option.className\n    };\n  }\n  const definition = {\n    model: {\n      key: \"alignment\",\n      values: options.map((option) => option.name)\n    },\n    view\n  };\n  return definition;\n}\n\n// node_modules/@ckeditor/ckeditor5-alignment/src/alignmentui.js\nvar iconsMap = /* @__PURE__ */ new Map([\n  [\"left\", icons.alignLeft],\n  [\"right\", icons.alignRight],\n  [\"center\", icons.alignCenter],\n  [\"justify\", icons.alignJustify]\n]);\nvar AlignmentUI = class extends Plugin {\n  /**\n   * Returns the localized option titles provided by the plugin.\n   *\n   * The following localized titles corresponding with\n   * {@link module:alignment/alignmentconfig~AlignmentConfig#options} are available:\n   *\n   * * `'left'`,\n   * * `'right'`,\n   * * `'center'`,\n   * * `'justify'`.\n   *\n   * @readonly\n   */\n  get localizedOptionTitles() {\n    const t = this.editor.t;\n    return {\n      \"left\": t(\"Align left\"),\n      \"right\": t(\"Align right\"),\n      \"center\": t(\"Align center\"),\n      \"justify\": t(\"Justify\")\n    };\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"AlignmentUI\";\n  }\n  /**\n   * @inheritDoc\n   */\n  init() {\n    const editor = this.editor;\n    const componentFactory = editor.ui.componentFactory;\n    const t = editor.t;\n    const options = normalizeAlignmentOptions(editor.config.get(\"alignment.options\"));\n    options.map((option) => option.name).filter(isSupported).forEach((option) => this._addButton(option));\n    componentFactory.add(\"alignment\", (locale) => {\n      const dropdownView = createDropdown(locale);\n      addToolbarToDropdown(dropdownView, () => options.map((option) => componentFactory.create(`alignment:${option.name}`)), {\n        enableActiveItemFocusOnDropdownOpen: true,\n        isVertical: true,\n        ariaLabel: t(\"Text alignment toolbar\")\n      });\n      dropdownView.buttonView.set({\n        label: t(\"Text alignment\"),\n        tooltip: true\n      });\n      dropdownView.extendTemplate({\n        attributes: {\n          class: \"ck-alignment-dropdown\"\n        }\n      });\n      const defaultIcon = locale.contentLanguageDirection === \"rtl\" ? iconsMap.get(\"right\") : iconsMap.get(\"left\");\n      const command = editor.commands.get(\"alignment\");\n      dropdownView.buttonView.bind(\"icon\").to(command, \"value\", (value) => iconsMap.get(value) || defaultIcon);\n      dropdownView.bind(\"isEnabled\").to(command, \"isEnabled\");\n      this.listenTo(dropdownView, \"execute\", () => {\n        editor.editing.view.focus();\n      });\n      return dropdownView;\n    });\n  }\n  /**\n   * Helper method for initializing the button and linking it with an appropriate command.\n   *\n   * @param option The name of the alignment option for which the button is added.\n   */\n  _addButton(option) {\n    const editor = this.editor;\n    editor.ui.componentFactory.add(`alignment:${option}`, (locale) => {\n      const command = editor.commands.get(\"alignment\");\n      const buttonView = new ButtonView(locale);\n      buttonView.set({\n        label: this.localizedOptionTitles[option],\n        icon: iconsMap.get(option),\n        tooltip: true,\n        isToggleable: true\n      });\n      buttonView.bind(\"isEnabled\").to(command);\n      buttonView.bind(\"isOn\").to(command, \"value\", (value) => value === option);\n      this.listenTo(buttonView, \"execute\", () => {\n        editor.execute(\"alignment\", { value: option });\n        editor.editing.view.focus();\n      });\n      return buttonView;\n    });\n  }\n};\n\n// node_modules/@ckeditor/ckeditor5-alignment/src/alignment.js\nvar Alignment = class extends Plugin {\n  /**\n   * @inheritDoc\n   */\n  static get requires() {\n    return [AlignmentEditing, AlignmentUI];\n  }\n  /**\n   * @inheritDoc\n   */\n  static get pluginName() {\n    return \"Alignment\";\n  }\n};\nexport {\n  Alignment as default\n};\n/*! Bundled license information:\n\n@ckeditor/ckeditor5-alignment/src/utils.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-alignment/src/alignmentcommand.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-alignment/src/alignmentediting.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-alignment/src/alignmentui.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n\n@ckeditor/ckeditor5-alignment/src/alignment.js:\n  (**\n   * @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.\n   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n   *)\n*/\n//# sourceMappingURL=@ckeditor_ckeditor5-alignment_src_alignment.js.map\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport ClassicEditorBase from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'\nimport CloudServicesPlugin from '@ckeditor/ckeditor5-cloud-services/src/cloudservices'\nimport EssentialsPlugin from '@ckeditor/ckeditor5-essentials/src/essentials'\nimport UploadAdapterPlugin from '@ckeditor/ckeditor5-adapter-ckfinder/src/uploadadapter'\nimport AutoformatPlugin from '@ckeditor/ckeditor5-autoformat/src/autoformat'\nimport BoldPlugin from '@ckeditor/ckeditor5-basic-styles/src/bold'\nimport ItalicPlugin from '@ckeditor/ckeditor5-basic-styles/src/italic'\nimport BlockQuotePlugin from '@ckeditor/ckeditor5-block-quote/src/blockquote'\nimport EasyImagePlugin from '@ckeditor/ckeditor5-easy-image/src/easyimage'\nimport HeadingPlugin from '@ckeditor/ckeditor5-heading/src/heading'\nimport ImagePlugin from '@ckeditor/ckeditor5-image/src/image'\nimport ImageCaptionPlugin from '@ckeditor/ckeditor5-image/src/imagecaption'\nimport ImageStylePlugin from '@ckeditor/ckeditor5-image/src/imagestyle'\nimport ImageToolbarPlugin from '@ckeditor/ckeditor5-image/src/imagetoolbar'\nimport ImageUploadPlugin from '@ckeditor/ckeditor5-image/src/imageupload'\nimport ImageResizePlugin from '@ckeditor/ckeditor5-image/src/imageresize'\nimport LinkPlugin from '@ckeditor/ckeditor5-link/src/link'\nimport ListPlugin from '@ckeditor/ckeditor5-list/src/list'\nimport ParagraphPlugin from '@ckeditor/ckeditor5-paragraph/src/paragraph'\nimport FontPlugin from '@ckeditor/ckeditor5-font/src/font'\nimport MediaEmbedPlugin from '@ckeditor/ckeditor5-media-embed/src/mediaembed'\nimport TextAlignmentPlugin from '@ckeditor/ckeditor5-alignment/src/alignment'\n\nclass ClassicEditor extends ClassicEditorBase {}\n\nclass CloudinaryUploadAdapter {\n  constructor(loader, cloudName, uploadPreset, folder) {\n    this.loader = loader;\n    this.cloudName = cloudName;\n    this.uploadPreset = uploadPreset;\n    this.folder = folder;\n  }\n\n  upload() {\n    return this.loader.file\n      .then(file => new Promise((resolve, reject) => {\n        this._initRequest();\n        this._initListeners(resolve, reject, file);\n        this._sendRequest(file);\n      }));\n  }\n\n  abort() {\n    if (this.xhr) {\n      this.xhr.abort();\n    }\n  }\n\n  _initRequest() {\n    const xhr = this.xhr = new XMLHttpRequest();\n    xhr.open('POST', `https://api.cloudinary.com/v1_1/${this.cloudName}/upload`, true);\n    xhr.responseType = 'json';\n  }\n\n  _initListeners(resolve, reject, file) {\n    const xhr = this.xhr;\n    const loader = this.loader;\n    const genericErrorText = `Couldn't upload file: ${file.name}.`;\n\n    xhr.addEventListener('error', () => reject(genericErrorText));\n    xhr.addEventListener('abort', () => reject());\n    xhr.addEventListener('load', () => {\n      const response = xhr.response;\n\n      if (!response || response.error) {\n        return reject(response && response.error ? response.error.message : genericErrorText);\n      }\n\n      resolve({\n        default: response.url\n      });\n    });\n\n    if (xhr.upload) {\n      xhr.upload.addEventListener('progress', evt => {\n        if (evt.lengthComputable) {\n          loader.uploadTotal = evt.total;\n          loader.uploaded = evt.loaded;\n        }\n      });\n    }\n  }\n\n  _sendRequest(file) {\n    const data = new FormData();\n    data.append('file', file);\n    data.append('upload_preset', this.uploadPreset);\n\n    if (this.folder) {\n      data.append('folder', this.folder);\n    }\n\n    this.xhr.send(data);\n  }\n}\n\nfunction CloudinaryUploadAdapterPlugin(editor) {\n  editor.plugins.get('FileRepository').createUploadAdapter = loader => {\n    return new CloudinaryUploadAdapter(\n      loader,\n      editor.config.get('cloudName'),\n      editor.config.get('uploadPreset'),\n      editor.config.get('folder')\n    );\n  };\n}\n\nClassicEditor.builtinPlugins = [\n  EssentialsPlugin,\n  UploadAdapterPlugin,\n  AutoformatPlugin,\n  BoldPlugin,\n  ItalicPlugin,\n  BlockQuotePlugin,\n  CloudServicesPlugin,\n  EasyImagePlugin,\n  HeadingPlugin,\n  ImagePlugin,\n  ImageCaptionPlugin,\n  ImageStylePlugin,\n  ImageToolbarPlugin,\n  ImageUploadPlugin,\n  LinkPlugin,\n  ListPlugin,\n  ParagraphPlugin,\n  FontPlugin,\n  MediaEmbedPlugin,\n  ImageResizePlugin,\n  TextAlignmentPlugin\n]\n\nClassicEditor.defaultConfig = {\n  toolbar: {\n    items: [\n      'heading',\n      '|',\n      'bold',\n      'italic',\n      'fontcolor',\n      'fontbackgroundcolor',\n      'fontfamily',\n      'fontsize',\n      'link',\n      'alignment',\n      'bulletedList',\n      'numberedList',\n      'imageUpload',\n      'blockQuote',\n      'mediaEmbed',\n      'undo',\n      'redo'\n    ]\n  },\n  alignment: {\n    options: [\n      'left',\n      'right',\n      'center',\n      'justify'\n    ]\n  },\n  image: {\n    resizeUnit: 'px',\n    toolbar: [\n      'imageStyle:full',\n      'imageStyle:side',\n      'imageStyle:alignLeft',\n      'imageStyle:alignCenter',\n      'imageStyle:alignRight',\n      '|',\n      'toggleImageCaption',\n      'imageTextAlternative'\n    ],\n    styles: [\n      'full',\n      'alignLeft',\n      'alignCenter',\n      'alignRight'\n    ]\n  },\n  language: 'en',\n  mediaEmbed: {\n    previewsInData: true\n  }\n}\n\nexport default class extends Controller {\n  static targets = [\n    \"field\",\n    \"input\"\n  ]\n  static values = {\n    cloudName: String,\n    uploadPreset: String,\n    folder: String\n  }\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  cleanupBeforeInit() {\n    $(this.element).find('.ck').remove()\n  }\n\n  initPluginInstance() {\n    if (!this.hasFieldTarget)\n      return\n\n    this.cleanupBeforeInit() // in case improperly torn down\n\n    ClassicEditor.create(this.fieldTarget, {\n      extraPlugins: [CloudinaryUploadAdapterPlugin],\n      cloudName: this.cloudNameValue,\n      uploadPreset: this.uploadPresetValue,\n      folder: this.folderValue\n    }).then((editor) => {\n      editor.editing.view.change(writer => {\n        writer.setStyle('min-height', '25em', editor.editing.view.document.getRoot());\n      });\n\n      if (this.fieldTarget.getAttribute('autofocus')) {\n        editor.editing.view.focus();\n      }\n\n      this.plugin = editor\n\n      this.fieldTarget.closest('form').addEventListener('submit', () => {\n        this.inputTarget.value = this.plugin.getData()\n      });\n    });\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined)\n      return\n\n    // revert to original markup, remove any event listeners\n    this.plugin.destroy()\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"uploadButton\", \"hiddenField\", \"thumbnail\" ]\n  static values = { \n    signaturesUrl: String,\n    height: Number,\n    width: Number,\n    cloudName: String,\n    apiKey: String,\n    googleApiKey: String,\n    urlFormat: String,\n    sources: String,\n    searchByRights: Boolean,\n    folder: String,\n    autoSubmit: Boolean,\n    submitButtonId: String\n  }\n  static classes = [ \"thumbnailShown\" ]\n\n  pickImageAndUpload(event) {\n    // don't submit the form.\n    event.preventDefault()\n\n    // prepare the list of default sources a user can upload an image from.\n    var defaultSources = ['local', 'url', 'camera']\n    if (this.hasGoogleApiKeyValue) {\n      defaultSources.push('image_search')\n    }\n\n    // configure cloudinary's uploader's options.\n    // many of these are configurable at the point where the `shared/fields/cloudinary_image` partial is included.\n    var options = {\n      cloud_name: this.cloudNameValue,\n      apiKey: this.apiKeyValue,\n      upload_preset: this.uploadPresetValue,\n      upload_signature: this.getCloudinarySignature.bind(this),\n      multiple: false,\n      sources: this.hasSourcesValue ? this.sourcesValue.split(',') : defaultSources,\n      search_by_rights: this.hasSearchByRightsValue && this.searchByRightsValue === false ? false : true, // default to true.\n      folder: this.folderValue\n    }\n    \n    if (this.hasGoogleApiKeyValue) {\n      options['google_api_key'] = this.googleApiKeyValue\n    }\n    \n    // open cloudinary's upload widget.\n    cloudinary.openUploadWidget(options, this.handleWidgetResponse.bind(this, event))\n  }\n  \n  clearImage(event) {\n    // don't submit the form.\n    event.preventDefault()\n\n    // clear the cloudinary id.\n    this.hiddenFieldTarget.value = null\n    \n    // remove any existing image from the button.\n    this.removeThumbnail()\n\n    // auto submit the form\n    if (this.autoSubmitValue && this.submitButtonIdValue) {\n      $(`#${this.submitButtonIdValue}`).click();\n    }\n  }\n  \n  getCloudinarySignature(callback, paramsToSign) {\n    $.ajax({\n      url: this.signaturesUrlValue,\n      type: \"GET\",\n      dataType: \"text\",\n      data: {data: paramsToSign},\n      complete: function() { console.log(\"complete\") },\n      success: function(signature, textStatus, xhr) { callback(signature) },\n      error: function(xhr, status, error) { console.log(xhr, status, error) }\n    })\n  }\n  \n  handleWidgetResponse(event, error, response) {\n    // after the user has successfully uploaded a single file ..\n    if (!error && response && response.event === \"success\") { \n      const data = response.info\n      \n      // update the cloudinary id field in the form.\n      this.hiddenFieldTarget.value = data.public_id\n\n      // remove any existing image.\n      this.removeThumbnail()\n\n      // generate a new image preview url.\n      this.addThumbnail(this.urlFormatValue.replace('CLOUDINARY_ID', data.public_id))\n\n      // auto submit the form\n      if (this.autoSubmitValue && this.submitButtonIdValue) {\n        $(`#${this.submitButtonIdValue}`).click();\n      }\n    }\n  }\n  \n  addThumbnail(url) {\n    var $imageElement = $(`<img src=\"${url}\" width=\"${this.widthValue}\" height=\"${this.heightValue}\" data-${this.identifier}-target=\"thumbnail\" />`)\n    $(this.uploadButtonTarget).prepend($imageElement)\n\n    // mark the image as present.\n    this.uploadButtonTarget.classList.add(this.thumbnailShownClass)\n  }\n  \n  removeThumbnail() {\n    if (!this.hasThumbnailTarget) { return }\n    this.uploadButtonTarget.removeChild(this.thumbnailTarget)\n    this.uploadButtonTarget.classList.remove(this.thumbnailShownClass)\n  }\n}\n","import {\n  __commonJS,\n  __publicField\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/@simonwep/pickr/dist/pickr.min.js\nvar require_pickr_min = __commonJS({\n  \"node_modules/@simonwep/pickr/dist/pickr.min.js\"(exports, module) {\n    !function(t, e) {\n      \"object\" == typeof exports && \"object\" == typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define([], e) : \"object\" == typeof exports ? exports.Pickr = e() : t.Pickr = e();\n    }(self, () => (() => {\n      \"use strict\";\n      var t = { d: (e2, o2) => {\n        for (var n2 in o2)\n          t.o(o2, n2) && !t.o(e2, n2) && Object.defineProperty(e2, n2, { enumerable: true, get: o2[n2] });\n      }, o: (t2, e2) => Object.prototype.hasOwnProperty.call(t2, e2), r: (t2) => {\n        \"undefined\" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t2, Symbol.toStringTag, { value: \"Module\" }), Object.defineProperty(t2, \"__esModule\", { value: true });\n      } }, e = {};\n      t.d(e, { default: () => E });\n      var o = {};\n      function n(t2, e2, o2, n2, i2 = {}) {\n        e2 instanceof HTMLCollection || e2 instanceof NodeList ? e2 = Array.from(e2) : Array.isArray(e2) || (e2 = [e2]), Array.isArray(o2) || (o2 = [o2]);\n        for (const s2 of e2)\n          for (const e3 of o2)\n            s2[t2](e3, n2, { capture: false, ...i2 });\n        return Array.prototype.slice.call(arguments, 1);\n      }\n      t.r(o), t.d(o, { adjustableInputNumbers: () => p, createElementFromString: () => r, createFromTemplate: () => a, eventPath: () => l, off: () => s, on: () => i, resolveElement: () => c });\n      const i = n.bind(null, \"addEventListener\"), s = n.bind(null, \"removeEventListener\");\n      function r(t2) {\n        const e2 = document.createElement(\"div\");\n        return e2.innerHTML = t2.trim(), e2.firstElementChild;\n      }\n      function a(t2) {\n        const e2 = (t3, e3) => {\n          const o3 = t3.getAttribute(e3);\n          return t3.removeAttribute(e3), o3;\n        }, o2 = (t3, n2 = {}) => {\n          const i2 = e2(t3, \":obj\"), s2 = e2(t3, \":ref\"), r2 = i2 ? n2[i2] = {} : n2;\n          s2 && (n2[s2] = t3);\n          for (const n3 of Array.from(t3.children)) {\n            const t4 = e2(n3, \":arr\"), i3 = o2(n3, t4 ? {} : r2);\n            t4 && (r2[t4] || (r2[t4] = [])).push(Object.keys(i3).length ? i3 : n3);\n          }\n          return n2;\n        };\n        return o2(r(t2));\n      }\n      function l(t2) {\n        let e2 = t2.path || t2.composedPath && t2.composedPath();\n        if (e2)\n          return e2;\n        let o2 = t2.target.parentElement;\n        for (e2 = [t2.target, o2]; o2 = o2.parentElement; )\n          e2.push(o2);\n        return e2.push(document, window), e2;\n      }\n      function c(t2) {\n        return t2 instanceof Element ? t2 : \"string\" == typeof t2 ? t2.split(/>>/g).reduce((t3, e2, o2, n2) => (t3 = t3.querySelector(e2), o2 < n2.length - 1 ? t3.shadowRoot : t3), document) : null;\n      }\n      function p(t2, e2 = (t3) => t3) {\n        function o2(o3) {\n          const n2 = [1e-3, 0.01, 0.1][Number(o3.shiftKey || 2 * o3.ctrlKey)] * (o3.deltaY < 0 ? 1 : -1);\n          let i2 = 0, s2 = t2.selectionStart;\n          t2.value = t2.value.replace(/[\\d.]+/g, (t3, o4) => o4 <= s2 && o4 + t3.length >= s2 ? (s2 = o4, e2(Number(t3), n2, i2)) : (i2++, t3)), t2.focus(), t2.setSelectionRange(s2, s2), o3.preventDefault(), t2.dispatchEvent(new Event(\"input\"));\n        }\n        i(t2, \"focus\", () => i(window, \"wheel\", o2, { passive: false })), i(t2, \"blur\", () => s(window, \"wheel\", o2));\n      }\n      const { min: u, max: h, floor: d, round: m } = Math;\n      function f(t2, e2, o2) {\n        e2 /= 100, o2 /= 100;\n        const n2 = d(t2 = t2 / 360 * 6), i2 = t2 - n2, s2 = o2 * (1 - e2), r2 = o2 * (1 - i2 * e2), a2 = o2 * (1 - (1 - i2) * e2), l2 = n2 % 6;\n        return [255 * [o2, r2, s2, s2, a2, o2][l2], 255 * [a2, o2, o2, r2, s2, s2][l2], 255 * [s2, s2, a2, o2, o2, r2][l2]];\n      }\n      function v(t2, e2, o2) {\n        const n2 = (2 - (e2 /= 100)) * (o2 /= 100) / 2;\n        return 0 !== n2 && (e2 = 1 === n2 ? 0 : n2 < 0.5 ? e2 * o2 / (2 * n2) : e2 * o2 / (2 - 2 * n2)), [t2, 100 * e2, 100 * n2];\n      }\n      function b(t2, e2, o2) {\n        const n2 = u(t2 /= 255, e2 /= 255, o2 /= 255), i2 = h(t2, e2, o2), s2 = i2 - n2;\n        let r2, a2;\n        if (0 === s2)\n          r2 = a2 = 0;\n        else {\n          a2 = s2 / i2;\n          const n3 = ((i2 - t2) / 6 + s2 / 2) / s2, l2 = ((i2 - e2) / 6 + s2 / 2) / s2, c2 = ((i2 - o2) / 6 + s2 / 2) / s2;\n          t2 === i2 ? r2 = c2 - l2 : e2 === i2 ? r2 = 1 / 3 + n3 - c2 : o2 === i2 && (r2 = 2 / 3 + l2 - n3), r2 < 0 ? r2 += 1 : r2 > 1 && (r2 -= 1);\n        }\n        return [360 * r2, 100 * a2, 100 * i2];\n      }\n      function y(t2, e2, o2, n2) {\n        e2 /= 100, o2 /= 100;\n        return [...b(255 * (1 - u(1, (t2 /= 100) * (1 - (n2 /= 100)) + n2)), 255 * (1 - u(1, e2 * (1 - n2) + n2)), 255 * (1 - u(1, o2 * (1 - n2) + n2)))];\n      }\n      function g(t2, e2, o2) {\n        e2 /= 100;\n        const n2 = 2 * (e2 *= (o2 /= 100) < 0.5 ? o2 : 1 - o2) / (o2 + e2) * 100, i2 = 100 * (o2 + e2);\n        return [t2, isNaN(n2) ? 0 : n2, i2];\n      }\n      function _(t2) {\n        return b(...t2.match(/.{2}/g).map((t3) => parseInt(t3, 16)));\n      }\n      function w(t2) {\n        t2 = t2.match(/^[a-zA-Z]+$/) ? function(t3) {\n          if (\"black\" === t3.toLowerCase())\n            return \"#000\";\n          const e3 = document.createElement(\"canvas\").getContext(\"2d\");\n          return e3.fillStyle = t3, \"#000\" === e3.fillStyle ? null : e3.fillStyle;\n        }(t2) : t2;\n        const e2 = { cmyk: /^cmyk\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)/i, rgba: /^rgba?\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D+([\\d.]+)(%?)\\D*?(([\\d.]+)(%?)|$)/i, hsla: /^hsla?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i, hsva: /^hsva?\\D+([\\d.]+)\\D+([\\d.]+)\\D+([\\d.]+)\\D*?(([\\d.]+)(%?)|$)/i, hexa: /^#?(([\\dA-Fa-f]{3,4})|([\\dA-Fa-f]{6})|([\\dA-Fa-f]{8}))$/i }, o2 = (t3) => t3.map((t4) => /^(|\\d+)\\.\\d+|\\d+$/.test(t4) ? Number(t4) : void 0);\n        let n2;\n        t:\n          for (const i2 in e2)\n            if (n2 = e2[i2].exec(t2))\n              switch (i2) {\n                case \"cmyk\": {\n                  const [, t3, e3, s2, r2] = o2(n2);\n                  if (t3 > 100 || e3 > 100 || s2 > 100 || r2 > 100)\n                    break t;\n                  return { values: y(t3, e3, s2, r2), type: i2 };\n                }\n                case \"rgba\": {\n                  let [, t3, , e3, , s2, , , r2] = o2(n2);\n                  if (t3 = \"%\" === n2[2] ? t3 / 100 * 255 : t3, e3 = \"%\" === n2[4] ? e3 / 100 * 255 : e3, s2 = \"%\" === n2[6] ? s2 / 100 * 255 : s2, r2 = \"%\" === n2[9] ? r2 / 100 : r2, t3 > 255 || e3 > 255 || s2 > 255 || r2 < 0 || r2 > 1)\n                    break t;\n                  return { values: [...b(t3, e3, s2), r2], a: r2, type: i2 };\n                }\n                case \"hexa\": {\n                  let [, t3] = n2;\n                  4 !== t3.length && 3 !== t3.length || (t3 = t3.split(\"\").map((t4) => t4 + t4).join(\"\"));\n                  const e3 = t3.substring(0, 6);\n                  let o3 = t3.substring(6);\n                  return o3 = o3 ? parseInt(o3, 16) / 255 : void 0, { values: [..._(e3), o3], a: o3, type: i2 };\n                }\n                case \"hsla\": {\n                  let [, t3, e3, s2, , r2] = o2(n2);\n                  if (r2 = \"%\" === n2[6] ? r2 / 100 : r2, t3 > 360 || e3 > 100 || s2 > 100 || r2 < 0 || r2 > 1)\n                    break t;\n                  return { values: [...g(t3, e3, s2), r2], a: r2, type: i2 };\n                }\n                case \"hsva\": {\n                  let [, t3, e3, s2, , r2] = o2(n2);\n                  if (r2 = \"%\" === n2[6] ? r2 / 100 : r2, t3 > 360 || e3 > 100 || s2 > 100 || r2 < 0 || r2 > 1)\n                    break t;\n                  return { values: [t3, e3, s2, r2], a: r2, type: i2 };\n                }\n              }\n        return { values: null, type: null };\n      }\n      function A(t2 = 0, e2 = 0, o2 = 0, n2 = 1) {\n        const i2 = (t3, e3) => (o3 = -1) => e3(~o3 ? t3.map((t4) => Number(t4.toFixed(o3))) : t3), s2 = { h: t2, s: e2, v: o2, a: n2, toHSVA() {\n          const t3 = [s2.h, s2.s, s2.v, s2.a];\n          return t3.toString = i2(t3, (t4) => `hsva(${t4[0]}, ${t4[1]}%, ${t4[2]}%, ${s2.a})`), t3;\n        }, toHSLA() {\n          const t3 = [...v(s2.h, s2.s, s2.v), s2.a];\n          return t3.toString = i2(t3, (t4) => `hsla(${t4[0]}, ${t4[1]}%, ${t4[2]}%, ${s2.a})`), t3;\n        }, toRGBA() {\n          const t3 = [...f(s2.h, s2.s, s2.v), s2.a];\n          return t3.toString = i2(t3, (t4) => `rgba(${t4[0]}, ${t4[1]}, ${t4[2]}, ${s2.a})`), t3;\n        }, toCMYK() {\n          const t3 = function(t4, e3, o3) {\n            const n3 = f(t4, e3, o3), i3 = n3[0] / 255, s3 = n3[1] / 255, r2 = n3[2] / 255, a2 = u(1 - i3, 1 - s3, 1 - r2);\n            return [100 * (1 === a2 ? 0 : (1 - i3 - a2) / (1 - a2)), 100 * (1 === a2 ? 0 : (1 - s3 - a2) / (1 - a2)), 100 * (1 === a2 ? 0 : (1 - r2 - a2) / (1 - a2)), 100 * a2];\n          }(s2.h, s2.s, s2.v);\n          return t3.toString = i2(t3, (t4) => `cmyk(${t4[0]}%, ${t4[1]}%, ${t4[2]}%, ${t4[3]}%)`), t3;\n        }, toHEXA() {\n          const t3 = function(t4, e4, o3) {\n            return f(t4, e4, o3).map((t5) => m(t5).toString(16).padStart(2, \"0\"));\n          }(s2.h, s2.s, s2.v), e3 = s2.a >= 1 ? \"\" : Number((255 * s2.a).toFixed(0)).toString(16).toUpperCase().padStart(2, \"0\");\n          return e3 && t3.push(e3), t3.toString = () => `#${t3.join(\"\").toUpperCase()}`, t3;\n        }, clone: () => A(s2.h, s2.s, s2.v, s2.a) };\n        return s2;\n      }\n      const $ = (t2) => Math.max(Math.min(t2, 1), 0);\n      function C(t2) {\n        const e2 = { options: Object.assign({ lock: null, onchange: () => 0, onstop: () => 0 }, t2), _keyboard(t3) {\n          const { options: o3 } = e2, { type: n3, key: i2 } = t3;\n          if (document.activeElement === o3.wrapper) {\n            const { lock: o4 } = e2.options, s2 = \"ArrowUp\" === i2, r3 = \"ArrowRight\" === i2, a2 = \"ArrowDown\" === i2, l2 = \"ArrowLeft\" === i2;\n            if (\"keydown\" === n3 && (s2 || r3 || a2 || l2)) {\n              let n4 = 0, i3 = 0;\n              \"v\" === o4 ? n4 = s2 || r3 ? 1 : -1 : \"h\" === o4 ? n4 = s2 || r3 ? -1 : 1 : (i3 = s2 ? -1 : a2 ? 1 : 0, n4 = l2 ? -1 : r3 ? 1 : 0), e2.update($(e2.cache.x + 0.01 * n4), $(e2.cache.y + 0.01 * i3)), t3.preventDefault();\n            } else\n              i2.startsWith(\"Arrow\") && (e2.options.onstop(), t3.preventDefault());\n          }\n        }, _tapstart(t3) {\n          i(document, [\"mouseup\", \"touchend\", \"touchcancel\"], e2._tapstop), i(document, [\"mousemove\", \"touchmove\"], e2._tapmove), t3.cancelable && t3.preventDefault(), e2._tapmove(t3);\n        }, _tapmove(t3) {\n          const { options: o3, cache: n3 } = e2, { lock: i2, element: s2, wrapper: r3 } = o3, a2 = r3.getBoundingClientRect();\n          let l2 = 0, c2 = 0;\n          if (t3) {\n            const e3 = t3 && t3.touches && t3.touches[0];\n            l2 = t3 ? (e3 || t3).clientX : 0, c2 = t3 ? (e3 || t3).clientY : 0, l2 < a2.left ? l2 = a2.left : l2 > a2.left + a2.width && (l2 = a2.left + a2.width), c2 < a2.top ? c2 = a2.top : c2 > a2.top + a2.height && (c2 = a2.top + a2.height), l2 -= a2.left, c2 -= a2.top;\n          } else\n            n3 && (l2 = n3.x * a2.width, c2 = n3.y * a2.height);\n          \"h\" !== i2 && (s2.style.left = `calc(${l2 / a2.width * 100}% - ${s2.offsetWidth / 2}px)`), \"v\" !== i2 && (s2.style.top = `calc(${c2 / a2.height * 100}% - ${s2.offsetHeight / 2}px)`), e2.cache = { x: l2 / a2.width, y: c2 / a2.height };\n          const p2 = $(l2 / a2.width), u2 = $(c2 / a2.height);\n          switch (i2) {\n            case \"v\":\n              return o3.onchange(p2);\n            case \"h\":\n              return o3.onchange(u2);\n            default:\n              return o3.onchange(p2, u2);\n          }\n        }, _tapstop() {\n          e2.options.onstop(), s(document, [\"mouseup\", \"touchend\", \"touchcancel\"], e2._tapstop), s(document, [\"mousemove\", \"touchmove\"], e2._tapmove);\n        }, trigger() {\n          e2._tapmove();\n        }, update(t3 = 0, o3 = 0) {\n          const { left: n3, top: i2, width: s2, height: r3 } = e2.options.wrapper.getBoundingClientRect();\n          \"h\" === e2.options.lock && (o3 = t3), e2._tapmove({ clientX: n3 + s2 * t3, clientY: i2 + r3 * o3 });\n        }, destroy() {\n          const { options: t3, _tapstart: o3, _keyboard: n3 } = e2;\n          s(document, [\"keydown\", \"keyup\"], n3), s([t3.wrapper, t3.element], \"mousedown\", o3), s([t3.wrapper, t3.element], \"touchstart\", o3, { passive: false });\n        } }, { options: o2, _tapstart: n2, _keyboard: r2 } = e2;\n        return i([o2.wrapper, o2.element], \"mousedown\", n2), i([o2.wrapper, o2.element], \"touchstart\", n2, { passive: false }), i(document, [\"keydown\", \"keyup\"], r2), e2;\n      }\n      function k(t2 = {}) {\n        t2 = Object.assign({ onchange: () => 0, className: \"\", elements: [] }, t2);\n        const e2 = i(t2.elements, \"click\", (e3) => {\n          t2.elements.forEach((o2) => o2.classList[e3.target === o2 ? \"add\" : \"remove\"](t2.className)), t2.onchange(e3), e3.stopPropagation();\n        });\n        return { destroy: () => s(...e2) };\n      }\n      const S = { variantFlipOrder: { start: \"sme\", middle: \"mse\", end: \"ems\" }, positionFlipOrder: { top: \"tbrl\", right: \"rltb\", bottom: \"btrl\", left: \"lrbt\" }, position: \"bottom\", margin: 8, padding: 0 }, O = (t2, e2, o2) => {\n        const n2 = \"object\" != typeof t2 || t2 instanceof HTMLElement ? { reference: t2, popper: e2, ...o2 } : t2;\n        return { update(t3 = n2) {\n          const { reference: e3, popper: o3 } = Object.assign(n2, t3);\n          if (!o3 || !e3)\n            throw new Error(\"Popper- or reference-element missing.\");\n          return ((t4, e4, o4) => {\n            const { container: n3, arrow: i2, margin: s2, padding: r2, position: a2, variantFlipOrder: l2, positionFlipOrder: c2 } = { container: document.documentElement.getBoundingClientRect(), ...S, ...o4 }, { left: p2, top: u2 } = e4.style;\n            e4.style.left = \"0\", e4.style.top = \"0\";\n            const h2 = t4.getBoundingClientRect(), d2 = e4.getBoundingClientRect(), m2 = { t: h2.top - d2.height - s2, b: h2.bottom + s2, r: h2.right + s2, l: h2.left - d2.width - s2 }, f2 = { vs: h2.left, vm: h2.left + h2.width / 2 - d2.width / 2, ve: h2.left + h2.width - d2.width, hs: h2.top, hm: h2.bottom - h2.height / 2 - d2.height / 2, he: h2.bottom - d2.height }, [v2, b2 = \"middle\"] = a2.split(\"-\"), y2 = c2[v2], g2 = l2[b2], { top: _2, left: w2, bottom: A2, right: $2 } = n3;\n            for (const t5 of y2) {\n              const o5 = \"t\" === t5 || \"b\" === t5;\n              let n4 = m2[t5];\n              const [s3, a3] = o5 ? [\"top\", \"left\"] : [\"left\", \"top\"], [l3, c3] = o5 ? [d2.height, d2.width] : [d2.width, d2.height], [p3, u3] = o5 ? [A2, $2] : [$2, A2], [v3, b3] = o5 ? [_2, w2] : [w2, _2];\n              if (!(n4 < v3 || n4 + l3 + r2 > p3))\n                for (const p4 of g2) {\n                  let m3 = f2[(o5 ? \"v\" : \"h\") + p4];\n                  if (!(m3 < b3 || m3 + c3 + r2 > u3)) {\n                    if (m3 -= d2[a3], n4 -= d2[s3], e4.style[a3] = `${m3}px`, e4.style[s3] = `${n4}px`, i2) {\n                      const t6 = o5 ? h2.width / 2 : h2.height / 2, e5 = 2 * t6 < c3 ? h2[a3] + t6 : m3 + c3 / 2;\n                      n4 < h2[s3] && (n4 += l3), i2.style[a3] = `${e5}px`, i2.style[s3] = `${n4}px`;\n                    }\n                    return t5 + p4;\n                  }\n                }\n            }\n            return e4.style.left = p2, e4.style.top = u2, null;\n          })(e3, o3, n2);\n        } };\n      };\n      const _E = class _E {\n        constructor(t2) {\n          __publicField(this, \"_initializingActive\", true);\n          __publicField(this, \"_recalc\", true);\n          __publicField(this, \"_nanopop\", null);\n          __publicField(this, \"_root\", null);\n          __publicField(this, \"_color\", A());\n          __publicField(this, \"_lastColor\", A());\n          __publicField(this, \"_swatchColors\", []);\n          __publicField(this, \"_setupAnimationFrame\", null);\n          __publicField(this, \"_eventListener\", { init: [], save: [], hide: [], show: [], clear: [], change: [], changestop: [], cancel: [], swatchselect: [] });\n          this.options = t2 = Object.assign({ ..._E.DEFAULT_OPTIONS }, t2);\n          const { swatches: e2, components: o2, theme: n2, sliders: i2, lockOpacity: s2, padding: r2 } = t2;\n          [\"nano\", \"monolith\"].includes(n2) && !i2 && (t2.sliders = \"h\"), o2.interaction || (o2.interaction = {});\n          const { preview: a2, opacity: l2, hue: c2, palette: p2 } = o2;\n          o2.opacity = !s2 && l2, o2.palette = p2 || a2 || l2 || c2, this._preBuild(), this._buildComponents(), this._bindEvents(), this._finalBuild(), e2 && e2.length && e2.forEach((t3) => this.addSwatch(t3));\n          const { button: u2, app: h2 } = this._root;\n          this._nanopop = O(u2, h2, { margin: r2 }), u2.setAttribute(\"role\", \"button\"), u2.setAttribute(\"aria-label\", this._t(\"btn:toggle\"));\n          const d2 = this;\n          this._setupAnimationFrame = requestAnimationFrame(function e3() {\n            if (!h2.offsetWidth)\n              return requestAnimationFrame(e3);\n            d2.setColor(t2.default), d2._rePositioningPicker(), t2.defaultRepresentation && (d2._representation = t2.defaultRepresentation, d2.setColorRepresentation(d2._representation)), t2.showAlways && d2.show(), d2._initializingActive = false, d2._emit(\"init\");\n          });\n        }\n        _preBuild() {\n          const { options: t2 } = this;\n          for (const e2 of [\"el\", \"container\"])\n            t2[e2] = c(t2[e2]);\n          this._root = ((t3) => {\n            const { components: e2, useAsButton: o2, inline: n2, appClass: i2, theme: s2, lockOpacity: r2 } = t3.options, l2 = (t4) => t4 ? \"\" : 'style=\"display:none\" hidden', c2 = (e3) => t3._t(e3), p2 = a(`\n      <div :ref=\"root\" class=\"pickr\">\n\n        ${o2 ? \"\" : '<button type=\"button\" :ref=\"button\" class=\"pcr-button\"></button>'}\n\n        <div :ref=\"app\" class=\"pcr-app ${i2 || \"\"}\" data-theme=\"${s2}\" ${n2 ? 'style=\"position: unset\"' : \"\"} aria-label=\"${c2(\"ui:dialog\")}\" role=\"window\">\n          <div class=\"pcr-selection\" ${l2(e2.palette)}>\n            <div :obj=\"preview\" class=\"pcr-color-preview\" ${l2(e2.preview)}>\n              <button type=\"button\" :ref=\"lastColor\" class=\"pcr-last-color\" aria-label=\"${c2(\"btn:last-color\")}\"></button>\n              <div :ref=\"currentColor\" class=\"pcr-current-color\"></div>\n            </div>\n\n            <div :obj=\"palette\" class=\"pcr-color-palette\">\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"palette\" class=\"pcr-palette\" tabindex=\"0\" aria-label=\"${c2(\"aria:palette\")}\" role=\"listbox\"></div>\n            </div>\n\n            <div :obj=\"hue\" class=\"pcr-color-chooser\" ${l2(e2.hue)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-hue pcr-slider\" tabindex=\"0\" aria-label=\"${c2(\"aria:hue\")}\" role=\"slider\"></div>\n            </div>\n\n            <div :obj=\"opacity\" class=\"pcr-color-opacity\" ${l2(e2.opacity)}>\n              <div :ref=\"picker\" class=\"pcr-picker\"></div>\n              <div :ref=\"slider\" class=\"pcr-opacity pcr-slider\" tabindex=\"0\" aria-label=\"${c2(\"aria:opacity\")}\" role=\"slider\"></div>\n            </div>\n          </div>\n\n          <div class=\"pcr-swatches ${e2.palette ? \"\" : \"pcr-last\"}\" :ref=\"swatches\"></div>\n\n          <div :obj=\"interaction\" class=\"pcr-interaction\" ${l2(Object.keys(e2.interaction).length)}>\n            <input :ref=\"result\" class=\"pcr-result\" type=\"text\" spellcheck=\"false\" ${l2(e2.interaction.input)} aria-label=\"${c2(\"aria:input\")}\">\n\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HEXA\" value=\"${r2 ? \"HEX\" : \"HEXA\"}\" type=\"button\" ${l2(e2.interaction.hex)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"RGBA\" value=\"${r2 ? \"RGB\" : \"RGBA\"}\" type=\"button\" ${l2(e2.interaction.rgba)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSLA\" value=\"${r2 ? \"HSL\" : \"HSLA\"}\" type=\"button\" ${l2(e2.interaction.hsla)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"HSVA\" value=\"${r2 ? \"HSV\" : \"HSVA\"}\" type=\"button\" ${l2(e2.interaction.hsva)}>\n            <input :arr=\"options\" class=\"pcr-type\" data-type=\"CMYK\" value=\"CMYK\" type=\"button\" ${l2(e2.interaction.cmyk)}>\n\n            <input :ref=\"save\" class=\"pcr-save\" value=\"${c2(\"btn:save\")}\" type=\"button\" ${l2(e2.interaction.save)} aria-label=\"${c2(\"aria:btn:save\")}\">\n            <input :ref=\"cancel\" class=\"pcr-cancel\" value=\"${c2(\"btn:cancel\")}\" type=\"button\" ${l2(e2.interaction.cancel)} aria-label=\"${c2(\"aria:btn:cancel\")}\">\n            <input :ref=\"clear\" class=\"pcr-clear\" value=\"${c2(\"btn:clear\")}\" type=\"button\" ${l2(e2.interaction.clear)} aria-label=\"${c2(\"aria:btn:clear\")}\">\n          </div>\n        </div>\n      </div>\n    `), u2 = p2.interaction;\n            return u2.options.find((t4) => !t4.hidden && !t4.classList.add(\"active\")), u2.type = () => u2.options.find((t4) => t4.classList.contains(\"active\")), p2;\n          })(this), t2.useAsButton && (this._root.button = t2.el), t2.container.appendChild(this._root.root);\n        }\n        _finalBuild() {\n          const t2 = this.options, e2 = this._root;\n          if (t2.container.removeChild(e2.root), t2.inline) {\n            const o2 = t2.el.parentElement;\n            t2.el.nextSibling ? o2.insertBefore(e2.app, t2.el.nextSibling) : o2.appendChild(e2.app);\n          } else\n            t2.container.appendChild(e2.app);\n          t2.useAsButton ? t2.inline && t2.el.remove() : t2.el.parentNode.replaceChild(e2.root, t2.el), t2.disabled && this.disable(), t2.comparison || (e2.button.style.transition = \"none\", t2.useAsButton || (e2.preview.lastColor.style.transition = \"none\")), this.hide();\n        }\n        _buildComponents() {\n          const t2 = this, e2 = this.options.components, o2 = (t2.options.sliders || \"v\").repeat(2), [n2, i2] = o2.match(/^[vh]+$/g) ? o2 : [], s2 = () => this._color || (this._color = this._lastColor.clone()), r2 = { palette: C({ element: t2._root.palette.picker, wrapper: t2._root.palette.palette, onstop: () => t2._emit(\"changestop\", \"slider\", t2), onchange(o3, n3) {\n            if (!e2.palette)\n              return;\n            const i3 = s2(), { _root: r3, options: a2 } = t2, { lastColor: l2, currentColor: c2 } = r3.preview;\n            t2._recalc && (i3.s = 100 * o3, i3.v = 100 - 100 * n3, i3.v < 0 && (i3.v = 0), t2._updateOutput(\"slider\"));\n            const p2 = i3.toRGBA().toString(0);\n            this.element.style.background = p2, this.wrapper.style.background = `\n                        linear-gradient(to top, rgba(0, 0, 0, ${i3.a}), transparent),\n                        linear-gradient(to left, hsla(${i3.h}, 100%, 50%, ${i3.a}), rgba(255, 255, 255, ${i3.a}))\n                    `, a2.comparison ? a2.useAsButton || t2._lastColor || l2.style.setProperty(\"--pcr-color\", p2) : (r3.button.style.setProperty(\"--pcr-color\", p2), r3.button.classList.remove(\"clear\"));\n            const u2 = i3.toHEXA().toString();\n            for (const { el: e3, color: o4 } of t2._swatchColors)\n              e3.classList[u2 === o4.toHEXA().toString() ? \"add\" : \"remove\"](\"pcr-active\");\n            c2.style.setProperty(\"--pcr-color\", p2);\n          } }), hue: C({ lock: \"v\" === i2 ? \"h\" : \"v\", element: t2._root.hue.picker, wrapper: t2._root.hue.slider, onstop: () => t2._emit(\"changestop\", \"slider\", t2), onchange(o3) {\n            if (!e2.hue || !e2.palette)\n              return;\n            const n3 = s2();\n            t2._recalc && (n3.h = 360 * o3), this.element.style.backgroundColor = `hsl(${n3.h}, 100%, 50%)`, r2.palette.trigger();\n          } }), opacity: C({ lock: \"v\" === n2 ? \"h\" : \"v\", element: t2._root.opacity.picker, wrapper: t2._root.opacity.slider, onstop: () => t2._emit(\"changestop\", \"slider\", t2), onchange(o3) {\n            if (!e2.opacity || !e2.palette)\n              return;\n            const n3 = s2();\n            t2._recalc && (n3.a = Math.round(100 * o3) / 100), this.element.style.background = `rgba(0, 0, 0, ${n3.a})`, r2.palette.trigger();\n          } }), selectable: k({ elements: t2._root.interaction.options, className: \"active\", onchange(e3) {\n            t2._representation = e3.target.getAttribute(\"data-type\").toUpperCase(), t2._recalc && t2._updateOutput(\"swatch\");\n          } }) };\n          this._components = r2;\n        }\n        _bindEvents() {\n          const { _root: t2, options: e2 } = this, o2 = [i(t2.interaction.clear, \"click\", () => this._clearColor()), i([t2.interaction.cancel, t2.preview.lastColor], \"click\", () => {\n            this.setHSVA(...(this._lastColor || this._color).toHSVA(), true), this._emit(\"cancel\");\n          }), i(t2.interaction.save, \"click\", () => {\n            !this.applyColor() && !e2.showAlways && this.hide();\n          }), i(t2.interaction.result, [\"keyup\", \"input\"], (t3) => {\n            this.setColor(t3.target.value, true) && !this._initializingActive && (this._emit(\"change\", this._color, \"input\", this), this._emit(\"changestop\", \"input\", this)), t3.stopImmediatePropagation();\n          }), i(t2.interaction.result, [\"focus\", \"blur\"], (t3) => {\n            this._recalc = \"blur\" === t3.type, this._recalc && this._updateOutput(null);\n          }), i([t2.palette.palette, t2.palette.picker, t2.hue.slider, t2.hue.picker, t2.opacity.slider, t2.opacity.picker], [\"mousedown\", \"touchstart\"], () => this._recalc = true, { passive: true })];\n          if (!e2.showAlways) {\n            const n2 = e2.closeWithKey;\n            o2.push(i(t2.button, \"click\", () => this.isOpen() ? this.hide() : this.show()), i(document, \"keyup\", (t3) => this.isOpen() && (t3.key === n2 || t3.code === n2) && this.hide()), i(document, [\"touchstart\", \"mousedown\"], (e3) => {\n              this.isOpen() && !l(e3).some((e4) => e4 === t2.app || e4 === t2.button) && this.hide();\n            }, { capture: true }));\n          }\n          if (e2.adjustableNumbers) {\n            const e3 = { rgba: [255, 255, 255, 1], hsva: [360, 100, 100, 1], hsla: [360, 100, 100, 1], cmyk: [100, 100, 100, 100] };\n            p(t2.interaction.result, (t3, o3, n2) => {\n              const i2 = e3[this.getColorRepresentation().toLowerCase()];\n              if (i2) {\n                const e4 = i2[n2], s2 = t3 + (e4 >= 100 ? 1e3 * o3 : o3);\n                return s2 <= 0 ? 0 : Number((s2 < e4 ? s2 : e4).toPrecision(3));\n              }\n              return t3;\n            });\n          }\n          if (e2.autoReposition && !e2.inline) {\n            let t3 = null;\n            const n2 = this;\n            o2.push(i(window, [\"scroll\", \"resize\"], () => {\n              n2.isOpen() && (e2.closeOnScroll && n2.hide(), null === t3 ? (t3 = setTimeout(() => t3 = null, 100), requestAnimationFrame(function e3() {\n                n2._rePositioningPicker(), null !== t3 && requestAnimationFrame(e3);\n              })) : (clearTimeout(t3), t3 = setTimeout(() => t3 = null, 100)));\n            }, { capture: true }));\n          }\n          this._eventBindings = o2;\n        }\n        _rePositioningPicker() {\n          const { options: t2 } = this;\n          if (!t2.inline) {\n            if (!this._nanopop.update({ container: document.body.getBoundingClientRect(), position: t2.position })) {\n              const t3 = this._root.app, e2 = t3.getBoundingClientRect();\n              t3.style.top = (window.innerHeight - e2.height) / 2 + \"px\", t3.style.left = (window.innerWidth - e2.width) / 2 + \"px\";\n            }\n          }\n        }\n        _updateOutput(t2) {\n          const { _root: e2, _color: o2, options: n2 } = this;\n          if (e2.interaction.type()) {\n            const t3 = `to${e2.interaction.type().getAttribute(\"data-type\")}`;\n            e2.interaction.result.value = \"function\" == typeof o2[t3] ? o2[t3]().toString(n2.outputPrecision) : \"\";\n          }\n          !this._initializingActive && this._recalc && this._emit(\"change\", o2, t2, this);\n        }\n        _clearColor(t2 = false) {\n          const { _root: e2, options: o2 } = this;\n          o2.useAsButton || e2.button.style.setProperty(\"--pcr-color\", \"rgba(0, 0, 0, 0.15)\"), e2.button.classList.add(\"clear\"), o2.showAlways || this.hide(), this._lastColor = null, this._initializingActive || t2 || (this._emit(\"save\", null), this._emit(\"clear\"));\n        }\n        _parseLocalColor(t2) {\n          const { values: e2, type: o2, a: n2 } = w(t2), { lockOpacity: i2 } = this.options, s2 = void 0 !== n2 && 1 !== n2;\n          return e2 && 3 === e2.length && (e2[3] = void 0), { values: !e2 || i2 && s2 ? null : e2, type: o2 };\n        }\n        _t(t2) {\n          return this.options.i18n[t2] || _E.I18N_DEFAULTS[t2];\n        }\n        _emit(t2, ...e2) {\n          this._eventListener[t2].forEach((t3) => t3(...e2, this));\n        }\n        on(t2, e2) {\n          return this._eventListener[t2].push(e2), this;\n        }\n        off(t2, e2) {\n          const o2 = this._eventListener[t2] || [], n2 = o2.indexOf(e2);\n          return ~n2 && o2.splice(n2, 1), this;\n        }\n        addSwatch(t2) {\n          const { values: e2 } = this._parseLocalColor(t2);\n          if (e2) {\n            const { _swatchColors: t3, _root: o2 } = this, n2 = A(...e2), s2 = r(`<button type=\"button\" style=\"--pcr-color: ${n2.toRGBA().toString(0)}\" aria-label=\"${this._t(\"btn:swatch\")}\"/>`);\n            return o2.swatches.appendChild(s2), t3.push({ el: s2, color: n2 }), this._eventBindings.push(i(s2, \"click\", () => {\n              this.setHSVA(...n2.toHSVA(), true), this._emit(\"swatchselect\", n2), this._emit(\"change\", n2, \"swatch\", this);\n            })), true;\n          }\n          return false;\n        }\n        removeSwatch(t2) {\n          const e2 = this._swatchColors[t2];\n          if (e2) {\n            const { el: o2 } = e2;\n            return this._root.swatches.removeChild(o2), this._swatchColors.splice(t2, 1), true;\n          }\n          return false;\n        }\n        applyColor(t2 = false) {\n          const { preview: e2, button: o2 } = this._root, n2 = this._color.toRGBA().toString(0);\n          return e2.lastColor.style.setProperty(\"--pcr-color\", n2), this.options.useAsButton || o2.style.setProperty(\"--pcr-color\", n2), o2.classList.remove(\"clear\"), this._lastColor = this._color.clone(), this._initializingActive || t2 || this._emit(\"save\", this._color), this;\n        }\n        destroy() {\n          cancelAnimationFrame(this._setupAnimationFrame), this._eventBindings.forEach((t2) => s(...t2)), Object.keys(this._components).forEach((t2) => this._components[t2].destroy());\n        }\n        destroyAndRemove() {\n          this.destroy();\n          const { root: t2, app: e2 } = this._root;\n          t2.parentElement && t2.parentElement.removeChild(t2), e2.parentElement.removeChild(e2), Object.keys(this).forEach((t3) => this[t3] = null);\n        }\n        hide() {\n          return !!this.isOpen() && (this._root.app.classList.remove(\"visible\"), this._emit(\"hide\"), true);\n        }\n        show() {\n          return !this.options.disabled && !this.isOpen() && (this._root.app.classList.add(\"visible\"), this._rePositioningPicker(), this._emit(\"show\", this._color), this);\n        }\n        isOpen() {\n          return this._root.app.classList.contains(\"visible\");\n        }\n        setHSVA(t2 = 360, e2 = 0, o2 = 0, n2 = 1, i2 = false) {\n          const s2 = this._recalc;\n          if (this._recalc = false, t2 < 0 || t2 > 360 || e2 < 0 || e2 > 100 || o2 < 0 || o2 > 100 || n2 < 0 || n2 > 1)\n            return false;\n          this._color = A(t2, e2, o2, n2);\n          const { hue: r2, opacity: a2, palette: l2 } = this._components;\n          return r2.update(t2 / 360), a2.update(n2), l2.update(e2 / 100, 1 - o2 / 100), i2 || this.applyColor(), s2 && this._updateOutput(), this._recalc = s2, true;\n        }\n        setColor(t2, e2 = false) {\n          if (null === t2)\n            return this._clearColor(e2), true;\n          const { values: o2, type: n2 } = this._parseLocalColor(t2);\n          if (o2) {\n            const t3 = n2.toUpperCase(), { options: i2 } = this._root.interaction, s2 = i2.find((e3) => e3.getAttribute(\"data-type\") === t3);\n            if (s2 && !s2.hidden)\n              for (const t4 of i2)\n                t4.classList[t4 === s2 ? \"add\" : \"remove\"](\"active\");\n            return !!this.setHSVA(...o2, e2) && this.setColorRepresentation(t3);\n          }\n          return false;\n        }\n        setColorRepresentation(t2) {\n          return t2 = t2.toUpperCase(), !!this._root.interaction.options.find((e2) => e2.getAttribute(\"data-type\").startsWith(t2) && !e2.click());\n        }\n        getColorRepresentation() {\n          return this._representation;\n        }\n        getColor() {\n          return this._color;\n        }\n        getSelectedColor() {\n          return this._lastColor;\n        }\n        getRoot() {\n          return this._root;\n        }\n        disable() {\n          return this.hide(), this.options.disabled = true, this._root.button.classList.add(\"disabled\"), this;\n        }\n        enable() {\n          return this.options.disabled = false, this._root.button.classList.remove(\"disabled\"), this;\n        }\n      };\n      __publicField(_E, \"utils\", o);\n      __publicField(_E, \"version\", \"1.9.0\");\n      __publicField(_E, \"I18N_DEFAULTS\", { \"ui:dialog\": \"color picker dialog\", \"btn:toggle\": \"toggle color picker dialog\", \"btn:swatch\": \"color swatch\", \"btn:last-color\": \"use previous color\", \"btn:save\": \"Save\", \"btn:cancel\": \"Cancel\", \"btn:clear\": \"Clear\", \"aria:btn:save\": \"save and close\", \"aria:btn:cancel\": \"cancel and close\", \"aria:btn:clear\": \"clear and close\", \"aria:input\": \"color input field\", \"aria:palette\": \"color selection area\", \"aria:hue\": \"hue selection slider\", \"aria:opacity\": \"selection slider\" });\n      __publicField(_E, \"DEFAULT_OPTIONS\", { appClass: null, theme: \"classic\", useAsButton: false, padding: 8, disabled: false, comparison: true, closeOnScroll: false, outputPrecision: 0, lockOpacity: false, autoReposition: true, container: \"body\", components: { interaction: {} }, i18n: {}, swatches: null, inline: false, sliders: null, default: \"#42445a\", defaultRepresentation: null, position: \"bottom-middle\", adjustableNumbers: true, showAlways: false, closeWithKey: \"Escape\" });\n      __publicField(_E, \"create\", (t2) => new _E(t2));\n      let E = _E;\n      return e = e.default;\n    })());\n  }\n});\nexport default require_pickr_min();\n/*! Bundled license information:\n\n@simonwep/pickr/dist/pickr.min.js:\n  (*! Pickr 1.9.0 MIT | https://github.com/Simonwep/pickr *)\n*/\n//# sourceMappingURL=@simonwep_pickr.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport '@simonwep/pickr/dist/themes/monolith.min.css'\n\nimport Pickr from '@simonwep/pickr';\n\nexport default class extends Controller {\n  static targets = [ \"colorPickerValue\", \"colorField\", \"colorInput\", \"userSelectedColor\", \"colorOptions\" ];\n  static values = { initialColor: String }\n\n  connect() {\n    this.initPluginInstance()\n    this.colorOptions = $(this.colorOptionsTarget).find('button').map(function (_, button) { return $(button).attr('data-color'); }).get()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  pickColor(event) {\n    event.preventDefault();\n\n    const targetEl = event.target;\n    const color = targetEl.dataset.color;\n\n    $(this.colorInputTarget).val(color);\n    $(this.colorPickerValueTarget).val(color);\n    $(this.userSelectedColorTarget).data('color', color);\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n\n    this.pickr.setColor(color);\n\n    targetEl.classList.add('ring-2', 'ring-offset-2');\n  }\n\n  pickRandomColor(event) {\n    event.preventDefault();\n\n    const r = Math.floor(Math.random() * 256);\n    const g = Math.floor(Math.random() * 256);\n    const b = Math.floor(Math.random() * 256);\n\n    this.pickr.setColor(`rgb ${r} ${g} ${b}`);\n    const hexColor = this.pickr.getColor().toHEXA().toString();\n    this.pickr.setColor(hexColor);\n\n    this.showUserSelectedColor(hexColor);\n  }\n\n  showUserSelectedColor(color) {\n    $(this.colorInputTarget).val(color);\n    $(this.colorPickerValueTarget).val(color);\n\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n\n    $(this.userSelectedColorTarget)\n      .addClass('ring-2')\n      .addClass('ring-offset-2')\n      .css('background-color', color)\n      .css('--tw-ring-color', color)\n      .attr('data-color', color)\n      .show();\n  }\n\n  unpickColor(event) {\n    event.preventDefault();\n    $(this.colorPickerValueTarget).val('');\n    $(this.colorInputTarget).val('');\n    $(this.userSelectedColorTarget).hide();\n    $('.button-color').removeClass('ring-2 ring-offset-2');\n  }\n\n  togglePickr(event) {\n    event.preventDefault();\n  }\n\n  initPluginInstance() {\n    this.pickr = Pickr.create({\n      el: '.btn-pickr',\n      theme: 'monolith',\n      useAsButton: true,\n      default: this.initialColorValue || '#1E90FF',\n      components: {\n        // Main components\n        preview: true,\n        hue: true,\n\n        // Input / output Options\n        interaction: {\n          input: true,\n          save: true,\n        },\n      }\n    });\n\n    this.pickr.on('save', (color, _instance) => {\n      const hexaColor = color.toHEXA().toString()\n      if (!this.colorOptions.includes(hexaColor)) {\n        this.showUserSelectedColor(hexaColor);\n      }\n      this.pickr.hide();\n    });\n\n    const that = this\n\n    $('input[type=\"text\"].pcr-result').on('keydown', function (e) {\n      if (e.key === 'Enter') {\n        that.pickr.applyColor(false)\n      }\n    })\n  }\n\n  teardownPluginInstance() {\n    this.pickr.destroy()\n  }\n}\n","import {\n  require_jquery\n} from \"./chunk-IL4DE2EU.js\";\nimport {\n  __commonJS,\n  __require\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/moment/moment.js\nvar require_moment = __commonJS({\n  \"node_modules/moment/moment.js\"(exports, module) {\n    (function(global, factory) {\n      typeof exports === \"object\" && typeof module !== \"undefined\" ? module.exports = factory() : typeof define === \"function\" && define.amd ? define(factory) : global.moment = factory();\n    })(exports, function() {\n      \"use strict\";\n      var hookCallback;\n      function hooks() {\n        return hookCallback.apply(null, arguments);\n      }\n      function setHookCallback(callback) {\n        hookCallback = callback;\n      }\n      function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === \"[object Array]\";\n      }\n      function isObject(input) {\n        return input != null && Object.prototype.toString.call(input) === \"[object Object]\";\n      }\n      function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n      }\n      function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n          return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n          var k;\n          for (k in obj) {\n            if (hasOwnProp(obj, k)) {\n              return false;\n            }\n          }\n          return true;\n        }\n      }\n      function isUndefined(input) {\n        return input === void 0;\n      }\n      function isNumber(input) {\n        return typeof input === \"number\" || Object.prototype.toString.call(input) === \"[object Number]\";\n      }\n      function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === \"[object Date]\";\n      }\n      function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n          res.push(fn(arr[i], i));\n        }\n        return res;\n      }\n      function extend(a, b) {\n        for (var i in b) {\n          if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n          }\n        }\n        if (hasOwnProp(b, \"toString\")) {\n          a.toString = b.toString;\n        }\n        if (hasOwnProp(b, \"valueOf\")) {\n          a.valueOf = b.valueOf;\n        }\n        return a;\n      }\n      function createUTC(input, format2, locale2, strict) {\n        return createLocalOrUTC(input, format2, locale2, strict, true).utc();\n      }\n      function defaultParsingFlags() {\n        return {\n          empty: false,\n          unusedTokens: [],\n          unusedInput: [],\n          overflow: -2,\n          charsLeftOver: 0,\n          nullInput: false,\n          invalidEra: null,\n          invalidMonth: null,\n          invalidFormat: false,\n          userInvalidated: false,\n          iso: false,\n          parsedDateParts: [],\n          era: null,\n          meridiem: null,\n          rfc2822: false,\n          weekdayMismatch: false\n        };\n      }\n      function getParsingFlags(m) {\n        if (m._pf == null) {\n          m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n      }\n      var some;\n      if (Array.prototype.some) {\n        some = Array.prototype.some;\n      } else {\n        some = function(fun) {\n          var t = Object(this), len = t.length >>> 0, i;\n          for (i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n              return true;\n            }\n          }\n          return false;\n        };\n      }\n      function isValid(m) {\n        if (m._isValid == null) {\n          var flags = getParsingFlags(m), parsedParts = some.call(flags.parsedDateParts, function(i) {\n            return i != null;\n          }), isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n          if (m._strict) {\n            isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0;\n          }\n          if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n          } else {\n            return isNowValid;\n          }\n        }\n        return m._isValid;\n      }\n      function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n          extend(getParsingFlags(m), flags);\n        } else {\n          getParsingFlags(m).userInvalidated = true;\n        }\n        return m;\n      }\n      var momentProperties = hooks.momentProperties = [], updateInProgress = false;\n      function copyConfig(to2, from2) {\n        var i, prop, val;\n        if (!isUndefined(from2._isAMomentObject)) {\n          to2._isAMomentObject = from2._isAMomentObject;\n        }\n        if (!isUndefined(from2._i)) {\n          to2._i = from2._i;\n        }\n        if (!isUndefined(from2._f)) {\n          to2._f = from2._f;\n        }\n        if (!isUndefined(from2._l)) {\n          to2._l = from2._l;\n        }\n        if (!isUndefined(from2._strict)) {\n          to2._strict = from2._strict;\n        }\n        if (!isUndefined(from2._tzm)) {\n          to2._tzm = from2._tzm;\n        }\n        if (!isUndefined(from2._isUTC)) {\n          to2._isUTC = from2._isUTC;\n        }\n        if (!isUndefined(from2._offset)) {\n          to2._offset = from2._offset;\n        }\n        if (!isUndefined(from2._pf)) {\n          to2._pf = getParsingFlags(from2);\n        }\n        if (!isUndefined(from2._locale)) {\n          to2._locale = from2._locale;\n        }\n        if (momentProperties.length > 0) {\n          for (i = 0; i < momentProperties.length; i++) {\n            prop = momentProperties[i];\n            val = from2[prop];\n            if (!isUndefined(val)) {\n              to2[prop] = val;\n            }\n          }\n        }\n        return to2;\n      }\n      function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n          this._d = /* @__PURE__ */ new Date(NaN);\n        }\n        if (updateInProgress === false) {\n          updateInProgress = true;\n          hooks.updateOffset(this);\n          updateInProgress = false;\n        }\n      }\n      function isMoment(obj) {\n        return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n      }\n      function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false && typeof console !== \"undefined\" && console.warn) {\n          console.warn(\"Deprecation warning: \" + msg);\n        }\n      }\n      function deprecate(msg, fn) {\n        var firstTime = true;\n        return extend(function() {\n          if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n          }\n          if (firstTime) {\n            var args = [], arg, i, key;\n            for (i = 0; i < arguments.length; i++) {\n              arg = \"\";\n              if (typeof arguments[i] === \"object\") {\n                arg += \"\\n[\" + i + \"] \";\n                for (key in arguments[0]) {\n                  if (hasOwnProp(arguments[0], key)) {\n                    arg += key + \": \" + arguments[0][key] + \", \";\n                  }\n                }\n                arg = arg.slice(0, -2);\n              } else {\n                arg = arguments[i];\n              }\n              args.push(arg);\n            }\n            warn(\n              msg + \"\\nArguments: \" + Array.prototype.slice.call(args).join(\"\") + \"\\n\" + new Error().stack\n            );\n            firstTime = false;\n          }\n          return fn.apply(this, arguments);\n        }, fn);\n      }\n      var deprecations = {};\n      function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n          hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n          warn(msg);\n          deprecations[name] = true;\n        }\n      }\n      hooks.suppressDeprecationWarnings = false;\n      hooks.deprecationHandler = null;\n      function isFunction(input) {\n        return typeof Function !== \"undefined\" && input instanceof Function || Object.prototype.toString.call(input) === \"[object Function]\";\n      }\n      function set(config) {\n        var prop, i;\n        for (i in config) {\n          if (hasOwnProp(config, i)) {\n            prop = config[i];\n            if (isFunction(prop)) {\n              this[i] = prop;\n            } else {\n              this[\"_\" + i] = prop;\n            }\n          }\n        }\n        this._config = config;\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n          (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + \"|\" + /\\d{1,2}/.source\n        );\n      }\n      function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n          if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n              res[prop] = {};\n              extend(res[prop], parentConfig[prop]);\n              extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n              res[prop] = childConfig[prop];\n            } else {\n              delete res[prop];\n            }\n          }\n        }\n        for (prop in parentConfig) {\n          if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n            res[prop] = extend({}, res[prop]);\n          }\n        }\n        return res;\n      }\n      function Locale(config) {\n        if (config != null) {\n          this.set(config);\n        }\n      }\n      var keys;\n      if (Object.keys) {\n        keys = Object.keys;\n      } else {\n        keys = function(obj) {\n          var i, res = [];\n          for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n              res.push(i);\n            }\n          }\n          return res;\n        };\n      }\n      var defaultCalendar = {\n        sameDay: \"[Today at] LT\",\n        nextDay: \"[Tomorrow at] LT\",\n        nextWeek: \"dddd [at] LT\",\n        lastDay: \"[Yesterday at] LT\",\n        lastWeek: \"[Last] dddd [at] LT\",\n        sameElse: \"L\"\n      };\n      function calendar(key, mom, now2) {\n        var output = this._calendar[key] || this._calendar[\"sameElse\"];\n        return isFunction(output) ? output.call(mom, now2) : output;\n      }\n      function zeroFill(number, targetLength, forceSign) {\n        var absNumber = \"\" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign2 = number >= 0;\n        return (sign2 ? forceSign ? \"+\" : \"\" : \"-\") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n      }\n      var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};\n      function addFormatToken(token2, padded, ordinal2, callback) {\n        var func = callback;\n        if (typeof callback === \"string\") {\n          func = function() {\n            return this[callback]();\n          };\n        }\n        if (token2) {\n          formatTokenFunctions[token2] = func;\n        }\n        if (padded) {\n          formatTokenFunctions[padded[0]] = function() {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n          };\n        }\n        if (ordinal2) {\n          formatTokenFunctions[ordinal2] = function() {\n            return this.localeData().ordinal(\n              func.apply(this, arguments),\n              token2\n            );\n          };\n        }\n      }\n      function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n          return input.replace(/^\\[|\\]$/g, \"\");\n        }\n        return input.replace(/\\\\/g, \"\");\n      }\n      function makeFormatFunction(format2) {\n        var array = format2.match(formattingTokens), i, length;\n        for (i = 0, length = array.length; i < length; i++) {\n          if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n          } else {\n            array[i] = removeFormattingTokens(array[i]);\n          }\n        }\n        return function(mom) {\n          var output = \"\", i2;\n          for (i2 = 0; i2 < length; i2++) {\n            output += isFunction(array[i2]) ? array[i2].call(mom, format2) : array[i2];\n          }\n          return output;\n        };\n      }\n      function formatMoment(m, format2) {\n        if (!m.isValid()) {\n          return m.localeData().invalidDate();\n        }\n        format2 = expandFormat(format2, m.localeData());\n        formatFunctions[format2] = formatFunctions[format2] || makeFormatFunction(format2);\n        return formatFunctions[format2](m);\n      }\n      function expandFormat(format2, locale2) {\n        var i = 5;\n        function replaceLongDateFormatTokens(input) {\n          return locale2.longDateFormat(input) || input;\n        }\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format2)) {\n          format2 = format2.replace(\n            localFormattingTokens,\n            replaceLongDateFormatTokens\n          );\n          localFormattingTokens.lastIndex = 0;\n          i -= 1;\n        }\n        return format2;\n      }\n      var defaultLongDateFormat = {\n        LTS: \"h:mm:ss A\",\n        LT: \"h:mm A\",\n        L: \"MM/DD/YYYY\",\n        LL: \"MMMM D, YYYY\",\n        LLL: \"MMMM D, YYYY h:mm A\",\n        LLLL: \"dddd, MMMM D, YYYY h:mm A\"\n      };\n      function longDateFormat(key) {\n        var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()];\n        if (format2 || !formatUpper) {\n          return format2;\n        }\n        this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) {\n          if (tok === \"MMMM\" || tok === \"MM\" || tok === \"DD\" || tok === \"dddd\") {\n            return tok.slice(1);\n          }\n          return tok;\n        }).join(\"\");\n        return this._longDateFormat[key];\n      }\n      var defaultInvalidDate = \"Invalid date\";\n      function invalidDate() {\n        return this._invalidDate;\n      }\n      var defaultOrdinal = \"%d\", defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n      function ordinal(number) {\n        return this._ordinal.replace(\"%d\", number);\n      }\n      var defaultRelativeTime = {\n        future: \"in %s\",\n        past: \"%s ago\",\n        s: \"a few seconds\",\n        ss: \"%d seconds\",\n        m: \"a minute\",\n        mm: \"%d minutes\",\n        h: \"an hour\",\n        hh: \"%d hours\",\n        d: \"a day\",\n        dd: \"%d days\",\n        w: \"a week\",\n        ww: \"%d weeks\",\n        M: \"a month\",\n        MM: \"%d months\",\n        y: \"a year\",\n        yy: \"%d years\"\n      };\n      function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n      }\n      function pastFuture(diff2, output) {\n        var format2 = this._relativeTime[diff2 > 0 ? \"future\" : \"past\"];\n        return isFunction(format2) ? format2(output) : format2.replace(/%s/i, output);\n      }\n      var aliases = {};\n      function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + \"s\"] = aliases[shorthand] = unit;\n      }\n      function normalizeUnits(units) {\n        return typeof units === \"string\" ? aliases[units] || aliases[units.toLowerCase()] : void 0;\n      }\n      function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {}, normalizedProp, prop;\n        for (prop in inputObject) {\n          if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n              normalizedInput[normalizedProp] = inputObject[prop];\n            }\n          }\n        }\n        return normalizedInput;\n      }\n      var priorities = {};\n      function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n      }\n      function getPrioritizedUnits(unitsObj) {\n        var units = [], u;\n        for (u in unitsObj) {\n          if (hasOwnProp(unitsObj, u)) {\n            units.push({ unit: u, priority: priorities[u] });\n          }\n        }\n        units.sort(function(a, b) {\n          return a.priority - b.priority;\n        });\n        return units;\n      }\n      function isLeapYear(year) {\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n      }\n      function absFloor(number) {\n        if (number < 0) {\n          return Math.ceil(number) || 0;\n        } else {\n          return Math.floor(number);\n        }\n      }\n      function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion, value = 0;\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n          value = absFloor(coercedNumber);\n        }\n        return value;\n      }\n      function makeGetSet(unit, keepTime) {\n        return function(value) {\n          if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n          } else {\n            return get(this, unit);\n          }\n        };\n      }\n      function get(mom, unit) {\n        return mom.isValid() ? mom._d[\"get\" + (mom._isUTC ? \"UTC\" : \"\") + unit]() : NaN;\n      }\n      function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n          if (unit === \"FullYear\" && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n            value = toInt(value);\n            mom._d[\"set\" + (mom._isUTC ? \"UTC\" : \"\") + unit](\n              value,\n              mom.month(),\n              daysInMonth(value, mom.month())\n            );\n          } else {\n            mom._d[\"set\" + (mom._isUTC ? \"UTC\" : \"\") + unit](value);\n          }\n        }\n      }\n      function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n          return this[units]();\n        }\n        return this;\n      }\n      function stringSet(units, value) {\n        if (typeof units === \"object\") {\n          units = normalizeObjectUnits(units);\n          var prioritized = getPrioritizedUnits(units), i;\n          for (i = 0; i < prioritized.length; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n          }\n        } else {\n          units = normalizeUnits(units);\n          if (isFunction(this[units])) {\n            return this[units](value);\n          }\n        }\n        return this;\n      }\n      var match1 = /\\d/, match2 = /\\d\\d/, match3 = /\\d{3}/, match4 = /\\d{4}/, match6 = /[+-]?\\d{6}/, match1to2 = /\\d\\d?/, match3to4 = /\\d\\d\\d\\d?/, match5to6 = /\\d\\d\\d\\d\\d\\d?/, match1to3 = /\\d{1,3}/, match1to4 = /\\d{1,4}/, match1to6 = /[+-]?\\d{1,6}/, matchUnsigned = /\\d+/, matchSigned = /[+-]?\\d+/, matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i, regexes;\n      regexes = {};\n      function addRegexToken(token2, regex, strictRegex) {\n        regexes[token2] = isFunction(regex) ? regex : function(isStrict, localeData2) {\n          return isStrict && strictRegex ? strictRegex : regex;\n        };\n      }\n      function getParseRegexForToken(token2, config) {\n        if (!hasOwnProp(regexes, token2)) {\n          return new RegExp(unescapeFormat(token2));\n        }\n        return regexes[token2](config._strict, config._locale);\n      }\n      function unescapeFormat(s) {\n        return regexEscape(\n          s.replace(\"\\\\\", \"\").replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function(matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n          })\n        );\n      }\n      function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n      }\n      var tokens = {};\n      function addParseToken(token2, callback) {\n        var i, func = callback;\n        if (typeof token2 === \"string\") {\n          token2 = [token2];\n        }\n        if (isNumber(callback)) {\n          func = function(input, array) {\n            array[callback] = toInt(input);\n          };\n        }\n        for (i = 0; i < token2.length; i++) {\n          tokens[token2[i]] = func;\n        }\n      }\n      function addWeekParseToken(token2, callback) {\n        addParseToken(token2, function(input, array, config, token3) {\n          config._w = config._w || {};\n          callback(input, config._w, config, token3);\n        });\n      }\n      function addTimeToArrayFromToken(token2, input, config) {\n        if (input != null && hasOwnProp(tokens, token2)) {\n          tokens[token2](input, config._a, config, token2);\n        }\n      }\n      var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;\n      function mod(n, x) {\n        return (n % x + x) % x;\n      }\n      var indexOf;\n      if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n      } else {\n        indexOf = function(o) {\n          var i;\n          for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n              return i;\n            }\n          }\n          return -1;\n        };\n      }\n      function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n          return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n      }\n      addFormatToken(\"M\", [\"MM\", 2], \"Mo\", function() {\n        return this.month() + 1;\n      });\n      addFormatToken(\"MMM\", 0, 0, function(format2) {\n        return this.localeData().monthsShort(this, format2);\n      });\n      addFormatToken(\"MMMM\", 0, 0, function(format2) {\n        return this.localeData().months(this, format2);\n      });\n      addUnitAlias(\"month\", \"M\");\n      addUnitPriority(\"month\", 8);\n      addRegexToken(\"M\", match1to2);\n      addRegexToken(\"MM\", match1to2, match2);\n      addRegexToken(\"MMM\", function(isStrict, locale2) {\n        return locale2.monthsShortRegex(isStrict);\n      });\n      addRegexToken(\"MMMM\", function(isStrict, locale2) {\n        return locale2.monthsRegex(isStrict);\n      });\n      addParseToken([\"M\", \"MM\"], function(input, array) {\n        array[MONTH] = toInt(input) - 1;\n      });\n      addParseToken([\"MMM\", \"MMMM\"], function(input, array, config, token2) {\n        var month = config._locale.monthsParse(input, token2, config._strict);\n        if (month != null) {\n          array[MONTH] = month;\n        } else {\n          getParsingFlags(config).invalidMonth = input;\n        }\n      });\n      var defaultLocaleMonths = \"January_February_March_April_May_June_July_August_September_October_November_December\".split(\n        \"_\"\n      ), defaultLocaleMonthsShort = \"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\n        \"_\"\n      ), MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord;\n      function localeMonths(m, format2) {\n        if (!m) {\n          return isArray(this._months) ? this._months : this._months[\"standalone\"];\n        }\n        return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? \"format\" : \"standalone\"][m.month()];\n      }\n      function localeMonthsShort(m, format2) {\n        if (!m) {\n          return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort[\"standalone\"];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? \"format\" : \"standalone\"][m.month()];\n      }\n      function handleStrictParse(monthName, format2, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n          this._monthsParse = [];\n          this._longMonthsParse = [];\n          this._shortMonthsParse = [];\n          for (i = 0; i < 12; ++i) {\n            mom = createUTC([2e3, i]);\n            this._shortMonthsParse[i] = this.monthsShort(\n              mom,\n              \"\"\n            ).toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, \"\").toLocaleLowerCase();\n          }\n        }\n        if (strict) {\n          if (format2 === \"MMM\") {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n          } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n          }\n        } else {\n          if (format2 === \"MMM\") {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n          } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n          }\n        }\n      }\n      function localeMonthsParse(monthName, format2, strict) {\n        var i, mom, regex;\n        if (this._monthsParseExact) {\n          return handleStrictParse.call(this, monthName, format2, strict);\n        }\n        if (!this._monthsParse) {\n          this._monthsParse = [];\n          this._longMonthsParse = [];\n          this._shortMonthsParse = [];\n        }\n        for (i = 0; i < 12; i++) {\n          mom = createUTC([2e3, i]);\n          if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp(\n              \"^\" + this.months(mom, \"\").replace(\".\", \"\") + \"$\",\n              \"i\"\n            );\n            this._shortMonthsParse[i] = new RegExp(\n              \"^\" + this.monthsShort(mom, \"\").replace(\".\", \"\") + \"$\",\n              \"i\"\n            );\n          }\n          if (!strict && !this._monthsParse[i]) {\n            regex = \"^\" + this.months(mom, \"\") + \"|^\" + this.monthsShort(mom, \"\");\n            this._monthsParse[i] = new RegExp(regex.replace(\".\", \"\"), \"i\");\n          }\n          if (strict && format2 === \"MMMM\" && this._longMonthsParse[i].test(monthName)) {\n            return i;\n          } else if (strict && format2 === \"MMM\" && this._shortMonthsParse[i].test(monthName)) {\n            return i;\n          } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n          }\n        }\n      }\n      function setMonth(mom, value) {\n        var dayOfMonth;\n        if (!mom.isValid()) {\n          return mom;\n        }\n        if (typeof value === \"string\") {\n          if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n          } else {\n            value = mom.localeData().monthsParse(value);\n            if (!isNumber(value)) {\n              return mom;\n            }\n          }\n        }\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d[\"set\" + (mom._isUTC ? \"UTC\" : \"\") + \"Month\"](value, dayOfMonth);\n        return mom;\n      }\n      function getSetMonth(value) {\n        if (value != null) {\n          setMonth(this, value);\n          hooks.updateOffset(this, true);\n          return this;\n        } else {\n          return get(this, \"Month\");\n        }\n      }\n      function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n      }\n      function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n          if (!hasOwnProp(this, \"_monthsRegex\")) {\n            computeMonthsParse.call(this);\n          }\n          if (isStrict) {\n            return this._monthsShortStrictRegex;\n          } else {\n            return this._monthsShortRegex;\n          }\n        } else {\n          if (!hasOwnProp(this, \"_monthsShortRegex\")) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n          }\n          return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n      }\n      function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n          if (!hasOwnProp(this, \"_monthsRegex\")) {\n            computeMonthsParse.call(this);\n          }\n          if (isStrict) {\n            return this._monthsStrictRegex;\n          } else {\n            return this._monthsRegex;\n          }\n        } else {\n          if (!hasOwnProp(this, \"_monthsRegex\")) {\n            this._monthsRegex = defaultMonthsRegex;\n          }\n          return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n        }\n      }\n      function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n          return b.length - a.length;\n        }\n        var shortPieces = [], longPieces = [], mixedPieces = [], i, mom;\n        for (i = 0; i < 12; i++) {\n          mom = createUTC([2e3, i]);\n          shortPieces.push(this.monthsShort(mom, \"\"));\n          longPieces.push(this.months(mom, \"\"));\n          mixedPieces.push(this.months(mom, \"\"));\n          mixedPieces.push(this.monthsShort(mom, \"\"));\n        }\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n          shortPieces[i] = regexEscape(shortPieces[i]);\n          longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n          mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n        this._monthsRegex = new RegExp(\"^(\" + mixedPieces.join(\"|\") + \")\", \"i\");\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n          \"^(\" + longPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n        this._monthsShortStrictRegex = new RegExp(\n          \"^(\" + shortPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n      }\n      addFormatToken(\"Y\", 0, 0, function() {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : \"+\" + y;\n      });\n      addFormatToken(0, [\"YY\", 2], 0, function() {\n        return this.year() % 100;\n      });\n      addFormatToken(0, [\"YYYY\", 4], 0, \"year\");\n      addFormatToken(0, [\"YYYYY\", 5], 0, \"year\");\n      addFormatToken(0, [\"YYYYYY\", 6, true], 0, \"year\");\n      addUnitAlias(\"year\", \"y\");\n      addUnitPriority(\"year\", 1);\n      addRegexToken(\"Y\", matchSigned);\n      addRegexToken(\"YY\", match1to2, match2);\n      addRegexToken(\"YYYY\", match1to4, match4);\n      addRegexToken(\"YYYYY\", match1to6, match6);\n      addRegexToken(\"YYYYYY\", match1to6, match6);\n      addParseToken([\"YYYYY\", \"YYYYYY\"], YEAR);\n      addParseToken(\"YYYY\", function(input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n      });\n      addParseToken(\"YY\", function(input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n      });\n      addParseToken(\"Y\", function(input, array) {\n        array[YEAR] = parseInt(input, 10);\n      });\n      function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n      }\n      hooks.parseTwoDigitYear = function(input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);\n      };\n      var getSetYear = makeGetSet(\"FullYear\", true);\n      function getIsLeapYear() {\n        return isLeapYear(this.year());\n      }\n      function createDate(y, m, d, h, M, s, ms) {\n        var date;\n        if (y < 100 && y >= 0) {\n          date = new Date(y + 400, m, d, h, M, s, ms);\n          if (isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n          }\n        } else {\n          date = new Date(y, m, d, h, M, s, ms);\n        }\n        return date;\n      }\n      function createUTCDate(y) {\n        var date, args;\n        if (y < 100 && y >= 0) {\n          args = Array.prototype.slice.call(arguments);\n          args[0] = y + 400;\n          date = new Date(Date.UTC.apply(null, args));\n          if (isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n          }\n        } else {\n          date = new Date(Date.UTC.apply(null, arguments));\n        }\n        return date;\n      }\n      function firstWeekOffset(year, dow, doy) {\n        var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n        return -fwdlw + fwd - 1;\n      }\n      function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;\n        if (dayOfYear <= 0) {\n          resYear = year - 1;\n          resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n          resYear = year + 1;\n          resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n          resYear = year;\n          resDayOfYear = dayOfYear;\n        }\n        return {\n          year: resYear,\n          dayOfYear: resDayOfYear\n        };\n      }\n      function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear;\n        if (week < 1) {\n          resYear = mom.year() - 1;\n          resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n          resWeek = week - weeksInYear(mom.year(), dow, doy);\n          resYear = mom.year() + 1;\n        } else {\n          resYear = mom.year();\n          resWeek = week;\n        }\n        return {\n          week: resWeek,\n          year: resYear\n        };\n      }\n      function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy), weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n      }\n      addFormatToken(\"w\", [\"ww\", 2], \"wo\", \"week\");\n      addFormatToken(\"W\", [\"WW\", 2], \"Wo\", \"isoWeek\");\n      addUnitAlias(\"week\", \"w\");\n      addUnitAlias(\"isoWeek\", \"W\");\n      addUnitPriority(\"week\", 5);\n      addUnitPriority(\"isoWeek\", 5);\n      addRegexToken(\"w\", match1to2);\n      addRegexToken(\"ww\", match1to2, match2);\n      addRegexToken(\"W\", match1to2);\n      addRegexToken(\"WW\", match1to2, match2);\n      addWeekParseToken([\"w\", \"ww\", \"W\", \"WW\"], function(input, week, config, token2) {\n        week[token2.substr(0, 1)] = toInt(input);\n      });\n      function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n      }\n      var defaultLocaleWeek = {\n        dow: 0,\n        // Sunday is the first day of the week.\n        doy: 6\n        // The week that contains Jan 6th is the first week of the year.\n      };\n      function localeFirstDayOfWeek() {\n        return this._week.dow;\n      }\n      function localeFirstDayOfYear() {\n        return this._week.doy;\n      }\n      function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, \"d\");\n      }\n      function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, \"d\");\n      }\n      addFormatToken(\"d\", 0, \"do\", \"day\");\n      addFormatToken(\"dd\", 0, 0, function(format2) {\n        return this.localeData().weekdaysMin(this, format2);\n      });\n      addFormatToken(\"ddd\", 0, 0, function(format2) {\n        return this.localeData().weekdaysShort(this, format2);\n      });\n      addFormatToken(\"dddd\", 0, 0, function(format2) {\n        return this.localeData().weekdays(this, format2);\n      });\n      addFormatToken(\"e\", 0, 0, \"weekday\");\n      addFormatToken(\"E\", 0, 0, \"isoWeekday\");\n      addUnitAlias(\"day\", \"d\");\n      addUnitAlias(\"weekday\", \"e\");\n      addUnitAlias(\"isoWeekday\", \"E\");\n      addUnitPriority(\"day\", 11);\n      addUnitPriority(\"weekday\", 11);\n      addUnitPriority(\"isoWeekday\", 11);\n      addRegexToken(\"d\", match1to2);\n      addRegexToken(\"e\", match1to2);\n      addRegexToken(\"E\", match1to2);\n      addRegexToken(\"dd\", function(isStrict, locale2) {\n        return locale2.weekdaysMinRegex(isStrict);\n      });\n      addRegexToken(\"ddd\", function(isStrict, locale2) {\n        return locale2.weekdaysShortRegex(isStrict);\n      });\n      addRegexToken(\"dddd\", function(isStrict, locale2) {\n        return locale2.weekdaysRegex(isStrict);\n      });\n      addWeekParseToken([\"dd\", \"ddd\", \"dddd\"], function(input, week, config, token2) {\n        var weekday = config._locale.weekdaysParse(input, token2, config._strict);\n        if (weekday != null) {\n          week.d = weekday;\n        } else {\n          getParsingFlags(config).invalidWeekday = input;\n        }\n      });\n      addWeekParseToken([\"d\", \"e\", \"E\"], function(input, week, config, token2) {\n        week[token2] = toInt(input);\n      });\n      function parseWeekday(input, locale2) {\n        if (typeof input !== \"string\") {\n          return input;\n        }\n        if (!isNaN(input)) {\n          return parseInt(input, 10);\n        }\n        input = locale2.weekdaysParse(input);\n        if (typeof input === \"number\") {\n          return input;\n        }\n        return null;\n      }\n      function parseIsoWeekday(input, locale2) {\n        if (typeof input === \"string\") {\n          return locale2.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n      }\n      function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n      }\n      var defaultLocaleWeekdays = \"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\n        \"_\"\n      ), defaultLocaleWeekdaysShort = \"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"), defaultLocaleWeekdaysMin = \"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord;\n      function localeWeekdays(m, format2) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format2) ? \"format\" : \"standalone\"];\n        return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n      }\n      function localeWeekdaysShort(m) {\n        return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n      }\n      function localeWeekdaysMin(m) {\n        return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n      }\n      function handleStrictParse$1(weekdayName, format2, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n          this._weekdaysParse = [];\n          this._shortWeekdaysParse = [];\n          this._minWeekdaysParse = [];\n          for (i = 0; i < 7; ++i) {\n            mom = createUTC([2e3, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(\n              mom,\n              \"\"\n            ).toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(\n              mom,\n              \"\"\n            ).toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, \"\").toLocaleLowerCase();\n          }\n        }\n        if (strict) {\n          if (format2 === \"dddd\") {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          } else if (format2 === \"ddd\") {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          }\n        } else {\n          if (format2 === \"dddd\") {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          } else if (format2 === \"ddd\") {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n              return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n          }\n        }\n      }\n      function localeWeekdaysParse(weekdayName, format2, strict) {\n        var i, mom, regex;\n        if (this._weekdaysParseExact) {\n          return handleStrictParse$1.call(this, weekdayName, format2, strict);\n        }\n        if (!this._weekdaysParse) {\n          this._weekdaysParse = [];\n          this._minWeekdaysParse = [];\n          this._shortWeekdaysParse = [];\n          this._fullWeekdaysParse = [];\n        }\n        for (i = 0; i < 7; i++) {\n          mom = createUTC([2e3, 1]).day(i);\n          if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp(\n              \"^\" + this.weekdays(mom, \"\").replace(\".\", \"\\\\.?\") + \"$\",\n              \"i\"\n            );\n            this._shortWeekdaysParse[i] = new RegExp(\n              \"^\" + this.weekdaysShort(mom, \"\").replace(\".\", \"\\\\.?\") + \"$\",\n              \"i\"\n            );\n            this._minWeekdaysParse[i] = new RegExp(\n              \"^\" + this.weekdaysMin(mom, \"\").replace(\".\", \"\\\\.?\") + \"$\",\n              \"i\"\n            );\n          }\n          if (!this._weekdaysParse[i]) {\n            regex = \"^\" + this.weekdays(mom, \"\") + \"|^\" + this.weekdaysShort(mom, \"\") + \"|^\" + this.weekdaysMin(mom, \"\");\n            this._weekdaysParse[i] = new RegExp(regex.replace(\".\", \"\"), \"i\");\n          }\n          if (strict && format2 === \"dddd\" && this._fullWeekdaysParse[i].test(weekdayName)) {\n            return i;\n          } else if (strict && format2 === \"ddd\" && this._shortWeekdaysParse[i].test(weekdayName)) {\n            return i;\n          } else if (strict && format2 === \"dd\" && this._minWeekdaysParse[i].test(weekdayName)) {\n            return i;\n          } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n          }\n        }\n      }\n      function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n          return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n          input = parseWeekday(input, this.localeData());\n          return this.add(input - day, \"d\");\n        } else {\n          return day;\n        }\n      }\n      function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n          return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, \"d\");\n      }\n      function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n          return input != null ? this : NaN;\n        }\n        if (input != null) {\n          var weekday = parseIsoWeekday(input, this.localeData());\n          return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n          return this.day() || 7;\n        }\n      }\n      function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n          if (!hasOwnProp(this, \"_weekdaysRegex\")) {\n            computeWeekdaysParse.call(this);\n          }\n          if (isStrict) {\n            return this._weekdaysStrictRegex;\n          } else {\n            return this._weekdaysRegex;\n          }\n        } else {\n          if (!hasOwnProp(this, \"_weekdaysRegex\")) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n          }\n          return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n      }\n      function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n          if (!hasOwnProp(this, \"_weekdaysRegex\")) {\n            computeWeekdaysParse.call(this);\n          }\n          if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n          } else {\n            return this._weekdaysShortRegex;\n          }\n        } else {\n          if (!hasOwnProp(this, \"_weekdaysShortRegex\")) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n          }\n          return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n      }\n      function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n          if (!hasOwnProp(this, \"_weekdaysRegex\")) {\n            computeWeekdaysParse.call(this);\n          }\n          if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n          } else {\n            return this._weekdaysMinRegex;\n          }\n        } else {\n          if (!hasOwnProp(this, \"_weekdaysMinRegex\")) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n          }\n          return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n      }\n      function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n          return b.length - a.length;\n        }\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n          mom = createUTC([2e3, 1]).day(i);\n          minp = regexEscape(this.weekdaysMin(mom, \"\"));\n          shortp = regexEscape(this.weekdaysShort(mom, \"\"));\n          longp = regexEscape(this.weekdays(mom, \"\"));\n          minPieces.push(minp);\n          shortPieces.push(shortp);\n          longPieces.push(longp);\n          mixedPieces.push(minp);\n          mixedPieces.push(shortp);\n          mixedPieces.push(longp);\n        }\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        this._weekdaysRegex = new RegExp(\"^(\" + mixedPieces.join(\"|\") + \")\", \"i\");\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n        this._weekdaysStrictRegex = new RegExp(\n          \"^(\" + longPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n          \"^(\" + shortPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n          \"^(\" + minPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n      }\n      function hFormat() {\n        return this.hours() % 12 || 12;\n      }\n      function kFormat() {\n        return this.hours() || 24;\n      }\n      addFormatToken(\"H\", [\"HH\", 2], 0, \"hour\");\n      addFormatToken(\"h\", [\"hh\", 2], 0, hFormat);\n      addFormatToken(\"k\", [\"kk\", 2], 0, kFormat);\n      addFormatToken(\"hmm\", 0, 0, function() {\n        return \"\" + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n      });\n      addFormatToken(\"hmmss\", 0, 0, function() {\n        return \"\" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n      });\n      addFormatToken(\"Hmm\", 0, 0, function() {\n        return \"\" + this.hours() + zeroFill(this.minutes(), 2);\n      });\n      addFormatToken(\"Hmmss\", 0, 0, function() {\n        return \"\" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n      });\n      function meridiem(token2, lowercase) {\n        addFormatToken(token2, 0, 0, function() {\n          return this.localeData().meridiem(\n            this.hours(),\n            this.minutes(),\n            lowercase\n          );\n        });\n      }\n      meridiem(\"a\", true);\n      meridiem(\"A\", false);\n      addUnitAlias(\"hour\", \"h\");\n      addUnitPriority(\"hour\", 13);\n      function matchMeridiem(isStrict, locale2) {\n        return locale2._meridiemParse;\n      }\n      addRegexToken(\"a\", matchMeridiem);\n      addRegexToken(\"A\", matchMeridiem);\n      addRegexToken(\"H\", match1to2);\n      addRegexToken(\"h\", match1to2);\n      addRegexToken(\"k\", match1to2);\n      addRegexToken(\"HH\", match1to2, match2);\n      addRegexToken(\"hh\", match1to2, match2);\n      addRegexToken(\"kk\", match1to2, match2);\n      addRegexToken(\"hmm\", match3to4);\n      addRegexToken(\"hmmss\", match5to6);\n      addRegexToken(\"Hmm\", match3to4);\n      addRegexToken(\"Hmmss\", match5to6);\n      addParseToken([\"H\", \"HH\"], HOUR);\n      addParseToken([\"k\", \"kk\"], function(input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n      });\n      addParseToken([\"a\", \"A\"], function(input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n      });\n      addParseToken([\"h\", \"hh\"], function(input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n      });\n      addParseToken(\"hmm\", function(input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n      });\n      addParseToken(\"hmmss\", function(input, array, config) {\n        var pos1 = input.length - 4, pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n      });\n      addParseToken(\"Hmm\", function(input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n      });\n      addParseToken(\"Hmmss\", function(input, array, config) {\n        var pos1 = input.length - 4, pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n      });\n      function localeIsPM(input) {\n        return (input + \"\").toLowerCase().charAt(0) === \"p\";\n      }\n      var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i, getSetHour = makeGetSet(\"Hours\", true);\n      function localeMeridiem(hours2, minutes2, isLower) {\n        if (hours2 > 11) {\n          return isLower ? \"pm\" : \"PM\";\n        } else {\n          return isLower ? \"am\" : \"AM\";\n        }\n      }\n      var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n        week: defaultLocaleWeek,\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n        meridiemParse: defaultLocaleMeridiemParse\n      };\n      var locales = {}, localeFamilies = {}, globalLocale;\n      function commonPrefix(arr1, arr2) {\n        var i, minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n          if (arr1[i] !== arr2[i]) {\n            return i;\n          }\n        }\n        return minl;\n      }\n      function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace(\"_\", \"-\") : key;\n      }\n      function chooseLocale(names) {\n        var i = 0, j, next, locale2, split;\n        while (i < names.length) {\n          split = normalizeLocale(names[i]).split(\"-\");\n          j = split.length;\n          next = normalizeLocale(names[i + 1]);\n          next = next ? next.split(\"-\") : null;\n          while (j > 0) {\n            locale2 = loadLocale(split.slice(0, j).join(\"-\"));\n            if (locale2) {\n              return locale2;\n            }\n            if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\n              break;\n            }\n            j--;\n          }\n          i++;\n        }\n        return globalLocale;\n      }\n      function loadLocale(name) {\n        var oldLocale = null, aliasedRequire;\n        if (locales[name] === void 0 && typeof module !== \"undefined\" && module && module.exports) {\n          try {\n            oldLocale = globalLocale._abbr;\n            aliasedRequire = __require;\n            aliasedRequire(\"./locale/\" + name);\n            getSetGlobalLocale(oldLocale);\n          } catch (e) {\n            locales[name] = null;\n          }\n        }\n        return locales[name];\n      }\n      function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n          if (isUndefined(values)) {\n            data = getLocale(key);\n          } else {\n            data = defineLocale(key, values);\n          }\n          if (data) {\n            globalLocale = data;\n          } else {\n            if (typeof console !== \"undefined\" && console.warn) {\n              console.warn(\n                \"Locale \" + key + \" not found. Did you forget to load it?\"\n              );\n            }\n          }\n        }\n        return globalLocale._abbr;\n      }\n      function defineLocale(name, config) {\n        if (config !== null) {\n          var locale2, parentConfig = baseConfig;\n          config.abbr = name;\n          if (locales[name] != null) {\n            deprecateSimple(\n              \"defineLocaleOverride\",\n              \"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info.\"\n            );\n            parentConfig = locales[name]._config;\n          } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n              parentConfig = locales[config.parentLocale]._config;\n            } else {\n              locale2 = loadLocale(config.parentLocale);\n              if (locale2 != null) {\n                parentConfig = locale2._config;\n              } else {\n                if (!localeFamilies[config.parentLocale]) {\n                  localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                  name,\n                  config\n                });\n                return null;\n              }\n            }\n          }\n          locales[name] = new Locale(mergeConfigs(parentConfig, config));\n          if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function(x) {\n              defineLocale(x.name, x.config);\n            });\n          }\n          getSetGlobalLocale(name);\n          return locales[name];\n        } else {\n          delete locales[name];\n          return null;\n        }\n      }\n      function updateLocale(name, config) {\n        if (config != null) {\n          var locale2, tmpLocale, parentConfig = baseConfig;\n          if (locales[name] != null && locales[name].parentLocale != null) {\n            locales[name].set(mergeConfigs(locales[name]._config, config));\n          } else {\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n              parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            if (tmpLocale == null) {\n              config.abbr = name;\n            }\n            locale2 = new Locale(config);\n            locale2.parentLocale = locales[name];\n            locales[name] = locale2;\n          }\n          getSetGlobalLocale(name);\n        } else {\n          if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n              locales[name] = locales[name].parentLocale;\n              if (name === getSetGlobalLocale()) {\n                getSetGlobalLocale(name);\n              }\n            } else if (locales[name] != null) {\n              delete locales[name];\n            }\n          }\n        }\n        return locales[name];\n      }\n      function getLocale(key) {\n        var locale2;\n        if (key && key._locale && key._locale._abbr) {\n          key = key._locale._abbr;\n        }\n        if (!key) {\n          return globalLocale;\n        }\n        if (!isArray(key)) {\n          locale2 = loadLocale(key);\n          if (locale2) {\n            return locale2;\n          }\n          key = [key];\n        }\n        return chooseLocale(key);\n      }\n      function listLocales() {\n        return keys(locales);\n      }\n      function checkOverflow(m) {\n        var overflow, a = m._a;\n        if (a && getParsingFlags(m).overflow === -2) {\n          overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n          if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n            overflow = DATE;\n          }\n          if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n          }\n          if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n          }\n          getParsingFlags(m).overflow = overflow;\n        }\n        return m;\n      }\n      var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/, basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/, tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/, isoDates = [\n        [\"YYYYYY-MM-DD\", /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        [\"YYYY-MM-DD\", /\\d{4}-\\d\\d-\\d\\d/],\n        [\"GGGG-[W]WW-E\", /\\d{4}-W\\d\\d-\\d/],\n        [\"GGGG-[W]WW\", /\\d{4}-W\\d\\d/, false],\n        [\"YYYY-DDD\", /\\d{4}-\\d{3}/],\n        [\"YYYY-MM\", /\\d{4}-\\d\\d/, false],\n        [\"YYYYYYMMDD\", /[+-]\\d{10}/],\n        [\"YYYYMMDD\", /\\d{8}/],\n        [\"GGGG[W]WWE\", /\\d{4}W\\d{3}/],\n        [\"GGGG[W]WW\", /\\d{4}W\\d{2}/, false],\n        [\"YYYYDDD\", /\\d{7}/],\n        [\"YYYYMM\", /\\d{6}/, false],\n        [\"YYYY\", /\\d{4}/, false]\n      ], isoTimes = [\n        [\"HH:mm:ss.SSSS\", /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        [\"HH:mm:ss,SSSS\", /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        [\"HH:mm:ss\", /\\d\\d:\\d\\d:\\d\\d/],\n        [\"HH:mm\", /\\d\\d:\\d\\d/],\n        [\"HHmmss.SSSS\", /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        [\"HHmmss,SSSS\", /\\d\\d\\d\\d\\d\\d,\\d+/],\n        [\"HHmmss\", /\\d\\d\\d\\d\\d\\d/],\n        [\"HHmm\", /\\d\\d\\d\\d/],\n        [\"HH\", /\\d\\d/]\n      ], aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/, obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n      };\n      function configFromISO(config) {\n        var i, l, string = config._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat;\n        if (match) {\n          getParsingFlags(config).iso = true;\n          for (i = 0, l = isoDates.length; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n              dateFormat = isoDates[i][0];\n              allowTime = isoDates[i][2] !== false;\n              break;\n            }\n          }\n          if (dateFormat == null) {\n            config._isValid = false;\n            return;\n          }\n          if (match[3]) {\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n              if (isoTimes[i][1].exec(match[3])) {\n                timeFormat = (match[2] || \" \") + isoTimes[i][0];\n                break;\n              }\n            }\n            if (timeFormat == null) {\n              config._isValid = false;\n              return;\n            }\n          }\n          if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n          }\n          if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n              tzFormat = \"Z\";\n            } else {\n              config._isValid = false;\n              return;\n            }\n          }\n          config._f = dateFormat + (timeFormat || \"\") + (tzFormat || \"\");\n          configFromStringAndFormat(config);\n        } else {\n          config._isValid = false;\n        }\n      }\n      function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n          untruncateYear(yearStr),\n          defaultLocaleMonthsShort.indexOf(monthStr),\n          parseInt(dayStr, 10),\n          parseInt(hourStr, 10),\n          parseInt(minuteStr, 10)\n        ];\n        if (secondStr) {\n          result.push(parseInt(secondStr, 10));\n        }\n        return result;\n      }\n      function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n          return 2e3 + year;\n        } else if (year <= 999) {\n          return 1900 + year;\n        }\n        return year;\n      }\n      function preprocessRFC2822(s) {\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, \" \").replace(/(\\s\\s+)/g, \" \").replace(/^\\s\\s*/, \"\").replace(/\\s\\s*$/, \"\");\n      }\n      function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n          var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(\n            parsedInput[0],\n            parsedInput[1],\n            parsedInput[2]\n          ).getDay();\n          if (weekdayProvided !== weekdayActual) {\n            getParsingFlags(config).weekdayMismatch = true;\n            config._isValid = false;\n            return false;\n          }\n        }\n        return true;\n      }\n      function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n          return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n          return 0;\n        } else {\n          var hm = parseInt(numOffset, 10), m = hm % 100, h = (hm - m) / 100;\n          return h * 60 + m;\n        }\n      }\n      function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)), parsedArray;\n        if (match) {\n          parsedArray = extractFromRFC2822Strings(\n            match[4],\n            match[3],\n            match[2],\n            match[5],\n            match[6],\n            match[7]\n          );\n          if (!checkWeekday(match[1], parsedArray, config)) {\n            return;\n          }\n          config._a = parsedArray;\n          config._tzm = calculateOffset(match[8], match[9], match[10]);\n          config._d = createUTCDate.apply(null, config._a);\n          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n          getParsingFlags(config).rfc2822 = true;\n        } else {\n          config._isValid = false;\n        }\n      }\n      function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n          config._d = /* @__PURE__ */ new Date(+matched[1]);\n          return;\n        }\n        configFromISO(config);\n        if (config._isValid === false) {\n          delete config._isValid;\n        } else {\n          return;\n        }\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n          delete config._isValid;\n        } else {\n          return;\n        }\n        if (config._strict) {\n          config._isValid = false;\n        } else {\n          hooks.createFromInputFallback(config);\n        }\n      }\n      hooks.createFromInputFallback = deprecate(\n        \"value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.\",\n        function(config) {\n          config._d = /* @__PURE__ */ new Date(config._i + (config._useUTC ? \" UTC\" : \"\"));\n        }\n      );\n      function defaults(a, b, c) {\n        if (a != null) {\n          return a;\n        }\n        if (b != null) {\n          return b;\n        }\n        return c;\n      }\n      function currentDateArray(config) {\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n          return [\n            nowValue.getUTCFullYear(),\n            nowValue.getUTCMonth(),\n            nowValue.getUTCDate()\n          ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n      }\n      function configFromArray(config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n        if (config._d) {\n          return;\n        }\n        currentDate = currentDateArray(config);\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n          dayOfYearFromWeekInfo(config);\n        }\n        if (config._dayOfYear != null) {\n          yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n          if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n          }\n          date = createUTCDate(yearToUse, 0, config._dayOfYear);\n          config._a[MONTH] = date.getUTCMonth();\n          config._a[DATE] = date.getUTCDate();\n        }\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n          config._a[i] = input[i] = currentDate[i];\n        }\n        for (; i < 7; i++) {\n          config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n        }\n        if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n          config._nextDay = true;\n          config._a[HOUR] = 0;\n        }\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n          null,\n          input\n        );\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n        if (config._tzm != null) {\n          config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n        if (config._nextDay) {\n          config._a[HOUR] = 24;\n        }\n        if (config._w && typeof config._w.d !== \"undefined\" && config._w.d !== expectedWeekday) {\n          getParsingFlags(config).weekdayMismatch = true;\n        }\n      }\n      function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n          dow = 1;\n          doy = 4;\n          weekYear = defaults(\n            w.GG,\n            config._a[YEAR],\n            weekOfYear(createLocal(), 1, 4).year\n          );\n          week = defaults(w.W, 1);\n          weekday = defaults(w.E, 1);\n          if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n          }\n        } else {\n          dow = config._locale._week.dow;\n          doy = config._locale._week.doy;\n          curWeek = weekOfYear(createLocal(), dow, doy);\n          weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n          week = defaults(w.w, curWeek.week);\n          if (w.d != null) {\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n              weekdayOverflow = true;\n            }\n          } else if (w.e != null) {\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n              weekdayOverflow = true;\n            }\n          } else {\n            weekday = dow;\n          }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n          getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n          getParsingFlags(config)._overflowWeekday = true;\n        } else {\n          temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n          config._a[YEAR] = temp.year;\n          config._dayOfYear = temp.dayOfYear;\n        }\n      }\n      hooks.ISO_8601 = function() {\n      };\n      hooks.RFC_2822 = function() {\n      };\n      function configFromStringAndFormat(config) {\n        if (config._f === hooks.ISO_8601) {\n          configFromISO(config);\n          return;\n        }\n        if (config._f === hooks.RFC_2822) {\n          configFromRFC2822(config);\n          return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n        var string = \"\" + config._i, i, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era;\n        tokens2 = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        for (i = 0; i < tokens2.length; i++) {\n          token2 = tokens2[i];\n          parsedInput = (string.match(getParseRegexForToken(token2, config)) || [])[0];\n          if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n              getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(\n              string.indexOf(parsedInput) + parsedInput.length\n            );\n            totalParsedInputLength += parsedInput.length;\n          }\n          if (formatTokenFunctions[token2]) {\n            if (parsedInput) {\n              getParsingFlags(config).empty = false;\n            } else {\n              getParsingFlags(config).unusedTokens.push(token2);\n            }\n            addTimeToArrayFromToken(token2, parsedInput, config);\n          } else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token2);\n          }\n        }\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n          getParsingFlags(config).unusedInput.push(string);\n        }\n        if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n          getParsingFlags(config).bigHour = void 0;\n        }\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        config._a[HOUR] = meridiemFixWrap(\n          config._locale,\n          config._a[HOUR],\n          config._meridiem\n        );\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n          config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n        configFromArray(config);\n        checkOverflow(config);\n      }\n      function meridiemFixWrap(locale2, hour, meridiem2) {\n        var isPm;\n        if (meridiem2 == null) {\n          return hour;\n        }\n        if (locale2.meridiemHour != null) {\n          return locale2.meridiemHour(hour, meridiem2);\n        } else if (locale2.isPM != null) {\n          isPm = locale2.isPM(meridiem2);\n          if (isPm && hour < 12) {\n            hour += 12;\n          }\n          if (!isPm && hour === 12) {\n            hour = 0;\n          }\n          return hour;\n        } else {\n          return hour;\n        }\n      }\n      function configFromStringAndArray(config) {\n        var tempConfig, bestMoment, scoreToBeat, i, currentScore, validFormatFound, bestFormatIsValid = false;\n        if (config._f.length === 0) {\n          getParsingFlags(config).invalidFormat = true;\n          config._d = /* @__PURE__ */ new Date(NaN);\n          return;\n        }\n        for (i = 0; i < config._f.length; i++) {\n          currentScore = 0;\n          validFormatFound = false;\n          tempConfig = copyConfig({}, config);\n          if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n          }\n          tempConfig._f = config._f[i];\n          configFromStringAndFormat(tempConfig);\n          if (isValid(tempConfig)) {\n            validFormatFound = true;\n          }\n          currentScore += getParsingFlags(tempConfig).charsLeftOver;\n          currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n          getParsingFlags(tempConfig).score = currentScore;\n          if (!bestFormatIsValid) {\n            if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\n              scoreToBeat = currentScore;\n              bestMoment = tempConfig;\n              if (validFormatFound) {\n                bestFormatIsValid = true;\n              }\n            }\n          } else {\n            if (currentScore < scoreToBeat) {\n              scoreToBeat = currentScore;\n              bestMoment = tempConfig;\n            }\n          }\n        }\n        extend(config, bestMoment || tempConfig);\n      }\n      function configFromObject(config) {\n        if (config._d) {\n          return;\n        }\n        var i = normalizeObjectUnits(config._i), dayOrDate = i.day === void 0 ? i.date : i.day;\n        config._a = map(\n          [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n          function(obj) {\n            return obj && parseInt(obj, 10);\n          }\n        );\n        configFromArray(config);\n      }\n      function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n          res.add(1, \"d\");\n          res._nextDay = void 0;\n        }\n        return res;\n      }\n      function prepareConfig(config) {\n        var input = config._i, format2 = config._f;\n        config._locale = config._locale || getLocale(config._l);\n        if (input === null || format2 === void 0 && input === \"\") {\n          return createInvalid({ nullInput: true });\n        }\n        if (typeof input === \"string\") {\n          config._i = input = config._locale.preparse(input);\n        }\n        if (isMoment(input)) {\n          return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n          config._d = input;\n        } else if (isArray(format2)) {\n          configFromStringAndArray(config);\n        } else if (format2) {\n          configFromStringAndFormat(config);\n        } else {\n          configFromInput(config);\n        }\n        if (!isValid(config)) {\n          config._d = null;\n        }\n        return config;\n      }\n      function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n          config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n          config._d = new Date(input.valueOf());\n        } else if (typeof input === \"string\") {\n          configFromString(config);\n        } else if (isArray(input)) {\n          config._a = map(input.slice(0), function(obj) {\n            return parseInt(obj, 10);\n          });\n          configFromArray(config);\n        } else if (isObject(input)) {\n          configFromObject(config);\n        } else if (isNumber(input)) {\n          config._d = new Date(input);\n        } else {\n          hooks.createFromInputFallback(config);\n        }\n      }\n      function createLocalOrUTC(input, format2, locale2, strict, isUTC) {\n        var c = {};\n        if (format2 === true || format2 === false) {\n          strict = format2;\n          format2 = void 0;\n        }\n        if (locale2 === true || locale2 === false) {\n          strict = locale2;\n          locale2 = void 0;\n        }\n        if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n          input = void 0;\n        }\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale2;\n        c._i = input;\n        c._f = format2;\n        c._strict = strict;\n        return createFromConfig(c);\n      }\n      function createLocal(input, format2, locale2, strict) {\n        return createLocalOrUTC(input, format2, locale2, strict, false);\n      }\n      var prototypeMin = deprecate(\n        \"moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/\",\n        function() {\n          var other = createLocal.apply(null, arguments);\n          if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n          } else {\n            return createInvalid();\n          }\n        }\n      ), prototypeMax = deprecate(\n        \"moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/\",\n        function() {\n          var other = createLocal.apply(null, arguments);\n          if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n          } else {\n            return createInvalid();\n          }\n        }\n      );\n      function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n          moments = moments[0];\n        }\n        if (!moments.length) {\n          return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n          if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n          }\n        }\n        return res;\n      }\n      function min() {\n        var args = [].slice.call(arguments, 0);\n        return pickBy(\"isBefore\", args);\n      }\n      function max() {\n        var args = [].slice.call(arguments, 0);\n        return pickBy(\"isAfter\", args);\n      }\n      var now = function() {\n        return Date.now ? Date.now() : +/* @__PURE__ */ new Date();\n      };\n      var ordering = [\n        \"year\",\n        \"quarter\",\n        \"month\",\n        \"week\",\n        \"day\",\n        \"hour\",\n        \"minute\",\n        \"second\",\n        \"millisecond\"\n      ];\n      function isDurationValid(m) {\n        var key, unitHasDecimal = false, i;\n        for (key in m) {\n          if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n            return false;\n          }\n        }\n        for (i = 0; i < ordering.length; ++i) {\n          if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n              return false;\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n              unitHasDecimal = true;\n            }\n          }\n        }\n        return true;\n      }\n      function isValid$1() {\n        return this._isValid;\n      }\n      function createInvalid$1() {\n        return createDuration(NaN);\n      }\n      function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0;\n        this._isValid = isDurationValid(normalizedInput);\n        this._milliseconds = +milliseconds2 + seconds2 * 1e3 + // 1000\n        minutes2 * 6e4 + // 1000 * 60\n        hours2 * 1e3 * 60 * 60;\n        this._days = +days2 + weeks2 * 7;\n        this._months = +months2 + quarters * 3 + years2 * 12;\n        this._data = {};\n        this._locale = getLocale();\n        this._bubble();\n      }\n      function isDuration(obj) {\n        return obj instanceof Duration;\n      }\n      function absRound(number) {\n        if (number < 0) {\n          return Math.round(-1 * number) * -1;\n        } else {\n          return Math.round(number);\n        }\n      }\n      function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i;\n        for (i = 0; i < len; i++) {\n          if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n            diffs++;\n          }\n        }\n        return diffs + lengthDiff;\n      }\n      function offset(token2, separator) {\n        addFormatToken(token2, 0, 0, function() {\n          var offset2 = this.utcOffset(), sign2 = \"+\";\n          if (offset2 < 0) {\n            offset2 = -offset2;\n            sign2 = \"-\";\n          }\n          return sign2 + zeroFill(~~(offset2 / 60), 2) + separator + zeroFill(~~offset2 % 60, 2);\n        });\n      }\n      offset(\"Z\", \":\");\n      offset(\"ZZ\", \"\");\n      addRegexToken(\"Z\", matchShortOffset);\n      addRegexToken(\"ZZ\", matchShortOffset);\n      addParseToken([\"Z\", \"ZZ\"], function(input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n      });\n      var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n      function offsetFromString(matcher, string) {\n        var matches = (string || \"\").match(matcher), chunk, parts, minutes2;\n        if (matches === null) {\n          return null;\n        }\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + \"\").match(chunkOffset) || [\"-\", 0, 0];\n        minutes2 = +(parts[1] * 60) + toInt(parts[2]);\n        return minutes2 === 0 ? 0 : parts[0] === \"+\" ? minutes2 : -minutes2;\n      }\n      function cloneWithOffset(input, model) {\n        var res, diff2;\n        if (model._isUTC) {\n          res = model.clone();\n          diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n          res._d.setTime(res._d.valueOf() + diff2);\n          hooks.updateOffset(res, false);\n          return res;\n        } else {\n          return createLocal(input).local();\n        }\n      }\n      function getDateOffset(m) {\n        return -Math.round(m._d.getTimezoneOffset());\n      }\n      hooks.updateOffset = function() {\n      };\n      function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset2 = this._offset || 0, localAdjust;\n        if (!this.isValid()) {\n          return input != null ? this : NaN;\n        }\n        if (input != null) {\n          if (typeof input === \"string\") {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n              return this;\n            }\n          } else if (Math.abs(input) < 16 && !keepMinutes) {\n            input = input * 60;\n          }\n          if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n          }\n          this._offset = input;\n          this._isUTC = true;\n          if (localAdjust != null) {\n            this.add(localAdjust, \"m\");\n          }\n          if (offset2 !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n              addSubtract(\n                this,\n                createDuration(input - offset2, \"m\"),\n                1,\n                false\n              );\n            } else if (!this._changeInProgress) {\n              this._changeInProgress = true;\n              hooks.updateOffset(this, true);\n              this._changeInProgress = null;\n            }\n          }\n          return this;\n        } else {\n          return this._isUTC ? offset2 : getDateOffset(this);\n        }\n      }\n      function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n          if (typeof input !== \"string\") {\n            input = -input;\n          }\n          this.utcOffset(input, keepLocalTime);\n          return this;\n        } else {\n          return -this.utcOffset();\n        }\n      }\n      function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n      }\n      function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n          this.utcOffset(0, keepLocalTime);\n          this._isUTC = false;\n          if (keepLocalTime) {\n            this.subtract(getDateOffset(this), \"m\");\n          }\n        }\n        return this;\n      }\n      function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n          this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === \"string\") {\n          var tZone = offsetFromString(matchOffset, this._i);\n          if (tZone != null) {\n            this.utcOffset(tZone);\n          } else {\n            this.utcOffset(0, true);\n          }\n        }\n        return this;\n      }\n      function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n          return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n        return (this.utcOffset() - input) % 60 === 0;\n      }\n      function isDaylightSavingTime() {\n        return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n      }\n      function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n          return this._isDSTShifted;\n        }\n        var c = {}, other;\n        copyConfig(c, this);\n        c = prepareConfig(c);\n        if (c._a) {\n          other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n          this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n          this._isDSTShifted = false;\n        }\n        return this._isDSTShifted;\n      }\n      function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n      }\n      function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n      }\n      function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n      }\n      var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/, isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n      function createDuration(input, key) {\n        var duration = input, match = null, sign2, ret, diffRes;\n        if (isDuration(input)) {\n          duration = {\n            ms: input._milliseconds,\n            d: input._days,\n            M: input._months\n          };\n        } else if (isNumber(input) || !isNaN(+input)) {\n          duration = {};\n          if (key) {\n            duration[key] = +input;\n          } else {\n            duration.milliseconds = +input;\n          }\n        } else if (match = aspNetRegex.exec(input)) {\n          sign2 = match[1] === \"-\" ? -1 : 1;\n          duration = {\n            y: 0,\n            d: toInt(match[DATE]) * sign2,\n            h: toInt(match[HOUR]) * sign2,\n            m: toInt(match[MINUTE]) * sign2,\n            s: toInt(match[SECOND]) * sign2,\n            ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign2\n            // the millisecond decimal point is included in the match\n          };\n        } else if (match = isoRegex.exec(input)) {\n          sign2 = match[1] === \"-\" ? -1 : 1;\n          duration = {\n            y: parseIso(match[2], sign2),\n            M: parseIso(match[3], sign2),\n            w: parseIso(match[4], sign2),\n            d: parseIso(match[5], sign2),\n            h: parseIso(match[6], sign2),\n            m: parseIso(match[7], sign2),\n            s: parseIso(match[8], sign2)\n          };\n        } else if (duration == null) {\n          duration = {};\n        } else if (typeof duration === \"object\" && (\"from\" in duration || \"to\" in duration)) {\n          diffRes = momentsDifference(\n            createLocal(duration.from),\n            createLocal(duration.to)\n          );\n          duration = {};\n          duration.ms = diffRes.milliseconds;\n          duration.M = diffRes.months;\n        }\n        ret = new Duration(duration);\n        if (isDuration(input) && hasOwnProp(input, \"_locale\")) {\n          ret._locale = input._locale;\n        }\n        if (isDuration(input) && hasOwnProp(input, \"_isValid\")) {\n          ret._isValid = input._isValid;\n        }\n        return ret;\n      }\n      createDuration.fn = Duration.prototype;\n      createDuration.invalid = createInvalid$1;\n      function parseIso(inp, sign2) {\n        var res = inp && parseFloat(inp.replace(\",\", \".\"));\n        return (isNaN(res) ? 0 : res) * sign2;\n      }\n      function positiveMomentsDifference(base, other) {\n        var res = {};\n        res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, \"M\").isAfter(other)) {\n          --res.months;\n        }\n        res.milliseconds = +other - +base.clone().add(res.months, \"M\");\n        return res;\n      }\n      function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n          return { milliseconds: 0, months: 0 };\n        }\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n          res = positiveMomentsDifference(base, other);\n        } else {\n          res = positiveMomentsDifference(other, base);\n          res.milliseconds = -res.milliseconds;\n          res.months = -res.months;\n        }\n        return res;\n      }\n      function createAdder(direction, name) {\n        return function(val, period) {\n          var dur, tmp;\n          if (period !== null && !isNaN(+period)) {\n            deprecateSimple(\n              name,\n              \"moment().\" + name + \"(period, number) is deprecated. Please use moment().\" + name + \"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.\"\n            );\n            tmp = val;\n            val = period;\n            period = tmp;\n          }\n          dur = createDuration(val, period);\n          addSubtract(this, dur, direction);\n          return this;\n        };\n      }\n      function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months);\n        if (!mom.isValid()) {\n          return;\n        }\n        updateOffset = updateOffset == null ? true : updateOffset;\n        if (months2) {\n          setMonth(mom, get(mom, \"Month\") + months2 * isAdding);\n        }\n        if (days2) {\n          set$1(mom, \"Date\", get(mom, \"Date\") + days2 * isAdding);\n        }\n        if (milliseconds2) {\n          mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding);\n        }\n        if (updateOffset) {\n          hooks.updateOffset(mom, days2 || months2);\n        }\n      }\n      var add = createAdder(1, \"add\"), subtract = createAdder(-1, \"subtract\");\n      function isString(input) {\n        return typeof input === \"string\" || input instanceof String;\n      }\n      function isMomentInput(input) {\n        return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;\n      }\n      function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [\n          \"years\",\n          \"year\",\n          \"y\",\n          \"months\",\n          \"month\",\n          \"M\",\n          \"days\",\n          \"day\",\n          \"d\",\n          \"dates\",\n          \"date\",\n          \"D\",\n          \"hours\",\n          \"hour\",\n          \"h\",\n          \"minutes\",\n          \"minute\",\n          \"m\",\n          \"seconds\",\n          \"second\",\n          \"s\",\n          \"milliseconds\",\n          \"millisecond\",\n          \"ms\"\n        ], i, property;\n        for (i = 0; i < properties.length; i += 1) {\n          property = properties[i];\n          propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n        return objectTest && propertyTest;\n      }\n      function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input), dataTypeTest = false;\n        if (arrayTest) {\n          dataTypeTest = input.filter(function(item) {\n            return !isNumber(item) && isString(input);\n          }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n      }\n      function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input), propertyTest = false, properties = [\n          \"sameDay\",\n          \"nextDay\",\n          \"lastDay\",\n          \"nextWeek\",\n          \"lastWeek\",\n          \"sameElse\"\n        ], i, property;\n        for (i = 0; i < properties.length; i += 1) {\n          property = properties[i];\n          propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n        return objectTest && propertyTest;\n      }\n      function getCalendarFormat(myMoment, now2) {\n        var diff2 = myMoment.diff(now2, \"days\", true);\n        return diff2 < -6 ? \"sameElse\" : diff2 < -1 ? \"lastWeek\" : diff2 < 0 ? \"lastDay\" : diff2 < 1 ? \"sameDay\" : diff2 < 2 ? \"nextDay\" : diff2 < 7 ? \"nextWeek\" : \"sameElse\";\n      }\n      function calendar$1(time, formats) {\n        if (arguments.length === 1) {\n          if (!arguments[0]) {\n            time = void 0;\n            formats = void 0;\n          } else if (isMomentInput(arguments[0])) {\n            time = arguments[0];\n            formats = void 0;\n          } else if (isCalendarSpec(arguments[0])) {\n            formats = arguments[0];\n            time = void 0;\n          }\n        }\n        var now2 = time || createLocal(), sod = cloneWithOffset(now2, this).startOf(\"day\"), format2 = hooks.calendarFormat(this, sod) || \"sameElse\", output = formats && (isFunction(formats[format2]) ? formats[format2].call(this, now2) : formats[format2]);\n        return this.format(\n          output || this.localeData().calendar(format2, this, createLocal(now2))\n        );\n      }\n      function clone() {\n        return new Moment(this);\n      }\n      function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n          return false;\n        }\n        units = normalizeUnits(units) || \"millisecond\";\n        if (units === \"millisecond\") {\n          return this.valueOf() > localInput.valueOf();\n        } else {\n          return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n      }\n      function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n          return false;\n        }\n        units = normalizeUnits(units) || \"millisecond\";\n        if (units === \"millisecond\") {\n          return this.valueOf() < localInput.valueOf();\n        } else {\n          return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n      }\n      function isBetween(from2, to2, units, inclusivity) {\n        var localFrom = isMoment(from2) ? from2 : createLocal(from2), localTo = isMoment(to2) ? to2 : createLocal(to2);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n          return false;\n        }\n        inclusivity = inclusivity || \"()\";\n        return (inclusivity[0] === \"(\" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === \")\" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n      }\n      function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input), inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n          return false;\n        }\n        units = normalizeUnits(units) || \"millisecond\";\n        if (units === \"millisecond\") {\n          return this.valueOf() === localInput.valueOf();\n        } else {\n          inputMs = localInput.valueOf();\n          return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n      }\n      function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n      }\n      function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n      }\n      function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n        if (!this.isValid()) {\n          return NaN;\n        }\n        that = cloneWithOffset(input, this);\n        if (!that.isValid()) {\n          return NaN;\n        }\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n        units = normalizeUnits(units);\n        switch (units) {\n          case \"year\":\n            output = monthDiff(this, that) / 12;\n            break;\n          case \"month\":\n            output = monthDiff(this, that);\n            break;\n          case \"quarter\":\n            output = monthDiff(this, that) / 3;\n            break;\n          case \"second\":\n            output = (this - that) / 1e3;\n            break;\n          case \"minute\":\n            output = (this - that) / 6e4;\n            break;\n          case \"hour\":\n            output = (this - that) / 36e5;\n            break;\n          case \"day\":\n            output = (this - that - zoneDelta) / 864e5;\n            break;\n          case \"week\":\n            output = (this - that - zoneDelta) / 6048e5;\n            break;\n          default:\n            output = this - that;\n        }\n        return asFloat ? output : absFloor(output);\n      }\n      function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n          return -monthDiff(b, a);\n        }\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), anchor = a.clone().add(wholeMonthDiff, \"months\"), anchor2, adjust;\n        if (b - anchor < 0) {\n          anchor2 = a.clone().add(wholeMonthDiff - 1, \"months\");\n          adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n          anchor2 = a.clone().add(wholeMonthDiff + 1, \"months\");\n          adjust = (b - anchor) / (anchor2 - anchor);\n        }\n        return -(wholeMonthDiff + adjust) || 0;\n      }\n      hooks.defaultFormat = \"YYYY-MM-DDTHH:mm:ssZ\";\n      hooks.defaultFormatUtc = \"YYYY-MM-DDTHH:mm:ss[Z]\";\n      function toString() {\n        return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\");\n      }\n      function toISOString(keepOffset) {\n        if (!this.isValid()) {\n          return null;\n        }\n        var utc = keepOffset !== true, m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n          return formatMoment(\n            m,\n            utc ? \"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\" : \"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ\"\n          );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n          if (utc) {\n            return this.toDate().toISOString();\n          } else {\n            return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace(\"Z\", formatMoment(m, \"Z\"));\n          }\n        }\n        return formatMoment(\n          m,\n          utc ? \"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\" : \"YYYY-MM-DD[T]HH:mm:ss.SSSZ\"\n        );\n      }\n      function inspect() {\n        if (!this.isValid()) {\n          return \"moment.invalid(/* \" + this._i + \" */)\";\n        }\n        var func = \"moment\", zone = \"\", prefix, year, datetime, suffix;\n        if (!this.isLocal()) {\n          func = this.utcOffset() === 0 ? \"moment.utc\" : \"moment.parseZone\";\n          zone = \"Z\";\n        }\n        prefix = \"[\" + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? \"YYYY\" : \"YYYYYY\";\n        datetime = \"-MM-DD[T]HH:mm:ss.SSS\";\n        suffix = zone + '[\")]';\n        return this.format(prefix + year + datetime + suffix);\n      }\n      function format(inputString) {\n        if (!inputString) {\n          inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n      }\n      function from(time, withoutSuffix) {\n        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n          return createDuration({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n          return this.localeData().invalidDate();\n        }\n      }\n      function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n      }\n      function to(time, withoutSuffix) {\n        if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n          return createDuration({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n          return this.localeData().invalidDate();\n        }\n      }\n      function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n      }\n      function locale(key) {\n        var newLocaleData;\n        if (key === void 0) {\n          return this._locale._abbr;\n        } else {\n          newLocaleData = getLocale(key);\n          if (newLocaleData != null) {\n            this._locale = newLocaleData;\n          }\n          return this;\n        }\n      }\n      var lang = deprecate(\n        \"moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.\",\n        function(key) {\n          if (key === void 0) {\n            return this.localeData();\n          } else {\n            return this.locale(key);\n          }\n        }\n      );\n      function localeData() {\n        return this._locale;\n      }\n      var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n      function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n      }\n      function localStartOfDate(y, m, d) {\n        if (y < 100 && y >= 0) {\n          return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n          return new Date(y, m, d).valueOf();\n        }\n      }\n      function utcStartOfDate(y, m, d) {\n        if (y < 100 && y >= 0) {\n          return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n          return Date.UTC(y, m, d);\n        }\n      }\n      function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === void 0 || units === \"millisecond\" || !this.isValid()) {\n          return this;\n        }\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n        switch (units) {\n          case \"year\":\n            time = startOfDate(this.year(), 0, 1);\n            break;\n          case \"quarter\":\n            time = startOfDate(\n              this.year(),\n              this.month() - this.month() % 3,\n              1\n            );\n            break;\n          case \"month\":\n            time = startOfDate(this.year(), this.month(), 1);\n            break;\n          case \"week\":\n            time = startOfDate(\n              this.year(),\n              this.month(),\n              this.date() - this.weekday()\n            );\n            break;\n          case \"isoWeek\":\n            time = startOfDate(\n              this.year(),\n              this.month(),\n              this.date() - (this.isoWeekday() - 1)\n            );\n            break;\n          case \"day\":\n          case \"date\":\n            time = startOfDate(this.year(), this.month(), this.date());\n            break;\n          case \"hour\":\n            time = this._d.valueOf();\n            time -= mod$1(\n              time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n              MS_PER_HOUR\n            );\n            break;\n          case \"minute\":\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_MINUTE);\n            break;\n          case \"second\":\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_SECOND);\n            break;\n        }\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n      }\n      function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === void 0 || units === \"millisecond\" || !this.isValid()) {\n          return this;\n        }\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n        switch (units) {\n          case \"year\":\n            time = startOfDate(this.year() + 1, 0, 1) - 1;\n            break;\n          case \"quarter\":\n            time = startOfDate(\n              this.year(),\n              this.month() - this.month() % 3 + 3,\n              1\n            ) - 1;\n            break;\n          case \"month\":\n            time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n            break;\n          case \"week\":\n            time = startOfDate(\n              this.year(),\n              this.month(),\n              this.date() - this.weekday() + 7\n            ) - 1;\n            break;\n          case \"isoWeek\":\n            time = startOfDate(\n              this.year(),\n              this.month(),\n              this.date() - (this.isoWeekday() - 1) + 7\n            ) - 1;\n            break;\n          case \"day\":\n          case \"date\":\n            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n            break;\n          case \"hour\":\n            time = this._d.valueOf();\n            time += MS_PER_HOUR - mod$1(\n              time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n              MS_PER_HOUR\n            ) - 1;\n            break;\n          case \"minute\":\n            time = this._d.valueOf();\n            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n            break;\n          case \"second\":\n            time = this._d.valueOf();\n            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n            break;\n        }\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n      }\n      function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 6e4;\n      }\n      function unix() {\n        return Math.floor(this.valueOf() / 1e3);\n      }\n      function toDate() {\n        return new Date(this.valueOf());\n      }\n      function toArray() {\n        var m = this;\n        return [\n          m.year(),\n          m.month(),\n          m.date(),\n          m.hour(),\n          m.minute(),\n          m.second(),\n          m.millisecond()\n        ];\n      }\n      function toObject() {\n        var m = this;\n        return {\n          years: m.year(),\n          months: m.month(),\n          date: m.date(),\n          hours: m.hours(),\n          minutes: m.minutes(),\n          seconds: m.seconds(),\n          milliseconds: m.milliseconds()\n        };\n      }\n      function toJSON() {\n        return this.isValid() ? this.toISOString() : null;\n      }\n      function isValid$2() {\n        return isValid(this);\n      }\n      function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n      }\n      function invalidAt() {\n        return getParsingFlags(this).overflow;\n      }\n      function creationData() {\n        return {\n          input: this._i,\n          format: this._f,\n          locale: this._locale,\n          isUTC: this._isUTC,\n          strict: this._strict\n        };\n      }\n      addFormatToken(\"N\", 0, 0, \"eraAbbr\");\n      addFormatToken(\"NN\", 0, 0, \"eraAbbr\");\n      addFormatToken(\"NNN\", 0, 0, \"eraAbbr\");\n      addFormatToken(\"NNNN\", 0, 0, \"eraName\");\n      addFormatToken(\"NNNNN\", 0, 0, \"eraNarrow\");\n      addFormatToken(\"y\", [\"y\", 1], \"yo\", \"eraYear\");\n      addFormatToken(\"y\", [\"yy\", 2], 0, \"eraYear\");\n      addFormatToken(\"y\", [\"yyy\", 3], 0, \"eraYear\");\n      addFormatToken(\"y\", [\"yyyy\", 4], 0, \"eraYear\");\n      addRegexToken(\"N\", matchEraAbbr);\n      addRegexToken(\"NN\", matchEraAbbr);\n      addRegexToken(\"NNN\", matchEraAbbr);\n      addRegexToken(\"NNNN\", matchEraName);\n      addRegexToken(\"NNNNN\", matchEraNarrow);\n      addParseToken([\"N\", \"NN\", \"NNN\", \"NNNN\", \"NNNNN\"], function(input, array, config, token2) {\n        var era = config._locale.erasParse(input, token2, config._strict);\n        if (era) {\n          getParsingFlags(config).era = era;\n        } else {\n          getParsingFlags(config).invalidEra = input;\n        }\n      });\n      addRegexToken(\"y\", matchUnsigned);\n      addRegexToken(\"yy\", matchUnsigned);\n      addRegexToken(\"yyy\", matchUnsigned);\n      addRegexToken(\"yyyy\", matchUnsigned);\n      addRegexToken(\"yo\", matchEraYearOrdinal);\n      addParseToken([\"y\", \"yy\", \"yyy\", \"yyyy\"], YEAR);\n      addParseToken([\"yo\"], function(input, array, config, token2) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n          match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n        if (config._locale.eraYearOrdinalParse) {\n          array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n          array[YEAR] = parseInt(input, 10);\n        }\n      });\n      function localeEras(m, format2) {\n        var i, l, date, eras = this._eras || getLocale(\"en\")._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n          switch (typeof eras[i].since) {\n            case \"string\":\n              date = hooks(eras[i].since).startOf(\"day\");\n              eras[i].since = date.valueOf();\n              break;\n          }\n          switch (typeof eras[i].until) {\n            case \"undefined\":\n              eras[i].until = Infinity;\n              break;\n            case \"string\":\n              date = hooks(eras[i].until).startOf(\"day\").valueOf();\n              eras[i].until = date.valueOf();\n              break;\n          }\n        }\n        return eras;\n      }\n      function localeErasParse(eraName, format2, strict) {\n        var i, l, eras = this.eras(), name, abbr, narrow;\n        eraName = eraName.toUpperCase();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          name = eras[i].name.toUpperCase();\n          abbr = eras[i].abbr.toUpperCase();\n          narrow = eras[i].narrow.toUpperCase();\n          if (strict) {\n            switch (format2) {\n              case \"N\":\n              case \"NN\":\n              case \"NNN\":\n                if (abbr === eraName) {\n                  return eras[i];\n                }\n                break;\n              case \"NNNN\":\n                if (name === eraName) {\n                  return eras[i];\n                }\n                break;\n              case \"NNNNN\":\n                if (narrow === eraName) {\n                  return eras[i];\n                }\n                break;\n            }\n          } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n            return eras[i];\n          }\n        }\n      }\n      function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? 1 : -1;\n        if (year === void 0) {\n          return hooks(era.since).year();\n        } else {\n          return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n      }\n      function getEraName() {\n        var i, l, val, eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          val = this.clone().startOf(\"day\").valueOf();\n          if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].name;\n          }\n          if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].name;\n          }\n        }\n        return \"\";\n      }\n      function getEraNarrow() {\n        var i, l, val, eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          val = this.clone().startOf(\"day\").valueOf();\n          if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].narrow;\n          }\n          if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].narrow;\n          }\n        }\n        return \"\";\n      }\n      function getEraAbbr() {\n        var i, l, val, eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          val = this.clone().startOf(\"day\").valueOf();\n          if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].abbr;\n          }\n          if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].abbr;\n          }\n        }\n        return \"\";\n      }\n      function getEraYear() {\n        var i, l, dir, val, eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          dir = eras[i].since <= eras[i].until ? 1 : -1;\n          val = this.clone().startOf(\"day\").valueOf();\n          if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n            return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n          }\n        }\n        return this.year();\n      }\n      function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, \"_erasNameRegex\")) {\n          computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n      }\n      function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, \"_erasAbbrRegex\")) {\n          computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n      }\n      function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, \"_erasNarrowRegex\")) {\n          computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n      }\n      function matchEraAbbr(isStrict, locale2) {\n        return locale2.erasAbbrRegex(isStrict);\n      }\n      function matchEraName(isStrict, locale2) {\n        return locale2.erasNameRegex(isStrict);\n      }\n      function matchEraNarrow(isStrict, locale2) {\n        return locale2.erasNarrowRegex(isStrict);\n      }\n      function matchEraYearOrdinal(isStrict, locale2) {\n        return locale2._eraYearOrdinalRegex || matchUnsigned;\n      }\n      function computeErasParse() {\n        var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i, l, eras = this.eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n          namePieces.push(regexEscape(eras[i].name));\n          abbrPieces.push(regexEscape(eras[i].abbr));\n          narrowPieces.push(regexEscape(eras[i].narrow));\n          mixedPieces.push(regexEscape(eras[i].name));\n          mixedPieces.push(regexEscape(eras[i].abbr));\n          mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n        this._erasRegex = new RegExp(\"^(\" + mixedPieces.join(\"|\") + \")\", \"i\");\n        this._erasNameRegex = new RegExp(\"^(\" + namePieces.join(\"|\") + \")\", \"i\");\n        this._erasAbbrRegex = new RegExp(\"^(\" + abbrPieces.join(\"|\") + \")\", \"i\");\n        this._erasNarrowRegex = new RegExp(\n          \"^(\" + narrowPieces.join(\"|\") + \")\",\n          \"i\"\n        );\n      }\n      addFormatToken(0, [\"gg\", 2], 0, function() {\n        return this.weekYear() % 100;\n      });\n      addFormatToken(0, [\"GG\", 2], 0, function() {\n        return this.isoWeekYear() % 100;\n      });\n      function addWeekYearFormatToken(token2, getter) {\n        addFormatToken(0, [token2, token2.length], 0, getter);\n      }\n      addWeekYearFormatToken(\"gggg\", \"weekYear\");\n      addWeekYearFormatToken(\"ggggg\", \"weekYear\");\n      addWeekYearFormatToken(\"GGGG\", \"isoWeekYear\");\n      addWeekYearFormatToken(\"GGGGG\", \"isoWeekYear\");\n      addUnitAlias(\"weekYear\", \"gg\");\n      addUnitAlias(\"isoWeekYear\", \"GG\");\n      addUnitPriority(\"weekYear\", 1);\n      addUnitPriority(\"isoWeekYear\", 1);\n      addRegexToken(\"G\", matchSigned);\n      addRegexToken(\"g\", matchSigned);\n      addRegexToken(\"GG\", match1to2, match2);\n      addRegexToken(\"gg\", match1to2, match2);\n      addRegexToken(\"GGGG\", match1to4, match4);\n      addRegexToken(\"gggg\", match1to4, match4);\n      addRegexToken(\"GGGGG\", match1to6, match6);\n      addRegexToken(\"ggggg\", match1to6, match6);\n      addWeekParseToken([\"gggg\", \"ggggg\", \"GGGG\", \"GGGGG\"], function(input, week, config, token2) {\n        week[token2.substr(0, 2)] = toInt(input);\n      });\n      addWeekParseToken([\"gg\", \"GG\"], function(input, week, config, token2) {\n        week[token2] = hooks.parseTwoDigitYear(input);\n      });\n      function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n          this,\n          input,\n          this.week(),\n          this.weekday(),\n          this.localeData()._week.dow,\n          this.localeData()._week.doy\n        );\n      }\n      function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n          this,\n          input,\n          this.isoWeek(),\n          this.isoWeekday(),\n          1,\n          4\n        );\n      }\n      function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n      }\n      function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n      }\n      function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n      }\n      function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n      }\n      function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n          return weekOfYear(this, dow, doy).year;\n        } else {\n          weeksTarget = weeksInYear(input, dow, doy);\n          if (week > weeksTarget) {\n            week = weeksTarget;\n          }\n          return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n      }\n      function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n      }\n      addFormatToken(\"Q\", 0, \"Qo\", \"quarter\");\n      addUnitAlias(\"quarter\", \"Q\");\n      addUnitPriority(\"quarter\", 7);\n      addRegexToken(\"Q\", match1);\n      addParseToken(\"Q\", function(input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n      });\n      function getSetQuarter(input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n      }\n      addFormatToken(\"D\", [\"DD\", 2], \"Do\", \"date\");\n      addUnitAlias(\"date\", \"D\");\n      addUnitPriority(\"date\", 9);\n      addRegexToken(\"D\", match1to2);\n      addRegexToken(\"DD\", match1to2, match2);\n      addRegexToken(\"Do\", function(isStrict, locale2) {\n        return isStrict ? locale2._dayOfMonthOrdinalParse || locale2._ordinalParse : locale2._dayOfMonthOrdinalParseLenient;\n      });\n      addParseToken([\"D\", \"DD\"], DATE);\n      addParseToken(\"Do\", function(input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n      });\n      var getSetDayOfMonth = makeGetSet(\"Date\", true);\n      addFormatToken(\"DDD\", [\"DDDD\", 3], \"DDDo\", \"dayOfYear\");\n      addUnitAlias(\"dayOfYear\", \"DDD\");\n      addUnitPriority(\"dayOfYear\", 4);\n      addRegexToken(\"DDD\", match1to3);\n      addRegexToken(\"DDDD\", match3);\n      addParseToken([\"DDD\", \"DDDD\"], function(input, array, config) {\n        config._dayOfYear = toInt(input);\n      });\n      function getSetDayOfYear(input) {\n        var dayOfYear = Math.round(\n          (this.clone().startOf(\"day\") - this.clone().startOf(\"year\")) / 864e5\n        ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, \"d\");\n      }\n      addFormatToken(\"m\", [\"mm\", 2], 0, \"minute\");\n      addUnitAlias(\"minute\", \"m\");\n      addUnitPriority(\"minute\", 14);\n      addRegexToken(\"m\", match1to2);\n      addRegexToken(\"mm\", match1to2, match2);\n      addParseToken([\"m\", \"mm\"], MINUTE);\n      var getSetMinute = makeGetSet(\"Minutes\", false);\n      addFormatToken(\"s\", [\"ss\", 2], 0, \"second\");\n      addUnitAlias(\"second\", \"s\");\n      addUnitPriority(\"second\", 15);\n      addRegexToken(\"s\", match1to2);\n      addRegexToken(\"ss\", match1to2, match2);\n      addParseToken([\"s\", \"ss\"], SECOND);\n      var getSetSecond = makeGetSet(\"Seconds\", false);\n      addFormatToken(\"S\", 0, 0, function() {\n        return ~~(this.millisecond() / 100);\n      });\n      addFormatToken(0, [\"SS\", 2], 0, function() {\n        return ~~(this.millisecond() / 10);\n      });\n      addFormatToken(0, [\"SSS\", 3], 0, \"millisecond\");\n      addFormatToken(0, [\"SSSS\", 4], 0, function() {\n        return this.millisecond() * 10;\n      });\n      addFormatToken(0, [\"SSSSS\", 5], 0, function() {\n        return this.millisecond() * 100;\n      });\n      addFormatToken(0, [\"SSSSSS\", 6], 0, function() {\n        return this.millisecond() * 1e3;\n      });\n      addFormatToken(0, [\"SSSSSSS\", 7], 0, function() {\n        return this.millisecond() * 1e4;\n      });\n      addFormatToken(0, [\"SSSSSSSS\", 8], 0, function() {\n        return this.millisecond() * 1e5;\n      });\n      addFormatToken(0, [\"SSSSSSSSS\", 9], 0, function() {\n        return this.millisecond() * 1e6;\n      });\n      addUnitAlias(\"millisecond\", \"ms\");\n      addUnitPriority(\"millisecond\", 16);\n      addRegexToken(\"S\", match1to3, match1);\n      addRegexToken(\"SS\", match1to3, match2);\n      addRegexToken(\"SSS\", match1to3, match3);\n      var token, getSetMillisecond;\n      for (token = \"SSSS\"; token.length <= 9; token += \"S\") {\n        addRegexToken(token, matchUnsigned);\n      }\n      function parseMs(input, array) {\n        array[MILLISECOND] = toInt((\"0.\" + input) * 1e3);\n      }\n      for (token = \"S\"; token.length <= 9; token += \"S\") {\n        addParseToken(token, parseMs);\n      }\n      getSetMillisecond = makeGetSet(\"Milliseconds\", false);\n      addFormatToken(\"z\", 0, 0, \"zoneAbbr\");\n      addFormatToken(\"zz\", 0, 0, \"zoneName\");\n      function getZoneAbbr() {\n        return this._isUTC ? \"UTC\" : \"\";\n      }\n      function getZoneName() {\n        return this._isUTC ? \"Coordinated Universal Time\" : \"\";\n      }\n      var proto = Moment.prototype;\n      proto.add = add;\n      proto.calendar = calendar$1;\n      proto.clone = clone;\n      proto.diff = diff;\n      proto.endOf = endOf;\n      proto.format = format;\n      proto.from = from;\n      proto.fromNow = fromNow;\n      proto.to = to;\n      proto.toNow = toNow;\n      proto.get = stringGet;\n      proto.invalidAt = invalidAt;\n      proto.isAfter = isAfter;\n      proto.isBefore = isBefore;\n      proto.isBetween = isBetween;\n      proto.isSame = isSame;\n      proto.isSameOrAfter = isSameOrAfter;\n      proto.isSameOrBefore = isSameOrBefore;\n      proto.isValid = isValid$2;\n      proto.lang = lang;\n      proto.locale = locale;\n      proto.localeData = localeData;\n      proto.max = prototypeMax;\n      proto.min = prototypeMin;\n      proto.parsingFlags = parsingFlags;\n      proto.set = stringSet;\n      proto.startOf = startOf;\n      proto.subtract = subtract;\n      proto.toArray = toArray;\n      proto.toObject = toObject;\n      proto.toDate = toDate;\n      proto.toISOString = toISOString;\n      proto.inspect = inspect;\n      if (typeof Symbol !== \"undefined\" && Symbol.for != null) {\n        proto[Symbol.for(\"nodejs.util.inspect.custom\")] = function() {\n          return \"Moment<\" + this.format() + \">\";\n        };\n      }\n      proto.toJSON = toJSON;\n      proto.toString = toString;\n      proto.unix = unix;\n      proto.valueOf = valueOf;\n      proto.creationData = creationData;\n      proto.eraName = getEraName;\n      proto.eraNarrow = getEraNarrow;\n      proto.eraAbbr = getEraAbbr;\n      proto.eraYear = getEraYear;\n      proto.year = getSetYear;\n      proto.isLeapYear = getIsLeapYear;\n      proto.weekYear = getSetWeekYear;\n      proto.isoWeekYear = getSetISOWeekYear;\n      proto.quarter = proto.quarters = getSetQuarter;\n      proto.month = getSetMonth;\n      proto.daysInMonth = getDaysInMonth;\n      proto.week = proto.weeks = getSetWeek;\n      proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n      proto.weeksInYear = getWeeksInYear;\n      proto.weeksInWeekYear = getWeeksInWeekYear;\n      proto.isoWeeksInYear = getISOWeeksInYear;\n      proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n      proto.date = getSetDayOfMonth;\n      proto.day = proto.days = getSetDayOfWeek;\n      proto.weekday = getSetLocaleDayOfWeek;\n      proto.isoWeekday = getSetISODayOfWeek;\n      proto.dayOfYear = getSetDayOfYear;\n      proto.hour = proto.hours = getSetHour;\n      proto.minute = proto.minutes = getSetMinute;\n      proto.second = proto.seconds = getSetSecond;\n      proto.millisecond = proto.milliseconds = getSetMillisecond;\n      proto.utcOffset = getSetOffset;\n      proto.utc = setOffsetToUTC;\n      proto.local = setOffsetToLocal;\n      proto.parseZone = setOffsetToParsedOffset;\n      proto.hasAlignedHourOffset = hasAlignedHourOffset;\n      proto.isDST = isDaylightSavingTime;\n      proto.isLocal = isLocal;\n      proto.isUtcOffset = isUtcOffset;\n      proto.isUtc = isUtc;\n      proto.isUTC = isUtc;\n      proto.zoneAbbr = getZoneAbbr;\n      proto.zoneName = getZoneName;\n      proto.dates = deprecate(\n        \"dates accessor is deprecated. Use date instead.\",\n        getSetDayOfMonth\n      );\n      proto.months = deprecate(\n        \"months accessor is deprecated. Use month instead\",\n        getSetMonth\n      );\n      proto.years = deprecate(\n        \"years accessor is deprecated. Use year instead\",\n        getSetYear\n      );\n      proto.zone = deprecate(\n        \"moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/\",\n        getSetZone\n      );\n      proto.isDSTShifted = deprecate(\n        \"isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information\",\n        isDaylightSavingTimeShifted\n      );\n      function createUnix(input) {\n        return createLocal(input * 1e3);\n      }\n      function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n      }\n      function preParsePostFormat(string) {\n        return string;\n      }\n      var proto$1 = Locale.prototype;\n      proto$1.calendar = calendar;\n      proto$1.longDateFormat = longDateFormat;\n      proto$1.invalidDate = invalidDate;\n      proto$1.ordinal = ordinal;\n      proto$1.preparse = preParsePostFormat;\n      proto$1.postformat = preParsePostFormat;\n      proto$1.relativeTime = relativeTime;\n      proto$1.pastFuture = pastFuture;\n      proto$1.set = set;\n      proto$1.eras = localeEras;\n      proto$1.erasParse = localeErasParse;\n      proto$1.erasConvertYear = localeErasConvertYear;\n      proto$1.erasAbbrRegex = erasAbbrRegex;\n      proto$1.erasNameRegex = erasNameRegex;\n      proto$1.erasNarrowRegex = erasNarrowRegex;\n      proto$1.months = localeMonths;\n      proto$1.monthsShort = localeMonthsShort;\n      proto$1.monthsParse = localeMonthsParse;\n      proto$1.monthsRegex = monthsRegex;\n      proto$1.monthsShortRegex = monthsShortRegex;\n      proto$1.week = localeWeek;\n      proto$1.firstDayOfYear = localeFirstDayOfYear;\n      proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n      proto$1.weekdays = localeWeekdays;\n      proto$1.weekdaysMin = localeWeekdaysMin;\n      proto$1.weekdaysShort = localeWeekdaysShort;\n      proto$1.weekdaysParse = localeWeekdaysParse;\n      proto$1.weekdaysRegex = weekdaysRegex;\n      proto$1.weekdaysShortRegex = weekdaysShortRegex;\n      proto$1.weekdaysMinRegex = weekdaysMinRegex;\n      proto$1.isPM = localeIsPM;\n      proto$1.meridiem = localeMeridiem;\n      function get$1(format2, index, field, setter) {\n        var locale2 = getLocale(), utc = createUTC().set(setter, index);\n        return locale2[field](utc, format2);\n      }\n      function listMonthsImpl(format2, index, field) {\n        if (isNumber(format2)) {\n          index = format2;\n          format2 = void 0;\n        }\n        format2 = format2 || \"\";\n        if (index != null) {\n          return get$1(format2, index, field, \"month\");\n        }\n        var i, out = [];\n        for (i = 0; i < 12; i++) {\n          out[i] = get$1(format2, i, field, \"month\");\n        }\n        return out;\n      }\n      function listWeekdaysImpl(localeSorted, format2, index, field) {\n        if (typeof localeSorted === \"boolean\") {\n          if (isNumber(format2)) {\n            index = format2;\n            format2 = void 0;\n          }\n          format2 = format2 || \"\";\n        } else {\n          format2 = localeSorted;\n          index = format2;\n          localeSorted = false;\n          if (isNumber(format2)) {\n            index = format2;\n            format2 = void 0;\n          }\n          format2 = format2 || \"\";\n        }\n        var locale2 = getLocale(), shift = localeSorted ? locale2._week.dow : 0, i, out = [];\n        if (index != null) {\n          return get$1(format2, (index + shift) % 7, field, \"day\");\n        }\n        for (i = 0; i < 7; i++) {\n          out[i] = get$1(format2, (i + shift) % 7, field, \"day\");\n        }\n        return out;\n      }\n      function listMonths(format2, index) {\n        return listMonthsImpl(format2, index, \"months\");\n      }\n      function listMonthsShort(format2, index) {\n        return listMonthsImpl(format2, index, \"monthsShort\");\n      }\n      function listWeekdays(localeSorted, format2, index) {\n        return listWeekdaysImpl(localeSorted, format2, index, \"weekdays\");\n      }\n      function listWeekdaysShort(localeSorted, format2, index) {\n        return listWeekdaysImpl(localeSorted, format2, index, \"weekdaysShort\");\n      }\n      function listWeekdaysMin(localeSorted, format2, index) {\n        return listWeekdaysImpl(localeSorted, format2, index, \"weekdaysMin\");\n      }\n      getSetGlobalLocale(\"en\", {\n        eras: [\n          {\n            since: \"0001-01-01\",\n            until: Infinity,\n            offset: 1,\n            name: \"Anno Domini\",\n            narrow: \"AD\",\n            abbr: \"AD\"\n          },\n          {\n            since: \"0000-12-31\",\n            until: -Infinity,\n            offset: 1,\n            name: \"Before Christ\",\n            narrow: \"BC\",\n            abbr: \"BC\"\n          }\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function(number) {\n          var b = number % 10, output = toInt(number % 100 / 10) === 1 ? \"th\" : b === 1 ? \"st\" : b === 2 ? \"nd\" : b === 3 ? \"rd\" : \"th\";\n          return number + output;\n        }\n      });\n      hooks.lang = deprecate(\n        \"moment.lang is deprecated. Use moment.locale instead.\",\n        getSetGlobalLocale\n      );\n      hooks.langData = deprecate(\n        \"moment.langData is deprecated. Use moment.localeData instead.\",\n        getLocale\n      );\n      var mathAbs = Math.abs;\n      function abs() {\n        var data = this._data;\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n        return this;\n      }\n      function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n        return duration._bubble();\n      }\n      function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n      }\n      function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n      }\n      function absCeil(number) {\n        if (number < 0) {\n          return Math.floor(number);\n        } else {\n          return Math.ceil(number);\n        }\n      }\n      function bubble() {\n        var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays;\n        if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) {\n          milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5;\n          days2 = 0;\n          months2 = 0;\n        }\n        data.milliseconds = milliseconds2 % 1e3;\n        seconds2 = absFloor(milliseconds2 / 1e3);\n        data.seconds = seconds2 % 60;\n        minutes2 = absFloor(seconds2 / 60);\n        data.minutes = minutes2 % 60;\n        hours2 = absFloor(minutes2 / 60);\n        data.hours = hours2 % 24;\n        days2 += absFloor(hours2 / 24);\n        monthsFromDays = absFloor(daysToMonths(days2));\n        months2 += monthsFromDays;\n        days2 -= absCeil(monthsToDays(monthsFromDays));\n        years2 = absFloor(months2 / 12);\n        months2 %= 12;\n        data.days = days2;\n        data.months = months2;\n        data.years = years2;\n        return this;\n      }\n      function daysToMonths(days2) {\n        return days2 * 4800 / 146097;\n      }\n      function monthsToDays(months2) {\n        return months2 * 146097 / 4800;\n      }\n      function as(units) {\n        if (!this.isValid()) {\n          return NaN;\n        }\n        var days2, months2, milliseconds2 = this._milliseconds;\n        units = normalizeUnits(units);\n        if (units === \"month\" || units === \"quarter\" || units === \"year\") {\n          days2 = this._days + milliseconds2 / 864e5;\n          months2 = this._months + daysToMonths(days2);\n          switch (units) {\n            case \"month\":\n              return months2;\n            case \"quarter\":\n              return months2 / 3;\n            case \"year\":\n              return months2 / 12;\n          }\n        } else {\n          days2 = this._days + Math.round(monthsToDays(this._months));\n          switch (units) {\n            case \"week\":\n              return days2 / 7 + milliseconds2 / 6048e5;\n            case \"day\":\n              return days2 + milliseconds2 / 864e5;\n            case \"hour\":\n              return days2 * 24 + milliseconds2 / 36e5;\n            case \"minute\":\n              return days2 * 1440 + milliseconds2 / 6e4;\n            case \"second\":\n              return days2 * 86400 + milliseconds2 / 1e3;\n            case \"millisecond\":\n              return Math.floor(days2 * 864e5) + milliseconds2;\n            default:\n              throw new Error(\"Unknown unit \" + units);\n          }\n        }\n      }\n      function valueOf$1() {\n        if (!this.isValid()) {\n          return NaN;\n        }\n        return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n      }\n      function makeAs(alias) {\n        return function() {\n          return this.as(alias);\n        };\n      }\n      var asMilliseconds = makeAs(\"ms\"), asSeconds = makeAs(\"s\"), asMinutes = makeAs(\"m\"), asHours = makeAs(\"h\"), asDays = makeAs(\"d\"), asWeeks = makeAs(\"w\"), asMonths = makeAs(\"M\"), asQuarters = makeAs(\"Q\"), asYears = makeAs(\"y\");\n      function clone$1() {\n        return createDuration(this);\n      }\n      function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + \"s\"]() : NaN;\n      }\n      function makeGetter(name) {\n        return function() {\n          return this.isValid() ? this._data[name] : NaN;\n        };\n      }\n      var milliseconds = makeGetter(\"milliseconds\"), seconds = makeGetter(\"seconds\"), minutes = makeGetter(\"minutes\"), hours = makeGetter(\"hours\"), days = makeGetter(\"days\"), months = makeGetter(\"months\"), years = makeGetter(\"years\");\n      function weeks() {\n        return absFloor(this.days() / 7);\n      }\n      var round = Math.round, thresholds = {\n        ss: 44,\n        // a few seconds to seconds\n        s: 45,\n        // seconds to minute\n        m: 45,\n        // minutes to hour\n        h: 22,\n        // hours to day\n        d: 26,\n        // days to month/week\n        w: null,\n        // weeks to month\n        M: 11\n        // months to year\n      };\n      function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale2) {\n        return locale2.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n      }\n      function relativeTime$1(posNegDuration, withoutSuffix, thresholds2, locale2) {\n        var duration = createDuration(posNegDuration).abs(), seconds2 = round(duration.as(\"s\")), minutes2 = round(duration.as(\"m\")), hours2 = round(duration.as(\"h\")), days2 = round(duration.as(\"d\")), months2 = round(duration.as(\"M\")), weeks2 = round(duration.as(\"w\")), years2 = round(duration.as(\"y\")), a = seconds2 <= thresholds2.ss && [\"s\", seconds2] || seconds2 < thresholds2.s && [\"ss\", seconds2] || minutes2 <= 1 && [\"m\"] || minutes2 < thresholds2.m && [\"mm\", minutes2] || hours2 <= 1 && [\"h\"] || hours2 < thresholds2.h && [\"hh\", hours2] || days2 <= 1 && [\"d\"] || days2 < thresholds2.d && [\"dd\", days2];\n        if (thresholds2.w != null) {\n          a = a || weeks2 <= 1 && [\"w\"] || weeks2 < thresholds2.w && [\"ww\", weeks2];\n        }\n        a = a || months2 <= 1 && [\"M\"] || months2 < thresholds2.M && [\"MM\", months2] || years2 <= 1 && [\"y\"] || [\"yy\", years2];\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale2;\n        return substituteTimeAgo.apply(null, a);\n      }\n      function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === void 0) {\n          return round;\n        }\n        if (typeof roundingFunction === \"function\") {\n          round = roundingFunction;\n          return true;\n        }\n        return false;\n      }\n      function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === void 0) {\n          return false;\n        }\n        if (limit === void 0) {\n          return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === \"s\") {\n          thresholds.ss = limit - 1;\n        }\n        return true;\n      }\n      function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n          return this.localeData().invalidDate();\n        }\n        var withSuffix = false, th = thresholds, locale2, output;\n        if (typeof argWithSuffix === \"object\") {\n          argThresholds = argWithSuffix;\n          argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === \"boolean\") {\n          withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === \"object\") {\n          th = Object.assign({}, thresholds, argThresholds);\n          if (argThresholds.s != null && argThresholds.ss == null) {\n            th.ss = argThresholds.s - 1;\n          }\n        }\n        locale2 = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale2);\n        if (withSuffix) {\n          output = locale2.pastFuture(+this, output);\n        }\n        return locale2.postformat(output);\n      }\n      var abs$1 = Math.abs;\n      function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n      }\n      function toISOString$1() {\n        if (!this.isValid()) {\n          return this.localeData().invalidDate();\n        }\n        var seconds2 = abs$1(this._milliseconds) / 1e3, days2 = abs$1(this._days), months2 = abs$1(this._months), minutes2, hours2, years2, s, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;\n        if (!total) {\n          return \"P0D\";\n        }\n        minutes2 = absFloor(seconds2 / 60);\n        hours2 = absFloor(minutes2 / 60);\n        seconds2 %= 60;\n        minutes2 %= 60;\n        years2 = absFloor(months2 / 12);\n        months2 %= 12;\n        s = seconds2 ? seconds2.toFixed(3).replace(/\\.?0+$/, \"\") : \"\";\n        totalSign = total < 0 ? \"-\" : \"\";\n        ymSign = sign(this._months) !== sign(total) ? \"-\" : \"\";\n        daysSign = sign(this._days) !== sign(total) ? \"-\" : \"\";\n        hmsSign = sign(this._milliseconds) !== sign(total) ? \"-\" : \"\";\n        return totalSign + \"P\" + (years2 ? ymSign + years2 + \"Y\" : \"\") + (months2 ? ymSign + months2 + \"M\" : \"\") + (days2 ? daysSign + days2 + \"D\" : \"\") + (hours2 || minutes2 || seconds2 ? \"T\" : \"\") + (hours2 ? hmsSign + hours2 + \"H\" : \"\") + (minutes2 ? hmsSign + minutes2 + \"M\" : \"\") + (seconds2 ? hmsSign + s + \"S\" : \"\");\n      }\n      var proto$2 = Duration.prototype;\n      proto$2.isValid = isValid$1;\n      proto$2.abs = abs;\n      proto$2.add = add$1;\n      proto$2.subtract = subtract$1;\n      proto$2.as = as;\n      proto$2.asMilliseconds = asMilliseconds;\n      proto$2.asSeconds = asSeconds;\n      proto$2.asMinutes = asMinutes;\n      proto$2.asHours = asHours;\n      proto$2.asDays = asDays;\n      proto$2.asWeeks = asWeeks;\n      proto$2.asMonths = asMonths;\n      proto$2.asQuarters = asQuarters;\n      proto$2.asYears = asYears;\n      proto$2.valueOf = valueOf$1;\n      proto$2._bubble = bubble;\n      proto$2.clone = clone$1;\n      proto$2.get = get$2;\n      proto$2.milliseconds = milliseconds;\n      proto$2.seconds = seconds;\n      proto$2.minutes = minutes;\n      proto$2.hours = hours;\n      proto$2.days = days;\n      proto$2.weeks = weeks;\n      proto$2.months = months;\n      proto$2.years = years;\n      proto$2.humanize = humanize;\n      proto$2.toISOString = toISOString$1;\n      proto$2.toString = toISOString$1;\n      proto$2.toJSON = toISOString$1;\n      proto$2.locale = locale;\n      proto$2.localeData = localeData;\n      proto$2.toIsoString = deprecate(\n        \"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",\n        toISOString$1\n      );\n      proto$2.lang = lang;\n      addFormatToken(\"X\", 0, 0, \"unix\");\n      addFormatToken(\"x\", 0, 0, \"valueOf\");\n      addRegexToken(\"x\", matchSigned);\n      addRegexToken(\"X\", matchTimestamp);\n      addParseToken(\"X\", function(input, array, config) {\n        config._d = new Date(parseFloat(input) * 1e3);\n      });\n      addParseToken(\"x\", function(input, array, config) {\n        config._d = new Date(toInt(input));\n      });\n      hooks.version = \"2.29.1\";\n      setHookCallback(createLocal);\n      hooks.fn = proto;\n      hooks.min = min;\n      hooks.max = max;\n      hooks.now = now;\n      hooks.utc = createUTC;\n      hooks.unix = createUnix;\n      hooks.months = listMonths;\n      hooks.isDate = isDate;\n      hooks.locale = getSetGlobalLocale;\n      hooks.invalid = createInvalid;\n      hooks.duration = createDuration;\n      hooks.isMoment = isMoment;\n      hooks.weekdays = listWeekdays;\n      hooks.parseZone = createInZone;\n      hooks.localeData = getLocale;\n      hooks.isDuration = isDuration;\n      hooks.monthsShort = listMonthsShort;\n      hooks.weekdaysMin = listWeekdaysMin;\n      hooks.defineLocale = defineLocale;\n      hooks.updateLocale = updateLocale;\n      hooks.locales = listLocales;\n      hooks.weekdaysShort = listWeekdaysShort;\n      hooks.normalizeUnits = normalizeUnits;\n      hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n      hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n      hooks.calendarFormat = getCalendarFormat;\n      hooks.prototype = proto;\n      hooks.HTML5_FMT = {\n        DATETIME_LOCAL: \"YYYY-MM-DDTHH:mm\",\n        // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: \"YYYY-MM-DDTHH:mm:ss\",\n        // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: \"YYYY-MM-DDTHH:mm:ss.SSS\",\n        // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: \"YYYY-MM-DD\",\n        // <input type=\"date\" />\n        TIME: \"HH:mm\",\n        // <input type=\"time\" />\n        TIME_SECONDS: \"HH:mm:ss\",\n        // <input type=\"time\" step=\"1\" />\n        TIME_MS: \"HH:mm:ss.SSS\",\n        // <input type=\"time\" step=\"0.001\" />\n        WEEK: \"GGGG-[W]WW\",\n        // <input type=\"week\" />\n        MONTH: \"YYYY-MM\"\n        // <input type=\"month\" />\n      };\n      return hooks;\n    });\n  }\n});\n\n// node_modules/daterangepicker/daterangepicker.js\nvar require_daterangepicker = __commonJS({\n  \"node_modules/daterangepicker/daterangepicker.js\"(exports, module) {\n    (function(root, factory) {\n      if (typeof define === \"function\" && define.amd) {\n        define([\"moment\", \"jquery\"], function(moment2, jquery) {\n          if (!jquery.fn)\n            jquery.fn = {};\n          if (typeof moment2 !== \"function\" && moment2.hasOwnProperty(\"default\"))\n            moment2 = moment2[\"default\"];\n          return factory(moment2, jquery);\n        });\n      } else if (typeof module === \"object\" && module.exports) {\n        var jQuery = typeof window != \"undefined\" ? window.jQuery : void 0;\n        if (!jQuery) {\n          jQuery = require_jquery();\n          if (!jQuery.fn)\n            jQuery.fn = {};\n        }\n        var moment = typeof window != \"undefined\" && typeof window.moment != \"undefined\" ? window.moment : require_moment();\n        module.exports = factory(moment, jQuery);\n      } else {\n        root.daterangepicker = factory(root.moment, root.jQuery);\n      }\n    })(exports, function(moment, $) {\n      var DateRangePicker = function(element, options, cb) {\n        this.parentEl = \"body\";\n        this.element = $(element);\n        this.startDate = moment().startOf(\"day\");\n        this.endDate = moment().endOf(\"day\");\n        this.minDate = false;\n        this.maxDate = false;\n        this.maxSpan = false;\n        this.autoApply = false;\n        this.singleDatePicker = false;\n        this.showDropdowns = false;\n        this.minYear = moment().subtract(100, \"year\").format(\"YYYY\");\n        this.maxYear = moment().add(100, \"year\").format(\"YYYY\");\n        this.showWeekNumbers = false;\n        this.showISOWeekNumbers = false;\n        this.showCustomRangeLabel = true;\n        this.timePicker = false;\n        this.timePicker24Hour = false;\n        this.timePickerIncrement = 1;\n        this.timePickerSeconds = false;\n        this.linkedCalendars = true;\n        this.autoUpdateInput = true;\n        this.alwaysShowCalendars = false;\n        this.ranges = {};\n        this.opens = \"right\";\n        if (this.element.hasClass(\"pull-right\"))\n          this.opens = \"left\";\n        this.drops = \"down\";\n        if (this.element.hasClass(\"dropup\"))\n          this.drops = \"up\";\n        this.buttonClasses = \"btn btn-sm\";\n        this.applyButtonClasses = \"btn-primary\";\n        this.cancelButtonClasses = \"btn-default\";\n        this.locale = {\n          direction: \"ltr\",\n          format: moment.localeData().longDateFormat(\"L\"),\n          separator: \" - \",\n          applyLabel: \"Apply\",\n          cancelLabel: \"Cancel\",\n          weekLabel: \"W\",\n          customRangeLabel: \"Custom Range\",\n          daysOfWeek: moment.weekdaysMin(),\n          monthNames: moment.monthsShort(),\n          firstDay: moment.localeData().firstDayOfWeek()\n        };\n        this.callback = function() {\n        };\n        this.isShowing = false;\n        this.leftCalendar = {};\n        this.rightCalendar = {};\n        if (typeof options !== \"object\" || options === null)\n          options = {};\n        options = $.extend(this.element.data(), options);\n        if (typeof options.template !== \"string\" && !(options.template instanceof $))\n          options.template = '<div class=\"daterangepicker\"><div class=\"ranges\"></div><div class=\"drp-calendar left\"><div class=\"calendar-table\"></div><div class=\"calendar-time\"></div></div><div class=\"drp-calendar right\"><div class=\"calendar-table\"></div><div class=\"calendar-time\"></div></div><div class=\"drp-buttons\"><span class=\"drp-selected\"></span><button class=\"cancelBtn\" type=\"button\"></button><button class=\"applyBtn\" disabled=\"disabled\" type=\"button\"></button> </div></div>';\n        this.parentEl = options.parentEl && $(options.parentEl).length ? $(options.parentEl) : $(this.parentEl);\n        this.container = $(options.template).appendTo(this.parentEl);\n        if (typeof options.locale === \"object\") {\n          if (typeof options.locale.direction === \"string\")\n            this.locale.direction = options.locale.direction;\n          if (typeof options.locale.format === \"string\")\n            this.locale.format = options.locale.format;\n          if (typeof options.locale.separator === \"string\")\n            this.locale.separator = options.locale.separator;\n          if (typeof options.locale.daysOfWeek === \"object\")\n            this.locale.daysOfWeek = options.locale.daysOfWeek.slice();\n          if (typeof options.locale.monthNames === \"object\")\n            this.locale.monthNames = options.locale.monthNames.slice();\n          if (typeof options.locale.firstDay === \"number\")\n            this.locale.firstDay = options.locale.firstDay;\n          if (typeof options.locale.applyLabel === \"string\")\n            this.locale.applyLabel = options.locale.applyLabel;\n          if (typeof options.locale.cancelLabel === \"string\")\n            this.locale.cancelLabel = options.locale.cancelLabel;\n          if (typeof options.locale.weekLabel === \"string\")\n            this.locale.weekLabel = options.locale.weekLabel;\n          if (typeof options.locale.customRangeLabel === \"string\") {\n            var elem = document.createElement(\"textarea\");\n            elem.innerHTML = options.locale.customRangeLabel;\n            var rangeHtml = elem.value;\n            this.locale.customRangeLabel = rangeHtml;\n          }\n        }\n        this.container.addClass(this.locale.direction);\n        if (typeof options.startDate === \"string\")\n          this.startDate = moment(options.startDate, this.locale.format);\n        if (typeof options.endDate === \"string\")\n          this.endDate = moment(options.endDate, this.locale.format);\n        if (typeof options.minDate === \"string\")\n          this.minDate = moment(options.minDate, this.locale.format);\n        if (typeof options.maxDate === \"string\")\n          this.maxDate = moment(options.maxDate, this.locale.format);\n        if (typeof options.startDate === \"object\")\n          this.startDate = moment(options.startDate);\n        if (typeof options.endDate === \"object\")\n          this.endDate = moment(options.endDate);\n        if (typeof options.minDate === \"object\")\n          this.minDate = moment(options.minDate);\n        if (typeof options.maxDate === \"object\")\n          this.maxDate = moment(options.maxDate);\n        if (this.minDate && this.startDate.isBefore(this.minDate))\n          this.startDate = this.minDate.clone();\n        if (this.maxDate && this.endDate.isAfter(this.maxDate))\n          this.endDate = this.maxDate.clone();\n        if (typeof options.applyButtonClasses === \"string\")\n          this.applyButtonClasses = options.applyButtonClasses;\n        if (typeof options.applyClass === \"string\")\n          this.applyButtonClasses = options.applyClass;\n        if (typeof options.cancelButtonClasses === \"string\")\n          this.cancelButtonClasses = options.cancelButtonClasses;\n        if (typeof options.cancelClass === \"string\")\n          this.cancelButtonClasses = options.cancelClass;\n        if (typeof options.maxSpan === \"object\")\n          this.maxSpan = options.maxSpan;\n        if (typeof options.dateLimit === \"object\")\n          this.maxSpan = options.dateLimit;\n        if (typeof options.opens === \"string\")\n          this.opens = options.opens;\n        if (typeof options.drops === \"string\")\n          this.drops = options.drops;\n        if (typeof options.showWeekNumbers === \"boolean\")\n          this.showWeekNumbers = options.showWeekNumbers;\n        if (typeof options.showISOWeekNumbers === \"boolean\")\n          this.showISOWeekNumbers = options.showISOWeekNumbers;\n        if (typeof options.buttonClasses === \"string\")\n          this.buttonClasses = options.buttonClasses;\n        if (typeof options.buttonClasses === \"object\")\n          this.buttonClasses = options.buttonClasses.join(\" \");\n        if (typeof options.showDropdowns === \"boolean\")\n          this.showDropdowns = options.showDropdowns;\n        if (typeof options.minYear === \"number\")\n          this.minYear = options.minYear;\n        if (typeof options.maxYear === \"number\")\n          this.maxYear = options.maxYear;\n        if (typeof options.showCustomRangeLabel === \"boolean\")\n          this.showCustomRangeLabel = options.showCustomRangeLabel;\n        if (typeof options.singleDatePicker === \"boolean\") {\n          this.singleDatePicker = options.singleDatePicker;\n          if (this.singleDatePicker)\n            this.endDate = this.startDate.clone();\n        }\n        if (typeof options.timePicker === \"boolean\")\n          this.timePicker = options.timePicker;\n        if (typeof options.timePickerSeconds === \"boolean\")\n          this.timePickerSeconds = options.timePickerSeconds;\n        if (typeof options.timePickerIncrement === \"number\")\n          this.timePickerIncrement = options.timePickerIncrement;\n        if (typeof options.timePicker24Hour === \"boolean\")\n          this.timePicker24Hour = options.timePicker24Hour;\n        if (typeof options.autoApply === \"boolean\")\n          this.autoApply = options.autoApply;\n        if (typeof options.autoUpdateInput === \"boolean\")\n          this.autoUpdateInput = options.autoUpdateInput;\n        if (typeof options.linkedCalendars === \"boolean\")\n          this.linkedCalendars = options.linkedCalendars;\n        if (typeof options.isInvalidDate === \"function\")\n          this.isInvalidDate = options.isInvalidDate;\n        if (typeof options.isCustomDate === \"function\")\n          this.isCustomDate = options.isCustomDate;\n        if (typeof options.alwaysShowCalendars === \"boolean\")\n          this.alwaysShowCalendars = options.alwaysShowCalendars;\n        if (this.locale.firstDay != 0) {\n          var iterator = this.locale.firstDay;\n          while (iterator > 0) {\n            this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());\n            iterator--;\n          }\n        }\n        var start, end, range;\n        if (typeof options.startDate === \"undefined\" && typeof options.endDate === \"undefined\") {\n          if ($(this.element).is(\":text\")) {\n            var val = $(this.element).val(), split = val.split(this.locale.separator);\n            start = end = null;\n            if (split.length == 2) {\n              start = moment(split[0], this.locale.format);\n              end = moment(split[1], this.locale.format);\n            } else if (this.singleDatePicker && val !== \"\") {\n              start = moment(val, this.locale.format);\n              end = moment(val, this.locale.format);\n            }\n            if (start !== null && end !== null) {\n              this.setStartDate(start);\n              this.setEndDate(end);\n            }\n          }\n        }\n        if (typeof options.ranges === \"object\") {\n          for (range in options.ranges) {\n            if (typeof options.ranges[range][0] === \"string\")\n              start = moment(options.ranges[range][0], this.locale.format);\n            else\n              start = moment(options.ranges[range][0]);\n            if (typeof options.ranges[range][1] === \"string\")\n              end = moment(options.ranges[range][1], this.locale.format);\n            else\n              end = moment(options.ranges[range][1]);\n            if (this.minDate && start.isBefore(this.minDate))\n              start = this.minDate.clone();\n            var maxDate = this.maxDate;\n            if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))\n              maxDate = start.clone().add(this.maxSpan);\n            if (maxDate && end.isAfter(maxDate))\n              end = maxDate.clone();\n            if (this.minDate && end.isBefore(this.minDate, this.timepicker ? \"minute\" : \"day\") || maxDate && start.isAfter(maxDate, this.timepicker ? \"minute\" : \"day\"))\n              continue;\n            var elem = document.createElement(\"textarea\");\n            elem.innerHTML = range;\n            var rangeHtml = elem.value;\n            this.ranges[rangeHtml] = [start, end];\n          }\n          var list = \"<ul>\";\n          for (range in this.ranges) {\n            list += '<li data-range-key=\"' + range + '\">' + range + \"</li>\";\n          }\n          if (this.showCustomRangeLabel) {\n            list += '<li data-range-key=\"' + this.locale.customRangeLabel + '\">' + this.locale.customRangeLabel + \"</li>\";\n          }\n          list += \"</ul>\";\n          this.container.find(\".ranges\").prepend(list);\n        }\n        if (typeof cb === \"function\") {\n          this.callback = cb;\n        }\n        if (!this.timePicker) {\n          this.startDate = this.startDate.startOf(\"day\");\n          this.endDate = this.endDate.endOf(\"day\");\n          this.container.find(\".calendar-time\").hide();\n        }\n        if (this.timePicker && this.autoApply)\n          this.autoApply = false;\n        if (this.autoApply) {\n          this.container.addClass(\"auto-apply\");\n        }\n        if (typeof options.ranges === \"object\")\n          this.container.addClass(\"show-ranges\");\n        if (this.singleDatePicker) {\n          this.container.addClass(\"single\");\n          this.container.find(\".drp-calendar.left\").addClass(\"single\");\n          this.container.find(\".drp-calendar.left\").show();\n          this.container.find(\".drp-calendar.right\").hide();\n          if (!this.timePicker && this.autoApply) {\n            this.container.addClass(\"auto-apply\");\n          }\n        }\n        if (typeof options.ranges === \"undefined\" && !this.singleDatePicker || this.alwaysShowCalendars) {\n          this.container.addClass(\"show-calendar\");\n        }\n        this.container.addClass(\"opens\" + this.opens);\n        this.container.find(\".applyBtn, .cancelBtn\").addClass(this.buttonClasses);\n        if (this.applyButtonClasses.length)\n          this.container.find(\".applyBtn\").addClass(this.applyButtonClasses);\n        if (this.cancelButtonClasses.length)\n          this.container.find(\".cancelBtn\").addClass(this.cancelButtonClasses);\n        this.container.find(\".applyBtn\").html(this.locale.applyLabel);\n        this.container.find(\".cancelBtn\").html(this.locale.cancelLabel);\n        this.container.find(\".drp-calendar\").on(\"click.daterangepicker\", \".prev\", $.proxy(this.clickPrev, this)).on(\"click.daterangepicker\", \".next\", $.proxy(this.clickNext, this)).on(\"mousedown.daterangepicker\", \"td.available\", $.proxy(this.clickDate, this)).on(\"mouseenter.daterangepicker\", \"td.available\", $.proxy(this.hoverDate, this)).on(\"change.daterangepicker\", \"select.yearselect\", $.proxy(this.monthOrYearChanged, this)).on(\"change.daterangepicker\", \"select.monthselect\", $.proxy(this.monthOrYearChanged, this)).on(\"change.daterangepicker\", \"select.hourselect,select.minuteselect,select.secondselect,select.ampmselect\", $.proxy(this.timeChanged, this));\n        this.container.find(\".ranges\").on(\"click.daterangepicker\", \"li\", $.proxy(this.clickRange, this));\n        this.container.find(\".drp-buttons\").on(\"click.daterangepicker\", \"button.applyBtn\", $.proxy(this.clickApply, this)).on(\"click.daterangepicker\", \"button.cancelBtn\", $.proxy(this.clickCancel, this));\n        if (this.element.is(\"input\") || this.element.is(\"button\")) {\n          this.element.on({\n            \"click.daterangepicker\": $.proxy(this.show, this),\n            \"focus.daterangepicker\": $.proxy(this.show, this),\n            \"keyup.daterangepicker\": $.proxy(this.elementChanged, this),\n            \"keydown.daterangepicker\": $.proxy(this.keydown, this)\n            //IE 11 compatibility\n          });\n        } else {\n          this.element.on(\"click.daterangepicker\", $.proxy(this.toggle, this));\n          this.element.on(\"keydown.daterangepicker\", $.proxy(this.toggle, this));\n        }\n        this.updateElement();\n      };\n      DateRangePicker.prototype = {\n        constructor: DateRangePicker,\n        setStartDate: function(startDate) {\n          if (typeof startDate === \"string\")\n            this.startDate = moment(startDate, this.locale.format);\n          if (typeof startDate === \"object\")\n            this.startDate = moment(startDate);\n          if (!this.timePicker)\n            this.startDate = this.startDate.startOf(\"day\");\n          if (this.timePicker && this.timePickerIncrement)\n            this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n          if (this.minDate && this.startDate.isBefore(this.minDate)) {\n            this.startDate = this.minDate.clone();\n            if (this.timePicker && this.timePickerIncrement)\n              this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n          }\n          if (this.maxDate && this.startDate.isAfter(this.maxDate)) {\n            this.startDate = this.maxDate.clone();\n            if (this.timePicker && this.timePickerIncrement)\n              this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n          }\n          if (!this.isShowing)\n            this.updateElement();\n          this.updateMonthsInView();\n        },\n        setEndDate: function(endDate) {\n          if (typeof endDate === \"string\")\n            this.endDate = moment(endDate, this.locale.format);\n          if (typeof endDate === \"object\")\n            this.endDate = moment(endDate);\n          if (!this.timePicker)\n            this.endDate = this.endDate.endOf(\"day\");\n          if (this.timePicker && this.timePickerIncrement)\n            this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);\n          if (this.endDate.isBefore(this.startDate))\n            this.endDate = this.startDate.clone();\n          if (this.maxDate && this.endDate.isAfter(this.maxDate))\n            this.endDate = this.maxDate.clone();\n          if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))\n            this.endDate = this.startDate.clone().add(this.maxSpan);\n          this.previousRightTime = this.endDate.clone();\n          this.container.find(\".drp-selected\").html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n          if (!this.isShowing)\n            this.updateElement();\n          this.updateMonthsInView();\n        },\n        isInvalidDate: function() {\n          return false;\n        },\n        isCustomDate: function() {\n          return false;\n        },\n        updateView: function() {\n          if (this.timePicker) {\n            this.renderTimePicker(\"left\");\n            this.renderTimePicker(\"right\");\n            if (!this.endDate) {\n              this.container.find(\".right .calendar-time select\").prop(\"disabled\", true).addClass(\"disabled\");\n            } else {\n              this.container.find(\".right .calendar-time select\").prop(\"disabled\", false).removeClass(\"disabled\");\n            }\n          }\n          if (this.endDate)\n            this.container.find(\".drp-selected\").html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));\n          this.updateMonthsInView();\n          this.updateCalendars();\n          this.updateFormInputs();\n        },\n        updateMonthsInView: function() {\n          if (this.endDate) {\n            if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && (this.startDate.format(\"YYYY-MM\") == this.leftCalendar.month.format(\"YYYY-MM\") || this.startDate.format(\"YYYY-MM\") == this.rightCalendar.month.format(\"YYYY-MM\")) && (this.endDate.format(\"YYYY-MM\") == this.leftCalendar.month.format(\"YYYY-MM\") || this.endDate.format(\"YYYY-MM\") == this.rightCalendar.month.format(\"YYYY-MM\"))) {\n              return;\n            }\n            this.leftCalendar.month = this.startDate.clone().date(2);\n            if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {\n              this.rightCalendar.month = this.endDate.clone().date(2);\n            } else {\n              this.rightCalendar.month = this.startDate.clone().date(2).add(1, \"month\");\n            }\n          } else {\n            if (this.leftCalendar.month.format(\"YYYY-MM\") != this.startDate.format(\"YYYY-MM\") && this.rightCalendar.month.format(\"YYYY-MM\") != this.startDate.format(\"YYYY-MM\")) {\n              this.leftCalendar.month = this.startDate.clone().date(2);\n              this.rightCalendar.month = this.startDate.clone().date(2).add(1, \"month\");\n            }\n          }\n          if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {\n            this.rightCalendar.month = this.maxDate.clone().date(2);\n            this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, \"month\");\n          }\n        },\n        updateCalendars: function() {\n          if (this.timePicker) {\n            var hour, minute, second;\n            if (this.endDate) {\n              hour = parseInt(this.container.find(\".left .hourselect\").val(), 10);\n              minute = parseInt(this.container.find(\".left .minuteselect\").val(), 10);\n              if (isNaN(minute)) {\n                minute = parseInt(this.container.find(\".left .minuteselect option:last\").val(), 10);\n              }\n              second = this.timePickerSeconds ? parseInt(this.container.find(\".left .secondselect\").val(), 10) : 0;\n              if (!this.timePicker24Hour) {\n                var ampm = this.container.find(\".left .ampmselect\").val();\n                if (ampm === \"PM\" && hour < 12)\n                  hour += 12;\n                if (ampm === \"AM\" && hour === 12)\n                  hour = 0;\n              }\n            } else {\n              hour = parseInt(this.container.find(\".right .hourselect\").val(), 10);\n              minute = parseInt(this.container.find(\".right .minuteselect\").val(), 10);\n              if (isNaN(minute)) {\n                minute = parseInt(this.container.find(\".right .minuteselect option:last\").val(), 10);\n              }\n              second = this.timePickerSeconds ? parseInt(this.container.find(\".right .secondselect\").val(), 10) : 0;\n              if (!this.timePicker24Hour) {\n                var ampm = this.container.find(\".right .ampmselect\").val();\n                if (ampm === \"PM\" && hour < 12)\n                  hour += 12;\n                if (ampm === \"AM\" && hour === 12)\n                  hour = 0;\n              }\n            }\n            this.leftCalendar.month.hour(hour).minute(minute).second(second);\n            this.rightCalendar.month.hour(hour).minute(minute).second(second);\n          }\n          this.renderCalendar(\"left\");\n          this.renderCalendar(\"right\");\n          this.container.find(\".ranges li\").removeClass(\"active\");\n          if (this.endDate == null)\n            return;\n          this.calculateChosenLabel();\n        },\n        renderCalendar: function(side) {\n          var calendar = side == \"left\" ? this.leftCalendar : this.rightCalendar;\n          var month = calendar.month.month();\n          var year = calendar.month.year();\n          var hour = calendar.month.hour();\n          var minute = calendar.month.minute();\n          var second = calendar.month.second();\n          var daysInMonth = moment([year, month]).daysInMonth();\n          var firstDay = moment([year, month, 1]);\n          var lastDay = moment([year, month, daysInMonth]);\n          var lastMonth = moment(firstDay).subtract(1, \"month\").month();\n          var lastYear = moment(firstDay).subtract(1, \"month\").year();\n          var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();\n          var dayOfWeek = firstDay.day();\n          var calendar = [];\n          calendar.firstDay = firstDay;\n          calendar.lastDay = lastDay;\n          for (var i = 0; i < 6; i++) {\n            calendar[i] = [];\n          }\n          var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;\n          if (startDay > daysInLastMonth)\n            startDay -= 7;\n          if (dayOfWeek == this.locale.firstDay)\n            startDay = daysInLastMonth - 6;\n          var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);\n          var col, row;\n          for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, \"hour\")) {\n            if (i > 0 && col % 7 === 0) {\n              col = 0;\n              row++;\n            }\n            calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);\n            curDate.hour(12);\n            if (this.minDate && calendar[row][col].format(\"YYYY-MM-DD\") == this.minDate.format(\"YYYY-MM-DD\") && calendar[row][col].isBefore(this.minDate) && side == \"left\") {\n              calendar[row][col] = this.minDate.clone();\n            }\n            if (this.maxDate && calendar[row][col].format(\"YYYY-MM-DD\") == this.maxDate.format(\"YYYY-MM-DD\") && calendar[row][col].isAfter(this.maxDate) && side == \"right\") {\n              calendar[row][col] = this.maxDate.clone();\n            }\n          }\n          if (side == \"left\") {\n            this.leftCalendar.calendar = calendar;\n          } else {\n            this.rightCalendar.calendar = calendar;\n          }\n          var minDate = side == \"left\" ? this.minDate : this.startDate;\n          var maxDate = this.maxDate;\n          var selected = side == \"left\" ? this.startDate : this.endDate;\n          var arrow = this.locale.direction == \"ltr\" ? { left: \"chevron-left\", right: \"chevron-right\" } : { left: \"chevron-right\", right: \"chevron-left\" };\n          var html = '<table class=\"table-condensed\">';\n          html += \"<thead>\";\n          html += \"<tr>\";\n          if (this.showWeekNumbers || this.showISOWeekNumbers)\n            html += \"<th></th>\";\n          if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == \"left\")) {\n            html += '<th class=\"prev available\"><span></span></th>';\n          } else {\n            html += \"<th></th>\";\n          }\n          var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(\" YYYY\");\n          if (this.showDropdowns) {\n            var currentMonth = calendar[1][1].month();\n            var currentYear = calendar[1][1].year();\n            var maxYear = maxDate && maxDate.year() || this.maxYear;\n            var minYear = minDate && minDate.year() || this.minYear;\n            var inMinYear = currentYear == minYear;\n            var inMaxYear = currentYear == maxYear;\n            var monthHtml = '<select class=\"monthselect\">';\n            for (var m = 0; m < 12; m++) {\n              if ((!inMinYear || minDate && m >= minDate.month()) && (!inMaxYear || maxDate && m <= maxDate.month())) {\n                monthHtml += \"<option value='\" + m + \"'\" + (m === currentMonth ? \" selected='selected'\" : \"\") + \">\" + this.locale.monthNames[m] + \"</option>\";\n              } else {\n                monthHtml += \"<option value='\" + m + \"'\" + (m === currentMonth ? \" selected='selected'\" : \"\") + \" disabled='disabled'>\" + this.locale.monthNames[m] + \"</option>\";\n              }\n            }\n            monthHtml += \"</select>\";\n            var yearHtml = '<select class=\"yearselect\">';\n            for (var y = minYear; y <= maxYear; y++) {\n              yearHtml += '<option value=\"' + y + '\"' + (y === currentYear ? ' selected=\"selected\"' : \"\") + \">\" + y + \"</option>\";\n            }\n            yearHtml += \"</select>\";\n            dateHtml = monthHtml + yearHtml;\n          }\n          html += '<th colspan=\"5\" class=\"month\">' + dateHtml + \"</th>\";\n          if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == \"right\" || this.singleDatePicker)) {\n            html += '<th class=\"next available\"><span></span></th>';\n          } else {\n            html += \"<th></th>\";\n          }\n          html += \"</tr>\";\n          html += \"<tr>\";\n          if (this.showWeekNumbers || this.showISOWeekNumbers)\n            html += '<th class=\"week\">' + this.locale.weekLabel + \"</th>\";\n          $.each(this.locale.daysOfWeek, function(index, dayOfWeek2) {\n            html += \"<th>\" + dayOfWeek2 + \"</th>\";\n          });\n          html += \"</tr>\";\n          html += \"</thead>\";\n          html += \"<tbody>\";\n          if (this.endDate == null && this.maxSpan) {\n            var maxLimit = this.startDate.clone().add(this.maxSpan).endOf(\"day\");\n            if (!maxDate || maxLimit.isBefore(maxDate)) {\n              maxDate = maxLimit;\n            }\n          }\n          for (var row = 0; row < 6; row++) {\n            html += \"<tr>\";\n            if (this.showWeekNumbers)\n              html += '<td class=\"week\">' + calendar[row][0].week() + \"</td>\";\n            else if (this.showISOWeekNumbers)\n              html += '<td class=\"week\">' + calendar[row][0].isoWeek() + \"</td>\";\n            for (var col = 0; col < 7; col++) {\n              var classes = [];\n              if (calendar[row][col].isSame(/* @__PURE__ */ new Date(), \"day\"))\n                classes.push(\"today\");\n              if (calendar[row][col].isoWeekday() > 5)\n                classes.push(\"weekend\");\n              if (calendar[row][col].month() != calendar[1][1].month())\n                classes.push(\"off\", \"ends\");\n              if (this.minDate && calendar[row][col].isBefore(this.minDate, \"day\"))\n                classes.push(\"off\", \"disabled\");\n              if (maxDate && calendar[row][col].isAfter(maxDate, \"day\"))\n                classes.push(\"off\", \"disabled\");\n              if (this.isInvalidDate(calendar[row][col]))\n                classes.push(\"off\", \"disabled\");\n              if (calendar[row][col].format(\"YYYY-MM-DD\") == this.startDate.format(\"YYYY-MM-DD\"))\n                classes.push(\"active\", \"start-date\");\n              if (this.endDate != null && calendar[row][col].format(\"YYYY-MM-DD\") == this.endDate.format(\"YYYY-MM-DD\"))\n                classes.push(\"active\", \"end-date\");\n              if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)\n                classes.push(\"in-range\");\n              var isCustom = this.isCustomDate(calendar[row][col]);\n              if (isCustom !== false) {\n                if (typeof isCustom === \"string\")\n                  classes.push(isCustom);\n                else\n                  Array.prototype.push.apply(classes, isCustom);\n              }\n              var cname = \"\", disabled = false;\n              for (var i = 0; i < classes.length; i++) {\n                cname += classes[i] + \" \";\n                if (classes[i] == \"disabled\")\n                  disabled = true;\n              }\n              if (!disabled)\n                cname += \"available\";\n              html += '<td class=\"' + cname.replace(/^\\s+|\\s+$/g, \"\") + '\" data-title=\"r' + row + \"c\" + col + '\">' + calendar[row][col].date() + \"</td>\";\n            }\n            html += \"</tr>\";\n          }\n          html += \"</tbody>\";\n          html += \"</table>\";\n          this.container.find(\".drp-calendar.\" + side + \" .calendar-table\").html(html);\n        },\n        renderTimePicker: function(side) {\n          if (side == \"right\" && !this.endDate)\n            return;\n          var html, selected, minDate, maxDate = this.maxDate;\n          if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))\n            maxDate = this.startDate.clone().add(this.maxSpan);\n          if (side == \"left\") {\n            selected = this.startDate.clone();\n            minDate = this.minDate;\n          } else if (side == \"right\") {\n            selected = this.endDate.clone();\n            minDate = this.startDate;\n            var timeSelector = this.container.find(\".drp-calendar.right .calendar-time\");\n            if (timeSelector.html() != \"\") {\n              selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find(\".hourselect option:selected\").val());\n              selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find(\".minuteselect option:selected\").val());\n              selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find(\".secondselect option:selected\").val());\n              if (!this.timePicker24Hour) {\n                var ampm = timeSelector.find(\".ampmselect option:selected\").val();\n                if (ampm === \"PM\" && selected.hour() < 12)\n                  selected.hour(selected.hour() + 12);\n                if (ampm === \"AM\" && selected.hour() === 12)\n                  selected.hour(0);\n              }\n            }\n            if (selected.isBefore(this.startDate))\n              selected = this.startDate.clone();\n            if (maxDate && selected.isAfter(maxDate))\n              selected = maxDate.clone();\n          }\n          html = '<select class=\"hourselect\">';\n          var start = this.timePicker24Hour ? 0 : 1;\n          var end = this.timePicker24Hour ? 23 : 12;\n          for (var i = start; i <= end; i++) {\n            var i_in_24 = i;\n            if (!this.timePicker24Hour)\n              i_in_24 = selected.hour() >= 12 ? i == 12 ? 12 : i + 12 : i == 12 ? 0 : i;\n            var time = selected.clone().hour(i_in_24);\n            var disabled = false;\n            if (minDate && time.minute(59).isBefore(minDate))\n              disabled = true;\n            if (maxDate && time.minute(0).isAfter(maxDate))\n              disabled = true;\n            if (i_in_24 == selected.hour() && !disabled) {\n              html += '<option value=\"' + i + '\" selected=\"selected\">' + i + \"</option>\";\n            } else if (disabled) {\n              html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + i + \"</option>\";\n            } else {\n              html += '<option value=\"' + i + '\">' + i + \"</option>\";\n            }\n          }\n          html += \"</select> \";\n          html += ': <select class=\"minuteselect\">';\n          for (var i = 0; i < 60; i += this.timePickerIncrement) {\n            var padded = i < 10 ? \"0\" + i : i;\n            var time = selected.clone().minute(i);\n            var disabled = false;\n            if (minDate && time.second(59).isBefore(minDate))\n              disabled = true;\n            if (maxDate && time.second(0).isAfter(maxDate))\n              disabled = true;\n            if (selected.minute() == i && !disabled) {\n              html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + \"</option>\";\n            } else if (disabled) {\n              html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + \"</option>\";\n            } else {\n              html += '<option value=\"' + i + '\">' + padded + \"</option>\";\n            }\n          }\n          html += \"</select> \";\n          if (this.timePickerSeconds) {\n            html += ': <select class=\"secondselect\">';\n            for (var i = 0; i < 60; i++) {\n              var padded = i < 10 ? \"0\" + i : i;\n              var time = selected.clone().second(i);\n              var disabled = false;\n              if (minDate && time.isBefore(minDate))\n                disabled = true;\n              if (maxDate && time.isAfter(maxDate))\n                disabled = true;\n              if (selected.second() == i && !disabled) {\n                html += '<option value=\"' + i + '\" selected=\"selected\">' + padded + \"</option>\";\n              } else if (disabled) {\n                html += '<option value=\"' + i + '\" disabled=\"disabled\" class=\"disabled\">' + padded + \"</option>\";\n              } else {\n                html += '<option value=\"' + i + '\">' + padded + \"</option>\";\n              }\n            }\n            html += \"</select> \";\n          }\n          if (!this.timePicker24Hour) {\n            html += '<select class=\"ampmselect\">';\n            var am_html = \"\";\n            var pm_html = \"\";\n            if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))\n              am_html = ' disabled=\"disabled\" class=\"disabled\"';\n            if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))\n              pm_html = ' disabled=\"disabled\" class=\"disabled\"';\n            if (selected.hour() >= 12) {\n              html += '<option value=\"AM\"' + am_html + '>AM</option><option value=\"PM\" selected=\"selected\"' + pm_html + \">PM</option>\";\n            } else {\n              html += '<option value=\"AM\" selected=\"selected\"' + am_html + '>AM</option><option value=\"PM\"' + pm_html + \">PM</option>\";\n            }\n            html += \"</select>\";\n          }\n          this.container.find(\".drp-calendar.\" + side + \" .calendar-time\").html(html);\n        },\n        updateFormInputs: function() {\n          if (this.singleDatePicker || this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate))) {\n            this.container.find(\"button.applyBtn\").prop(\"disabled\", false);\n          } else {\n            this.container.find(\"button.applyBtn\").prop(\"disabled\", true);\n          }\n        },\n        move: function() {\n          var parentOffset = { top: 0, left: 0 }, containerTop, drops = this.drops;\n          var parentRightEdge = $(window).width();\n          if (!this.parentEl.is(\"body\")) {\n            parentOffset = {\n              top: this.parentEl.offset().top - this.parentEl.scrollTop(),\n              left: this.parentEl.offset().left - this.parentEl.scrollLeft()\n            };\n            parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;\n          }\n          switch (drops) {\n            case \"auto\":\n              containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n              if (containerTop + this.container.outerHeight() >= this.parentEl[0].scrollHeight) {\n                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n                drops = \"up\";\n              }\n              break;\n            case \"up\":\n              containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;\n              break;\n            default:\n              containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;\n              break;\n          }\n          this.container.css({\n            top: 0,\n            left: 0,\n            right: \"auto\"\n          });\n          var containerWidth = this.container.outerWidth();\n          this.container.toggleClass(\"drop-up\", drops == \"up\");\n          if (this.opens == \"left\") {\n            var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();\n            if (containerWidth + containerRight > $(window).width()) {\n              this.container.css({\n                top: containerTop,\n                right: \"auto\",\n                left: 9\n              });\n            } else {\n              this.container.css({\n                top: containerTop,\n                right: containerRight,\n                left: \"auto\"\n              });\n            }\n          } else if (this.opens == \"center\") {\n            var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 - containerWidth / 2;\n            if (containerLeft < 0) {\n              this.container.css({\n                top: containerTop,\n                right: \"auto\",\n                left: 9\n              });\n            } else if (containerLeft + containerWidth > $(window).width()) {\n              this.container.css({\n                top: containerTop,\n                left: \"auto\",\n                right: 0\n              });\n            } else {\n              this.container.css({\n                top: containerTop,\n                left: containerLeft,\n                right: \"auto\"\n              });\n            }\n          } else {\n            var containerLeft = this.element.offset().left - parentOffset.left;\n            if (containerLeft + containerWidth > $(window).width()) {\n              this.container.css({\n                top: containerTop,\n                left: \"auto\",\n                right: 0\n              });\n            } else {\n              this.container.css({\n                top: containerTop,\n                left: containerLeft,\n                right: \"auto\"\n              });\n            }\n          }\n        },\n        show: function(e) {\n          if (this.isShowing)\n            return;\n          this._outsideClickProxy = $.proxy(function(e2) {\n            this.outsideClick(e2);\n          }, this);\n          $(document).on(\"mousedown.daterangepicker\", this._outsideClickProxy).on(\"touchend.daterangepicker\", this._outsideClickProxy).on(\"click.daterangepicker\", \"[data-toggle=dropdown]\", this._outsideClickProxy).on(\"focusin.daterangepicker\", this._outsideClickProxy);\n          $(window).on(\"resize.daterangepicker\", $.proxy(function(e2) {\n            this.move(e2);\n          }, this));\n          this.oldStartDate = this.startDate.clone();\n          this.oldEndDate = this.endDate.clone();\n          this.previousRightTime = this.endDate.clone();\n          this.updateView();\n          this.container.show();\n          this.move();\n          this.element.trigger(\"show.daterangepicker\", this);\n          this.isShowing = true;\n        },\n        hide: function(e) {\n          if (!this.isShowing)\n            return;\n          if (!this.endDate) {\n            this.startDate = this.oldStartDate.clone();\n            this.endDate = this.oldEndDate.clone();\n          }\n          if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))\n            this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);\n          this.updateElement();\n          $(document).off(\".daterangepicker\");\n          $(window).off(\".daterangepicker\");\n          this.container.hide();\n          this.element.trigger(\"hide.daterangepicker\", this);\n          this.isShowing = false;\n        },\n        toggle: function(e) {\n          if (this.isShowing) {\n            this.hide();\n          } else {\n            this.show();\n          }\n        },\n        outsideClick: function(e) {\n          var target = $(e.target);\n          if (\n            // ie modal dialog fix\n            e.type == \"focusin\" || target.closest(this.element).length || target.closest(this.container).length || target.closest(\".calendar-table\").length\n          )\n            return;\n          this.hide();\n          this.element.trigger(\"outsideClick.daterangepicker\", this);\n        },\n        showCalendars: function() {\n          this.container.addClass(\"show-calendar\");\n          this.move();\n          this.element.trigger(\"showCalendar.daterangepicker\", this);\n        },\n        hideCalendars: function() {\n          this.container.removeClass(\"show-calendar\");\n          this.element.trigger(\"hideCalendar.daterangepicker\", this);\n        },\n        clickRange: function(e) {\n          var label = e.target.getAttribute(\"data-range-key\");\n          this.chosenLabel = label;\n          if (label == this.locale.customRangeLabel) {\n            this.showCalendars();\n          } else {\n            var dates = this.ranges[label];\n            this.startDate = dates[0];\n            this.endDate = dates[1];\n            if (!this.timePicker) {\n              this.startDate.startOf(\"day\");\n              this.endDate.endOf(\"day\");\n            }\n            if (!this.alwaysShowCalendars)\n              this.hideCalendars();\n            this.clickApply();\n          }\n        },\n        clickPrev: function(e) {\n          var cal = $(e.target).parents(\".drp-calendar\");\n          if (cal.hasClass(\"left\")) {\n            this.leftCalendar.month.subtract(1, \"month\");\n            if (this.linkedCalendars)\n              this.rightCalendar.month.subtract(1, \"month\");\n          } else {\n            this.rightCalendar.month.subtract(1, \"month\");\n          }\n          this.updateCalendars();\n        },\n        clickNext: function(e) {\n          var cal = $(e.target).parents(\".drp-calendar\");\n          if (cal.hasClass(\"left\")) {\n            this.leftCalendar.month.add(1, \"month\");\n          } else {\n            this.rightCalendar.month.add(1, \"month\");\n            if (this.linkedCalendars)\n              this.leftCalendar.month.add(1, \"month\");\n          }\n          this.updateCalendars();\n        },\n        hoverDate: function(e) {\n          if (!$(e.target).hasClass(\"available\"))\n            return;\n          var title = $(e.target).attr(\"data-title\");\n          var row = title.substr(1, 1);\n          var col = title.substr(3, 1);\n          var cal = $(e.target).parents(\".drp-calendar\");\n          var date = cal.hasClass(\"left\") ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n          var leftCalendar = this.leftCalendar;\n          var rightCalendar = this.rightCalendar;\n          var startDate = this.startDate;\n          if (!this.endDate) {\n            this.container.find(\".drp-calendar tbody td\").each(function(index, el) {\n              if ($(el).hasClass(\"week\"))\n                return;\n              var title2 = $(el).attr(\"data-title\");\n              var row2 = title2.substr(1, 1);\n              var col2 = title2.substr(3, 1);\n              var cal2 = $(el).parents(\".drp-calendar\");\n              var dt = cal2.hasClass(\"left\") ? leftCalendar.calendar[row2][col2] : rightCalendar.calendar[row2][col2];\n              if (dt.isAfter(startDate) && dt.isBefore(date) || dt.isSame(date, \"day\")) {\n                $(el).addClass(\"in-range\");\n              } else {\n                $(el).removeClass(\"in-range\");\n              }\n            });\n          }\n        },\n        clickDate: function(e) {\n          if (!$(e.target).hasClass(\"available\"))\n            return;\n          var title = $(e.target).attr(\"data-title\");\n          var row = title.substr(1, 1);\n          var col = title.substr(3, 1);\n          var cal = $(e.target).parents(\".drp-calendar\");\n          var date = cal.hasClass(\"left\") ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];\n          if (this.endDate || date.isBefore(this.startDate, \"day\")) {\n            if (this.timePicker) {\n              var hour = parseInt(this.container.find(\".left .hourselect\").val(), 10);\n              if (!this.timePicker24Hour) {\n                var ampm = this.container.find(\".left .ampmselect\").val();\n                if (ampm === \"PM\" && hour < 12)\n                  hour += 12;\n                if (ampm === \"AM\" && hour === 12)\n                  hour = 0;\n              }\n              var minute = parseInt(this.container.find(\".left .minuteselect\").val(), 10);\n              if (isNaN(minute)) {\n                minute = parseInt(this.container.find(\".left .minuteselect option:last\").val(), 10);\n              }\n              var second = this.timePickerSeconds ? parseInt(this.container.find(\".left .secondselect\").val(), 10) : 0;\n              date = date.clone().hour(hour).minute(minute).second(second);\n            }\n            this.endDate = null;\n            this.setStartDate(date.clone());\n          } else if (!this.endDate && date.isBefore(this.startDate)) {\n            this.setEndDate(this.startDate.clone());\n          } else {\n            if (this.timePicker) {\n              var hour = parseInt(this.container.find(\".right .hourselect\").val(), 10);\n              if (!this.timePicker24Hour) {\n                var ampm = this.container.find(\".right .ampmselect\").val();\n                if (ampm === \"PM\" && hour < 12)\n                  hour += 12;\n                if (ampm === \"AM\" && hour === 12)\n                  hour = 0;\n              }\n              var minute = parseInt(this.container.find(\".right .minuteselect\").val(), 10);\n              if (isNaN(minute)) {\n                minute = parseInt(this.container.find(\".right .minuteselect option:last\").val(), 10);\n              }\n              var second = this.timePickerSeconds ? parseInt(this.container.find(\".right .secondselect\").val(), 10) : 0;\n              date = date.clone().hour(hour).minute(minute).second(second);\n            }\n            this.setEndDate(date.clone());\n            if (this.autoApply) {\n              this.calculateChosenLabel();\n              this.clickApply();\n            }\n          }\n          if (this.singleDatePicker) {\n            this.setEndDate(this.startDate);\n            if (!this.timePicker && this.autoApply)\n              this.clickApply();\n          }\n          this.updateView();\n          e.stopPropagation();\n        },\n        calculateChosenLabel: function() {\n          var customRange = true;\n          var i = 0;\n          for (var range in this.ranges) {\n            if (this.timePicker) {\n              var format = this.timePickerSeconds ? \"YYYY-MM-DD HH:mm:ss\" : \"YYYY-MM-DD HH:mm\";\n              if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {\n                customRange = false;\n                this.chosenLabel = this.container.find(\".ranges li:eq(\" + i + \")\").addClass(\"active\").attr(\"data-range-key\");\n                break;\n              }\n            } else {\n              if (this.startDate.format(\"YYYY-MM-DD\") == this.ranges[range][0].format(\"YYYY-MM-DD\") && this.endDate.format(\"YYYY-MM-DD\") == this.ranges[range][1].format(\"YYYY-MM-DD\")) {\n                customRange = false;\n                this.chosenLabel = this.container.find(\".ranges li:eq(\" + i + \")\").addClass(\"active\").attr(\"data-range-key\");\n                break;\n              }\n            }\n            i++;\n          }\n          if (customRange) {\n            if (this.showCustomRangeLabel) {\n              this.chosenLabel = this.container.find(\".ranges li:last\").addClass(\"active\").attr(\"data-range-key\");\n            } else {\n              this.chosenLabel = null;\n            }\n            this.showCalendars();\n          }\n        },\n        clickApply: function(e) {\n          this.hide();\n          this.element.trigger(\"apply.daterangepicker\", this);\n        },\n        clickCancel: function(e) {\n          this.startDate = this.oldStartDate;\n          this.endDate = this.oldEndDate;\n          this.hide();\n          this.element.trigger(\"cancel.daterangepicker\", this);\n        },\n        monthOrYearChanged: function(e) {\n          var isLeft = $(e.target).closest(\".drp-calendar\").hasClass(\"left\"), leftOrRight = isLeft ? \"left\" : \"right\", cal = this.container.find(\".drp-calendar.\" + leftOrRight);\n          var month = parseInt(cal.find(\".monthselect\").val(), 10);\n          var year = cal.find(\".yearselect\").val();\n          if (!isLeft) {\n            if (year < this.startDate.year() || year == this.startDate.year() && month < this.startDate.month()) {\n              month = this.startDate.month();\n              year = this.startDate.year();\n            }\n          }\n          if (this.minDate) {\n            if (year < this.minDate.year() || year == this.minDate.year() && month < this.minDate.month()) {\n              month = this.minDate.month();\n              year = this.minDate.year();\n            }\n          }\n          if (this.maxDate) {\n            if (year > this.maxDate.year() || year == this.maxDate.year() && month > this.maxDate.month()) {\n              month = this.maxDate.month();\n              year = this.maxDate.year();\n            }\n          }\n          if (isLeft) {\n            this.leftCalendar.month.month(month).year(year);\n            if (this.linkedCalendars)\n              this.rightCalendar.month = this.leftCalendar.month.clone().add(1, \"month\");\n          } else {\n            this.rightCalendar.month.month(month).year(year);\n            if (this.linkedCalendars)\n              this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, \"month\");\n          }\n          this.updateCalendars();\n        },\n        timeChanged: function(e) {\n          var cal = $(e.target).closest(\".drp-calendar\"), isLeft = cal.hasClass(\"left\");\n          var hour = parseInt(cal.find(\".hourselect\").val(), 10);\n          var minute = parseInt(cal.find(\".minuteselect\").val(), 10);\n          if (isNaN(minute)) {\n            minute = parseInt(cal.find(\".minuteselect option:last\").val(), 10);\n          }\n          var second = this.timePickerSeconds ? parseInt(cal.find(\".secondselect\").val(), 10) : 0;\n          if (!this.timePicker24Hour) {\n            var ampm = cal.find(\".ampmselect\").val();\n            if (ampm === \"PM\" && hour < 12)\n              hour += 12;\n            if (ampm === \"AM\" && hour === 12)\n              hour = 0;\n          }\n          if (isLeft) {\n            var start = this.startDate.clone();\n            start.hour(hour);\n            start.minute(minute);\n            start.second(second);\n            this.setStartDate(start);\n            if (this.singleDatePicker) {\n              this.endDate = this.startDate.clone();\n            } else if (this.endDate && this.endDate.format(\"YYYY-MM-DD\") == start.format(\"YYYY-MM-DD\") && this.endDate.isBefore(start)) {\n              this.setEndDate(start.clone());\n            }\n          } else if (this.endDate) {\n            var end = this.endDate.clone();\n            end.hour(hour);\n            end.minute(minute);\n            end.second(second);\n            this.setEndDate(end);\n          }\n          this.updateCalendars();\n          this.updateFormInputs();\n          this.renderTimePicker(\"left\");\n          this.renderTimePicker(\"right\");\n        },\n        elementChanged: function() {\n          if (!this.element.is(\"input\"))\n            return;\n          if (!this.element.val().length)\n            return;\n          var dateString = this.element.val().split(this.locale.separator), start = null, end = null;\n          if (dateString.length === 2) {\n            start = moment(dateString[0], this.locale.format);\n            end = moment(dateString[1], this.locale.format);\n          }\n          if (this.singleDatePicker || start === null || end === null) {\n            start = moment(this.element.val(), this.locale.format);\n            end = start;\n          }\n          if (!start.isValid() || !end.isValid())\n            return;\n          this.setStartDate(start);\n          this.setEndDate(end);\n          this.updateView();\n        },\n        keydown: function(e) {\n          if (e.keyCode === 9 || e.keyCode === 13) {\n            this.hide();\n          }\n          if (e.keyCode === 27) {\n            e.preventDefault();\n            e.stopPropagation();\n            this.hide();\n          }\n        },\n        updateElement: function() {\n          if (this.element.is(\"input\") && this.autoUpdateInput) {\n            var newValue = this.startDate.format(this.locale.format);\n            if (!this.singleDatePicker) {\n              newValue += this.locale.separator + this.endDate.format(this.locale.format);\n            }\n            if (newValue !== this.element.val()) {\n              this.element.val(newValue).trigger(\"change\");\n            }\n          }\n        },\n        remove: function() {\n          this.container.remove();\n          this.element.off(\".daterangepicker\");\n          this.element.removeData();\n        }\n      };\n      $.fn.daterangepicker = function(options, callback) {\n        var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);\n        this.each(function() {\n          var el = $(this);\n          if (el.data(\"daterangepicker\"))\n            el.data(\"daterangepicker\").remove();\n          el.data(\"daterangepicker\", new DateRangePicker(el, implementOptions, callback));\n        });\n        return this;\n      };\n      return DateRangePicker;\n    });\n  }\n});\nexport default require_daterangepicker();\n/*! Bundled license information:\n\nmoment/moment.js:\n  (*! moment.js *)\n  (*! version : 2.29.1 *)\n  (*! authors : Tim Wood, Iskren Chernev, Moment.js contributors *)\n  (*! license : MIT *)\n  (*! momentjs.com *)\n\ndaterangepicker/daterangepicker.js:\n  (**\n  * @version: 3.1\n  * @author: Dan Grossman http://www.dangrossman.info/\n  * @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.\n  * @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php\n  * @website: http://www.daterangepicker.com/\n  *)\n*/\n//# sourceMappingURL=daterangepicker.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport \"daterangepicker/daterangepicker.css\";\n\n// requires jQuery, moment, might want to consider a vanilla JS alternative\nimport 'daterangepicker';\n\nexport default class extends Controller {\n  static targets = [ \"field\", \"clearButton\", \"currentTimeZoneWrapper\", \"timeZoneButtons\", \"timeZoneSelectWrapper\", \"timeZoneField\" ]\n  static values = { includeTime: Boolean, defaultTimeZones: Array }\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  clearDate(event) {\n    // don't submit the form, unless it originated from the cancel/clear button\n    event.preventDefault()\n\n    $(this.fieldTarget).val('')\n  }\n\n  applyDateToField(event, picker) {\n    const format = this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n    $(this.fieldTarget).val(picker.startDate.format(format))\n  }\n\n  showTimeZoneButtons(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    $(this.currentTimeZoneWrapperTarget).toggleClass('hidden')\n    $(this.timeZoneButtonsTarget).toggleClass('hidden')\n  }\n\n  showTimeZoneSelectWrapper(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    $(this.timeZoneButtonsTarget).toggleClass('hidden')\n\n    if (this.hasTimeZoneSelectWrapperTarget) {\n      $(this.timeZoneSelectWrapperTarget).toggleClass('hidden')\n    }\n  }\n\n  resetTimeZoneUI(e) {\n    e && e.preventDefault()\n\n    $(this.currentTimeZoneWrapperTarget).removeClass('hidden')\n    $(this.timeZoneButtonsTarget).addClass('hidden')\n\n    if (this.hasTimeZoneSelectWrapperTarget) {\n      $(this.timeZoneSelectWrapperTarget).addClass('hidden')\n    }\n  }\n\n  setTimeZone(event) {\n    // don't follow the anchor\n    event.preventDefault()\n\n    const currentTimeZoneEl = this.currentTimeZoneWrapperTarget.querySelector('a')\n    const {value} = event.target.dataset\n\n    $(this.timeZoneFieldTarget).val(value)\n    $(currentTimeZoneEl).text(value)\n\n    $('.time-zone-button').removeClass('button').addClass('button-alternative')\n    $(event.target).removeClass('button-alternative').addClass('button')\n\n    this.resetTimeZoneUI()\n  }\n\n  initPluginInstance() {\n    $(this.fieldTarget).daterangepicker({\n      singleDatePicker: true,\n      timePicker: this.includeTimeValue,\n      timePickerIncrement: 5,\n      autoUpdateInput: false,\n      autoApply: true,\n      drops: 'auto',\n      showDropdowns: true,\n      locale: {\n        cancelLabel: 'Clear',\n        applyLabel: 'Apply',\n        format: this.includeTimeValue ? 'MM/DD/YYYY h:mm A' : 'MM/DD/YYYY'\n      }\n    })\n\n    $(this.fieldTarget).on('apply.daterangepicker', this.applyDateToField.bind(this))\n    $(this.fieldTarget).on('cancel.daterangepicker', this.clearDate.bind(this))\n\n    this.pluginMainEl = this.fieldTarget\n    this.plugin = $(this.pluginMainEl).data('daterangepicker') // weird\n\n    // Init time zone select\n    if (this.includeTimeValue && this.hasTimeZoneSelectWrapperTarget) {\n      this.timeZoneSelect = this.timeZoneSelectWrapperTarget.querySelector('select.select2')\n\n      $(this.timeZoneSelect).select2({\n        width: 'style'\n      })\n\n      const self = this\n\n      $(this.timeZoneSelect).on('change.select2', function(event) {\n        const currentTimeZoneEl = self.currentTimeZoneWrapperTarget.querySelector('a')\n        const {value} = event.target\n\n        $(self.timeZoneFieldTarget).val(value)\n        $(currentTimeZoneEl).text(value)\n\n        const selectedOptionTimeZoneButton = $('.selected-option-time-zone-button')\n\n        if (self.defaultTimeZonesValue.includes(value)) {\n          $('.time-zone-button').removeClass('button').addClass('button-alternative')\n          selectedOptionTimeZoneButton.addClass('hidden').attr('hidden', true)\n          $(`a[data-value=\"${value}\"`).removeClass('button-alternative').addClass('button')\n        } else {\n          // deselect any selected button\n          $('.time-zone-button').removeClass('button').addClass('button-alternative')\n\n          selectedOptionTimeZoneButton.text(value)\n          selectedOptionTimeZoneButton.attr('data-value', value).removeAttr('hidden')\n          selectedOptionTimeZoneButton.removeClass(['hidden', 'button-alternative']).addClass('button')\n        }\n\n        self.resetTimeZoneUI()\n      })\n    }\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined) { return }\n\n    $(this.pluginMainEl).off('apply.daterangepicker')\n    $(this.pluginMainEl).off('cancel.daterangepicker')\n\n    // revert to original markup, remove any event listeners\n    this.plugin.remove()\n\n    if (this.includeTimeValue) {\n      $(this.timeZoneSelect).select2('destroy');\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"fileInput\",\n    \"uploadFileSpan\",\n    \"clearFileButton\",\n    \"downloadFileContainer\",\n    \"uploadIcon\",\n    \"fileRemovalInput\"\n  ]\n\n  handleFileSelection() {\n    this.uploadIconTarget.classList.remove(\"ti-upload\")\n    this.uploadIconTarget.classList.add(\"ti-check\")\n    this.uploadFileSpanTarget.innerText = \"Select Another Document\"\n\n    if (this.hasDownloadFileContainerTarget) {\n      this.downloadFileContainerTarget.remove()\n    }\n  }\n\n  addFile(event) {\n    event.preventDefault()\n    this.fileInputTarget.click()\n  }\n\n  clearFile(event) {\n    event.preventDefault()\n\n    this.downloadFileContainerTarget.classList.add(\"hidden\")\n    this.clearFileButtonTarget.classList.add(\"hidden\")\n    this.fileRemovalInputTarget.value = true\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"fileInput\",\n    \"uploadImageSpan\",\n    \"clearImageButton\",\n    \"downloadImageContainer\",\n    \"uploadIcon\",\n    \"imageRemovalInput\"\n  ]\n\n  handleImageSelection() {\n    this.uploadIconTarget.classList.remove(\"ti-upload\")\n    this.uploadIconTarget.classList.add(\"ti-check\")\n    this.uploadImageSpanTarget.innerText = \"Select Another Image\"\n\n    if (this.hasDownloadImageContainerTarget) {\n      this.downloadImageContainerTarget.remove()\n    }\n  }\n\n  addImage(event) {\n    event.preventDefault()\n    this.fileInputTarget.click()\n  }\n\n  clearImage(event) {\n    event.preventDefault()\n\n    this.downloadImageContainerTarget.classList.add(\"hidden\")\n    this.clearImageButtonTarget.classList.add(\"hidden\")\n    this.imageRemovalInputTarget.value = true\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"fileInput\",\n    \"uploadFilesSpan\",\n    \"uploadFilesButton\",\n    \"clearFilesButton\"\n  ]\n  static values = {\n    fileLabel: String\n  }\n\n  connect() {\n    this.fileLabelValue = this.hasFileLabelValue ? this.fileLabelValue : 'File'\n  }\n\n  showFilenames(event) {\n    this.uploadFilesSpanTarget.innerHTML = `Change ${this.fileLabelValue}(s)`\n    this.clearFilesButtonTarget.classList.remove('hidden')\n  }\n\n  addFiles(event) {\n    event.preventDefault()\n    this.fileInputTarget.click()\n  }\n\n  clearFiles(event) {\n    event.preventDefault()\n    this.fileInputTarget.value = ''\n    this.uploadFilesSpanTarget.innerHTML = `Upload New ${this.fileLabelValue}(s)`\n    this.clearFilesButtonTarget.classList.add('hidden')\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"field\", \"openEyeIcon\", \"eyeSlashIcon\" ]\n\n  connect() {\n    const field = this.fieldTarget\n\n    if (this.hasOpenEyeIconTarget && this.hasEyeSlashIconTarget) {\n      const openEyeIcon = this.openEyeIconTarget\n      const eyeSlashIcon = this.eyeSlashIconTarget\n      const icons = [this.openEyeIconTarget, this.eyeSlashIconTarget]\n\n      icons.forEach(target => {\n        target.addEventListener(\"click\", function() {\n          const newType = field.getAttribute(\"type\") === \"password\" ? \"text\" : \"password\"\n          field.setAttribute(\"type\", newType)\n          openEyeIcon.classList.toggle(\"hidden\")\n          eyeSlashIcon.classList.toggle(\"hidden\")\n        })\n      })\n    }\n  }\n}\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/intl-tel-input/build/js/intlTelInput.js\nvar require_intlTelInput = __commonJS({\n  \"node_modules/intl-tel-input/build/js/intlTelInput.js\"(exports, module) {\n    (function(factory) {\n      if (typeof module === \"object\" && module.exports)\n        module.exports = factory();\n      else\n        window.intlTelInput = factory();\n    })(function(undefined) {\n      \"use strict\";\n      return function() {\n        var allCountries = [[\"Afghanistan (‫افغانستان‬‎)\", \"af\", \"93\"], [\"Albania (Shqipëri)\", \"al\", \"355\"], [\"Algeria (‫الجزائر‬‎)\", \"dz\", \"213\"], [\"American Samoa\", \"as\", \"1\", 5, [\"684\"]], [\"Andorra\", \"ad\", \"376\"], [\"Angola\", \"ao\", \"244\"], [\"Anguilla\", \"ai\", \"1\", 6, [\"264\"]], [\"Antigua and Barbuda\", \"ag\", \"1\", 7, [\"268\"]], [\"Argentina\", \"ar\", \"54\"], [\"Armenia (Հայաստան)\", \"am\", \"374\"], [\"Aruba\", \"aw\", \"297\"], [\"Ascension Island\", \"ac\", \"247\"], [\"Australia\", \"au\", \"61\", 0], [\"Austria (Österreich)\", \"at\", \"43\"], [\"Azerbaijan (Azərbaycan)\", \"az\", \"994\"], [\"Bahamas\", \"bs\", \"1\", 8, [\"242\"]], [\"Bahrain (‫البحرين‬‎)\", \"bh\", \"973\"], [\"Bangladesh (বাংলাদেশ)\", \"bd\", \"880\"], [\"Barbados\", \"bb\", \"1\", 9, [\"246\"]], [\"Belarus (Беларусь)\", \"by\", \"375\"], [\"Belgium (België)\", \"be\", \"32\"], [\"Belize\", \"bz\", \"501\"], [\"Benin (Bénin)\", \"bj\", \"229\"], [\"Bermuda\", \"bm\", \"1\", 10, [\"441\"]], [\"Bhutan (འབྲུག)\", \"bt\", \"975\"], [\"Bolivia\", \"bo\", \"591\"], [\"Bosnia and Herzegovina (Босна и Херцеговина)\", \"ba\", \"387\"], [\"Botswana\", \"bw\", \"267\"], [\"Brazil (Brasil)\", \"br\", \"55\"], [\"British Indian Ocean Territory\", \"io\", \"246\"], [\"British Virgin Islands\", \"vg\", \"1\", 11, [\"284\"]], [\"Brunei\", \"bn\", \"673\"], [\"Bulgaria (България)\", \"bg\", \"359\"], [\"Burkina Faso\", \"bf\", \"226\"], [\"Burundi (Uburundi)\", \"bi\", \"257\"], [\"Cambodia (កម្ពុជា)\", \"kh\", \"855\"], [\"Cameroon (Cameroun)\", \"cm\", \"237\"], [\"Canada\", \"ca\", \"1\", 1, [\"204\", \"226\", \"236\", \"249\", \"250\", \"289\", \"306\", \"343\", \"365\", \"387\", \"403\", \"416\", \"418\", \"431\", \"437\", \"438\", \"450\", \"506\", \"514\", \"519\", \"548\", \"579\", \"581\", \"587\", \"604\", \"613\", \"639\", \"647\", \"672\", \"705\", \"709\", \"742\", \"778\", \"780\", \"782\", \"807\", \"819\", \"825\", \"867\", \"873\", \"902\", \"905\"]], [\"Cape Verde (Kabu Verdi)\", \"cv\", \"238\"], [\"Caribbean Netherlands\", \"bq\", \"599\", 1, [\"3\", \"4\", \"7\"]], [\"Cayman Islands\", \"ky\", \"1\", 12, [\"345\"]], [\"Central African Republic (République centrafricaine)\", \"cf\", \"236\"], [\"Chad (Tchad)\", \"td\", \"235\"], [\"Chile\", \"cl\", \"56\"], [\"China (中国)\", \"cn\", \"86\"], [\"Christmas Island\", \"cx\", \"61\", 2, [\"89164\"]], [\"Cocos (Keeling) Islands\", \"cc\", \"61\", 1, [\"89162\"]], [\"Colombia\", \"co\", \"57\"], [\"Comoros (‫جزر القمر‬‎)\", \"km\", \"269\"], [\"Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)\", \"cd\", \"243\"], [\"Congo (Republic) (Congo-Brazzaville)\", \"cg\", \"242\"], [\"Cook Islands\", \"ck\", \"682\"], [\"Costa Rica\", \"cr\", \"506\"], [\"Côte d’Ivoire\", \"ci\", \"225\"], [\"Croatia (Hrvatska)\", \"hr\", \"385\"], [\"Cuba\", \"cu\", \"53\"], [\"Curaçao\", \"cw\", \"599\", 0], [\"Cyprus (Κύπρος)\", \"cy\", \"357\"], [\"Czech Republic (Česká republika)\", \"cz\", \"420\"], [\"Denmark (Danmark)\", \"dk\", \"45\"], [\"Djibouti\", \"dj\", \"253\"], [\"Dominica\", \"dm\", \"1\", 13, [\"767\"]], [\"Dominican Republic (República Dominicana)\", \"do\", \"1\", 2, [\"809\", \"829\", \"849\"]], [\"Ecuador\", \"ec\", \"593\"], [\"Egypt (‫مصر‬‎)\", \"eg\", \"20\"], [\"El Salvador\", \"sv\", \"503\"], [\"Equatorial Guinea (Guinea Ecuatorial)\", \"gq\", \"240\"], [\"Eritrea\", \"er\", \"291\"], [\"Estonia (Eesti)\", \"ee\", \"372\"], [\"Eswatini\", \"sz\", \"268\"], [\"Ethiopia\", \"et\", \"251\"], [\"Falkland Islands (Islas Malvinas)\", \"fk\", \"500\"], [\"Faroe Islands (Føroyar)\", \"fo\", \"298\"], [\"Fiji\", \"fj\", \"679\"], [\"Finland (Suomi)\", \"fi\", \"358\", 0], [\"France\", \"fr\", \"33\"], [\"French Guiana (Guyane française)\", \"gf\", \"594\"], [\"French Polynesia (Polynésie française)\", \"pf\", \"689\"], [\"Gabon\", \"ga\", \"241\"], [\"Gambia\", \"gm\", \"220\"], [\"Georgia (საქართველო)\", \"ge\", \"995\"], [\"Germany (Deutschland)\", \"de\", \"49\"], [\"Ghana (Gaana)\", \"gh\", \"233\"], [\"Gibraltar\", \"gi\", \"350\"], [\"Greece (Ελλάδα)\", \"gr\", \"30\"], [\"Greenland (Kalaallit Nunaat)\", \"gl\", \"299\"], [\"Grenada\", \"gd\", \"1\", 14, [\"473\"]], [\"Guadeloupe\", \"gp\", \"590\", 0], [\"Guam\", \"gu\", \"1\", 15, [\"671\"]], [\"Guatemala\", \"gt\", \"502\"], [\"Guernsey\", \"gg\", \"44\", 1, [\"1481\", \"7781\", \"7839\", \"7911\"]], [\"Guinea (Guinée)\", \"gn\", \"224\"], [\"Guinea-Bissau (Guiné Bissau)\", \"gw\", \"245\"], [\"Guyana\", \"gy\", \"592\"], [\"Haiti\", \"ht\", \"509\"], [\"Honduras\", \"hn\", \"504\"], [\"Hong Kong (香港)\", \"hk\", \"852\"], [\"Hungary (Magyarország)\", \"hu\", \"36\"], [\"Iceland (Ísland)\", \"is\", \"354\"], [\"India (भारत)\", \"in\", \"91\"], [\"Indonesia\", \"id\", \"62\"], [\"Iran (‫ایران‬‎)\", \"ir\", \"98\"], [\"Iraq (‫العراق‬‎)\", \"iq\", \"964\"], [\"Ireland\", \"ie\", \"353\"], [\"Isle of Man\", \"im\", \"44\", 2, [\"1624\", \"74576\", \"7524\", \"7924\", \"7624\"]], [\"Israel (‫ישראל‬‎)\", \"il\", \"972\"], [\"Italy (Italia)\", \"it\", \"39\", 0], [\"Jamaica\", \"jm\", \"1\", 4, [\"876\", \"658\"]], [\"Japan (日本)\", \"jp\", \"81\"], [\"Jersey\", \"je\", \"44\", 3, [\"1534\", \"7509\", \"7700\", \"7797\", \"7829\", \"7937\"]], [\"Jordan (‫الأردن‬‎)\", \"jo\", \"962\"], [\"Kazakhstan (Казахстан)\", \"kz\", \"7\", 1, [\"33\", \"7\"]], [\"Kenya\", \"ke\", \"254\"], [\"Kiribati\", \"ki\", \"686\"], [\"Kosovo\", \"xk\", \"383\"], [\"Kuwait (‫الكويت‬‎)\", \"kw\", \"965\"], [\"Kyrgyzstan (Кыргызстан)\", \"kg\", \"996\"], [\"Laos (ລາວ)\", \"la\", \"856\"], [\"Latvia (Latvija)\", \"lv\", \"371\"], [\"Lebanon (‫لبنان‬‎)\", \"lb\", \"961\"], [\"Lesotho\", \"ls\", \"266\"], [\"Liberia\", \"lr\", \"231\"], [\"Libya (‫ليبيا‬‎)\", \"ly\", \"218\"], [\"Liechtenstein\", \"li\", \"423\"], [\"Lithuania (Lietuva)\", \"lt\", \"370\"], [\"Luxembourg\", \"lu\", \"352\"], [\"Macau (澳門)\", \"mo\", \"853\"], [\"Madagascar (Madagasikara)\", \"mg\", \"261\"], [\"Malawi\", \"mw\", \"265\"], [\"Malaysia\", \"my\", \"60\"], [\"Maldives\", \"mv\", \"960\"], [\"Mali\", \"ml\", \"223\"], [\"Malta\", \"mt\", \"356\"], [\"Marshall Islands\", \"mh\", \"692\"], [\"Martinique\", \"mq\", \"596\"], [\"Mauritania (‫موريتانيا‬‎)\", \"mr\", \"222\"], [\"Mauritius (Moris)\", \"mu\", \"230\"], [\"Mayotte\", \"yt\", \"262\", 1, [\"269\", \"639\"]], [\"Mexico (México)\", \"mx\", \"52\"], [\"Micronesia\", \"fm\", \"691\"], [\"Moldova (Republica Moldova)\", \"md\", \"373\"], [\"Monaco\", \"mc\", \"377\"], [\"Mongolia (Монгол)\", \"mn\", \"976\"], [\"Montenegro (Crna Gora)\", \"me\", \"382\"], [\"Montserrat\", \"ms\", \"1\", 16, [\"664\"]], [\"Morocco (‫المغرب‬‎)\", \"ma\", \"212\", 0], [\"Mozambique (Moçambique)\", \"mz\", \"258\"], [\"Myanmar (Burma) (မြန်မာ)\", \"mm\", \"95\"], [\"Namibia (Namibië)\", \"na\", \"264\"], [\"Nauru\", \"nr\", \"674\"], [\"Nepal (नेपाल)\", \"np\", \"977\"], [\"Netherlands (Nederland)\", \"nl\", \"31\"], [\"New Caledonia (Nouvelle-Calédonie)\", \"nc\", \"687\"], [\"New Zealand\", \"nz\", \"64\"], [\"Nicaragua\", \"ni\", \"505\"], [\"Niger (Nijar)\", \"ne\", \"227\"], [\"Nigeria\", \"ng\", \"234\"], [\"Niue\", \"nu\", \"683\"], [\"Norfolk Island\", \"nf\", \"672\"], [\"North Korea (조선 민주주의 인민 공화국)\", \"kp\", \"850\"], [\"North Macedonia (Северна Македонија)\", \"mk\", \"389\"], [\"Northern Mariana Islands\", \"mp\", \"1\", 17, [\"670\"]], [\"Norway (Norge)\", \"no\", \"47\", 0], [\"Oman (‫عُمان‬‎)\", \"om\", \"968\"], [\"Pakistan (‫پاکستان‬‎)\", \"pk\", \"92\"], [\"Palau\", \"pw\", \"680\"], [\"Palestine (‫فلسطين‬‎)\", \"ps\", \"970\"], [\"Panama (Panamá)\", \"pa\", \"507\"], [\"Papua New Guinea\", \"pg\", \"675\"], [\"Paraguay\", \"py\", \"595\"], [\"Peru (Perú)\", \"pe\", \"51\"], [\"Philippines\", \"ph\", \"63\"], [\"Poland (Polska)\", \"pl\", \"48\"], [\"Portugal\", \"pt\", \"351\"], [\"Puerto Rico\", \"pr\", \"1\", 3, [\"787\", \"939\"]], [\"Qatar (‫قطر‬‎)\", \"qa\", \"974\"], [\"Réunion (La Réunion)\", \"re\", \"262\", 0], [\"Romania (România)\", \"ro\", \"40\"], [\"Russia (Россия)\", \"ru\", \"7\", 0], [\"Rwanda\", \"rw\", \"250\"], [\"Saint Barthélemy\", \"bl\", \"590\", 1], [\"Saint Helena\", \"sh\", \"290\"], [\"Saint Kitts and Nevis\", \"kn\", \"1\", 18, [\"869\"]], [\"Saint Lucia\", \"lc\", \"1\", 19, [\"758\"]], [\"Saint Martin (Saint-Martin (partie française))\", \"mf\", \"590\", 2], [\"Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)\", \"pm\", \"508\"], [\"Saint Vincent and the Grenadines\", \"vc\", \"1\", 20, [\"784\"]], [\"Samoa\", \"ws\", \"685\"], [\"San Marino\", \"sm\", \"378\"], [\"São Tomé and Príncipe (São Tomé e Príncipe)\", \"st\", \"239\"], [\"Saudi Arabia (‫المملكة العربية السعودية‬‎)\", \"sa\", \"966\"], [\"Senegal (Sénégal)\", \"sn\", \"221\"], [\"Serbia (Србија)\", \"rs\", \"381\"], [\"Seychelles\", \"sc\", \"248\"], [\"Sierra Leone\", \"sl\", \"232\"], [\"Singapore\", \"sg\", \"65\"], [\"Sint Maarten\", \"sx\", \"1\", 21, [\"721\"]], [\"Slovakia (Slovensko)\", \"sk\", \"421\"], [\"Slovenia (Slovenija)\", \"si\", \"386\"], [\"Solomon Islands\", \"sb\", \"677\"], [\"Somalia (Soomaaliya)\", \"so\", \"252\"], [\"South Africa\", \"za\", \"27\"], [\"South Korea (대한민국)\", \"kr\", \"82\"], [\"South Sudan (‫جنوب السودان‬‎)\", \"ss\", \"211\"], [\"Spain (España)\", \"es\", \"34\"], [\"Sri Lanka (ශ්‍රී ලංකාව)\", \"lk\", \"94\"], [\"Sudan (‫السودان‬‎)\", \"sd\", \"249\"], [\"Suriname\", \"sr\", \"597\"], [\"Svalbard and Jan Mayen\", \"sj\", \"47\", 1, [\"79\"]], [\"Sweden (Sverige)\", \"se\", \"46\"], [\"Switzerland (Schweiz)\", \"ch\", \"41\"], [\"Syria (‫سوريا‬‎)\", \"sy\", \"963\"], [\"Taiwan (台灣)\", \"tw\", \"886\"], [\"Tajikistan\", \"tj\", \"992\"], [\"Tanzania\", \"tz\", \"255\"], [\"Thailand (ไทย)\", \"th\", \"66\"], [\"Timor-Leste\", \"tl\", \"670\"], [\"Togo\", \"tg\", \"228\"], [\"Tokelau\", \"tk\", \"690\"], [\"Tonga\", \"to\", \"676\"], [\"Trinidad and Tobago\", \"tt\", \"1\", 22, [\"868\"]], [\"Tunisia (‫تونس‬‎)\", \"tn\", \"216\"], [\"Turkey (Türkiye)\", \"tr\", \"90\"], [\"Turkmenistan\", \"tm\", \"993\"], [\"Turks and Caicos Islands\", \"tc\", \"1\", 23, [\"649\"]], [\"Tuvalu\", \"tv\", \"688\"], [\"U.S. Virgin Islands\", \"vi\", \"1\", 24, [\"340\"]], [\"Uganda\", \"ug\", \"256\"], [\"Ukraine (Україна)\", \"ua\", \"380\"], [\"United Arab Emirates (‫الإمارات العربية المتحدة‬‎)\", \"ae\", \"971\"], [\"United Kingdom\", \"gb\", \"44\", 0], [\"United States\", \"us\", \"1\", 0], [\"Uruguay\", \"uy\", \"598\"], [\"Uzbekistan (Oʻzbekiston)\", \"uz\", \"998\"], [\"Vanuatu\", \"vu\", \"678\"], [\"Vatican City (Città del Vaticano)\", \"va\", \"39\", 1, [\"06698\"]], [\"Venezuela\", \"ve\", \"58\"], [\"Vietnam (Việt Nam)\", \"vn\", \"84\"], [\"Wallis and Futuna (Wallis-et-Futuna)\", \"wf\", \"681\"], [\"Western Sahara (‫الصحراء الغربية‬‎)\", \"eh\", \"212\", 1, [\"5288\", \"5289\"]], [\"Yemen (‫اليمن‬‎)\", \"ye\", \"967\"], [\"Zambia\", \"zm\", \"260\"], [\"Zimbabwe\", \"zw\", \"263\"], [\"Åland Islands\", \"ax\", \"358\", 1, [\"18\"]]];\n        for (var i = 0; i < allCountries.length; i++) {\n          var c = allCountries[i];\n          allCountries[i] = {\n            name: c[0],\n            iso2: c[1],\n            dialCode: c[2],\n            priority: c[3] || 0,\n            areaCodes: c[4] || null\n          };\n        }\n        \"use strict\";\n        function _classCallCheck(instance, Constructor) {\n          if (!(instance instanceof Constructor)) {\n            throw new TypeError(\"Cannot call a class as a function\");\n          }\n        }\n        function _defineProperties(target, props) {\n          for (var i2 = 0; i2 < props.length; i2++) {\n            var descriptor = props[i2];\n            descriptor.enumerable = descriptor.enumerable || false;\n            descriptor.configurable = true;\n            if (\"value\" in descriptor)\n              descriptor.writable = true;\n            Object.defineProperty(target, descriptor.key, descriptor);\n          }\n        }\n        function _createClass(Constructor, protoProps, staticProps) {\n          if (protoProps)\n            _defineProperties(Constructor.prototype, protoProps);\n          if (staticProps)\n            _defineProperties(Constructor, staticProps);\n          return Constructor;\n        }\n        var intlTelInputGlobals = {\n          getInstance: function getInstance(input) {\n            var id2 = input.getAttribute(\"data-intl-tel-input-id\");\n            return window.intlTelInputGlobals.instances[id2];\n          },\n          instances: {},\n          // using a global like this allows us to mock it in the tests\n          documentReady: function documentReady() {\n            return document.readyState === \"complete\";\n          }\n        };\n        if (typeof window === \"object\")\n          window.intlTelInputGlobals = intlTelInputGlobals;\n        var id = 0;\n        var defaults = {\n          // whether or not to allow the dropdown\n          allowDropdown: true,\n          // if there is just a dial code in the input: remove it on blur\n          autoHideDialCode: true,\n          // add a placeholder in the input with an example number for the selected country\n          autoPlaceholder: \"polite\",\n          // modify the parentClass\n          customContainer: \"\",\n          // modify the auto placeholder\n          customPlaceholder: null,\n          // append menu to specified element\n          dropdownContainer: null,\n          // don't display these countries\n          excludeCountries: [],\n          // format the input value during initialisation and on setNumber\n          formatOnDisplay: true,\n          // geoIp lookup function\n          geoIpLookup: null,\n          // inject a hidden input with this name, and on submit, populate it with the result of getNumber\n          hiddenInput: \"\",\n          // initial country\n          initialCountry: \"\",\n          // localized country names e.g. { 'de': 'Deutschland' }\n          localizedCountries: null,\n          // don't insert international dial codes\n          nationalMode: true,\n          // display only these countries\n          onlyCountries: [],\n          // number type to use for placeholders\n          placeholderNumberType: \"MOBILE\",\n          // the countries at the top of the list. defaults to united states and united kingdom\n          preferredCountries: [\"us\", \"gb\"],\n          // display the country dial code next to the selected flag so it's not part of the typed number\n          separateDialCode: false,\n          // specify the path to the libphonenumber script to enable validation/formatting\n          utilsScript: \"\"\n        };\n        var regionlessNanpNumbers = [\"800\", \"822\", \"833\", \"844\", \"855\", \"866\", \"877\", \"880\", \"881\", \"882\", \"883\", \"884\", \"885\", \"886\", \"887\", \"888\", \"889\"];\n        var forEachProp = function forEachProp2(obj, callback) {\n          var keys = Object.keys(obj);\n          for (var i2 = 0; i2 < keys.length; i2++) {\n            callback(keys[i2], obj[keys[i2]]);\n          }\n        };\n        var forEachInstance = function forEachInstance2(method) {\n          forEachProp(window.intlTelInputGlobals.instances, function(key) {\n            window.intlTelInputGlobals.instances[key][method]();\n          });\n        };\n        var Iti = /* @__PURE__ */ function() {\n          function Iti2(input, options) {\n            var _this = this;\n            _classCallCheck(this, Iti2);\n            this.id = id++;\n            this.telInput = input;\n            this.activeItem = null;\n            this.highlightedItem = null;\n            var customOptions = options || {};\n            this.options = {};\n            forEachProp(defaults, function(key, value) {\n              _this.options[key] = customOptions.hasOwnProperty(key) ? customOptions[key] : value;\n            });\n            this.hadInitialPlaceholder = Boolean(input.getAttribute(\"placeholder\"));\n          }\n          _createClass(Iti2, [{\n            key: \"_init\",\n            value: function _init() {\n              var _this2 = this;\n              if (this.options.nationalMode)\n                this.options.autoHideDialCode = false;\n              if (this.options.separateDialCode) {\n                this.options.autoHideDialCode = this.options.nationalMode = false;\n              }\n              this.isMobile = /Android.+Mobile|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n              if (this.isMobile) {\n                document.body.classList.add(\"iti-mobile\");\n                if (!this.options.dropdownContainer)\n                  this.options.dropdownContainer = document.body;\n              }\n              if (typeof Promise !== \"undefined\") {\n                var autoCountryPromise = new Promise(function(resolve, reject) {\n                  _this2.resolveAutoCountryPromise = resolve;\n                  _this2.rejectAutoCountryPromise = reject;\n                });\n                var utilsScriptPromise = new Promise(function(resolve, reject) {\n                  _this2.resolveUtilsScriptPromise = resolve;\n                  _this2.rejectUtilsScriptPromise = reject;\n                });\n                this.promise = Promise.all([autoCountryPromise, utilsScriptPromise]);\n              } else {\n                this.resolveAutoCountryPromise = this.rejectAutoCountryPromise = function() {\n                };\n                this.resolveUtilsScriptPromise = this.rejectUtilsScriptPromise = function() {\n                };\n              }\n              this.selectedCountryData = {};\n              this._processCountryData();\n              this._generateMarkup();\n              this._setInitialState();\n              this._initListeners();\n              this._initRequests();\n            }\n          }, {\n            key: \"_processCountryData\",\n            value: function _processCountryData() {\n              this._processAllCountries();\n              this._processCountryCodes();\n              this._processPreferredCountries();\n              if (this.options.localizedCountries)\n                this._translateCountriesByLocale();\n              if (this.options.onlyCountries.length || this.options.localizedCountries) {\n                this.countries.sort(this._countryNameSort);\n              }\n            }\n          }, {\n            key: \"_addCountryCode\",\n            value: function _addCountryCode(iso2, countryCode, priority) {\n              if (countryCode.length > this.countryCodeMaxLen) {\n                this.countryCodeMaxLen = countryCode.length;\n              }\n              if (!this.countryCodes.hasOwnProperty(countryCode)) {\n                this.countryCodes[countryCode] = [];\n              }\n              for (var i2 = 0; i2 < this.countryCodes[countryCode].length; i2++) {\n                if (this.countryCodes[countryCode][i2] === iso2)\n                  return;\n              }\n              var index = priority !== undefined ? priority : this.countryCodes[countryCode].length;\n              this.countryCodes[countryCode][index] = iso2;\n            }\n          }, {\n            key: \"_processAllCountries\",\n            value: function _processAllCountries() {\n              if (this.options.onlyCountries.length) {\n                var lowerCaseOnlyCountries = this.options.onlyCountries.map(function(country) {\n                  return country.toLowerCase();\n                });\n                this.countries = allCountries.filter(function(country) {\n                  return lowerCaseOnlyCountries.indexOf(country.iso2) > -1;\n                });\n              } else if (this.options.excludeCountries.length) {\n                var lowerCaseExcludeCountries = this.options.excludeCountries.map(function(country) {\n                  return country.toLowerCase();\n                });\n                this.countries = allCountries.filter(function(country) {\n                  return lowerCaseExcludeCountries.indexOf(country.iso2) === -1;\n                });\n              } else {\n                this.countries = allCountries;\n              }\n            }\n          }, {\n            key: \"_translateCountriesByLocale\",\n            value: function _translateCountriesByLocale() {\n              for (var i2 = 0; i2 < this.countries.length; i2++) {\n                var iso = this.countries[i2].iso2.toLowerCase();\n                if (this.options.localizedCountries.hasOwnProperty(iso)) {\n                  this.countries[i2].name = this.options.localizedCountries[iso];\n                }\n              }\n            }\n          }, {\n            key: \"_countryNameSort\",\n            value: function _countryNameSort(a, b) {\n              return a.name.localeCompare(b.name);\n            }\n          }, {\n            key: \"_processCountryCodes\",\n            value: function _processCountryCodes() {\n              this.countryCodeMaxLen = 0;\n              this.dialCodes = {};\n              this.countryCodes = {};\n              for (var i2 = 0; i2 < this.countries.length; i2++) {\n                var c2 = this.countries[i2];\n                if (!this.dialCodes[c2.dialCode])\n                  this.dialCodes[c2.dialCode] = true;\n                this._addCountryCode(c2.iso2, c2.dialCode, c2.priority);\n              }\n              for (var _i = 0; _i < this.countries.length; _i++) {\n                var _c = this.countries[_i];\n                if (_c.areaCodes) {\n                  var rootCountryCode = this.countryCodes[_c.dialCode][0];\n                  for (var j = 0; j < _c.areaCodes.length; j++) {\n                    var areaCode = _c.areaCodes[j];\n                    for (var k = 1; k < areaCode.length; k++) {\n                      var partialDialCode = _c.dialCode + areaCode.substr(0, k);\n                      this._addCountryCode(rootCountryCode, partialDialCode);\n                      this._addCountryCode(_c.iso2, partialDialCode);\n                    }\n                    this._addCountryCode(_c.iso2, _c.dialCode + areaCode);\n                  }\n                }\n              }\n            }\n          }, {\n            key: \"_processPreferredCountries\",\n            value: function _processPreferredCountries() {\n              this.preferredCountries = [];\n              for (var i2 = 0; i2 < this.options.preferredCountries.length; i2++) {\n                var countryCode = this.options.preferredCountries[i2].toLowerCase();\n                var countryData = this._getCountryData(countryCode, false, true);\n                if (countryData)\n                  this.preferredCountries.push(countryData);\n              }\n            }\n          }, {\n            key: \"_createEl\",\n            value: function _createEl(name, attrs, container) {\n              var el = document.createElement(name);\n              if (attrs)\n                forEachProp(attrs, function(key, value) {\n                  return el.setAttribute(key, value);\n                });\n              if (container)\n                container.appendChild(el);\n              return el;\n            }\n          }, {\n            key: \"_generateMarkup\",\n            value: function _generateMarkup() {\n              if (!this.telInput.hasAttribute(\"autocomplete\") && !(this.telInput.form && this.telInput.form.hasAttribute(\"autocomplete\"))) {\n                this.telInput.setAttribute(\"autocomplete\", \"off\");\n              }\n              var parentClass = \"iti\";\n              if (this.options.allowDropdown)\n                parentClass += \" iti--allow-dropdown\";\n              if (this.options.separateDialCode)\n                parentClass += \" iti--separate-dial-code\";\n              if (this.options.customContainer) {\n                parentClass += \" \";\n                parentClass += this.options.customContainer;\n              }\n              var wrapper = this._createEl(\"div\", {\n                \"class\": parentClass\n              });\n              this.telInput.parentNode.insertBefore(wrapper, this.telInput);\n              this.flagsContainer = this._createEl(\"div\", {\n                \"class\": \"iti__flag-container\"\n              }, wrapper);\n              wrapper.appendChild(this.telInput);\n              this.selectedFlag = this._createEl(\"div\", {\n                \"class\": \"iti__selected-flag\",\n                role: \"combobox\",\n                \"aria-controls\": \"iti-\".concat(this.id, \"__country-listbox\"),\n                \"aria-owns\": \"iti-\".concat(this.id, \"__country-listbox\"),\n                \"aria-expanded\": \"false\"\n              }, this.flagsContainer);\n              this.selectedFlagInner = this._createEl(\"div\", {\n                \"class\": \"iti__flag\"\n              }, this.selectedFlag);\n              if (this.options.separateDialCode) {\n                this.selectedDialCode = this._createEl(\"div\", {\n                  \"class\": \"iti__selected-dial-code\"\n                }, this.selectedFlag);\n              }\n              if (this.options.allowDropdown) {\n                this.selectedFlag.setAttribute(\"tabindex\", \"0\");\n                this.dropdownArrow = this._createEl(\"div\", {\n                  \"class\": \"iti__arrow\"\n                }, this.selectedFlag);\n                this.countryList = this._createEl(\"ul\", {\n                  \"class\": \"iti__country-list iti__hide\",\n                  id: \"iti-\".concat(this.id, \"__country-listbox\"),\n                  role: \"listbox\",\n                  \"aria-label\": \"List of countries\"\n                });\n                if (this.preferredCountries.length) {\n                  this._appendListItems(this.preferredCountries, \"iti__preferred\", true);\n                  this._createEl(\"li\", {\n                    \"class\": \"iti__divider\",\n                    role: \"separator\",\n                    \"aria-disabled\": \"true\"\n                  }, this.countryList);\n                }\n                this._appendListItems(this.countries, \"iti__standard\");\n                if (this.options.dropdownContainer) {\n                  this.dropdown = this._createEl(\"div\", {\n                    \"class\": \"iti iti--container\"\n                  });\n                  this.dropdown.appendChild(this.countryList);\n                } else {\n                  this.flagsContainer.appendChild(this.countryList);\n                }\n              }\n              if (this.options.hiddenInput) {\n                var hiddenInputName = this.options.hiddenInput;\n                var name = this.telInput.getAttribute(\"name\");\n                if (name) {\n                  var i2 = name.lastIndexOf(\"[\");\n                  if (i2 !== -1)\n                    hiddenInputName = \"\".concat(name.substr(0, i2), \"[\").concat(hiddenInputName, \"]\");\n                }\n                this.hiddenInput = this._createEl(\"input\", {\n                  type: \"hidden\",\n                  name: hiddenInputName\n                });\n                wrapper.appendChild(this.hiddenInput);\n              }\n            }\n          }, {\n            key: \"_appendListItems\",\n            value: function _appendListItems(countries, className, preferred) {\n              var tmp = \"\";\n              for (var i2 = 0; i2 < countries.length; i2++) {\n                var c2 = countries[i2];\n                var idSuffix = preferred ? \"-preferred\" : \"\";\n                tmp += \"<li class='iti__country \".concat(className, \"' tabIndex='-1' id='iti-\").concat(this.id, \"__item-\").concat(c2.iso2).concat(idSuffix, \"' role='option' data-dial-code='\").concat(c2.dialCode, \"' data-country-code='\").concat(c2.iso2, \"' aria-selected='false'>\");\n                tmp += \"<div class='iti__flag-box'><div class='iti__flag iti__\".concat(c2.iso2, \"'></div></div>\");\n                tmp += \"<span class='iti__country-name'>\".concat(c2.name, \"</span>\");\n                tmp += \"<span class='iti__dial-code'>+\".concat(c2.dialCode, \"</span>\");\n                tmp += \"</li>\";\n              }\n              this.countryList.insertAdjacentHTML(\"beforeend\", tmp);\n            }\n          }, {\n            key: \"_setInitialState\",\n            value: function _setInitialState() {\n              var attributeValue = this.telInput.getAttribute(\"value\");\n              var inputValue = this.telInput.value;\n              var useAttribute = attributeValue && attributeValue.charAt(0) === \"+\" && (!inputValue || inputValue.charAt(0) !== \"+\");\n              var val = useAttribute ? attributeValue : inputValue;\n              var dialCode = this._getDialCode(val);\n              var isRegionlessNanp = this._isRegionlessNanp(val);\n              var _this$options = this.options, initialCountry = _this$options.initialCountry, nationalMode = _this$options.nationalMode, autoHideDialCode = _this$options.autoHideDialCode, separateDialCode = _this$options.separateDialCode;\n              if (dialCode && !isRegionlessNanp) {\n                this._updateFlagFromNumber(val);\n              } else if (initialCountry !== \"auto\") {\n                if (initialCountry) {\n                  this._setFlag(initialCountry.toLowerCase());\n                } else {\n                  if (dialCode && isRegionlessNanp) {\n                    this._setFlag(\"us\");\n                  } else {\n                    this.defaultCountry = this.preferredCountries.length ? this.preferredCountries[0].iso2 : this.countries[0].iso2;\n                    if (!val) {\n                      this._setFlag(this.defaultCountry);\n                    }\n                  }\n                }\n                if (!val && !nationalMode && !autoHideDialCode && !separateDialCode) {\n                  this.telInput.value = \"+\".concat(this.selectedCountryData.dialCode);\n                }\n              }\n              if (val)\n                this._updateValFromNumber(val);\n            }\n          }, {\n            key: \"_initListeners\",\n            value: function _initListeners() {\n              this._initKeyListeners();\n              if (this.options.autoHideDialCode)\n                this._initBlurListeners();\n              if (this.options.allowDropdown)\n                this._initDropdownListeners();\n              if (this.hiddenInput)\n                this._initHiddenInputListener();\n            }\n          }, {\n            key: \"_initHiddenInputListener\",\n            value: function _initHiddenInputListener() {\n              var _this3 = this;\n              this._handleHiddenInputSubmit = function() {\n                _this3.hiddenInput.value = _this3.getNumber();\n              };\n              if (this.telInput.form)\n                this.telInput.form.addEventListener(\"submit\", this._handleHiddenInputSubmit);\n            }\n          }, {\n            key: \"_getClosestLabel\",\n            value: function _getClosestLabel() {\n              var el = this.telInput;\n              while (el && el.tagName !== \"LABEL\") {\n                el = el.parentNode;\n              }\n              return el;\n            }\n          }, {\n            key: \"_initDropdownListeners\",\n            value: function _initDropdownListeners() {\n              var _this4 = this;\n              this._handleLabelClick = function(e) {\n                if (_this4.countryList.classList.contains(\"iti__hide\"))\n                  _this4.telInput.focus();\n                else\n                  e.preventDefault();\n              };\n              var label = this._getClosestLabel();\n              if (label)\n                label.addEventListener(\"click\", this._handleLabelClick);\n              this._handleClickSelectedFlag = function() {\n                if (_this4.countryList.classList.contains(\"iti__hide\") && !_this4.telInput.disabled && !_this4.telInput.readOnly) {\n                  _this4._showDropdown();\n                }\n              };\n              this.selectedFlag.addEventListener(\"click\", this._handleClickSelectedFlag);\n              this._handleFlagsContainerKeydown = function(e) {\n                var isDropdownHidden = _this4.countryList.classList.contains(\"iti__hide\");\n                if (isDropdownHidden && [\"ArrowUp\", \"Up\", \"ArrowDown\", \"Down\", \" \", \"Enter\"].indexOf(e.key) !== -1) {\n                  e.preventDefault();\n                  e.stopPropagation();\n                  _this4._showDropdown();\n                }\n                if (e.key === \"Tab\")\n                  _this4._closeDropdown();\n              };\n              this.flagsContainer.addEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n            }\n          }, {\n            key: \"_initRequests\",\n            value: function _initRequests() {\n              var _this5 = this;\n              if (this.options.utilsScript && !window.intlTelInputUtils) {\n                if (window.intlTelInputGlobals.documentReady()) {\n                  window.intlTelInputGlobals.loadUtils(this.options.utilsScript);\n                } else {\n                  window.addEventListener(\"load\", function() {\n                    window.intlTelInputGlobals.loadUtils(_this5.options.utilsScript);\n                  });\n                }\n              } else\n                this.resolveUtilsScriptPromise();\n              if (this.options.initialCountry === \"auto\")\n                this._loadAutoCountry();\n              else\n                this.resolveAutoCountryPromise();\n            }\n          }, {\n            key: \"_loadAutoCountry\",\n            value: function _loadAutoCountry() {\n              if (window.intlTelInputGlobals.autoCountry) {\n                this.handleAutoCountry();\n              } else if (!window.intlTelInputGlobals.startedLoadingAutoCountry) {\n                window.intlTelInputGlobals.startedLoadingAutoCountry = true;\n                if (typeof this.options.geoIpLookup === \"function\") {\n                  this.options.geoIpLookup(function(countryCode) {\n                    window.intlTelInputGlobals.autoCountry = countryCode.toLowerCase();\n                    setTimeout(function() {\n                      return forEachInstance(\"handleAutoCountry\");\n                    });\n                  }, function() {\n                    return forEachInstance(\"rejectAutoCountryPromise\");\n                  });\n                }\n              }\n            }\n          }, {\n            key: \"_initKeyListeners\",\n            value: function _initKeyListeners() {\n              var _this6 = this;\n              this._handleKeyupEvent = function() {\n                if (_this6._updateFlagFromNumber(_this6.telInput.value)) {\n                  _this6._triggerCountryChange();\n                }\n              };\n              this.telInput.addEventListener(\"keyup\", this._handleKeyupEvent);\n              this._handleClipboardEvent = function() {\n                setTimeout(_this6._handleKeyupEvent);\n              };\n              this.telInput.addEventListener(\"cut\", this._handleClipboardEvent);\n              this.telInput.addEventListener(\"paste\", this._handleClipboardEvent);\n            }\n          }, {\n            key: \"_cap\",\n            value: function _cap(number) {\n              var max = this.telInput.getAttribute(\"maxlength\");\n              return max && number.length > max ? number.substr(0, max) : number;\n            }\n          }, {\n            key: \"_initBlurListeners\",\n            value: function _initBlurListeners() {\n              var _this7 = this;\n              this._handleSubmitOrBlurEvent = function() {\n                _this7._removeEmptyDialCode();\n              };\n              if (this.telInput.form)\n                this.telInput.form.addEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n              this.telInput.addEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n            }\n          }, {\n            key: \"_removeEmptyDialCode\",\n            value: function _removeEmptyDialCode() {\n              if (this.telInput.value.charAt(0) === \"+\") {\n                var numeric = this._getNumeric(this.telInput.value);\n                if (!numeric || this.selectedCountryData.dialCode === numeric) {\n                  this.telInput.value = \"\";\n                }\n              }\n            }\n          }, {\n            key: \"_getNumeric\",\n            value: function _getNumeric(s) {\n              return s.replace(/\\D/g, \"\");\n            }\n          }, {\n            key: \"_trigger\",\n            value: function _trigger(name) {\n              var e = document.createEvent(\"Event\");\n              e.initEvent(name, true, true);\n              this.telInput.dispatchEvent(e);\n            }\n          }, {\n            key: \"_showDropdown\",\n            value: function _showDropdown() {\n              this.countryList.classList.remove(\"iti__hide\");\n              this.selectedFlag.setAttribute(\"aria-expanded\", \"true\");\n              this._setDropdownPosition();\n              if (this.activeItem) {\n                this._highlightListItem(this.activeItem, false);\n                this._scrollTo(this.activeItem, true);\n              }\n              this._bindDropdownListeners();\n              this.dropdownArrow.classList.add(\"iti__arrow--up\");\n              this._trigger(\"open:countrydropdown\");\n            }\n          }, {\n            key: \"_toggleClass\",\n            value: function _toggleClass(el, className, shouldHaveClass) {\n              if (shouldHaveClass && !el.classList.contains(className))\n                el.classList.add(className);\n              else if (!shouldHaveClass && el.classList.contains(className))\n                el.classList.remove(className);\n            }\n          }, {\n            key: \"_setDropdownPosition\",\n            value: function _setDropdownPosition() {\n              var _this8 = this;\n              if (this.options.dropdownContainer) {\n                this.options.dropdownContainer.appendChild(this.dropdown);\n              }\n              if (!this.isMobile) {\n                var pos = this.telInput.getBoundingClientRect();\n                var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n                var inputTop = pos.top + windowTop;\n                var dropdownHeight = this.countryList.offsetHeight;\n                var dropdownFitsBelow = inputTop + this.telInput.offsetHeight + dropdownHeight < windowTop + window.innerHeight;\n                var dropdownFitsAbove = inputTop - dropdownHeight > windowTop;\n                this._toggleClass(this.countryList, \"iti__country-list--dropup\", !dropdownFitsBelow && dropdownFitsAbove);\n                if (this.options.dropdownContainer) {\n                  var extraTop = !dropdownFitsBelow && dropdownFitsAbove ? 0 : this.telInput.offsetHeight;\n                  this.dropdown.style.top = \"\".concat(inputTop + extraTop, \"px\");\n                  this.dropdown.style.left = \"\".concat(pos.left + document.body.scrollLeft, \"px\");\n                  this._handleWindowScroll = function() {\n                    return _this8._closeDropdown();\n                  };\n                  window.addEventListener(\"scroll\", this._handleWindowScroll);\n                }\n              }\n            }\n          }, {\n            key: \"_getClosestListItem\",\n            value: function _getClosestListItem(target) {\n              var el = target;\n              while (el && el !== this.countryList && !el.classList.contains(\"iti__country\")) {\n                el = el.parentNode;\n              }\n              return el === this.countryList ? null : el;\n            }\n          }, {\n            key: \"_bindDropdownListeners\",\n            value: function _bindDropdownListeners() {\n              var _this9 = this;\n              this._handleMouseoverCountryList = function(e) {\n                var listItem = _this9._getClosestListItem(e.target);\n                if (listItem)\n                  _this9._highlightListItem(listItem, false);\n              };\n              this.countryList.addEventListener(\"mouseover\", this._handleMouseoverCountryList);\n              this._handleClickCountryList = function(e) {\n                var listItem = _this9._getClosestListItem(e.target);\n                if (listItem)\n                  _this9._selectListItem(listItem);\n              };\n              this.countryList.addEventListener(\"click\", this._handleClickCountryList);\n              var isOpening = true;\n              this._handleClickOffToClose = function() {\n                if (!isOpening)\n                  _this9._closeDropdown();\n                isOpening = false;\n              };\n              document.documentElement.addEventListener(\"click\", this._handleClickOffToClose);\n              var query = \"\";\n              var queryTimer = null;\n              this._handleKeydownOnDropdown = function(e) {\n                e.preventDefault();\n                if (e.key === \"ArrowUp\" || e.key === \"Up\" || e.key === \"ArrowDown\" || e.key === \"Down\")\n                  _this9._handleUpDownKey(e.key);\n                else if (e.key === \"Enter\")\n                  _this9._handleEnterKey();\n                else if (e.key === \"Escape\")\n                  _this9._closeDropdown();\n                else if (/^[a-zA-ZÀ-ÿа-яА-Я ]$/.test(e.key)) {\n                  if (queryTimer)\n                    clearTimeout(queryTimer);\n                  query += e.key.toLowerCase();\n                  _this9._searchForCountry(query);\n                  queryTimer = setTimeout(function() {\n                    query = \"\";\n                  }, 1e3);\n                }\n              };\n              document.addEventListener(\"keydown\", this._handleKeydownOnDropdown);\n            }\n          }, {\n            key: \"_handleUpDownKey\",\n            value: function _handleUpDownKey(key) {\n              var next = key === \"ArrowUp\" || key === \"Up\" ? this.highlightedItem.previousElementSibling : this.highlightedItem.nextElementSibling;\n              if (next) {\n                if (next.classList.contains(\"iti__divider\")) {\n                  next = key === \"ArrowUp\" || key === \"Up\" ? next.previousElementSibling : next.nextElementSibling;\n                }\n                this._highlightListItem(next, true);\n              }\n            }\n          }, {\n            key: \"_handleEnterKey\",\n            value: function _handleEnterKey() {\n              if (this.highlightedItem)\n                this._selectListItem(this.highlightedItem);\n            }\n          }, {\n            key: \"_searchForCountry\",\n            value: function _searchForCountry(query) {\n              for (var i2 = 0; i2 < this.countries.length; i2++) {\n                if (this._startsWith(this.countries[i2].name, query)) {\n                  var listItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(this.countries[i2].iso2));\n                  this._highlightListItem(listItem, false);\n                  this._scrollTo(listItem, true);\n                  break;\n                }\n              }\n            }\n          }, {\n            key: \"_startsWith\",\n            value: function _startsWith(a, b) {\n              return a.substr(0, b.length).toLowerCase() === b;\n            }\n          }, {\n            key: \"_updateValFromNumber\",\n            value: function _updateValFromNumber(originalNumber) {\n              var number = originalNumber;\n              if (this.options.formatOnDisplay && window.intlTelInputUtils && this.selectedCountryData) {\n                var useNational = !this.options.separateDialCode && (this.options.nationalMode || number.charAt(0) !== \"+\");\n                var _intlTelInputUtils$nu = intlTelInputUtils.numberFormat, NATIONAL = _intlTelInputUtils$nu.NATIONAL, INTERNATIONAL = _intlTelInputUtils$nu.INTERNATIONAL;\n                var format = useNational ? NATIONAL : INTERNATIONAL;\n                number = intlTelInputUtils.formatNumber(number, this.selectedCountryData.iso2, format);\n              }\n              number = this._beforeSetNumber(number);\n              this.telInput.value = number;\n            }\n          }, {\n            key: \"_updateFlagFromNumber\",\n            value: function _updateFlagFromNumber(originalNumber) {\n              var number = originalNumber;\n              var selectedDialCode = this.selectedCountryData.dialCode;\n              var isNanp = selectedDialCode === \"1\";\n              if (number && this.options.nationalMode && isNanp && number.charAt(0) !== \"+\") {\n                if (number.charAt(0) !== \"1\")\n                  number = \"1\".concat(number);\n                number = \"+\".concat(number);\n              }\n              if (this.options.separateDialCode && selectedDialCode && number.charAt(0) !== \"+\") {\n                number = \"+\".concat(selectedDialCode).concat(number);\n              }\n              var dialCode = this._getDialCode(number, true);\n              var numeric = this._getNumeric(number);\n              var countryCode = null;\n              if (dialCode) {\n                var countryCodes = this.countryCodes[this._getNumeric(dialCode)];\n                var alreadySelected = countryCodes.indexOf(this.selectedCountryData.iso2) !== -1 && numeric.length <= dialCode.length - 1;\n                var isRegionlessNanpNumber = selectedDialCode === \"1\" && this._isRegionlessNanp(numeric);\n                if (!isRegionlessNanpNumber && !alreadySelected) {\n                  for (var j = 0; j < countryCodes.length; j++) {\n                    if (countryCodes[j]) {\n                      countryCode = countryCodes[j];\n                      break;\n                    }\n                  }\n                }\n              } else if (number.charAt(0) === \"+\" && numeric.length) {\n                countryCode = \"\";\n              } else if (!number || number === \"+\") {\n                countryCode = this.defaultCountry;\n              }\n              if (countryCode !== null) {\n                return this._setFlag(countryCode);\n              }\n              return false;\n            }\n          }, {\n            key: \"_isRegionlessNanp\",\n            value: function _isRegionlessNanp(number) {\n              var numeric = this._getNumeric(number);\n              if (numeric.charAt(0) === \"1\") {\n                var areaCode = numeric.substr(1, 3);\n                return regionlessNanpNumbers.indexOf(areaCode) !== -1;\n              }\n              return false;\n            }\n          }, {\n            key: \"_highlightListItem\",\n            value: function _highlightListItem(listItem, shouldFocus) {\n              var prevItem = this.highlightedItem;\n              if (prevItem)\n                prevItem.classList.remove(\"iti__highlight\");\n              this.highlightedItem = listItem;\n              this.highlightedItem.classList.add(\"iti__highlight\");\n              if (shouldFocus)\n                this.highlightedItem.focus();\n            }\n          }, {\n            key: \"_getCountryData\",\n            value: function _getCountryData(countryCode, ignoreOnlyCountriesOption, allowFail) {\n              var countryList = ignoreOnlyCountriesOption ? allCountries : this.countries;\n              for (var i2 = 0; i2 < countryList.length; i2++) {\n                if (countryList[i2].iso2 === countryCode) {\n                  return countryList[i2];\n                }\n              }\n              if (allowFail) {\n                return null;\n              }\n              throw new Error(\"No country data for '\".concat(countryCode, \"'\"));\n            }\n          }, {\n            key: \"_setFlag\",\n            value: function _setFlag(countryCode) {\n              var prevCountry = this.selectedCountryData.iso2 ? this.selectedCountryData : {};\n              this.selectedCountryData = countryCode ? this._getCountryData(countryCode, false, false) : {};\n              if (this.selectedCountryData.iso2) {\n                this.defaultCountry = this.selectedCountryData.iso2;\n              }\n              this.selectedFlagInner.setAttribute(\"class\", \"iti__flag iti__\".concat(countryCode));\n              var title = countryCode ? \"\".concat(this.selectedCountryData.name, \": +\").concat(this.selectedCountryData.dialCode) : \"Unknown\";\n              this.selectedFlag.setAttribute(\"title\", title);\n              if (this.options.separateDialCode) {\n                var dialCode = this.selectedCountryData.dialCode ? \"+\".concat(this.selectedCountryData.dialCode) : \"\";\n                this.selectedDialCode.innerHTML = dialCode;\n                var selectedFlagWidth = this.selectedFlag.offsetWidth || this._getHiddenSelectedFlagWidth();\n                this.telInput.style.paddingLeft = \"\".concat(selectedFlagWidth + 6, \"px\");\n              }\n              this._updatePlaceholder();\n              if (this.options.allowDropdown) {\n                var prevItem = this.activeItem;\n                if (prevItem) {\n                  prevItem.classList.remove(\"iti__active\");\n                  prevItem.setAttribute(\"aria-selected\", \"false\");\n                }\n                if (countryCode) {\n                  var nextItem = this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode, \"-preferred\")) || this.countryList.querySelector(\"#iti-\".concat(this.id, \"__item-\").concat(countryCode));\n                  nextItem.setAttribute(\"aria-selected\", \"true\");\n                  nextItem.classList.add(\"iti__active\");\n                  this.activeItem = nextItem;\n                  this.selectedFlag.setAttribute(\"aria-activedescendant\", nextItem.getAttribute(\"id\"));\n                }\n              }\n              return prevCountry.iso2 !== countryCode;\n            }\n          }, {\n            key: \"_getHiddenSelectedFlagWidth\",\n            value: function _getHiddenSelectedFlagWidth() {\n              var containerClone = this.telInput.parentNode.cloneNode();\n              containerClone.style.visibility = \"hidden\";\n              document.body.appendChild(containerClone);\n              var flagsContainerClone = this.flagsContainer.cloneNode();\n              containerClone.appendChild(flagsContainerClone);\n              var selectedFlagClone = this.selectedFlag.cloneNode(true);\n              flagsContainerClone.appendChild(selectedFlagClone);\n              var width = selectedFlagClone.offsetWidth;\n              containerClone.parentNode.removeChild(containerClone);\n              return width;\n            }\n          }, {\n            key: \"_updatePlaceholder\",\n            value: function _updatePlaceholder() {\n              var shouldSetPlaceholder = this.options.autoPlaceholder === \"aggressive\" || !this.hadInitialPlaceholder && this.options.autoPlaceholder === \"polite\";\n              if (window.intlTelInputUtils && shouldSetPlaceholder) {\n                var numberType = intlTelInputUtils.numberType[this.options.placeholderNumberType];\n                var placeholder = this.selectedCountryData.iso2 ? intlTelInputUtils.getExampleNumber(this.selectedCountryData.iso2, this.options.nationalMode, numberType) : \"\";\n                placeholder = this._beforeSetNumber(placeholder);\n                if (typeof this.options.customPlaceholder === \"function\") {\n                  placeholder = this.options.customPlaceholder(placeholder, this.selectedCountryData);\n                }\n                this.telInput.setAttribute(\"placeholder\", placeholder);\n              }\n            }\n          }, {\n            key: \"_selectListItem\",\n            value: function _selectListItem(listItem) {\n              var flagChanged = this._setFlag(listItem.getAttribute(\"data-country-code\"));\n              this._closeDropdown();\n              this._updateDialCode(listItem.getAttribute(\"data-dial-code\"), true);\n              this.telInput.focus();\n              var len = this.telInput.value.length;\n              this.telInput.setSelectionRange(len, len);\n              if (flagChanged) {\n                this._triggerCountryChange();\n              }\n            }\n          }, {\n            key: \"_closeDropdown\",\n            value: function _closeDropdown() {\n              this.countryList.classList.add(\"iti__hide\");\n              this.selectedFlag.setAttribute(\"aria-expanded\", \"false\");\n              this.dropdownArrow.classList.remove(\"iti__arrow--up\");\n              document.removeEventListener(\"keydown\", this._handleKeydownOnDropdown);\n              document.documentElement.removeEventListener(\"click\", this._handleClickOffToClose);\n              this.countryList.removeEventListener(\"mouseover\", this._handleMouseoverCountryList);\n              this.countryList.removeEventListener(\"click\", this._handleClickCountryList);\n              if (this.options.dropdownContainer) {\n                if (!this.isMobile)\n                  window.removeEventListener(\"scroll\", this._handleWindowScroll);\n                if (this.dropdown.parentNode)\n                  this.dropdown.parentNode.removeChild(this.dropdown);\n              }\n              this._trigger(\"close:countrydropdown\");\n            }\n          }, {\n            key: \"_scrollTo\",\n            value: function _scrollTo(element, middle) {\n              var container = this.countryList;\n              var windowTop = window.pageYOffset || document.documentElement.scrollTop;\n              var containerHeight = container.offsetHeight;\n              var containerTop = container.getBoundingClientRect().top + windowTop;\n              var containerBottom = containerTop + containerHeight;\n              var elementHeight = element.offsetHeight;\n              var elementTop = element.getBoundingClientRect().top + windowTop;\n              var elementBottom = elementTop + elementHeight;\n              var newScrollTop = elementTop - containerTop + container.scrollTop;\n              var middleOffset = containerHeight / 2 - elementHeight / 2;\n              if (elementTop < containerTop) {\n                if (middle)\n                  newScrollTop -= middleOffset;\n                container.scrollTop = newScrollTop;\n              } else if (elementBottom > containerBottom) {\n                if (middle)\n                  newScrollTop += middleOffset;\n                var heightDifference = containerHeight - elementHeight;\n                container.scrollTop = newScrollTop - heightDifference;\n              }\n            }\n          }, {\n            key: \"_updateDialCode\",\n            value: function _updateDialCode(newDialCodeBare, hasSelectedListItem) {\n              var inputVal = this.telInput.value;\n              var newDialCode = \"+\".concat(newDialCodeBare);\n              var newNumber;\n              if (inputVal.charAt(0) === \"+\") {\n                var prevDialCode = this._getDialCode(inputVal);\n                if (prevDialCode) {\n                  newNumber = inputVal.replace(prevDialCode, newDialCode);\n                } else {\n                  newNumber = newDialCode;\n                }\n              } else if (this.options.nationalMode || this.options.separateDialCode) {\n                return;\n              } else {\n                if (inputVal) {\n                  newNumber = newDialCode + inputVal;\n                } else if (hasSelectedListItem || !this.options.autoHideDialCode) {\n                  newNumber = newDialCode;\n                } else {\n                  return;\n                }\n              }\n              this.telInput.value = newNumber;\n            }\n          }, {\n            key: \"_getDialCode\",\n            value: function _getDialCode(number, includeAreaCode) {\n              var dialCode = \"\";\n              if (number.charAt(0) === \"+\") {\n                var numericChars = \"\";\n                for (var i2 = 0; i2 < number.length; i2++) {\n                  var c2 = number.charAt(i2);\n                  if (!isNaN(parseInt(c2, 10))) {\n                    numericChars += c2;\n                    if (includeAreaCode) {\n                      if (this.countryCodes[numericChars]) {\n                        dialCode = number.substr(0, i2 + 1);\n                      }\n                    } else {\n                      if (this.dialCodes[numericChars]) {\n                        dialCode = number.substr(0, i2 + 1);\n                        break;\n                      }\n                    }\n                    if (numericChars.length === this.countryCodeMaxLen) {\n                      break;\n                    }\n                  }\n                }\n              }\n              return dialCode;\n            }\n          }, {\n            key: \"_getFullNumber\",\n            value: function _getFullNumber() {\n              var val = this.telInput.value.trim();\n              var dialCode = this.selectedCountryData.dialCode;\n              var prefix;\n              var numericVal = this._getNumeric(val);\n              if (this.options.separateDialCode && val.charAt(0) !== \"+\" && dialCode && numericVal) {\n                prefix = \"+\".concat(dialCode);\n              } else {\n                prefix = \"\";\n              }\n              return prefix + val;\n            }\n          }, {\n            key: \"_beforeSetNumber\",\n            value: function _beforeSetNumber(originalNumber) {\n              var number = originalNumber;\n              if (this.options.separateDialCode) {\n                var dialCode = this._getDialCode(number);\n                if (dialCode) {\n                  dialCode = \"+\".concat(this.selectedCountryData.dialCode);\n                  var start = number[dialCode.length] === \" \" || number[dialCode.length] === \"-\" ? dialCode.length + 1 : dialCode.length;\n                  number = number.substr(start);\n                }\n              }\n              return this._cap(number);\n            }\n          }, {\n            key: \"_triggerCountryChange\",\n            value: function _triggerCountryChange() {\n              this._trigger(\"countrychange\");\n            }\n          }, {\n            key: \"handleAutoCountry\",\n            value: function handleAutoCountry() {\n              if (this.options.initialCountry === \"auto\") {\n                this.defaultCountry = window.intlTelInputGlobals.autoCountry;\n                if (!this.telInput.value) {\n                  this.setCountry(this.defaultCountry);\n                }\n                this.resolveAutoCountryPromise();\n              }\n            }\n          }, {\n            key: \"handleUtils\",\n            value: function handleUtils() {\n              if (window.intlTelInputUtils) {\n                if (this.telInput.value) {\n                  this._updateValFromNumber(this.telInput.value);\n                }\n                this._updatePlaceholder();\n              }\n              this.resolveUtilsScriptPromise();\n            }\n          }, {\n            key: \"destroy\",\n            value: function destroy() {\n              var form = this.telInput.form;\n              if (this.options.allowDropdown) {\n                this._closeDropdown();\n                this.selectedFlag.removeEventListener(\"click\", this._handleClickSelectedFlag);\n                this.flagsContainer.removeEventListener(\"keydown\", this._handleFlagsContainerKeydown);\n                var label = this._getClosestLabel();\n                if (label)\n                  label.removeEventListener(\"click\", this._handleLabelClick);\n              }\n              if (this.hiddenInput && form)\n                form.removeEventListener(\"submit\", this._handleHiddenInputSubmit);\n              if (this.options.autoHideDialCode) {\n                if (form)\n                  form.removeEventListener(\"submit\", this._handleSubmitOrBlurEvent);\n                this.telInput.removeEventListener(\"blur\", this._handleSubmitOrBlurEvent);\n              }\n              this.telInput.removeEventListener(\"keyup\", this._handleKeyupEvent);\n              this.telInput.removeEventListener(\"cut\", this._handleClipboardEvent);\n              this.telInput.removeEventListener(\"paste\", this._handleClipboardEvent);\n              this.telInput.removeAttribute(\"data-intl-tel-input-id\");\n              var wrapper = this.telInput.parentNode;\n              wrapper.parentNode.insertBefore(this.telInput, wrapper);\n              wrapper.parentNode.removeChild(wrapper);\n              delete window.intlTelInputGlobals.instances[this.id];\n            }\n          }, {\n            key: \"getExtension\",\n            value: function getExtension() {\n              if (window.intlTelInputUtils) {\n                return intlTelInputUtils.getExtension(this._getFullNumber(), this.selectedCountryData.iso2);\n              }\n              return \"\";\n            }\n          }, {\n            key: \"getNumber\",\n            value: function getNumber(format) {\n              if (window.intlTelInputUtils) {\n                var iso2 = this.selectedCountryData.iso2;\n                return intlTelInputUtils.formatNumber(this._getFullNumber(), iso2, format);\n              }\n              return \"\";\n            }\n          }, {\n            key: \"getNumberType\",\n            value: function getNumberType() {\n              if (window.intlTelInputUtils) {\n                return intlTelInputUtils.getNumberType(this._getFullNumber(), this.selectedCountryData.iso2);\n              }\n              return -99;\n            }\n          }, {\n            key: \"getSelectedCountryData\",\n            value: function getSelectedCountryData() {\n              return this.selectedCountryData;\n            }\n          }, {\n            key: \"getValidationError\",\n            value: function getValidationError() {\n              if (window.intlTelInputUtils) {\n                var iso2 = this.selectedCountryData.iso2;\n                return intlTelInputUtils.getValidationError(this._getFullNumber(), iso2);\n              }\n              return -99;\n            }\n          }, {\n            key: \"isValidNumber\",\n            value: function isValidNumber() {\n              var val = this._getFullNumber().trim();\n              var countryCode = this.options.nationalMode ? this.selectedCountryData.iso2 : \"\";\n              return window.intlTelInputUtils ? intlTelInputUtils.isValidNumber(val, countryCode) : null;\n            }\n          }, {\n            key: \"setCountry\",\n            value: function setCountry(originalCountryCode) {\n              var countryCode = originalCountryCode.toLowerCase();\n              if (!this.selectedFlagInner.classList.contains(\"iti__\".concat(countryCode))) {\n                this._setFlag(countryCode);\n                this._updateDialCode(this.selectedCountryData.dialCode, false);\n                this._triggerCountryChange();\n              }\n            }\n          }, {\n            key: \"setNumber\",\n            value: function setNumber(number) {\n              var flagChanged = this._updateFlagFromNumber(number);\n              this._updateValFromNumber(number);\n              if (flagChanged) {\n                this._triggerCountryChange();\n              }\n            }\n          }, {\n            key: \"setPlaceholderNumberType\",\n            value: function setPlaceholderNumberType(type) {\n              this.options.placeholderNumberType = type;\n              this._updatePlaceholder();\n            }\n          }]);\n          return Iti2;\n        }();\n        intlTelInputGlobals.getCountryData = function() {\n          return allCountries;\n        };\n        var injectScript = function injectScript2(path, handleSuccess, handleFailure) {\n          var script = document.createElement(\"script\");\n          script.onload = function() {\n            forEachInstance(\"handleUtils\");\n            if (handleSuccess)\n              handleSuccess();\n          };\n          script.onerror = function() {\n            forEachInstance(\"rejectUtilsScriptPromise\");\n            if (handleFailure)\n              handleFailure();\n          };\n          script.className = \"iti-load-utils\";\n          script.async = true;\n          script.src = path;\n          document.body.appendChild(script);\n        };\n        intlTelInputGlobals.loadUtils = function(path) {\n          if (!window.intlTelInputUtils && !window.intlTelInputGlobals.startedLoadingUtilsScript) {\n            window.intlTelInputGlobals.startedLoadingUtilsScript = true;\n            if (typeof Promise !== \"undefined\") {\n              return new Promise(function(resolve, reject) {\n                return injectScript(path, resolve, reject);\n              });\n            }\n            injectScript(path);\n          }\n          return null;\n        };\n        intlTelInputGlobals.defaults = defaults;\n        intlTelInputGlobals.version = \"17.0.21\";\n        return function(input, options) {\n          var iti = new Iti(input, options);\n          iti._init();\n          input.setAttribute(\"data-intl-tel-input-id\", iti.id);\n          window.intlTelInputGlobals.instances[iti.id] = iti;\n          return iti;\n        };\n      }();\n    });\n  }\n});\n\n// node_modules/intl-tel-input/index.js\nvar require_intl_tel_input = __commonJS({\n  \"node_modules/intl-tel-input/index.js\"(exports, module) {\n    module.exports = require_intlTelInput();\n  }\n});\nexport default require_intl_tel_input();\n//# sourceMappingURL=intl-tel-input.js.map\n","// node_modules/intl-tel-input/build/js/utils.js\n(function() {\n  var aa = this || self;\n  function k(a, b) {\n    a = a.split(\".\");\n    var c = aa;\n    a[0] in c || \"undefined\" == typeof c.execScript || c.execScript(\"var \" + a[0]);\n    for (var d; a.length && (d = a.shift()); )\n      a.length || void 0 === b ? c[d] && c[d] !== Object.prototype[d] ? c = c[d] : c = c[d] = {} : c[d] = b;\n  }\n  function m(a, b) {\n    function c() {\n    }\n    c.prototype = b.prototype;\n    a.$ = b.prototype;\n    a.prototype = new c();\n    a.prototype.constructor = a;\n    a.fa = function(d, e, g) {\n      for (var f = Array(arguments.length - 2), h = 2; h < arguments.length; h++)\n        f[h - 2] = arguments[h];\n      return b.prototype[e].apply(d, f);\n    };\n  }\n  ;\n  function ba(a) {\n    var b = [], c = 0, d;\n    for (d in a)\n      b[c++] = a[d];\n    return b;\n  }\n  ;\n  function ca(a, b) {\n    a.sort(b || da);\n  }\n  function da(a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n  ;\n  function ea(a, b) {\n    this.g = a;\n    this.m = !!b.o;\n    this.i = b.h;\n    this.v = b.type;\n    this.u = false;\n    switch (this.i) {\n      case fa:\n      case ha:\n      case ia:\n      case ja:\n      case ka:\n      case la:\n      case ma:\n        this.u = true;\n    }\n    this.l = b.defaultValue;\n  }\n  var ma = 1, la = 2, fa = 3, ha = 4, ia = 6, ja = 16, ka = 18;\n  function na(a, b) {\n    this.i = a;\n    this.g = {};\n    for (a = 0; a < b.length; a++) {\n      var c = b[a];\n      this.g[c.g] = c;\n    }\n  }\n  function oa(a) {\n    a = ba(a.g);\n    ca(a, function(b, c) {\n      return b.g - c.g;\n    });\n    return a;\n  }\n  ;\n  function n() {\n    this.g = {};\n    this.l = this.j().g;\n    this.i = this.m = null;\n  }\n  n.prototype.has = function(a) {\n    return null != this.g[a.g];\n  };\n  n.prototype.get = function(a, b) {\n    return p(this, a.g, b);\n  };\n  n.prototype.set = function(a, b) {\n    q(this, a.g, b);\n  };\n  n.prototype.add = function(a, b) {\n    r(this, a.g, b);\n  };\n  function t(a, b) {\n    for (var c = oa(a.j()), d = 0; d < c.length; d++) {\n      var e = c[d], g = e.g;\n      if (null != b.g[g]) {\n        a.i && delete a.i[e.g];\n        var f = 11 == e.i || 10 == e.i;\n        if (e.m) {\n          e = u(b, g);\n          for (var h = 0; h < e.length; h++)\n            r(a, g, f ? e[h].clone() : e[h]);\n        } else\n          e = v(b, g), f ? (f = v(a, g)) ? t(f, e) : q(a, g, e.clone()) : q(a, g, e);\n      }\n    }\n  }\n  n.prototype.clone = function() {\n    var a = new this.constructor();\n    a != this && (a.g = {}, a.i && (a.i = {}), t(a, this));\n    return a;\n  };\n  function v(a, b) {\n    var c = a.g[b];\n    if (null == c)\n      return null;\n    if (a.m) {\n      if (!(b in a.i)) {\n        var d = a.m, e = a.l[b];\n        if (null != c)\n          if (e.m) {\n            for (var g = [], f = 0; f < c.length; f++)\n              g[f] = d.i(e, c[f]);\n            c = g;\n          } else\n            c = d.i(e, c);\n        return a.i[b] = c;\n      }\n      return a.i[b];\n    }\n    return c;\n  }\n  function p(a, b, c) {\n    var d = v(a, b);\n    return a.l[b].m ? d[c || 0] : d;\n  }\n  function w(a, b) {\n    if (null != a.g[b])\n      a = p(a, b, void 0);\n    else\n      a: {\n        a = a.l[b];\n        if (void 0 === a.l)\n          if (b = a.v, b === Boolean)\n            a.l = false;\n          else if (b === Number)\n            a.l = 0;\n          else if (b === String)\n            a.l = a.u ? \"0\" : \"\";\n          else {\n            a = new b();\n            break a;\n          }\n        a = a.l;\n      }\n    return a;\n  }\n  function u(a, b) {\n    return v(a, b) || [];\n  }\n  function x(a, b) {\n    return a.l[b].m ? null != a.g[b] ? a.g[b].length : 0 : null != a.g[b] ? 1 : 0;\n  }\n  function q(a, b, c) {\n    a.g[b] = c;\n    a.i && (a.i[b] = c);\n  }\n  function r(a, b, c) {\n    a.g[b] || (a.g[b] = []);\n    a.g[b].push(c);\n    a.i && delete a.i[b];\n  }\n  function y(a, b) {\n    var c = [], d;\n    for (d in b)\n      0 != d && c.push(new ea(d, b[d]));\n    return new na(a, c);\n  }\n  ;\n  function A() {\n  }\n  A.prototype.g = function(a) {\n    new a.i();\n    throw Error(\"Unimplemented\");\n  };\n  A.prototype.i = function(a, b) {\n    if (11 == a.i || 10 == a.i)\n      return b instanceof n ? b : this.g(a.v.prototype.j(), b);\n    if (14 == a.i)\n      return \"string\" === typeof b && B.test(b) && (a = Number(b), 0 < a) ? a : b;\n    if (!a.u)\n      return b;\n    a = a.v;\n    if (a === String) {\n      if (\"number\" === typeof b)\n        return String(b);\n    } else if (a === Number && \"string\" === typeof b && (\"Infinity\" === b || \"-Infinity\" === b || \"NaN\" === b || B.test(b)))\n      return Number(b);\n    return b;\n  };\n  var B = /^-?[0-9]+$/;\n  function C() {\n  }\n  m(C, A);\n  C.prototype.g = function(a, b) {\n    a = new a.i();\n    a.m = this;\n    a.g = b;\n    a.i = {};\n    return a;\n  };\n  function D() {\n  }\n  m(D, C);\n  D.prototype.i = function(a, b) {\n    return 8 == a.i ? !!b : A.prototype.i.apply(this, arguments);\n  };\n  D.prototype.g = function(a, b) {\n    return D.$.g.call(this, a, b);\n  };\n  function E(a, b) {\n    null != a && this.g.apply(this, arguments);\n  }\n  E.prototype.i = \"\";\n  E.prototype.set = function(a) {\n    this.i = \"\" + a;\n  };\n  E.prototype.g = function(a, b, c) {\n    this.i += String(a);\n    if (null != b)\n      for (var d = 1; d < arguments.length; d++)\n        this.i += arguments[d];\n    return this;\n  };\n  E.prototype.toString = function() {\n    return this.i;\n  };\n  function F() {\n    n.call(this);\n  }\n  m(F, n);\n  var pa = null;\n  function G() {\n    n.call(this);\n  }\n  m(G, n);\n  var qa = null;\n  function H() {\n    n.call(this);\n  }\n  m(H, n);\n  var ra = null;\n  F.prototype.j = function() {\n    var a = pa;\n    a || (pa = a = y(F, { 0: { name: \"NumberFormat\", s: \"i18n.phonenumbers.NumberFormat\" }, 1: { name: \"pattern\", required: true, h: 9, type: String }, 2: { name: \"format\", required: true, h: 9, type: String }, 3: { name: \"leading_digits_pattern\", o: true, h: 9, type: String }, 4: { name: \"national_prefix_formatting_rule\", h: 9, type: String }, 6: { name: \"national_prefix_optional_when_formatting\", h: 8, defaultValue: false, type: Boolean }, 5: { name: \"domestic_carrier_code_formatting_rule\", h: 9, type: String } }));\n    return a;\n  };\n  F.j = F.prototype.j;\n  G.prototype.j = function() {\n    var a = qa;\n    a || (qa = a = y(G, { 0: { name: \"PhoneNumberDesc\", s: \"i18n.phonenumbers.PhoneNumberDesc\" }, 2: { name: \"national_number_pattern\", h: 9, type: String }, 9: { name: \"possible_length\", o: true, h: 5, type: Number }, 10: { name: \"possible_length_local_only\", o: true, h: 5, type: Number }, 6: { name: \"example_number\", h: 9, type: String } }));\n    return a;\n  };\n  G.j = G.prototype.j;\n  H.prototype.j = function() {\n    var a = ra;\n    a || (ra = a = y(H, {\n      0: { name: \"PhoneMetadata\", s: \"i18n.phonenumbers.PhoneMetadata\" },\n      1: { name: \"general_desc\", h: 11, type: G },\n      2: { name: \"fixed_line\", h: 11, type: G },\n      3: { name: \"mobile\", h: 11, type: G },\n      4: { name: \"toll_free\", h: 11, type: G },\n      5: { name: \"premium_rate\", h: 11, type: G },\n      6: { name: \"shared_cost\", h: 11, type: G },\n      7: { name: \"personal_number\", h: 11, type: G },\n      8: { name: \"voip\", h: 11, type: G },\n      21: { name: \"pager\", h: 11, type: G },\n      25: { name: \"uan\", h: 11, type: G },\n      27: { name: \"emergency\", h: 11, type: G },\n      28: { name: \"voicemail\", h: 11, type: G },\n      29: { name: \"short_code\", h: 11, type: G },\n      30: { name: \"standard_rate\", h: 11, type: G },\n      31: { name: \"carrier_specific\", h: 11, type: G },\n      33: { name: \"sms_services\", h: 11, type: G },\n      24: { name: \"no_international_dialling\", h: 11, type: G },\n      9: { name: \"id\", required: true, h: 9, type: String },\n      10: { name: \"country_code\", h: 5, type: Number },\n      11: { name: \"international_prefix\", h: 9, type: String },\n      17: { name: \"preferred_international_prefix\", h: 9, type: String },\n      12: { name: \"national_prefix\", h: 9, type: String },\n      13: { name: \"preferred_extn_prefix\", h: 9, type: String },\n      15: {\n        name: \"national_prefix_for_parsing\",\n        h: 9,\n        type: String\n      },\n      16: { name: \"national_prefix_transform_rule\", h: 9, type: String },\n      18: { name: \"same_mobile_and_fixed_line_pattern\", h: 8, defaultValue: false, type: Boolean },\n      19: { name: \"number_format\", o: true, h: 11, type: F },\n      20: { name: \"intl_number_format\", o: true, h: 11, type: F },\n      22: { name: \"main_country_for_code\", h: 8, defaultValue: false, type: Boolean },\n      23: { name: \"leading_digits\", h: 9, type: String }\n    }));\n    return a;\n  };\n  H.j = H.prototype.j;\n  function I() {\n    n.call(this);\n  }\n  m(I, n);\n  var sa = null, ta = { ea: 0, da: 1, ca: 5, ba: 10, aa: 20 };\n  I.prototype.j = function() {\n    var a = sa;\n    a || (sa = a = y(I, { 0: { name: \"PhoneNumber\", s: \"i18n.phonenumbers.PhoneNumber\" }, 1: { name: \"country_code\", required: true, h: 5, type: Number }, 2: { name: \"national_number\", required: true, h: 4, type: Number }, 3: { name: \"extension\", h: 9, type: String }, 4: { name: \"italian_leading_zero\", h: 8, type: Boolean }, 8: { name: \"number_of_leading_zeros\", h: 5, defaultValue: 1, type: Number }, 5: { name: \"raw_input\", h: 9, type: String }, 6: { name: \"country_code_source\", h: 14, defaultValue: 0, type: ta }, 7: {\n      name: \"preferred_domestic_carrier_code\",\n      h: 9,\n      type: String\n    } }));\n    return a;\n  };\n  I.ctor = I;\n  I.ctor.j = I.prototype.j;\n  var J = {\n    1: \"US AG AI AS BB BM BS CA DM DO GD GU JM KN KY LC MP MS PR SX TC TT VC VG VI\".split(\" \"),\n    7: [\"RU\", \"KZ\"],\n    20: [\"EG\"],\n    27: [\"ZA\"],\n    30: [\"GR\"],\n    31: [\"NL\"],\n    32: [\"BE\"],\n    33: [\"FR\"],\n    34: [\"ES\"],\n    36: [\"HU\"],\n    39: [\"IT\", \"VA\"],\n    40: [\"RO\"],\n    41: [\"CH\"],\n    43: [\"AT\"],\n    44: [\"GB\", \"GG\", \"IM\", \"JE\"],\n    45: [\"DK\"],\n    46: [\"SE\"],\n    47: [\"NO\", \"SJ\"],\n    48: [\"PL\"],\n    49: [\"DE\"],\n    51: [\"PE\"],\n    52: [\"MX\"],\n    53: [\"CU\"],\n    54: [\"AR\"],\n    55: [\"BR\"],\n    56: [\"CL\"],\n    57: [\"CO\"],\n    58: [\"VE\"],\n    60: [\"MY\"],\n    61: [\"AU\", \"CC\", \"CX\"],\n    62: [\"ID\"],\n    63: [\"PH\"],\n    64: [\"NZ\"],\n    65: [\"SG\"],\n    66: [\"TH\"],\n    81: [\"JP\"],\n    82: [\"KR\"],\n    84: [\"VN\"],\n    86: [\"CN\"],\n    90: [\"TR\"],\n    91: [\"IN\"],\n    92: [\"PK\"],\n    93: [\"AF\"],\n    94: [\"LK\"],\n    95: [\"MM\"],\n    98: [\"IR\"],\n    211: [\"SS\"],\n    212: [\"MA\", \"EH\"],\n    213: [\"DZ\"],\n    216: [\"TN\"],\n    218: [\"LY\"],\n    220: [\"GM\"],\n    221: [\"SN\"],\n    222: [\"MR\"],\n    223: [\"ML\"],\n    224: [\"GN\"],\n    225: [\"CI\"],\n    226: [\"BF\"],\n    227: [\"NE\"],\n    228: [\"TG\"],\n    229: [\"BJ\"],\n    230: [\"MU\"],\n    231: [\"LR\"],\n    232: [\"SL\"],\n    233: [\"GH\"],\n    234: [\"NG\"],\n    235: [\"TD\"],\n    236: [\"CF\"],\n    237: [\"CM\"],\n    238: [\"CV\"],\n    239: [\"ST\"],\n    240: [\"GQ\"],\n    241: [\"GA\"],\n    242: [\"CG\"],\n    243: [\"CD\"],\n    244: [\"AO\"],\n    245: [\"GW\"],\n    246: [\"IO\"],\n    247: [\"AC\"],\n    248: [\"SC\"],\n    249: [\"SD\"],\n    250: [\"RW\"],\n    251: [\"ET\"],\n    252: [\"SO\"],\n    253: [\"DJ\"],\n    254: [\"KE\"],\n    255: [\"TZ\"],\n    256: [\"UG\"],\n    257: [\"BI\"],\n    258: [\"MZ\"],\n    260: [\"ZM\"],\n    261: [\"MG\"],\n    262: [\"RE\", \"YT\"],\n    263: [\"ZW\"],\n    264: [\"NA\"],\n    265: [\"MW\"],\n    266: [\"LS\"],\n    267: [\"BW\"],\n    268: [\"SZ\"],\n    269: [\"KM\"],\n    290: [\"SH\", \"TA\"],\n    291: [\"ER\"],\n    297: [\"AW\"],\n    298: [\"FO\"],\n    299: [\"GL\"],\n    350: [\"GI\"],\n    351: [\"PT\"],\n    352: [\"LU\"],\n    353: [\"IE\"],\n    354: [\"IS\"],\n    355: [\"AL\"],\n    356: [\"MT\"],\n    357: [\"CY\"],\n    358: [\"FI\", \"AX\"],\n    359: [\"BG\"],\n    370: [\"LT\"],\n    371: [\"LV\"],\n    372: [\"EE\"],\n    373: [\"MD\"],\n    374: [\"AM\"],\n    375: [\"BY\"],\n    376: [\"AD\"],\n    377: [\"MC\"],\n    378: [\"SM\"],\n    380: [\"UA\"],\n    381: [\"RS\"],\n    382: [\"ME\"],\n    383: [\"XK\"],\n    385: [\"HR\"],\n    386: [\"SI\"],\n    387: [\"BA\"],\n    389: [\"MK\"],\n    420: [\"CZ\"],\n    421: [\"SK\"],\n    423: [\"LI\"],\n    500: [\"FK\"],\n    501: [\"BZ\"],\n    502: [\"GT\"],\n    503: [\"SV\"],\n    504: [\"HN\"],\n    505: [\"NI\"],\n    506: [\"CR\"],\n    507: [\"PA\"],\n    508: [\"PM\"],\n    509: [\"HT\"],\n    590: [\"GP\", \"BL\", \"MF\"],\n    591: [\"BO\"],\n    592: [\"GY\"],\n    593: [\"EC\"],\n    594: [\"GF\"],\n    595: [\"PY\"],\n    596: [\"MQ\"],\n    597: [\"SR\"],\n    598: [\"UY\"],\n    599: [\"CW\", \"BQ\"],\n    670: [\"TL\"],\n    672: [\"NF\"],\n    673: [\"BN\"],\n    674: [\"NR\"],\n    675: [\"PG\"],\n    676: [\"TO\"],\n    677: [\"SB\"],\n    678: [\"VU\"],\n    679: [\"FJ\"],\n    680: [\"PW\"],\n    681: [\"WF\"],\n    682: [\"CK\"],\n    683: [\"NU\"],\n    685: [\"WS\"],\n    686: [\"KI\"],\n    687: [\"NC\"],\n    688: [\"TV\"],\n    689: [\"PF\"],\n    690: [\"TK\"],\n    691: [\"FM\"],\n    692: [\"MH\"],\n    800: [\"001\"],\n    808: [\"001\"],\n    850: [\"KP\"],\n    852: [\"HK\"],\n    853: [\"MO\"],\n    855: [\"KH\"],\n    856: [\"LA\"],\n    870: [\"001\"],\n    878: [\"001\"],\n    880: [\"BD\"],\n    881: [\"001\"],\n    882: [\"001\"],\n    883: [\"001\"],\n    886: [\"TW\"],\n    888: [\"001\"],\n    960: [\"MV\"],\n    961: [\"LB\"],\n    962: [\"JO\"],\n    963: [\"SY\"],\n    964: [\"IQ\"],\n    965: [\"KW\"],\n    966: [\"SA\"],\n    967: [\"YE\"],\n    968: [\"OM\"],\n    970: [\"PS\"],\n    971: [\"AE\"],\n    972: [\"IL\"],\n    973: [\"BH\"],\n    974: [\"QA\"],\n    975: [\"BT\"],\n    976: [\"MN\"],\n    977: [\"NP\"],\n    979: [\"001\"],\n    992: [\"TJ\"],\n    993: [\"TM\"],\n    994: [\"AZ\"],\n    995: [\"GE\"],\n    996: [\"KG\"],\n    998: [\"UZ\"]\n  }, va = {\n    AC: [, [\n      ,\n      ,\n      \"(?:[01589]\\\\d|[46])\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6]\n    ], [, , \"6[2-467]\\\\d{3}\", , , , \"62889\", , , [5]], [, , \"4\\\\d{4}\", , , , \"40123\", , , [5]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AC\", 247, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"(?:0[1-9]|[1589]\\\\d)\\\\d{4}\", , , , \"542011\", , , [6]], , , [, , , , , , , , , [-1]]],\n    AD: [\n      ,\n      [, , \"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\", , , , , , , [6, 8, 9]],\n      [, , \"[78]\\\\d{5}\", , , , \"712345\", , , [6]],\n      [, , \"690\\\\d{6}|[356]\\\\d{5}\", , , , \"312345\", , , [6, 9]],\n      [, , \"180[02]\\\\d{4}\", , , , \"18001234\", , , [8]],\n      [, , \"[19]\\\\d{5}\", , , , \"912345\", , , [6]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AD\",\n      376,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[135-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"1800\\\\d{4}\", , , , , , , [8]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AE: [\n      ,\n      [, , \"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\", , , , , , , [5, 6, 7, 8, 9, 10, 11, 12]],\n      [, , \"[2-4679][2-8]\\\\d{6}\", , , , \"22345678\", , , [8], [7]],\n      [, , \"5[024-68]\\\\d{7}\", , , , \"501234567\", , , [9]],\n      [, , \"400\\\\d{6}|800\\\\d{2,9}\", , , , \"800123456\"],\n      [, , \"900[02]\\\\d{5}\", , , , \"900234567\", , , [9]],\n      [, , \"700[05]\\\\d{5}\", , , , \"700012345\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AE\",\n      971,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{2,9})\", \"$1 $2\", [\"60|8\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[236]|[479][2-8]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{5})\", \"$1 $2 $3\", [\"[479]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"600[25]\\\\d{5}\", , , , \"600212345\", , , [9]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AF: [, [, , \"[2-7]\\\\d{8}\", , , , , , , [9], [7]], [\n      ,\n      ,\n      \"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"234567890\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"7\\\\d{8}\", , , , \"701234567\", , , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AF\", 93, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[1-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"]], [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AG: [\n      ,\n      [, , \"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"268(?:4(?:6[0-38]|84)|56[0-2])\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"2684601234\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}\", , , , \"2684641234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , \"26848[01]\\\\d{4}\", , , , \"2684801234\", , , , [7]],\n      \"AG\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([457]\\\\d{6})$|1\",\n      \"268$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , \"26840[69]\\\\d{4}\", , , , \"2684061234\", , , , [7]],\n      ,\n      \"268\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AI: [, [, , \"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"264(?:292|4(?:6[12]|9[78]))\\\\d{4}\", , , , \"2644612345\", , , , [7]], [, , \"264(?:235|4(?:69|76)|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}\", , , , \"2642351234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"AI\", 1, \"011\", \"1\", , , \"([2457]\\\\d{6})$|1\", \"264$1\", , , , , [, , \"264724\\\\d{4}\", , , , \"2647241234\", , , , [7]], , \"264\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AL: [, [, , \"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\", , , , , , , [6, 7, 8, 9], [5]], [, , \"4505[0-2]\\\\d{3}|(?:[2358][16-9]\\\\d[2-9]|4410)\\\\d{4}|(?:[2358][2-5][2-9]|4(?:[2-57-9][2-9]|6\\\\d))\\\\d{5}\", , , , \"22345678\", , , [8], [5, 6, 7]], [, , \"6(?:[78][2-9]|9\\\\d)\\\\d{6}\", , , , \"672123456\", , , [9]], [, , \"800\\\\d{4}\", , , , \"8001234\", , , [7]], [\n      ,\n      ,\n      \"900[1-9]\\\\d\\\\d\",\n      ,\n      ,\n      ,\n      \"900123\",\n      ,\n      ,\n      [6]\n    ], [, , \"808[1-9]\\\\d\\\\d\", , , , \"808123\", , , [6]], [, , \"700[2-9]\\\\d{4}\", , , , \"70021234\", , , [8]], [, , , , , , , , , [-1]], \"AL\", 355, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,4})\", \"$1 $2\", [\"80|9\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"4[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2358][2-5]|4\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[23578]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"6\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AM: [, [\n      ,\n      ,\n      \"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8],\n      [5, 6]\n    ], [, , \"(?:(?:1[0-25]|47)\\\\d|2(?:2[2-46]|3[1-8]|4[2-69]|5[2-7]|6[1-9]|8[1-7])|3[12]2)\\\\d{5}\", , , , \"10123456\", , , , [5, 6]], [, , \"(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}\", , , , \"77123456\"], [, , \"800\\\\d{5}\", , , , \"80012345\"], [, , \"90[016]\\\\d{5}\", , , , \"90012345\"], [, , \"80[1-4]\\\\d{5}\", , , , \"80112345\"], [, , , , , , , , , [-1]], [, , \"60(?:2[78]|3[5-9]|4[02-9]|5[0-46-9]|[6-8]\\\\d|9[01])\\\\d{4}\", , , , \"60271234\"], \"AM\", 374, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]0\"], \"0 $1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"2|3[12]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"1|47\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[3-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AO: [\n      ,\n      [, , \"[29]\\\\d{8}\", , , , , , , [9]],\n      [, , \"2\\\\d(?:[0134][25-9]|[25-9]\\\\d)\\\\d{5}\", , , , \"222123456\"],\n      [, , \"9[1-59]\\\\d{7}\", , , , \"923123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AO\",\n      244,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[29]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AR: [\n      ,\n      [, , \"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\", , , , , , , [10, 11], [6, 7, 8]],\n      [\n        ,\n        ,\n        \"3888[013-9]\\\\d{5}|3(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\\\d{5}|(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\\\d{5}|(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\\\d{5}|(?:(?:11[1-8]|670)\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6])))\\\\d{6}|2(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\\\d{5}|(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"1123456789\",\n        ,\n        ,\n        [10],\n        [6, 7, 8]\n      ],\n      [\n        ,\n        ,\n        \"93(?:7(?:1[15]|81)[46]|8(?:(?:21|4[16]|69|9[12])[46]|88[013-9]))\\\\d{5}|9(?:29(?:54|66)|3(?:7(?:55|77)|865))[2-8]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|473|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:284|3(?:02|23)|657|920)|3(?:4(?:8[27]|92)|541|878))[2-7]\\\\d{5}|9(?:2(?:(?:26|62)2|320|477|9(?:42|83))|3(?:329|4(?:[47]6|62|89)|564))[2-6]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-7]|[235][4-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|[17][2-6]|3[4-6]|[58][3-6]))))\\\\d{6}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|475|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:2(?:57|81)|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|71)|5(?:25|37|4[347]|71)|7(?:18|5[17])))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[03-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[145]|4[13]|5[468]|7[2-5]|8[26])|8(?:2[5-7]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"91123456789\",\n        ,\n        ,\n        ,\n        [6, 7, 8]\n      ],\n      [, , \"800\\\\d{7,8}\", , , , \"8001234567\"],\n      [, , \"60[04579]\\\\d{7}\", , , , \"6001234567\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"AR\",\n      54,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\n      \"9$1\",\n      ,\n      ,\n      [[, \"(\\\\d{3})\", \"$1\", [\"0|1(?:0[0-35-7]|1[02-5]|2[015]|3[47]|4[478])|911\"]], [, \"(\\\\d{2})(\\\\d{4})\", \"$1-$2\", [\"[1-9]\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[1-8]\"]], [\n        ,\n        \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n        \"$1 $2-$3\",\n        [\n          \"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\n          \"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n          \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ],\n        \"0$1\",\n        ,\n        1\n      ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"1\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[68]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[23]\"], \"0$1\", , 1], [\n        ,\n        \"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n        \"$2 15-$3-$4\",\n        [\n          \"9(?:2[2-469]|3[3-578])\",\n          \"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\n          \"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ],\n        \"0$1\"\n      ], [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$2 15-$3-$4\", [\"91\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$2 15-$3-$4\", [\"9\"], \"0$1\"]],\n      [\n        [\n          ,\n          \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\n          \"$1 $2-$3\",\n          [\n            \"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\n            \"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\n            \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n            \"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n          ],\n          \"0$1\",\n          ,\n          1\n        ],\n        [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"1\"], \"0$1\", , 1],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[68]\"], \"0$1\"],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[23]\"], \"0$1\", , 1],\n        [, \"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3-$4\", [\n          \"9(?:2[2-469]|3[3-578])\",\n          \"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\n          \"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\n          \"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"\n        ]],\n        [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3-$4\", [\"91\"]],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3-$4\", [\"9\"]]\n      ],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"810\\\\d{7}\", , , , , , , [10]],\n      [, , \"810\\\\d{7}\", , , , \"8101234567\", , , [10]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AS: [, [, , \"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"6846(?:22|33|44|55|77|88|9[19])\\\\d{4}\", , , , \"6846221234\", , , , [7]], [, , \"684(?:2(?:48|5[2468]|7[26])|7(?:3[13]|70|82))\\\\d{4}\", , , , \"6847331234\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002123456\"\n    ], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"AS\", 1, \"011\", \"1\", , , \"([267]\\\\d{6})$|1\", \"684$1\", , , , , [, , , , , , , , , [-1]], , \"684\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AT: [, [\n      ,\n      ,\n      \"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [4, 5, 6, 7, 8, 9, 10, 11, 12, 13],\n      [3]\n    ], [, , \"1(?:11\\\\d|[2-9]\\\\d{3,11})|(?:316|463|(?:51|66|73)2)\\\\d{3,10}|(?:2(?:1[467]|2[13-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|9[1458])|3(?:1[1-578]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|7[1368]|8[2457])|5(?:2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[135-8]|5[468])|7(?:2[1-8]|35|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\\\d{4,10}\", , , , \"1234567890\", , , , [3]], [, , \"6(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d{4,10}\", , , , \"664123456\", , , [7, 8, 9, 10, 11, 12, 13]], [\n      ,\n      ,\n      \"800\\\\d{6,10}\",\n      ,\n      ,\n      ,\n      \"800123456\",\n      ,\n      ,\n      [9, 10, 11, 12, 13]\n    ], [, , \"(?:8[69][2-68]|9(?:0[01]|3[019]))\\\\d{6,10}\", , , , \"900123456\", , , [9, 10, 11, 12, 13]], [, , \"8(?:10|2[018])\\\\d{6,10}|828\\\\d{5}\", , , , \"810123456\", , , [8, 9, 10, 11, 12, 13]], [, , , , , , , , , [-1]], [, , \"5(?:0[1-9]|17|[79]\\\\d)\\\\d{2,10}|7[28]0\\\\d{6,10}\", , , , \"780123456\", , , [5, 6, 7, 8, 9, 10, 11, 12, 13]], \"AT\", 43, \"00\", \"0\", , , \"0\", , , , [\n      [, \"(\\\\d{4})\", \"$1\", [\"14\"]],\n      [, \"(\\\\d)(\\\\d{3,12})\", \"$1 $2\", [\"1(?:11|[2-9])\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})\", \"$1 $2\", [\"517\"], \"0$1\"],\n      [, \"(\\\\d{2})(\\\\d{3,5})\", \"$1 $2\", [\"5[079]\"], \"0$1\"],\n      [, \"(\\\\d{6})\", \"$1\", [\"[18]\"]],\n      [, \"(\\\\d{3})(\\\\d{3,10})\", \"$1 $2\", [\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{3,9})\", \"$1 $2\", [\"[2-467]|5[2-6]\"], \"0$1\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]\n    ], [[, \"(\\\\d)(\\\\d{3,12})\", \"$1 $2\", [\"1(?:11|[2-9])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})\", \"$1 $2\", [\"517\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3,5})\", \"$1 $2\", [\"5[079]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3,10})\",\n      \"$1 $2\",\n      [\"(?:31|4)6|51|6(?:5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{4})(\\\\d{3,9})\", \"$1 $2\", [\"[2-467]|5[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\", \"$1 $2 $3\", [\"5\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AU: [\n      ,\n      [, , \"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\", , , , , , , [5, 6, 7, 8, 9, 10, 12]],\n      [\n        ,\n        ,\n        \"(?:(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|3(?:[0-3589]\\\\d|4[0-578]|6[1-9]|7[0-35-9])|7(?:[013-57-9]\\\\d|2[0-8]))\\\\d{3}|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4]))|(?:6[0-8]|[78]\\\\d)\\\\d{3}|9(?:[02-9]\\\\d{3}|1(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79])))))\\\\d{3}\",\n        ,\n        ,\n        ,\n        \"212345678\",\n        ,\n        ,\n        [9],\n        [8]\n      ],\n      [, , \"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\", , , , \"412345678\", , , [9]],\n      [, , \"180(?:0\\\\d{3}|2)\\\\d{3}\", , , , \"1800123456\", , , [7, 10]],\n      [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]],\n      [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]],\n      [, , , , , , , , , [-1]],\n      [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]],\n      \"AU\",\n      61,\n      \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\n      \"0\",\n      ,\n      ,\n      \"(183[12])|0\",\n      ,\n      \"0011\",\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"16\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"13\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"19\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"180\", \"1802\"]], [, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"19\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"16\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"14|4\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[2378]\"], \"(0$1)\", \"$CC ($1)\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1(?:30|[89])\"]], [\n        ,\n        \"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\n        \"$1 $2 $3\",\n        [\"130\"]\n      ]],\n      [[, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"16\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"16\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"14|4\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[2378]\"], \"(0$1)\", \"$CC ($1)\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1(?:30|[89])\"]]],\n      [, , \"163\\\\d{2,6}\", , , , \"1631234\", , , [5, 6, 7, 8, 9]],\n      1,\n      ,\n      [, , \"1(?:3(?:00\\\\d{5}|45[0-4])|802)\\\\d{3}|1[38]00\\\\d{6}|13\\\\d{4}\", , , , , , , [6, 7, 8, 10, 12]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    AW: [, [\n      ,\n      ,\n      \"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"5(?:2\\\\d|8[1-9])\\\\d{4}\", , , , \"5212345\"], [, , \"(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}\", , , , \"5601234\"], [, , \"800\\\\d{4}\", , , , \"8001234\"], [, , \"900\\\\d{4}\", , , , \"9001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:28\\\\d|501)\\\\d{4}\", , , , \"5011234\"], \"AW\", 297, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[25-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    AX: [, [\n      ,\n      ,\n      \"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6, 7, 8, 9, 10, 11, 12]\n    ], [, , \"18[1-8]\\\\d{3,6}\", , , , \"181234567\", , , [6, 7, 8, 9]], [, , \"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\", , , , \"412345678\", , , [6, 7, 8, 9, 10]], [, , \"800\\\\d{4,6}\", , , , \"800123456\", , , [7, 8, 9]], [, , \"[67]00\\\\d{5,6}\", , , , \"600123456\", , , [8, 9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AX\", 358, \"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\", \"0\", , , \"0\", , \"00\", , , , [, , , , , , , , , [-1]], , \"18\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\",\n      ,\n      ,\n      ,\n      \"10112345\"\n    ], , , [, , , , , , , , , [-1]]],\n    AZ: [, [, , \"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\", , , , , , , [9], [7]], [, , \"(?:2[12]428|3655[02])\\\\d{4}|(?:2(?:22[0-79]|63[0-28])|3654)\\\\d{5}|(?:(?:1[28]|46)\\\\d|2(?:[014-6]2|[23]3))\\\\d{6}\", , , , \"123123456\", , , , [7]], [, , \"36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}\", , , , \"401234567\"], [, , \"88\\\\d{7}\", , , , \"881234567\"], [, , \"900200\\\\d{3}\", , , , \"900200123\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"AZ\", 994, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[1-9]\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"90\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[28]|2|365|46\", \"1[28]|2|365[45]|46\", \"1[28]|2|365(?:4|5[02])|46\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[13-9]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"90\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[28]|2|365|46\", \"1[28]|2|365[45]|46\", \"1[28]|2|365(?:4|5[02])|46\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[13-9]\"],\n      \"0$1\"\n    ]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BA: [\n      ,\n      [, , \"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\", , , , , , , [8, 9], [6]],\n      [, , \"(?:3(?:[05-79][2-9]|1[4579]|[23][24-9]|4[2-4689]|8[2457-9])|49[2-579]|5(?:0[2-49]|[13][2-9]|[268][2-4679]|4[4689]|5[2-79]|7[2-69]|9[2-4689]))\\\\d{5}\", , , , \"30212345\", , , [8], [6]],\n      [, , \"6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}\", , , , \"61123456\"],\n      [, , \"8[08]\\\\d{6}\", , , , \"80123456\", , , [8]],\n      [, , \"9[0246]\\\\d{6}\", , , , \"90123456\", , , [8]],\n      [, , \"8[12]\\\\d{6}\", , , , \"82123456\", , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"BA\",\n      387,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{3})\", \"$1-$2\", [\"[2-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6[1-3]|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2-$3\", [\"[3-5]|6[56]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"6\"], \"0$1\"]],\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6[1-3]|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2-$3\", [\"[3-5]|6[56]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"6\"], \"0$1\"]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"703[235]0\\\\d{3}|70(?:2[0-5]|3[0146]|[56]0)\\\\d{4}\", , , , \"70341234\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BB: [, [, , \"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"246521[0369]\\\\d{3}|246(?:2(?:2[78]|7[0-4])|4(?:1[024-6]|2\\\\d|3[2-9])|5(?:20|[34]\\\\d|54|7[1-3])|6(?:2\\\\d|38)|7[35]7|9(?:1[89]|63))\\\\d{4}\", , , , \"2464123456\", , , , [7]], [, , \"246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}\", , , , \"2462501234\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002123456\"\n    ], [, , \"(?:246976|900[2-9]\\\\d\\\\d)\\\\d{4}\", , , , \"9002123456\", , , , [7]], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , \"24631\\\\d{5}\", , , , \"2463101234\", , , , [7]], \"BB\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"246$1\", , , , , [, , , , , , , , , [-1]], , \"246\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"246(?:292|367|4(?:1[7-9]|3[01]|4[47-9]|67)|7(?:1[2-9]|2\\\\d|3[016]|53))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2464301234\",\n      ,\n      ,\n      ,\n      [7]\n    ], , , [, , , , , , , , , [-1]]],\n    BD: [, [, , \"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:4(?:31\\\\d\\\\d|423)|5222)\\\\d{3}(?:\\\\d{2})?|8332[6-9]\\\\d\\\\d|(?:3(?:03[56]|224)|4(?:22[25]|653))\\\\d{3,4}|(?:3(?:42[47]|529|823)|4(?:027|525|65(?:28|8))|562|6257|7(?:1(?:5[3-5]|6[12]|7[156]|89)|22[589]56|32|42675|52(?:[25689](?:56|8)|[347]8)|71(?:6[1267]|75|89)|92374)|82(?:2[59]|32)56|9(?:03[23]56|23(?:256|373)|31|5(?:1|2[4589]56)))\\\\d{3}|(?:3(?:02[348]|22[35]|324|422)|4(?:22[67]|32[236-9]|6(?:2[46]|5[57])|953)|5526|6(?:024|6655)|81)\\\\d{4,5}|(?:2(?:7(?:1[0-267]|2[0-289]|3[0-29]|4[01]|5[1-3]|6[013]|7[0178]|91)|8(?:0[125]|1[1-6]|2[0157-9]|3[1-69]|41|6[1-35]|7[1-5]|8[1-8]|9[0-6])|9(?:0[0-2]|1[0-4]|2[568]|3[3-6]|5[5-7]|6[0136-9]|7[0-7]|8[014-9]))|3(?:0(?:2[025-79]|3[2-4])|181|22[12]|32[2356]|824)|4(?:02[09]|22[348]|32[045]|523|6(?:27|54))|666(?:22|53)|7(?:22[57-9]|42[56]|82[35])8|8(?:0[124-9]|2(?:181|2[02-4679]8)|4[12]|[5-7]2)|9(?:[04]2|2(?:2|328)|81))\\\\d{4}|(?:2(?:222|[45]\\\\d)\\\\d|3(?:1(?:2[5-7]|[5-7])|425|822)|4(?:033|1\\\\d|[257]1|332|4(?:2[246]|5[25])|6(?:2[35]|56|62)|8(?:23|54)|92[2-5])|5(?:02[03489]|22[457]|32[35-79]|42[46]|6(?:[18]|53)|724|826)|6(?:023|2(?:2[2-5]|5[3-5]|8)|32[3478]|42[34]|52[47]|6(?:[18]|6(?:2[34]|5[24]))|[78]2[2-5]|92[2-6])|7(?:02|21\\\\d|[3-589]1|6[12]|72[24])|8(?:217|3[12]|[5-7]1)|9[24]1)\\\\d{5}|(?:(?:3[2-8]|5[2-57-9]|6[03-589])1|4[4689][18])\\\\d{5}|[59]1\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"27111234\"\n    ], [, , \"(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}\", , , , \"1812345678\", , , [10]], [, , \"80[03]\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"96(?:0[469]|1[0-47]|3[389]|6[69]|7[78])\\\\d{6}\", , , , \"9604123456\", , , [10]], \"BD\", 880, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1-$2\", [\"31[5-8]|[459]1\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3,7})\",\n      \"$1-$2\",\n      [\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:28|4[14]|5)|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{4})(\\\\d{3,6})\", \"$1-$2\", [\"[13-9]|22\"], \"0$1\"], [, \"(\\\\d)(\\\\d{7,8})\", \"$1-$2\", [\"2\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BE: [, [, , \"4\\\\d{8}|[1-9]\\\\d{7}\", , , , , , , [8, 9]], [, , \"80[2-8]\\\\d{5}|(?:1[0-69]|[23][2-8]|4[23]|5\\\\d|6[013-57-9]|71|8[1-79]|9[2-4])\\\\d{6}\", , , , \"12345678\", , , [8]], [, , \"4[5-9]\\\\d{7}\", , , , \"470123456\", , , [9]], [, , \"800[1-9]\\\\d{4}\", , , , \"80012345\", , , [8]], [\n      ,\n      ,\n      \"(?:70(?:2[0-57]|3[04-7]|44|6[569]|7[0579])|90(?:0[0-8]|1[36]|2[0-3568]|3[0-689]|[47][2-68]|5[1-68]|6[0-378]|9[34679]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"90012345\",\n      ,\n      ,\n      [8]\n    ], [, , \"7879\\\\d{4}\", , , , \"78791234\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BE\", 32, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:80|9)0\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[239]|4[23]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[15-8]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"4\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"78(?:0[57]|1[014-8]|2[25]|3[15-8]|48|[56]0|7[06-8]|9\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"78102345\",\n      ,\n      ,\n      [8]\n    ], , , [, , , , , , , , , [-1]]],\n    BF: [, [, , \"[025-7]\\\\d{7}\", , , , , , , [8]], [, , \"2(?:0(?:49|5[23]|6[5-7]|9[016-9])|4(?:4[569]|5[4-6]|6[5-7]|7[0179])|5(?:[34]\\\\d|50|6[5-7]))\\\\d{4}\", , , , \"20491234\"], [, , \"(?:0[1-35-7]|5[1-8]|[67]\\\\d)\\\\d{6}\", , , , \"70123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BF\", 226, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[025-7]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BG: [, [\n      ,\n      ,\n      \"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [6, 7, 8, 9, 12],\n      [4, 5]\n    ], [, , \"2\\\\d{5,7}|(?:43[1-6]|70[1-9])\\\\d{4,5}|(?:[36]\\\\d|4[124-7]|[57][1-9]|8[1-6]|9[1-7])\\\\d{5,6}\", , , , \"2123456\", , , [6, 7, 8], [4, 5]], [, , \"(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}\", , , , \"43012345\", , , [8, 9]], [, , \"(?:00800\\\\d\\\\d|800)\\\\d{5}\", , , , \"80012345\", , , [8, 12]], [, , \"90\\\\d{6}\", , , , \"90123456\", , , [8]], [, , \"700\\\\d{5}\", , , , \"70012345\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BG\", 359, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{6})\", \"$1\", [\"1\"]], [, \"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"43[1-6]|70[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:70|8)0\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"43[1-7]|7\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[48]|9[08]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [[, \"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"2\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"43[1-6]|70[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:70|8)0\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"43[1-7]|7\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[48]|9[08]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BH: [, [\n      ,\n      ,\n      \"[136-9]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8]\n    ], [, , \"(?:1(?:3[1356]|6[0156]|7\\\\d)\\\\d|6(?:1[16]\\\\d|500|6(?:0\\\\d|3[12]|44|7[7-9]|88)|9[69][69])|7(?:1(?:11|78)|7\\\\d\\\\d))\\\\d{4}\", , , , \"17001234\"], [, , \"(?:3(?:[1-79]\\\\d|8[0-47-9])\\\\d|6(?:3(?:00|33|6[16])|6(?:3[03-9]|[69]\\\\d|7[0-6])))\\\\d{4}\", , , , \"36001234\"], [, , \"80\\\\d{6}\", , , , \"80123456\"], [, , \"(?:87|9[014578])\\\\d{6}\", , , , \"90123456\"], [, , \"84\\\\d{6}\", , , , \"84123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BH\", 973, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[13679]|8[047]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    BI: [, [, , \"(?:[267]\\\\d|31)\\\\d{6}\", , , , , , , [8]], [, , \"(?:22|31)\\\\d{6}\", , , , \"22201234\"], [, , \"(?:29|[67][125-9])\\\\d{6}\", , , , \"79561234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BI\", 257, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2367]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BJ: [, [, , \"[24-689]\\\\d{7}\", , , , , , , [8]], [, , \"2(?:02|1[037]|2[45]|3[68]|4\\\\d)\\\\d{5}\", , , , \"20211234\"], [\n      ,\n      ,\n      \"(?:4[0-2]|[56]\\\\d|9[013-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"90011234\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"857[58]\\\\d{4}\", , , , \"85751234\"], \"BJ\", 229, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24-689]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"81\\\\d{6}\", , , , \"81123456\"], , , [, , , , , , , , , [-1]]],\n    BL: [, [, , \"(?:590|(?:69|80)\\\\d|976)\\\\d{6}\", , , , , , , [9]], [, , \"590(?:2[7-9]|5[12]|87)\\\\d{4}\", , , , \"590271234\"], [, , \"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\", , , , \"690001234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , \"976[01]\\\\d{5}\", , , , \"976012345\"], \"BL\", 590, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BM: [, [, , \"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"441(?:[46]\\\\d\\\\d|5(?:4\\\\d|60|89))\\\\d{4}\", , , , \"4414123456\", , , , [7]], [, , \"441(?:[2378]\\\\d|5[0-39]|92)\\\\d{5}\", , , , \"4413701234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"BM\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"441$1\", , , , , [, , , , , , , , , [-1]], , \"441\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BN: [\n      ,\n      [, , \"[2-578]\\\\d{6}\", , , , , , , [7]],\n      [, , \"22[0-7]\\\\d{4}|(?:2[013-9]|[34]\\\\d|5[0-25-9])\\\\d{5}\", , , , \"2345678\"],\n      [, , \"(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}\", , , , \"7123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"5[34]\\\\d{5}\", , , , \"5345678\"],\n      \"BN\",\n      673,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-578]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BO: [\n      ,\n      [, , \"(?:[2-467]\\\\d\\\\d|8001)\\\\d{5}\", , , , , , , [8, 9], [7]],\n      [, , \"(?:2(?:2\\\\d\\\\d|5(?:11|[258]\\\\d|9[67])|6(?:12|2\\\\d|9[34])|8(?:2[34]|39|62))|3(?:3\\\\d\\\\d|4(?:6\\\\d|8[24])|8(?:25|42|5[257]|86|9[25])|9(?:[27]\\\\d|3[2-4]|4[248]|5[24]|6[2-6]))|4(?:4\\\\d\\\\d|6(?:11|[24689]\\\\d|72)))\\\\d{4}\", , , , \"22123456\", , , [8], [7]],\n      [, , \"[67]\\\\d{7}\", , , , \"71234567\", , , [8]],\n      [, , \"8001[07]\\\\d{4}\", , , , \"800171234\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"BO\",\n      591,\n      \"00(?:1\\\\d)?\",\n      \"0\",\n      ,\n      ,\n      \"0(1\\\\d)?\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"[23]|4[46]\"], , \"0$CC $1\"], [, \"(\\\\d{8})\", \"$1\", [\"[67]\"], , \"0$CC $1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], , \"0$CC $1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"8001[07]\\\\d{4}\", , , , , , , [9]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    BQ: [, [, , \"(?:[34]1|7\\\\d)\\\\d{5}\", , , , , , , [7]], [, , \"(?:318[023]|41(?:6[023]|70)|7(?:1[578]|2[05]|50)\\\\d)\\\\d{3}\", , , , \"7151234\"], [, , \"(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}\", , , , \"3181234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BQ\", 599, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"[347]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BR: [, [, , \"(?:[1-46-9]\\\\d\\\\d|5(?:[0-46-9]\\\\d|5[0-46-9]))\\\\d{8}|[1-9]\\\\d{9}|[3589]\\\\d{8}|[34]\\\\d{7}\", , , , , , , [8, 9, 10, 11]], [, , \"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\\\d{7}\", , , , \"1123456789\", , , [10], [8]], [, , \"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}\", , , , \"11961234567\", , , [10, 11], [8, 9]], [\n      ,\n      ,\n      \"800\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"800123456\",\n      ,\n      ,\n      [9, 10]\n    ], [, , \"300\\\\d{6}|[59]00\\\\d{6,7}\", , , , \"300123456\", , , [9, 10]], [, , \"(?:30[03]\\\\d{3}|4(?:0(?:0\\\\d|20)|370))\\\\d{4}|300\\\\d{5}\", , , , \"40041234\", , , [8, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BR\", 55, \"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\", \"0\", , , \"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\", \"$2\", , , [[, \"(\\\\d{3,6})\", \"$1\", [\"1(?:1[25-8]|2[357-9]|3[02-68]|4[12568]|5|6[0-8]|8[015]|9[0-47-9])|321|610\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"300|4(?:0[02]|37)\", \"4(?:02|37)0|[34]00\"]], [\n      ,\n      \"(\\\\d{4})(\\\\d{4})\",\n      \"$1-$2\",\n      [\"[2-57]\", \"[2357]|4(?:[0-24-9]|3(?:[0-689]|7[1-9]))\"]\n    ], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:[358]|90)0\"], \"0$1\"], [, \"(\\\\d{5})(\\\\d{4})\", \"$1-$2\", [\"9\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"], \"($1)\", \"0 $CC ($1)\"], [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1 $2-$3\", [\"[16][1-9]|[2-57-9]\"], \"($1)\", \"0 $CC ($1)\"]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"300|4(?:0[02]|37)\", \"4(?:02|37)0|[34]00\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"(?:[358]|90)0\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2-$3\", [\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"], \"($1)\", \"0 $CC ($1)\"], [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1 $2-$3\", [\"[16][1-9]|[2-57-9]\"], \"($1)\", \"0 $CC ($1)\"]], [, , , , , , , , , [-1]], , , [, , \"30(?:0\\\\d{5,7}|3\\\\d{7})|40(?:0\\\\d|20)\\\\d{4}|800\\\\d{6,7}\", , , , , , , [8, 9, 10]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BS: [, [, , \"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[347]|8[0-4]|9[2-467])|461|502|6(?:0[1-5]|12|2[013]|[45]0|7[67]|8[78]|9[89])|7(?:02|88))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2423456789\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|[89]9))\\\\d{4}\", , , , \"2423591234\", , , , [7]], [, , \"242300\\\\d{4}|8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\", , , , [7]], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"BS\", 1, \"011\", \"1\", , , \"([3-8]\\\\d{6})$|1\", \"242$1\", , , , , [, , , , , , , , , [-1]], , \"242\", [, , , , , , , , , [-1]], [, , \"242225\\\\d{4}\", , , , \"2422250123\"], , , [, , , , , , , , , [-1]]],\n    BT: [, [, , \"[17]\\\\d{7}|[2-8]\\\\d{6}\", , , , , , , [7, 8], [6]], [, , \"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\\\d{5}\", , , , \"2345678\", , , [7], [6]], [, , \"(?:1[67]|77)\\\\d{6}\", , , , \"17123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BT\", 975, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[2-7]\"]], [\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[2-68]|7[246]\"]\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[67]|7\"]]], [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-68]|7[246]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[67]|7\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BW: [, [, , \"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\", , , , , , , [7, 8, 10]], [\n      ,\n      ,\n      \"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0-35-9]|55|[69]\\\\d|7[013])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[03489]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2401234\",\n      ,\n      ,\n      [7]\n    ], [, , \"(?:321|7(?:[1-7]\\\\d|8[0-4]))\\\\d{5}\", , , , \"71123456\", , , [8]], [, , \"(?:0800|800\\\\d)\\\\d{6}\", , , , \"0800012345\", , , [10]], [, , \"90\\\\d{5}\", , , , \"9012345\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"79(?:1(?:[01]\\\\d|2[0-7])|2[0-7]\\\\d)\\\\d{3}\", , , , \"79101234\", , , [8]], \"BW\", 267, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"90\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[24-6]|3[15-79]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[37]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"0\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"8\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BY: [, [, , \"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10, 11], [5]], [, , \"(?:1(?:5(?:1[1-5]|[24]\\\\d|6[2-4]|9[1-7])|6(?:[235]\\\\d|4[1-7])|7\\\\d\\\\d)|2(?:1(?:[246]\\\\d|3[0-35-9]|5[1-9])|2(?:[235]\\\\d|4[0-8])|3(?:[26]\\\\d|3[02-79]|4[024-7]|5[03-7])))\\\\d{5}\", , , , \"152450911\", , , [9], [5, 6, 7]], [\n      ,\n      ,\n      \"(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"294911911\",\n      ,\n      ,\n      [9]\n    ], [, , \"800\\\\d{3,7}|8(?:0[13]|20\\\\d)\\\\d{7}\", , , , \"8011234567\"], [, , \"(?:810|902)\\\\d{7}\", , , , \"9021234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"249\\\\d{6}\", , , , \"249123456\", , , [9]], \"BY\", 375, \"810\", \"8\", , , \"0|80?\", , \"8~10\", , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"800\"], \"8 $1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\", \"$1 $2 $3\", [\"800\"], \"8 $1\"], [\n      ,\n      \"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\n      \"$1 $2-$3\",\n      [\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\", \"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\n      \"8 0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"1(?:[56]|7[467])|2[1-3]\"], \"8 0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[1-4]\"], \"8 0$1\"], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"8 $1\"]], , [, , , , , , , , , [-1]], , , [, , \"800\\\\d{3,7}|(?:8(?:0[13]|10|20\\\\d)|902)\\\\d{7}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    BZ: [, [, , \"(?:0800\\\\d|[2-8])\\\\d{6}\", , , , , , , [7, 11]], [, , \"(?:2(?:[02]\\\\d|36|[68]0)|[3-58](?:[02]\\\\d|[68]0)|7(?:[02]\\\\d|32|[68]0))\\\\d{4}\", , , , \"2221234\", , , [7]], [\n      ,\n      ,\n      \"6[0-35-7]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"6221234\",\n      ,\n      ,\n      [7]\n    ], [, , \"0800\\\\d{7}\", , , , \"08001234123\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"BZ\", 501, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-8]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1-$2-$3-$4\", [\"0\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CA: [, [, , \"(?:[2-8]\\\\d|90)\\\\d{8}|3\\\\d{6}\", , , , , , , [7, 10]], [\n      ,\n      ,\n      \"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|3[178]|50|68|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5062345678\",\n      ,\n      ,\n      [10],\n      [7]\n    ], [, , \"(?:2(?:04|[23]6|[48]9|50|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|3[178]|50|68|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|73)|90[25])[2-9]\\\\d{6}\", , , , \"5062345678\", , , [10], [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\", , , [10]], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\", , , [10]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:00|2[125-9]|33|44|66|77|88)|622)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\",\n      ,\n      ,\n      [10]\n    ], [, , \"600[2-9]\\\\d{6}\", , , , \"6002012345\", , , [10]], \"CA\", 1, \"011\", \"1\", , , \"1\", , , 1, , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"310\\\\d{4}\", , , , \"3101234\", , , [7]], , , [, , , , , , , , , [-1]]],\n    CC: [, [, , \"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\", , , , , , , [6, 7, 8, 9, 10, 12]], [, , \"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\", , , , \"891621234\", , , [9], [8]], [\n      ,\n      ,\n      \"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"412345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"180(?:0\\\\d{3}|2)\\\\d{3}\", , , , \"1800123456\", , , [7, 10]], [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]], [, , , , , , , , , [-1]], [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]], \"CC\", 61, \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\", \"0\", , , \"([59]\\\\d{7})$|0\", \"8$1\", \"0011\", , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CD: [, [\n      ,\n      ,\n      \"[189]\\\\d{8}|[1-68]\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 9]\n    ], [, , \"12\\\\d{7}|[1-6]\\\\d{6}\", , , , \"1234567\"], [, , \"88\\\\d{5}|(?:8[0-59]|9[017-9])\\\\d{7}\", , , , \"991234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CD\", 243, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"88\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"[1-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CF: [, [\n      ,\n      ,\n      \"(?:[27]\\\\d{3}|8776)\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8]\n    ], [, , \"2[12]\\\\d{6}\", , , , \"21612345\"], [, , \"7[024-7]\\\\d{6}\", , , , \"70012345\"], [, , , , , , , , , [-1]], [, , \"8776\\\\d{4}\", , , , \"87761234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CF\", 236, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[278]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CG: [, [, , \"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\", , , , , , , [9]], [, , \"222[1-589]\\\\d{5}\", , , , \"222123456\"], [\n      ,\n      ,\n      \"026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"061234567\"\n    ], [, , , , , , , , , [-1]], [, , \"80(?:0\\\\d\\\\d|120)\\\\d{4}\", , , , \"800123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CG\", 242, \"00\", , , , , , , , [[, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[02]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CH: [, [, , \"8\\\\d{11}|[2-9]\\\\d{8}\", , , , , , , [9, 12]], [, , \"(?:2[12467]|3[1-4]|4[134]|5[256]|6[12]|[7-9]1)\\\\d{7}\", , , , \"212345678\", , , [9]], [, , \"7[35-9]\\\\d{7}\", , , , \"781234567\", , , [9]], [\n      ,\n      ,\n      \"800\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"800123456\",\n      ,\n      ,\n      [9]\n    ], [, , \"90[016]\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"84[0248]\\\\d{6}\", , , , \"840123456\", , , [9]], [, , \"878\\\\d{6}\", , , , \"878123456\", , , [9]], [, , , , , , , , , [-1]], \"CH\", 41, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8[047]|90\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-79]|81\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"8\"], \"0$1\"]], , [, , \"74[0248]\\\\d{6}\", , , , \"740123456\", , , [9]], , , [, , , , , , , , , [-1]], [, , \"5[18]\\\\d{7}\", , , , \"581234567\", , , [9]], , , [\n      ,\n      ,\n      \"860\\\\d{9}\",\n      ,\n      ,\n      ,\n      \"860123456789\",\n      ,\n      ,\n      [12]\n    ]],\n    CI: [, [, , \"[02]\\\\d{9}\", , , , , , , [10]], [, , \"2(?:[15]\\\\d{3}|7(?:2(?:0[23]|1[2357]|2[245]|3[45]|4[3-5])|3(?:06|1[69]|[2-6]7)))\\\\d{5}\", , , , \"2123456789\"], [, , \"0[157]\\\\d{8}\", , , , \"0123456789\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CI\", 225, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\", \"$1 $2 $3 $4\", [\"2\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CK: [, [\n      ,\n      ,\n      \"[2-578]\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5]\n    ], [, , \"(?:2\\\\d|3[13-7]|4[1-5])\\\\d{3}\", , , , \"21234\"], [, , \"[578]\\\\d{4}\", , , , \"71234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CK\", 682, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"[2-578]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CL: [, [, , \"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\", , , , , , , [9, 10, 11]], [\n      ,\n      ,\n      \"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[0346]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|7[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"221234567\",\n      ,\n      ,\n      [9]\n    ], [, , \"2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:2\\\\d\\\\d|3(?:[0346]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|7[0-3])|600)|646[59])|80[1-9]\\\\d\\\\d|9(?:3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|7[1-9]\\\\d\\\\d|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}\", , , , \"221234567\", , , [9]], [, , \"(?:123|8)00\\\\d{6}\", , , , \"800123456\", , , [9, 11]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"600\\\\d{7,8}\",\n      ,\n      ,\n      ,\n      \"6001234567\",\n      ,\n      ,\n      [10, 11]\n    ], [, , , , , , , , , [-1]], [, , \"44\\\\d{7}\", , , , \"441234567\", , , [9]], \"CL\", 56, \"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\", , , , , , , 1, [[, \"(\\\\d{4})\", \"$1\", [\"1(?:[03-589]|21)|[29]0|78\"]], [, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"219\", \"2196\"], \"($1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[1-36]\"], \"($1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"9[2-9]\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"],\n      \"($1)\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"60|8\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"60\"]]], [[, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"219\", \"2196\"], \"($1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[1-36]\"], \"($1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"9[2-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-9]|[1-9])\"], \"($1)\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"60|8\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"60\"]]], [, , , , , , , , , [-1]], , , [, , \"600\\\\d{7,8}\", , , , , , , [10, 11]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CM: [, [, , \"[26]\\\\d{8}|88\\\\d{6,7}\", , , , , , , [8, 9]], [, , \"2(?:22|33)\\\\d{6}\", , , , \"222123456\", , , [9]], [, , \"(?:24[23]|6[25-9]\\\\d)\\\\d{6}\", , , , \"671234567\", , , [9]], [, , \"88\\\\d{6,7}\", , , , \"88012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CM\", 237, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"88\"]\n    ], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[26]|88\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CN: [, [, , \"1[127]\\\\d{8,9}|2\\\\d{9}(?:\\\\d{2})?|[12]\\\\d{6,7}|86\\\\d{6}|(?:1[03-689]\\\\d|6)\\\\d{7,9}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{6,9}\", , , , , , , [7, 8, 9, 10, 11, 12], [5, 6]], [\n      ,\n      ,\n      \"(?:10(?:[02-79]\\\\d\\\\d|[18](?:0[1-9]|[1-9]\\\\d))|21(?:[18](?:0[1-9]|[1-9]\\\\d)|[2-79]\\\\d\\\\d))\\\\d{5}|(?:43[35]|754)\\\\d{7,8}|8(?:078\\\\d{7}|51\\\\d{7,8})|(?:10|(?:2|85)1|43[35]|754)(?:100\\\\d\\\\d|95\\\\d{3,4})|(?:2[02-57-9]|3(?:11|7[179])|4(?:[15]1|3[12])|5(?:1\\\\d|2[37]|3[12]|51|7[13-79]|9[15])|7(?:[39]1|5[57]|6[09])|8(?:71|98))(?:[02-8]\\\\d{7}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{3})?|[1-9]\\\\d{5})|[1-9]\\\\d{6})|9(?:[0-46-9]\\\\d{6}|5\\\\d{3}(?:\\\\d(?:\\\\d{2})?)?))|(?:3(?:1[02-9]|35|49|5\\\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|3[46-9]|5[2-9]|6[47-9]|7\\\\d|8[23])|5(?:3[03-9]|4[36]|5[02-9]|6[1-46]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[17]\\\\d|2[248]|3[04-9]|4[3-6]|5[0-3689]|6[2368]|9[02-9])|8(?:1[236-8]|2[5-7]|3\\\\d|5[2-9]|7[02-9]|8[36-8]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[02-8]\\\\d{6}|1(?:0(?:0\\\\d\\\\d(?:\\\\d{2})?|[1-9]\\\\d{4})|[1-9]\\\\d{5})|9(?:[0-46-9]\\\\d{5}|5\\\\d{3,5}))\",\n      ,\n      ,\n      ,\n      \"1012345678\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , \"1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}\", , , , \"13123456789\", , , [11]], [, , \"(?:(?:10|21)8|8)00\\\\d{7}\", , , , \"8001234567\", , , [10, 12]], [, , \"16[08]\\\\d{5}\", , , , \"16812345\", , , [8]], [\n      ,\n      ,\n      \"10(?:10\\\\d{4}|96\\\\d{3,4})|400\\\\d{7}|950\\\\d{7,8}|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))96\\\\d{3,4}\",\n      ,\n      ,\n      ,\n      \"4001234567\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CN\", 86, \"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\", \"0\", , , \"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\", , \"00\", , [\n      [, \"(\\\\d{5,6})\", \"$1\", [\"10|96\"]],\n      [, \"(\\\\d{2})(\\\\d{5,6})\", \"$1 $2\", [\"(?:10|2[0-57-9])[19]\", \"(?:10|2[0-57-9])(?:10|9[56])\", \"10(?:10|9[56])|2[0-57-9](?:100|9[56])\"], \"0$1\", \"$CC $1\"],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[1-9]\", \"1[1-9]|26|[3-9]|(?:10|2[0-57-9])(?:[0-8]|9[0-47-9])\", \"1(?:0(?:[0-8]|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])|6)|[3-9]\"]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"16[08]\"]],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{5,6})\",\n        \"$1 $2\",\n        [\n          \"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\n          \"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n          \"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\n          \"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"\n        ],\n        \"0$1\",\n        \"$CC $1\"\n      ],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\n        \"[1-9]\",\n        \"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|2(?:[0-57-9](?:[0-8]|9[0-47-9])|6)|[3-9]\",\n        \"1(?:0(?:[02-8]|1[1-9]|9[0-47-9])|[1-9])|26|3(?:[0268]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|8[1-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23][0-8])|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:33|85[23]9)[0-46-9]|(?:2[0-57-9]|3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[0-8]|9[0-47-9])\",\n        \"1(?:0[02-8]|[1-9])|2(?:[0-57-9][0-8]|6)|3(?:[0268]|3[0-46-9]|4[0-8]|9[079])|4(?:[049]|2[02-68]|[35]0|6[0-356]|8[014-9])|5(?:0|2[0-24-689]|4[0-2457-9]|6[057-9]|90)|6(?:[0-24578]|3[06-9]|6[14-79]|9[03-9])|7(?:0[02-9]|2[0135-79]|3[23]|4[0-27-9]|6[1457]|8)|8(?:[046]|1[01459]|2[0-489]|5(?:0|[23](?:[02-8]|1[1-9]|9[0-46-9]))|8[0-2459]|9[09])|9(?:0[0457]|1[08]|[268]|4[024-9]|5[06-9])|(?:10|2[0-57-9])9[0-47-9]|(?:101|58|85[23]10)[1-9]|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:[02-8]|1(?:0[1-9]|[1-9])|9[0-47-9])\"\n      ]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:4|80)0\"]],\n      [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"10|2(?:[02-57-9]|1[1-9])\", \"10|2(?:[02-57-9]|1[1-9])\", \"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"], \"0$1\", \"$CC $1\", 1],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{7,8})\",\n        \"$1 $2\",\n        [\"9\"]\n      ],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"80\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-578]\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"1[3-9]\"], , \"$CC $1\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"[12]\"], \"0$1\", , 1]\n    ], [\n      [, \"(\\\\d{2})(\\\\d{5,6})\", \"$1 $2\", [\"(?:10|2[0-57-9])[19]\", \"(?:10|2[0-57-9])(?:10|9[56])\", \"10(?:10|9[56])|2[0-57-9](?:100|9[56])\"], \"0$1\", \"$CC $1\"],\n      [, \"(\\\\d{3})(\\\\d{5,6})\", \"$1 $2\", [\n        \"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\n        \"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\n        \"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\n        \"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"\n      ], \"0$1\", \"$CC $1\"],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"(?:4|80)0\"]],\n      [\n        ,\n        \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n        \"$1 $2 $3\",\n        [\"10|2(?:[02-57-9]|1[1-9])\", \"10|2(?:[02-57-9]|1[1-9])\", \"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\n        \"0$1\",\n        \"$CC $1\",\n        1\n      ],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{7,8})\", \"$1 $2\", [\"9\"]],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"80\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-578]\"], \"0$1\", \"$CC $1\", 1],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"1[3-9]\"], , \"$CC $1\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"[12]\"], \"0$1\", , 1]\n    ], [, , , , , , , , , [-1]], , , [, , \"(?:(?:10|21)8|[48])00\\\\d{7}|950\\\\d{7,8}\", , , , , , , [10, 11, 12]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CO: [, [, , \"(?:60\\\\d\\\\d|9101)\\\\d{6}|(?:1\\\\d|3)\\\\d{9}\", , , , , , , [10, 11], [7]], [, , \"601055(?:[0-4]\\\\d|50)\\\\d\\\\d|6010(?:[0-4]\\\\d|5[0-4])\\\\d{4}|60[124-8][2-9]\\\\d{6}\", , , , \"6012345678\", , , [10], [7]], [\n      ,\n      ,\n      \"3333(?:0(?:0\\\\d|1[0-5])|[4-9]\\\\d\\\\d)\\\\d{3}|(?:3(?:24[1-9]|3(?:00|3[0-24-9]))|9101)\\\\d{6}|3(?:0[0-5]|1\\\\d|2[0-3]|5[01]|70)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"3211234567\",\n      ,\n      ,\n      [10]\n    ], [, , \"1800\\\\d{7}\", , , , \"18001234567\", , , [11]], [, , \"19(?:0[01]|4[78])\\\\d{7}\", , , , \"19001234567\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CO\", 57, \"00(?:4(?:[14]4|56)|[579])\", \"0\", , , \"0(4(?:[14]4|56)|[579])?\", , , , [[, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"6\"], \"($1)\", \"0$CC $1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3[0-357]|91\"], , \"0$CC $1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{7})\", \"$1-$2-$3\", [\"1\"], \"0$1\"]], [\n      [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"6\"], \"($1)\", \"0$CC $1\"],\n      [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3[0-357]|91\"], , \"0$CC $1\"],\n      [, \"(\\\\d)(\\\\d{3})(\\\\d{7})\", \"$1 $2 $3\", [\"1\"]]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CR: [, [, , \"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\", , , , , , , [8, 10]], [, , \"210[7-9]\\\\d{4}|2(?:[024-7]\\\\d|1[1-9])\\\\d{5}\", , , , \"22123456\", , , [8]], [, , \"(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}\", , , , \"83123456\", , , [8]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"90[059]\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:210[0-6]|4\\\\d{3}|5100)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"40001234\",\n      ,\n      ,\n      [8]\n    ], \"CR\", 506, \"00\", , , , \"(19(?:0[0-2468]|1[09]|20|66|77|99))\", , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-7]|8[3-9]\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[89]\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CU: [, [, , \"[27]\\\\d{6,7}|[34]\\\\d{5,7}|(?:5|8\\\\d\\\\d)\\\\d{7}\", , , , , , , [6, 7, 8, 10], [4, 5]], [, , \"(?:3[23]|48)\\\\d{4,6}|(?:31|4[36]|8(?:0[25]|78)\\\\d)\\\\d{6}|(?:2[1-4]|4[1257]|7\\\\d)\\\\d{5,6}\", , , , \"71234567\", , , , [4, 5]], [, , \"5\\\\d{7}\", , , , \"51234567\", , , [8]], [\n      ,\n      ,\n      \"800\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"8001234567\",\n      ,\n      ,\n      [10]\n    ], [, , , , , , , , , [-1]], [, , \"807\\\\d{7}\", , , , \"8071234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CU\", 53, \"119\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"2[1-4]|[34]\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{6,7})\", \"$1 $2\", [\"7\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"5\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CV: [, [, , \"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\\\d|7[1-3]|8[1-5])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2211234\"\n    ], [, , \"(?:36|5[1-389]|9\\\\d)\\\\d{5}\", , , , \"9911234\"], [, , \"800\\\\d{4}\", , , , \"8001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:3[3-5]|4[356])\\\\d{5}\", , , , \"3401234\"], \"CV\", 238, \"0\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[2-589]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CW: [, [, , \"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\", , , , , , , [7, 8]], [\n      ,\n      ,\n      \"9(?:4(?:3[0-5]|4[14]|6\\\\d)|50\\\\d|7(?:2[014]|3[02-9]|4[4-9]|6[357]|77|8[7-9])|8(?:3[39]|[46]\\\\d|7[01]|8[57-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"94351234\"\n    ], [, , \"953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}\", , , , \"95181234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"60[0-2]\\\\d{4}\", , , , \"6001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"CW\", 599, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[3467]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9[4-8]\"]]], , [, , \"955\\\\d{5}\", , , , \"95581234\", , , [8]], 1, \"[69]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    CX: [\n      ,\n      [, , \"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\", , , , , , , [6, 7, 8, 9, 10, 12]],\n      [\n        ,\n        ,\n        \"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\",\n        ,\n        ,\n        ,\n        \"891641234\",\n        ,\n        ,\n        [9],\n        [8]\n      ],\n      [, , \"4(?:79[01]|83[0-389]|93[0-6])\\\\d{5}|4(?:[0-3]\\\\d|4[047-9]|5[0-25-9]|6[016-9]|7[02-8]|8[0-24-9]|9[0-27-9])\\\\d{6}\", , , , \"412345678\", , , [9]],\n      [, , \"180(?:0\\\\d{3}|2)\\\\d{3}\", , , , \"1800123456\", , , [7, 10]],\n      [, , \"190[0-26]\\\\d{6}\", , , , \"1900123456\", , , [10]],\n      [, , \"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\", , , , \"1300123456\", , , [6, 8, 10, 12]],\n      [, , , , , , , , , [-1]],\n      [, , \"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\", , , , \"147101234\", , , [9]],\n      \"CX\",\n      61,\n      \"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\n      \"0\",\n      ,\n      ,\n      \"([59]\\\\d{7})$|0\",\n      \"8$1\",\n      \"0011\",\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    CY: [\n      ,\n      [, , \"(?:[279]\\\\d|[58]0)\\\\d{6}\", , , , , , , [8]],\n      [, , \"2[2-6]\\\\d{6}\", , , , \"22345678\"],\n      [, , \"9(?:10|[4-79]\\\\d)\\\\d{5}\", , , , \"96123456\"],\n      [, , \"800\\\\d{5}\", , , , \"80001234\"],\n      [, , \"90[09]\\\\d{5}\", , , , \"90012345\"],\n      [, , \"80[1-9]\\\\d{5}\", , , , \"80112345\"],\n      [, , \"700\\\\d{5}\", , , , \"70012345\"],\n      [, , , , , , , , , [-1]],\n      \"CY\",\n      357,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[257-9]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"(?:50|77)\\\\d{6}\", , , , \"77123456\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    CZ: [, [, , \"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\", , , , , , , [9, 10, 11, 12]], [, , \"(?:2\\\\d|3[1257-9]|4[16-9]|5[13-9])\\\\d{7}\", , , , \"212345678\", , , [9]], [, , \"(?:60[1-8]|7(?:0[2-5]|[2379]\\\\d))\\\\d{6}\", , , , \"601123456\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"9(?:0[05689]|76)\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"8[134]\\\\d{7}\", , , , \"811234567\", , , [9]], [, , \"70[01]\\\\d{6}\", , , , \"700123456\", , , [9]], [, , \"9[17]0\\\\d{6}\", , , , \"910123456\", , , [9]], \"CZ\", 420, \"00\", , , , , , , , [\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-8]|9[015-7]\"]],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"96\"]],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]]\n    ], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"9(?:5\\\\d|7[2-4])\\\\d{6}\", , , , \"972123456\", , , [9]], , , [, , \"9(?:3\\\\d{9}|6\\\\d{7,10})\", , , , \"93123456789\"]],\n    DE: [, [\n      ,\n      ,\n      \"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n      [2, 3]\n    ], [\n      ,\n      ,\n      \"32\\\\d{9,11}|49[1-6]\\\\d{10}|322\\\\d{6}|49[0-7]\\\\d{3,9}|(?:[34]0|[68]9)\\\\d{3,13}|(?:2(?:0[1-689]|[1-3569]\\\\d|4[0-8]|7[1-7]|8[0-7])|3(?:[3569]\\\\d|4[0-79]|7[1-7]|8[1-8])|4(?:1[02-9]|[2-48]\\\\d|5[0-6]|6[0-8]|7[0-79])|5(?:0[2-8]|[124-6]\\\\d|[38][0-8]|[79][0-7])|6(?:0[02-9]|[1-358]\\\\d|[47][0-8]|6[1-9])|7(?:0[2-8]|1[1-9]|[27][0-7]|3\\\\d|[4-6][0-8]|8[0-5]|9[013-7])|8(?:0[2-9]|1[0-79]|2\\\\d|3[0-46-9]|4[0-6]|5[013-9]|6[1-8]|7[0-8]|8[0-24-6])|9(?:0[6-9]|[1-4]\\\\d|[589][0-7]|6[0-8]|7[0-467]))\\\\d{3,12}\",\n      ,\n      ,\n      ,\n      \"30123456\",\n      ,\n      ,\n      [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],\n      [2, 3, 4]\n    ], [, , \"15[0-25-9]\\\\d{8}|1(?:6[023]|7\\\\d)\\\\d{7,8}\", , , , \"15123456789\", , , [10, 11]], [, , \"800\\\\d{7,12}\", , , , \"8001234567890\", , , [10, 11, 12, 13, 14, 15]], [, , \"(?:137[7-9]|900(?:[135]|9\\\\d))\\\\d{6}\", , , , \"9001234567\", , , [10, 11]], [, , \"180\\\\d{5,11}|13(?:7[1-6]\\\\d\\\\d|8)\\\\d{4}\", , , , \"18012345\", , , [7, 8, 9, 10, 11, 12, 13, 14]], [, , \"700\\\\d{8}\", , , , \"70012345678\", , , [11]], [, , , , , , , , , [-1]], \"DE\", 49, \"00\", \"0\", , , \"0\", , , , [\n      [, \"(\\\\d{2})(\\\\d{3,13})\", \"$1 $2\", [\"3[02]|40|[68]9\"], \"0$1\"],\n      [\n        ,\n        \"(\\\\d{3})(\\\\d{3,12})\",\n        \"$1 $2\",\n        [\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\", \"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\n        \"0$1\"\n      ],\n      [\n        ,\n        \"(\\\\d{4})(\\\\d{2,11})\",\n        \"$1 $2\",\n        [\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\", \"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\n        \"0$1\"\n      ],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"138\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{2,10})\", \"$1 $2\", [\"3\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{5,11})\", \"$1 $2\", [\"181\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d)(\\\\d{4,10})\", \"$1 $2 $3\", [\"1(?:3|80)|9\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,8})\", \"$1 $2\", [\"1[67]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{7,12})\", \"$1 $2\", [\"8\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"185\", \"1850\", \"18500\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"18[68]\"], \"0$1\"],\n      [, \"(\\\\d{5})(\\\\d{6})\", \"$1 $2\", [\"15[0568]\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{7})\", \"$1 $2\", [\"15[1279]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{8})\", \"$1 $2\", [\"18\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\", \"$1 $2 $3\", [\"1(?:6[023]|7)\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{2})(\\\\d{7})\", \"$1 $2 $3\", [\"15[279]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{8})\", \"$1 $2 $3\", [\"15\"], \"0$1\"]\n    ], , [, , \"16(?:4\\\\d{1,10}|[89]\\\\d{1,11})\", , , , \"16412345\", , , [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]], , , [, , , , , , , , , [-1]], [, , \"18(?:1\\\\d{5,11}|[2-9]\\\\d{8})\", , , , \"18500123456\", , , [8, 9, 10, 11, 12, 13, 14]], , , [\n      ,\n      ,\n      \"1(?:6(?:013|255|399)|7(?:(?:[015]1|[69]3)3|[2-4]55|[78]99))\\\\d{7,8}|15(?:(?:[03-68]00|113)\\\\d|2\\\\d55|7\\\\d99|9\\\\d33)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"177991234567\",\n      ,\n      ,\n      [12, 13]\n    ]],\n    DJ: [, [, , \"(?:2\\\\d|77)\\\\d{6}\", , , , , , , [8]], [, , \"2(?:1[2-5]|7[45])\\\\d{5}\", , , , \"21360003\"], [, , \"77\\\\d{6}\", , , , \"77831001\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"DJ\", 253, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[27]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    DK: [, [, , \"[2-9]\\\\d{7}\", , , , , , , [8]], [, , \"(?:[2-7]\\\\d|8[126-9]|9[1-46-9])\\\\d{6}\", , , , \"32123456\"], [\n      ,\n      ,\n      \"(?:[2-7]\\\\d|8[126-9]|9[1-46-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"32123456\"\n    ], [, , \"80\\\\d{6}\", , , , \"80123456\"], [, , \"90\\\\d{6}\", , , , \"90123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"DK\", 45, \"00\", , , , , , , 1, [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    DM: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [, , \"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\\\d{4}\", , , , \"7674201234\", , , , [7]],\n      [, , \"767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}\", , , , \"7672251234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"DM\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-7]\\\\d{6})$|1\",\n      \"767$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"767\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    DO: [, [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"8(?:[04]9[2-9]\\\\d\\\\d|29(?:2(?:[0-59]\\\\d|6[04-9]|7[0-27]|8[0237-9])|3(?:[0-35-9]\\\\d|4[7-9])|[45]\\\\d\\\\d|6(?:[0-27-9]\\\\d|[3-5][1-9]|6[0135-8])|7(?:0[013-9]|[1-37]\\\\d|4[1-35689]|5[1-4689]|6[1-57-9]|8[1-79]|9[1-8])|8(?:0[146-9]|1[0-48]|[248]\\\\d|3[1-79]|5[01589]|6[013-68]|7[124-8]|9[0-8])|9(?:[0-24]\\\\d|3[02-46-9]|5[0-79]|60|7[0169]|8[57-9]|9[02-9])))\\\\d{4}\", , , , \"8092345678\", , , , [7]], [, , \"8[024]9[2-9]\\\\d{6}\", , , , \"8092345678\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00(?:14|[2-9]\\\\d)|(?:33|44|55|66|77|88)[2-9]\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"8002123456\"\n    ], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"DO\", 1, \"011\", \"1\", , , \"1\", , , , , , [, , , , , , , , , [-1]], , \"8001|8[024]9\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    DZ: [\n      ,\n      [, , \"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\", , , , , , , [8, 9]],\n      [, , \"9619\\\\d{5}|(?:1\\\\d|2[013-79]|3[0-8]|4[013-689])\\\\d{6}\", , , , \"12345678\"],\n      [, , \"(?:5(?:4[0-29]|5\\\\d|6[0-2])|6(?:[569]\\\\d|7[0-6])|7[7-9]\\\\d)\\\\d{6}\", , , , \"551234567\", , , [9]],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"80[3-689]1\\\\d{5}\", , , , \"808123456\", , , [9]],\n      [, , \"80[12]1\\\\d{5}\", , , , \"801123456\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , \"98[23]\\\\d{6}\", , , , \"983123456\", , , [9]],\n      \"DZ\",\n      213,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [\n        [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[1-4]\"], \"0$1\"],\n        [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"9\"], \"0$1\"],\n        [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-8]\"], \"0$1\"]\n      ],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    EC: [\n      ,\n      [, , \"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\", , , , , , , [8, 9, 10, 11], [7]],\n      [, , \"[2-7][2-7]\\\\d{6}\", , , , \"22123456\", , , [8], [7]],\n      [, , \"964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}\", , , , \"991234567\", , , [9]],\n      [, , \"1800\\\\d{7}|1[78]00\\\\d{6}\", , , , \"18001234567\", , , [10, 11]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"[2-7]890\\\\d{4}\", , , , \"28901234\", , , [8]],\n      \"EC\",\n      593,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-7]\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2-$3\", [\"[2-7]\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1\"]]],\n      [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-7]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1\"]]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    EE: [\n      ,\n      [, , \"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\", , , , , , , [7, 8, 10]],\n      [\n        ,\n        ,\n        \"(?:3[23589]|4[3-8]|6\\\\d|7[1-9]|88)\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"3212345\",\n        ,\n        ,\n        [7]\n      ],\n      [, , \"(?:5\\\\d{5}|8(?:1(?:0(?:000|[3-9]\\\\d\\\\d)|(?:1(?:0[236]|1\\\\d)|(?:2[0-59]|[3-79]\\\\d)\\\\d)\\\\d)|2(?:0(?:000|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-6]\\\\d|3[5-9])\\\\d|7(?:[3679]\\\\d|8[13-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}\", , , , \"51234567\", , , [7, 8]],\n      [, , \"800(?:(?:0\\\\d\\\\d|1)\\\\d|[2-9])\\\\d{3}\", , , , \"80012345\"],\n      [, , \"(?:40\\\\d\\\\d|900)\\\\d{4}\", , , , \"9001234\", , , [7, 8]],\n      [, , , , , , , , , [-1]],\n      [, , \"70[0-2]\\\\d{5}\", , , , \"70012345\", , , [8]],\n      [, , , , , , , , , [-1]],\n      \"EE\",\n      372,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\", \"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]], [, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"[45]|8(?:00|[1-49])\", \"[45]|8(?:00[1-9]|[1-49])\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"800[2-9]\\\\d{3}\", , , , , , , [7]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    EG: [, [\n      ,\n      ,\n      \"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9, 10],\n      [6, 7]\n    ], [, , \"13[23]\\\\d{6}|(?:15|57)\\\\d{6,7}|(?:2[2-4]|3|4[05-8]|5[05]|6[24-689]|8[2468]|9[235-7])\\\\d{7}\", , , , \"234567890\", , , [8, 9], [6, 7]], [, , \"1[0-25]\\\\d{8}\", , , , \"1001234567\", , , [10]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"900\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"EG\", 20, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{7,8})\", \"$1 $2\", [\"[23]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6,7})\", \"$1 $2\", [\"1[35]|[4-6]|8[2468]|9[235-7]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[189]\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    EH: [, [, , \"[5-8]\\\\d{8}\", , , , , , , [9]], [, , \"528[89]\\\\d{5}\", , , , \"528812345\"], [, , \"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\", , , , \"650123456\"], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , \"89\\\\d{7}\", , , , \"891234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"592(?:4[0-2]|93)\\\\d{4}\", , , , \"592401234\"], \"EH\", 212, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , \"528[89]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ER: [, [\n      ,\n      ,\n      \"[178]\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7],\n      [6]\n    ], [, , \"(?:1(?:1[12568]|[24]0|55|6[146])|8\\\\d\\\\d)\\\\d{4}\", , , , \"8370362\", , , , [6]], [, , \"(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}\", , , , \"7123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ER\", 291, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[178]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ES: [, [, , \"[5-9]\\\\d{8}\", , , , , , , [9]], [\n      ,\n      ,\n      \"96906(?:0[0-8]|1[1-9]|[2-9]\\\\d)\\\\d\\\\d|9(?:69(?:0[0-57-9]|[1-9]\\\\d)|73(?:[0-8]\\\\d|9[1-9]))\\\\d{4}|(?:8(?:[1356]\\\\d|[28][0-8]|[47][1-9])|9(?:[135]\\\\d|[268][0-8]|4[1-9]|7[124-9]))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"810123456\"\n    ], [, , \"(?:590[16]00\\\\d|9(?:6906(?:09|10)|7390\\\\d\\\\d))\\\\d\\\\d|(?:6\\\\d|7[1-48])\\\\d{7}\", , , , \"612345678\"], [, , \"[89]00\\\\d{6}\", , , , \"800123456\"], [, , \"80[367]\\\\d{6}\", , , , \"803123456\"], [, , \"90[12]\\\\d{6}\", , , , \"901123456\"], [, , \"70\\\\d{7}\", , , , \"701234567\"], [, , , , , , , , , [-1]], \"ES\", 34, \"00\", , , , , , , , [[, \"(\\\\d{4})\", \"$1\", [\"905\"]], [, \"(\\\\d{6})\", \"$1\", [\"[79]9\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]00\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-9]\"]]], [\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[89]00\"]],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-9]\"]]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"51\\\\d{7}\", , , , \"511234567\"], , , [, , , , , , , , , [-1]]],\n    ET: [, [, , \"(?:11|[2-579]\\\\d)\\\\d{7}\", , , , , , , [9], [7]], [\n      ,\n      ,\n      \"11667[01]\\\\d{3}|(?:11(?:1(?:1[124]|2[2-7]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-3]|6[5-8])|5(?:1[578]|44|5[0-4])|6(?:1[578]|2[69]|39|4[5-7]|5[0-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|(?:22|55)[0-6]|33[0134689]|44[04]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:119|22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:(?:11|22)[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"111112345\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"7001\\\\d{5}|(?:7(?:0[1-9]|1[01]|77|86|99)|9\\\\d\\\\d)\\\\d{6}\", , , , \"911234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ET\", 251, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-579]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FI: [\n      ,\n      [, , \"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\", , , , , , , [5, 6, 7, 8, 9, 10, 11, 12]],\n      [\n        ,\n        ,\n        \"(?:1[3-79][1-8]|[235689][1-8]\\\\d)\\\\d{2,6}\",\n        ,\n        ,\n        ,\n        \"131234567\",\n        ,\n        ,\n        [5, 6, 7, 8, 9]\n      ],\n      [, , \"4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}\", , , , \"412345678\", , , [6, 7, 8, 9, 10]],\n      [, , \"800\\\\d{4,6}\", , , , \"800123456\", , , [7, 8, 9]],\n      [, , \"[67]00\\\\d{5,6}\", , , , \"600123456\", , , [8, 9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"FI\",\n      358,\n      \"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{5})\", \"$1\", [\"75[12]\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4,9})\", \"$1 $2\", [\"[2568][1-8]|3(?:0[1-9]|[1-9])|9\"], \"0$1\"], [, \"(\\\\d{6})\", \"$1\", [\"11\"]], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"[12]00|[368]|70[07-9]\"], \"0$1\"], [\n        ,\n        \"(\\\\d{2})(\\\\d{4,8})\",\n        \"$1 $2\",\n        [\"[1245]|7[135]\"],\n        \"0$1\"\n      ], [, \"(\\\\d{2})(\\\\d{6,10})\", \"$1 $2\", [\"7\"], \"0$1\"]],\n      [[, \"(\\\\d)(\\\\d{4,9})\", \"$1 $2\", [\"[2568][1-8]|3(?:0[1-9]|[1-9])|9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"[12]00|[368]|70[07-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4,8})\", \"$1 $2\", [\"[1245]|7[135]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6,10})\", \"$1 $2\", [\"7\"], \"0$1\"]],\n      [, , , , , , , , , [-1]],\n      1,\n      \"1[03-79]|[2-9]\",\n      [, , \"20(?:2[023]|9[89])\\\\d{1,6}|(?:60[12]\\\\d|7099)\\\\d{4,5}|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:[1-3]00|7(?:0[1-5]\\\\d\\\\d|5[03-9]))\\\\d{3,7}\"],\n      [, , \"20\\\\d{4,8}|60[12]\\\\d{5,6}|7(?:099\\\\d{4,5}|5[03-9]\\\\d{3,7})|20[2-59]\\\\d\\\\d|(?:606|7(?:0[78]|1|3\\\\d))\\\\d{7}|(?:10|29|3[09]|70[1-5]\\\\d)\\\\d{4,8}\", , , , \"10112345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    FJ: [\n      ,\n      [, , \"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\", , , , , , , [7, 11]],\n      [, , \"603\\\\d{4}|(?:3[0-5]|6[25-7]|8[58])\\\\d{5}\", , , , \"3212345\", , , [7]],\n      [, , \"(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}\", , , , \"7012345\", , , [7]],\n      [, , \"0800\\\\d{7}\", , , , \"08001234567\", , , [11]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"FJ\",\n      679,\n      \"0(?:0|52)\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[235-9]|45\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    FK: [, [, , \"[2-7]\\\\d{4}\", , , , , , , [5]], [, , \"[2-47]\\\\d{4}\", , , , \"31234\"], [, , \"[56]\\\\d{4}\", , , , \"51234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"FK\", 500, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FM: [, [, , \"(?:[39]\\\\d\\\\d|820)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-6]\\\\d)\\\\d)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"3201234\"\n    ], [, , \"31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}\", , , , \"3501234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"FM\", 691, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[389]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FO: [, [, , \"[2-9]\\\\d{5}\", , , , , , , [6]], [, , \"(?:20|[34]\\\\d|8[19])\\\\d{4}\", , , , \"201234\"], [, , \"(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}\", , , , \"211234\"], [, , \"80[257-9]\\\\d{3}\", , , , \"802123\"], [\n      ,\n      ,\n      \"90(?:[13-5][15-7]|2[125-7]|9\\\\d)\\\\d\\\\d\",\n      ,\n      ,\n      ,\n      \"901123\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:6[0-36]|88)\\\\d{4}\", , , , \"601234\"], \"FO\", 298, \"00\", , , , \"(10(?:01|[12]0|88))\", , , , [[, \"(\\\\d{6})\", \"$1\", [\"[2-9]\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    FR: [, [, , \"[1-9]\\\\d{8}\", , , , , , , [9]], [, , \"(?:[1-35]\\\\d|4[1-9])\\\\d{7}\", , , , \"123456789\"], [, , \"(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}\", , , , \"612345678\"], [, , \"80[0-5]\\\\d{6}\", , , , \"801234567\"], [\n      ,\n      ,\n      \"836(?:0[0-36-9]|[1-9]\\\\d)\\\\d{4}|8(?:1[2-9]|2[2-47-9]|3[0-57-9]|[569]\\\\d|8[0-35-9])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"891123456\"\n    ], [, , \"8(?:1[01]|2[0156]|4[02]|84)\\\\d{6}\", , , , \"884012345\"], [, , , , , , , , , [-1]], [, , \"9\\\\d{8}\", , , , \"912345678\"], \"FR\", 33, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})\", \"$1\", [\"10\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0 $1\"], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[1-79]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0 $1\"], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[1-79]\"], \"0$1\"]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]], [, , \"80[6-9]\\\\d{6}\", , , , \"806123456\"], , , [, , , , , , , , , [-1]]],\n    GA: [, [, , \"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\", , , , , , , [7, 8]], [, , \"[01]1\\\\d{6}\", , , , \"01441234\", , , [8]], [, , \"(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}\", , , , \"06031234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GA\", 241, \"00\", , , , \"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\", \"$1\", , , [[, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2-7]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"0\"]\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"11|[67]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GB: [, [, , \"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\", , , , , , , [7, 9, 10], [4, 5, 6, 8]], [\n      ,\n      ,\n      \"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0235])|4(?:[0-5]\\\\d\\\\d|69[7-9]|70[0-579])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|50))\\\\d)|2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d\\\\d|1(?:[0-7]\\\\d\\\\d|8(?:[02]\\\\d|1[0-246-9])))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"1212345678\",\n      ,\n      ,\n      [9, 10],\n      [4, 5, 6, 7, 8]\n    ], [, , \"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\", , , , \"7400123456\", , , [10]], [, , \"80[08]\\\\d{7}|800\\\\d{6}|8001111\", , , , \"8001234567\"], [, , \"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\", , , , \"9012345678\", , , [7, 10]], [, , , , , , , , , [-1]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], [\n      ,\n      ,\n      \"56\\\\d{8}\",\n      ,\n      ,\n      ,\n      \"5612345678\",\n      ,\n      ,\n      [10]\n    ], \"GB\", 44, \"00\", \"0\", \" x\", , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"800\", \"8001\", \"80011\", \"800111\", \"8001111\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"845\", \"8454\", \"84546\", \"845464\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"800\"], \"0$1\"], [, \"(\\\\d{5})(\\\\d{4,5})\", \"$1 $2\", [\"1(?:38|5[23]|69|76|94)\", \"1(?:(?:38|69)7|5(?:24|39)|768|946)\", \"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5,6})\", \"$1 $2\", [\"1(?:[2-69][02-9]|[78])\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\n      \"[25]|7(?:0|6[02-9])\",\n      \"[25]|7(?:0|6(?:[03-9]|2[356]))\"\n    ], \"0$1\"], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"7\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1389]\"], \"0$1\"]], , [, , \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\", , , , \"7640123456\", , , [10]], 1, , [, , , , , , , , , [-1]], [, , \"(?:3[0347]|55)\\\\d{8}\", , , , \"5512345678\", , , [10]], , , [, , , , , , , , , [-1]]],\n    GD: [\n      ,\n      [, , \"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:[06]8|3[5-9]|4[0-49]|5[5-79]|73|90)|63[68]|7(?:58|84)|800|938)\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"4732691234\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"473(?:4(?:0[2-79]|1[04-9]|2[0-5]|58)|5(?:2[01]|3[3-8])|901)\\\\d{4}\", , , , \"4734031234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"GD\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-9]\\\\d{6})$|1\",\n      \"473$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"473\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    GE: [, [, , \"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\", , , , , , , [9], [6, 7]], [, , \"(?:3(?:[256]\\\\d|4[124-9]|7[0-4])|4(?:1\\\\d|2[2-7]|3[1-79]|4[2-8]|7[239]|9[1-7]))\\\\d{6}\", , , , \"322123456\", , , , [6, 7]], [\n      ,\n      ,\n      \"5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:00(?:0\\\\d|5[05])|11(?:00|[124]\\\\d|3[01])|(?:520|909)0|75(?:00|[57]5)|8(?:0(?:[01]\\\\d|2[0-4])|58[89]|8(?:55|88)))\\\\d{4}|(?:5(?:[14]4|5[0157-9]|68|7[0147-9]|9[1-35-9])|790)\\\\d{6}|5(?:0(?:070|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"555123456\"\n    ], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"70[67]\\\\d{6}\", , , , \"706123456\"], \"GE\", 995, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"70\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"32\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[57]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[348]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"70[67]\\\\d{6}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GF: [, [\n      ,\n      ,\n      \"(?:[56]94|80\\\\d|976)\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9]\n    ], [, , \"594(?:[0239]\\\\d|1[0-2]|4[03-9]|5[6-9]|6[0-3]|80)\\\\d{4}\", , , , \"594101234\"], [, , \"694(?:[0-249]\\\\d|3[0-8])\\\\d{4}\", , , , \"694201234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"976\\\\d{6}\", , , , \"976012345\"], \"GF\", 594, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[569]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GG: [, [\n      ,\n      ,\n      \"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 9, 10],\n      [6]\n    ], [, , \"1481[25-9]\\\\d{5}\", , , , \"1481256789\", , , [10], [6]], [, , \"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\", , , , \"7781123456\", , , [10]], [, , \"80[08]\\\\d{7}|800\\\\d{6}|8001111\", , , , \"8001234567\"], [, , \"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\", , , , \"9012345678\", , , [7, 10]], [, , , , , , , , , [-1]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], [, , \"56\\\\d{8}\", , , , \"5612345678\", , , [10]], \"GG\", 44, \"00\", \"0\", , , \"([25-9]\\\\d{5})$|0\", \"1481$1\", , , , , [\n      ,\n      ,\n      \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"7640123456\",\n      ,\n      ,\n      [10]\n    ], , , [, , , , , , , , , [-1]], [, , \"(?:3[0347]|55)\\\\d{8}\", , , , \"5512345678\", , , [10]], , , [, , , , , , , , , [-1]]],\n    GH: [, [, , \"(?:[235]\\\\d{3}|800)\\\\d{5}\", , , , , , , [8, 9], [7]], [, , \"3082[0-5]\\\\d{4}|3(?:0(?:[237]\\\\d|8[01])|[167](?:2[0-6]|7\\\\d|80)|2(?:2[0-5]|7\\\\d|80)|3(?:2[0-3]|7\\\\d|80)|4(?:2[013-9]|3[01]|7\\\\d|80)|5(?:2[0-7]|7\\\\d|80)|8(?:2[0-2]|7\\\\d|80)|9(?:[28]0|7\\\\d))\\\\d{5}\", , , , \"302345678\", , , [9], [7]], [, , \"(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}\", , , , \"231234567\", , , [9]], [\n      ,\n      ,\n      \"800\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"80012345\",\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GH\", 233, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[237]|8[0-2]\"]], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[235]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[235]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , \"800\\\\d{5}\", , , , , , , [8]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GI: [, [, , \"(?:[25]\\\\d\\\\d|606)\\\\d{5}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2190[0-2]\\\\d{3}|2(?:0(?:0\\\\d|20)|16[24-9]|2[2-5]\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"20012345\"\n    ], [, , \"525(?:0\\\\d|1[0-4])\\\\d{3}|(?:5[146-8]\\\\d|606)\\\\d{5}\", , , , \"57123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GI\", 350, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"2\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GL: [, [, , \"(?:19|[2-689]\\\\d|70)\\\\d{4}\", , , , , , , [6]], [, , \"(?:19|3[1-7]|6[14689]|70|8[14-79]|9\\\\d)\\\\d{4}\", , , , \"321000\"], [, , \"[245]\\\\d{5}\", , , , \"221234\"], [, , \"80\\\\d{4}\", , , , \"801234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"3[89]\\\\d{4}\", , , , \"381234\"], \"GL\", 299, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"19|[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GM: [\n      ,\n      [, , \"[2-9]\\\\d{6}\", , , , , , , [7]],\n      [, , \"(?:4(?:[23]\\\\d\\\\d|4(?:1[024679]|[6-9]\\\\d))|5(?:5(?:3\\\\d|4[0-7])|6[67]\\\\d|7(?:1[04]|2[035]|3[58]|48))|8\\\\d{3})\\\\d{3}\", , , , \"5661234\"],\n      [, , \"(?:[23679]\\\\d|5[0-389])\\\\d{5}\", , , , \"3012345\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"GM\",\n      220,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-9]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    GN: [, [, , \"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\", , , , , , , [8, 9]], [, , \"3(?:0(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])|1\\\\d\\\\d)\\\\d{4}\", , , , \"30241234\", , , [8]], [, , \"6[0-356]\\\\d{7}\", , , , \"601123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"722\\\\d{6}\", , , , \"722123456\", , , [9]], \"GN\", 224, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"3\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[67]\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GP: [, [, , \"(?:590|(?:69|80)\\\\d|976)\\\\d{6}\", , , , , , , [9]], [, , \"590(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1289]|5[3-579]|6[0-489]|7[08]|8[0-689]|9\\\\d)\\\\d{4}\", , , , \"590201234\"], [, , \"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\", , , , \"690001234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"976[01]\\\\d{5}\", , , , \"976012345\"], \"GP\", 590, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[569]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GQ: [, [, , \"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\", , , , , , , [9]], [, , \"33[0-24-9]\\\\d[46]\\\\d{4}|3(?:33|5\\\\d)\\\\d[7-9]\\\\d{4}\", , , , \"333091234\"], [, , \"(?:222|55\\\\d)\\\\d{6}\", , , , \"222123456\"], [, , \"80\\\\d[1-9]\\\\d{5}\", , , , \"800123456\"], [, , \"90\\\\d[1-9]\\\\d{5}\", , , , \"900123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GQ\", 240, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[235]\"]\n    ], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"[89]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GR: [, [, , \"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\", , , , , , , [10, 11, 12]], [\n      ,\n      ,\n      \"2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"2123456789\",\n      ,\n      ,\n      [10]\n    ], [, , \"68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}\", , , , \"6912345678\", , , [10]], [, , \"800\\\\d{7,9}\", , , , \"8001234567\"], [, , \"90[19]\\\\d{7}\", , , , \"9091234567\", , , [10]], [, , \"8(?:0[16]|12|[27]5|50)\\\\d{7}\", , , , \"8011234567\", , , [10]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], [, , , , , , , , , [-1]], \"GR\", 30, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"21|7\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2689]\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\n      \"$1 $2 $3\",\n      [\"8\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"5005000\\\\d{3}\", , , , \"5005000123\", , , [10]], , , [, , , , , , , , , [-1]]],\n    GT: [\n      ,\n      [, , \"(?:1\\\\d{3}|[2-7])\\\\d{7}\", , , , , , , [8, 11]],\n      [, , \"[267][2-9]\\\\d{6}\", , , , \"22456789\", , , [8]],\n      [, , \"[3-5]\\\\d{7}\", , , , \"51234567\", , , [8]],\n      [, , \"18[01]\\\\d{8}\", , , , \"18001112222\", , , [11]],\n      [, , \"19\\\\d{9}\", , , , \"19001112222\", , , [11]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"GT\",\n      502,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-7]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    GU: [, [, , \"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\", , , , \"6713001234\", , , , [7]], [\n      ,\n      ,\n      \"671(?:3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-46-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[48])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[78]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6713001234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"GU\", 1, \"011\", \"1\", , , \"([3-9]\\\\d{6})$|1\", \"671$1\", , 1, , , [, , , , , , , , , [-1]], , \"671\", [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    GW: [, [, , \"[49]\\\\d{8}|4\\\\d{6}\", , , , , , , [7, 9]], [, , \"443\\\\d{6}\", , , , \"443201234\", , , [9]], [, , \"9(?:5\\\\d|6[569]|77)\\\\d{6}\", , , , \"955012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"40\\\\d{5}\", , , , \"4012345\", , , [7]], \"GW\", 245, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"40\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[49]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    GY: [, [, , \"9008\\\\d{3}|(?:[2-467]\\\\d\\\\d|862)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"(?:2(?:1[6-9]|2[0-35-9]|3[1-4]|5[3-9]|6\\\\d|7[0-24-79])|3(?:2[25-9]|3\\\\d)|4(?:4[0-24]|5[56])|77[1-57])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2201234\"\n    ], [, , \"(?:6\\\\d\\\\d|70[0-35-7])\\\\d{4}\", , , , \"6091234\"], [, , \"(?:289|862)\\\\d{4}\", , , , \"2891234\"], [, , \"9008\\\\d{3}\", , , , \"9008123\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"GY\", 592, \"001\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-46-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HK: [\n      ,\n      [, , \"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\", , , , , , , [\n        5,\n        6,\n        7,\n        8,\n        9,\n        11\n      ]],\n      [, , \"(?:2(?:[13-9]\\\\d|2[013-9])\\\\d|3(?:(?:[1569][0-24-9]|4[0-246-9]|7[0-24-69])\\\\d|8(?:[45][0-8]|6[01]|9\\\\d))|58(?:0[1-8]|1[2-9]))\\\\d{4}\", , , , \"21234567\", , , [8]],\n      [\n        ,\n        ,\n        \"(?:4(?:44[5-9]|6(?:0[0-7]|1[0-6]|4[0-57-9]|6[0-4]|7[0-8]))|573[0-6]|6(?:26[013-8]|66[0-3])|70(?:7[1-5]|8[0-4])|848[015-9]|9(?:29[013-9]|59[0-4]))\\\\d{4}|(?:4(?:4[01]|6[2358])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|84[09]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}\",\n        ,\n        ,\n        ,\n        \"51234567\",\n        ,\n        ,\n        [8]\n      ],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"900(?:[0-24-9]\\\\d{7}|3\\\\d{1,4})\", , , , \"90012345678\", , , [5, 6, 7, 8, 11]],\n      [, , , , , , , , , [-1]],\n      [, , \"8(?:1[0-4679]\\\\d|2(?:[0-36]\\\\d|7[0-4])|3(?:[034]\\\\d|2[09]|70))\\\\d{4}\", , , , \"81123456\", , , [8]],\n      [, , , , , , , , , [-1]],\n      \"HK\",\n      852,\n      \"00(?:30|5[09]|[126-9]?)\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{3})(\\\\d{2,5})\", \"$1 $2\", [\"900\", \"9003\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]]],\n      ,\n      [, , \"7(?:1(?:0[0-38]|1[0-3679]|3[013]|69|9[0136])|2(?:[02389]\\\\d|1[18]|7[27-9])|3(?:[0-38]\\\\d|7[0-369]|9[2357-9])|47\\\\d|5(?:[178]\\\\d|5[0-5])|6(?:0[0-7]|2[236-9]|[35]\\\\d)|7(?:[27]\\\\d|8[7-9])|8(?:[23689]\\\\d|7[1-9])|9(?:[025]\\\\d|6[0-246-8]|7[0-36-9]|8[238]))\\\\d{4}\", , , , \"71123456\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"30(?:0[1-9]|[15-7]\\\\d|2[047]|89)\\\\d{4}\", , , , \"30161234\", , , [8]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    HN: [, [, , \"8\\\\d{10}|[237-9]\\\\d{7}\", , , , , , , [8, 11]], [\n      ,\n      ,\n      \"2(?:2(?:0[0-59]|1[1-9]|[23]\\\\d|4[02-6]|5[57]|6[245]|7[0135689]|8[01346-9]|9[0-2])|4(?:0[578]|2[3-59]|3[13-9]|4[0-68]|5[1-3589])|5(?:0[2357-9]|1[1-356]|4[03-5]|5\\\\d|6[014-69]|7[04]|80)|6(?:[056]\\\\d|17|2[067]|3[047]|4[0-378]|[78][0-8]|9[01])|7(?:0[5-79]|6[46-9]|7[02-9]|8[034]|91)|8(?:79|8[0-357-9]|9[1-57-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"22123456\",\n      ,\n      ,\n      [8]\n    ], [, , \"[37-9]\\\\d{7}\", , , , \"91234567\", , , [8]], [, , \"8002\\\\d{7}\", , , , \"80021234567\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"HN\", 504, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[237-9]\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[237-9]\"]]], [, , , , , , , , , [-1]], , , [, , \"8002\\\\d{7}\", , , , , , , [11]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HR: [, [, , \"(?:[24-69]\\\\d|3[0-79])\\\\d{7}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{5,6}\", , , , , , , [6, 7, 8, 9]], [\n      ,\n      ,\n      \"1\\\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"12345678\",\n      ,\n      ,\n      [8, 9],\n      [6, 7]\n    ], [, , \"98\\\\d{6,7}|975(?:1\\\\d|77|9[67])\\\\d{4}|9(?:0[1-9]|[1259]\\\\d|7[0679])\\\\d{6}\", , , , \"921234567\", , , [8, 9]], [, , \"80[01]\\\\d{4,6}\", , , , \"800123456\", , , [7, 8, 9]], [, , \"6[01459]\\\\d{6}|6[01]\\\\d{4,5}\", , , , \"611234\", , , [6, 7, 8]], [, , , , , , , , , [-1]], [, , \"7[45]\\\\d{6}\", , , , \"74123456\", , , [8]], [, , , , , , , , , [-1]], \"HR\", 385, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"6[01]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"[67]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-5]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"62\\\\d{6,7}|72\\\\d{6}\", , , , \"62123456\", , , [8, 9]], , , [, , , , , , , , , [-1]]],\n    HT: [, [, , \"(?:[2-489]\\\\d|55)\\\\d{6}\", , , , , , , [8]], [, , \"2(?:2\\\\d|5[1-5]|81|9[149])\\\\d{5}\", , , , \"22453300\"], [, , \"(?:[34]\\\\d|55)\\\\d{6}\", , , , \"34101234\"], [, , \"8\\\\d{7}\", , , , \"80012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"9(?:[67][0-4]|8[0-3589]|9\\\\d)\\\\d{5}\", , , , \"98901234\"], \"HT\", 509, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-589]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    HU: [, [, , \"[235-7]\\\\d{8}|[1-9]\\\\d{7}\", , , , , , , [8, 9], [6, 7]], [, , \"(?:1\\\\d|[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6[23689]|8[2-57-9]|9[2-69])\\\\d{6}\", , , , \"12345678\", , , [8], [6, 7]], [, , \"(?:[257]0|3[01])\\\\d{7}\", , , , \"201234567\", , , [9]], [, , \"(?:[48]0\\\\d|680[29])\\\\d{5}\", , , , \"80123456\"], [\n      ,\n      ,\n      \"9[01]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"90123456\",\n      ,\n      ,\n      [8]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"21\\\\d{7}\", , , , \"211234567\", , , [9]], \"HU\", 36, \"00\", \"06\", , , \"06\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"(06 $1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"], \"(06 $1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-9]\"], \"06 $1\"]], , [, , , , , , , , , [-1]], , , [, , \"(?:[48]0\\\\d|680[29])\\\\d{5}\"], [, , \"38\\\\d{7}\", , , , \"381234567\", , , [9]], , , [, , , , , , , , , [-1]]],\n    ID: [, [\n      ,\n      ,\n      \"(?:(?:00[1-9]|8\\\\d)\\\\d{4}|[1-36])\\\\d{6}|00\\\\d{10}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8, 9, 10, 11, 12, 13],\n      [5, 6]\n    ], [\n      ,\n      ,\n      \"2[124]\\\\d{7,8}|619\\\\d{8}|2(?:1(?:14|500)|2\\\\d{3})\\\\d{3}|61\\\\d{5,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\\\d|9[1-8])|3(?:1|[25][1-8]|3[1-68]|4[1-3]|6[1-3568]|7[0-469]|8\\\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|43|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[124-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:[25]\\\\d|3[1-69]|4[1-6])|7(?:02|[125][1-9]|[36]\\\\d|4[1-8]|7[0-36-9])|9(?:0[12]|1[013-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\\\d{5,8}\",\n      ,\n      ,\n      ,\n      \"218350123\",\n      ,\n      ,\n      [7, 8, 9, 10, 11],\n      [5, 6]\n    ], [, , \"8[1-35-9]\\\\d{7,10}\", , , , \"812345678\", , , [9, 10, 11, 12]], [, , \"00[17]803\\\\d{7}|(?:177\\\\d|800)\\\\d{5,7}|001803\\\\d{6}\", , , , \"8001234567\", , , [8, 9, 10, 11, 12, 13]], [, , \"809\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , \"804\\\\d{7}\", , , , \"8041234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ID\", 62, \"00[89]\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"15\"]], [, \"(\\\\d{2})(\\\\d{5,9})\", \"$1 $2\", [\"2[124]|[36]1\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5,7})\", \"$1 $2\", [\"800\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{5,8})\",\n      \"$1 $2\",\n      [\"[2-79]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\", \"$1-$2-$3\", [\"8[1-35-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6,8})\", \"$1 $2\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"804\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"80\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"001\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]]], [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"15\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{5,9})\",\n      \"$1 $2\",\n      [\"2[124]|[36]1\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{3})(\\\\d{5,7})\", \"$1 $2\", [\"800\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5,8})\", \"$1 $2\", [\"[2-79]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\", \"$1-$2-$3\", [\"8[1-35-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6,8})\", \"$1 $2\", [\"1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"804\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"80\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"8\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , \"001803\\\\d{6,7}|(?:007803\\\\d|8071)\\\\d{6}\", , , , , , , [10, 12, 13]], [\n      ,\n      ,\n      \"(?:1500|8071\\\\d{3})\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"8071123456\",\n      ,\n      ,\n      [7, 10]\n    ], , , [, , , , , , , , , [-1]]],\n    IE: [, [, , \"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\", , , , , , , [7, 8, 9, 10], [5, 6]], [, , \"(?:1\\\\d|21)\\\\d{6,7}|(?:2[24-9]|4(?:0[24]|5\\\\d|7)|5(?:0[45]|1\\\\d|8)|6(?:1\\\\d|[237-9])|9(?:1\\\\d|[35-9]))\\\\d{5}|(?:23|4(?:[1-469]|8\\\\d)|5[23679]|6[4-6]|7[14]|9[04])\\\\d{7}\", , , , \"2212345\", , , , [5, 6]], [, , \"8(?:22|[35-9]\\\\d)\\\\d{6}\", , , , \"850123456\", , , [9]], [, , \"1800\\\\d{6}\", , , , \"1800123456\", , , [10]], [, , \"15(?:1[2-8]|[2-8]0|9[089])\\\\d{6}\", , , , \"1520123456\", , , [10]], [\n      ,\n      ,\n      \"18[59]0\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"1850123456\",\n      ,\n      ,\n      [10]\n    ], [, , \"700\\\\d{6}\", , , , \"700123456\", , , [9]], [, , \"76\\\\d{7}\", , , , \"761234567\", , , [9]], \"IE\", 353, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"2[24-9]|47|58|6[237-9]|9[35-9]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[45]0\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2569]|4[1-69]|7[14]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"70\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"81\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[78]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"4\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"18[59]0\\\\d{6}\", , , , , , , [10]], [, , \"818\\\\d{6}\", , , , \"818123456\", , , [9]], , , [, , \"88210[1-9]\\\\d{4}|8(?:[35-79]5\\\\d\\\\d|8(?:[013-9]\\\\d\\\\d|2(?:[01][1-9]|[2-9]\\\\d)))\\\\d{5}\", , , , \"8551234567\", , , [10]]],\n    IL: [\n      ,\n      [, , \"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\", , , , , , , [7, 8, 9, 10, 11, 12]],\n      [\n        ,\n        ,\n        \"153\\\\d{8,9}|29[1-9]\\\\d{5}|(?:2[0-8]|[3489]\\\\d)\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"21234567\",\n        ,\n        ,\n        [8, 11, 12],\n        [7]\n      ],\n      [, , \"5(?:(?:[02368]\\\\d|[19][2-9]|4[1-9])\\\\d|5(?:01|1[79]|2[2-9]|3[0-3]|4[34]|5[015689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}\", , , , \"502345678\", , , [9]],\n      [, , \"1(?:255|80[019]\\\\d{3})\\\\d{3}\", , , , \"1800123456\", , , [7, 10]],\n      [, , \"1212\\\\d{4}|1(?:200|9(?:0[0-2]|19))\\\\d{6}\", , , , \"1919123456\", , , [8, 10]],\n      [, , \"1700\\\\d{6}\", , , , \"1700123456\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , \"7(?:380|8(?:33|55|77|81))\\\\d{5}|7(?:18|2[23]|3[237]|47|6[258]|7\\\\d|82|9[2-9])\\\\d{6}\", , , , \"771234567\", , , [9]],\n      \"IL\",\n      972,\n      \"0(?:0|1[2-9])\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{3})\", \"$1-$2\", [\"125\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"121\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-489]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3\", [\"12\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1-$2\", [\"159\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3-$4\", [\"1[7-9]\"]], [, \"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3-$4\", [\"15\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"1700\\\\d{6}\", , , , , , , [10]],\n      [\n        ,\n        ,\n        \"1599\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"1599123456\",\n        ,\n        ,\n        [10]\n      ],\n      ,\n      ,\n      [, , \"151\\\\d{8,9}\", , , , \"15112340000\", , , [11, 12]]\n    ],\n    IM: [, [, , \"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\", , , , , , , [10], [6]], [, , \"1624(?:230|[5-8]\\\\d\\\\d)\\\\d{3}\", , , , \"1624756789\", , , , [6]], [, , \"76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}\", , , , \"7924123456\"], [, , \"808162\\\\d{4}\", , , , \"8081624567\"], [, , \"8(?:440[49]06|72299\\\\d)\\\\d{3}|(?:8(?:45|70)|90[0167])624\\\\d{4}\", , , , \"9016247890\"], [, , , , , , , , , [-1]], [, , \"70\\\\d{8}\", , , , \"7012345678\"], [, , \"56\\\\d{8}\", , , , \"5612345678\"], \"IM\", 44, \"00\", \"0\", , , \"([25-8]\\\\d{5})$|0\", \"1624$1\", , , , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , \"74576|(?:16|7[56])24\", [, , , , , , , , , [-1]], [, , \"3440[49]06\\\\d{3}|(?:3(?:08162|3\\\\d{4}|45624|7(?:0624|2299))|55\\\\d{4})\\\\d{4}\", , , , \"5512345678\"], , , [, , , , , , , , , [-1]]],\n    IN: [, [, , \"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\", , , , , , , [8, 9, 10, 11, 12, 13], [6, 7]], [\n      ,\n      ,\n      \"2717(?:[2-7]\\\\d|95)\\\\d{4}|(?:271[0-689]|782[0-6])[2-7]\\\\d{5}|(?:170[24]|2(?:(?:[02][2-79]|90)\\\\d|80[13468])|(?:3(?:23|80)|683|79[1-7])\\\\d|4(?:20[24]|72[2-8])|552[1-7])\\\\d{6}|(?:11|33|4[04]|80)[2-7]\\\\d{7}|(?:342|674|788)(?:[0189][2-7]|[2-7]\\\\d)\\\\d{5}|(?:1(?:2[0-249]|3[0-25]|4[145]|[59][14]|6[014]|7[1257]|8[01346])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[13]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[014-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-7]\\\\d{6}|(?:1(?:2[35-8]|3[346-9]|4[236-9]|[59][0235-9]|6[235-9]|7[34689]|8[257-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[3-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1245]|4[5-8]|5[125689]|6[235-7]|7[157-9]|8[2-46-8])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:[16][146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])|7(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|8[013-7]|9[089])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\\\d[2-7]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7410410123\",\n      ,\n      ,\n      [10],\n      [6, 7, 8]\n    ], [\n      ,\n      ,\n      \"(?:61279|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:6(?:12|[2-47]1|5[17]|6[13]|80)[0189]|7(?:1(?:2[0189]|9[0-5])|2(?:[14][017-9]|8[0-59])|3(?:2[5-8]|[34][017-9]|9[016-9])|4(?:1[015-9]|[29][89]|39|8[389])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:7(?:31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:0\\\\d|2[0235-79]|3[05-8]|40|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|8[124-6])\\\\d|7(?:[235689]\\\\d|4[0189]))|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-5])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"8123456789\",\n      ,\n      ,\n      [10]\n    ], [, , \"000800\\\\d{7}|1(?:600\\\\d{6}|80(?:0\\\\d{4,9}|3\\\\d{9}))\", , , , \"1800123456\"], [, , \"186[12]\\\\d{9}\", , , , \"1861123456789\", , , [13]], [, , \"1860\\\\d{7}\", , , , \"18603451234\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IN\", 91, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{7})\", \"$1\", [\"575\"]], [, \"(\\\\d{8})\", \"$1\", [\"5(?:0|2[23]|3[03]|[67]1|88)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"], , , 1], [, \"(\\\\d{4})(\\\\d{4,5})\", \"$1 $2\", [\"180\", \"1800\"], , , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"140\"],\n      ,\n      ,\n      1\n    ], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\", \"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\", \"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\n        \"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"\n      ],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\n      \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\n      \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\n      \"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"\n    ], \"0$1\", , 1], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"[6-9]\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1(?:6|8[06])\", \"1(?:6|8[06]0)\"], , , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3 $4\",\n      [\"0\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"18\"], , , 1]], [[, \"(\\\\d{8})\", \"$1\", [\"5(?:0|2[23]|3[03]|[67]1|88)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\", \"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"], , , 1], [, \"(\\\\d{4})(\\\\d{4,5})\", \"$1 $2\", [\"180\", \"1800\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"140\"], , , 1], [\n      ,\n      \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\", \"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\", \"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\n      \"0$1\",\n      ,\n      1\n    ], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\n        \"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|4[47]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67|72)[14]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:2[14]|3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31|4[47])|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\n        \"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:(?:2[14]|5[15])[2-6]|3171|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|(?:74[47]|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"\n      ],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\n      \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|28|3[129]|4[1-35689]|5[29]|6[02-5]|70)|807\",\n      \"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1(?:[013-8]|9[6-9])|28[6-8]|3(?:17|2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\n      \"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|83)|73179|807(?:1|9[1-3])|(?:1552|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[124-6])\\\\d|7(?:1(?:[013-8]\\\\d|9[6-9])|28[6-8]|3(?:2[0-49]|9[2-57])|4(?:1[2-4]|[29][0-7]|3[0-8]|[56]\\\\d|8[0-24-7])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"\n    ], \"0$1\", , 1], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"[6-9]\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1(?:6|8[06])\", \"1(?:6|8[06]0)\"], , , 1], [\n      ,\n      \"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3 $4\",\n      [\"18\"],\n      ,\n      ,\n      1\n    ]], [, , , , , , , , , [-1]], , , [, , \"1(?:600\\\\d{6}|800\\\\d{4,9})|(?:000800|18(?:03\\\\d\\\\d|6(?:0|[12]\\\\d\\\\d)))\\\\d{7}\"], [, , \"140\\\\d{7}\", , , , \"1409305260\", , , [10]], , , [, , , , , , , , , [-1]]],\n    IO: [, [, , \"3\\\\d{6}\", , , , , , , [7]], [, , \"37\\\\d{5}\", , , , \"3709100\"], [, , \"38\\\\d{5}\", , , , \"3801234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IO\", 246, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"3\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    IQ: [, [\n      ,\n      ,\n      \"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9, 10],\n      [6, 7]\n    ], [, , \"1\\\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\\\d{6,7}\", , , , \"12345678\", , , [8, 9], [6, 7]], [, , \"7[3-9]\\\\d{8}\", , , , \"7912345678\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"IQ\", 964, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-6]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    IR: [\n      ,\n      [, , \"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\", , , , , , , [4, 5, 6, 7, 10], [8]],\n      [, , \"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])(?:[03-57]\\\\d{7}|[16]\\\\d{3}(?:\\\\d{4})?|[289]\\\\d{3}(?:\\\\d(?:\\\\d{3})?)?)|94(?:000[09]|2(?:121|[2689]0\\\\d)|30[0-2]\\\\d|4(?:111|40\\\\d))\\\\d{4}\", , , , \"2123456789\", , , [6, 7, 10], [4, 5, 8]],\n      [, , \"9(?:(?:0(?:[0-35]\\\\d|4[4-6])|(?:[13]\\\\d|2[0-3])\\\\d)\\\\d|9(?:[0-46]\\\\d\\\\d|5[15]0|8(?:1\\\\d|88)|9(?:0[0-3]|[19]\\\\d|21|77|8[7-9])))\\\\d{5}\", , , , \"9123456789\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"IR\",\n      98,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4,5})\", \"$1\", [\"96\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4,5})\", \"$1 $2\", [\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-8]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"9(?:4440\\\\d{5}|6(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19]))\", , , , , , , [4, 5, 10]],\n      [\n        ,\n        ,\n        \"96(?:0[12]|2[16-8]|3(?:08|[14]5|[23]|66)|4(?:0|80)|5[01]|6[89]|86|9[19])\",\n        ,\n        ,\n        ,\n        \"9601\",\n        ,\n        ,\n        [4, 5]\n      ],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    IS: [, [, , \"(?:38\\\\d|[4-9])\\\\d{6}\", , , , , , , [7, 9]], [, , \"(?:4(?:1[0-24-69]|2[0-7]|[37][0-8]|4[0-24589]|5[0-68]|6\\\\d|8[0-36-8])|5(?:05|[156]\\\\d|2[02578]|3[0-579]|4[03-7]|7[0-2578]|8[0-35-9]|9[013-689])|872)\\\\d{4}\", , , , \"4101234\", , , [7]], [, , \"(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}\", , , , \"6111234\"], [, , \"80[0-8]\\\\d{4}\", , , , \"8001234\", , , [7]], [\n      ,\n      ,\n      \"90(?:0\\\\d|1[5-79]|2[015-79]|3[135-79]|4[125-7]|5[25-79]|7[1-37]|8[0-35-7])\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"9001234\",\n      ,\n      ,\n      [7]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"49[0-24-79]\\\\d{4}\", , , , \"4921234\", , , [7]], \"IS\", 354, \"00|1(?:0(?:01|[12]0)|100)\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[4-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"3\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"809\\\\d{4}\", , , , \"8091234\", , , [7]], , , [, , \"(?:689|8(?:7[18]|80)|95[48])\\\\d{4}\", , , , \"6891234\", , , [7]]],\n    IT: [, [, , \"0\\\\d{5,10}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\", , , , , , , [6, 7, 8, 9, 10, 11, 12]], [\n      ,\n      ,\n      \"0669[0-79]\\\\d{1,6}|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[1-356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\",\n      ,\n      ,\n      ,\n      \"0212345678\",\n      ,\n      ,\n      [6, 7, 8, 9, 10, 11]\n    ], [, , \"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\", , , , \"3123456789\", , , [9, 10]], [, , \"80(?:0\\\\d{3}|3)\\\\d{3}\", , , , \"800123456\", , , [6, 9]], [, , \"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\", , , , \"899123456\", , , [6, 8, 9, 10]], [, , \"84(?:[08]\\\\d{3}|[17])\\\\d{3}\", , , , \"848123456\", , , [6, 9]], [, , \"1(?:78\\\\d|99)\\\\d{6}\", , , , \"1781234567\", , , [9, 10]], [, , \"55\\\\d{8}\", , , , \"5512345678\", , , [10]], \"IT\", 39, \"00\", , , , , , , , [\n      [, \"(\\\\d{4,5})\", \"$1\", [\"1(?:0|9[246])\", \"1(?:0|9(?:2[2-9]|[46]))\"]],\n      [, \"(\\\\d{6})\", \"$1\", [\"1(?:1|92)\"]],\n      [, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"0[26]\"]],\n      [, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\", \"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],\n      [, \"(\\\\d{4})(\\\\d{2,6})\", \"$1 $2\", [\"0(?:[13-579][2-46-8]|8[236-8])\"]],\n      [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"894\"]],\n      [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[26]|5\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"1(?:44|[679])|[378]\"]],\n      [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[13-57-9][0159]|14\"]],\n      [\n        ,\n        \"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\n        \"$1 $2 $3\",\n        [\"0[26]\"]\n      ],\n      [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]],\n      [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"3\"]]\n    ], [[, \"(\\\\d{2})(\\\\d{4,6})\", \"$1 $2\", [\"0[26]\"]], [, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\", \"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]], [, \"(\\\\d{4})(\\\\d{2,6})\", \"$1 $2\", [\"0(?:[13-579][2-46-8]|8[236-8])\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"894\"]], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[26]|5\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"1(?:44|[679])|[378]\"]\n    ], [, \"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0[13-57-9][0159]|14\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{5})\", \"$1 $2 $3\", [\"0[26]\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"3\"]]], [, , , , , , , , , [-1]], 1, , [, , \"848\\\\d{6}\", , , , , , , [9]], [, , , , , , , , , [-1]], , , [, , \"3[2-8]\\\\d{9,10}\", , , , \"33101234501\", , , [11, 12]]],\n    JE: [, [, , \"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\", , , , , , , [10], [6]], [, , \"1534[0-24-8]\\\\d{5}\", , , , \"1534456789\", , , , [6]], [\n      ,\n      ,\n      \"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97[7-9]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7797712345\"\n    ], [, , \"80(?:07(?:35|81)|8901)\\\\d{4}\", , , , \"8007354567\"], [, , \"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\", , , , \"9018105678\"], [, , , , , , , , , [-1]], [, , \"701511\\\\d{4}\", , , , \"7015115678\"], [, , \"56\\\\d{8}\", , , , \"5612345678\"], \"JE\", 44, \"00\", \"0\", , , \"([0-24-8]\\\\d{5})$|0\", \"1534$1\", , , , , [, , \"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\", , , , \"7640123456\"], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"5512345678\"\n    ], , , [, , , , , , , , , [-1]]],\n    JM: [, [, , \"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"8766060\\\\d{3}|(?:658(?:2(?:[0-8]\\\\d|9[0-46-9])|[3-9]\\\\d\\\\d)|876(?:52[35]|6(?:0[1-3579]|1[0235-9]|[23]\\\\d|40|5[06]|6[2-589]|7[025-9]|8[04]|9[4-9])|7(?:0[2-689]|[1-6]\\\\d|8[056]|9[45])|9(?:0[1-8]|1[02378]|[2-8]\\\\d|9[2-468])))\\\\d{4}\", , , , \"8765230123\", , , , [7]], [\n      ,\n      ,\n      \"(?:658295|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"8762101234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"JM\", 1, \"011\", \"1\", , , \"1\", , , , , , [, , , , , , , , , [-1]], , \"658|876\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    JO: [, [, , \"(?:(?:[2689]|7\\\\d)\\\\d|32|53)\\\\d{6}\", , , , , , , [8, 9]], [\n      ,\n      ,\n      \"87(?:000|90[01])\\\\d{3}|(?:2(?:6(?:2[0-35-9]|3[0-578]|4[24-7]|5[0-24-8]|[6-8][023]|9[0-3])|7(?:0[1-79]|10|2[014-7]|3[0-689]|4[019]|5[0-3578]))|32(?:0[1-69]|1[1-35-7]|2[024-7]|3\\\\d|4[0-3]|[5-7][023])|53(?:0[0-3]|[13][023]|2[0-59]|49|5[0-35-9]|6[15]|7[45]|8[1-6]|9[0-36-9])|6(?:2(?:[05]0|22)|3(?:00|33)|4(?:0[0-25]|1[2-7]|2[0569]|[38][07-9]|4[025689]|6[0-589]|7\\\\d|9[0-2])|5(?:[01][056]|2[034]|3[0-57-9]|4[178]|5[0-69]|6[0-35-9]|7[1-379]|8[0-68]|9[0239]))|87(?:20|7[078]|99))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"62001234\",\n      ,\n      ,\n      [8]\n    ], [, , \"7(?:[78][0-25-9]|9\\\\d)\\\\d{6}\", , , , \"790123456\", , , [9]], [, , \"80\\\\d{6}\", , , , \"80012345\", , , [8]], [, , \"9\\\\d{7}\", , , , \"90012345\", , , [8]], [, , \"85\\\\d{6}\", , , , \"85012345\", , , [8]], [, , \"70\\\\d{7}\", , , , \"700123456\", , , [9]], [, , , , , , , , , [-1]], \"JO\", 962, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2356]|87\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{5,6})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"70\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [\n      ,\n      ,\n      \"74(?:66|77)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"746612345\",\n      ,\n      ,\n      [9]\n    ], , , [, , , , , , , , , [-1]], [, , \"8(?:10|8\\\\d)\\\\d{5}\", , , , \"88101234\", , , [8]], , , [, , , , , , , , , [-1]]],\n    JP: [, [, , \"00[1-9]\\\\d{6,14}|[257-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\", , , , , , , [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]], [, , \"(?:1(?:1[235-8]|2[3-6]|3[3-9]|4[2-6]|[58][2-8]|6[2-7]|7[2-9]|9[1-9])|(?:2[2-9]|[36][1-9])\\\\d|4(?:[2-578]\\\\d|6[02-8]|9[2-59])|5(?:[2-589]\\\\d|6[1-9]|7[2-8])|7(?:[25-9]\\\\d|3[4-9]|4[02-9])|8(?:[2679]\\\\d|3[2-9]|4[5-9]|5[1-9]|8[03-9])|9(?:[2-58]\\\\d|[679][1-9]))\\\\d{6}\", , , , \"312345678\", , , [9]], [\n      ,\n      ,\n      \"[7-9]0[1-9]\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"9012345678\",\n      ,\n      ,\n      [10]\n    ], [, , \"00777(?:[01]|5\\\\d)\\\\d\\\\d|(?:00(?:7778|882[1245])|(?:120|800\\\\d)\\\\d\\\\d)\\\\d{4}|00(?:37|66|78)\\\\d{6,13}\", , , , \"120123456\"], [, , \"990\\\\d{6}\", , , , \"990123456\", , , [9]], [, , , , , , , , , [-1]], [, , \"60\\\\d{7}\", , , , \"601234567\", , , [9]], [, , \"50[1-9]\\\\d{7}\", , , , \"5012345678\", , , [10]], \"JP\", 81, \"010\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"007\", \"0077\", \"00777\", \"00777[01]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3\", [\"(?:12|57|99)0\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d)(\\\\d{4})\", \"$1-$2-$3\", [\n      \"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])\",\n      \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\n      \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"\n    ], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"60\"], \"0$1\"], [\n      ,\n      \"(\\\\d)(\\\\d{4})(\\\\d{4})\",\n      \"$1-$2-$3\",\n      [\"[36]|4(?:2[09]|7[01])\", \"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"],\n      \"0$1\"\n    ], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1-$2-$3\",\n      [\n        \"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"\n      ],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{3,4})\", \"$1-$2-$3\", [\"007\", \"0077\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"008\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"800\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[257-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\", \"$1-$2-$3\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{4,5})\", \"$1-$2-$3\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{5})(\\\\d{5,6})\", \"$1-$2-$3\", [\"0\"]], [\n      ,\n      \"(\\\\d{4})(\\\\d{6})(\\\\d{6,7})\",\n      \"$1-$2-$3\",\n      [\"0\"]\n    ]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1-$2-$3\", [\"(?:12|57|99)0\"], \"0$1\"], [\n      ,\n      \"(\\\\d{4})(\\\\d)(\\\\d{4})\",\n      \"$1-$2-$3\",\n      [\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51|63)|9(?:80|9[16])\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9]|636)|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\", \"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9]|636[457-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"60\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[36]|4(?:2[09]|7[01])\", \"[36]|4(?:2(?:0|9[02-69])|7(?:0[019]|1))\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1-$2-$3\",\n      [\n        \"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[27-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9])|5(?:2|3[045]|4[0-369]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|49|51|6(?:[0-24]|36|5[0-3589]|72|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:49|55|83)[29]|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\",\n        \"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|7[015-9]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17|3[015-9]))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3[045]|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9(?:[019]|4[1-3]|6(?:[0-47-9]|5[01346-9])))|3(?:[29]|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[23]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|72|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|829(?:2|66)|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"\n      ],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3\", [\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"800\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[257-9]\"], \"0$1\"]], [, , \"20\\\\d{8}\", , , , \"2012345678\", , , [10]], , , [, , \"00(?:777(?:[01]|(?:5|8\\\\d)\\\\d)|882[1245]\\\\d\\\\d)\\\\d\\\\d|00(?:37|66|78)\\\\d{6,13}\"], [, , \"570\\\\d{6}\", , , , \"570123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    KE: [, [, , \"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\", , , , , , , [7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:4[245]|5[1-79]|6[01457-9])\\\\d{5,7}|(?:4[136]|5[08]|62)\\\\d{7}|(?:[24]0|66)\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"202012345\",\n      ,\n      ,\n      [7, 8, 9]\n    ], [, , \"(?:1(?:0[0-6]|1[0-5]|2[014]|30)|7\\\\d\\\\d)\\\\d{6}\", , , , \"712123456\", , , [9]], [, , \"800[2-8]\\\\d{5,6}\", , , , \"800223456\", , , [9, 10]], [, , \"900[02-9]\\\\d{5}\", , , , \"900223456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KE\", 254, \"000\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{5,7})\", \"$1 $2\", [\"[24-6]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"[17]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KG: [\n      ,\n      [\n        ,\n        ,\n        \"8\\\\d{9}|(?:[235-8]\\\\d|99)\\\\d{7}\",\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [9, 10],\n        [5, 6]\n      ],\n      [, , \"312(?:5[0-79]\\\\d|9(?:[0-689]\\\\d|7[0-24-9]))\\\\d{3}|(?:3(?:1(?:2[0-46-8]|3[1-9]|47|[56]\\\\d)|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6\\\\d)|5(?:22|3[4-7]|59|6\\\\d)|6(?:22|5[35-7]|6\\\\d)|7(?:22|3[468]|4[1-9]|59|[67]\\\\d)|9(?:22|4[1-8]|6\\\\d))|6(?:09|12|2[2-4])\\\\d)\\\\d{5}\", , , , \"312123456\", , , [9], [5, 6]],\n      [, , \"312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|99[05-9])\\\\d{6}\", , , , \"700123456\", , , [9]],\n      [, , \"800\\\\d{6,7}\", , , , \"800123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"KG\",\n      996,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"3(?:1[346]|[24-79])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[235-79]|88\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KH: [\n      ,\n      [, , \"1\\\\d{9}|[1-9]\\\\d{7,8}\", , , , , , , [8, 9, 10], [6, 7]],\n      [\n        ,\n        ,\n        \"23(?:4(?:[2-4]|[56]\\\\d)|[568]\\\\d\\\\d)\\\\d{4}|23[236-9]\\\\d{5}|(?:2[4-6]|3[2-6]|4[2-4]|[5-7][2-5])(?:(?:[237-9]|4[56]|5\\\\d)\\\\d{5}|6\\\\d{5,6})\",\n        ,\n        ,\n        ,\n        \"23756789\",\n        ,\n        ,\n        [8, 9],\n        [6, 7]\n      ],\n      [, , \"(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}\", , , , \"91234567\", , , [8, 9]],\n      [, , \"1800(?:1\\\\d|2[019])\\\\d{4}\", , , , \"1800123456\", , , [10]],\n      [, , \"1900(?:1\\\\d|2[09])\\\\d{4}\", , , , \"1900123456\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"KH\",\n      855,\n      \"00[14-9]\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[1-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KI: [\n      ,\n      [, , \"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\", , , , , , , [5, 8]],\n      [, , \"(?:[24]\\\\d|3[1-9]|50|65(?:02[12]|12[56]|22[89]|[3-5]00)|7(?:27\\\\d\\\\d|3100|5(?:02[12]|12[56]|22[89]|[34](?:00|81)|500))|8[0-5])\\\\d{3}\", , , , \"31234\"],\n      [, , \"(?:63\\\\d{3}|73(?:0[0-5]\\\\d|140))\\\\d{3}|[67]200[01]\\\\d{3}\", , , , \"72001234\", , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"30(?:0[01]\\\\d\\\\d|12(?:11|20))\\\\d\\\\d\", , , , \"30010000\", , , [8]],\n      \"KI\",\n      686,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KM: [, [, , \"[3478]\\\\d{6}\", , , , , , , [7], [4]], [, , \"7[4-7]\\\\d{5}\", , , , \"7712345\", , , , [4]], [, , \"[34]\\\\d{6}\", , , , \"3212345\"], [, , , , , , , , , [-1]], [, , \"8\\\\d{6}\", , , , \"8001234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KM\", 269, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[3478]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KN: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [\n        ,\n        ,\n        \"869(?:2(?:29|36)|302|4(?:6[015-9]|70)|56[5-7])\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"8692361234\",\n        ,\n        ,\n        ,\n        [7]\n      ],\n      [, , \"869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}\", , , , \"8697652917\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"KN\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-7]\\\\d{6})$|1\",\n      \"869$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"869\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    KP: [, [, , \"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\", , , , , , , [8, 10], [6, 7]], [, , \"(?:(?:195|2)\\\\d|3[19]|4[159]|5[37]|6[17]|7[39]|85)\\\\d{6}\", , , , \"21234567\", , , , [6, 7]], [, , \"19[1-3]\\\\d{7}\", , , , \"1921234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KP\", 850, \"00|99\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-7]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"1\"],\n      \"0$1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , \"238[02-9]\\\\d{4}|2(?:[0-24-9]\\\\d|3[0-79])\\\\d{5}\", , , , , , , [8]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KR: [, [, , \"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\", , , , , , , [5, 6, 8, 9, 10, 11, 12, 13, 14], [3, 4, 7]], [, , \"(?:2|3[1-3]|[46][1-4]|5[1-5])[1-9]\\\\d{6,7}|(?:3[1-3]|[46][1-4]|5[1-5])1\\\\d{2,3}\", , , , \"22123456\", , , [5, 6, 8, 9, 10], [3, 4, 7]], [\n      ,\n      ,\n      \"1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[1-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"1020000000\",\n      ,\n      ,\n      [9, 10]\n    ], [, , \"00(?:308\\\\d{6,7}|798\\\\d{7,9})|(?:00368|80)\\\\d{7}\", , , , \"801234567\", , , [9, 11, 12, 13, 14]], [, , \"60[2-9]\\\\d{6}\", , , , \"602345678\", , , [9]], [, , , , , , , , , [-1]], [, , \"50\\\\d{8,9}\", , , , \"5012345678\", , , [10, 11]], [, , \"70\\\\d{8}\", , , , \"7012345678\", , , [10]], \"KR\", 82, \"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\", \"0\", , , \"0(8(?:[1-46-8]|5\\\\d\\\\d))?\", , , , [[, \"(\\\\d{5})\", \"$1\", [\"1[016-9]1\", \"1[016-9]11\", \"1[016-9]114\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3,4})\", \"$1-$2\", [\"(?:3[1-3]|[46][1-4]|5[1-5])1\"], \"0$1\", \"0$CC-$1\"], [\n      ,\n      \"(\\\\d{4})(\\\\d{4})\",\n      \"$1-$2\",\n      [\"1\"]\n    ], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"2\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"60|8\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"[1346]|5[1-5]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{5})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"003\", \"0030\"]], [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1-$2-$3\", [\"5\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{5})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"0\"]], [\n      ,\n      \"(\\\\d{5})(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3 $4\",\n      [\"0\"]\n    ]], [[, \"(\\\\d{2})(\\\\d{3,4})\", \"$1-$2\", [\"(?:3[1-3]|[46][1-4]|5[1-5])1\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"1\"]], [, \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"2\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"60|8\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1-$2-$3\", [\"[1346]|5[1-5]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2-$3\", [\"[57]\"], \"0$1\", \"0$CC-$1\"], [, \"(\\\\d{2})(\\\\d{5})(\\\\d{4})\", \"$1-$2-$3\", [\"5\"], \"0$1\", \"0$CC-$1\"]], [\n      ,\n      ,\n      \"15\\\\d{7,8}\",\n      ,\n      ,\n      ,\n      \"1523456789\",\n      ,\n      ,\n      [9, 10]\n    ], , , [, , \"00(?:3(?:08\\\\d{6,7}|68\\\\d{7})|798\\\\d{7,9})\", , , , , , , [11, 12, 13, 14]], [, , \"1(?:5(?:22|33|44|66|77|88|99)|6(?:[07]0|44|6[168]|88)|8(?:00|33|55|77|99))\\\\d{4}\", , , , \"15441234\", , , [8]], , , [, , , , , , , , , [-1]]],\n    KW: [, [, , \"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\", , , , , , , [7, 8]], [, , \"2(?:[23]\\\\d\\\\d|4(?:[1-35-9]\\\\d|44)|5(?:0[034]|[2-46]\\\\d|5[1-3]|7[1-7]))\\\\d{4}\", , , , \"22345678\", , , [8]], [\n      ,\n      ,\n      \"(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|66)|222|3[36]3|444|7(?:0[013-9]|[67]\\\\d)|888|9(?:[069]\\\\d|3[039]))|9(?:(?:0[09]|22|[4679]\\\\d|8[057-9])\\\\d|1(?:1[01]|99)|3(?:00|33)|5(?:00|5\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"50012345\",\n      ,\n      ,\n      [8]\n    ], [, , \"18\\\\d{5}\", , , , \"1801234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"KW\", 965, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{3,4})\", \"$1 $2\", [\"[169]|2(?:[235]|4[1-35-9])|52\"]], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[245]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KY: [, [, , \"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"345(?:2(?:22|3[23]|44|66)|333|444|6(?:23|38|40)|7(?:30|4[35-79]|6[6-9]|77)|8(?:00|1[45]|[48]8)|9(?:14|4[035-9]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"3452221234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"345(?:32[1-9]|42[0-4]|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}\", , , , \"3453231234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"(?:345976|900[2-9]\\\\d\\\\d)\\\\d{4}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"KY\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"345$1\", , , , , [, , \"345849\\\\d{4}\", , , , \"3458491234\"], , \"345\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    KZ: [, [, , \"(?:33622|8\\\\d{8})\\\\d{5}|[78]\\\\d{9}\", , , , , , , [10, 14], [5, 6, 7]], [\n      ,\n      ,\n      \"(?:33622|7(?:1(?:0(?:[23]\\\\d|4[0-3]|59|63)|1(?:[23]\\\\d|4[0-79]|59)|2(?:[23]\\\\d|59)|3(?:2\\\\d|3[0-79]|4[0-35-9]|59)|4(?:[24]\\\\d|3[013-9]|5[1-9]|97)|5(?:2\\\\d|3[1-9]|4[0-7]|59)|6(?:[2-4]\\\\d|5[19]|61)|72\\\\d|8(?:[27]\\\\d|3[1-46-9]|4[0-5]|59))|2(?:1(?:[23]\\\\d|4[46-9]|5[3469])|2(?:2\\\\d|3[0679]|46|5[12679])|3(?:[2-4]\\\\d|5[139])|4(?:2\\\\d|3[1-35-9]|59)|5(?:[23]\\\\d|4[0-8]|59|61)|6(?:2\\\\d|3[1-9]|4[0-4]|59)|7(?:[2379]\\\\d|40|5[279])|8(?:[23]\\\\d|4[0-3]|59)|9(?:2\\\\d|3[124578]|59))))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"7123456789\",\n      ,\n      ,\n      [10],\n      [5, 6, 7]\n    ], [, , \"7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}\", , , , \"7710009998\", , , [10]], [, , \"8(?:00|108\\\\d{3})\\\\d{7}\", , , , \"8001234567\"], [, , \"809\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"808\\\\d{7}\", , , , \"8081234567\", , , [10]], [, , \"751\\\\d{7}\", , , , \"7511234567\", , , [10]], \"KZ\", 7, \"810\", \"8\", , , \"8\", , \"8~10\", , , , [, , , , , , , , , [-1]], , \"33|7\", [, , \"751\\\\d{7}\", , , , , , , [10]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LA: [, [, , \"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\", , , , , , , [8, 9, 10], [6]], [\n      ,\n      ,\n      \"(?:2[13]|[35-7][14]|41|8[1468])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"21212862\",\n      ,\n      ,\n      [8],\n      [6]\n    ], [, , \"(?:20(?:[2359]\\\\d|7[6-8]|88)|302\\\\d)\\\\d{6}\", , , , \"2023123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LA\", 856, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2[13]|3[14]|[4-8]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"30[013-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[23]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"30[013-9]\\\\d{6}\", , , , \"301234567\", , , [9]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    LB: [, [, , \"[27-9]\\\\d{7}|[13-9]\\\\d{6}\", , , , , , , [7, 8]], [, , \"7(?:62|8[0-7]|9[04-9])\\\\d{4}|(?:[14-69]\\\\d|2(?:[14-69]\\\\d|[78][1-9])|7[2-57]|8[02-9])\\\\d{5}\", , , , \"1123456\"], [, , \"793(?:[01]\\\\d|2[0-4])\\\\d{3}|(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[89]|9[12]))\\\\d{5}\", , , , \"71123456\"], [, , , , , , , , , [-1]], [, , \"9[01]\\\\d{6}\", , , , \"90123456\", , , [8]], [, , \"80\\\\d{6}\", , , , \"80123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LB\", 961, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[13-69]|7(?:[2-57]|62|8[0-7]|9[04-9])|8[02-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[27-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LC: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [, , \"758(?:234|4(?:30|5\\\\d|6[2-9]|8[0-2])|57[0-2]|(?:63|75)8)\\\\d{4}\", , , , \"7584305678\", , , , [7]],\n      [, , \"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}\", , , , \"7582845678\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"],\n      [, , , , , , , , , [-1]],\n      [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"],\n      [, , , , , , , , , [-1]],\n      \"LC\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-8]\\\\d{6})$|1\",\n      \"758$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"758\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    LI: [, [, , \"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\", , , , , , , [7, 9]], [\n      ,\n      ,\n      \"(?:2(?:01|1[27]|2[02]|3\\\\d|6[02-578]|96)|3(?:[24]0|33|7[0135-7]|8[048]|9[0269]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2345678\",\n      ,\n      ,\n      [7]\n    ], [, , \"(?:6(?:(?:4[5-9]|5[0-4])\\\\d|6(?:[0245]\\\\d|[17]0|3[7-9]))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}\", , , , \"660234567\"], [, , \"8002[28]\\\\d\\\\d|80(?:05\\\\d|9)\\\\d{4}\", , , , \"8002222\"], [, , \"90(?:02[258]|1(?:23|3[14])|66[136])\\\\d\\\\d\", , , , \"9002222\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LI\", 423, \"00\", \"0\", , , \"(1001)|0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[2379]|8(?:0[09]|7)\", \"[2379]|8(?:0(?:02|9)|7)\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"69\"],\n      ,\n      \"$CC $1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"], , \"$CC $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"870(?:28|87)\\\\d\\\\d\", , , , \"8702812\", , , [7]], , , [, , \"697(?:42|56|[78]\\\\d)\\\\d{4}\", , , , \"697861234\", , , [9]]],\n    LK: [, [, , \"[1-9]\\\\d{8}\", , , , , , , [9], [7]], [, , \"(?:12[2-9]|602|8[12]\\\\d|9(?:1\\\\d|22|9[245]))\\\\d{6}|(?:11|2[13-7]|3[1-8]|4[157]|5[12457]|6[35-7])[2-57]\\\\d{6}\", , , , \"112345678\", , , , [7]], [, , \"7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}\", , , , \"712345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], \"LK\", 94, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[1-689]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"1973\\\\d{5}\", , , , \"197312345\"], , , [, , , , , , , , , [-1]]],\n    LR: [, [, , \"(?:[25]\\\\d|33|77|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\", , , , , , , [7, 8, 9]], [, , \"(?:2\\\\d{3}|33333)\\\\d{4}\", , , , \"21234567\", , , [8, 9]], [, , \"(?:(?:(?:22|33)0|555|(?:77|88)\\\\d)\\\\d|4[67])\\\\d{5}|[56]\\\\d{6}\", , , , \"770123456\", , , [7, 9]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"332(?:02|[34]\\\\d)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"332021234\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LR\", 231, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[4-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[23578]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LS: [, [, , \"(?:[256]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]], [, , \"2\\\\d{7}\", , , , \"22123456\"], [, , \"[56]\\\\d{7}\", , , , \"50123456\"], [, , \"800[256]\\\\d{4}\", , , , \"80021234\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LS\", 266, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2568]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LT: [\n      ,\n      [, , \"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\", , , , , , , [8]],\n      [, , \"(?:3[1478]|4[124-6]|52)\\\\d{6}\", , , , \"31234567\"],\n      [, , \"6\\\\d{7}\", , , , \"61234567\"],\n      [, , \"80[02]\\\\d{5}\", , , , \"80012345\"],\n      [, , \"9(?:0[0239]|10)\\\\d{5}\", , , , \"90012345\"],\n      [, , \"808\\\\d{5}\", , , , \"80812345\"],\n      [, , \"70[05]\\\\d{5}\", , , , \"70012345\"],\n      [, , \"[89]01\\\\d{5}\", , , , \"80123456\"],\n      \"LT\",\n      370,\n      \"00\",\n      \"8\",\n      ,\n      ,\n      \"[08]\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"52[0-7]\"], \"(8-$1)\", , 1], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[7-9]\"], \"8 $1\", , 1], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"37|4(?:[15]|6[1-8])\"], \"(8-$1)\", , 1], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[3-6]\"], \"(8-$1)\", , 1]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"70[67]\\\\d{5}\", , , , \"70712345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    LU: [, [, , \"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\", , , , , , , [4, 5, 6, 7, 8, 9, 10, 11]], [\n      ,\n      ,\n      \"(?:35[013-9]|80[2-9]|90[89])\\\\d{1,8}|(?:2[2-9]|3[0-46-9]|[457]\\\\d|8[13-9]|9[2-579])\\\\d{2,9}\",\n      ,\n      ,\n      ,\n      \"27123456\"\n    ], [, , \"6(?:[269][18]|5[1568]|7[189]|81)\\\\d{6}\", , , , \"628123456\", , , [9]], [, , \"800\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"90[015]\\\\d{5}\", , , , \"90012345\", , , [8]], [, , \"801\\\\d{5}\", , , , \"80112345\", , , [8]], [, , , , , , , , , [-1]], [, , \"20(?:1\\\\d{5}|[2-689]\\\\d{1,7})\", , , , \"20201234\", , , [4, 5, 6, 7, 8, 9, 10]], \"LU\", 352, \"00\", , , , \"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\", , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"], , \"$CC $1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3\",\n      [\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"],\n      ,\n      \"$CC $1\"\n    ], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"20[2-689]\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\", \"$1 $2 $3 $4\", [\"2(?:[0367]|4[3-8])\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"80[01]|90[015]\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"20\"], , \"$CC $1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6\"], , \"$CC $1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\", \"$1 $2 $3 $4 $5\", [\"2(?:[0367]|4[3-8])\"], , \"$CC $1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\n      \"$1 $2 $3 $4\",\n      [\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"],\n      ,\n      \"$CC $1\"\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LV: [, [, , \"(?:[268]\\\\d|90)\\\\d{6}\", , , , , , , [8]], [, , \"6\\\\d{7}\", , , , \"63123456\"], [, , \"23(?:23[0-57-9]|33[0238])\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[024-9]|3[0-24-9]))\\\\d{4}\", , , , \"21234567\"], [, , \"80\\\\d{6}\", , , , \"80123456\"], [, , \"90\\\\d{6}\", , , , \"90123456\"], [, , \"81\\\\d{6}\", , , , \"81123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"LV\", 371, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"[269]|8[01]\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    LY: [\n      ,\n      [, , \"[2-9]\\\\d{8}\", , , , , , , [9], [7]],\n      [, , \"(?:2(?:0[56]|[1-6]\\\\d|7[124579]|8[124])|3(?:1\\\\d|2[2356])|4(?:[17]\\\\d|2[1-357]|5[2-4]|8[124])|5(?:[1347]\\\\d|2[1-469]|5[13-5]|8[1-4])|6(?:[1-479]\\\\d|5[2-57]|8[1-5])|7(?:[13]\\\\d|2[13-79])|8(?:[124]\\\\d|5[124]|84))\\\\d{6}\", , , , \"212345678\", , , , [7]],\n      [, , \"9[1-6]\\\\d{7}\", , , , \"912345678\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"LY\",\n      218,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{7})\", \"$1-$2\", [\"[2-9]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MA: [, [, , \"[5-8]\\\\d{8}\", , , , , , , [9]], [, , \"5293[01]\\\\d{4}|5(?:2(?:[0-25-7]\\\\d|3[1-578]|4[02-46-8]|8[0235-7]|9[0-289])|3(?:[0-47]\\\\d|5[02-9]|6[02-8]|8[0189]|9[3-9])|(?:4[067]|5[03])\\\\d)\\\\d{5}\", , , , \"520123456\"], [, , \"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[017]\\\\d|2[0-2]|6[0-8]|8[0-3]))\\\\d{6}\", , , , \"650123456\"], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , \"89\\\\d{7}\", , , , \"891234567\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"592(?:4[0-2]|93)\\\\d{4}\", , , , \"592401234\"], \"MA\", 212, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{5})(\\\\d{4})\", \"$1-$2\", [\"5(?:29|38)\", \"5(?:29[1289]|389)\", \"529(?:1[1-46-9]|2[013-8]|90)|5(?:298|389)[0-46-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"5[45]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5})\", \"$1-$2\", [\"5(?:2[2-489]|3[5-9]|9)|892\", \"5(?:2(?:[2-49]|8[235-9])|3[5-9]|9)|892\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1-$2\", [\"8\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1-$2\", [\"[5-7]\"], \"0$1\"]], , [, , , , , , , , , [-1]], 1, , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MC: [, [, , \"(?:[3489]|6\\\\d)\\\\d{7}\", , , , , , , [8, 9]], [, , \"(?:870|9[2-47-9]\\\\d)\\\\d{5}\", , , , \"99123456\", , , [8]], [, , \"4(?:[46]\\\\d|5[1-9])\\\\d{5}|(?:3|6\\\\d)\\\\d{7}\", , , , \"612345678\"], [, , \"(?:800|90\\\\d)\\\\d{5}\", , , , \"90123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MC\", 377, \"00\", \"0\", , , \"0\", , , , [\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"87\"]],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"4\"], \"0$1\"],\n      [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[389]\"]],\n      [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"6\"], \"0$1\"]\n    ], [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"4\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[389]\"]], [, \"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"6\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , \"8[07]0\\\\d{5}\", , , , , , , [8]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MD: [\n      ,\n      [, , \"(?:[235-7]\\\\d|[89]0)\\\\d{6}\", , , , , , , [8]],\n      [, , \"(?:(?:2[1-9]|3[1-79])\\\\d|5(?:33|5[257]))\\\\d{5}\", , , , \"22212345\"],\n      [, , \"562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}\", , , , \"62112345\"],\n      [, , \"800\\\\d{5}\", , , , \"80012345\"],\n      [, , \"90[056]\\\\d{5}\", , , , \"90012345\"],\n      [, , \"808\\\\d{5}\", , , , \"80812345\"],\n      [, , , , , , , , , [-1]],\n      [, , \"3[08]\\\\d{6}\", , , , \"30123456\"],\n      \"MD\",\n      373,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"22|3\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[25-7]\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"803\\\\d{5}\", , , , \"80312345\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    ME: [, [, , \"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\", , , , , , , [8, 9], [6]], [\n      ,\n      ,\n      \"(?:20[2-8]|3(?:[0-2][2-7]|3[24-7])|4(?:0[2-467]|1[2467])|5(?:0[2467]|1[24-7]|2[2-467]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"30234567\",\n      ,\n      ,\n      [8],\n      [6]\n    ], [, , \"6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}\", , , , \"67622901\", , , [8]], [, , \"80(?:[0-2578]|9\\\\d)\\\\d{5}\", , , , \"80080002\"], [, , \"9(?:4[1568]|5[178])\\\\d{5}\", , , , \"94515151\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"78[1-49]\\\\d{5}\", , , , \"78108780\", , , [8]], \"ME\", 382, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[2-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"77[1-9]\\\\d{5}\", , , , \"77273012\", , , [8]], , , [, , , , , , , , , [-1]]],\n    MF: [, [, , \"(?:590|(?:69|80)\\\\d|976)\\\\d{6}\", , , , , , , [9]], [\n      ,\n      ,\n      \"590(?:0[079]|[14]3|[27][79]|30|5[0-268]|87)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"590271234\"\n    ], [, , \"69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))\\\\d{4}\", , , , \"690001234\"], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"976[01]\\\\d{5}\", , , , \"976012345\"], \"MF\", 590, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MG: [, [, , \"[23]\\\\d{8}\", , , , , , , [9], [7]], [, , \"2072[29]\\\\d{4}|20(?:2\\\\d|4[47]|5[3467]|6[279]|7[35]|8[268]|9[245])\\\\d{5}\", , , , \"202123456\", , , , [7]], [, , \"3[2-47-9]\\\\d{7}\", , , , \"321234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , \"22\\\\d{7}\", , , , \"221234567\"], \"MG\", 261, \"00\", \"0\", , , \"([24-9]\\\\d{6})$|0\", \"20$1\", , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[23]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MH: [\n      ,\n      [, , \"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\", , , , , , , [7]],\n      [, , \"(?:247|528|625)\\\\d{4}\", , , , \"2471234\"],\n      [, , \"(?:(?:23|54)5|329|45[356])\\\\d{4}\", , , , \"2351234\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"635\\\\d{4}\", , , , \"6351234\"],\n      \"MH\",\n      692,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"1\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[2-6]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MK: [, [, , \"[2-578]\\\\d{7}\", , , , , , , [8], [6, 7]], [, , \"(?:(?:2(?:62|77)0|3444)\\\\d|4[56]440)\\\\d{3}|(?:34|4[357])700\\\\d{3}|(?:2(?:[0-3]\\\\d|5[0-578]|6[01]|82)|3(?:1[3-68]|[23][2-68]|4[23568])|4(?:[23][2-68]|4[3-68]|5[2568]|6[25-8]|7[24-68]|8[4-68]))\\\\d{5}\", , , , \"22012345\", , , , [6, 7]], [\n      ,\n      ,\n      \"7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-48]\\\\d|7[01578])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"72345678\"\n    ], [, , \"800\\\\d{5}\", , , , \"80012345\"], [, , \"5\\\\d{7}\", , , , \"50012345\"], [, , \"8(?:0[1-9]|[1-9]\\\\d)\\\\d{5}\", , , , \"80123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MK\", 389, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2|34[47]|4(?:[37]7|5[47]|64)\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[347]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[58]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ML: [, [, , \"[24-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:07[0-8]|12[67])\\\\d{4}|(?:2(?:02|1[4-689])|4(?:0[0-4]|4[1-39]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"20212345\"\n    ], [, , \"2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[01]|[679]\\\\d|8[2-49])\\\\d{6}\", , , , \"65012345\"], [, , \"80\\\\d{6}\", , , , \"80012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ML\", 223, \"00\", , , , , , , , [[, \"(\\\\d{4})\", \"$1\", [\"67[057-9]|74[045]\", \"67(?:0[09]|[59]9|77|8[89])|74(?:0[02]|44|55)\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24-9]\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24-9]\"]]], [, , , , , , , , , [-1]], , , [, , \"80\\\\d{6}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MM: [\n      ,\n      [, , \"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\", , , , , , , [6, 7, 8, 9, 10], [5]],\n      [\n        ,\n        ,\n        \"(?:1(?:(?:2\\\\d|3[56]|[89][0-6])\\\\d|4(?:2[2-469]|39|46|6[25]|7[0-3]|83)|6)|2(?:2(?:00|8[34])|4(?:0\\\\d|2[246]|39|46|62|7[0-3]|83)|51\\\\d\\\\d)|4(?:2(?:2\\\\d\\\\d|48[0-3])|3(?:20\\\\d|4(?:70|83)|56)|420\\\\d|5470)|6(?:0(?:[23]|88\\\\d)|(?:124|[56]2\\\\d)\\\\d|247[23]|3(?:20\\\\d|470)|4(?:2[04]\\\\d|47[23])|7(?:(?:3\\\\d|8[01459])\\\\d|4(?:39|60|7[013]))))\\\\d{4}|5(?:2(?:2\\\\d{5,6}|47[023]\\\\d{4})|(?:347[23]|4(?:2(?:1|86)|470)|522\\\\d|6(?:20\\\\d|483)|7(?:20\\\\d|48[0-2])|8(?:20\\\\d|47[02])|9(?:20\\\\d|47[01]))\\\\d{4})|7(?:(?:0470|4(?:25\\\\d|470)|5(?:202|470|96\\\\d))\\\\d{4}|1(?:20\\\\d{4,5}|4(?:70|83)\\\\d{4}))|8(?:1(?:2\\\\d{5,6}|4(?:10|7[01]\\\\d)\\\\d{3})|2(?:2\\\\d{5,6}|(?:320|490\\\\d)\\\\d{3})|(?:3(?:2\\\\d\\\\d|470)|4[24-7]|5(?:2\\\\d|4[1-9]|51)\\\\d|6[23])\\\\d{4})|(?:1[2-6]\\\\d|4(?:2[24-8]|3[2-7]|[46][2-6]|5[3-5])|5(?:[27][2-8]|3[2-68]|4[24-8]|5[23]|6[2-4]|8[24-7]|9[2-7])|6(?:[19]20|42[03-6]|(?:52|7[45])\\\\d)|7(?:[04][24-8]|[15][2-7]|22|3[2-4])|8(?:1[2-689]|2[2-8]|[35]2\\\\d))\\\\d{4}|25\\\\d{5,6}|(?:2[2-9]|6(?:1[2356]|[24][2-6]|3[24-6]|5[2-4]|6[2-8]|7[235-7]|8[245]|9[24])|8(?:3[24]|5[245]))\\\\d{4}\",\n        ,\n        ,\n        ,\n        \"1234567\",\n        ,\n        ,\n        [6, 7, 8, 9],\n        [5]\n      ],\n      [, , \"(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d)|8(?:78|[89]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}\", , , , \"92123456\", , , [7, 8, 9, 10]],\n      [, , \"80080(?:[01][1-9]|2\\\\d)\\\\d{3}\", , , , \"8008001234\", , , [10]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"1333\\\\d{4}|[12]468\\\\d{4}\", , , , \"13331234\", , , [8]],\n      \"MM\",\n      95,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [\n        [, \"(\\\\d)(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"16|2\"], \"0$1\"],\n        [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[45]|6(?:0[23]|[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-6]\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[12]\"], \"0$1\"],\n        [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[4-7]|8[1-35]\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{3})(\\\\d{4,6})\", \"$1 $2 $3\", [\"9(?:2[0-4]|[35-9]|4[137-9])\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"],\n        [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"],\n        [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"92\"], \"0$1\"],\n        [\n          ,\n          \"(\\\\d)(\\\\d{5})(\\\\d{4})\",\n          \"$1 $2 $3\",\n          [\"9\"],\n          \"0$1\"\n        ]\n      ],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MN: [, [, , \"[12]\\\\d{7,9}|[5-9]\\\\d{7}\", , , , , , , [8, 9, 10], [4, 5, 6]], [, , \"[12]2[1-3]\\\\d{5,6}|7(?:0[0-5]\\\\d|128)\\\\d{4}|(?:[12](?:1|27)|5[368])\\\\d{6}|[12](?:3[2-8]|4[2-68]|5[1-4689])\\\\d{6,7}\", , , , \"53123456\", , , , [4, 5, 6]], [, , \"(?:83[01]|920)\\\\d{5}|(?:5[05]|6[069]|8[015689]|9[013-9])\\\\d{6}\", , , , \"88123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"712[0-79]\\\\d{4}|7(?:1[013-9]|[25-9]\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"75123456\",\n      ,\n      ,\n      [8]\n    ], \"MN\", 976, \"001\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[12]1\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[5-9]\"]], [, \"(\\\\d{3})(\\\\d{5,6})\", \"$1 $2\", [\"[12]2[1-3]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5,6})\", \"$1 $2\", [\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\", \"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"], \"0$1\"], [, \"(\\\\d{5})(\\\\d{4,5})\", \"$1 $2\", [\"[12]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MO: [, [, , \"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\", , , , , , , [7, 8]], [\n      ,\n      ,\n      \"(?:28[2-9]|8(?:11|[2-57-9]\\\\d))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"28212345\",\n      ,\n      ,\n      [8]\n    ], [, , \"6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}\", , , , \"66123456\", , , [8]], [, , \"0800\\\\d{3}\", , , , \"0800501\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MO\", 853, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"0\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[268]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MP: [, [, , \"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6702345678\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}\", , , , \"6702345678\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"MP\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"670$1\", , 1, , , [, , , , , , , , , [-1]], , \"670\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MQ: [\n      ,\n      [, , \"596\\\\d{6}|(?:69|80|9\\\\d)\\\\d{7}\", , , , , , , [9]],\n      [, , \"596(?:[03-7]\\\\d|10|2[7-9]|8[09]|9[4-9])\\\\d{4}\", , , , \"596301234\"],\n      [, , \"69(?:6(?:[0-46-9]\\\\d|5[0-6])|727)\\\\d{4}\", , , , \"696201234\"],\n      [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"9(?:(?:39|47)7[01]|76(?:6\\\\d|7[0-367]))\\\\d{4}\", , , , \"976612345\"],\n      \"MQ\",\n      596,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[569]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MR: [, [, , \"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]], [, , \"(?:25[08]|35\\\\d|45[1-7])\\\\d{5}\", , , , \"35123456\"], [, , \"[2-4][0-46-9]\\\\d{6}\", , , , \"22123456\"], [, , \"800\\\\d{5}\", , , , \"80012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MR\", 222, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[2-48]\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MS: [, [, , \"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"6644(?:1[0-3]|91)\\\\d{4}\", , , , \"6644912345\", , , , [7]], [, , \"664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}\", , , , \"6644923456\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"MS\", 1, \"011\", \"1\", , , \"([34]\\\\d{6})$|1\", \"664$1\", , , , , [, , , , , , , , , [-1]], , \"664\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MT: [, [, , \"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\", , , , , , , [8]], [, , \"20(?:3[1-4]|6[059])\\\\d{4}|2(?:0[19]|[1-357]\\\\d|60)\\\\d{5}\", , , , \"21001234\"], [, , \"(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}\", , , , \"96961234\"], [, , \"800(?:02|[3467]\\\\d)\\\\d{3}\", , , , \"80071234\"], [\n      ,\n      ,\n      \"5(?:0(?:0(?:37|43)|(?:6\\\\d|70|9[0168])\\\\d)|[12]\\\\d0[1-5])\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"50037123\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"3550\\\\d{4}\", , , , \"35501234\"], \"MT\", 356, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[2357-9]\"]]], , [, , \"7117\\\\d{4}\", , , , \"71171234\"], , , [, , , , , , , , , [-1]], [, , \"501\\\\d{5}\", , , , \"50112345\"], , , [, , , , , , , , , [-1]]],\n    MU: [, [, , \"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\", , , , , , , [7, 8, 10]], [, , \"(?:2(?:[0346-8]\\\\d|1[0-7])|4(?:[013568]\\\\d|2[4-7])|54(?:[3-5]\\\\d|71)|6\\\\d\\\\d|8(?:14|3[129]))\\\\d{4}\", , , , \"54480123\", , , [7, 8]], [\n      ,\n      ,\n      \"5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:01|30))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"52512345\",\n      ,\n      ,\n      [8]\n    ], [, , \"802\\\\d{7}|80[0-2]\\\\d{4}\", , , , \"8001234\", , , [7, 10]], [, , \"30\\\\d{5}\", , , , \"3012345\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"3(?:20|9\\\\d)\\\\d{4}\", , , , \"3201234\", , , [7]], \"MU\", 230, \"0(?:0|[24-7]0|3[03])\", , , , , , \"020\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-46]|8[013]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[57]\"]], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MV: [, [, , \"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\", , , , , , , [7, 10]], [\n      ,\n      ,\n      \"(?:3(?:0[0-3]|3[0-59])|6(?:[58][024689]|6[024-68]|7[02468]))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6701234\",\n      ,\n      ,\n      [7]\n    ], [, , \"(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}\", , , , \"7712345\", , , [7]], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"900\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MV\", 960, \"0(?:0|19)\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[34679]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"4(?:0[01]|50)\\\\d{4}\", , , , \"4001234\", , , [7]], , , [, , , , , , , , , [-1]]],\n    MW: [, [, , \"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\", , , , , , , [7, 9]], [\n      ,\n      ,\n      \"(?:1[2-9]|2[12]\\\\d\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"1234567\"\n    ], [, , \"111\\\\d{6}|(?:31|77|[89][89])\\\\d{7}\", , , , \"991234567\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MW\", 265, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1[2-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[137-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    MX: [\n      ,\n      [\n        ,\n        ,\n        \"1(?:(?:[27]2|44|99)[1-9]|65[0-689])\\\\d{7}|(?:1(?:[01]\\\\d|2[13-9]|[35][1-9]|4[0-35-9]|6[0-46-9]|7[013-9]|8[1-79]|9[1-8])|[2-9]\\\\d)\\\\d{8}\",\n        ,\n        ,\n        ,\n        ,\n        ,\n        ,\n        [10, 11],\n        [7, 8]\n      ],\n      [, , \"657[12]\\\\d{6}|(?:2(?:0[01]|2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\\\d))\\\\d{7}\", , , , \"2001234567\", , , [10], [7, 8]],\n      [\n        ,\n        ,\n        \"657[12]\\\\d{6}|(?:1(?:2(?:2[1-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-7][1-9]|3[1-8]|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1-467][1-9]|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))|2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[25-7][1-9]|3[1-8]|4\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[1-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|6[1-9]|7[12]|8[1-8]|9\\\\d))\\\\d{7}\",\n        ,\n        ,\n        ,\n        \"12221234567\",\n        ,\n        ,\n        ,\n        [7, 8]\n      ],\n      [, , \"8(?:00|88)\\\\d{7}\", , , , \"8001234567\", , , [10]],\n      [, , \"900\\\\d{7}\", , , , \"9001234567\", , , [10]],\n      [, , \"300\\\\d{7}\", , , , \"3001234567\", , , [10]],\n      [, , \"500\\\\d{7}\", , , , \"5001234567\", , , [10]],\n      [, , , , , , , , , [-1]],\n      \"MX\",\n      52,\n      \"0[09]\",\n      \"01\",\n      ,\n      ,\n      \"0(?:[12]|4[45])|1\",\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{5})\", \"$1\", [\"53\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"33|5[56]|81\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-9]\"], , , 1], [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$2 $3 $4\", [\"1(?:33|5[56]|81)\"], , , 1], [\n        ,\n        \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\n        \"$2 $3 $4\",\n        [\"1\"],\n        ,\n        ,\n        1\n      ]],\n      [[, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"33|5[56]|81\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[2-9]\"], , , 1], [, \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$2 $3 $4\", [\"1(?:33|5[56]|81)\"], , , 1], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$2 $3 $4\", [\"1\"], , , 1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    MY: [, [, , \"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\", , , , , , , [8, 9, 10], [6, 7]], [\n      ,\n      ,\n      \"(?:3(?:2[0-36-9]|3[0-368]|4[0-278]|5[0-24-8]|6[0-467]|7[1246-9]|8\\\\d|9[0-57])\\\\d|4(?:2[0-689]|[3-79]\\\\d|8[1-35689])|5(?:2[0-589]|[3468]\\\\d|5[0-489]|7[1-9]|9[23])|6(?:2[2-9]|3[1357-9]|[46]\\\\d|5[0-6]|7[0-35-9]|85|9[015-8])|7(?:[2579]\\\\d|3[03-68]|4[0-8]|6[5-9]|8[0-35-9])|8(?:[24][2-8]|3[2-5]|5[2-7]|6[2-589]|7[2-578]|[89][2-9])|9(?:0[57]|13|[25-7]\\\\d|[3489][0-8]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"323856789\",\n      ,\n      ,\n      [8, 9],\n      [6, 7]\n    ], [, , \"1(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0134]\\\\d|2[1-9]|5[0-6]))|(?:[269]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}\", , , , \"123456789\", , , [9, 10]], [, , \"1[378]00\\\\d{6}\", , , , \"1300123456\", , , [10]], [, , \"1600\\\\d{6}\", , , , \"1600123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"15(?:4(?:6[0-4]\\\\d|8(?:0[125]|[17]\\\\d|21|3[01]|4[01589]|5[014]|6[02]))|6(?:32[0-6]|78\\\\d))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1546012345\",\n      ,\n      ,\n      [10]\n    ], \"MY\", 60, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3\", [\"[4-79]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1-$2 $3\", [\"1(?:[02469]|[378][1-9]|53)|8\", \"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"], \"0$1\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1-$2 $3\", [\"3\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1-$2-$3-$4\", [\"1(?:[367]|80)\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2 $3\", [\"15\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1-$2 $3\", [\"1\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    MZ: [, [, , \"(?:2|8\\\\d)\\\\d{7}\", , , , , , , [8, 9]], [, , \"2(?:[1346]\\\\d|5[0-2]|[78][12]|93)\\\\d{5}\", , , , \"21123456\", , , [8]], [, , \"8[2-79]\\\\d{7}\", , , , \"821234567\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"MZ\", 258, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2|8[2-79]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NA: [, [\n      ,\n      ,\n      \"[68]\\\\d{7,8}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9]\n    ], [, , \"64426\\\\d{3}|6(?:1(?:2[2-7]|3[01378]|4[0-4])|254|32[0237]|4(?:27|41|5[25])|52[236-8]|626|7(?:2[2-4]|30))\\\\d{4,5}|6(?:1(?:(?:0\\\\d|2[0189]|3[24-69]|4[5-9])\\\\d|17|69|7[014])|2(?:17|5[0-36-8]|69|70)|3(?:17|2[14-689]|34|6[289]|7[01]|81)|4(?:17|2[0-2]|4[06]|5[0137]|69|7[01])|5(?:17|2[0459]|69|7[01])|6(?:17|25|38|42|69|7[01])|7(?:17|2[569]|3[13]|6[89]|7[01]))\\\\d{4}\", , , , \"61221234\"], [, , \"(?:60|8[1245])\\\\d{7}\", , , , \"811234567\", , , [9]], [, , \"80\\\\d{7}\", , , , \"800123456\", , , [9]], [\n      ,\n      ,\n      \"8701\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"870123456\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"8(?:3\\\\d\\\\d|86)\\\\d{5}\", , , , \"88612345\"], \"NA\", 264, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"88\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"6\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"87\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NC: [, [, , \"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\", , , , , , , [6]], [, , \"(?:2[03-9]|3[0-5]|4[1-7]|88)\\\\d{4}\", , , , \"201234\"], [\n      ,\n      ,\n      \"(?:5[0-4]|[79]\\\\d|8[0-79])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"751234\"\n    ], [, , \"050\\\\d{3}\", , , , \"050012\"], [, , \"36\\\\d{4}\", , , , \"366711\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NC\", 687, \"00\", , , , , , , , [[, \"(\\\\d{3})\", \"$1\", [\"5[6-8]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1.$2.$3\", [\"[02-57-9]\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1.$2.$3\", [\"[02-57-9]\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NE: [, [, , \"[027-9]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:0(?:20|3[1-8]|4[13-5]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"20201234\"\n    ], [, , \"(?:23|7[04]|[89]\\\\d)\\\\d{6}\", , , , \"93123456\"], [, , \"08\\\\d{6}\", , , , \"08123456\"], [, , \"09\\\\d{6}\", , , , \"09123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NE\", 227, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"08\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[089]|2[013]|7[04]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NF: [, [, , \"[13]\\\\d{5}\", , , , , , , [6], [5]], [, , \"(?:1(?:06|17|28|39)|3[0-2]\\\\d)\\\\d{3}\", , , , \"106609\", , , , [5]], [\n      ,\n      ,\n      \"(?:14|3[58])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"381234\",\n      ,\n      ,\n      ,\n      [5]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NF\", 672, \"00\", , , , \"([0-258]\\\\d{4})$\", \"3$1\", , , [[, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"1[0-3]\"]], [, \"(\\\\d)(\\\\d{5})\", \"$1 $2\", [\"[13]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NG: [, [, , \"(?:[124-7]|9\\\\d{3})\\\\d{6}|[1-9]\\\\d{7}|[78]\\\\d{9,13}\", , , , , , , [7, 8, 10, 11, 12, 13, 14], [5, 6]], [\n      ,\n      ,\n      \"(?:(?:[1-356]\\\\d|4[02-8]|8[2-9])\\\\d|9(?:0[3-9]|[1-9]\\\\d))\\\\d{5}|7(?:0(?:[013-689]\\\\d|2[0-24-9])\\\\d{3,4}|[1-79]\\\\d{6})|(?:[12]\\\\d|4[147]|5[14579]|6[1578]|7[1-3578])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"18040123\",\n      ,\n      ,\n      [7, 8],\n      [5, 6]\n    ], [, , \"(?:702[0-24-9]|819[01])\\\\d{6}|(?:70[13-689]|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-356]))\\\\d{7}\", , , , \"8021234567\", , , [10]], [, , \"800\\\\d{7,11}\", , , , \"80017591759\", , , [10, 11, 12, 13, 14]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NG\", 234, \"009\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"78\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[12]|9(?:0[3-9]|[1-9])\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[3-7]|8[2-9]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"[7-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"[78]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\", \"$1 $2 $3\", [\"[78]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"700\\\\d{7,11}\", , , , \"7001234567\", , , [10, 11, 12, 13, 14]], , , [, , , , , , , , , [-1]]],\n    NI: [, [, , \"(?:1800|[25-8]\\\\d{3})\\\\d{4}\", , , , , , , [8]], [, , \"2\\\\d{7}\", , , , \"21234567\"], [, , \"(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}\", , , , \"81234567\"], [, , \"1800\\\\d{4}\", , , , \"18001234\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NI\", 505, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[125-8]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NL: [, [, , \"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\", , , , , , , [5, 6, 7, 8, 9, 10, 11]], [\n      ,\n      ,\n      \"(?:1(?:[035]\\\\d|1[13-578]|6[124-8]|7[24]|8[0-467])|2(?:[0346]\\\\d|2[2-46-9]|5[125]|9[479])|3(?:[03568]\\\\d|1[3-8]|2[01]|4[1-8])|4(?:[0356]\\\\d|1[1-368]|7[58]|8[15-8]|9[23579])|5(?:[0358]\\\\d|[19][1-9]|2[1-57-9]|4[13-8]|6[126]|7[0-3578])|7\\\\d\\\\d)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"101234567\",\n      ,\n      ,\n      [9]\n    ], [, , \"(?:6[1-58]|970\\\\d)\\\\d{7}\", , , , \"612345678\", , , [9, 11]], [, , \"800\\\\d{4,7}\", , , , \"8001234\", , , [7, 8, 9, 10]], [, , \"90[069]\\\\d{4,7}\", , , , \"9061234\", , , [7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:85|91)\\\\d{7}\", , , , \"851234567\", , , [9]], \"NL\", 31, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})\", \"$1\", [\"1[238]|[34]\"]], [, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"14\"]], [, \"(\\\\d{6})\", \"$1\", [\"1\"]], [, \"(\\\\d{3})(\\\\d{4,7})\", \"$1 $2\", [\"[89]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"66\"], \"0$1\"], [, \"(\\\\d)(\\\\d{8})\", \"$1 $2\", [\"6\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-578]|91\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\", [\"9\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{4,7})\", \"$1 $2\", [\"[89]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"66\"], \"0$1\"], [, \"(\\\\d)(\\\\d{8})\", \"$1 $2\", [\"6\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-578]|91\"], \"0$1\"], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\n      \"$1 $2 $3\",\n      [\"9\"],\n      \"0$1\"\n    ]], [, , \"66\\\\d{7}\", , , , \"662345678\", , , [9]], , , [, , \"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)\\\\d\", , , , , , , [5, 6]], [, , \"140(?:1[035]|2[0346]|3[03568]|4[0356]|5[0358]|8[458])|(?:140(?:1[16-8]|2[259]|3[124]|4[17-9]|5[124679]|7)|8[478]\\\\d{6})\\\\d\", , , , \"14020\", , , [5, 6, 9]], , , [, , , , , , , , , [-1]]],\n    NO: [, [, , \"(?:0|[2-9]\\\\d{3})\\\\d{4}\", , , , , , , [5, 8]], [, , \"(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7[0-8])\\\\d{6}\", , , , \"21234567\", , , [8]], [\n      ,\n      ,\n      \"(?:4[015-8]|59|9\\\\d)\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"40612345\",\n      ,\n      ,\n      [8]\n    ], [, , \"80[01]\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"82[09]\\\\d{5}\", , , , \"82012345\", , , [8]], [, , \"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\", , , , \"81021234\", , , [8]], [, , \"880\\\\d{5}\", , , , \"88012345\", , , [8]], [, , \"85[0-5]\\\\d{5}\", , , , \"85012345\", , , [8]], \"NO\", 47, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"[489]|59\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[235-7]\"]]], , [, , , , , , , , , [-1]], 1, \"[02-689]|7[0-8]\", [, , , , , , , , , [-1]], [, , \"(?:0[2-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\", , , , \"02000\"], , , [\n      ,\n      ,\n      \"81[23]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"81212345\",\n      ,\n      ,\n      [8]\n    ]],\n    NP: [, [, , \"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\", , , , , , , [8, 10, 11], [6, 7]], [, , \"(?:1[0-6]\\\\d|99[02-6])\\\\d{5}|(?:2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-46-9]|9[1-7])[2-6]\\\\d{5}\", , , , \"14567890\", , , [8], [6, 7]], [, , \"9(?:6[0-3]|7[024-6]|8[0-24-68])\\\\d{7}\", , , , \"9841234567\", , , [10]], [, , \"1(?:66001|800\\\\d\\\\d)\\\\d{5}\", , , , \"16600101234\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NP\", 977, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{7})\", \"$1-$2\", [\"1[2-6]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{6})\",\n      \"$1-$2\",\n      [\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{7})\", \"$1-$2\", [\"9\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{5})\", \"$1-$2-$3\", [\"1\"]]], [[, \"(\\\\d)(\\\\d{7})\", \"$1-$2\", [\"1[2-6]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1-$2\", [\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1-$2\", [\"9\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NR: [, [, , \"(?:444|(?:55|8\\\\d)\\\\d|666)\\\\d{4}\", , , , , , , [7]], [, , \"444\\\\d{4}\", , , , \"4441234\"], [, , \"(?:55[3-9]|666|8\\\\d\\\\d)\\\\d{4}\", , , , \"5551234\"], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NR\", 674, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[4-68]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    NU: [, [, , \"(?:[47]|888\\\\d)\\\\d{3}\", , , , , , , [4, 7]], [, , \"[47]\\\\d{3}\", , , , \"7012\", , , [4]], [, , \"888[4-9]\\\\d{3}\", , , , \"8884012\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"NU\", 683, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , , [, , , , , , , , , [-1]]],\n    NZ: [, [, , \"[29]\\\\d{7,9}|50\\\\d{5}(?:\\\\d{2,3})?|6[0-35-9]\\\\d{6}|7\\\\d{7,8}|8\\\\d{4,9}|(?:11\\\\d|[34])\\\\d{7}\", , , , , , , [5, 6, 7, 8, 9, 10]], [, , \"24099\\\\d{3}|(?:3[2-79]|[49][2-9]|6[235-9]|7[2-57-9])\\\\d{6}\", , , , \"32345678\", , , [8], [7]], [, , \"2[0-27-9]\\\\d{7,8}|21\\\\d{6}\", , , , \"211234567\", , , [8, 9, 10]], [, , \"508\\\\d{6,7}|80\\\\d{6,8}\", , , , \"800123456\", , , [8, 9, 10]], [, , \"(?:11\\\\d{5}|50(?:0[08]|30|66|77|88))\\\\d{3}|90\\\\d{6,8}\", , , , \"900123456\", , , [7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , \"70\\\\d{7}\", , , , \"701234567\", , , [9]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], \"NZ\", 64, \"0(?:0|161)\", \"0\", , , \"0\", , \"00\", , [[, \"(\\\\d{2})(\\\\d{3,8})\", \"$1 $2\", [\"8[1-579]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"50[036-8]|[89]0\", \"50(?:[0367]|88)|[89]0\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"24|[346]|7[2-57-9]|9[2-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2(?:10|74)|[59]|80\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"1|2[028]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\", \"$1 $2 $3\", [\"2(?:[169]|7[0-35-9])|7|86\"], \"0$1\"]], , [\n      ,\n      ,\n      \"[28]6\\\\d{6,7}\",\n      ,\n      ,\n      ,\n      \"26123456\",\n      ,\n      ,\n      [8, 9]\n    ], , , [, , , , , , , , , [-1]], [, , \"8(?:1[6-9]|22|3\\\\d|4[045]|5[459]|7[0-3579]|90)\\\\d{2,7}\", , , , \"83012378\"], , , [, , , , , , , , , [-1]]],\n    OM: [, [, , \"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\", , , , , , , [7, 8, 9]], [, , \"2[2-6]\\\\d{6}\", , , , \"23123456\", , , [8]], [, , \"1505\\\\d{4}|(?:7(?:[1289]\\\\d|7[0-5])|9(?:0[1-9]|[1-9]\\\\d))\\\\d{5}\", , , , \"92123456\", , , [8]], [, , \"8007\\\\d{4,5}|(?:500|800[05])\\\\d{4}\", , , , \"80071234\"], [, , \"900\\\\d{5}\", , , , \"90012345\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"OM\", 968, \"00\", , , , , , , , [[\n      ,\n      \"(\\\\d{3})(\\\\d{4,6})\",\n      \"$1 $2\",\n      [\"[58]\"]\n    ], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"2\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[179]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PA: [, [, , \"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\", , , , , , , [7, 8, 10, 11]], [\n      ,\n      ,\n      \"(?:1(?:0\\\\d|1[479]|2[37]|3[0137]|4[17]|5[05]|6[58]|7[0167]|8[2358]|9[1389])|2(?:[0235-79]\\\\d|1[0-7]|4[013-9]|8[02-9])|3(?:[089]\\\\d|1[0-7]|2[0-5]|33|4[0-79]|5[0-35]|6[068]|7[0-8])|4(?:00|3[0-579]|4\\\\d|7[0-57-9])|5(?:[01]\\\\d|2[0-7]|[56]0|79)|7(?:0[09]|2[0-26-8]|3[03]|4[04]|5[05-9]|6[056]|7[0-24-9]|8[5-9]|90)|8(?:09|2[89]|3\\\\d|4[0-24-689]|5[014]|8[02])|9(?:0[5-9]|1[0135-8]|2[036-9]|3[35-79]|40|5[0457-9]|6[05-9]|7[04-9]|8[35-8]|9\\\\d))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2001234\",\n      ,\n      ,\n      [7]\n    ], [, , \"(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}\", , , , \"61234567\", , , [7, 8]], [, , \"800\\\\d{4,5}|(?:00800|800\\\\d)\\\\d{6}\", , , , \"8001234\"], [, , \"(?:8(?:22|55|60|7[78]|86)|9(?:00|81))\\\\d{4}\", , , , \"8601234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PA\", 507, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[1-57-9]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1-$2\", [\"[68]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PE: [, [\n      ,\n      ,\n      \"(?:[14-8]|9\\\\d)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9],\n      [6, 7]\n    ], [, , \"(?:(?:4[34]|5[14])[0-8]\\\\d|7(?:173|3[0-8]\\\\d)|8(?:10[05689]|6(?:0[06-9]|1[6-9]|29)|7(?:0[569]|[56]0)))\\\\d{4}|(?:1[0-8]|4[12]|5[236]|6[1-7]|7[246]|8[2-4])\\\\d{6}\", , , , \"11234567\", , , [8], [6, 7]], [, , \"9\\\\d{8}\", , , , \"912345678\", , , [9]], [, , \"800\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"805\\\\d{5}\", , , , \"80512345\", , , [8]], [, , \"801\\\\d{5}\", , , , \"80112345\", , , [8]], [, , \"80[24]\\\\d{5}\", , , , \"80212345\", , , [8]], [, , , , , , , , , [-1]], \"PE\", 51, \"00|19(?:1[124]|77|90)00\", \"0\", \" Anexo \", , \"0\", , \"00\", , [[\n      ,\n      \"(\\\\d{3})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"80\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d)(\\\\d{7})\", \"$1 $2\", [\"1\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[4-8]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PF: [\n      ,\n      [, , \"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\", , , , , , , [6, 8, 9]],\n      [, , \"4(?:0[4-689]|9[4-68])\\\\d{5}\", , , , \"40412345\", , , [8]],\n      [, , \"8[7-9]\\\\d{6}\", , , , \"87123456\", , , [8]],\n      [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"499\\\\d{5}\", , , , \"49901234\", , , [8]],\n      \"PF\",\n      689,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"44\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"4|8[7-9]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , \"44\\\\d{4}\", , , , , , , [6]],\n      [, , \"44\\\\d{4}\", , , , \"440123\", , , [6]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    PG: [, [, , \"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\", , , , , , , [7, 8]], [, , \"(?:(?:3[0-2]|4[257]|5[34]|9[78])\\\\d|64[1-9]|85[02-46-9])\\\\d{4}\", , , , \"3123456\", , , [7]], [, , \"(?:7\\\\d|8[128])\\\\d{6}\", , , , \"70123456\", , , [8]], [\n      ,\n      ,\n      \"180\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1801234\",\n      ,\n      ,\n      [7]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"2(?:0[0-57]|7[568])\\\\d{4}\", , , , \"2751234\", , , [7]], \"PG\", 675, \"00|140[1-3]\", , , , , , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"18|[2-69]|85\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[78]\"]]], , [, , \"27[01]\\\\d{4}\", , , , \"2700123\", , , [7]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PH: [, [, , \"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\", , , , , , , [6, 8, 9, 10, 11, 12, 13], [4, 5, 7]], [\n      ,\n      ,\n      \"(?:(?:2[3-8]|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578])\\\\d{3}|88(?:22\\\\d\\\\d|42))\\\\d{4}|(?:2|8[2-8]\\\\d\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"232345678\",\n      ,\n      ,\n      [6, 8, 9, 10],\n      [4, 5, 7]\n    ], [, , \"(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}\", , , , \"9051234567\", , , [10]], [, , \"1800\\\\d{7,9}\", , , , \"180012345678\", , , [11, 12, 13]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PH\", 63, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{5})\", \"$1 $2\", [\"2\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{4})(\\\\d{4,6})\",\n      \"$1 $2\",\n      [\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\", \"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{5})(\\\\d{4})\", \"$1 $2\", [\"346|4(?:27|9[35])|883\", \"3469|4(?:279|9(?:30|56))|8834\"], \"(0$1)\"], [, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"(0$1)\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-7]|8[2-8]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]], [, \"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PK: [, [\n      ,\n      ,\n      \"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [8, 9, 10, 11, 12],\n      [5, 6, 7]\n    ], [, , \"(?:(?:21|42)[2-9]|58[126])\\\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\\\d{6,7}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\\\d{5,6}\", , , , \"2123456789\", , , [9, 10], [5, 6, 7, 8]], [, , \"3(?:[0-24]\\\\d|3[0-7]|55|64)\\\\d{7}\", , , , \"3012345678\", , , [10]], [, , \"800\\\\d{5}(?:\\\\d{3})?\", , , , \"80012345\", , , [8, 11]], [, , \"900\\\\d{5}\", , , , \"90012345\", , , [8]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"122\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"122044444\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], \"PK\", 92, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\", \"$1 $2 $3\", [\"[89]0\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"1\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{6,7})\",\n      \"$1 $2\",\n      [\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\", \"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{7,8})\", \"$1 $2\", [\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"], \"(0$1)\"], [, \"(\\\\d{5})(\\\\d{5})\", \"$1 $2\", [\"58\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{7})\", \"$1 $2\", [\"3\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[24-9]\"], \"(0$1)\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467])|6(?:0[468]|[1-8])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"21111825888\",\n      ,\n      ,\n      [11, 12]\n    ], , , [, , , , , , , , , [-1]]],\n    PL: [, [, , \"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10]], [, , \"47\\\\d{7}|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])(?:[02-9]\\\\d{6}|1(?:[0-8]\\\\d{5}|9\\\\d{3}(?:\\\\d{2})?))\", , , , \"123456789\", , , [7, 9]], [, , \"21(?:1(?:[145]\\\\d|3[1-5])|2[0-4]\\\\d)\\\\d{4}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}\", , , , \"512345678\", , , [9]], [, , \"800\\\\d{6,7}\", , , , \"800123456\", , , [9, 10]], [, , \"70[01346-8]\\\\d{6}\", , , , \"701234567\", , , [9]], [\n      ,\n      ,\n      \"801\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"801234567\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , \"39\\\\d{7}\", , , , \"391234567\", , , [9]], \"PL\", 48, \"00\", , , , , , , , [\n      [, \"(\\\\d{5})\", \"$1\", [\"19\"]],\n      [, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"11|20|64\"]],\n      [, \"(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3\", [\"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\", \"(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],\n      [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"64\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"8\"]]\n    ], , [, , \"64\\\\d{4,7}\", , , , \"641234567\", , , [6, 7, 8, 9]], , , [, , , , , , , , , [-1]], [, , \"804\\\\d{6}\", , , , \"804123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    PM: [\n      ,\n      [, , \"(?:[45]|80\\\\d\\\\d)\\\\d{5}\", , , , , , , [6, 9]],\n      [, , \"(?:4[1-356]|50)\\\\d{4}\", , , , \"430123\", , , [6]],\n      [, , \"(?:4[02-4]|5[056])\\\\d{4}\", , , , \"551234\", , , [6]],\n      [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"PM\",\n      508,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[45]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"], \"0$1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    PR: [, [, , \"(?:[589]\\\\d\\\\d|787)\\\\d{7}\", , , , , , , [10], [7]], [, , \"(?:787|939)[2-9]\\\\d{6}\", , , , \"7872345678\", , , , [7]], [, , \"(?:787|939)[2-9]\\\\d{6}\", , , , \"7872345678\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"PR\", 1, \"011\", \"1\", , , \"1\", , , 1, , , [, , , , , , , , , [-1]], , \"787|939\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PS: [, [, , \"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\", , , , , , , [8, 9, 10], [7]], [, , \"(?:22[2-47-9]|42[45]|82[014-68]|92[3569])\\\\d{5}\", , , , \"22234567\", , , [8], [7]], [, , \"5[69]\\\\d{7}\", , , , \"599123456\", , , [9]], [, , \"1800\\\\d{6}\", , , , \"1800123456\", , , [10]], [, , , , , , , , , [-1]], [, , \"1700\\\\d{6}\", , , , \"1700123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PS\", 970, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[2489]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PT: [, [, , \"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\", , , , , , , [9]], [, , \"2(?:[12]\\\\d|3[1-689]|4[1-59]|[57][1-9]|6[1-35689]|8[1-69]|9[1256])\\\\d{6}\", , , , \"212345678\"], [, , \"6(?:[06]92(?:30|9\\\\d)|[35]92(?:3[03]|9\\\\d))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}\", , , , \"912345678\"], [, , \"80[02]\\\\d{6}\", , , , \"800123456\"], [\n      ,\n      ,\n      \"(?:6(?:0[178]|4[68])\\\\d|76(?:0[1-57]|1[2-47]|2[237]))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"760123456\"\n    ], [, , \"80(?:8\\\\d|9[1579])\\\\d{5}\", , , , \"808123456\"], [, , \"884[0-4689]\\\\d{5}\", , , , \"884123456\"], [, , \"30\\\\d{7}\", , , , \"301234567\"], \"PT\", 351, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2[12]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"16|[236-9]\"]]], , [, , \"6222\\\\d{5}\", , , , \"622212345\"], , , [, , , , , , , , , [-1]], [, , \"70(?:7\\\\d|8[17])\\\\d{5}\", , , , \"707123456\"], , , [, , \"600\\\\d{6}|6[06]9233\\\\d{3}\", , , , \"600110000\"]],\n    PW: [, [, , \"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\", , , , , , , [7]], [\n      ,\n      ,\n      \"(?:2(?:55|77)|345|488|5(?:35|44|87)|6(?:22|54|79)|7(?:33|47)|8(?:24|55|76)|900)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"2771234\"\n    ], [, , \"(?:(?:46|83)[0-5]|6[2-4689]0)\\\\d{4}|(?:45|77|88)\\\\d{5}\", , , , \"6201234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"PW\", 680, \"01[12]\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    PY: [, [, , \"59\\\\d{4,6}|9\\\\d{5,10}|(?:[2-46-8]\\\\d|5[0-8])\\\\d{4,7}\", , , , , , , [6, 7, 8, 9, 10, 11], [5]], [\n      ,\n      ,\n      \"(?:[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36])\\\\d{5,7}|(?:2(?:2[4-68]|[4-68]\\\\d|7[15]|9[1-5])|3(?:18|3[167]|4[2357]|51|[67]\\\\d)|4(?:3[12]|5[13]|9[1-47])|5(?:[1-4]\\\\d|5[02-4])|6(?:3[1-3]|44|7[1-8])|7(?:4[0-4]|5\\\\d|6[1-578]|75|8[0-8])|858)\\\\d{5,6}\",\n      ,\n      ,\n      ,\n      \"212345678\",\n      ,\n      ,\n      [7, 8, 9],\n      [5, 6]\n    ], [, , \"9(?:51|6[129]|[78][1-6]|9[1-5])\\\\d{6}\", , , , \"961456789\", , , [9]], [, , \"9800\\\\d{5,7}\", , , , \"98000123456\", , , [9, 10, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"8700[0-4]\\\\d{4}\", , , , \"870012345\", , , [9]], \"PY\", 595, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,6})\", \"$1 $2\", [\"[2-9]0\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"[26]1|3[289]|4[1246-8]|7[1-3]|8[1-36]\"], \"(0$1)\"], [, \"(\\\\d{3})(\\\\d{4,5})\", \"$1 $2\", [\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"], \"(0$1)\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\n      \"(0$1)\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"87\"]], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"9(?:[5-79]|8[1-6])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-8]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"9\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"[2-9]0\\\\d{4,7}\", , , , \"201234567\", , , [6, 7, 8, 9]], , , [, , , , , , , , , [-1]]],\n    QA: [, [, , \"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\", , , , , , , [7, 8, 9, 11]], [\n      ,\n      ,\n      \"4(?:1111|2022)\\\\d{3}|4(?:[04]\\\\d\\\\d|14[0-6]|999)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"44123456\",\n      ,\n      ,\n      [8]\n    ], [, , \"[35-7]\\\\d{7}\", , , , \"33123456\", , , [8]], [, , \"800\\\\d{4}|(?:0080[01]|800)\\\\d{6}\", , , , \"8001234\", , , [7, 9, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"QA\", 974, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"2[16]|8\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[3-7]\"]]], , [, , \"2(?:1\\\\d|61)\\\\d{4}\", , , , \"2123456\", , , [7]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RE: [, [, , \"(?:26|[689]\\\\d)\\\\d{7}\", , , , , , , [9]], [, , \"26(?:2\\\\d\\\\d|3(?:0\\\\d|1[0-3]))\\\\d{4}\", , , , \"262161234\"], [\n      ,\n      ,\n      \"(?:69(?:2\\\\d\\\\d|3(?:0[0-46]|1[013]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|6[0-6]|7[0-27]|8[0-8]|9[0-479]))|9(?:399[0-2]|4790|76(?:2[27]|3[0-37]|9\\\\d)))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"692123456\"\n    ], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , \"89[1-37-9]\\\\d{6}\", , , , \"891123456\"], [, , \"8(?:1[019]|2[0156]|84|90)\\\\d{6}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RE\", 262, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2689]\"], \"0$1\"]], , [, , , , , , , , , [-1]], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RO: [, [, , \"(?:[2378]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\", , , , , , , [6, 9]], [, , \"[23][13-6]\\\\d{7}|(?:2(?:19\\\\d|[3-6]\\\\d9)|31\\\\d\\\\d)\\\\d\\\\d\", , , , \"211234567\"], [\n      ,\n      ,\n      \"7020\\\\d{5}|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-29])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"712034567\",\n      ,\n      ,\n      [9]\n    ], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [, , \"90[0136]\\\\d{6}\", , , , \"900123456\", , , [9]], [, , \"801\\\\d{6}\", , , , \"801123456\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RO\", 40, \"00\", \"0\", \" int \", , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"2[3-6]\", \"2[3-6]\\\\d9\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"219|31\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[23]1\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[237-9]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:37\\\\d|80[578])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"372123456\",\n      ,\n      ,\n      [9]\n    ], , , [, , , , , , , , , [-1]]],\n    RS: [, [, , \"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\", , , , , , , [6, 7, 8, 9, 10, 11, 12], [4, 5]], [, , \"(?:11[1-9]\\\\d|(?:2[389]|39)(?:0[2-9]|[2-9]\\\\d))\\\\d{3,8}|(?:1[02-9]|2[0-24-7]|3[0-8])[2-9]\\\\d{4,9}\", , , , \"10234567\", , , [7, 8, 9, 10, 11, 12], [4, 5, 6]], [, , \"6(?:[0-689]|7\\\\d)\\\\d{6,7}\", , , , \"601234567\", , , [8, 9, 10]], [, , \"800\\\\d{3,9}\", , , , \"80012345\"], [, , \"(?:78\\\\d|90[0169])\\\\d{3,7}\", , , , \"90012345\", , , [6, 7, 8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], \"RS\", 381, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3,9})\", \"$1 $2\", [\"(?:2[389]|39)0|[7-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{5,10})\", \"$1 $2\", [\"[1-36]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"7[06]\\\\d{4,10}\", , , , \"700123456\"], , , [, , , , , , , , , [-1]]],\n    RU: [, [, , \"8\\\\d{13}|[347-9]\\\\d{9}\", , , , , , , [10, 14], [7]], [, , \"(?:3(?:0[12]|4[1-35-79]|5[1-3]|65|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-79]|7[1-37-9]))\\\\d{7}\", , , , \"3011234567\", , , [10], [7]], [\n      ,\n      ,\n      \"9\\\\d{9}\",\n      ,\n      ,\n      ,\n      \"9123456789\",\n      ,\n      ,\n      [10]\n    ], [, , \"8(?:0[04]|108\\\\d{3})\\\\d{7}\", , , , \"8001234567\"], [, , \"80[39]\\\\d{7}\", , , , \"8091234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"808\\\\d{7}\", , , , \"8081234567\", , , [10]], [, , , , , , , , , [-1]], \"RU\", 7, \"810\", \"8\", , , \"8\", , \"8~10\", , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"[0-79]\"]], [, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"7(?:1[0-8]|2[1-9])\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"], \"8 ($1)\", , 1], [\n      ,\n      \"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"7(?:1[0-68]|2[1-9])\", \"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\", \"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\n      \"8 ($1)\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"8 ($1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[349]|8(?:[02-7]|1[1-8])\"], \"8 ($1)\", , 1], [\n      ,\n      \"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\n      \"$1 $2 $3 $4\",\n      [\"8\"],\n      \"8 ($1)\"\n    ]], [[, \"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"7(?:1[0-8]|2[1-9])\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\", \"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"], \"8 ($1)\", , 1], [\n      ,\n      \"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"7(?:1[0-68]|2[1-9])\", \"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\", \"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\n      \"8 ($1)\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"8 ($1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[349]|8(?:[02-7]|1[1-8])\"], \"8 ($1)\", , 1], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"8\"], \"8 ($1)\"]], [, , , , , , , , , [-1]], 1, \"3[04-689]|[489]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    RW: [, [, , \"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\", , , , , , , [8, 9]], [, , \"(?:06|2[23568]\\\\d)\\\\d{6}\", , , , \"250123456\"], [, , \"7[2389]\\\\d{7}\", , , , \"720123456\", , , [9]], [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]], [\n      ,\n      ,\n      \"900\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"900123456\",\n      ,\n      ,\n      [9]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"RW\", 250, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[7-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SA: [, [, , \"92\\\\d{7}|(?:[15]|8\\\\d)\\\\d{8}\", , , , , , , [9, 10], [7]], [, , \"1(?:1\\\\d|2[24-8]|3[35-8]|4[3-68]|6[2-5]|7[235-7])\\\\d{6}\", , , , \"112345678\", , , [9], [7]], [\n      ,\n      ,\n      \"579[01]\\\\d{5}|5(?:[013-689]\\\\d|7[0-35-8])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"512345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"800\\\\d{7}\", , , , \"8001234567\", , , [10]], [, , \"925\\\\d{6}\", , , , \"925012345\", , , [9]], [, , \"920\\\\d{6}\", , , , \"920012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SA\", 966, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"9\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"5\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"81\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"811\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"8110123456\",\n      ,\n      ,\n      [10]\n    ], , , [, , , , , , , , , [-1]]],\n    SB: [\n      ,\n      [, , \"(?:[1-6]|[7-9]\\\\d\\\\d)\\\\d{4}\", , , , , , , [5, 7]],\n      [, , \"(?:1[4-79]|[23]\\\\d|4[0-2]|5[03]|6[0-37])\\\\d{3}\", , , , \"40123\", , , [5]],\n      [, , \"48\\\\d{3}|(?:(?:7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}\", , , , \"7421234\"],\n      [, , \"1[38]\\\\d{3}\", , , , \"18123\", , , [5]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"5[12]\\\\d{3}\", , , , \"51123\", , , [5]],\n      \"SB\",\n      677,\n      \"0[01]\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"7|8[4-9]|9(?:[1-8]|9[0-8])\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SC: [, [, , \"800\\\\d{4}|(?:[249]\\\\d|64)\\\\d{5}\", , , , , , , [7]], [, , \"4[2-46]\\\\d{5}\", , , , \"4217123\"], [, , \"2[125-8]\\\\d{5}\", , , , \"2510123\"], [, , \"800[08]\\\\d{3}\", , , , \"8000000\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"971\\\\d{4}|(?:64|95)\\\\d{5}\", , , , \"6412345\"], \"SC\", 248, \"010|0[0-2]\", , , , , , \"00\", , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[246]|9[57]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SD: [, [, , \"[19]\\\\d{8}\", , , , , , , [9]], [\n      ,\n      ,\n      \"1(?:5\\\\d|8[35-7])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"153123456\"\n    ], [, , \"(?:1[0-2]|9[0-3569])\\\\d{7}\", , , , \"911231234\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SD\", 249, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[19]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SE: [, [, , \"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\", , , , , , , [6, 7, 8, 9, 10, 12]], [\n      ,\n      ,\n      \"(?:(?:[12][136]|3[356]|4[0246]|6[03]|8\\\\d)\\\\d|90[1-9])\\\\d{4,6}|(?:1(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\\\d)|2(?:2[0-7]|4[0136-8]|5[0138]|7[018]|8[01]|9[0-57])|3(?:0[0-4]|1\\\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])|4(?:1[013-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])|5(?:0[0-6]|[15][0-5]|2[0-68]|3[0-4]|4\\\\d|6[03-5]|7[013]|8[0-79]|9[01])|6(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])|9(?:1[0-68]|2\\\\d|3[02-5]|4[0-3]|5[0-4]|[68][01]|7[0135-8]))\\\\d{5,6}\",\n      ,\n      ,\n      ,\n      \"8123456\",\n      ,\n      ,\n      [7, 8, 9]\n    ], [, , \"7[02369]\\\\d{7}\", , , , \"701234567\", , , [9]], [, , \"20\\\\d{4,7}\", , , , \"20123456\", , , [6, 7, 8, 9]], [, , \"649\\\\d{6}|99[1-59]\\\\d{4}(?:\\\\d{3})?|9(?:00|39|44)[1-8]\\\\d{3,6}\", , , , \"9001234567\", , , [7, 8, 9, 10]], [, , \"77[0-7]\\\\d{6}\", , , , \"771234567\", , , [9]], [, , \"75[1-8]\\\\d{6}\", , , , \"751234567\", , , [9]], [, , , , , , , , , [-1]], \"SE\", 46, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\", \"$1-$2 $3\", [\"20\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"9(?:00|39|44|9)\"], \"0$1\"], [\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\n      \"$1-$2 $3\",\n      [\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"8\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\", \"$1-$2 $3\", [\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\", \"$1-$2 $3\", [\"9(?:00|39|44)\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"10|7\"], \"0$1\"], [\n      ,\n      \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\n      \"$1-$2 $3 $4\",\n      [\"8\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4\", [\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1-$2 $3 $4\", [\"9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1-$2 $3 $4 $5\", [\"[26]\"], \"0$1\"]], [[, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\", \"$1 $2 $3\", [\"20\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"9(?:00|39|44|9)\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3\", [\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"]], [\n      ,\n      \"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"8\"]\n    ], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\", \"$1 $2 $3\", [\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]], [, \"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\", \"$1 $2 $3\", [\"9(?:00|39|44)\"]], [, \"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"10|7\"]], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]], [\n      ,\n      \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"]\n    ], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"9\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4 $5\", [\"[26]\"]]], [, , \"74[02-9]\\\\d{6}\", , , , \"740123456\", , , [9]], , , [, , , , , , , , , [-1]], [, , \"10[1-8]\\\\d{6}\", , , , \"102345678\", , , [9]], , , [, , \"(?:25[245]|67[3-68])\\\\d{9}\", , , , \"254123456789\", , , [12]]],\n    SG: [, [, , \"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\", , , , , , , [8, 10, 11]], [\n      ,\n      ,\n      \"662[0-24-9]\\\\d{4}|6(?:[0-578]\\\\d|6[013-57-9]|9[0-35-9])\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"61234567\",\n      ,\n      ,\n      [8]\n    ], [, , \"8(?:06[0-6]|95[0-2])\\\\d{4}|(?:8(?:0[1-5]|[1-8]\\\\d|9[0-4])|9[0-8]\\\\d)\\\\d{5}\", , , , \"81234567\", , , [8]], [, , \"(?:18|8)00\\\\d{7}\", , , , \"18001234567\", , , [10, 11]], [, , \"1900\\\\d{7}\", , , , \"19001234567\", , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"(?:3[12]\\\\d|666)\\\\d{5}\", , , , \"31234567\", , , [8]], \"SG\", 65, \"0[0-3]\\\\d\", , , , , , , , [[, \"(\\\\d{4,5})\", \"$1\", [\"1[013-9]|77\", \"1(?:[013-8]|9(?:0[1-9]|[1-9]))|77\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[369]|8(?:0[1-6]|[1-9])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [\n      ,\n      \"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\n      \"$1 $2 $3\",\n      [\"7\"]\n    ], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]], [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[369]|8(?:0[1-6]|[1-9])\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"7\"]], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"1\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"7000\\\\d{7}\", , , , \"70001234567\", , , [11]], , , [, , , , , , , , , [-1]]],\n    SH: [, [, , \"(?:[256]\\\\d|8)\\\\d{3}\", , , , , , , [4, 5]], [, , \"2(?:[0-57-9]\\\\d|6[4-9])\\\\d\\\\d\", , , , \"22158\"], [\n      ,\n      ,\n      \"[56]\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"51234\",\n      ,\n      ,\n      [5]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"262\\\\d\\\\d\", , , , \"26212\", , , [5]], \"SH\", 290, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], 1, \"[256]\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SI: [\n      ,\n      [, , \"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\", , , , , , , [5, 6, 7, 8]],\n      [, , \"(?:[1-357][2-8]|4[24-8])\\\\d{6}\", , , , \"12345678\", , , [8], [7]],\n      [, , \"65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[0139]|51|6[489])\\\\d{6}\", , , , \"31234567\", , , [8]],\n      [, , \"80\\\\d{4,6}\", , , , \"80123456\", , , [6, 7, 8]],\n      [, , \"89[1-3]\\\\d{2,5}|90\\\\d{4,6}\", , , , \"90123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"(?:59\\\\d\\\\d|8(?:1(?:[67]\\\\d|8[0-589])|2(?:0\\\\d|2[0-37-9]|8[0-2489])|3[389]\\\\d))\\\\d{4}\", , , , \"59012345\", , , [8]],\n      \"SI\",\n      386,\n      \"00|10(?:22|66|88|99)\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      \"00\",\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3,6})\", \"$1 $2\", [\"8[09]|9\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"59|8\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[37][01]|4[0139]|51|6\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[1-57]\"], \"(0$1)\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SJ: [, [, , \"0\\\\d{4}|(?:[489]\\\\d|[57]9)\\\\d{6}\", , , , , , , [5, 8]], [, , \"79\\\\d{6}\", , , , \"79123456\", , , [8]], [, , \"(?:4[015-8]|59|9\\\\d)\\\\d{6}\", , , , \"41234567\", , , [8]], [, , \"80[01]\\\\d{5}\", , , , \"80012345\", , , [8]], [, , \"82[09]\\\\d{5}\", , , , \"82012345\", , , [8]], [, , \"810(?:0[0-6]|[2-8]\\\\d)\\\\d{3}\", , , , \"81021234\", , , [8]], [, , \"880\\\\d{5}\", , , , \"88012345\", , , [8]], [, , \"85[0-5]\\\\d{5}\", , , , \"85012345\", , , [8]], \"SJ\", 47, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"79\", [, , , , , , , , , [-1]], [, , \"(?:0[2-9]|81(?:0(?:0[7-9]|1\\\\d)|5\\\\d\\\\d))\\\\d{3}\", , , , \"02000\"], , , [\n      ,\n      ,\n      \"81[23]\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"81212345\",\n      ,\n      ,\n      [8]\n    ]],\n    SK: [\n      ,\n      [, , \"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\", , , , , , , [6, 7, 9]],\n      [, , \"(?:2(?:16|[2-9]\\\\d{3})|(?:(?:[3-5][1-8]\\\\d|819)\\\\d|601[1-5])\\\\d)\\\\d{4}|(?:2|[3-5][1-8])1[67]\\\\d{3}|[3-5][1-8]16\\\\d\\\\d\", , , , \"221234567\"],\n      [, , \"909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}\", , , , \"912123456\", , , [9]],\n      [, , \"800\\\\d{6}\", , , , \"800123456\", , , [9]],\n      [, , \"9(?:00|[78]\\\\d)\\\\d{6}\", , , , \"900123456\", , , [9]],\n      [, , \"8[5-9]\\\\d{7}\", , , , \"850123456\", , , [9]],\n      [, , , , , , , , , [-1]],\n      [, , \"6(?:02|5[0-4]|9[0-6])\\\\d{6}\", , , , \"690123456\", , , [9]],\n      \"SK\",\n      421,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d)(\\\\d{2})(\\\\d{3,4})\", \"$1 $2 $3\", [\"21\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\"[3-5][1-8]1\", \"[3-5][1-8]1[67]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"909\", \"9090\"], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1/$2 $3 $4\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[689]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1/$2 $3 $4\", [\"[3-5]\"], \"0$1\"]],\n      [[, \"(\\\\d)(\\\\d{2})(\\\\d{3,4})\", \"$1 $2 $3\", [\"21\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\", \"$1 $2 $3\", [\n        \"[3-5][1-8]1\",\n        \"[3-5][1-8]1[67]\"\n      ], \"0$1\"], [, \"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\", \"$1/$2 $3 $4\", [\"2\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[689]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1/$2 $3 $4\", [\"[3-5]\"], \"0$1\"]],\n      [, , \"9090\\\\d{3}\", , , , \"9090123\", , , [7]],\n      ,\n      ,\n      [, , \"9090\\\\d{3}|(?:602|8(?:00|[5-9]\\\\d)|9(?:00|[78]\\\\d))\\\\d{6}\", , , , , , , [7, 9]],\n      [, , \"96\\\\d{7}\", , , , \"961234567\", , , [9]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SL: [, [, , \"(?:[237-9]\\\\d|66)\\\\d{6}\", , , , , , , [8], [6]], [, , \"22[2-4][2-9]\\\\d{4}\", , , , \"22221234\", , , , [6]], [\n      ,\n      ,\n      \"(?:25|3[0-5]|66|7[2-9]|8[08]|9[09])\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"25123456\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SL\", 232, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"[236-9]\"], \"(0$1)\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SM: [, [, , \"(?:0549|[5-7]\\\\d)\\\\d{6}\", , , , , , , [8, 10], [6]], [, , \"0549(?:8[0157-9]|9\\\\d)\\\\d{4}\", , , , \"0549886377\", , , [10], [6]], [, , \"6[16]\\\\d{6}\", , , , \"66661212\", , , [8]], [, , , , , , , , , [-1]], [, , \"7[178]\\\\d{6}\", , , , \"71123456\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"5[158]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"58001110\",\n      ,\n      ,\n      [8]\n    ], \"SM\", 378, \"00\", , , , \"([89]\\\\d{5})$\", \"0549$1\", , , [[, \"(\\\\d{6})\", \"$1\", [\"[89]\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-7]\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"0\"]]], [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[5-7]\"]], [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"0\"]]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SN: [, [, , \"(?:[378]\\\\d|93)\\\\d{7}\", , , , , , , [9]], [, , \"3(?:0(?:1[0-2]|80)|282|3(?:8[1-9]|9[3-9])|611)\\\\d{5}\", , , , \"301012345\"], [\n      ,\n      ,\n      \"7(?:(?:[06-8]\\\\d|21|90)\\\\d|5(?:01|[19]0|25|[38]3|[4-7]\\\\d))\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"701234567\"\n    ], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , \"88[4689]\\\\d{6}\", , , , \"884123456\"], [, , \"81[02468]\\\\d{6}\", , , , \"810123456\"], [, , , , , , , , , [-1]], [, , \"(?:3(?:392|9[01]\\\\d)\\\\d|93(?:3[13]0|929))\\\\d{4}\", , , , \"933301234\"], \"SN\", 221, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[379]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SO: [, [, , \"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\", , , , , , , [6, 7, 8, 9]], [\n      ,\n      ,\n      \"(?:1\\\\d|2[0-79]|3[0-46-8]|4[0-7]|5[57-9])\\\\d{5}|(?:[134]\\\\d|8[125])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"4012345\",\n      ,\n      ,\n      [6, 7]\n    ], [, , \"(?:(?:15|(?:3[59]|4[89]|79|8[08])\\\\d|6(?:0[5-7]|[1-9]\\\\d)|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}\", , , , \"71123456\", , , [7, 8, 9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SO\", 252, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"8[125]\"]], [, \"(\\\\d{6})\", \"$1\", [\"[134]\"]], [, \"(\\\\d)(\\\\d{6})\", \"$1 $2\", [\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]], [\n      ,\n      \"(\\\\d)(\\\\d{7})\",\n      \"$1 $2\",\n      [\"(?:2|90)4|[67]\"]\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[3478]|64|90\"]], [, \"(\\\\d{2})(\\\\d{5,7})\", \"$1 $2\", [\"1|28|6(?:0[5-7]|[1-35-9])|9[2-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SR: [\n      ,\n      [, , \"(?:[2-5]|68|[78]\\\\d)\\\\d{5}\", , , , , , , [6, 7]],\n      [, , \"(?:2[1-3]|3[0-7]|(?:4|68)\\\\d|5[2-58])\\\\d{4}\", , , , \"211234\"],\n      [, , \"(?:7[124-7]|8[124-9])\\\\d{5}\", , , , \"7412345\", , , [7]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"56\\\\d{4}\", , , , \"561234\", , , [6]],\n      \"SR\",\n      597,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1-$2-$3\", [\"56\"]], [, \"(\\\\d{3})(\\\\d{3})\", \"$1-$2\", [\"[2-5]\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"[6-8]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    SS: [, [, , \"[19]\\\\d{8}\", , , , , , , [9]], [, , \"1[89]\\\\d{7}\", , , , \"181234567\"], [, , \"(?:12|9[1257-9])\\\\d{7}\", , , , \"977123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SS\", 211, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[19]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ST: [, [, , \"(?:22|9\\\\d)\\\\d{5}\", , , , , , , [7]], [, , \"22\\\\d{5}\", , , , \"2221234\"], [, , \"900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}\", , , , \"9812345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"ST\", 239, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[29]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SV: [, [, , \"[267]\\\\d{7}|[89]00\\\\d{4}(?:\\\\d{4})?\", , , , , , , [7, 8, 11]], [\n      ,\n      ,\n      \"2(?:[1-6]\\\\d{3}|[79]90[034]|890[0245])\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"21234567\",\n      ,\n      ,\n      [8]\n    ], [, , \"66(?:[02-9]\\\\d\\\\d|1(?:[02-9]\\\\d|16))\\\\d{3}|(?:6[0-57-9]|7\\\\d)\\\\d{6}\", , , , \"70123456\", , , [8]], [, , \"800\\\\d{4}(?:\\\\d{4})?\", , , , \"8001234\", , , [7, 11]], [, , \"900\\\\d{4}(?:\\\\d{4})?\", , , , \"9001234\", , , [7, 11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SV\", 503, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[89]\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[267]\"]], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SX: [, [\n      ,\n      ,\n      \"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [10],\n      [7]\n    ], [, , \"7215(?:4[2-8]|8[239]|9[056])\\\\d{4}\", , , , \"7215425678\", , , , [7]], [, , \"7215(?:1[02]|2\\\\d|5[034679]|8[014-8])\\\\d{4}\", , , , \"7215205678\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002123456\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002123456\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"SX\", 1, \"011\", \"1\", , , \"(5\\\\d{6})$|1\", \"721$1\", , , , , [, , , , , , , , , [-1]], , \"721\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SY: [, [, , \"[1-39]\\\\d{8}|[1-5]\\\\d{7}\", , , , , , , [8, 9], [6, 7]], [, , \"21\\\\d{6,7}|(?:1(?:[14]\\\\d|[2356])|2[235]|3(?:[13]\\\\d|4)|4[134]|5[1-3])\\\\d{6}\", , , , \"112345678\", , , , [6, 7]], [, , \"9[1-689]\\\\d{7}\", , , , \"944567890\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"SY\", 963, \"00\", \"0\", , , \"0\", , , , [[\n      ,\n      \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\n      \"$1 $2 $3\",\n      [\"[1-5]\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\", , 1]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    SZ: [, [, , \"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\", , , , , , , [8, 9]], [, , \"[23][2-5]\\\\d{6}\", , , , \"22171234\", , , [8]], [, , \"7[6-9]\\\\d{6}\", , , , \"76123456\", , , [8]], [, , \"0800\\\\d{4}\", , , , \"08001234\", , , [8]], [, , \"900\\\\d{6}\", , , , \"900012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"70\\\\d{6}\", , , , \"70012345\", , , [8]], \"SZ\", 268, \"00\", , , , , , , , [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[0237]\"]], [\n      ,\n      \"(\\\\d{5})(\\\\d{4})\",\n      \"$1 $2\",\n      [\"9\"]\n    ]], , [, , , , , , , , , [-1]], , , [, , \"0800\\\\d{4}\", , , , , , , [8]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TA: [, [, , \"8\\\\d{3}\", , , , , , , [4]], [, , \"8\\\\d{3}\", , , , \"8999\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TA\", 290, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"8\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TC: [, [, , \"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"649(?:266|712|9(?:4\\\\d|50))\\\\d{4}\", , , , \"6497121234\", , , , [7]], [\n      ,\n      ,\n      \"649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"6492311234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , \"649(?:71[01]|966)\\\\d{4}\", , , , \"6497101234\", , , , [7]], \"TC\", 1, \"011\", \"1\", , , \"([2-479]\\\\d{6})$|1\", \"649$1\", , , , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], , \"649\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TD: [, [, , \"(?:22|[69]\\\\d|77)\\\\d{6}\", , , , , , , [8]], [, , \"22(?:[37-9]0|5[0-5]|6[89])\\\\d{4}\", , , , \"22501234\"], [, , \"(?:6[0235689]|77|9\\\\d)\\\\d{6}\", , , , \"63012345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TD\", 235, \"00|16\", , , , , , \"00\", , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[2679]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TG: [, [, , \"[279]\\\\d{7}\", , , , , , , [8]], [\n      ,\n      ,\n      \"2(?:2[2-7]|3[23]|4[45]|55|6[67]|77)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"22212345\"\n    ], [, , \"(?:7[019]|9[0-36-9])\\\\d{6}\", , , , \"90112345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TG\", 228, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[279]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TH: [, [, , \"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\", , , , , , , [8, 9, 10, 13]], [, , \"(?:1[0689]|2\\\\d|3[2-9]|4[2-5]|5[2-6]|7[3-7])\\\\d{6}\", , , , \"21234567\", , , [8]], [\n      ,\n      ,\n      \"671[0-8]\\\\d{5}|(?:14|6[1-6]|[89]\\\\d)\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"812345678\",\n      ,\n      ,\n      [9]\n    ], [, , \"(?:001800\\\\d|1800)\\\\d{6}\", , , , \"1800123456\", , , [10, 13]], [, , \"1900\\\\d{6}\", , , , \"1900123456\", , , [10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"6[08]\\\\d{7}\", , , , \"601234567\", , , [9]], \"TH\", 66, \"00[1-9]\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"2\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[13-9]\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TJ: [, [, , \"(?:00|[1-57-9]\\\\d)\\\\d{7}\", , , , , , , [9], [3, 5, 6, 7]], [\n      ,\n      ,\n      \"(?:3(?:1[3-5]|2[245]|3[12]|4[24-7]|5[25]|72)|4(?:46|74|87))\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"372123456\",\n      ,\n      ,\n      ,\n      [3, 5, 6, 7]\n    ], [, , \"41[18]\\\\d{6}|(?:[034]0|1[017]|2[02]|5[05]|7[0178]|8[078]|9\\\\d)\\\\d{7}\", , , , \"917123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TJ\", 992, \"810\", , , , , , \"8~10\", , [[, \"(\\\\d{6})(\\\\d)(\\\\d{2})\", \"$1 $2 $3\", [\"331\", \"3317\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[34]7|91[78]\"]], [, \"(\\\\d{4})(\\\\d)(\\\\d{4})\", \"$1 $2 $3\", [\"3[1-5]\"]], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[0-57-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    TK: [, [, , \"[2-47]\\\\d{3,6}\", , , , , , , [4, 5, 6, 7]], [, , \"(?:2[2-4]|[34]\\\\d)\\\\d{2,5}\", , , , \"3101\"], [, , \"7[2-4]\\\\d{2,5}\", , , , \"7290\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TK\", 690, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TL: [, [, , \"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\", , , , , , , [7, 8]], [, , \"(?:2[1-5]|3[1-9]|4[1-4])\\\\d{5}\", , , , \"2112345\", , , [7]], [, , \"7[2-8]\\\\d{6}\", , , , \"77212345\", , , [8]], [, , \"80\\\\d{5}\", , , , \"8012345\", , , [7]], [\n      ,\n      ,\n      \"90\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"9012345\",\n      ,\n      ,\n      [7]\n    ], [, , , , , , , , , [-1]], [, , \"70\\\\d{5}\", , , , \"7012345\", , , [7]], [, , , , , , , , , [-1]], \"TL\", 670, \"00\", , , , , , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[2-489]|70\"]], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TM: [\n      ,\n      [, , \"[1-6]\\\\d{7}\", , , , , , , [8]],\n      [, , \"(?:1(?:2\\\\d|3[1-9])|2(?:22|4[0-35-8])|3(?:22|4[03-9])|4(?:22|3[128]|4\\\\d|6[15])|5(?:22|5[7-9]|6[014-689]))\\\\d{5}\", , , , \"12345678\"],\n      [, , \"6\\\\d{7}\", , , , \"66123456\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"TM\",\n      993,\n      \"810\",\n      \"8\",\n      ,\n      ,\n      \"8\",\n      ,\n      \"8~10\",\n      ,\n      [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"12\"], \"(8 $1)\"], [, \"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\", \"$1 $2-$3-$4\", [\"[1-5]\"], \"(8 $1)\"], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"6\"], \"8 $1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    TN: [\n      ,\n      [, , \"[2-57-9]\\\\d{7}\", , , , , , , [8]],\n      [, , \"81200\\\\d{3}|(?:3[0-2]|7\\\\d)\\\\d{6}\", , , , \"30010123\"],\n      [, , \"3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-7])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}\", , , , \"20123456\"],\n      [, , \"8010\\\\d{4}\", , , , \"80101234\"],\n      [, , \"88\\\\d{6}\", , , , \"88123456\"],\n      [, , \"8[12]10\\\\d{4}\", , , , \"81101234\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"TN\",\n      216,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-57-9]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    TO: [, [, , \"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\", , , , , , , [5, 7]], [, , \"(?:2\\\\d|3[0-8]|4[0-4]|50|6[09]|7[0-24-69]|8[05])\\\\d{3}\", , , , \"20123\", , , [5]], [\n      ,\n      ,\n      \"(?:55[4-6]|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"7715123\",\n      ,\n      ,\n      [7]\n    ], [, , \"0800\\\\d{3}\", , , , \"0800222\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"55[0-37-9]\\\\d{4}\", , , , \"5510123\", , , [7]], \"TO\", 676, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1-$2\", [\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]], [, \"(\\\\d{4})(\\\\d{3})\", \"$1 $2\", [\"0\"]], [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[5-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TR: [, [, , \"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [7, 10, 12, 13]], [\n      ,\n      ,\n      \"(?:2(?:[13][26]|[28][2468]|[45][268]|[67][246])|3(?:[13][28]|[24-6][2468]|[78][02468]|92)|4(?:[16][246]|[23578][2468]|4[26]))\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"2123456789\",\n      ,\n      ,\n      [10]\n    ], [, , \"56161\\\\d{5}|5(?:0[15-7]|1[06]|24|[34]\\\\d|5[1-59]|9[46])\\\\d{7}\", , , , \"5012345678\", , , [10]], [, , \"8(?:00\\\\d{7}(?:\\\\d{2,3})?|11\\\\d{7})\", , , , \"8001234567\", , , [10, 12, 13]], [, , \"(?:8[89]8|900)\\\\d{7}\", , , , \"9001234567\", , , [10]], [, , , , , , , , , [-1]], [, , \"592(?:21[12]|461)\\\\d{4}\", , , , \"5922121234\", , , [10]], [, , \"850\\\\d{7}\", , , , \"8500123456\", , , [10]], \"TR\", 90, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d)(\\\\d{3})\", \"$1 $2 $3\", [\"444\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"512|8[01589]|90\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\n      \"$1 $2 $3 $4\",\n      [\"5(?:[0-59]|61)\", \"5(?:[0-59]|616)\", \"5(?:[0-59]|6161)\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24][1-8]|3[1-9]\"], \"(0$1)\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\", \"$1 $2 $3\", [\"80\"], \"0$1\", , 1]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"512|8[01589]|90\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"5(?:[0-59]|61)\", \"5(?:[0-59]|616)\", \"5(?:[0-59]|6161)\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[24][1-8]|3[1-9]\"], \"(0$1)\", , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\n      \"$1 $2 $3\",\n      [\"80\"],\n      \"0$1\",\n      ,\n      1\n    ]], [, , \"512\\\\d{7}\", , , , \"5123456789\", , , [10]], , , [, , \"(?:444|811\\\\d{3})\\\\d{4}\", , , , , , , [7, 10]], [, , \"444\\\\d{4}\", , , , \"4441444\", , , [7]], , , [, , , , , , , , , [-1]]],\n    TT: [, [, , \"(?:[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"868(?:2(?:01|1[5-9]|[23]\\\\d|4[0-2])|6(?:0[7-9]|1[02-8]|2[1-9]|[3-69]\\\\d|7[0-79])|82[124])\\\\d{4}\", , , , \"8682211234\", , , , [7]], [, , \"868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}\", , , , \"8682911234\", , , , [7]], [\n      ,\n      ,\n      \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"8002345678\"\n    ], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"TT\", 1, \"011\", \"1\", , , \"([2-46-8]\\\\d{6})$|1\", \"868$1\", , , , , [, , , , , , , , , [-1]], , \"868\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"868619\\\\d{4}\", , , , \"8686191234\", , , , [7]]],\n    TV: [, [\n      ,\n      ,\n      \"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6, 7]\n    ], [, , \"2[02-9]\\\\d{3}\", , , , \"20123\", , , [5]], [, , \"(?:7[01]\\\\d|90)\\\\d{4}\", , , , \"901234\", , , [6, 7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"TV\", 688, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{3})\", \"$1 $2\", [\"2\"]], [, \"(\\\\d{2})(\\\\d{4})\", \"$1 $2\", [\"90\"]], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    TW: [, [, , \"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\", , , , , , , [7, 8, 9, 10, 11]], [\n      ,\n      ,\n      \"(?:2[2-8]\\\\d|370|55[01]|7[1-9])\\\\d{6}|4(?:(?:0(?:0[1-9]|[2-48]\\\\d)|1[023]\\\\d)\\\\d{4,5}|(?:[239]\\\\d\\\\d|4(?:0[56]|12|49))\\\\d{5})|6(?:[01]\\\\d{7}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|8(?:(?:2(?:3\\\\d|4[0-269]|[578]0|66)|36[24-9]|90\\\\d\\\\d)\\\\d{4}|4(?:0[56]|12|24|4[09])\\\\d{4,5})|(?:2(?:2(?:0\\\\d\\\\d|4(?:0[68]|[249]0|3[0-467]|5[0-25-9]|6[0235689]))|(?:3(?:[09]\\\\d|1[0-4])|(?:4\\\\d|5[0-49]|6[0-29]|7[0-5])\\\\d)\\\\d)|(?:(?:3[2-9]|5[2-8]|6[0-35-79]|8[7-9])\\\\d\\\\d|4(?:2(?:[089]\\\\d|7[1-9])|(?:3[0-4]|[78]\\\\d|9[01])\\\\d))\\\\d)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"221234567\",\n      ,\n      ,\n      [8, 9]\n    ], [, , \"(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}\", , , , \"912345678\", , , [9]], [, , \"80[0-79]\\\\d{6}|800\\\\d{5}\", , , , \"800123456\", , , [8, 9]], [, , \"20(?:[013-9]\\\\d\\\\d|2)\\\\d{4}\", , , , \"203123456\", , , [7, 9]], [, , , , , , , , , [-1]], [, , \"99\\\\d{7}\", , , , \"990123456\", , , [9]], [, , \"7010(?:[0-2679]\\\\d|3[0-7]|8[0-5])\\\\d{5}|70\\\\d{8}\", , , , \"7012345678\", , , [10, 11]], \"TW\", 886, \"0(?:0[25-79]|19)\", \"0\", \"#\", , \"0\", , , , [[, \"(\\\\d{2})(\\\\d)(\\\\d{4})\", \"$1 $2 $3\", [\"202\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[258]0\"], \"0$1\"], [\n      ,\n      \"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"[23568]|4(?:0[02-48]|[1-47-9])|7[1-9]\", \"[23568]|4(?:0[2-48]|[1-47-9])|(?:400|7)[1-9]\"],\n      \"0$1\"\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[49]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"50[0-46-9]\\\\d{6}\", , , , \"500123456\", , , [9]], , , [, , , , , , , , , [-1]]],\n    TZ: [, [, , \"(?:[25-8]\\\\d|41|90)\\\\d{7}\", , , , , , , [9]], [, , \"2[2-8]\\\\d{7}\", , , , \"222345678\"], [, , \"77[2-9]\\\\d{6}|(?:6[125-9]|7[13-689])\\\\d{7}\", , , , \"621234567\"], [, , \"80[08]\\\\d{6}\", , , , \"800123456\"], [\n      ,\n      ,\n      \"90\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"900123456\"\n    ], [, , \"8(?:40|6[01])\\\\d{6}\", , , , \"840123456\"], [, , , , , , , , , [-1]], [, , \"41\\\\d{7}\", , , , \"412345678\"], \"TZ\", 255, \"00[056]\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[24]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"5\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[67]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , \"(?:8(?:[04]0|6[01])|90\\\\d)\\\\d{6}\"], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UA: [, [, , \"[89]\\\\d{9}|[3-9]\\\\d{8}\", , , , , , , [9, 10], [5, 6, 7]], [\n      ,\n      ,\n      \"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"311234567\",\n      ,\n      ,\n      [9],\n      [5, 6, 7]\n    ], [, , \"(?:39|50|6[36-8]|7[1-3]|9[1-9])\\\\d{7}\", , , , \"501234567\", , , [9]], [, , \"800[1-8]\\\\d{5,6}\", , , , \"800123456\"], [, , \"900[239]\\\\d{5,6}\", , , , \"900212345\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"89[1-579]\\\\d{6}\", , , , \"891234567\", , , [9]], \"UA\", 380, \"00\", \"0\", , , \"0\", , \"0~0\", , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\", \"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"], \"0$1\"], [\n      ,\n      \"(\\\\d{4})(\\\\d{5})\",\n      \"$1 $2\",\n      [\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\", \"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\n      \"0$1\"\n    ], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[3-7]|89|9[1-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[89]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UG: [, [, , \"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\", , , , , , , [9], [5, 6, 7]], [\n      ,\n      ,\n      \"20(?:(?:240|30[67])\\\\d|6(?:00[0-2]|30[0-4]))\\\\d{3}|(?:20(?:[017]\\\\d|2[5-9]|32|5[0-4]|6[15-9])|[34]\\\\d{3})\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"312345678\",\n      ,\n      ,\n      ,\n      [5, 6, 7]\n    ], [, , \"726[01]\\\\d{5}|7(?:[01578]\\\\d|20|36|[46][0-4]|9[89])\\\\d{6}\", , , , \"712345678\"], [, , \"800[1-3]\\\\d{5}\", , , , \"800123456\"], [, , \"90[1-3]\\\\d{6}\", , , , \"901123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"UG\", 256, \"00[057]\", \"0\", , , \"0\", , , , [[, \"(\\\\d{4})(\\\\d{5})\", \"$1 $2\", [\"202\", \"2024\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{6})\", \"$1 $2\", [\"[27-9]|4(?:6[45]|[7-9])\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[34]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    US: [, [\n      ,\n      ,\n      \"[2-9]\\\\d{9}|3\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [10],\n      [7]\n    ], [\n      ,\n      ,\n      \"(?:47220[01]|5(?:05(?:[2-57-9]\\\\d\\\\d|6(?:[0-35-9]\\\\d|4[46]))|57200))\\\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"2015550123\",\n      ,\n      ,\n      ,\n      [7]\n    ], [\n      ,\n      ,\n      \"(?:47220[01]|5(?:05(?:[2-57-9]\\\\d\\\\d|6(?:[0-35-9]\\\\d|4[46]))|57200))\\\\d{4}|(?:2(?:0[1-35-9]|1[02-9]|2[03-589]|3[149]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[01356]|3[0-24679]|4[167]|5[0-2]|6[014]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-47-9]|1[0235-8]|20|3[0149]|4[01]|5[19]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|[34][016]|5[01679]|6[0-279]|78|8[0-29])|7(?:0[1-46-8]|1[2-9]|2[04-7]|3[1247]|4[037]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[068]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-389]|8[04-69]))[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"2015550123\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"US\", 1, \"011\", \"1\", , , \"1\", , , 1, [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"310\"], , , 1], [\n      ,\n      \"(\\\\d{3})(\\\\d{4})\",\n      \"$1-$2\",\n      [\"[24-9]|3(?:[02-9]|1[1-9])\"]\n    ], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"($1) $2-$3\", [\"[2-9]\"], , , 1]], [[, \"(\\\\d{3})(\\\\d{4})\", \"$1-$2\", [\"310\"], , , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1-$2-$3\", [\"[2-9]\"]]], [, , , , , , , , , [-1]], 1, , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UY: [, [, , \"(?:0004|4)\\\\d{9}|[1249]\\\\d{7}|(?:[49]\\\\d|80)\\\\d{5}\", , , , , , , [7, 8, 10, 13]], [, , \"(?:1(?:770|987)|(?:2\\\\d|4[2-7])\\\\d\\\\d)\\\\d{4}\", , , , \"21231234\", , , [8], [7]], [, , \"9[1-9]\\\\d{6}\", , , , \"94231234\", , , [8]], [\n      ,\n      ,\n      \"(?:(?:0004|4)\\\\d{5}|80[05])\\\\d{4}|405\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"8001234\",\n      ,\n      ,\n      [7, 10, 13]\n    ], [, , \"90[0-8]\\\\d{4}\", , , , \"9001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"UY\", 598, \"0(?:0|1[3-9]\\\\d)\", \"0\", \" int. \", , \"0\", , \"00\", , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"405|8|90\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"9\"], \"0$1\"], [, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[124]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"4\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3 $4\", [\"0\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    UZ: [, [\n      ,\n      ,\n      \"(?:33|[5-79]\\\\d|88)\\\\d{7}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9]\n    ], [, , \"(?:55\\\\d\\\\d|6(?:1(?:22|3[124]|4[1-4]|5[1-3578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\\\d\\\\d|7(?:[23]\\\\d|7[69])|9(?:22|4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[124-6]|9[135-8])|(?:1[12]|8\\\\d)\\\\d|2(?:22|3[13-57-9]|4[1-3579]|5[14])|3(?:2\\\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\\\d{5}\", , , , \"669050123\"], [\n      ,\n      ,\n      \"(?:(?:33|50|88|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079]))|9(?:2(?:1[1267]|3[01]|5\\\\d|7[0-4])|(?:5[67]|7\\\\d)\\\\d|6(?:2[0-26]|8\\\\d)))|7(?:[07]\\\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\\\d|41[179]|5(?:[349]\\\\d|5[0-2])|7(?:0[017]|[13]\\\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"912345678\"\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"UZ\", 998, \"810\", \"8\", , , \"8\", , \"8~10\", , [[, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[35-9]\"], \"8 $1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VA: [, [, , \"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\", , , , , , , [6, 7, 8, 9, 10, 11, 12]], [, , \"06698\\\\d{1,6}\", , , , \"0669812345\", , , [6, 7, 8, 9, 10, 11]], [, , \"3[1-9]\\\\d{8}|3[2-9]\\\\d{7}\", , , , \"3123456789\", , , [9, 10]], [\n      ,\n      ,\n      \"80(?:0\\\\d{3}|3)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"800123456\",\n      ,\n      ,\n      [6, 9]\n    ], [, , \"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\", , , , \"899123456\", , , [6, 8, 9, 10]], [, , \"84(?:[08]\\\\d{3}|[17])\\\\d{3}\", , , , \"848123456\", , , [6, 9]], [, , \"1(?:78\\\\d|99)\\\\d{6}\", , , , \"1781234567\", , , [9, 10]], [, , \"55\\\\d{8}\", , , , \"5512345678\", , , [10]], \"VA\", 39, \"00\", , , , , , , , , , [, , , , , , , , , [-1]], , \"06698\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"3[2-8]\\\\d{9,10}\", , , , \"33101234501\", , , [11, 12]]],\n    VC: [\n      ,\n      [, , \"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\", , , , , , , [10], [7]],\n      [, , \"784(?:266|3(?:6[6-9]|7\\\\d|8[0-6])|4(?:38|5[0-36-8]|8[0-8])|5(?:55|7[0-2]|93)|638|784)\\\\d{4}\", , , , \"7842661234\", , , , [7]],\n      [, , \"784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}\", , , , \"7844301234\", , , , [7]],\n      [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"],\n      [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"],\n      [, , , , , , , , , [-1]],\n      [\n        ,\n        ,\n        \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n        ,\n        ,\n        ,\n        \"5002345678\"\n      ],\n      [, , \"78451[0-2]\\\\d{4}\", , , , \"7845101234\", , , , [7]],\n      \"VC\",\n      1,\n      \"011\",\n      \"1\",\n      ,\n      ,\n      \"([2-7]\\\\d{6})$|1\",\n      \"784$1\",\n      ,\n      ,\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      \"784\",\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    VE: [\n      ,\n      [, , \"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\", , , , , , , [10], [7]],\n      [, , \"(?:2(?:12|3[457-9]|[467]\\\\d|[58][1-9]|9[1-6])|[4-6]00)\\\\d{7}\", , , , \"2121234567\", , , , [7]],\n      [, , \"4(?:1[24-8]|2[46])\\\\d{7}\", , , , \"4121234567\"],\n      [, , \"800\\\\d{7}\", , , , \"8001234567\"],\n      [, , \"90[01]\\\\d{7}\", , , , \"9001234567\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"VE\",\n      58,\n      \"00\",\n      \"0\",\n      ,\n      ,\n      \"0\",\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{7})\", \"$1-$2\", [\"[24-689]\"], \"0$1\", \"$CC $1\"]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"501\\\\d{7}\", , , , \"5010123456\", , , , [7]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    VG: [, [, , \"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\", , , , , , , [10], [7]], [, , \"284(?:229|4(?:22|9[45])|774|8(?:52|6[459]))\\\\d{4}\", , , , \"2842291234\", , , , [7]], [, , \"284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}\", , , , \"2843001234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [\n      ,\n      ,\n      \"900[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"9002345678\"\n    ], [, , , , , , , , , [-1]], [, , \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\", , , , \"5002345678\"], [, , , , , , , , , [-1]], \"VG\", 1, \"011\", \"1\", , , \"([2-578]\\\\d{6})$|1\", \"284$1\", , , , , [, , , , , , , , , [-1]], , \"284\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VI: [, [, , \"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\", , , , , , , [10], [7]], [\n      ,\n      ,\n      \"340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"3406421234\",\n      ,\n      ,\n      ,\n      [7]\n    ], [, , \"340(?:2(?:0[0-368]|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}\", , , , \"3406421234\", , , , [7]], [, , \"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\", , , , \"8002345678\"], [, , \"900[2-9]\\\\d{6}\", , , , \"9002345678\"], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|33|44|66|77|88)[2-9]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"5002345678\"\n    ], [, , , , , , , , , [-1]], \"VI\", 1, \"011\", \"1\", , , \"([2-9]\\\\d{6})$|1\", \"340$1\", , 1, , , [, , , , , , , , , [-1]], , \"340\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    VN: [, [, , \"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\", , , , , , , [7, 8, 9, 10]], [, , \"2(?:0[3-9]|1[0-689]|2[0-25-9]|[38][2-9]|4[2-8]|5[124-9]|6[0-39]|7[0-7]|9[0-4679])\\\\d{7}\", , , , \"2101234567\", , , [10]], [, , \"(?:5(?:2[238]|59)|89[6-9]|99[013-9])\\\\d{6}|(?:3\\\\d|5[689]|7[06-9]|8[1-8]|9[0-8])\\\\d{7}\", , , , \"912345678\", , , [9]], [\n      ,\n      ,\n      \"1800\\\\d{4,6}|12(?:0[13]|28)\\\\d{4}\",\n      ,\n      ,\n      ,\n      \"1800123456\",\n      ,\n      ,\n      [8, 9, 10]\n    ], [, , \"1900\\\\d{4,6}\", , , , \"1900123456\", , , [8, 9, 10]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"672\\\\d{6}\", , , , \"672012345\", , , [9]], \"VN\", 84, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[17]99\"], \"0$1\", , 1], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"80\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{4,5})\", \"$1 $2\", [\"69\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{4,6})\", \"$1 $2\", [\"1\"], , , 1], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[69]\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[3578]\"], \"0$1\", , 1], [\n      ,\n      \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"2[48]\"],\n      \"0$1\",\n      ,\n      1\n    ], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\", , 1]], [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"80\"], \"0$1\", , 1], [, \"(\\\\d{4})(\\\\d{4,6})\", \"$1 $2\", [\"1\"], , , 1], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"[69]\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[3578]\"], \"0$1\", , 1], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"2[48]\"], \"0$1\", , 1], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"2\"], \"0$1\", , 1]], [, , , , , , , , , [-1]], , , [, , \"[17]99\\\\d{4}|69\\\\d{5,6}\", , , , , , , [7, 8]], [\n      ,\n      ,\n      \"(?:[17]99|80\\\\d)\\\\d{4}|69\\\\d{5,6}\",\n      ,\n      ,\n      ,\n      \"1992000\",\n      ,\n      ,\n      [7, 8]\n    ], , , [, , , , , , , , , [-1]]],\n    VU: [\n      ,\n      [, , \"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\", , , , , , , [5, 7]],\n      [, , \"(?:38[0-8]|48[4-9])\\\\d\\\\d|(?:2[02-9]|3[4-7]|88)\\\\d{3}\", , , , \"22123\", , , [5]],\n      [, , \"(?:[58]\\\\d|7[013-7])\\\\d{5}\", , , , \"5912345\", , , [7]],\n      [, , \"81[18]\\\\d\\\\d\", , , , \"81123\", , , [5]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"9(?:0[1-9]|1[01])\\\\d{4}\", , , , \"9010123\", , , [7]],\n      \"VU\",\n      678,\n      \"00\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [[, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"[57-9]\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , \"(?:3[03]|900\\\\d)\\\\d{3}\", , , , \"30123\"],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    WF: [, [, , \"(?:40|72)\\\\d{4}|8\\\\d{5}(?:\\\\d{3})?\", , , , , , , [6, 9]], [, , \"72\\\\d{4}\", , , , \"721234\", , , [6]], [, , \"(?:72|8[23])\\\\d{4}\", , , , \"821234\", , , [6]], [, , \"80[0-5]\\\\d{6}\", , , , \"800012345\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"WF\", 681, \"00\", , , , , , , , [[, \"(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3\", [\"[478]\"]], [, \"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\", \"$1 $2 $3 $4\", [\"8\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"[48]0\\\\d{4}\", , , , \"401234\", , , [6]]],\n    WS: [, [\n      ,\n      ,\n      \"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [5, 6, 7, 10]\n    ], [, , \"6[1-9]\\\\d{3}|(?:[2-5]|60)\\\\d{4}\", , , , \"22123\", , , [5, 6]], [, , \"(?:7[1-35-7]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}\", , , , \"7212345\", , , [7, 10]], [, , \"800\\\\d{3}\", , , , \"800123\", , , [6]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"WS\", 685, \"0\", , , , , , , , [[, \"(\\\\d{5})\", \"$1\", [\"[2-5]|6[1-9]\"]], [, \"(\\\\d{3})(\\\\d{3,7})\", \"$1 $2\", [\"[68]\"]], [, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"7\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    XK: [, [, , \"[23]\\\\d{7,8}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\", , , , , , , [\n      8,\n      9\n    ]], [, , \"(?:2[89]|39)0\\\\d{6}|[23][89]\\\\d{6}\", , , , \"28012345\"], [, , \"4[3-9]\\\\d{6}\", , , , \"43201234\", , , [8]], [, , \"800\\\\d{5}\", , , , \"80001234\", , , [8]], [, , \"900\\\\d{5}\", , , , \"90001234\", , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"XK\", 383, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{5})\", \"$1 $2\", [\"[89]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[2-4]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[23]\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    YE: [, [\n      ,\n      ,\n      \"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [7, 8, 9],\n      [6]\n    ], [, , \"78[0-7]\\\\d{4}|17\\\\d{6}|(?:[12][2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-6])\\\\d{5}\", , , , \"1234567\", , , [7, 8], [6]], [, , \"7[01378]\\\\d{7}\", , , , \"712345678\", , , [9]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"YE\", 967, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"[1-6]|7(?:[24-6]|8[0-7])\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"7\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    YT: [, [\n      ,\n      ,\n      \"(?:(?:(?:26|63)9|80\\\\d)\\\\d\\\\d|93980)\\\\d{4}\",\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [9]\n    ], [, , \"269(?:0[0-467]|5[0-3]|6\\\\d|[78]0)\\\\d{4}\", , , , \"269601234\"], [, , \"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|93980)\\\\d{4}\", , , , \"639012345\"], [, , \"80\\\\d{7}\", , , , \"801234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"YT\", 262, \"00\", \"0\", , , \"0\", , , , , , [, , , , , , , , , [-1]], , \"269|63|9398\", [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    ZA: [, [, , \"[1-79]\\\\d{8}|8\\\\d{4,9}\", , , , , , , [5, 6, 7, 8, 9, 10]], [\n      ,\n      ,\n      \"(?:2(?:0330|4302)|52087)0\\\\d{3}|(?:1[0-8]|2[1-378]|3[1-69]|4\\\\d|5[1346-8])\\\\d{7}\",\n      ,\n      ,\n      ,\n      \"101234567\",\n      ,\n      ,\n      [9]\n    ], [, , \"(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:6\\\\d|7[0-46-9])\\\\d{3}|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}\", , , , \"711234567\", , , [5, 6, 7, 8, 9]], [, , \"80\\\\d{7}\", , , , \"801234567\", , , [9]], [, , \"(?:86[2-9]|9[0-2]\\\\d)\\\\d{6}\", , , , \"862345678\", , , [9]], [, , \"860\\\\d{6}\", , , , \"860123456\", , , [9]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"87(?:08[0-589]|15[0-79]|28[0-4]|31[1-9])\\\\d{4}|87(?:[02][0-79]|1[0-46-9]|3[02-9]|[4-9]\\\\d)\\\\d{5}\",\n      ,\n      ,\n      ,\n      \"871234567\",\n      ,\n      ,\n      [9]\n    ], \"ZA\", 27, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{2})(\\\\d{3,4})\", \"$1 $2\", [\"8[1-4]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\", \"$1 $2 $3\", [\"8[1-4]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"860\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"[1-9]\"], \"0$1\"], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"8\"], \"0$1\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"861\\\\d{6,7}\", , , , \"861123456\", , , [9, 10]], , , [, , , , , , , , , [-1]]],\n    ZM: [, [, , \"800\\\\d{6}|(?:21|63|[79]\\\\d)\\\\d{7}\", , , , , , , [9], [6]], [\n      ,\n      ,\n      \"21[1-8]\\\\d{6}\",\n      ,\n      ,\n      ,\n      \"211234567\",\n      ,\n      ,\n      ,\n      [6]\n    ], [, , \"(?:7[5-79]|9[5-8])\\\\d{7}\", , , , \"955123456\"], [, , \"800\\\\d{6}\", , , , \"800123456\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"63\\\\d{7}\", , , , \"630123456\"], \"ZM\", 260, \"00\", \"0\", , , \"0\", , , , [[, \"(\\\\d{3})(\\\\d{3})\", \"$1 $2\", [\"[1-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[28]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[79]\"], \"0$1\"]], [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[28]\"], \"0$1\"], [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"[79]\"], \"0$1\"]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ]],\n    ZW: [, [, , \"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\", , , , , , , [5, 6, 7, 8, 9, 10], [3, 4]], [\n      ,\n      ,\n      \"(?:1(?:(?:3\\\\d|9)\\\\d|[4-8])|2(?:(?:(?:0(?:2[014]|5)|(?:2[0157]|31|84|9)\\\\d\\\\d|[56](?:[14]\\\\d\\\\d|20)|7(?:[089]|2[03]|[35]\\\\d\\\\d))\\\\d|4(?:2\\\\d\\\\d|8))\\\\d|1(?:2|[39]\\\\d{4}))|3(?:(?:123|(?:29\\\\d|92)\\\\d)\\\\d\\\\d|7(?:[19]|[56]\\\\d))|5(?:0|1[2-478]|26|[37]2|4(?:2\\\\d{3}|83)|5(?:25\\\\d\\\\d|[78])|[689]\\\\d)|6(?:(?:[16-8]21|28|52[013])\\\\d\\\\d|[39])|8(?:[1349]28|523)\\\\d\\\\d)\\\\d{3}|(?:4\\\\d\\\\d|9[2-9])\\\\d{4,5}|(?:(?:2(?:(?:(?:0|8[146])\\\\d|7[1-7])\\\\d|2(?:[278]\\\\d|92)|58(?:2\\\\d|3))|3(?:[26]|9\\\\d{3})|5(?:4\\\\d|5)\\\\d\\\\d)\\\\d|6(?:(?:(?:[0-246]|[78]\\\\d)\\\\d|37)\\\\d|5[2-8]))\\\\d\\\\d|(?:2(?:[569]\\\\d|8[2-57-9])|3(?:[013-59]\\\\d|8[37])|6[89]8)\\\\d{3}\",\n      ,\n      ,\n      ,\n      \"1312345\",\n      ,\n      ,\n      ,\n      [3, 4]\n    ], [, , \"7(?:[178]\\\\d|3[1-9])\\\\d{6}\", , , , \"712345678\", , , [9]], [, , \"80(?:[01]\\\\d|20|8[0-8])\\\\d{3}\", , , , \"8001234\", , , [7]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"86(?:1[12]|22|30|44|55|77|8[368])\\\\d{6}\", , , , \"8686123456\", , , [10]], \"ZW\", 263, \"00\", \"0\", , , \"0\", , , , [\n      [, \"(\\\\d{3})(\\\\d{3,5})\", \"$1 $2\", [\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"], \"0$1\"],\n      [, \"(\\\\d)(\\\\d{3})(\\\\d{2,4})\", \"$1 $2 $3\", [\"[49]\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{4})\", \"$1 $2\", [\"80\"], \"0$1\"],\n      [, \"(\\\\d{2})(\\\\d{7})\", \"$1 $2\", [\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\", \"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"], \"(0$1)\"],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"7\"], \"0$1\"],\n      [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\", \"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{6})\", \"$1 $2\", [\"8\"], \"0$1\"],\n      [\n        ,\n        \"(\\\\d{2})(\\\\d{3,5})\",\n        \"$1 $2\",\n        [\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\n        \"0$1\"\n      ],\n      [, \"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\", \"$1 $2 $3\", [\"29[013-9]|39|54\"], \"0$1\"],\n      [, \"(\\\\d{4})(\\\\d{3,5})\", \"$1 $2\", [\"(?:25|54)8\", \"258|5483\"], \"0$1\"]\n    ], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    800: [\n      ,\n      [, , \"(?:00|[1-9]\\\\d)\\\\d{6}\", , , , , , , [8]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , \"(?:00|[1-9]\\\\d)\\\\d{6}\", , , , \"12345678\"],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      \"001\",\n      800,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      1,\n      [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"\\\\d\"]]],\n      ,\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]],\n      [, , , , , , , , , [-1]],\n      ,\n      ,\n      [, , , , , , , , , [-1]]\n    ],\n    808: [, [, , \"[1-9]\\\\d{7}\", , , , , , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"[1-9]\\\\d{7}\", , , , \"12345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 808, , , , , , , , 1, [[, \"(\\\\d{4})(\\\\d{4})\", \"$1 $2\", [\"[1-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    870: [, [, , \"7\\\\d{11}|[35-7]\\\\d{8}\", , , , , , , [9, 12]], [, , , , , , , , , [-1]], [, , \"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\", , , , \"301234567\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], \"001\", 870, , , , , , , , , [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"[35-7]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    878: [, [, , \"10\\\\d{10}\", , , , , , , [12]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"10\\\\d{10}\", , , , \"101234567890\"], \"001\", 878, , , , , , , , 1, [[, \"(\\\\d{2})(\\\\d{5})(\\\\d{5})\", \"$1 $2 $3\", [\"1\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    881: [, [, , \"[0-36-9]\\\\d{8}\", , , , , , , [9]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , \"[0-36-9]\\\\d{8}\", , , , \"612345678\"], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 881, , , , , , , , , [[, \"(\\\\d)(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\", [\"[0-36-9]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    882: [, [, , \"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\", , , , , , , [7, 8, 9, 10, 11, 12]], [, , , , , , , , , [-1]], [, , \"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|50\\\\d{3})\\\\d{7}\", , , , \"3421234\", , , [7, 8, 9, 10, 12]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\", , , , \"390123456789\"], \"001\", 882, , , , , , , , , [[, \"(\\\\d{2})(\\\\d{5})\", \"$1 $2\", [\"16|342\"]], [, \"(\\\\d{2})(\\\\d{6})\", \"$1 $2\", [\"49\"]], [, \"(\\\\d{2})(\\\\d{2})(\\\\d{4})\", \"$1 $2 $3\", [\"1[36]|9\"]], [, \"(\\\\d{2})(\\\\d{4})(\\\\d{3})\", \"$1 $2 $3\", [\"3[23]\"]], [, \"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\", \"$1 $2 $3\", [\"16\"]], [\n      ,\n      \"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n      \"$1 $2 $3\",\n      [\"10|23|3(?:[15]|4[57])|4|51\"]\n    ], [, \"(\\\\d{3})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"34\"]], [, \"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\", \"$1 $2 $3\", [\"[1-35]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , \"348[57]\\\\d{7}\", , , , \"34851234567\", , , [11]]],\n    883: [, [, , \"(?:[1-4]\\\\d|51)\\\\d{6,10}\", , , , , , , [8, 9, 10, 11, 12]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      \"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[013-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\",\n      ,\n      ,\n      ,\n      \"510012345\"\n    ], \"001\", 883, , , , , , , , 1, [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\", \"$1 $2 $3\", [\"[14]|2[24-689]|3[02-689]|51[24-9]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3\", [\"510\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{4})\", \"$1 $2 $3\", [\"21\"]], [, \"(\\\\d{4})(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"51[13]\"]], [, \"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\", \"$1 $2 $3 $4\", [\"[235]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]],\n    888: [, [, , \"\\\\d{11}\", , , , , , , [11]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      ,\n      [-1]\n    ], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 888, , , , , , , , 1, [[, \"(\\\\d{3})(\\\\d{3})(\\\\d{5})\", \"$1 $2 $3\"]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , \"\\\\d{11}\", , , , \"12345678901\"], , , [, , , , , , , , , [-1]]],\n    979: [, [, , \"[1359]\\\\d{8}\", , , , , , , [9], [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , \"[1359]\\\\d{8}\", , , , \"123456789\", , , , [8]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], \"001\", 979, , , , , , , , 1, [[, \"(\\\\d)(\\\\d{4})(\\\\d{4})\", \"$1 $2 $3\", [\"[1359]\"]]], , [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]], [, , , , , , , , , [-1]], , , [, , , , , , , , , [-1]]]\n  };\n  function K() {\n    this.g = {};\n  }\n  K.i = void 0;\n  K.g = function() {\n    return K.i ? K.i : K.i = new K();\n  };\n  var wa = { 0: \"0\", 1: \"1\", 2: \"2\", 3: \"3\", 4: \"4\", 5: \"5\", 6: \"6\", 7: \"7\", 8: \"8\", 9: \"9\", \"0\": \"0\", \"1\": \"1\", \"2\": \"2\", \"3\": \"3\", \"4\": \"4\", \"5\": \"5\", \"6\": \"6\", \"7\": \"7\", \"8\": \"8\", \"9\": \"9\", \"٠\": \"0\", \"١\": \"1\", \"٢\": \"2\", \"٣\": \"3\", \"٤\": \"4\", \"٥\": \"5\", \"٦\": \"6\", \"٧\": \"7\", \"٨\": \"8\", \"٩\": \"9\", \"۰\": \"0\", \"۱\": \"1\", \"۲\": \"2\", \"۳\": \"3\", \"۴\": \"4\", \"۵\": \"5\", \"۶\": \"6\", \"۷\": \"7\", \"۸\": \"8\", \"۹\": \"9\" }, xa = {\n    0: \"0\",\n    1: \"1\",\n    2: \"2\",\n    3: \"3\",\n    4: \"4\",\n    5: \"5\",\n    6: \"6\",\n    7: \"7\",\n    8: \"8\",\n    9: \"9\",\n    \"0\": \"0\",\n    \"1\": \"1\",\n    \"2\": \"2\",\n    \"3\": \"3\",\n    \"4\": \"4\",\n    \"5\": \"5\",\n    \"6\": \"6\",\n    \"7\": \"7\",\n    \"8\": \"8\",\n    \"9\": \"9\",\n    \"٠\": \"0\",\n    \"١\": \"1\",\n    \"٢\": \"2\",\n    \"٣\": \"3\",\n    \"٤\": \"4\",\n    \"٥\": \"5\",\n    \"٦\": \"6\",\n    \"٧\": \"7\",\n    \"٨\": \"8\",\n    \"٩\": \"9\",\n    \"۰\": \"0\",\n    \"۱\": \"1\",\n    \"۲\": \"2\",\n    \"۳\": \"3\",\n    \"۴\": \"4\",\n    \"۵\": \"5\",\n    \"۶\": \"6\",\n    \"۷\": \"7\",\n    \"۸\": \"8\",\n    \"۹\": \"9\",\n    A: \"2\",\n    B: \"2\",\n    C: \"2\",\n    D: \"3\",\n    E: \"3\",\n    F: \"3\",\n    G: \"4\",\n    H: \"4\",\n    I: \"4\",\n    J: \"5\",\n    K: \"5\",\n    L: \"5\",\n    M: \"6\",\n    N: \"6\",\n    O: \"6\",\n    P: \"7\",\n    Q: \"7\",\n    R: \"7\",\n    S: \"7\",\n    T: \"8\",\n    U: \"8\",\n    V: \"8\",\n    W: \"9\",\n    X: \"9\",\n    Y: \"9\",\n    Z: \"9\"\n  }, L = /^[+\\uff0b]+/, ya = /([0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9])/, za = /[+\\uff0b0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]/, Aa = /[\\\\\\/] *x/, Ba = /[^0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9A-Za-z#]+$/, Ca = /(?:.*?[A-Za-z]){3}.*/;\n  function N(a) {\n    return \"([0-90-9٠-٩۰-۹]{1,\" + a + \"})\";\n  }\n  function Da() {\n    return \";ext=\" + N(\"20\") + \"|[  \\\\t,]*(?:e?xt(?:ensi(?:ó?|ó))?n?|e?xtn?|доб|anexo)[:\\\\..]?[  \\\\t,-]*\" + (N(\"20\") + \"#?|[  \\\\t,]*(?:[xx##~~]|int|int)[:\\\\..]?[  \\\\t,-]*\") + (N(\"9\") + \"#?|[- ]+\") + (N(\"6\") + \"#|[  \\\\t]*(?:,{2}|;)[:\\\\..]?[  \\\\t,-]*\") + (N(\"15\") + \"#?|[  \\\\t]*(?:,)+[:\\\\..]?[  \\\\t,-]*\") + (N(\"9\") + \"#?\");\n  }\n  var Ea = new RegExp(\"(?:\" + Da() + \")$\", \"i\"), Fa = new RegExp(\"^[0-90-9٠-٩۰-۹]{2}$|^[++]*(?:[-x‐-―−ー--/  ­​⁠ ()()[].\\\\[\\\\]/~⁓∼~*]*[0-90-9٠-٩۰-۹]){3,}[-x‐-―−ー--/  ­​⁠ ()()[].\\\\[\\\\]/~⁓∼~*A-Za-z0-90-9٠-٩۰-۹]*(?:\" + Da() + \")?$\", \"i\"), Ga = /(\\$\\d)/;\n  function Ha(a) {\n    return 2 > a.length ? false : O(Fa, a);\n  }\n  function Ia(a) {\n    return O(Ca, a) ? P(a, xa) : P(a, wa);\n  }\n  function Ja(a) {\n    var b = Ia(a.toString());\n    a.i = \"\";\n    a.g(b);\n  }\n  function Ka(a) {\n    return null != a && (1 != x(a, 9) || -1 != u(a, 9)[0]);\n  }\n  function P(a, b) {\n    for (var c = new E(), d, e = a.length, g = 0; g < e; ++g)\n      d = a.charAt(g), d = b[d.toUpperCase()], null != d && c.g(d);\n    return c.toString();\n  }\n  function Q(a) {\n    return null != a && isNaN(a) && a.toUpperCase() in va;\n  }\n  function La(a, b, c) {\n    if (0 == p(b, 2) && null != b.g[5]) {\n      var d = w(b, 5);\n      if (0 < d.length)\n        return d;\n    }\n    d = w(b, 1);\n    var e = R(b);\n    if (0 == c)\n      return Ma(d, 0, e, \"\");\n    if (!(d in J))\n      return e;\n    a = S(a, d, T(d));\n    b = null != b.g[3] && 0 != p(b, 3).length ? 3 == c ? \";ext=\" + p(b, 3) : null != a.g[13] ? p(a, 13) + w(b, 3) : \" ext. \" + w(b, 3) : \"\";\n    a: {\n      a = 0 == u(a, 20).length || 2 == c ? u(a, 19) : u(a, 20);\n      for (var g, f = a.length, h = 0; h < f; ++h) {\n        g = a[h];\n        var l = x(g, 3);\n        if (0 == l || 0 == e.search(p(g, 3, l - 1))) {\n          if (l = new RegExp(p(g, 1)), O(l, e)) {\n            a = g;\n            break a;\n          }\n        }\n      }\n      a = null;\n    }\n    null != a && (f = a, a = w(f, 2), g = new RegExp(p(f, 1)), w(f, 5), f = w(f, 4), e = 2 == c && null != f && 0 < f.length ? e.replace(g, a.replace(Ga, f)) : e.replace(g, a), 3 == c && (e = e.replace(/^[-x\\u2010-\\u2015\\u2212\\u30fc\\uff0d-\\uff0f \\u00a0\\u00ad\\u200b\\u2060\\u3000()\\uff08\\uff09\\uff3b\\uff3d.\\[\\]/~\\u2053\\u223c\\uff5e]+/, \"\"), e = e.replace(/[-x\\u2010-\\u2015\\u2212\\u30fc\\uff0d-\\uff0f \\u00a0\\u00ad\\u200b\\u2060\\u3000()\\uff08\\uff09\\uff3b\\uff3d.\\[\\]/~\\u2053\\u223c\\uff5e]+/g, \"-\")));\n    return Ma(d, c, e, b);\n  }\n  function S(a, b, c) {\n    return \"001\" == c ? U(a, \"\" + b) : U(a, c);\n  }\n  function R(a) {\n    if (null == a.g[2])\n      return \"\";\n    var b = \"\" + p(a, 2);\n    return null != a.g[4] && p(a, 4) && 0 < w(a, 8) ? Array(w(a, 8) + 1).join(\"0\") + b : b;\n  }\n  function Ma(a, b, c, d) {\n    switch (b) {\n      case 0:\n        return \"+\" + a + c + d;\n      case 1:\n        return \"+\" + a + \" \" + c + d;\n      case 3:\n        return \"tel:+\" + a + \"-\" + c + d;\n      default:\n        return c + d;\n    }\n  }\n  function V(a, b) {\n    switch (b) {\n      case 4:\n        return p(a, 5);\n      case 3:\n        return p(a, 4);\n      case 1:\n        return p(a, 3);\n      case 0:\n      case 2:\n        return p(a, 2);\n      case 5:\n        return p(a, 6);\n      case 6:\n        return p(a, 8);\n      case 7:\n        return p(a, 7);\n      case 8:\n        return p(a, 21);\n      case 9:\n        return p(a, 25);\n      case 10:\n        return p(a, 28);\n      default:\n        return p(a, 1);\n    }\n  }\n  function W(a, b) {\n    return X(a, p(b, 1)) ? X(a, p(b, 5)) ? 4 : X(a, p(b, 4)) ? 3 : X(a, p(b, 6)) ? 5 : X(a, p(b, 8)) ? 6 : X(a, p(b, 7)) ? 7 : X(a, p(b, 21)) ? 8 : X(a, p(b, 25)) ? 9 : X(a, p(b, 28)) ? 10 : X(a, p(b, 2)) ? p(b, 18) || X(a, p(b, 3)) ? 2 : 0 : !p(b, 18) && X(a, p(b, 3)) ? 1 : -1 : -1;\n  }\n  function U(a, b) {\n    if (null == b)\n      return null;\n    b = b.toUpperCase();\n    var c = a.g[b];\n    if (null == c) {\n      c = va[b];\n      if (null == c)\n        return null;\n      c = new D().g(H.j(), c);\n      a.g[b] = c;\n    }\n    return c;\n  }\n  function X(a, b) {\n    var c = a.length;\n    return 0 < x(b, 9) && -1 == u(b, 9).indexOf(c) ? false : O(w(b, 2), a);\n  }\n  function Na(a, b) {\n    if (null == b)\n      return null;\n    var c = w(b, 1);\n    c = J[c];\n    if (null == c)\n      a = null;\n    else if (1 == c.length)\n      a = c[0];\n    else\n      a: {\n        b = R(b);\n        for (var d, e = c.length, g = 0; g < e; g++) {\n          d = c[g];\n          var f = U(a, d);\n          if (null != f.g[23]) {\n            if (0 == b.search(p(f, 23))) {\n              a = d;\n              break a;\n            }\n          } else if (-1 != W(b, f)) {\n            a = d;\n            break a;\n          }\n        }\n        a = null;\n      }\n    return a;\n  }\n  function T(a) {\n    a = J[a];\n    return null == a ? \"ZZ\" : a[0];\n  }\n  function Y(a, b, c, d) {\n    var e = V(c, d), g = 0 == x(e, 9) ? u(p(c, 1), 9) : u(e, 9);\n    e = u(e, 10);\n    if (2 == d)\n      if (Ka(V(c, 0)))\n        a = V(c, 1), Ka(a) && (g = g.concat(0 == x(a, 9) ? u(p(c, 1), 9) : u(a, 9)), g.sort(), 0 == e.length ? e = u(a, 10) : (e = e.concat(u(a, 10)), e.sort()));\n      else\n        return Y(a, b, c, 1);\n    if (-1 == g[0])\n      return 5;\n    b = b.length;\n    if (-1 < e.indexOf(b))\n      return 4;\n    c = g[0];\n    return c == b ? 0 : c > b ? 2 : g[g.length - 1] < b ? 3 : -1 < g.indexOf(b, 1) ? 0 : 5;\n  }\n  function Oa(a, b) {\n    var c = R(b);\n    b = w(b, 1);\n    if (!(b in J))\n      return 1;\n    b = S(a, b, T(b));\n    return Y(a, c, b, -1);\n  }\n  function Pa(a, b, c, d, e, g) {\n    if (0 == b.length)\n      return 0;\n    b = new E(b);\n    var f;\n    null != c && (f = p(c, 11));\n    null == f && (f = \"NonMatch\");\n    var h = b.toString();\n    if (0 == h.length)\n      f = 20;\n    else if (L.test(h))\n      h = h.replace(L, \"\"), b.i = \"\", b.g(Ia(h)), f = 1;\n    else {\n      h = new RegExp(f);\n      Ja(b);\n      f = b.toString();\n      if (0 == f.search(h)) {\n        h = f.match(h)[0].length;\n        var l = f.substring(h).match(ya);\n        l && null != l[1] && 0 < l[1].length && \"0\" == P(l[1], wa) ? f = false : (b.i = \"\", b.g(f.substring(h)), f = true);\n      } else\n        f = false;\n      f = f ? 5 : 20;\n    }\n    e && q(g, 6, f);\n    if (20 != f) {\n      if (2 >= b.i.length)\n        throw Error(\"Phone number too short after IDD\");\n      a: {\n        a = b.toString();\n        if (0 != a.length && \"0\" != a.charAt(0)) {\n          for (e = a.length, b = 1; 3 >= b && b <= e; ++b)\n            if (c = parseInt(a.substring(0, b), 10), c in J) {\n              d.g(a.substring(b));\n              d = c;\n              break a;\n            }\n        }\n        d = 0;\n      }\n      if (0 != d)\n        return q(g, 1, d), d;\n      throw Error(\"Invalid country calling code\");\n    }\n    if (null != c && (f = w(c, 10), h = \"\" + f, l = b.toString(), 0 == l.lastIndexOf(h, 0) && (h = new E(l.substring(h.length)), l = p(c, 1), l = new RegExp(w(l, 2)), Qa(h, c, null), h = h.toString(), !O(l, b.toString()) && O(l, h) || 3 == Y(a, b.toString(), c, -1))))\n      return d.g(h), e && q(g, 6, 10), q(g, 1, f), f;\n    q(g, 1, 0);\n    return 0;\n  }\n  function Qa(a, b, c) {\n    var d = a.toString(), e = d.length, g = p(b, 15);\n    if (0 != e && null != g && 0 != g.length) {\n      var f = new RegExp(\"^(?:\" + g + \")\");\n      if (e = f.exec(d)) {\n        g = new RegExp(w(p(b, 1), 2));\n        var h = O(g, d), l = e.length - 1;\n        b = p(b, 16);\n        if (null == b || 0 == b.length || null == e[l] || 0 == e[l].length) {\n          if (!h || O(g, d.substring(e[0].length)))\n            null != c && 0 < l && null != e[l] && c.g(e[1]), a.set(d.substring(e[0].length));\n        } else if (d = d.replace(f, b), !h || O(g, d))\n          null != c && 0 < l && c.g(e[1]), a.set(d);\n      }\n    }\n  }\n  function Z(a, b, c) {\n    if (!Q(c) && 0 < b.length && \"+\" != b.charAt(0))\n      throw Error(\"Invalid country calling code\");\n    return Ra(a, b, c, true);\n  }\n  function Ra(a, b, c, d) {\n    if (null == b)\n      throw Error(\"The string supplied did not seem to be a phone number\");\n    if (250 < b.length)\n      throw Error(\"The string supplied is too long to be a phone number\");\n    var e = new E(), g = b.indexOf(\";phone-context=\");\n    if (0 <= g) {\n      var f = g + 15;\n      if (\"+\" == b.charAt(f)) {\n        var h = b.indexOf(\";\", f);\n        0 < h ? e.g(b.substring(f, h)) : e.g(b.substring(f));\n      }\n      f = b.indexOf(\"tel:\");\n      e.g(b.substring(0 <= f ? f + 4 : 0, g));\n    } else\n      g = e.g, f = b.search(za), 0 <= f ? (f = b.substring(f), f = f.replace(Ba, \"\"), h = f.search(Aa), 0 <= h && (f = f.substring(0, h))) : f = \"\", g.call(e, f);\n    g = e.toString();\n    f = g.indexOf(\";isub=\");\n    0 < f && (e.i = \"\", e.g(g.substring(0, f)));\n    if (!Ha(e.toString()))\n      throw Error(\"The string supplied did not seem to be a phone number\");\n    g = e.toString();\n    if (!(Q(c) || null != g && 0 < g.length && L.test(g)))\n      throw Error(\"Invalid country calling code\");\n    g = new I();\n    d && q(g, 5, b);\n    a: {\n      b = e.toString();\n      f = b.search(Ea);\n      if (0 <= f && Ha(b.substring(0, f))) {\n        h = b.match(Ea);\n        for (var l = h.length, z = 1; z < l; ++z)\n          if (null != h[z] && 0 < h[z].length) {\n            e.i = \"\";\n            e.g(b.substring(0, f));\n            b = h[z];\n            break a;\n          }\n      }\n      b = \"\";\n    }\n    0 < b.length && q(g, 3, b);\n    f = U(a, c);\n    b = new E();\n    h = 0;\n    l = e.toString();\n    try {\n      h = Pa(a, l, f, b, d, g);\n    } catch (M) {\n      if (\"Invalid country calling code\" == M.message && L.test(l)) {\n        if (l = l.replace(L, \"\"), h = Pa(a, l, f, b, d, g), 0 == h)\n          throw M;\n      } else\n        throw M;\n    }\n    0 != h ? (e = T(h), e != c && (f = S(a, h, e))) : (Ja(e), b.g(e.toString()), null != c ? (h = w(f, 10), q(g, 1, h)) : d && (delete g.g[6], g.i && delete g.i[6]));\n    if (2 > b.i.length)\n      throw Error(\"The string supplied is too short to be a phone number\");\n    null != f && (c = new E(), e = new E(b.toString()), Qa(e, f, c), a = Y(a, e.toString(), f, -1), 2 != a && 4 != a && 5 != a && (b = e, d && 0 < c.toString().length && q(g, 7, c.toString())));\n    d = b.toString();\n    a = d.length;\n    if (2 > a)\n      throw Error(\"The string supplied is too short to be a phone number\");\n    if (17 < a)\n      throw Error(\"The string supplied is too long to be a phone number\");\n    if (1 < d.length && \"0\" == d.charAt(0)) {\n      q(g, 4, true);\n      for (a = 1; a < d.length - 1 && \"0\" == d.charAt(a); )\n        a++;\n      1 != a && q(g, 8, a);\n    }\n    q(g, 2, parseInt(d, 10));\n    return g;\n  }\n  function O(a, b) {\n    return (a = \"string\" == typeof a ? b.match(\"^(?:\" + a + \")$\") : b.match(a)) && a[0].length == b.length ? true : false;\n  }\n  ;\n  k(\"intlTelInputUtils\", {});\n  k(\"intlTelInputUtils.formatNumber\", function(a, b, c) {\n    try {\n      var d = K.g(), e = Z(d, a, b), g = Oa(d, e);\n      return 0 == g || 4 == g ? La(d, e, \"undefined\" == typeof c ? 0 : c) : a;\n    } catch (f) {\n      return a;\n    }\n  });\n  k(\"intlTelInputUtils.getExampleNumber\", function(a, b, c) {\n    try {\n      var d = K.g();\n      a: {\n        if (Q(a)) {\n          var e = V(U(d, a), c);\n          try {\n            if (null != e.g[6]) {\n              var g = p(e, 6);\n              var f = Ra(d, g, a, false);\n              break a;\n            }\n          } catch (h) {\n          }\n        }\n        f = null;\n      }\n      return La(d, f, b ? 2 : 1);\n    } catch (h) {\n      return \"\";\n    }\n  });\n  k(\"intlTelInputUtils.getExtension\", function(a, b) {\n    try {\n      return p(Z(K.g(), a, b), 3);\n    } catch (c) {\n      return \"\";\n    }\n  });\n  k(\"intlTelInputUtils.getNumberType\", function(a, b) {\n    try {\n      var c = K.g();\n      var d = Z(c, a, b), e = Na(c, d), g = S(c, w(d, 1), e);\n      if (null == g)\n        var f = -1;\n      else {\n        var h = R(d);\n        f = W(h, g);\n      }\n      return f;\n    } catch (l) {\n      return -99;\n    }\n  });\n  k(\"intlTelInputUtils.getValidationError\", function(a, b) {\n    try {\n      var c = K.g(), d = Z(c, a, b);\n      return Oa(c, d);\n    } catch (e) {\n      return \"Invalid country calling code\" == e.message ? 1 : \"Phone number too short after IDD\" == e.message || \"The string supplied is too short to be a phone number\" == e.message ? 2 : \"The string supplied is too long to be a phone number\" == e.message ? 3 : -99;\n    }\n  });\n  k(\"intlTelInputUtils.isValidNumber\", function(a, b) {\n    try {\n      var c = K.g(), d = Z(c, a, b);\n      var e = Na(c, d), g = w(d, 1), f = S(c, g, e), h;\n      if (!(h = null == f)) {\n        var l;\n        if (l = \"001\" != e) {\n          var z = U(c, e);\n          if (null == z)\n            throw Error(\"Invalid region code: \" + e);\n          var M = w(z, 10);\n          l = g != M;\n        }\n        h = l;\n      }\n      if (h)\n        var ua = false;\n      else {\n        var Sa = R(d);\n        ua = -1 != W(Sa, f);\n      }\n      return ua;\n    } catch (Ta) {\n      return false;\n    }\n  });\n  k(\"intlTelInputUtils.numberFormat\", { E164: 0, INTERNATIONAL: 1, NATIONAL: 2, RFC3966: 3 });\n  k(\"intlTelInputUtils.numberType\", { FIXED_LINE: 0, MOBILE: 1, FIXED_LINE_OR_MOBILE: 2, TOLL_FREE: 3, PREMIUM_RATE: 4, SHARED_COST: 5, VOIP: 6, PERSONAL_NUMBER: 7, PAGER: 8, UAN: 9, VOICEMAIL: 10, UNKNOWN: -1 });\n  k(\"intlTelInputUtils.validationError\", { IS_POSSIBLE: 0, INVALID_COUNTRY_CODE: 1, TOO_SHORT: 2, TOO_LONG: 3, IS_POSSIBLE_LOCAL_ONLY: 4, INVALID_LENGTH: 5 });\n})();\n//# sourceMappingURL=intl-tel-input_build_js_utils__js.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport \"intl-tel-input/build/css/intlTelInput.css\"\nimport intlTelInput from \"intl-tel-input\"\nimport \"intl-tel-input/build/js/utils.js\"\n\nexport default class extends Controller {\n  static targets = [ \"field\" ]\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  initPluginInstance() {\n    this.plugin = intlTelInput(this.fieldTarget, {\n      hiddenInput: this.fieldTarget.dataset.method,\n      utilsScript: \"intl-tel-input/build/js/utils.js\",\n      customContainer: \"w-full\"\n    });\n  }\n\n  teardownPluginInstance() {\n    if (this.plugin === undefined) { return }\n\n    // revert to original markup, remove any event listeners\n    this.plugin.destroy()\n  }\n}\n","import {\n  require_jquery\n} from \"./chunk-IL4DE2EU.js\";\nimport {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/jquery-validation/dist/jquery.validate.min.js\nvar require_jquery_validate_min = __commonJS({\n  \"node_modules/jquery-validation/dist/jquery.validate.min.js\"(exports, module) {\n    !function(a) {\n      \"function\" == typeof define && define.amd ? define([\"jquery\"], a) : \"object\" == typeof module && module.exports ? module.exports = a(require_jquery()) : a(jQuery);\n    }(function(a) {\n      a.extend(a.fn, { validate: function(b2) {\n        if (!this.length)\n          return void (b2 && b2.debug && window.console && console.warn(\"Nothing selected, can't validate, returning nothing.\"));\n        var c2 = a.data(this[0], \"validator\");\n        return c2 ? c2 : (this.attr(\"novalidate\", \"novalidate\"), c2 = new a.validator(b2, this[0]), a.data(this[0], \"validator\", c2), c2.settings.onsubmit && (this.on(\"click.validate\", \":submit\", function(b3) {\n          c2.submitButton = b3.currentTarget, a(this).hasClass(\"cancel\") && (c2.cancelSubmit = true), void 0 !== a(this).attr(\"formnovalidate\") && (c2.cancelSubmit = true);\n        }), this.on(\"submit.validate\", function(b3) {\n          function d2() {\n            var d3, e;\n            return c2.submitButton && (c2.settings.submitHandler || c2.formSubmitted) && (d3 = a(\"<input type='hidden'/>\").attr(\"name\", c2.submitButton.name).val(a(c2.submitButton).val()).appendTo(c2.currentForm)), !(c2.settings.submitHandler && !c2.settings.debug) || (e = c2.settings.submitHandler.call(c2, c2.currentForm, b3), d3 && d3.remove(), void 0 !== e && e);\n          }\n          return c2.settings.debug && b3.preventDefault(), c2.cancelSubmit ? (c2.cancelSubmit = false, d2()) : c2.form() ? c2.pendingRequest ? (c2.formSubmitted = true, false) : d2() : (c2.focusInvalid(), false);\n        })), c2);\n      }, valid: function() {\n        var b2, c2, d2;\n        return a(this[0]).is(\"form\") ? b2 = this.validate().form() : (d2 = [], b2 = true, c2 = a(this[0].form).validate(), this.each(function() {\n          b2 = c2.element(this) && b2, b2 || (d2 = d2.concat(c2.errorList));\n        }), c2.errorList = d2), b2;\n      }, rules: function(b2, c2) {\n        var d2, e, f, g, h, i, j = this[0], k = \"undefined\" != typeof this.attr(\"contenteditable\") && \"false\" !== this.attr(\"contenteditable\");\n        if (null != j && (!j.form && k && (j.form = this.closest(\"form\")[0], j.name = this.attr(\"name\")), null != j.form)) {\n          if (b2)\n            switch (d2 = a.data(j.form, \"validator\").settings, e = d2.rules, f = a.validator.staticRules(j), b2) {\n              case \"add\":\n                a.extend(f, a.validator.normalizeRule(c2)), delete f.messages, e[j.name] = f, c2.messages && (d2.messages[j.name] = a.extend(d2.messages[j.name], c2.messages));\n                break;\n              case \"remove\":\n                return c2 ? (i = {}, a.each(c2.split(/\\s/), function(a2, b3) {\n                  i[b3] = f[b3], delete f[b3];\n                }), i) : (delete e[j.name], f);\n            }\n          return g = a.validator.normalizeRules(a.extend({}, a.validator.classRules(j), a.validator.attributeRules(j), a.validator.dataRules(j), a.validator.staticRules(j)), j), g.required && (h = g.required, delete g.required, g = a.extend({ required: h }, g)), g.remote && (h = g.remote, delete g.remote, g = a.extend(g, { remote: h })), g;\n        }\n      } });\n      var b = function(a2) {\n        return a2.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\n      };\n      a.extend(a.expr.pseudos || a.expr[\":\"], { blank: function(c2) {\n        return !b(\"\" + a(c2).val());\n      }, filled: function(c2) {\n        var d2 = a(c2).val();\n        return null !== d2 && !!b(\"\" + d2);\n      }, unchecked: function(b2) {\n        return !a(b2).prop(\"checked\");\n      } }), a.validator = function(b2, c2) {\n        this.settings = a.extend(true, {}, a.validator.defaults, b2), this.currentForm = c2, this.init();\n      }, a.validator.format = function(b2, c2) {\n        return 1 === arguments.length ? function() {\n          var c3 = a.makeArray(arguments);\n          return c3.unshift(b2), a.validator.format.apply(this, c3);\n        } : void 0 === c2 ? b2 : (arguments.length > 2 && c2.constructor !== Array && (c2 = a.makeArray(arguments).slice(1)), c2.constructor !== Array && (c2 = [c2]), a.each(c2, function(a2, c3) {\n          b2 = b2.replace(new RegExp(\"\\\\{\" + a2 + \"\\\\}\", \"g\"), function() {\n            return c3;\n          });\n        }), b2);\n      }, a.extend(a.validator, { defaults: { messages: {}, groups: {}, rules: {}, errorClass: \"error\", pendingClass: \"pending\", validClass: \"valid\", errorElement: \"label\", focusCleanup: false, focusInvalid: true, errorContainer: a([]), errorLabelContainer: a([]), onsubmit: true, ignore: \":hidden\", ignoreTitle: false, onfocusin: function(a2) {\n        this.lastActive = a2, this.settings.focusCleanup && (this.settings.unhighlight && this.settings.unhighlight.call(this, a2, this.settings.errorClass, this.settings.validClass), this.hideThese(this.errorsFor(a2)));\n      }, onfocusout: function(a2) {\n        this.checkable(a2) || !(a2.name in this.submitted) && this.optional(a2) || this.element(a2);\n      }, onkeyup: function(b2, c2) {\n        var d2 = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n        9 === c2.which && \"\" === this.elementValue(b2) || a.inArray(c2.keyCode, d2) !== -1 || (b2.name in this.submitted || b2.name in this.invalid) && this.element(b2);\n      }, onclick: function(a2) {\n        a2.name in this.submitted ? this.element(a2) : a2.parentNode.name in this.submitted && this.element(a2.parentNode);\n      }, highlight: function(b2, c2, d2) {\n        \"radio\" === b2.type ? this.findByName(b2.name).addClass(c2).removeClass(d2) : a(b2).addClass(c2).removeClass(d2);\n      }, unhighlight: function(b2, c2, d2) {\n        \"radio\" === b2.type ? this.findByName(b2.name).removeClass(c2).addClass(d2) : a(b2).removeClass(c2).addClass(d2);\n      } }, setDefaults: function(b2) {\n        a.extend(a.validator.defaults, b2);\n      }, messages: { required: \"This field is required.\", remote: \"Please fix this field.\", email: \"Please enter a valid email address.\", url: \"Please enter a valid URL.\", date: \"Please enter a valid date.\", dateISO: \"Please enter a valid date (ISO).\", number: \"Please enter a valid number.\", digits: \"Please enter only digits.\", equalTo: \"Please enter the same value again.\", maxlength: a.validator.format(\"Please enter no more than {0} characters.\"), minlength: a.validator.format(\"Please enter at least {0} characters.\"), rangelength: a.validator.format(\"Please enter a value between {0} and {1} characters long.\"), range: a.validator.format(\"Please enter a value between {0} and {1}.\"), max: a.validator.format(\"Please enter a value less than or equal to {0}.\"), min: a.validator.format(\"Please enter a value greater than or equal to {0}.\"), step: a.validator.format(\"Please enter a multiple of {0}.\") }, autoCreateRanges: false, prototype: { init: function() {\n        function b2(b3) {\n          var c3 = \"undefined\" != typeof a(this).attr(\"contenteditable\") && \"false\" !== a(this).attr(\"contenteditable\");\n          if (!this.form && c3 && (this.form = a(this).closest(\"form\")[0], this.name = a(this).attr(\"name\")), d2 === this.form) {\n            var e2 = a.data(this.form, \"validator\"), f = \"on\" + b3.type.replace(/^validate/, \"\"), g = e2.settings;\n            g[f] && !a(this).is(g.ignore) && g[f].call(e2, this, b3);\n          }\n        }\n        this.labelContainer = a(this.settings.errorLabelContainer), this.errorContext = this.labelContainer.length && this.labelContainer || a(this.currentForm), this.containers = a(this.settings.errorContainer).add(this.settings.errorLabelContainer), this.submitted = {}, this.valueCache = {}, this.pendingRequest = 0, this.pending = {}, this.invalid = {}, this.reset();\n        var c2, d2 = this.currentForm, e = this.groups = {};\n        a.each(this.settings.groups, function(b3, c3) {\n          \"string\" == typeof c3 && (c3 = c3.split(/\\s/)), a.each(c3, function(a2, c4) {\n            e[c4] = b3;\n          });\n        }), c2 = this.settings.rules, a.each(c2, function(b3, d3) {\n          c2[b3] = a.validator.normalizeRule(d3);\n        }), a(this.currentForm).on(\"focusin.validate focusout.validate keyup.validate\", \":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']\", b2).on(\"click.validate\", \"select, option, [type='radio'], [type='checkbox']\", b2), this.settings.invalidHandler && a(this.currentForm).on(\"invalid-form.validate\", this.settings.invalidHandler);\n      }, form: function() {\n        return this.checkForm(), a.extend(this.submitted, this.errorMap), this.invalid = a.extend({}, this.errorMap), this.valid() || a(this.currentForm).triggerHandler(\"invalid-form\", [this]), this.showErrors(), this.valid();\n      }, checkForm: function() {\n        this.prepareForm();\n        for (var a2 = 0, b2 = this.currentElements = this.elements(); b2[a2]; a2++)\n          this.check(b2[a2]);\n        return this.valid();\n      }, element: function(b2) {\n        var c2, d2, e = this.clean(b2), f = this.validationTargetFor(e), g = this, h = true;\n        return void 0 === f ? delete this.invalid[e.name] : (this.prepareElement(f), this.currentElements = a(f), d2 = this.groups[f.name], d2 && a.each(this.groups, function(a2, b3) {\n          b3 === d2 && a2 !== f.name && (e = g.validationTargetFor(g.clean(g.findByName(a2))), e && e.name in g.invalid && (g.currentElements.push(e), h = g.check(e) && h));\n        }), c2 = this.check(f) !== false, h = h && c2, c2 ? this.invalid[f.name] = false : this.invalid[f.name] = true, this.numberOfInvalids() || (this.toHide = this.toHide.add(this.containers)), this.showErrors(), a(b2).attr(\"aria-invalid\", !c2)), h;\n      }, showErrors: function(b2) {\n        if (b2) {\n          var c2 = this;\n          a.extend(this.errorMap, b2), this.errorList = a.map(this.errorMap, function(a2, b3) {\n            return { message: a2, element: c2.findByName(b3)[0] };\n          }), this.successList = a.grep(this.successList, function(a2) {\n            return !(a2.name in b2);\n          });\n        }\n        this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors();\n      }, resetForm: function() {\n        a.fn.resetForm && a(this.currentForm).resetForm(), this.invalid = {}, this.submitted = {}, this.prepareForm(), this.hideErrors();\n        var b2 = this.elements().removeData(\"previousValue\").removeAttr(\"aria-invalid\");\n        this.resetElements(b2);\n      }, resetElements: function(a2) {\n        var b2;\n        if (this.settings.unhighlight)\n          for (b2 = 0; a2[b2]; b2++)\n            this.settings.unhighlight.call(this, a2[b2], this.settings.errorClass, \"\"), this.findByName(a2[b2].name).removeClass(this.settings.validClass);\n        else\n          a2.removeClass(this.settings.errorClass).removeClass(this.settings.validClass);\n      }, numberOfInvalids: function() {\n        return this.objectLength(this.invalid);\n      }, objectLength: function(a2) {\n        var b2, c2 = 0;\n        for (b2 in a2)\n          void 0 !== a2[b2] && null !== a2[b2] && a2[b2] !== false && c2++;\n        return c2;\n      }, hideErrors: function() {\n        this.hideThese(this.toHide);\n      }, hideThese: function(a2) {\n        a2.not(this.containers).text(\"\"), this.addWrapper(a2).hide();\n      }, valid: function() {\n        return 0 === this.size();\n      }, size: function() {\n        return this.errorList.length;\n      }, focusInvalid: function() {\n        if (this.settings.focusInvalid)\n          try {\n            a(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(\":visible\").trigger(\"focus\").trigger(\"focusin\");\n          } catch (b2) {\n          }\n      }, findLastActive: function() {\n        var b2 = this.lastActive;\n        return b2 && 1 === a.grep(this.errorList, function(a2) {\n          return a2.element.name === b2.name;\n        }).length && b2;\n      }, elements: function() {\n        var b2 = this, c2 = {};\n        return a(this.currentForm).find(\"input, select, textarea, [contenteditable]\").not(\":submit, :reset, :image, :disabled\").not(this.settings.ignore).filter(function() {\n          var d2 = this.name || a(this).attr(\"name\"), e = \"undefined\" != typeof a(this).attr(\"contenteditable\") && \"false\" !== a(this).attr(\"contenteditable\");\n          return !d2 && b2.settings.debug && window.console && console.error(\"%o has no name assigned\", this), e && (this.form = a(this).closest(\"form\")[0], this.name = d2), this.form === b2.currentForm && (!(d2 in c2 || !b2.objectLength(a(this).rules())) && (c2[d2] = true, true));\n        });\n      }, clean: function(b2) {\n        return a(b2)[0];\n      }, errors: function() {\n        var b2 = this.settings.errorClass.split(\" \").join(\".\");\n        return a(this.settings.errorElement + \".\" + b2, this.errorContext);\n      }, resetInternals: function() {\n        this.successList = [], this.errorList = [], this.errorMap = {}, this.toShow = a([]), this.toHide = a([]);\n      }, reset: function() {\n        this.resetInternals(), this.currentElements = a([]);\n      }, prepareForm: function() {\n        this.reset(), this.toHide = this.errors().add(this.containers);\n      }, prepareElement: function(a2) {\n        this.reset(), this.toHide = this.errorsFor(a2);\n      }, elementValue: function(b2) {\n        var c2, d2, e = a(b2), f = b2.type, g = \"undefined\" != typeof e.attr(\"contenteditable\") && \"false\" !== e.attr(\"contenteditable\");\n        return \"radio\" === f || \"checkbox\" === f ? this.findByName(b2.name).filter(\":checked\").val() : \"number\" === f && \"undefined\" != typeof b2.validity ? b2.validity.badInput ? \"NaN\" : e.val() : (c2 = g ? e.text() : e.val(), \"file\" === f ? \"C:\\\\fakepath\\\\\" === c2.substr(0, 12) ? c2.substr(12) : (d2 = c2.lastIndexOf(\"/\"), d2 >= 0 ? c2.substr(d2 + 1) : (d2 = c2.lastIndexOf(\"\\\\\"), d2 >= 0 ? c2.substr(d2 + 1) : c2)) : \"string\" == typeof c2 ? c2.replace(/\\r/g, \"\") : c2);\n      }, check: function(b2) {\n        b2 = this.validationTargetFor(this.clean(b2));\n        var c2, d2, e, f, g = a(b2).rules(), h = a.map(g, function(a2, b3) {\n          return b3;\n        }).length, i = false, j = this.elementValue(b2);\n        this.abortRequest(b2), \"function\" == typeof g.normalizer ? f = g.normalizer : \"function\" == typeof this.settings.normalizer && (f = this.settings.normalizer), f && (j = f.call(b2, j), delete g.normalizer);\n        for (d2 in g) {\n          e = { method: d2, parameters: g[d2] };\n          try {\n            if (c2 = a.validator.methods[d2].call(this, j, b2, e.parameters), \"dependency-mismatch\" === c2 && 1 === h) {\n              i = true;\n              continue;\n            }\n            if (i = false, \"pending\" === c2)\n              return void (this.toHide = this.toHide.not(this.errorsFor(b2)));\n            if (!c2)\n              return this.formatAndAdd(b2, e), false;\n          } catch (k) {\n            throw this.settings.debug && window.console && console.log(\"Exception occurred when checking element \" + b2.id + \", check the '\" + e.method + \"' method.\", k), k instanceof TypeError && (k.message += \".  Exception occurred when checking element \" + b2.id + \", check the '\" + e.method + \"' method.\"), k;\n          }\n        }\n        if (!i)\n          return this.objectLength(g) && this.successList.push(b2), true;\n      }, customDataMessage: function(b2, c2) {\n        return a(b2).data(\"msg\" + c2.charAt(0).toUpperCase() + c2.substring(1).toLowerCase()) || a(b2).data(\"msg\");\n      }, customMessage: function(a2, b2) {\n        var c2 = this.settings.messages[a2];\n        return c2 && (c2.constructor === String ? c2 : c2[b2]);\n      }, findDefined: function() {\n        for (var a2 = 0; a2 < arguments.length; a2++)\n          if (void 0 !== arguments[a2])\n            return arguments[a2];\n      }, defaultMessage: function(b2, c2) {\n        \"string\" == typeof c2 && (c2 = { method: c2 });\n        var d2 = this.findDefined(this.customMessage(b2.name, c2.method), this.customDataMessage(b2, c2.method), !this.settings.ignoreTitle && b2.title || void 0, a.validator.messages[c2.method], \"<strong>Warning: No message defined for \" + b2.name + \"</strong>\"), e = /\\$?\\{(\\d+)\\}/g;\n        return \"function\" == typeof d2 ? d2 = d2.call(this, c2.parameters, b2) : e.test(d2) && (d2 = a.validator.format(d2.replace(e, \"{$1}\"), c2.parameters)), d2;\n      }, formatAndAdd: function(a2, b2) {\n        var c2 = this.defaultMessage(a2, b2);\n        this.errorList.push({ message: c2, element: a2, method: b2.method }), this.errorMap[a2.name] = c2, this.submitted[a2.name] = c2;\n      }, addWrapper: function(a2) {\n        return this.settings.wrapper && (a2 = a2.add(a2.parent(this.settings.wrapper))), a2;\n      }, defaultShowErrors: function() {\n        var a2, b2, c2;\n        for (a2 = 0; this.errorList[a2]; a2++)\n          c2 = this.errorList[a2], this.settings.highlight && this.settings.highlight.call(this, c2.element, this.settings.errorClass, this.settings.validClass), this.showLabel(c2.element, c2.message);\n        if (this.errorList.length && (this.toShow = this.toShow.add(this.containers)), this.settings.success)\n          for (a2 = 0; this.successList[a2]; a2++)\n            this.showLabel(this.successList[a2]);\n        if (this.settings.unhighlight)\n          for (a2 = 0, b2 = this.validElements(); b2[a2]; a2++)\n            this.settings.unhighlight.call(this, b2[a2], this.settings.errorClass, this.settings.validClass);\n        this.toHide = this.toHide.not(this.toShow), this.hideErrors(), this.addWrapper(this.toShow).show();\n      }, validElements: function() {\n        return this.currentElements.not(this.invalidElements());\n      }, invalidElements: function() {\n        return a(this.errorList).map(function() {\n          return this.element;\n        });\n      }, showLabel: function(b2, c2) {\n        var d2, e, f, g, h = this.errorsFor(b2), i = this.idOrName(b2), j = a(b2).attr(\"aria-describedby\");\n        h.length ? (h.removeClass(this.settings.validClass).addClass(this.settings.errorClass), this.settings && this.settings.escapeHtml ? h.text(c2 || \"\") : h.html(c2 || \"\")) : (h = a(\"<\" + this.settings.errorElement + \">\").attr(\"id\", i + \"-error\").addClass(this.settings.errorClass), this.settings && this.settings.escapeHtml ? h.text(c2 || \"\") : h.html(c2 || \"\"), d2 = h, this.settings.wrapper && (d2 = h.hide().show().wrap(\"<\" + this.settings.wrapper + \"/>\").parent()), this.labelContainer.length ? this.labelContainer.append(d2) : this.settings.errorPlacement ? this.settings.errorPlacement.call(this, d2, a(b2)) : d2.insertAfter(b2), h.is(\"label\") ? h.attr(\"for\", i) : 0 === h.parents(\"label[for='\" + this.escapeCssMeta(i) + \"']\").length && (f = h.attr(\"id\"), j ? j.match(new RegExp(\"\\\\b\" + this.escapeCssMeta(f) + \"\\\\b\")) || (j += \" \" + f) : j = f, a(b2).attr(\"aria-describedby\", j), e = this.groups[b2.name], e && (g = this, a.each(g.groups, function(b3, c3) {\n          c3 === e && a(\"[name='\" + g.escapeCssMeta(b3) + \"']\", g.currentForm).attr(\"aria-describedby\", h.attr(\"id\"));\n        })))), !c2 && this.settings.success && (h.text(\"\"), \"string\" == typeof this.settings.success ? h.addClass(this.settings.success) : this.settings.success(h, b2)), this.toShow = this.toShow.add(h);\n      }, errorsFor: function(b2) {\n        var c2 = this.escapeCssMeta(this.idOrName(b2)), d2 = a(b2).attr(\"aria-describedby\"), e = \"label[for='\" + c2 + \"'], label[for='\" + c2 + \"'] *\";\n        return d2 && (e = e + \", #\" + this.escapeCssMeta(d2).replace(/\\s+/g, \", #\")), this.errors().filter(e);\n      }, escapeCssMeta: function(a2) {\n        return void 0 === a2 ? \"\" : a2.replace(/([\\\\!\"#$%&'()*+,./:;<=>?@\\[\\]^`{|}~])/g, \"\\\\$1\");\n      }, idOrName: function(a2) {\n        return this.groups[a2.name] || (this.checkable(a2) ? a2.name : a2.id || a2.name);\n      }, validationTargetFor: function(b2) {\n        return this.checkable(b2) && (b2 = this.findByName(b2.name)), a(b2).not(this.settings.ignore)[0];\n      }, checkable: function(a2) {\n        return /radio|checkbox/i.test(a2.type);\n      }, findByName: function(b2) {\n        return a(this.currentForm).find(\"[name='\" + this.escapeCssMeta(b2) + \"']\");\n      }, getLength: function(b2, c2) {\n        switch (c2.nodeName.toLowerCase()) {\n          case \"select\":\n            return a(\"option:selected\", c2).length;\n          case \"input\":\n            if (this.checkable(c2))\n              return this.findByName(c2.name).filter(\":checked\").length;\n        }\n        return b2.length;\n      }, depend: function(a2, b2) {\n        return !this.dependTypes[typeof a2] || this.dependTypes[typeof a2](a2, b2);\n      }, dependTypes: { \"boolean\": function(a2) {\n        return a2;\n      }, string: function(b2, c2) {\n        return !!a(b2, c2.form).length;\n      }, \"function\": function(a2, b2) {\n        return a2(b2);\n      } }, optional: function(b2) {\n        var c2 = this.elementValue(b2);\n        return !a.validator.methods.required.call(this, c2, b2) && \"dependency-mismatch\";\n      }, elementAjaxPort: function(a2) {\n        return \"validate\" + a2.name;\n      }, startRequest: function(b2) {\n        this.pending[b2.name] || (this.pendingRequest++, a(b2).addClass(this.settings.pendingClass), this.pending[b2.name] = true);\n      }, stopRequest: function(b2, c2) {\n        this.pendingRequest--, this.pendingRequest < 0 && (this.pendingRequest = 0), delete this.pending[b2.name], a(b2).removeClass(this.settings.pendingClass), c2 && 0 === this.pendingRequest && this.formSubmitted && this.form() && 0 === this.pendingRequest ? (a(this.currentForm).trigger(\"submit\"), this.submitButton && a(\"input:hidden[name='\" + this.submitButton.name + \"']\", this.currentForm).remove(), this.formSubmitted = false) : !c2 && 0 === this.pendingRequest && this.formSubmitted && (a(this.currentForm).triggerHandler(\"invalid-form\", [this]), this.formSubmitted = false);\n      }, abortRequest: function(b2) {\n        var c2;\n        this.pending[b2.name] && (c2 = this.elementAjaxPort(b2), a.ajaxAbort(c2), this.pendingRequest--, this.pendingRequest < 0 && (this.pendingRequest = 0), delete this.pending[b2.name], a(b2).removeClass(this.settings.pendingClass));\n      }, previousValue: function(b2, c2) {\n        return c2 = \"string\" == typeof c2 && c2 || \"remote\", a.data(b2, \"previousValue\") || a.data(b2, \"previousValue\", { old: null, valid: true, message: this.defaultMessage(b2, { method: c2 }) });\n      }, destroy: function() {\n        this.resetForm(), a(this.currentForm).off(\".validate\").removeData(\"validator\").find(\".validate-equalTo-blur\").off(\".validate-equalTo\").removeClass(\"validate-equalTo-blur\").find(\".validate-lessThan-blur\").off(\".validate-lessThan\").removeClass(\"validate-lessThan-blur\").find(\".validate-lessThanEqual-blur\").off(\".validate-lessThanEqual\").removeClass(\"validate-lessThanEqual-blur\").find(\".validate-greaterThanEqual-blur\").off(\".validate-greaterThanEqual\").removeClass(\"validate-greaterThanEqual-blur\").find(\".validate-greaterThan-blur\").off(\".validate-greaterThan\").removeClass(\"validate-greaterThan-blur\");\n      } }, classRuleSettings: { required: { required: true }, email: { email: true }, url: { url: true }, date: { date: true }, dateISO: { dateISO: true }, number: { number: true }, digits: { digits: true }, creditcard: { creditcard: true } }, addClassRules: function(b2, c2) {\n        b2.constructor === String ? this.classRuleSettings[b2] = c2 : a.extend(this.classRuleSettings, b2);\n      }, classRules: function(b2) {\n        var c2 = {}, d2 = a(b2).attr(\"class\");\n        return d2 && a.each(d2.split(\" \"), function() {\n          this in a.validator.classRuleSettings && a.extend(c2, a.validator.classRuleSettings[this]);\n        }), c2;\n      }, normalizeAttributeRule: function(a2, b2, c2, d2) {\n        /min|max|step/.test(c2) && (null === b2 || /number|range|text/.test(b2)) && (d2 = Number(d2), isNaN(d2) && (d2 = void 0)), d2 || 0 === d2 ? a2[c2] = d2 : b2 === c2 && \"range\" !== b2 && (a2[\"date\" === b2 ? \"dateISO\" : c2] = true);\n      }, attributeRules: function(b2) {\n        var c2, d2, e = {}, f = a(b2), g = b2.getAttribute(\"type\");\n        for (c2 in a.validator.methods)\n          \"required\" === c2 ? (d2 = b2.getAttribute(c2), \"\" === d2 && (d2 = true), d2 = !!d2) : d2 = f.attr(c2), this.normalizeAttributeRule(e, g, c2, d2);\n        return e.maxlength && /-1|2147483647|524288/.test(e.maxlength) && delete e.maxlength, e;\n      }, dataRules: function(b2) {\n        var c2, d2, e = {}, f = a(b2), g = b2.getAttribute(\"type\");\n        for (c2 in a.validator.methods)\n          d2 = f.data(\"rule\" + c2.charAt(0).toUpperCase() + c2.substring(1).toLowerCase()), \"\" === d2 && (d2 = true), this.normalizeAttributeRule(e, g, c2, d2);\n        return e;\n      }, staticRules: function(b2) {\n        var c2 = {}, d2 = a.data(b2.form, \"validator\");\n        return d2.settings.rules && (c2 = a.validator.normalizeRule(d2.settings.rules[b2.name]) || {}), c2;\n      }, normalizeRules: function(b2, c2) {\n        return a.each(b2, function(d2, e) {\n          if (e === false)\n            return void delete b2[d2];\n          if (e.param || e.depends) {\n            var f = true;\n            switch (typeof e.depends) {\n              case \"string\":\n                f = !!a(e.depends, c2.form).length;\n                break;\n              case \"function\":\n                f = e.depends.call(c2, c2);\n            }\n            f ? b2[d2] = void 0 === e.param || e.param : (a.data(c2.form, \"validator\").resetElements(a(c2)), delete b2[d2]);\n          }\n        }), a.each(b2, function(a2, d2) {\n          b2[a2] = \"function\" == typeof d2 && \"normalizer\" !== a2 ? d2(c2) : d2;\n        }), a.each([\"minlength\", \"maxlength\"], function() {\n          b2[this] && (b2[this] = Number(b2[this]));\n        }), a.each([\"rangelength\", \"range\"], function() {\n          var a2;\n          b2[this] && (Array.isArray(b2[this]) ? b2[this] = [Number(b2[this][0]), Number(b2[this][1])] : \"string\" == typeof b2[this] && (a2 = b2[this].replace(/[\\[\\]]/g, \"\").split(/[\\s,]+/), b2[this] = [Number(a2[0]), Number(a2[1])]));\n        }), a.validator.autoCreateRanges && (null != b2.min && null != b2.max && (b2.range = [b2.min, b2.max], delete b2.min, delete b2.max), null != b2.minlength && null != b2.maxlength && (b2.rangelength = [b2.minlength, b2.maxlength], delete b2.minlength, delete b2.maxlength)), b2;\n      }, normalizeRule: function(b2) {\n        if (\"string\" == typeof b2) {\n          var c2 = {};\n          a.each(b2.split(/\\s/), function() {\n            c2[this] = true;\n          }), b2 = c2;\n        }\n        return b2;\n      }, addMethod: function(b2, c2, d2) {\n        a.validator.methods[b2] = c2, a.validator.messages[b2] = void 0 !== d2 ? d2 : a.validator.messages[b2], c2.length < 3 && a.validator.addClassRules(b2, a.validator.normalizeRule(b2));\n      }, methods: { required: function(b2, c2, d2) {\n        if (!this.depend(d2, c2))\n          return \"dependency-mismatch\";\n        if (\"select\" === c2.nodeName.toLowerCase()) {\n          var e = a(c2).val();\n          return e && e.length > 0;\n        }\n        return this.checkable(c2) ? this.getLength(b2, c2) > 0 : void 0 !== b2 && null !== b2 && b2.length > 0;\n      }, email: function(a2, b2) {\n        return this.optional(b2) || /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a2);\n      }, url: function(a2, b2) {\n        return this.optional(b2) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(a2);\n      }, date: /* @__PURE__ */ function() {\n        var a2 = false;\n        return function(b2, c2) {\n          return a2 || (a2 = true, this.settings.debug && window.console && console.warn(\"The `date` method is deprecated and will be removed in version '2.0.0'.\\nPlease don't use it, since it relies on the Date constructor, which\\nbehaves very differently across browsers and locales. Use `dateISO`\\ninstead or one of the locale specific methods in `localizations/`\\nand `additional-methods.js`.\")), this.optional(c2) || !/Invalid|NaN/.test(new Date(b2).toString());\n        };\n      }(), dateISO: function(a2, b2) {\n        return this.optional(b2) || /^\\d{4}[\\/\\-](0?[1-9]|1[012])[\\/\\-](0?[1-9]|[12][0-9]|3[01])$/.test(a2);\n      }, number: function(a2, b2) {\n        return this.optional(b2) || /^(?:-?\\d+|-?\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(a2);\n      }, digits: function(a2, b2) {\n        return this.optional(b2) || /^\\d+$/.test(a2);\n      }, minlength: function(a2, b2, c2) {\n        var d2 = Array.isArray(a2) ? a2.length : this.getLength(a2, b2);\n        return this.optional(b2) || d2 >= c2;\n      }, maxlength: function(a2, b2, c2) {\n        var d2 = Array.isArray(a2) ? a2.length : this.getLength(a2, b2);\n        return this.optional(b2) || d2 <= c2;\n      }, rangelength: function(a2, b2, c2) {\n        var d2 = Array.isArray(a2) ? a2.length : this.getLength(a2, b2);\n        return this.optional(b2) || d2 >= c2[0] && d2 <= c2[1];\n      }, min: function(a2, b2, c2) {\n        return this.optional(b2) || a2 >= c2;\n      }, max: function(a2, b2, c2) {\n        return this.optional(b2) || a2 <= c2;\n      }, range: function(a2, b2, c2) {\n        return this.optional(b2) || a2 >= c2[0] && a2 <= c2[1];\n      }, step: function(b2, c2, d2) {\n        var e, f = a(c2).attr(\"type\"), g = \"Step attribute on input type \" + f + \" is not supported.\", h = [\"text\", \"number\", \"range\"], i = new RegExp(\"\\\\b\" + f + \"\\\\b\"), j = f && !i.test(h.join()), k = function(a2) {\n          var b3 = (\"\" + a2).match(/(?:\\.(\\d+))?$/);\n          return b3 && b3[1] ? b3[1].length : 0;\n        }, l = function(a2) {\n          return Math.round(a2 * Math.pow(10, e));\n        }, m = true;\n        if (j)\n          throw new Error(g);\n        return e = k(d2), (k(b2) > e || l(b2) % l(d2) !== 0) && (m = false), this.optional(c2) || m;\n      }, equalTo: function(b2, c2, d2) {\n        var e = a(d2);\n        return this.settings.onfocusout && e.not(\".validate-equalTo-blur\").length && e.addClass(\"validate-equalTo-blur\").on(\"blur.validate-equalTo\", function() {\n          a(c2).valid();\n        }), b2 === e.val();\n      }, remote: function(b2, c2, d2, e) {\n        if (this.optional(c2))\n          return \"dependency-mismatch\";\n        e = \"string\" == typeof e && e || \"remote\";\n        var f, g, h, i = this.previousValue(c2, e);\n        return this.settings.messages[c2.name] || (this.settings.messages[c2.name] = {}), i.originalMessage = i.originalMessage || this.settings.messages[c2.name][e], this.settings.messages[c2.name][e] = i.message, d2 = \"string\" == typeof d2 && { url: d2 } || d2, h = a.param(a.extend({ data: b2 }, d2.data)), i.old === h ? i.valid : (i.old = h, f = this, this.startRequest(c2), g = {}, g[c2.name] = b2, a.ajax(a.extend(true, { mode: \"abort\", port: this.elementAjaxPort(c2), dataType: \"json\", data: g, context: f.currentForm, success: function(a2) {\n          var d3, g2, h2, j = a2 === true || \"true\" === a2;\n          f.settings.messages[c2.name][e] = i.originalMessage, j ? (h2 = f.formSubmitted, f.toHide = f.errorsFor(c2), f.formSubmitted = h2, f.successList.push(c2), f.invalid[c2.name] = false, f.showErrors()) : (d3 = {}, g2 = a2 || f.defaultMessage(c2, { method: e, parameters: b2 }), d3[c2.name] = i.message = g2, f.invalid[c2.name] = true, f.showErrors(d3)), i.valid = j, f.stopRequest(c2, j);\n        } }, d2)), \"pending\");\n      } } });\n      var c, d = {};\n      return a.ajaxPrefilter ? a.ajaxPrefilter(function(b2, c2, e) {\n        var f = b2.port;\n        \"abort\" === b2.mode && (a.ajaxAbort(f), d[f] = e);\n      }) : (c = a.ajax, a.ajax = function(b2) {\n        var e = (\"mode\" in b2 ? b2 : a.ajaxSettings).mode, f = (\"port\" in b2 ? b2 : a.ajaxSettings).port;\n        return \"abort\" === e ? (a.ajaxAbort(f), d[f] = c.apply(this, arguments), d[f]) : c.apply(this, arguments);\n      }), a.ajaxAbort = function(a2) {\n        d[a2] && (d[a2].abort(), delete d[a2]);\n      }, a;\n    });\n  }\n});\nexport default require_jquery_validate_min();\n/*! Bundled license information:\n\njquery-validation/dist/jquery.validate.min.js:\n  (*! jQuery Validation Plugin - v1.20.0 - 10/10/2023\n   * https://jqueryvalidation.org/\n   * Copyright (c) 2023 Jörn Zaefferer; Licensed MIT *)\n*/\n//# sourceMappingURL=jquery-validation_dist_jquery__validate__min.js.map\n","import {\n  require_jquery\n} from \"./chunk-IL4DE2EU.js\";\nimport {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/jquery-validation/dist/additional-methods.min.js\nvar require_additional_methods_min = __commonJS({\n  \"node_modules/jquery-validation/dist/additional-methods.min.js\"(exports, module) {\n    !function(a) {\n      \"function\" == typeof define && define.amd ? define([\"jquery\", \"./jquery.validate.min\"], a) : \"object\" == typeof module && module.exports ? module.exports = a(require_jquery()) : a(jQuery);\n    }(function(a) {\n      return function() {\n        function b(a2) {\n          return a2.replace(/<.[^<>]*?>/g, \" \").replace(/&nbsp;|&#160;/gi, \" \").replace(/[.(),;:!?%#$'\\\"_+=\\/\\-“”’]*/g, \"\");\n        }\n        a.validator.addMethod(\"maxWords\", function(a2, c, d) {\n          return this.optional(c) || b(a2).match(/\\b\\w+\\b/g).length <= d;\n        }, a.validator.format(\"Please enter {0} words or less.\")), a.validator.addMethod(\"minWords\", function(a2, c, d) {\n          return this.optional(c) || b(a2).match(/\\b\\w+\\b/g).length >= d;\n        }, a.validator.format(\"Please enter at least {0} words.\")), a.validator.addMethod(\"rangeWords\", function(a2, c, d) {\n          var e = b(a2), f = /\\b\\w+\\b/g;\n          return this.optional(c) || e.match(f).length >= d[0] && e.match(f).length <= d[1];\n        }, a.validator.format(\"Please enter between {0} and {1} words.\"));\n      }(), a.validator.addMethod(\"abaRoutingNumber\", function(a2) {\n        var b = 0, c = a2.split(\"\"), d = c.length;\n        if (9 !== d)\n          return false;\n        for (var e = 0; e < d; e += 3)\n          b += 3 * parseInt(c[e], 10) + 7 * parseInt(c[e + 1], 10) + parseInt(c[e + 2], 10);\n        return 0 !== b && b % 10 === 0;\n      }, \"Please enter a valid routing number.\"), a.validator.addMethod(\"accept\", function(b, c, d) {\n        var e, f, g, h = \"string\" == typeof d ? d.replace(/\\s/g, \"\") : \"image/*\", i = this.optional(c);\n        if (i)\n          return i;\n        if (\"file\" === a(c).attr(\"type\") && (h = h.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\").replace(/,/g, \"|\").replace(/\\/\\*/g, \"/.*\"), c.files && c.files.length)) {\n          for (g = new RegExp(\".?(\" + h + \")$\", \"i\"), e = 0; e < c.files.length; e++)\n            if (f = c.files[e], !f.type.match(g))\n              return false;\n        }\n        return true;\n      }, a.validator.format(\"Please enter a value with a valid mimetype.\")), a.validator.addMethod(\"alphanumeric\", function(a2, b) {\n        return this.optional(b) || /^\\w+$/i.test(a2);\n      }, \"Letters, numbers, and underscores only please.\"), a.validator.addMethod(\"bankaccountNL\", function(a2, b) {\n        if (this.optional(b))\n          return true;\n        if (!/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(a2))\n          return false;\n        var c, d, e, f = a2.replace(/ /g, \"\"), g = 0, h = f.length;\n        for (c = 0; c < h; c++)\n          d = h - c, e = f.substring(c, c + 1), g += d * e;\n        return g % 11 === 0;\n      }, \"Please specify a valid bank account number.\"), a.validator.addMethod(\"bankorgiroaccountNL\", function(b, c) {\n        return this.optional(c) || a.validator.methods.bankaccountNL.call(this, b, c) || a.validator.methods.giroaccountNL.call(this, b, c);\n      }, \"Please specify a valid bank or giro account number.\"), a.validator.addMethod(\"bic\", function(a2, b) {\n        return this.optional(b) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-9])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test(a2.toUpperCase());\n      }, \"Please specify a valid BIC code.\"), a.validator.addMethod(\"cifES\", function(a2, b) {\n        \"use strict\";\n        function c(a3) {\n          return a3 % 2 === 0;\n        }\n        if (this.optional(b))\n          return true;\n        var d, e, f, g, h = new RegExp(/^([ABCDEFGHJKLMNPQRSUVW])(\\d{7})([0-9A-J])$/gi), i = a2.substring(0, 1), j = a2.substring(1, 8), k = a2.substring(8, 9), l = 0, m = 0, n = 0;\n        if (9 !== a2.length || !h.test(a2))\n          return false;\n        for (d = 0; d < j.length; d++)\n          e = parseInt(j[d], 10), c(d) ? (e *= 2, n += e < 10 ? e : e - 9) : m += e;\n        return l = m + n, f = (10 - l.toString().substr(-1)).toString(), f = parseInt(f, 10) > 9 ? \"0\" : f, g = \"JABCDEFGHI\".substr(f, 1).toString(), i.match(/[ABEH]/) ? k === f : i.match(/[KPQS]/) ? k === g : k === f || k === g;\n      }, \"Please specify a valid CIF number.\"), a.validator.addMethod(\"cnhBR\", function(a2) {\n        if (a2 = a2.replace(/([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\"), 11 !== a2.length)\n          return false;\n        var b, c, d, e, f, g, h = 0, i = 0;\n        if (b = a2.charAt(0), new Array(12).join(b) === a2)\n          return false;\n        for (e = 0, f = 9, g = 0; e < 9; ++e, --f)\n          h += +(a2.charAt(e) * f);\n        for (c = h % 11, c >= 10 && (c = 0, i = 2), h = 0, e = 0, f = 1, g = 0; e < 9; ++e, ++f)\n          h += +(a2.charAt(e) * f);\n        return d = h % 11, d >= 10 ? d = 0 : d -= i, String(c).concat(d) === a2.substr(-2);\n      }, \"Please specify a valid CNH number.\"), a.validator.addMethod(\"cnpjBR\", function(a2, b) {\n        \"use strict\";\n        if (this.optional(b))\n          return true;\n        if (a2 = a2.replace(/[^\\d]+/g, \"\"), 14 !== a2.length)\n          return false;\n        if (\"00000000000000\" === a2 || \"11111111111111\" === a2 || \"22222222222222\" === a2 || \"33333333333333\" === a2 || \"44444444444444\" === a2 || \"55555555555555\" === a2 || \"66666666666666\" === a2 || \"77777777777777\" === a2 || \"88888888888888\" === a2 || \"99999999999999\" === a2)\n          return false;\n        for (var c = a2.length - 2, d = a2.substring(0, c), e = a2.substring(c), f = 0, g = c - 7, h = c; h >= 1; h--)\n          f += d.charAt(c - h) * g--, g < 2 && (g = 9);\n        var i = f % 11 < 2 ? 0 : 11 - f % 11;\n        if (i !== parseInt(e.charAt(0), 10))\n          return false;\n        c += 1, d = a2.substring(0, c), f = 0, g = c - 7;\n        for (var j = c; j >= 1; j--)\n          f += d.charAt(c - j) * g--, g < 2 && (g = 9);\n        return i = f % 11 < 2 ? 0 : 11 - f % 11, i === parseInt(e.charAt(1), 10);\n      }, \"Please specify a CNPJ value number.\"), a.validator.addMethod(\"cpfBR\", function(a2, b) {\n        \"use strict\";\n        if (this.optional(b))\n          return true;\n        if (a2 = a2.replace(/([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\"), 11 !== a2.length)\n          return false;\n        var c, d, e, f, g = 0;\n        if (c = parseInt(a2.substring(9, 10), 10), d = parseInt(a2.substring(10, 11), 10), e = function(a3, b2) {\n          var c2 = 10 * a3 % 11;\n          return 10 !== c2 && 11 !== c2 || (c2 = 0), c2 === b2;\n        }, \"\" === a2 || \"00000000000\" === a2 || \"11111111111\" === a2 || \"22222222222\" === a2 || \"33333333333\" === a2 || \"44444444444\" === a2 || \"55555555555\" === a2 || \"66666666666\" === a2 || \"77777777777\" === a2 || \"88888888888\" === a2 || \"99999999999\" === a2)\n          return false;\n        for (f = 1; f <= 9; f++)\n          g += parseInt(a2.substring(f - 1, f), 10) * (11 - f);\n        if (e(g, c)) {\n          for (g = 0, f = 1; f <= 10; f++)\n            g += parseInt(a2.substring(f - 1, f), 10) * (12 - f);\n          return e(g, d);\n        }\n        return false;\n      }, \"Please specify a valid CPF number.\"), a.validator.addMethod(\"creditcard\", function(a2, b) {\n        if (this.optional(b))\n          return \"dependency-mismatch\";\n        if (/[^0-9 \\-]+/.test(a2))\n          return false;\n        var c, d, e = 0, f = 0, g = false;\n        if (a2 = a2.replace(/\\D/g, \"\"), a2.length < 13 || a2.length > 19)\n          return false;\n        for (c = a2.length - 1; c >= 0; c--)\n          d = a2.charAt(c), f = parseInt(d, 10), g && (f *= 2) > 9 && (f -= 9), e += f, g = !g;\n        return e % 10 === 0;\n      }, \"Please enter a valid credit card number.\"), a.validator.addMethod(\"creditcardtypes\", function(a2, b, c) {\n        if (/[^0-9\\-]+/.test(a2))\n          return false;\n        a2 = a2.replace(/\\D/g, \"\");\n        var d = 0;\n        return c.mastercard && (d |= 1), c.visa && (d |= 2), c.amex && (d |= 4), c.dinersclub && (d |= 8), c.enroute && (d |= 16), c.discover && (d |= 32), c.jcb && (d |= 64), c.unknown && (d |= 128), c.all && (d = 255), 1 & d && (/^(5[12345])/.test(a2) || /^(2[234567])/.test(a2)) ? 16 === a2.length : 2 & d && /^(4)/.test(a2) ? 16 === a2.length : 4 & d && /^(3[47])/.test(a2) ? 15 === a2.length : 8 & d && /^(3(0[012345]|[68]))/.test(a2) ? 14 === a2.length : 16 & d && /^(2(014|149))/.test(a2) ? 15 === a2.length : 32 & d && /^(6011)/.test(a2) ? 16 === a2.length : 64 & d && /^(3)/.test(a2) ? 16 === a2.length : 64 & d && /^(2131|1800)/.test(a2) ? 15 === a2.length : !!(128 & d);\n      }, \"Please enter a valid credit card number.\"), a.validator.addMethod(\"currency\", function(a2, b, c) {\n        var d, e = \"string\" == typeof c, f = e ? c : c[0], g = !!e || c[1];\n        return f = f.replace(/,/g, \"\"), f = g ? f + \"]\" : f + \"]?\", d = \"^[\" + f + \"([1-9]{1}[0-9]{0,2}(\\\\,[0-9]{3})*(\\\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\\\.[0-9]{0,2})?|0(\\\\.[0-9]{0,2})?|(\\\\.[0-9]{1,2})?)$\", d = new RegExp(d), this.optional(b) || d.test(a2);\n      }, \"Please specify a valid currency.\"), a.validator.addMethod(\"dateFA\", function(a2, b) {\n        return this.optional(b) || /^[1-4]\\d{3}\\/((0?[1-6]\\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(a2);\n      }, a.validator.messages.date), a.validator.addMethod(\"dateITA\", function(a2, b) {\n        var c, d, e, f, g, h = false, i = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/;\n        return i.test(a2) ? (c = a2.split(\"/\"), d = parseInt(c[0], 10), e = parseInt(c[1], 10), f = parseInt(c[2], 10), g = new Date(Date.UTC(f, e - 1, d, 12, 0, 0, 0)), h = g.getUTCFullYear() === f && g.getUTCMonth() === e - 1 && g.getUTCDate() === d) : h = false, this.optional(b) || h;\n      }, a.validator.messages.date), a.validator.addMethod(\"dateNL\", function(a2, b) {\n        return this.optional(b) || /^(0?[1-9]|[12]\\d|3[01])[\\.\\/\\-](0?[1-9]|1[012])[\\.\\/\\-]([12]\\d)?(\\d\\d)$/.test(a2);\n      }, a.validator.messages.date), a.validator.addMethod(\"extension\", function(a2, b, c) {\n        return c = \"string\" == typeof c ? c.replace(/,/g, \"|\") : \"png|jpe?g|gif\", this.optional(b) || a2.match(new RegExp(\"\\\\.(\" + c + \")$\", \"i\"));\n      }, a.validator.format(\"Please enter a value with a valid extension.\")), a.validator.addMethod(\"giroaccountNL\", function(a2, b) {\n        return this.optional(b) || /^[0-9]{1,7}$/.test(a2);\n      }, \"Please specify a valid giro account number.\"), a.validator.addMethod(\"greaterThan\", function(b, c, d) {\n        var e = a(d);\n        return this.settings.onfocusout && e.not(\".validate-greaterThan-blur\").length && e.addClass(\"validate-greaterThan-blur\").on(\"blur.validate-greaterThan\", function() {\n          a(c).valid();\n        }), b > e.val();\n      }, \"Please enter a greater value.\"), a.validator.addMethod(\"greaterThanEqual\", function(b, c, d) {\n        var e = a(d);\n        return this.settings.onfocusout && e.not(\".validate-greaterThanEqual-blur\").length && e.addClass(\"validate-greaterThanEqual-blur\").on(\"blur.validate-greaterThanEqual\", function() {\n          a(c).valid();\n        }), b >= e.val();\n      }, \"Please enter a greater value.\"), a.validator.addMethod(\"iban\", function(a2, b) {\n        if (this.optional(b))\n          return true;\n        var c, d, e, f, g, h, i, j, k, l = a2.replace(/ /g, \"\").toUpperCase(), m = \"\", n = true, o = \"\", p = \"\", q = 5;\n        if (l.length < q)\n          return false;\n        if (c = l.substring(0, 2), h = { AL: \"\\\\d{8}[\\\\dA-Z]{16}\", AD: \"\\\\d{8}[\\\\dA-Z]{12}\", AT: \"\\\\d{16}\", AZ: \"[\\\\dA-Z]{4}\\\\d{20}\", BE: \"\\\\d{12}\", BH: \"[A-Z]{4}[\\\\dA-Z]{14}\", BA: \"\\\\d{16}\", BR: \"\\\\d{23}[A-Z][\\\\dA-Z]\", BG: \"[A-Z]{4}\\\\d{6}[\\\\dA-Z]{8}\", CR: \"\\\\d{17}\", HR: \"\\\\d{17}\", CY: \"\\\\d{8}[\\\\dA-Z]{16}\", CZ: \"\\\\d{20}\", DK: \"\\\\d{14}\", DO: \"[A-Z]{4}\\\\d{20}\", EE: \"\\\\d{16}\", FO: \"\\\\d{14}\", FI: \"\\\\d{14}\", FR: \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\", GE: \"[\\\\dA-Z]{2}\\\\d{16}\", DE: \"\\\\d{18}\", GI: \"[A-Z]{4}[\\\\dA-Z]{15}\", GR: \"\\\\d{7}[\\\\dA-Z]{16}\", GL: \"\\\\d{14}\", GT: \"[\\\\dA-Z]{4}[\\\\dA-Z]{20}\", HU: \"\\\\d{24}\", IS: \"\\\\d{22}\", IE: \"[\\\\dA-Z]{4}\\\\d{14}\", IL: \"\\\\d{19}\", IT: \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\", KZ: \"\\\\d{3}[\\\\dA-Z]{13}\", KW: \"[A-Z]{4}[\\\\dA-Z]{22}\", LV: \"[A-Z]{4}[\\\\dA-Z]{13}\", LB: \"\\\\d{4}[\\\\dA-Z]{20}\", LI: \"\\\\d{5}[\\\\dA-Z]{12}\", LT: \"\\\\d{16}\", LU: \"\\\\d{3}[\\\\dA-Z]{13}\", MK: \"\\\\d{3}[\\\\dA-Z]{10}\\\\d{2}\", MT: \"[A-Z]{4}\\\\d{5}[\\\\dA-Z]{18}\", MR: \"\\\\d{23}\", MU: \"[A-Z]{4}\\\\d{19}[A-Z]{3}\", MC: \"\\\\d{10}[\\\\dA-Z]{11}\\\\d{2}\", MD: \"[\\\\dA-Z]{2}\\\\d{18}\", ME: \"\\\\d{18}\", NL: \"[A-Z]{4}\\\\d{10}\", NO: \"\\\\d{11}\", PK: \"[\\\\dA-Z]{4}\\\\d{16}\", PS: \"[\\\\dA-Z]{4}\\\\d{21}\", PL: \"\\\\d{24}\", PT: \"\\\\d{21}\", RO: \"[A-Z]{4}[\\\\dA-Z]{16}\", SM: \"[A-Z]\\\\d{10}[\\\\dA-Z]{12}\", SA: \"\\\\d{2}[\\\\dA-Z]{18}\", RS: \"\\\\d{18}\", SK: \"\\\\d{20}\", SI: \"\\\\d{15}\", ES: \"\\\\d{20}\", SE: \"\\\\d{20}\", CH: \"\\\\d{5}[\\\\dA-Z]{12}\", TN: \"\\\\d{20}\", TR: \"\\\\d{5}[\\\\dA-Z]{17}\", AE: \"\\\\d{3}\\\\d{16}\", GB: \"[A-Z]{4}\\\\d{14}\", VG: \"[\\\\dA-Z]{4}\\\\d{16}\" }, g = h[c], \"undefined\" != typeof g && (i = new RegExp(\"^[A-Z]{2}\\\\d{2}\" + g + \"$\", \"\"), !i.test(l)))\n          return false;\n        for (d = l.substring(4, l.length) + l.substring(0, 4), j = 0; j < d.length; j++)\n          e = d.charAt(j), \"0\" !== e && (n = false), n || (m += \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\".indexOf(e));\n        for (k = 0; k < m.length; k++)\n          f = m.charAt(k), p = \"\" + o + f, o = p % 97;\n        return 1 === o;\n      }, \"Please specify a valid IBAN.\"), a.validator.addMethod(\"integer\", function(a2, b) {\n        return this.optional(b) || /^-?\\d+$/.test(a2);\n      }, \"A positive or negative non-decimal number please.\"), a.validator.addMethod(\"ipv4\", function(a2, b) {\n        return this.optional(b) || /^(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/i.test(a2);\n      }, \"Please enter a valid IP v4 address.\"), a.validator.addMethod(\"ipv6\", function(a2, b) {\n        return this.optional(b) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a2);\n      }, \"Please enter a valid IP v6 address.\"), a.validator.addMethod(\"lessThan\", function(b, c, d) {\n        var e = a(d);\n        return this.settings.onfocusout && e.not(\".validate-lessThan-blur\").length && e.addClass(\"validate-lessThan-blur\").on(\"blur.validate-lessThan\", function() {\n          a(c).valid();\n        }), b < e.val();\n      }, \"Please enter a lesser value.\"), a.validator.addMethod(\"lessThanEqual\", function(b, c, d) {\n        var e = a(d);\n        return this.settings.onfocusout && e.not(\".validate-lessThanEqual-blur\").length && e.addClass(\"validate-lessThanEqual-blur\").on(\"blur.validate-lessThanEqual\", function() {\n          a(c).valid();\n        }), b <= e.val();\n      }, \"Please enter a lesser value.\"), a.validator.addMethod(\"lettersonly\", function(a2, b) {\n        return this.optional(b) || /^[a-z]+$/i.test(a2);\n      }, \"Letters only please.\"), a.validator.addMethod(\"letterswithbasicpunc\", function(a2, b) {\n        return this.optional(b) || /^[a-z\\-.,()'\"\\s]+$/i.test(a2);\n      }, \"Letters or punctuation only please.\"), a.validator.addMethod(\"maxfiles\", function(b, c, d) {\n        return !!this.optional(c) || !(\"file\" === a(c).attr(\"type\") && c.files && c.files.length > d);\n      }, a.validator.format(\"Please select no more than {0} files.\")), a.validator.addMethod(\"maxsize\", function(b, c, d) {\n        if (this.optional(c))\n          return true;\n        if (\"file\" === a(c).attr(\"type\") && c.files && c.files.length) {\n          for (var e = 0; e < c.files.length; e++)\n            if (c.files[e].size > d)\n              return false;\n        }\n        return true;\n      }, a.validator.format(\"File size must not exceed {0} bytes each.\")), a.validator.addMethod(\"maxsizetotal\", function(b, c, d) {\n        if (this.optional(c))\n          return true;\n        if (\"file\" === a(c).attr(\"type\") && c.files && c.files.length) {\n          for (var e = 0, f = 0; f < c.files.length; f++)\n            if (e += c.files[f].size, e > d)\n              return false;\n        }\n        return true;\n      }, a.validator.format(\"Total size of all files must not exceed {0} bytes.\")), a.validator.addMethod(\"mobileNL\", function(a2, b) {\n        return this.optional(b) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)6((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test(a2);\n      }, \"Please specify a valid mobile number.\"), a.validator.addMethod(\"mobileRU\", function(a2, b) {\n        var c = a2.replace(/\\(|\\)|\\s+|-/g, \"\");\n        return this.optional(b) || c.length > 9 && /^((\\+7|7|8)+([0-9]){10})$/.test(c);\n      }, \"Please specify a valid mobile number.\"), a.validator.addMethod(\"mobileUK\", function(a2, b) {\n        return a2 = a2.replace(/\\(|\\)|\\s+|-/g, \"\"), this.optional(b) || a2.length > 9 && a2.match(/^(?:(?:(?:00\\s?|\\+)44\\s?|0)7(?:[1345789]\\d{2}|624)\\s?\\d{3}\\s?\\d{3})$/);\n      }, \"Please specify a valid mobile number.\"), a.validator.addMethod(\"netmask\", function(a2, b) {\n        return this.optional(b) || /^(254|252|248|240|224|192|128)\\.0\\.0\\.0|255\\.(254|252|248|240|224|192|128|0)\\.0\\.0|255\\.255\\.(254|252|248|240|224|192|128|0)\\.0|255\\.255\\.255\\.(254|252|248|240|224|192|128|0)/i.test(a2);\n      }, \"Please enter a valid netmask.\"), a.validator.addMethod(\"nieES\", function(a2, b) {\n        \"use strict\";\n        if (this.optional(b))\n          return true;\n        var c, d = new RegExp(/^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi), e = \"TRWAGMYFPDXBNJZSQVHLCKET\", f = a2.substr(a2.length - 1).toUpperCase();\n        return a2 = a2.toString().toUpperCase(), !(a2.length > 10 || a2.length < 9 || !d.test(a2)) && (a2 = a2.replace(/^[X]/, \"0\").replace(/^[Y]/, \"1\").replace(/^[Z]/, \"2\"), c = 9 === a2.length ? a2.substr(0, 8) : a2.substr(0, 9), e.charAt(parseInt(c, 10) % 23) === f);\n      }, \"Please specify a valid NIE number.\"), a.validator.addMethod(\"nifES\", function(a2, b) {\n        \"use strict\";\n        return !!this.optional(b) || (a2 = a2.toUpperCase(), !!a2.match(\"((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)\") && (/^[0-9]{8}[A-Z]{1}$/.test(a2) ? \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(a2.substring(8, 0) % 23) === a2.charAt(8) : !!/^[KLM]{1}/.test(a2) && a2[8] === \"TRWAGMYFPDXBNJZSQVHLCKE\".charAt(a2.substring(8, 1) % 23)));\n      }, \"Please specify a valid NIF number.\"), a.validator.addMethod(\"nipPL\", function(a2) {\n        \"use strict\";\n        if (a2 = a2.replace(/[^0-9]/g, \"\"), 10 !== a2.length)\n          return false;\n        for (var b = [6, 5, 7, 2, 3, 4, 5, 6, 7], c = 0, d = 0; d < 9; d++)\n          c += b[d] * a2[d];\n        var e = c % 11, f = 10 === e ? 0 : e;\n        return f === parseInt(a2[9], 10);\n      }, \"Please specify a valid NIP number.\"), a.validator.addMethod(\"nisBR\", function(a2) {\n        var b, c, d, e, f, g = 0;\n        if (a2 = a2.replace(/([~!@#$%^&*()_+=`{}\\[\\]\\-|\\\\:;'<>,.\\/? ])+/g, \"\"), 11 !== a2.length)\n          return false;\n        for (c = parseInt(a2.substring(10, 11), 10), b = parseInt(a2.substring(0, 10), 10), e = 2; e < 12; e++)\n          f = e, 10 === e && (f = 2), 11 === e && (f = 3), g += b % 10 * f, b = parseInt(b / 10, 10);\n        return d = g % 11, d = d > 1 ? 11 - d : 0, c === d;\n      }, \"Please specify a valid NIS/PIS number.\"), a.validator.addMethod(\"notEqualTo\", function(b, c, d) {\n        return this.optional(c) || !a.validator.methods.equalTo.call(this, b, c, d);\n      }, \"Please enter a different value, values must not be the same.\"), a.validator.addMethod(\"nowhitespace\", function(a2, b) {\n        return this.optional(b) || /^\\S+$/i.test(a2);\n      }, \"No white space please.\"), a.validator.addMethod(\"pattern\", function(a2, b, c) {\n        return !!this.optional(b) || (\"string\" == typeof c && (c = new RegExp(\"^(?:\" + c + \")$\")), c.test(a2));\n      }, \"Invalid format.\"), a.validator.addMethod(\"phoneNL\", function(a2, b) {\n        return this.optional(b) || /^((\\+|00(\\s|\\s?\\-\\s?)?)31(\\s|\\s?\\-\\s?)?(\\(0\\)[\\-\\s]?)?|0)[1-9]((\\s|\\s?\\-\\s?)?[0-9]){8}$/.test(a2);\n      }, \"Please specify a valid phone number.\"), a.validator.addMethod(\"phonePL\", function(a2, b) {\n        a2 = a2.replace(/\\s+/g, \"\");\n        var c = /^(?:(?:(?:\\+|00)?48)|(?:\\(\\+?48\\)))?(?:1[2-8]|2[2-69]|3[2-49]|4[1-68]|5[0-9]|6[0-35-9]|[7-8][1-9]|9[145])\\d{7}$/;\n        return this.optional(b) || c.test(a2);\n      }, \"Please specify a valid phone number.\"), a.validator.addMethod(\"phonesUK\", function(a2, b) {\n        return a2 = a2.replace(/\\(|\\)|\\s+|-/g, \"\"), this.optional(b) || a2.length > 9 && a2.match(/^(?:(?:(?:00\\s?|\\+)44\\s?|0)(?:1\\d{8,9}|[23]\\d{9}|7(?:[1345789]\\d{8}|624\\d{6})))$/);\n      }, \"Please specify a valid uk phone number.\"), a.validator.addMethod(\"phoneUK\", function(a2, b) {\n        return a2 = a2.replace(/\\(|\\)|\\s+|-/g, \"\"), this.optional(b) || a2.length > 9 && a2.match(/^(?:(?:(?:00\\s?|\\+)44\\s?)|(?:\\(?0))(?:\\d{2}\\)?\\s?\\d{4}\\s?\\d{4}|\\d{3}\\)?\\s?\\d{3}\\s?\\d{3,4}|\\d{4}\\)?\\s?(?:\\d{5}|\\d{3}\\s?\\d{3})|\\d{5}\\)?\\s?\\d{4,5})$/);\n      }, \"Please specify a valid phone number.\"), a.validator.addMethod(\"phoneUS\", function(a2, b) {\n        return a2 = a2.replace(/\\s+/g, \"\"), this.optional(b) || a2.length > 9 && a2.match(/^(\\+?1-?)?(\\([2-9]([02-9]\\d|1[02-9])\\)|[2-9]([02-9]\\d|1[02-9]))-?[2-9]\\d{2}-?\\d{4}$/);\n      }, \"Please specify a valid phone number.\"), a.validator.addMethod(\"postalcodeBR\", function(a2, b) {\n        return this.optional(b) || /^\\d{2}.\\d{3}-\\d{3}?$|^\\d{5}-?\\d{3}?$/.test(a2);\n      }, \"Informe um CEP válido.\"), a.validator.addMethod(\"postalCodeCA\", function(a2, b) {\n        return this.optional(b) || /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ] *\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$/i.test(a2);\n      }, \"Please specify a valid postal code.\"), a.validator.addMethod(\"postalcodeIT\", function(a2, b) {\n        return this.optional(b) || /^\\d{5}$/.test(a2);\n      }, \"Please specify a valid postal code.\"), a.validator.addMethod(\"postalcodeNL\", function(a2, b) {\n        return this.optional(b) || /^[1-9][0-9]{3}\\s?[a-zA-Z]{2}$/.test(a2);\n      }, \"Please specify a valid postal code.\"), a.validator.addMethod(\"postcodeUK\", function(a2, b) {\n        return this.optional(b) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\\s?(0AA))$/i.test(a2);\n      }, \"Please specify a valid UK postcode.\"), a.validator.addMethod(\"require_from_group\", function(b, c, d) {\n        var e = a(d[1], c.form), f = e.eq(0), g = f.data(\"valid_req_grp\") ? f.data(\"valid_req_grp\") : a.extend({}, this), h = e.filter(function() {\n          return g.elementValue(this);\n        }).length >= d[0];\n        return f.data(\"valid_req_grp\", g), a(c).data(\"being_validated\") || (e.data(\"being_validated\", true), e.each(function() {\n          g.element(this);\n        }), e.data(\"being_validated\", false)), h;\n      }, a.validator.format(\"Please fill at least {0} of these fields.\")), a.validator.addMethod(\"skip_or_fill_minimum\", function(b, c, d) {\n        var e = a(d[1], c.form), f = e.eq(0), g = f.data(\"valid_skip\") ? f.data(\"valid_skip\") : a.extend({}, this), h = e.filter(function() {\n          return g.elementValue(this);\n        }).length, i = 0 === h || h >= d[0];\n        return f.data(\"valid_skip\", g), a(c).data(\"being_validated\") || (e.data(\"being_validated\", true), e.each(function() {\n          g.element(this);\n        }), e.data(\"being_validated\", false)), i;\n      }, a.validator.format(\"Please either skip these fields or fill at least {0} of them.\")), a.validator.addMethod(\"stateUS\", function(a2, b, c) {\n        var d, e = \"undefined\" == typeof c, f = !e && \"undefined\" != typeof c.caseSensitive && c.caseSensitive, g = !e && \"undefined\" != typeof c.includeTerritories && c.includeTerritories, h = !e && \"undefined\" != typeof c.includeMilitary && c.includeMilitary;\n        return d = g || h ? g && h ? \"^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\" : g ? \"^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$\" : \"^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\" : \"^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$\", d = f ? new RegExp(d) : new RegExp(d, \"i\"), this.optional(b) || d.test(a2);\n      }, \"Please specify a valid state.\"), a.validator.addMethod(\"strippedminlength\", function(b, c, d) {\n        return a(b).text().length >= d;\n      }, a.validator.format(\"Please enter at least {0} characters.\")), a.validator.addMethod(\"time\", function(a2, b) {\n        return this.optional(b) || /^([01]\\d|2[0-3]|[0-9])(:[0-5]\\d){1,2}$/.test(a2);\n      }, \"Please enter a valid time, between 00:00 and 23:59.\"), a.validator.addMethod(\"time12h\", function(a2, b) {\n        return this.optional(b) || /^((0?[1-9]|1[012])(:[0-5]\\d){1,2}(\\ ?[AP]M))$/i.test(a2);\n      }, \"Please enter a valid time in 12-hour am/pm format.\"), a.validator.addMethod(\"url2\", function(a2, b) {\n        return this.optional(b) || /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\\]\\[?\\/<~#`!@$^&*()+=}|:\";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?)|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff])|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62}\\.)))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(a2);\n      }, a.validator.messages.url), a.validator.addMethod(\"vinUS\", function(a2) {\n        if (17 !== a2.length)\n          return false;\n        var b, c, d, e, f, g, h = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"J\", \"K\", \"L\", \"M\", \"N\", \"P\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"], i = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9], j = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2], k = 0;\n        for (b = 0; b < 17; b++)\n          e = j[b], d = a2.slice(b, b + 1), isNaN(d) ? (d = d.toUpperCase(), c = i[h.indexOf(d)]) : c = parseInt(d, 10), 8 === b && (g = c, \"X\" === d && (g = 10)), k += c * e;\n        return f = k % 11, f === g;\n      }, \"The specified vehicle identification number (VIN) is invalid.\"), a.validator.addMethod(\"zipcodeUS\", function(a2, b) {\n        return this.optional(b) || /^\\d{5}(-\\d{4})?$/.test(a2);\n      }, \"The specified US ZIP Code is invalid.\"), a.validator.addMethod(\"ziprange\", function(a2, b) {\n        return this.optional(b) || /^90[2-5]\\d\\{2\\}-\\d{4}$/.test(a2);\n      }, \"Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx.\"), a;\n    });\n  }\n});\nexport default require_additional_methods_min();\n/*! Bundled license information:\n\njquery-validation/dist/additional-methods.min.js:\n  (*! jQuery Validation Plugin - v1.20.0 - 10/10/2023\n   * https://jqueryvalidation.org/\n   * Copyright (c) 2023 Jörn Zaefferer; Licensed MIT *)\n*/\n//# sourceMappingURL=jquery-validation_dist_additional-methods__min.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport \"jquery-validation/dist/jquery.validate.min\"\nimport \"jquery-validation/dist/additional-methods.min\"\n\nexport default class extends Controller {\n  static targets = [\n    \"resumeField\",\n    \"resumeContainer\",\n    \"removalInput\"\n  ]\n\n  connect() {\n    this.populateResumeField()\n    this.initializeValidation()\n  }\n\n  populateResumeField() {\n    let filename = \"\"\n\n    fetch(\"/account/users/resume\").then(response => {\n      if (response.ok) {\n        const header = response.headers.get(\"Content-Disposition\")\n        filename = decodeURIComponent(header.match(/filename=\"(.+)\"/)[1])\n        return response.blob()\n      } else if (response.status === 404) {\n        throw new Error(\"The user's resume was not found.\")\n      } else {\n        throw new Error(`There was a problem when fetching the user's resume: ${response.statusText}`)\n      }\n    }).then(blob => {\n      const file = new File([blob], filename, { type: blob.type })\n      const dataTransfer = new DataTransfer()\n      dataTransfer.items.add(file)\n      this.resumeFieldTarget.files = dataTransfer.files\n      this.onResumeSelected()\n    }).catch(error => {\n      if (error.message.startsWith(\"There was a problem when fetching the user's resume\")) {\n        Honeybadger.notify(error)\n      }\n\n      console.error(error)\n    })\n  }\n\n  initializeValidation() {\n    const _this = this\n\n    $.validator.addMethod('filesize', function (value, element, param) {\n      return this.optional(element) || (element.files[0].size <= param)\n    }, function(size) {\n      return `The maximum file size is ${Math.round(size / (1024 * 1024))}MB.`\n    })\n\n    $(\"#member-demographics-form\").validate({\n      ignore: \"input[type=hidden]\",\n      onfocusout: function(element) {\n        if ($(element).hasClass(\"validate-on-blur\")) {\n          this.element(element)\n        }\n      },\n      invalidHandler: function(event, validator) {\n        if (validator.numberOfInvalids() === 0)\n          return\n\n        $(\"html, body\").animate({\n          scrollTop: $(validator.errorList[0].element).closest(\":visible\").offset().top - 100\n        }, 500)\n      },\n      rules: {\n        \"member_demographic[user_attributes][resume]\": {\n          required: false,\n          accept: \"application/pdf\",\n          filesize: 26214400\n        }\n      },\n      messages: {\n        \"member_demographic[user_attributes][resume]\": {\n          accept: \"Please select a PDF file.\"\n        }\n      },\n      errorClass: \"block text-xs text-red mt-1\",\n      errorPlacement: function (label, element) {\n        label.insertAfter(element.parent().parent())\n      }\n    })\n  }\n\n  openResumeDialog(event) {\n    event.preventDefault()\n    this.resumeFieldTarget.click()\n  }\n\n  onResumeSelected() {\n    const file = this.resumeFieldTarget.files[0]\n\n    if (file) {\n      $(this.resumeContainerTarget).find(\".upload-file i\").removeClass(\"ti-upload\").addClass(\"ti-check\")\n      $(this.resumeContainerTarget).find(\".upload-file span\").text(\"File Uploaded\")\n      $(this.resumeContainerTarget).find(\".file-name\").removeClass(\"hidden\").find(\"span\").text(file.name)\n      $(this.resumeFieldTarget).valid()\n      this.removalInputTarget.value = false\n    } else {\n      this.removeResume(new Event(\"blank\"))\n    }\n  }\n\n  removeResume(event) {\n    event.preventDefault()\n    $(this.resumeContainerTarget).find(\".upload-file i\").removeClass(\"ti-check\").addClass(\"ti-upload\")\n    $(this.resumeContainerTarget).find(\".upload-file span\").text(\"Upload New Document\")\n    $(this.resumeContainerTarget).find(\".file-name\").addClass(\"hidden\")\n    $(this.resumeFieldTarget).val(null).change()\n    this.removalInputTarget.value = true\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"select\" ]\n  static values = {\n    acceptsNew: Boolean,\n    enableSearch: Boolean,\n    searchUrl: String,\n    maximumSelection: Number\n  }\n\n  connect() {\n    this.initPluginInstance()\n  }\n\n  disconnect() {\n    this.teardownPluginInstance()\n  }\n\n  cleanupBeforeInit() {\n    $(this.element).find('.select2-container--default').remove()\n  }\n\n  initPluginInstance() {\n    let options = {};\n\n    if (!this.enableSearchValue) {\n      options.minimumResultsForSearch = -1;\n    }\n\n    options.tags = this.acceptsNewValue\n    options.maximumSelectionLength = this.maximumSelectionValue || Infinity\n\n    if (this.searchUrlValue) {\n      options.ajax = {\n        url: this.searchUrlValue,\n        dataType: 'json',\n        delay: 250,\n        // We enable pagination by default here\n        data: function(params) {\n          var query = {\n            search: params.term,\n            page: params.page || 1\n          }\n          return query\n        }\n        // Any additional params go here...\n      }\n      options.minimumInputLength = 2;\n    }\n\n    options.templateResult = this.formatState;\n    options.templateSelection = this.formatState;\n    options.width = 'style';\n\n    this.cleanupBeforeInit() // in case improperly torn down\n    this.pluginMainEl = this.selectTarget // required because this.selectTarget is unavailable on disconnect()\n    $(this.pluginMainEl).select2(options);\n    $(this.pluginMainEl).on('select2:open', () => {\n      if (this.multiple) {\n        setTimeout(() => document.querySelector('.select2-container--open .select2-search__field').focus(), 200)\n      }\n    });\n    $(this.pluginMainEl).on('select2:close', function() {\n      $(this).valid();\n    });\n    $(this.pluginMainEl).on('select2:unselecting', function (event) {\n      $(this).on('select2:opening', function (event) {\n        event.preventDefault();\n        $(this).off('select2:opening');\n      });\n    });\n  }\n\n  teardownPluginInstance() {\n    if (this.pluginMainEl === undefined) { return }\n\n    // revert to original markup, remove any event listeners\n    $(this.pluginMainEl).select2('destroy');\n  }\n\n  // https://stackoverflow.com/questions/29290389/select2-add-image-icon-to-option-dynamically\n  formatState(opt) {\n    var imageUrl = $(opt.element).attr('data-image');\n    var imageHtml = \"\";\n    if (imageUrl) {\n      imageHtml = '<img src=\"' + imageUrl + '\" /> ';\n    }\n    return $('<span>' + imageHtml + opt.text + '</span>');\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"message\"]\n\n  connect() {\n    setTimeout(() => {\n      this.messageTarget.remove()\n    }, 15000)\n  }\n\n  dismiss(event) {\n    event.currentTarget.parentElement.remove()\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"selectInput\"\n  ]\n\n  connect() {\n    this.initializeStatusSelect()\n  }\n\n  initializeStatusSelect() {\n    const options = {\n      width: 'style',\n      minimumResultsForSearch: Infinity,\n      templateResult: this.select2OptionTemplate\n    }\n    this.select2Instance = $(this.selectInputTarget).select2(options)\n    $(this.select2Instance).on('select2:open', () => {\n      setTimeout(() => document.querySelector('.select2-container--open .select2-search__field').focus(), 200)\n    })\n  }\n\n  select2OptionTemplate(option) {\n    if (option.element) {\n      return $(\n        `<div class=\"flex items-center group\">\n           <span class=\"ml-4 hover:font-semibold\">${option.text}</span>\n           <span class=\"ml-4 text-gray-400 italic\">\n             ${option.element.dataset.helperText ? option.element.dataset.helperText : \"\"}\n           </span>\n         </div>`\n      )\n    } else {\n      return \"\"\n    }\n  }\n\n  disconnect() {\n    this.select2Instance.select2('destroy')\n  }\n}\n","import {\n  __commonJS\n} from \"./chunk-624QZG55.js\";\n\n// node_modules/string-natural-compare/natural-compare.js\nvar require_natural_compare = __commonJS({\n  \"node_modules/string-natural-compare/natural-compare.js\"(exports, module) {\n    \"use strict\";\n    var alphabet;\n    var alphabetIndexMap;\n    var alphabetIndexMapLength = 0;\n    function isNumberCode(code) {\n      return code >= 48 && code <= 57;\n    }\n    function naturalCompare(a, b) {\n      var lengthA = (a += \"\").length;\n      var lengthB = (b += \"\").length;\n      var aIndex = 0;\n      var bIndex = 0;\n      while (aIndex < lengthA && bIndex < lengthB) {\n        var charCodeA = a.charCodeAt(aIndex);\n        var charCodeB = b.charCodeAt(bIndex);\n        if (isNumberCode(charCodeA)) {\n          if (!isNumberCode(charCodeB)) {\n            return charCodeA - charCodeB;\n          }\n          var numStartA = aIndex;\n          var numStartB = bIndex;\n          while (charCodeA === 48 && ++numStartA < lengthA) {\n            charCodeA = a.charCodeAt(numStartA);\n          }\n          while (charCodeB === 48 && ++numStartB < lengthB) {\n            charCodeB = b.charCodeAt(numStartB);\n          }\n          var numEndA = numStartA;\n          var numEndB = numStartB;\n          while (numEndA < lengthA && isNumberCode(a.charCodeAt(numEndA))) {\n            ++numEndA;\n          }\n          while (numEndB < lengthB && isNumberCode(b.charCodeAt(numEndB))) {\n            ++numEndB;\n          }\n          var difference = numEndA - numStartA - numEndB + numStartB;\n          if (difference) {\n            return difference;\n          }\n          while (numStartA < numEndA) {\n            difference = a.charCodeAt(numStartA++) - b.charCodeAt(numStartB++);\n            if (difference) {\n              return difference;\n            }\n          }\n          aIndex = numEndA;\n          bIndex = numEndB;\n          continue;\n        }\n        if (charCodeA !== charCodeB) {\n          if (charCodeA < alphabetIndexMapLength && charCodeB < alphabetIndexMapLength && alphabetIndexMap[charCodeA] !== -1 && alphabetIndexMap[charCodeB] !== -1) {\n            return alphabetIndexMap[charCodeA] - alphabetIndexMap[charCodeB];\n          }\n          return charCodeA - charCodeB;\n        }\n        ++aIndex;\n        ++bIndex;\n      }\n      if (aIndex >= lengthA && bIndex < lengthB && lengthA >= lengthB) {\n        return -1;\n      }\n      if (bIndex >= lengthB && aIndex < lengthA && lengthB >= lengthA) {\n        return 1;\n      }\n      return lengthA - lengthB;\n    }\n    naturalCompare.caseInsensitive = naturalCompare.i = function(a, b) {\n      return naturalCompare((\"\" + a).toLowerCase(), (\"\" + b).toLowerCase());\n    };\n    Object.defineProperties(naturalCompare, {\n      alphabet: {\n        get: function() {\n          return alphabet;\n        },\n        set: function(value) {\n          alphabet = value;\n          alphabetIndexMap = [];\n          var i = 0;\n          if (alphabet) {\n            for (; i < alphabet.length; i++) {\n              alphabetIndexMap[alphabet.charCodeAt(i)] = i;\n            }\n          }\n          alphabetIndexMapLength = alphabetIndexMap.length;\n          for (i = 0; i < alphabetIndexMapLength; i++) {\n            if (alphabetIndexMap[i] === void 0) {\n              alphabetIndexMap[i] = -1;\n            }\n          }\n        }\n      }\n    });\n    module.exports = naturalCompare;\n  }\n});\n\n// node_modules/list.js/src/utils/get-by-class.js\nvar require_get_by_class = __commonJS({\n  \"node_modules/list.js/src/utils/get-by-class.js\"(exports, module) {\n    var getElementsByClassName = function(container, className, single) {\n      if (single) {\n        return container.getElementsByClassName(className)[0];\n      } else {\n        return container.getElementsByClassName(className);\n      }\n    };\n    var querySelector = function(container, className, single) {\n      className = \".\" + className;\n      if (single) {\n        return container.querySelector(className);\n      } else {\n        return container.querySelectorAll(className);\n      }\n    };\n    var polyfill = function(container, className, single) {\n      var classElements = [], tag = \"*\";\n      var els = container.getElementsByTagName(tag);\n      var elsLen = els.length;\n      var pattern = new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\");\n      for (var i = 0, j = 0; i < elsLen; i++) {\n        if (pattern.test(els[i].className)) {\n          if (single) {\n            return els[i];\n          } else {\n            classElements[j] = els[i];\n            j++;\n          }\n        }\n      }\n      return classElements;\n    };\n    module.exports = /* @__PURE__ */ function() {\n      return function(container, className, single, options) {\n        options = options || {};\n        if (options.test && options.getElementsByClassName || !options.test && document.getElementsByClassName) {\n          return getElementsByClassName(container, className, single);\n        } else if (options.test && options.querySelector || !options.test && document.querySelector) {\n          return querySelector(container, className, single);\n        } else {\n          return polyfill(container, className, single);\n        }\n      };\n    }();\n  }\n});\n\n// node_modules/list.js/src/utils/extend.js\nvar require_extend = __commonJS({\n  \"node_modules/list.js/src/utils/extend.js\"(exports, module) {\n    module.exports = function extend(object) {\n      var args = Array.prototype.slice.call(arguments, 1);\n      for (var i = 0, source; source = args[i]; i++) {\n        if (!source)\n          continue;\n        for (var property in source) {\n          object[property] = source[property];\n        }\n      }\n      return object;\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/index-of.js\nvar require_index_of = __commonJS({\n  \"node_modules/list.js/src/utils/index-of.js\"(exports, module) {\n    var indexOf = [].indexOf;\n    module.exports = function(arr, obj) {\n      if (indexOf)\n        return arr.indexOf(obj);\n      for (var i = 0, il = arr.length; i < il; ++i) {\n        if (arr[i] === obj)\n          return i;\n      }\n      return -1;\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/to-array.js\nvar require_to_array = __commonJS({\n  \"node_modules/list.js/src/utils/to-array.js\"(exports, module) {\n    module.exports = function toArray(collection) {\n      if (typeof collection === \"undefined\")\n        return [];\n      if (collection === null)\n        return [null];\n      if (collection === window)\n        return [window];\n      if (typeof collection === \"string\")\n        return [collection];\n      if (isArray(collection))\n        return collection;\n      if (typeof collection.length != \"number\")\n        return [collection];\n      if (typeof collection === \"function\" && collection instanceof Function)\n        return [collection];\n      var arr = [];\n      for (var i = 0, il = collection.length; i < il; i++) {\n        if (Object.prototype.hasOwnProperty.call(collection, i) || i in collection) {\n          arr.push(collection[i]);\n        }\n      }\n      if (!arr.length)\n        return [];\n      return arr;\n    };\n    function isArray(arr) {\n      return Object.prototype.toString.call(arr) === \"[object Array]\";\n    }\n  }\n});\n\n// node_modules/list.js/src/utils/events.js\nvar require_events = __commonJS({\n  \"node_modules/list.js/src/utils/events.js\"(exports) {\n    var bind = window.addEventListener ? \"addEventListener\" : \"attachEvent\";\n    var unbind = window.removeEventListener ? \"removeEventListener\" : \"detachEvent\";\n    var prefix = bind !== \"addEventListener\" ? \"on\" : \"\";\n    var toArray = require_to_array();\n    exports.bind = function(el, type, fn, capture) {\n      el = toArray(el);\n      for (var i = 0, il = el.length; i < il; i++) {\n        el[i][bind](prefix + type, fn, capture || false);\n      }\n    };\n    exports.unbind = function(el, type, fn, capture) {\n      el = toArray(el);\n      for (var i = 0, il = el.length; i < il; i++) {\n        el[i][unbind](prefix + type, fn, capture || false);\n      }\n    };\n    exports.debounce = function(fn, wait, immediate) {\n      var timeout;\n      return wait ? function() {\n        var context = this, args = arguments;\n        var later = function() {\n          timeout = null;\n          if (!immediate)\n            fn.apply(context, args);\n        };\n        var callNow = immediate && !timeout;\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n        if (callNow)\n          fn.apply(context, args);\n      } : fn;\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/to-string.js\nvar require_to_string = __commonJS({\n  \"node_modules/list.js/src/utils/to-string.js\"(exports, module) {\n    module.exports = function(s) {\n      s = s === void 0 ? \"\" : s;\n      s = s === null ? \"\" : s;\n      s = s.toString();\n      return s;\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/classes.js\nvar require_classes = __commonJS({\n  \"node_modules/list.js/src/utils/classes.js\"(exports, module) {\n    var index = require_index_of();\n    var re = /\\s+/;\n    module.exports = function(el) {\n      return new ClassList(el);\n    };\n    function ClassList(el) {\n      if (!el || !el.nodeType) {\n        throw new Error(\"A DOM element reference is required\");\n      }\n      this.el = el;\n      this.list = el.classList;\n    }\n    ClassList.prototype.add = function(name) {\n      if (this.list) {\n        this.list.add(name);\n        return this;\n      }\n      var arr = this.array();\n      var i = index(arr, name);\n      if (!~i)\n        arr.push(name);\n      this.el.className = arr.join(\" \");\n      return this;\n    };\n    ClassList.prototype.remove = function(name) {\n      if (this.list) {\n        this.list.remove(name);\n        return this;\n      }\n      var arr = this.array();\n      var i = index(arr, name);\n      if (~i)\n        arr.splice(i, 1);\n      this.el.className = arr.join(\" \");\n      return this;\n    };\n    ClassList.prototype.toggle = function(name, force) {\n      if (this.list) {\n        if (\"undefined\" !== typeof force) {\n          if (force !== this.list.toggle(name, force)) {\n            this.list.toggle(name);\n          }\n        } else {\n          this.list.toggle(name);\n        }\n        return this;\n      }\n      if (\"undefined\" !== typeof force) {\n        if (!force) {\n          this.remove(name);\n        } else {\n          this.add(name);\n        }\n      } else {\n        if (this.has(name)) {\n          this.remove(name);\n        } else {\n          this.add(name);\n        }\n      }\n      return this;\n    };\n    ClassList.prototype.array = function() {\n      var className = this.el.getAttribute(\"class\") || \"\";\n      var str = className.replace(/^\\s+|\\s+$/g, \"\");\n      var arr = str.split(re);\n      if (\"\" === arr[0])\n        arr.shift();\n      return arr;\n    };\n    ClassList.prototype.has = ClassList.prototype.contains = function(name) {\n      return this.list ? this.list.contains(name) : !!~index(this.array(), name);\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/get-attribute.js\nvar require_get_attribute = __commonJS({\n  \"node_modules/list.js/src/utils/get-attribute.js\"(exports, module) {\n    module.exports = function(el, attr) {\n      var result = el.getAttribute && el.getAttribute(attr) || null;\n      if (!result) {\n        var attrs = el.attributes;\n        var length = attrs.length;\n        for (var i = 0; i < length; i++) {\n          if (attrs[i] !== void 0) {\n            if (attrs[i].nodeName === attr) {\n              result = attrs[i].nodeValue;\n            }\n          }\n        }\n      }\n      return result;\n    };\n  }\n});\n\n// node_modules/list.js/src/item.js\nvar require_item = __commonJS({\n  \"node_modules/list.js/src/item.js\"(exports, module) {\n    module.exports = function(list) {\n      return function(initValues, element, notCreate) {\n        var item = this;\n        this._values = {};\n        this.found = false;\n        this.filtered = false;\n        var init = function(initValues2, element2, notCreate2) {\n          if (element2 === void 0) {\n            if (notCreate2) {\n              item.values(initValues2, notCreate2);\n            } else {\n              item.values(initValues2);\n            }\n          } else {\n            item.elm = element2;\n            var values = list.templater.get(item, initValues2);\n            item.values(values);\n          }\n        };\n        this.values = function(newValues, notCreate2) {\n          if (newValues !== void 0) {\n            for (var name in newValues) {\n              item._values[name] = newValues[name];\n            }\n            if (notCreate2 !== true) {\n              list.templater.set(item, item.values());\n            }\n          } else {\n            return item._values;\n          }\n        };\n        this.show = function() {\n          list.templater.show(item);\n        };\n        this.hide = function() {\n          list.templater.hide(item);\n        };\n        this.matching = function() {\n          return list.filtered && list.searched && item.found && item.filtered || list.filtered && !list.searched && item.filtered || !list.filtered && list.searched && item.found || !list.filtered && !list.searched;\n        };\n        this.visible = function() {\n          return item.elm && item.elm.parentNode == list.list ? true : false;\n        };\n        init(initValues, element, notCreate);\n      };\n    };\n  }\n});\n\n// node_modules/list.js/src/add-async.js\nvar require_add_async = __commonJS({\n  \"node_modules/list.js/src/add-async.js\"(exports, module) {\n    module.exports = function(list) {\n      var addAsync = function(values, callback, items) {\n        var valuesToAdd = values.splice(0, 50);\n        items = items || [];\n        items = items.concat(list.add(valuesToAdd));\n        if (values.length > 0) {\n          setTimeout(function() {\n            addAsync(values, callback, items);\n          }, 1);\n        } else {\n          list.update();\n          callback(items);\n        }\n      };\n      return addAsync;\n    };\n  }\n});\n\n// node_modules/list.js/src/pagination.js\nvar require_pagination = __commonJS({\n  \"node_modules/list.js/src/pagination.js\"(exports, module) {\n    var classes = require_classes();\n    var events = require_events();\n    var List = require_src();\n    module.exports = function(list) {\n      var isHidden = false;\n      var refresh = function(pagingList, options) {\n        if (list.page < 1) {\n          list.listContainer.style.display = \"none\";\n          isHidden = true;\n          return;\n        } else if (isHidden) {\n          list.listContainer.style.display = \"block\";\n        }\n        var item, l = list.matchingItems.length, index = list.i, page = list.page, pages = Math.ceil(l / page), currentPage = Math.ceil(index / page), innerWindow = options.innerWindow || 2, left = options.left || options.outerWindow || 0, right = options.right || options.outerWindow || 0;\n        right = pages - right;\n        pagingList.clear();\n        for (var i = 1; i <= pages; i++) {\n          var className = currentPage === i ? \"active\" : \"\";\n          if (is.number(i, left, right, currentPage, innerWindow)) {\n            item = pagingList.add({\n              page: i,\n              dotted: false\n            })[0];\n            if (className) {\n              classes(item.elm).add(className);\n            }\n            item.elm.firstChild.setAttribute(\"data-i\", i);\n            item.elm.firstChild.setAttribute(\"data-page\", page);\n          } else if (is.dotted(pagingList, i, left, right, currentPage, innerWindow, pagingList.size())) {\n            item = pagingList.add({\n              page: \"...\",\n              dotted: true\n            })[0];\n            classes(item.elm).add(\"disabled\");\n          }\n        }\n      };\n      var is = {\n        number: function(i, left, right, currentPage, innerWindow) {\n          return this.left(i, left) || this.right(i, right) || this.innerWindow(i, currentPage, innerWindow);\n        },\n        left: function(i, left) {\n          return i <= left;\n        },\n        right: function(i, right) {\n          return i > right;\n        },\n        innerWindow: function(i, currentPage, innerWindow) {\n          return i >= currentPage - innerWindow && i <= currentPage + innerWindow;\n        },\n        dotted: function(pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n          return this.dottedLeft(pagingList, i, left, right, currentPage, innerWindow) || this.dottedRight(pagingList, i, left, right, currentPage, innerWindow, currentPageItem);\n        },\n        dottedLeft: function(pagingList, i, left, right, currentPage, innerWindow) {\n          return i == left + 1 && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right);\n        },\n        dottedRight: function(pagingList, i, left, right, currentPage, innerWindow, currentPageItem) {\n          if (pagingList.items[currentPageItem - 1].values().dotted) {\n            return false;\n          } else {\n            return i == right && !this.innerWindow(i, currentPage, innerWindow) && !this.right(i, right);\n          }\n        }\n      };\n      return function(options) {\n        var pagingList = new List(list.listContainer.id, {\n          listClass: options.paginationClass || \"pagination\",\n          item: options.item || \"<li><a class='page' href='#'></a></li>\",\n          valueNames: [\"page\", \"dotted\"],\n          searchClass: \"pagination-search-that-is-not-supposed-to-exist\",\n          sortClass: \"pagination-sort-that-is-not-supposed-to-exist\"\n        });\n        events.bind(pagingList.listContainer, \"click\", function(e) {\n          var target = e.target || e.srcElement, page = list.utils.getAttribute(target, \"data-page\"), i = list.utils.getAttribute(target, \"data-i\");\n          if (i) {\n            list.show((i - 1) * page + 1, page);\n          }\n        });\n        list.on(\"updated\", function() {\n          refresh(pagingList, options);\n        });\n        refresh(pagingList, options);\n      };\n    };\n  }\n});\n\n// node_modules/list.js/src/parse.js\nvar require_parse = __commonJS({\n  \"node_modules/list.js/src/parse.js\"(exports, module) {\n    module.exports = function(list) {\n      var Item = require_item()(list);\n      var getChildren = function(parent) {\n        var nodes = parent.childNodes, items = [];\n        for (var i = 0, il = nodes.length; i < il; i++) {\n          if (nodes[i].data === void 0) {\n            items.push(nodes[i]);\n          }\n        }\n        return items;\n      };\n      var parse = function(itemElements, valueNames) {\n        for (var i = 0, il = itemElements.length; i < il; i++) {\n          list.items.push(new Item(valueNames, itemElements[i]));\n        }\n      };\n      var parseAsync = function(itemElements, valueNames) {\n        var itemsToIndex = itemElements.splice(0, 50);\n        parse(itemsToIndex, valueNames);\n        if (itemElements.length > 0) {\n          setTimeout(function() {\n            parseAsync(itemElements, valueNames);\n          }, 1);\n        } else {\n          list.update();\n          list.trigger(\"parseComplete\");\n        }\n      };\n      list.handlers.parseComplete = list.handlers.parseComplete || [];\n      return function() {\n        var itemsToIndex = getChildren(list.list), valueNames = list.valueNames;\n        if (list.indexAsync) {\n          parseAsync(itemsToIndex, valueNames);\n        } else {\n          parse(itemsToIndex, valueNames);\n        }\n      };\n    };\n  }\n});\n\n// node_modules/list.js/src/templater.js\nvar require_templater = __commonJS({\n  \"node_modules/list.js/src/templater.js\"(exports, module) {\n    var Templater = function(list) {\n      var createItem, templater = this;\n      var init = function() {\n        var itemSource;\n        if (typeof list.item === \"function\") {\n          createItem = function(values) {\n            var item = list.item(values);\n            return getItemSource(item);\n          };\n          return;\n        }\n        if (typeof list.item === \"string\") {\n          if (list.item.indexOf(\"<\") === -1) {\n            itemSource = document.getElementById(list.item);\n          } else {\n            itemSource = getItemSource(list.item);\n          }\n        } else {\n          itemSource = getFirstListItem();\n        }\n        if (!itemSource) {\n          throw new Error(\"The list needs to have at least one item on init otherwise you'll have to add a template.\");\n        }\n        itemSource = createCleanTemplateItem(itemSource, list.valueNames);\n        createItem = function() {\n          return itemSource.cloneNode(true);\n        };\n      };\n      var createCleanTemplateItem = function(templateNode, valueNames) {\n        var el = templateNode.cloneNode(true);\n        el.removeAttribute(\"id\");\n        for (var i = 0, il = valueNames.length; i < il; i++) {\n          var elm = void 0, valueName = valueNames[i];\n          if (valueName.data) {\n            for (var j = 0, jl = valueName.data.length; j < jl; j++) {\n              el.setAttribute(\"data-\" + valueName.data[j], \"\");\n            }\n          } else if (valueName.attr && valueName.name) {\n            elm = list.utils.getByClass(el, valueName.name, true);\n            if (elm) {\n              elm.setAttribute(valueName.attr, \"\");\n            }\n          } else {\n            elm = list.utils.getByClass(el, valueName, true);\n            if (elm) {\n              elm.innerHTML = \"\";\n            }\n          }\n        }\n        return el;\n      };\n      var getFirstListItem = function() {\n        var nodes = list.list.childNodes;\n        for (var i = 0, il = nodes.length; i < il; i++) {\n          if (nodes[i].data === void 0) {\n            return nodes[i].cloneNode(true);\n          }\n        }\n        return void 0;\n      };\n      var getItemSource = function(itemHTML) {\n        if (typeof itemHTML !== \"string\")\n          return void 0;\n        if (/<tr[\\s>]/g.exec(itemHTML)) {\n          var tbody = document.createElement(\"tbody\");\n          tbody.innerHTML = itemHTML;\n          return tbody.firstElementChild;\n        } else if (itemHTML.indexOf(\"<\") !== -1) {\n          var div = document.createElement(\"div\");\n          div.innerHTML = itemHTML;\n          return div.firstElementChild;\n        }\n        return void 0;\n      };\n      var getValueName = function(name) {\n        for (var i = 0, il = list.valueNames.length; i < il; i++) {\n          var valueName = list.valueNames[i];\n          if (valueName.data) {\n            var data = valueName.data;\n            for (var j = 0, jl = data.length; j < jl; j++) {\n              if (data[j] === name) {\n                return { data: name };\n              }\n            }\n          } else if (valueName.attr && valueName.name && valueName.name == name) {\n            return valueName;\n          } else if (valueName === name) {\n            return name;\n          }\n        }\n      };\n      var setValue = function(item, name, value) {\n        var elm = void 0, valueName = getValueName(name);\n        if (!valueName)\n          return;\n        if (valueName.data) {\n          item.elm.setAttribute(\"data-\" + valueName.data, value);\n        } else if (valueName.attr && valueName.name) {\n          elm = list.utils.getByClass(item.elm, valueName.name, true);\n          if (elm) {\n            elm.setAttribute(valueName.attr, value);\n          }\n        } else {\n          elm = list.utils.getByClass(item.elm, valueName, true);\n          if (elm) {\n            elm.innerHTML = value;\n          }\n        }\n      };\n      this.get = function(item, valueNames) {\n        templater.create(item);\n        var values = {};\n        for (var i = 0, il = valueNames.length; i < il; i++) {\n          var elm = void 0, valueName = valueNames[i];\n          if (valueName.data) {\n            for (var j = 0, jl = valueName.data.length; j < jl; j++) {\n              values[valueName.data[j]] = list.utils.getAttribute(item.elm, \"data-\" + valueName.data[j]);\n            }\n          } else if (valueName.attr && valueName.name) {\n            elm = list.utils.getByClass(item.elm, valueName.name, true);\n            values[valueName.name] = elm ? list.utils.getAttribute(elm, valueName.attr) : \"\";\n          } else {\n            elm = list.utils.getByClass(item.elm, valueName, true);\n            values[valueName] = elm ? elm.innerHTML : \"\";\n          }\n        }\n        return values;\n      };\n      this.set = function(item, values) {\n        if (!templater.create(item)) {\n          for (var v in values) {\n            if (values.hasOwnProperty(v)) {\n              setValue(item, v, values[v]);\n            }\n          }\n        }\n      };\n      this.create = function(item) {\n        if (item.elm !== void 0) {\n          return false;\n        }\n        item.elm = createItem(item.values());\n        templater.set(item, item.values());\n        return true;\n      };\n      this.remove = function(item) {\n        if (item.elm.parentNode === list.list) {\n          list.list.removeChild(item.elm);\n        }\n      };\n      this.show = function(item) {\n        templater.create(item);\n        list.list.appendChild(item.elm);\n      };\n      this.hide = function(item) {\n        if (item.elm !== void 0 && item.elm.parentNode === list.list) {\n          list.list.removeChild(item.elm);\n        }\n      };\n      this.clear = function() {\n        if (list.list.hasChildNodes()) {\n          while (list.list.childNodes.length >= 1) {\n            list.list.removeChild(list.list.firstChild);\n          }\n        }\n      };\n      init();\n    };\n    module.exports = function(list) {\n      return new Templater(list);\n    };\n  }\n});\n\n// node_modules/list.js/src/search.js\nvar require_search = __commonJS({\n  \"node_modules/list.js/src/search.js\"(exports, module) {\n    module.exports = function(list) {\n      var item, text, columns, searchString, customSearch;\n      var prepare = {\n        resetList: function() {\n          list.i = 1;\n          list.templater.clear();\n          customSearch = void 0;\n        },\n        setOptions: function(args) {\n          if (args.length == 2 && args[1] instanceof Array) {\n            columns = args[1];\n          } else if (args.length == 2 && typeof args[1] == \"function\") {\n            columns = void 0;\n            customSearch = args[1];\n          } else if (args.length == 3) {\n            columns = args[1];\n            customSearch = args[2];\n          } else {\n            columns = void 0;\n          }\n        },\n        setColumns: function() {\n          if (list.items.length === 0)\n            return;\n          if (columns === void 0) {\n            columns = list.searchColumns === void 0 ? prepare.toArray(list.items[0].values()) : list.searchColumns;\n          }\n        },\n        setSearchString: function(s) {\n          s = list.utils.toString(s).toLowerCase();\n          s = s.replace(/[-[\\]{}()*+?.,\\\\^$|#]/g, \"\\\\$&\");\n          searchString = s;\n        },\n        toArray: function(values) {\n          var tmpColumn = [];\n          for (var name in values) {\n            tmpColumn.push(name);\n          }\n          return tmpColumn;\n        }\n      };\n      var search = {\n        list: function() {\n          var words = [], phrase, ss = searchString;\n          while ((phrase = ss.match(/\"([^\"]+)\"/)) !== null) {\n            words.push(phrase[1]);\n            ss = ss.substring(0, phrase.index) + ss.substring(phrase.index + phrase[0].length);\n          }\n          ss = ss.trim();\n          if (ss.length)\n            words = words.concat(ss.split(/\\s+/));\n          for (var k = 0, kl = list.items.length; k < kl; k++) {\n            var item2 = list.items[k];\n            item2.found = false;\n            if (!words.length)\n              continue;\n            for (var i = 0, il = words.length; i < il; i++) {\n              var word_found = false;\n              for (var j = 0, jl = columns.length; j < jl; j++) {\n                var values = item2.values(), column = columns[j];\n                if (values.hasOwnProperty(column) && values[column] !== void 0 && values[column] !== null) {\n                  var text2 = typeof values[column] !== \"string\" ? values[column].toString() : values[column];\n                  if (text2.toLowerCase().indexOf(words[i]) !== -1) {\n                    word_found = true;\n                    break;\n                  }\n                }\n              }\n              if (!word_found)\n                break;\n            }\n            item2.found = word_found;\n          }\n        },\n        // Removed search.item() and search.values()\n        reset: function() {\n          list.reset.search();\n          list.searched = false;\n        }\n      };\n      var searchMethod = function(str) {\n        list.trigger(\"searchStart\");\n        prepare.resetList();\n        prepare.setSearchString(str);\n        prepare.setOptions(arguments);\n        prepare.setColumns();\n        if (searchString === \"\") {\n          search.reset();\n        } else {\n          list.searched = true;\n          if (customSearch) {\n            customSearch(searchString, columns);\n          } else {\n            search.list();\n          }\n        }\n        list.update();\n        list.trigger(\"searchComplete\");\n        return list.visibleItems;\n      };\n      list.handlers.searchStart = list.handlers.searchStart || [];\n      list.handlers.searchComplete = list.handlers.searchComplete || [];\n      list.utils.events.bind(\n        list.utils.getByClass(list.listContainer, list.searchClass),\n        \"keyup\",\n        list.utils.events.debounce(function(e) {\n          var target = e.target || e.srcElement, alreadyCleared = target.value === \"\" && !list.searched;\n          if (!alreadyCleared) {\n            searchMethod(target.value);\n          }\n        }, list.searchDelay)\n      );\n      list.utils.events.bind(list.utils.getByClass(list.listContainer, list.searchClass), \"input\", function(e) {\n        var target = e.target || e.srcElement;\n        if (target.value === \"\") {\n          searchMethod(\"\");\n        }\n      });\n      return searchMethod;\n    };\n  }\n});\n\n// node_modules/list.js/src/filter.js\nvar require_filter = __commonJS({\n  \"node_modules/list.js/src/filter.js\"(exports, module) {\n    module.exports = function(list) {\n      list.handlers.filterStart = list.handlers.filterStart || [];\n      list.handlers.filterComplete = list.handlers.filterComplete || [];\n      return function(filterFunction) {\n        list.trigger(\"filterStart\");\n        list.i = 1;\n        list.reset.filter();\n        if (filterFunction === void 0) {\n          list.filtered = false;\n        } else {\n          list.filtered = true;\n          var is = list.items;\n          for (var i = 0, il = is.length; i < il; i++) {\n            var item = is[i];\n            if (filterFunction(item)) {\n              item.filtered = true;\n            } else {\n              item.filtered = false;\n            }\n          }\n        }\n        list.update();\n        list.trigger(\"filterComplete\");\n        return list.visibleItems;\n      };\n    };\n  }\n});\n\n// node_modules/list.js/src/sort.js\nvar require_sort = __commonJS({\n  \"node_modules/list.js/src/sort.js\"(exports, module) {\n    module.exports = function(list) {\n      var buttons = {\n        els: void 0,\n        clear: function() {\n          for (var i = 0, il = buttons.els.length; i < il; i++) {\n            list.utils.classes(buttons.els[i]).remove(\"asc\");\n            list.utils.classes(buttons.els[i]).remove(\"desc\");\n          }\n        },\n        getOrder: function(btn) {\n          var predefinedOrder = list.utils.getAttribute(btn, \"data-order\");\n          if (predefinedOrder == \"asc\" || predefinedOrder == \"desc\") {\n            return predefinedOrder;\n          } else if (list.utils.classes(btn).has(\"desc\")) {\n            return \"asc\";\n          } else if (list.utils.classes(btn).has(\"asc\")) {\n            return \"desc\";\n          } else {\n            return \"asc\";\n          }\n        },\n        getInSensitive: function(btn, options) {\n          var insensitive = list.utils.getAttribute(btn, \"data-insensitive\");\n          if (insensitive === \"false\") {\n            options.insensitive = false;\n          } else {\n            options.insensitive = true;\n          }\n        },\n        setOrder: function(options) {\n          for (var i = 0, il = buttons.els.length; i < il; i++) {\n            var btn = buttons.els[i];\n            if (list.utils.getAttribute(btn, \"data-sort\") !== options.valueName) {\n              continue;\n            }\n            var predefinedOrder = list.utils.getAttribute(btn, \"data-order\");\n            if (predefinedOrder == \"asc\" || predefinedOrder == \"desc\") {\n              if (predefinedOrder == options.order) {\n                list.utils.classes(btn).add(options.order);\n              }\n            } else {\n              list.utils.classes(btn).add(options.order);\n            }\n          }\n        }\n      };\n      var sort = function() {\n        list.trigger(\"sortStart\");\n        var options = {};\n        var target = arguments[0].currentTarget || arguments[0].srcElement || void 0;\n        if (target) {\n          options.valueName = list.utils.getAttribute(target, \"data-sort\");\n          buttons.getInSensitive(target, options);\n          options.order = buttons.getOrder(target);\n        } else {\n          options = arguments[1] || options;\n          options.valueName = arguments[0];\n          options.order = options.order || \"asc\";\n          options.insensitive = typeof options.insensitive == \"undefined\" ? true : options.insensitive;\n        }\n        buttons.clear();\n        buttons.setOrder(options);\n        var customSortFunction = options.sortFunction || list.sortFunction || null, multi = options.order === \"desc\" ? -1 : 1, sortFunction;\n        if (customSortFunction) {\n          sortFunction = function(itemA, itemB) {\n            return customSortFunction(itemA, itemB, options) * multi;\n          };\n        } else {\n          sortFunction = function(itemA, itemB) {\n            var sort2 = list.utils.naturalSort;\n            sort2.alphabet = list.alphabet || options.alphabet || void 0;\n            if (!sort2.alphabet && options.insensitive) {\n              sort2 = list.utils.naturalSort.caseInsensitive;\n            }\n            return sort2(itemA.values()[options.valueName], itemB.values()[options.valueName]) * multi;\n          };\n        }\n        list.items.sort(sortFunction);\n        list.update();\n        list.trigger(\"sortComplete\");\n      };\n      list.handlers.sortStart = list.handlers.sortStart || [];\n      list.handlers.sortComplete = list.handlers.sortComplete || [];\n      buttons.els = list.utils.getByClass(list.listContainer, list.sortClass);\n      list.utils.events.bind(buttons.els, \"click\", sort);\n      list.on(\"searchStart\", buttons.clear);\n      list.on(\"filterStart\", buttons.clear);\n      return sort;\n    };\n  }\n});\n\n// node_modules/list.js/src/utils/fuzzy.js\nvar require_fuzzy = __commonJS({\n  \"node_modules/list.js/src/utils/fuzzy.js\"(exports, module) {\n    module.exports = function(text, pattern, options) {\n      var Match_Location = options.location || 0;\n      var Match_Distance = options.distance || 100;\n      var Match_Threshold = options.threshold || 0.4;\n      if (pattern === text)\n        return true;\n      if (pattern.length > 32)\n        return false;\n      var loc = Match_Location, s = function() {\n        var q = {}, i;\n        for (i = 0; i < pattern.length; i++) {\n          q[pattern.charAt(i)] = 0;\n        }\n        for (i = 0; i < pattern.length; i++) {\n          q[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n        }\n        return q;\n      }();\n      function match_bitapScore_(e, x) {\n        var accuracy = e / pattern.length, proximity = Math.abs(loc - x);\n        if (!Match_Distance) {\n          return proximity ? 1 : accuracy;\n        }\n        return accuracy + proximity / Match_Distance;\n      }\n      var score_threshold = Match_Threshold, best_loc = text.indexOf(pattern, loc);\n      if (best_loc != -1) {\n        score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n        best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n        if (best_loc != -1) {\n          score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n        }\n      }\n      var matchmask = 1 << pattern.length - 1;\n      best_loc = -1;\n      var bin_min, bin_mid;\n      var bin_max = pattern.length + text.length;\n      var last_rd;\n      for (var d = 0; d < pattern.length; d++) {\n        bin_min = 0;\n        bin_mid = bin_max;\n        while (bin_min < bin_mid) {\n          if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n            bin_min = bin_mid;\n          } else {\n            bin_max = bin_mid;\n          }\n          bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n        }\n        bin_max = bin_mid;\n        var start = Math.max(1, loc - bin_mid + 1);\n        var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n        var rd = Array(finish + 2);\n        rd[finish + 1] = (1 << d) - 1;\n        for (var j = finish; j >= start; j--) {\n          var charMatch = s[text.charAt(j - 1)];\n          if (d === 0) {\n            rd[j] = (rd[j + 1] << 1 | 1) & charMatch;\n          } else {\n            rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((last_rd[j + 1] | last_rd[j]) << 1 | 1) | last_rd[j + 1];\n          }\n          if (rd[j] & matchmask) {\n            var score = match_bitapScore_(d, j - 1);\n            if (score <= score_threshold) {\n              score_threshold = score;\n              best_loc = j - 1;\n              if (best_loc > loc) {\n                start = Math.max(1, 2 * loc - best_loc);\n              } else {\n                break;\n              }\n            }\n          }\n        }\n        if (match_bitapScore_(d + 1, loc) > score_threshold) {\n          break;\n        }\n        last_rd = rd;\n      }\n      return best_loc < 0 ? false : true;\n    };\n  }\n});\n\n// node_modules/list.js/src/fuzzy-search.js\nvar require_fuzzy_search = __commonJS({\n  \"node_modules/list.js/src/fuzzy-search.js\"(exports, module) {\n    var classes = require_classes();\n    var events = require_events();\n    var extend = require_extend();\n    var toString = require_to_string();\n    var getByClass = require_get_by_class();\n    var fuzzy = require_fuzzy();\n    module.exports = function(list, options) {\n      options = options || {};\n      options = extend(\n        {\n          location: 0,\n          distance: 100,\n          threshold: 0.4,\n          multiSearch: true,\n          searchClass: \"fuzzy-search\"\n        },\n        options\n      );\n      var fuzzySearch = {\n        search: function(searchString, columns) {\n          var searchArguments = options.multiSearch ? searchString.replace(/ +$/, \"\").split(/ +/) : [searchString];\n          for (var k = 0, kl = list.items.length; k < kl; k++) {\n            fuzzySearch.item(list.items[k], columns, searchArguments);\n          }\n        },\n        item: function(item, columns, searchArguments) {\n          var found = true;\n          for (var i = 0; i < searchArguments.length; i++) {\n            var foundArgument = false;\n            for (var j = 0, jl = columns.length; j < jl; j++) {\n              if (fuzzySearch.values(item.values(), columns[j], searchArguments[i])) {\n                foundArgument = true;\n              }\n            }\n            if (!foundArgument) {\n              found = false;\n            }\n          }\n          item.found = found;\n        },\n        values: function(values, value, searchArgument) {\n          if (values.hasOwnProperty(value)) {\n            var text = toString(values[value]).toLowerCase();\n            if (fuzzy(text, searchArgument, options)) {\n              return true;\n            }\n          }\n          return false;\n        }\n      };\n      events.bind(\n        getByClass(list.listContainer, options.searchClass),\n        \"keyup\",\n        list.utils.events.debounce(function(e) {\n          var target = e.target || e.srcElement;\n          list.search(target.value, fuzzySearch.search);\n        }, list.searchDelay)\n      );\n      return function(str, columns) {\n        list.search(str, columns, fuzzySearch.search);\n      };\n    };\n  }\n});\n\n// node_modules/list.js/src/index.js\nvar require_src = __commonJS({\n  \"node_modules/list.js/src/index.js\"(exports, module) {\n    var naturalSort = require_natural_compare();\n    var getByClass = require_get_by_class();\n    var extend = require_extend();\n    var indexOf = require_index_of();\n    var events = require_events();\n    var toString = require_to_string();\n    var classes = require_classes();\n    var getAttribute = require_get_attribute();\n    var toArray = require_to_array();\n    module.exports = function(id, options, values) {\n      var self = this, init, Item = require_item()(self), addAsync = require_add_async()(self), initPagination = require_pagination()(self);\n      init = {\n        start: function() {\n          self.listClass = \"list\";\n          self.searchClass = \"search\";\n          self.sortClass = \"sort\";\n          self.page = 1e4;\n          self.i = 1;\n          self.items = [];\n          self.visibleItems = [];\n          self.matchingItems = [];\n          self.searched = false;\n          self.filtered = false;\n          self.searchColumns = void 0;\n          self.searchDelay = 0;\n          self.handlers = { updated: [] };\n          self.valueNames = [];\n          self.utils = {\n            getByClass,\n            extend,\n            indexOf,\n            events,\n            toString,\n            naturalSort,\n            classes,\n            getAttribute,\n            toArray\n          };\n          self.utils.extend(self, options);\n          self.listContainer = typeof id === \"string\" ? document.getElementById(id) : id;\n          if (!self.listContainer) {\n            return;\n          }\n          self.list = getByClass(self.listContainer, self.listClass, true);\n          self.parse = require_parse()(self);\n          self.templater = require_templater()(self);\n          self.search = require_search()(self);\n          self.filter = require_filter()(self);\n          self.sort = require_sort()(self);\n          self.fuzzySearch = require_fuzzy_search()(self, options.fuzzySearch);\n          this.handlers();\n          this.items();\n          this.pagination();\n          self.update();\n        },\n        handlers: function() {\n          for (var handler in self.handlers) {\n            if (self[handler] && self.handlers.hasOwnProperty(handler)) {\n              self.on(handler, self[handler]);\n            }\n          }\n        },\n        items: function() {\n          self.parse(self.list);\n          if (values !== void 0) {\n            self.add(values);\n          }\n        },\n        pagination: function() {\n          if (options.pagination !== void 0) {\n            if (options.pagination === true) {\n              options.pagination = [{}];\n            }\n            if (options.pagination[0] === void 0) {\n              options.pagination = [options.pagination];\n            }\n            for (var i = 0, il = options.pagination.length; i < il; i++) {\n              initPagination(options.pagination[i]);\n            }\n          }\n        }\n      };\n      this.reIndex = function() {\n        self.items = [];\n        self.visibleItems = [];\n        self.matchingItems = [];\n        self.searched = false;\n        self.filtered = false;\n        self.parse(self.list);\n      };\n      this.toJSON = function() {\n        var json = [];\n        for (var i = 0, il = self.items.length; i < il; i++) {\n          json.push(self.items[i].values());\n        }\n        return json;\n      };\n      this.add = function(values2, callback) {\n        if (values2.length === 0) {\n          return;\n        }\n        if (callback) {\n          addAsync(values2.slice(0), callback);\n          return;\n        }\n        var added = [], notCreate = false;\n        if (values2[0] === void 0) {\n          values2 = [values2];\n        }\n        for (var i = 0, il = values2.length; i < il; i++) {\n          var item = null;\n          notCreate = self.items.length > self.page ? true : false;\n          item = new Item(values2[i], void 0, notCreate);\n          self.items.push(item);\n          added.push(item);\n        }\n        self.update();\n        return added;\n      };\n      this.show = function(i, page) {\n        this.i = i;\n        this.page = page;\n        self.update();\n        return self;\n      };\n      this.remove = function(valueName, value, options2) {\n        var found = 0;\n        for (var i = 0, il = self.items.length; i < il; i++) {\n          if (self.items[i].values()[valueName] == value) {\n            self.templater.remove(self.items[i], options2);\n            self.items.splice(i, 1);\n            il--;\n            i--;\n            found++;\n          }\n        }\n        self.update();\n        return found;\n      };\n      this.get = function(valueName, value) {\n        var matchedItems = [];\n        for (var i = 0, il = self.items.length; i < il; i++) {\n          var item = self.items[i];\n          if (item.values()[valueName] == value) {\n            matchedItems.push(item);\n          }\n        }\n        return matchedItems;\n      };\n      this.size = function() {\n        return self.items.length;\n      };\n      this.clear = function() {\n        self.templater.clear();\n        self.items = [];\n        return self;\n      };\n      this.on = function(event, callback) {\n        self.handlers[event].push(callback);\n        return self;\n      };\n      this.off = function(event, callback) {\n        var e = self.handlers[event];\n        var index = indexOf(e, callback);\n        if (index > -1) {\n          e.splice(index, 1);\n        }\n        return self;\n      };\n      this.trigger = function(event) {\n        var i = self.handlers[event].length;\n        while (i--) {\n          self.handlers[event][i](self);\n        }\n        return self;\n      };\n      this.reset = {\n        filter: function() {\n          var is = self.items, il = is.length;\n          while (il--) {\n            is[il].filtered = false;\n          }\n          return self;\n        },\n        search: function() {\n          var is = self.items, il = is.length;\n          while (il--) {\n            is[il].found = false;\n          }\n          return self;\n        }\n      };\n      this.update = function() {\n        var is = self.items, il = is.length;\n        self.visibleItems = [];\n        self.matchingItems = [];\n        self.templater.clear();\n        for (var i = 0; i < il; i++) {\n          if (is[i].matching() && self.matchingItems.length + 1 >= self.i && self.visibleItems.length < self.page) {\n            is[i].show();\n            self.visibleItems.push(is[i]);\n            self.matchingItems.push(is[i]);\n          } else if (is[i].matching()) {\n            self.matchingItems.push(is[i]);\n            is[i].hide();\n          } else {\n            is[i].hide();\n          }\n        }\n        self.trigger(\"updated\");\n        return self;\n      };\n      init.start();\n    };\n  }\n});\nexport default require_src();\n//# sourceMappingURL=list__js.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport List from \"list.js\"\n\nconst fileAttributes = [\"type\", \"upload-date\", \"name\", \"uploader\"]\n\nexport default class extends Controller {\n  static targets = [\"myFiles\", \"groupFiles\", \"searchInput\"]\n\n  connect() {\n    if (this.hasMyFilesTarget) {\n      this.myFilesList = new List(this.myFilesTarget, {\n        valueNames: fileAttributes\n      })\n    }\n\n    this.groupFilesList = new List(this.groupFilesTarget, {\n      valueNames: fileAttributes\n    })\n  }\n\n  searchFiles({ target: { value } }) {\n    if (this.myFilesList) {\n      this.myFilesList.fuzzySearch(value, fileAttributes)\n    }\n\n    this.groupFilesList.fuzzySearch(value, fileAttributes)\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"selectInput\",\n    \"existingMemberTemplate\",\n    \"newMemberTemplate\",\n    \"membershipsTable\",\n    \"membershipsTableBody\",\n    \"noMembersNotice\",\n    \"submitButton\"\n  ]\n  static values = {\n    groupId: Number,\n    teamId: Number\n  }\n\n  connect() {\n    this.index = 0;\n    this.membershipsAdded = {};\n    this.initializeMembershipSelect();\n    this.toggleVisibility();\n  }\n\n  disconnect() {\n    this.removeSelectInput();\n  }\n\n  initializeMembershipSelect() {\n    const options = {\n      tags: true,\n      minimumInputLength: 2,\n      maximumSelectionSize: 1,\n      multiple: true,\n      width: 'style',\n      templateResult: this.select2OptionTemplate,\n      ajax: {\n        url: $(this.selectInputTarget).data('search-url'),\n        dataType: 'json',\n        delay: 250,\n        data: params => {\n          return {\n            search: params.term,\n            page: params.page || 1,\n            group_id: this.groupIdValue,\n            from_team_id: this.teamIdValue\n          }\n        }\n      }\n    };\n    this.select2Instance = $(this.selectInputTarget).select2(options);\n    $(this.select2Instance).on('select2:selecting', (event) => this.onOptionSelected(event));\n    $(this.select2Instance).on('select2:open', () => {\n      setTimeout(() => document.querySelector('.select2-container--open .select2-search__field').focus(), 200)\n    });\n  }\n\n  select2OptionTemplate(option) {\n    if (option.email) {\n      return $(\n        `<div class=\"flex items-center group\">\n           <img src=\"${option.avatar_url}\" class=\"h-5 w-5 rounded-full ml-4\" />\n           <span class=\"ml-4\">${option.full_name}</span>\n           <span class=\"ml-4\">${option.email}</span>\n           <span class=\"ml-4 text-gray-400 italic\">${option.already_in_group ? \"Already a member\" : \"\"}</span>\n         </div>`\n      );\n    } else {\n      return $(`<span>Invite a new member</span>`);\n    }\n  }\n\n  onOptionSelected(event) {\n    event.preventDefault();\n    this.select2Instance.select2('close');\n    this.addGroupMembership(event.params.args.data);\n  }\n\n  addGroupMembership(membershipAdded) {\n    if (Object.values(this.membershipsAdded).find(membership => membership.id === membershipAdded.id)) {\n      alert(\"You have already selected this member.\");\n      return;\n    }\n\n    let content;\n\n    if (membershipAdded.email) {\n      content = $(this.existingMemberTemplateTarget).html()\n        .replace(\"{{avatar_url}}\", membershipAdded.avatar_url)\n        .replace(\"{{full_name}}\", membershipAdded.full_name)\n        .replace(\"{{email}}\", membershipAdded.email)\n        .replace(\"{{membership_id}}\", membershipAdded.id)\n        .replaceAll('{{index}}', this.index);\n    } else {\n      content = $(this.newMemberTemplateTarget).html().replaceAll('{{index}}', this.index);\n    }\n\n    $(this.membershipsTableBodyTarget).append(content);\n    this.membershipsAdded[this.index] = membershipAdded;\n    this.index++;\n    this.toggleVisibility();\n  }\n\n  removeGroupMembership(event) {\n    event.preventDefault();\n    const indexToRemove = $(event.target).data(\"index\");\n    $(this.membershipsTableBodyTarget).find(\"tr[data-index='\" + indexToRemove + \"']\").remove();\n    delete(this.membershipsAdded[indexToRemove]);\n    this.toggleVisibility();\n  }\n\n  removeSelectInput() {\n    this.select2Instance.select2('destroy');\n  }\n\n  toggleVisibility() {\n    if (Object.keys(this.membershipsAdded).length === 0) {\n      $(this.noMembersNoticeTarget).show();\n      $(this.membershipsTableTarget).hide();\n      this.submitButtonTarget.setAttribute(\"disabled\", true);\n    } else {\n      $(this.noMembersNoticeTarget).hide();\n      $(this.membershipsTableTarget).show();\n      this.submitButtonTarget.removeAttribute(\"disabled\");\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport List from \"list.js\"\n\nexport default class extends Controller {\n  static targets = [\"table\", \"searchInput\"]\n  static values = {\n    columns: Array\n  }\n\n  connect() {\n    this.columns = this.columnsValue.map(column => {\n      if (typeof column === \"string\") {\n        return `table-cell-${column}`\n      } else {\n        return `table-cell-${column.name}`\n      }\n    })\n    this.tableInstance = new List(this.tableTarget, {\n      valueNames: this.columns\n    })\n  }\n\n  searchCells({ target: { value } }) {\n    this.tableInstance.fuzzySearch(value, this.columns)\n  }\n}\n","import TableController from \"./table_controller\";\n\nexport default class extends TableController {\n  connect() {\n    super.connect();\n  }\n\n  toggleRemovedMembers(event) {\n    event.preventDefault()\n    const button = event.target\n    const isGoingToShowRemoved = button.textContent === \"Show converted/removed members\"\n    button.textContent = isGoingToShowRemoved ? \"Hide converted/removed members\" : \"Show converted/removed members\"\n\n    this.tableInstance.items.forEach(item => {\n      if (item.elm.dataset.inactive === \"true\") {\n        item.elm.classList.toggle(\"hidden\")\n      }\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"roleSelect\",\n    \"subgroupsSelect\"\n  ]\n\n  connect() {\n    this.allMembersSelected = false\n\n    $(this.roleSelectTargets).select2({\n      minimumResultsForSearch: Infinity,\n      theme: \"default borderless\"\n    })\n\n    $(this.subgroupsSelectTargets).select2({\n      multiple: true,\n      width: \"style\",\n      minimumResultsForSearch: Infinity,\n      theme: \"default borderless\"\n    })\n\n    $(this.roleSelectTargets).on(\"select2:select\", ({ target: { value }}) => {\n      if (this.allMembersSelected) {\n        $(this.roleSelectTargets).val(value).trigger(\"change\")\n      }\n    })\n  }\n\n  toggleMembersCheckboxes(isChecked) {\n    for (const checkbox of document.querySelectorAll(\"input[name='select_member[]']\")) {\n      checkbox.checked = isChecked\n    }\n  }\n\n  toggleAllMembers(event) {\n    event.preventDefault()\n    const button = event.target\n    const isGoingToSelectAll = button.textContent === \"Select all\"\n    this.toggleMembersCheckboxes(isGoingToSelectAll)\n    this.allMembersSelected = isGoingToSelectAll\n    button.textContent = isGoingToSelectAll ? \"Unselect all\" : \"Select all\"\n  }\n}\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/chart.js/dist/chunks/helpers.segment.mjs\nfunction noop() {\n}\nvar uid = /* @__PURE__ */ function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}();\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === \"undefined\";\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === \"[object\" && type.slice(-6) === \"Array]\") {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === \"[object Object]\";\n}\nvar isNumberFinite = (value) => (typeof value === \"number\" || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === \"undefined\" ? defaultValue : value;\n}\nvar toPercentage = (value, dimension) => typeof value === \"string\" && value.endsWith(\"%\") ? parseFloat(value) / 100 : value / dimension;\nvar toDimension = (value, dimension) => typeof value === \"string\" && value.endsWith(\"%\") ? parseFloat(value) / 100 * dimension : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === \"function\") {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = /* @__PURE__ */ Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return [\"__proto__\", \"prototype\", \"constructor\"].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, { merger: _mergerIf });\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nvar keyResolvers = {\n  \"\": (v) => v,\n  x: (o) => o.x,\n  y: (o) => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return (obj) => {\n    for (const k of keys) {\n      if (k === \"\") {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split(\".\");\n  const keys = [];\n  let tmp = \"\";\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith(\"\\\\\")) {\n      tmp = tmp.slice(0, -1) + \".\";\n    } else {\n      keys.push(tmp);\n      tmp = \"\";\n    }\n  }\n  return keys;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nvar defined = (value) => typeof value !== \"undefined\";\nvar isFunction = (value) => typeof value === \"function\";\nvar setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === \"mouseup\" || e.type === \"click\" || e.type === \"contextmenu\";\n}\nvar PI = Math.PI;\nvar TAU = 2 * PI;\nvar PITAU = TAU + PI;\nvar INFINITY = Number.POSITIVE_INFINITY;\nvar RAD_PER_DEG = PI / 180;\nvar HALF_PI = PI / 2;\nvar QUARTER_PI = PI / 4;\nvar TWO_THIRDS_PI = PI * 2 / 3;\nvar log10 = Math.log10;\nvar sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1e3) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return rounded - epsilon <= x && rounded + epsilon >= x;\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < -0.5 * PI) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index2) => table[index2] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = lo + hi >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return { lo, hi };\n}\nvar _lookupByKey = (table, key, value, last) => _lookup(table, value, last ? (index2) => table[index2][key] <= value : (index2) => table[index2][key] < value);\nvar _rlookupByKey = (table, key, value) => _lookup(table, value, (index2) => table[index2][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nvar arrayEvents = [\"push\", \"pop\", \"shift\", \"splice\", \"unshift\"];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, \"_chartjs\", {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = \"_onData\" + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === \"function\") {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index2 = listeners.indexOf(listener);\n  if (index2 !== -1) {\n    listeners.splice(index2, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set2 = /* @__PURE__ */ new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set2.add(items[i]);\n  }\n  if (set2.size === ilen) {\n    return items;\n  }\n  return Array.from(set2);\n}\nvar requestAnimFrame = function() {\n  if (typeof window === \"undefined\") {\n    return function(callback2) {\n      return callback2();\n    };\n  }\n  return window.requestAnimationFrame;\n}();\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args2) => Array.prototype.slice.call(args2));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nvar _toLeftRightCenter = (align) => align === \"start\" ? \"left\" : align === \"end\" ? \"right\" : \"center\";\nvar _alignStartEnd = (align, start, end) => align === \"start\" ? start : align === \"end\" ? end : (start + end) / 2;\nvar _textX = (align, left, right, rtl) => {\n  const check = rtl ? \"left\" : \"right\";\n  return align === check ? right : align === \"center\" ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const { iScale, _parsed } = meta;\n    const axis = iScale.axis;\n    const { min, max, minDefined, maxDefined } = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(\n        Math.min(\n          _lookupByKey(_parsed, iScale.axis, min).lo,\n          animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo\n        ),\n        0,\n        pointCount - 1\n      );\n    }\n    if (maxDefined) {\n      count = _limitValue(\n        Math.max(\n          _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n          animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1\n        ),\n        start,\n        pointCount\n      ) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return { start, count };\n}\nfunction _scaleRangesChanged(meta) {\n  const { xScale, yScale, _scaleRanges } = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\nvar atEdge = (t) => t === 0 || t === 1;\nvar elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nvar elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nvar effects = {\n  linear: (t) => t,\n  easeInQuad: (t) => t * t,\n  easeOutQuad: (t) => -t * (t - 2),\n  easeInOutQuad: (t) => (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n  easeInCubic: (t) => t * t * t,\n  easeOutCubic: (t) => (t -= 1) * t * t + 1,\n  easeInOutCubic: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: (t) => t * t * t * t,\n  easeOutQuart: (t) => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: (t) => t * t * t * t * t,\n  easeOutQuint: (t) => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: (t) => (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: (t) => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: (t) => Math.sin(t * HALF_PI),\n  easeInOutSine: (t) => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: (t) => t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: (t) => t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: (t) => atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: (t) => t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: (t) => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: (t) => (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: (t) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: (t) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n  },\n  easeInBounce: (t) => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < 1 / d) {\n      return m * t * t;\n    }\n    if (t < 2 / d) {\n      return m * (t -= 1.5 / d) * t + 0.75;\n    }\n    if (t < 2.5 / d) {\n      return m * (t -= 2.25 / d) * t + 0.9375;\n    }\n    return m * (t -= 2.625 / d) * t + 0.984375;\n  },\n  easeInOutBounce: (t) => t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nvar lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nvar map$1 = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 };\nvar hex = [...\"0123456789ABCDEF\"];\nvar h1 = (b) => hex[b & 15];\nvar h2 = (b) => hex[(b & 240) >> 4] + hex[b & 15];\nvar eq = (b) => (b & 240) >> 4 === (b & 15);\nvar isShort = (v) => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === \"#\") {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255\n      };\n    }\n  }\n  return ret;\n}\nvar alpha = (a, f) => a < 255 ? f(a) : \"\";\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v ? \"#\" + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : void 0;\n}\nvar HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return (g - b) / d + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === \"hwb\") {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === \"hsv\") {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255 ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})` : `hsl(${h}, ${s}%, ${l}%)`;\n}\nvar map = {\n  x: \"dark\",\n  Z: \"light\",\n  Y: \"re\",\n  X: \"blu\",\n  W: \"gr\",\n  V: \"medium\",\n  U: \"slate\",\n  A: \"ee\",\n  T: \"ol\",\n  S: \"or\",\n  B: \"ra\",\n  C: \"lateg\",\n  D: \"ights\",\n  R: \"in\",\n  Q: \"turquois\",\n  E: \"hi\",\n  P: \"ro\",\n  O: \"al\",\n  N: \"le\",\n  M: \"de\",\n  L: \"yello\",\n  F: \"en\",\n  K: \"ch\",\n  G: \"arks\",\n  H: \"ea\",\n  I: \"ightg\",\n  J: \"wh\"\n};\nvar names$1 = {\n  OiceXe: \"f0f8ff\",\n  antiquewEte: \"faebd7\",\n  aqua: \"ffff\",\n  aquamarRe: \"7fffd4\",\n  azuY: \"f0ffff\",\n  beige: \"f5f5dc\",\n  bisque: \"ffe4c4\",\n  black: \"0\",\n  blanKedOmond: \"ffebcd\",\n  Xe: \"ff\",\n  XeviTet: \"8a2be2\",\n  bPwn: \"a52a2a\",\n  burlywood: \"deb887\",\n  caMtXe: \"5f9ea0\",\n  KartYuse: \"7fff00\",\n  KocTate: \"d2691e\",\n  cSO: \"ff7f50\",\n  cSnflowerXe: \"6495ed\",\n  cSnsilk: \"fff8dc\",\n  crimson: \"dc143c\",\n  cyan: \"ffff\",\n  xXe: \"8b\",\n  xcyan: \"8b8b\",\n  xgTMnPd: \"b8860b\",\n  xWay: \"a9a9a9\",\n  xgYF: \"6400\",\n  xgYy: \"a9a9a9\",\n  xkhaki: \"bdb76b\",\n  xmagFta: \"8b008b\",\n  xTivegYF: \"556b2f\",\n  xSange: \"ff8c00\",\n  xScEd: \"9932cc\",\n  xYd: \"8b0000\",\n  xsOmon: \"e9967a\",\n  xsHgYF: \"8fbc8f\",\n  xUXe: \"483d8b\",\n  xUWay: \"2f4f4f\",\n  xUgYy: \"2f4f4f\",\n  xQe: \"ced1\",\n  xviTet: \"9400d3\",\n  dAppRk: \"ff1493\",\n  dApskyXe: \"bfff\",\n  dimWay: \"696969\",\n  dimgYy: \"696969\",\n  dodgerXe: \"1e90ff\",\n  fiYbrick: \"b22222\",\n  flSOwEte: \"fffaf0\",\n  foYstWAn: \"228b22\",\n  fuKsia: \"ff00ff\",\n  gaRsbSo: \"dcdcdc\",\n  ghostwEte: \"f8f8ff\",\n  gTd: \"ffd700\",\n  gTMnPd: \"daa520\",\n  Way: \"808080\",\n  gYF: \"8000\",\n  gYFLw: \"adff2f\",\n  gYy: \"808080\",\n  honeyMw: \"f0fff0\",\n  hotpRk: \"ff69b4\",\n  RdianYd: \"cd5c5c\",\n  Rdigo: \"4b0082\",\n  ivSy: \"fffff0\",\n  khaki: \"f0e68c\",\n  lavFMr: \"e6e6fa\",\n  lavFMrXsh: \"fff0f5\",\n  lawngYF: \"7cfc00\",\n  NmoncEffon: \"fffacd\",\n  ZXe: \"add8e6\",\n  ZcSO: \"f08080\",\n  Zcyan: \"e0ffff\",\n  ZgTMnPdLw: \"fafad2\",\n  ZWay: \"d3d3d3\",\n  ZgYF: \"90ee90\",\n  ZgYy: \"d3d3d3\",\n  ZpRk: \"ffb6c1\",\n  ZsOmon: \"ffa07a\",\n  ZsHgYF: \"20b2aa\",\n  ZskyXe: \"87cefa\",\n  ZUWay: \"778899\",\n  ZUgYy: \"778899\",\n  ZstAlXe: \"b0c4de\",\n  ZLw: \"ffffe0\",\n  lime: \"ff00\",\n  limegYF: \"32cd32\",\n  lRF: \"faf0e6\",\n  magFta: \"ff00ff\",\n  maPon: \"800000\",\n  VaquamarRe: \"66cdaa\",\n  VXe: \"cd\",\n  VScEd: \"ba55d3\",\n  VpurpN: \"9370db\",\n  VsHgYF: \"3cb371\",\n  VUXe: \"7b68ee\",\n  VsprRggYF: \"fa9a\",\n  VQe: \"48d1cc\",\n  VviTetYd: \"c71585\",\n  midnightXe: \"191970\",\n  mRtcYam: \"f5fffa\",\n  mistyPse: \"ffe4e1\",\n  moccasR: \"ffe4b5\",\n  navajowEte: \"ffdead\",\n  navy: \"80\",\n  Tdlace: \"fdf5e6\",\n  Tive: \"808000\",\n  TivedBb: \"6b8e23\",\n  Sange: \"ffa500\",\n  SangeYd: \"ff4500\",\n  ScEd: \"da70d6\",\n  pOegTMnPd: \"eee8aa\",\n  pOegYF: \"98fb98\",\n  pOeQe: \"afeeee\",\n  pOeviTetYd: \"db7093\",\n  papayawEp: \"ffefd5\",\n  pHKpuff: \"ffdab9\",\n  peru: \"cd853f\",\n  pRk: \"ffc0cb\",\n  plum: \"dda0dd\",\n  powMrXe: \"b0e0e6\",\n  purpN: \"800080\",\n  YbeccapurpN: \"663399\",\n  Yd: \"ff0000\",\n  Psybrown: \"bc8f8f\",\n  PyOXe: \"4169e1\",\n  saddNbPwn: \"8b4513\",\n  sOmon: \"fa8072\",\n  sandybPwn: \"f4a460\",\n  sHgYF: \"2e8b57\",\n  sHshell: \"fff5ee\",\n  siFna: \"a0522d\",\n  silver: \"c0c0c0\",\n  skyXe: \"87ceeb\",\n  UXe: \"6a5acd\",\n  UWay: \"708090\",\n  UgYy: \"708090\",\n  snow: \"fffafa\",\n  sprRggYF: \"ff7f\",\n  stAlXe: \"4682b4\",\n  tan: \"d2b48c\",\n  teO: \"8080\",\n  tEstN: \"d8bfd8\",\n  tomato: \"ff6347\",\n  Qe: \"40e0d0\",\n  viTet: \"ee82ee\",\n  JHt: \"f5deb3\",\n  wEte: \"ffffff\",\n  wEtesmoke: \"f5f5f5\",\n  Lw: \"ffff00\",\n  LwgYF: \"9acd32\"\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 255, k >> 8 & 255, k & 255];\n  }\n  return unpacked;\n}\nvar names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nvar RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r,\n    g,\n    b,\n    a\n  };\n}\nfunction rgbString(v) {\n  return v && (v.a < 255 ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})` : `rgb(${v.r}, ${v.g}, ${v.b})`);\n}\nvar to = (v) => v <= 31308e-7 ? v * 12.92 : Math.pow(v, 1 / 2.4) * 1.055 - 0.055;\nvar from = (v) => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = { r: 0, g: 0, b: 0, a: 255 };\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = { r: input[0], g: input[1], b: input[2], a: 255 };\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, { r: 0, g: 0, b: 0, a: 1 });\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === \"r\") {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nvar Color = class _Color {\n  constructor(input) {\n    if (input instanceof _Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === \"object\") {\n      v = fromObject(input);\n    } else if (type === \"string\") {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : void 0;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : void 0;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : void 0;\n  }\n  mix(color2, weight) {\n    if (color2) {\n      const c1 = this.rgb;\n      const c2 = color2.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2;\n      w2 = 1 - w1;\n      c1.r = 255 & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 255 & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 255 & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color2, t) {\n    if (color2) {\n      this._rgb = interpolate(this._rgb, color2._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new _Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n};\nfunction index_esm(input) {\n  return new Color(input);\n}\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === \"object\") {\n    const type = value.toString();\n    return type === \"[object CanvasPattern]\" || type === \"[object CanvasGradient]\";\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\nvar overrides = /* @__PURE__ */ Object.create(null);\nvar descriptors = /* @__PURE__ */ Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split(\".\");\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = /* @__PURE__ */ Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === \"string\") {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, \"\"), scope);\n}\nvar Defaults = class {\n  constructor(_descriptors2) {\n    this.animation = void 0;\n    this.backgroundColor = \"rgba(0,0,0,0.1)\";\n    this.borderColor = \"rgba(0,0,0,0.1)\";\n    this.color = \"#666\";\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      \"mousemove\",\n      \"mouseout\",\n      \"click\",\n      \"touchstart\",\n      \"touchmove\"\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: \"normal\",\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = \"x\";\n    this.interaction = {\n      mode: \"nearest\",\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = void 0;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors2);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = \"_\" + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n};\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith(\"on\"),\n  _indexable: (name) => name !== \"events\",\n  hover: {\n    _fallback: \"interaction\"\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false\n  }\n});\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + \" \" : \"\") + (font.weight ? font.weight + \" \" : \"\") + font.size + \"px \" + font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== void 0 && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== void 0 && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext(\"2d\");\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === \"object\") {\n    type = style.toString();\n    if (type === \"[object HTMLImageElement]\" || type === \"[object HTMLCanvasElement]\") {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case \"triangle\":\n      ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case \"rectRounded\":\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case \"rect\":\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    case \"rectRot\":\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      ctx.closePath();\n      break;\n    case \"crossRot\":\n      rad += QUARTER_PI;\n    case \"cross\":\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n    case \"star\":\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      rad += QUARTER_PI;\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      ctx.moveTo(x + yOffset, y - xOffset);\n      ctx.lineTo(x - yOffset, y + xOffset);\n      break;\n    case \"line\":\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case \"dash\":\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n      break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === \"middle\") {\n    const midpoint = (previous.x + target.x) / 2;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === \"after\" !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y\n  );\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== \"\";\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const { x, y, w, h, radius } = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\nvar LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nvar FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = (\"\" + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === \"normal\") {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n    case \"px\":\n      return value;\n    case \"%\":\n      value /= 100;\n      break;\n  }\n  return size * value;\n}\nvar numberOrZero = (v) => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value) ? objProps ? (prop) => valueOrDefault(value[prop], value[props[prop]]) : (prop) => value[prop] : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, { top: \"y\", right: \"x\", bottom: \"y\", left: \"x\" });\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, [\"topLeft\", \"topRight\", \"bottomLeft\", \"bottomRight\"]);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === \"string\") {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !(\"\" + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = \"\";\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: \"\"\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index2, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === void 0) {\n      continue;\n    }\n    if (context !== void 0 && typeof value === \"function\") {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index2 !== void 0 && isArray(value)) {\n      value = value[index2 % value.length];\n      cacheable = false;\n    }\n    if (value !== void 0) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const { min, max } = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\nfunction _createResolver(scopes, prefixes = [\"\"], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve(\"_fallback\", scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: \"Object\",\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(\n        target,\n        prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target)\n      );\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: /* @__PURE__ */ new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(\n        target,\n        prop,\n        () => _resolveWithContext(target, prop, receiver)\n      );\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? { enumerable: true, configurable: true } : void 0 : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults2 = { scriptable: true, indexable: true }) {\n  const { _scriptable = defaults2.scriptable, _indexable = defaults2.indexable, _allKeys = defaults2.allKeys } = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nvar readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nvar needsSubResolver = (prop, value) => isObject(value) && prop !== \"adapters\" && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve2) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve2();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors2.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors2.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors2);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const { _proxy, _context, _subProxy, _stack } = target;\n  if (_stack.has(prop)) {\n    throw new Error(\"Recursion detected: \" + Array.from(_stack).join(\"->\") + \"->\" + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const { _proxy, _context, _subProxy, _descriptors: descriptors2 } = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter((s) => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors2));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nvar getScope = (key, parent) => key === true ? parent : typeof key === \"string\" ? resolveObjectKey(parent, key) : void 0;\nfunction addScopes(set2, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set2.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set2 = /* @__PURE__ */ new Set();\n  set2.add(value);\n  let key = addScopesFromKey(set2, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set2, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(\n    Array.from(set2),\n    [\"\"],\n    rootScopes,\n    fallback,\n    () => subGetTarget(resolver, prop, value)\n  );\n}\nfunction addScopesFromKey(set2, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set2, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set2 = /* @__PURE__ */ new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter((k) => !k.startsWith(\"_\"))) {\n      set2.add(key);\n    }\n  }\n  return Array.from(set2);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const { iScale } = meta;\n  const { key = \"r\" } = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index2, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index2 = i + start;\n    item = data[index2];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index2)\n    };\n  }\n  return parsed;\n}\nvar EPSILON = Number.EPSILON || 1e-14;\nvar getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nvar getValueAxis = (indexAxis) => indexAxis === \"x\" ? \"y\" : \"x\";\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = \"x\") {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = \"x\") {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === \"monotone\") {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\nfunction _isDomSupported() {\n  return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === \"[object ShadowRoot]\") {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === \"string\") {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf(\"%\") !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nvar getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nvar positions = [\"top\", \"right\", \"bottom\", \"left\"];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? \"-\" + suffix : \"\";\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + \"-\" + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nvar useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const { offsetX, offsetY } = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return { x, y, box };\n}\nfunction getRelativePosition(evt, chart) {\n  if (\"native\" in evt) {\n    return evt;\n  }\n  const { canvas, currentDevicePixelRatio } = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === \"border-box\";\n  const paddings = getPositionedStyle(style, \"padding\");\n  const borders = getPositionedStyle(style, \"border\", \"width\");\n  const { x, y, box } = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let { width, height } = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === void 0 || height === void 0) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, \"border\", \"width\");\n      const containerPadding = getPositionedStyle(containerStyle, \"padding\");\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, \"clientWidth\");\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, \"clientHeight\");\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nvar round1 = (v) => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, \"margin\");\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, \"clientWidth\") || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, \"clientHeight\") || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let { width, height } = containerSize;\n  if (style.boxSizing === \"content-box\") {\n    const borders = getPositionedStyle(style, \"border\", \"width\");\n    const paddings = getPositionedStyle(style, \"padding\");\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nvar supportsEventListenerOptions = function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener(\"test\", null, options);\n    window.removeEventListener(\"test\", null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}();\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : void 0;\n}\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === \"middle\" ? t < 0.5 ? p1.y : p2.y : mode === \"after\" ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = { x: p1.cp2x, y: p1.cp2y };\n  const cp2 = { x: p2.cp1x, y: p2.cp1y };\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\nvar intlCache = /* @__PURE__ */ new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\nvar getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === \"center\") {\n        return align;\n      }\n      return align === \"right\" ? \"left\" : \"right\";\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    }\n  };\n};\nvar getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    }\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === \"ltr\" || direction === \"rtl\") {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue(\"direction\"),\n      style.getPropertyPriority(\"direction\")\n    ];\n    style.setProperty(\"direction\", direction, \"important\");\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== void 0) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty(\"direction\", original[0], original[1]);\n  }\n}\nfunction propertyFn(property) {\n  if (property === \"angle\") {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: (x) => x\n  };\n}\nfunction normalizeSegment({ start, end, count, loop, style }) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const { property, start: startBound, end: endBound } = bounds;\n  const { between, normalize } = propertyFn(property);\n  const count = points.length;\n  let { start, end, loop } = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return { start, end, loop, style: segment.style };\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const { property, start: startBound, end: endBound } = bounds;\n  const count = points.length;\n  const { compare, between, normalize } = propertyFn(property);\n  const { start, end, loop, style } = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({ start: subStart, end: i, loop, count, style }));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({ start: subStart, end, loop, count, style }));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return { start, end };\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({ start: start % count, end: (end - 1) % count, loop });\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({ start: start % count, end: last % count, loop });\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const { start, end } = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{ start, end, loop }], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const { _datasetIndex: datasetIndex, options: { spanGaps } } = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({ start: s % count, end: e % count, loop: l, style: st });\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: \"segment\",\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\n// node_modules/chart.js/dist/chart.mjs\nvar Animator = class {\n  constructor() {\n    this._request = null;\n    this._charts = /* @__PURE__ */ new Map();\n    this._running = false;\n    this._lastDate = void 0;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach((fn) => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw2 = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw2 = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw2) {\n        chart.draw();\n        this._notify(chart, anims, date, \"progress\");\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, \"complete\");\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), \"complete\");\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n};\nvar animator = new Animator();\nvar transparent = \"transparent\";\nvar interpolators = {\n  boolean(from2, to2, factor) {\n    return factor > 0.5 ? to2 : from2;\n  },\n  color(from2, to2, factor) {\n    const c0 = color(from2 || transparent);\n    const c1 = c0.valid && color(to2 || transparent);\n    return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to2;\n  },\n  number(from2, to2, factor) {\n    return from2 + (to2 - from2) * factor;\n  }\n};\nvar Animation = class {\n  constructor(cfg, target, prop, to2) {\n    const currentValue = target[prop];\n    to2 = resolve([cfg.to, to2, currentValue, cfg.from]);\n    const from2 = resolve([cfg.from, currentValue, to2]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from2];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from2;\n    this._to = to2;\n    this._promises = void 0;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to2, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to2, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to2]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from2 = this._from;\n    const loop = this._loop;\n    const to2 = this._to;\n    let factor;\n    this._active = from2 !== to2 && (loop || elapsed < duration);\n    if (!this._active) {\n      this._target[prop] = to2;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from2;\n      return;\n    }\n    factor = elapsed / duration % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from2, to2, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({ res, rej });\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? \"res\" : \"rej\";\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n};\nvar numbers = [\"x\", \"y\", \"borderWidth\", \"radius\", \"tension\"];\nvar colors = [\"color\", \"borderColor\", \"backgroundColor\"];\ndefaults.set(\"animation\", {\n  delay: void 0,\n  duration: 1e3,\n  easing: \"easeOutQuart\",\n  fn: void 0,\n  from: void 0,\n  loop: void 0,\n  to: void 0,\n  type: void 0\n});\nvar animationOptions = Object.keys(defaults.animation);\ndefaults.describe(\"animation\", {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== \"onProgress\" && name !== \"onComplete\" && name !== \"fn\"\n});\ndefaults.set(\"animations\", {\n  colors: {\n    type: \"color\",\n    properties: colors\n  },\n  numbers: {\n    type: \"number\",\n    properties: numbers\n  }\n});\ndefaults.describe(\"animations\", {\n  _fallback: \"animation\"\n});\ndefaults.set(\"transitions\", {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: \"transparent\"\n      },\n      visible: {\n        type: \"boolean\",\n        duration: 0\n      }\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: \"transparent\"\n      },\n      visible: {\n        type: \"boolean\",\n        easing: \"linear\",\n        fn: (v) => v | 0\n      }\n    }\n  }\n});\nvar Animations = class {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = /* @__PURE__ */ new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach((key) => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === \"$\") {\n        continue;\n      }\n      if (prop === \"options\") {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n};\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, { $shared: false, $animations: {} });\n  }\n  return options;\n}\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === void 0 ? allowedOverflow : 0;\n  const max = opts.max === void 0 ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === \"single\";\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || stacked === void 0 && meta.stack !== void 0;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const { min, max, minDefined, maxDefined } = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if (positive && value > 0 || !positive && value < 0) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const { chart, _cachedMeta: meta } = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const { iScale, vScale, index: datasetIndex } = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const { [iAxis]: index2, [vAxis]: value } = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index2);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales2 = chart.scales;\n  return Object.keys(scales2).filter((key) => scales2[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index2) {\n  return createContext(\n    parent,\n    {\n      active: false,\n      dataset: void 0,\n      datasetIndex: index2,\n      index: index2,\n      mode: \"default\",\n      type: \"dataset\"\n    }\n  );\n}\nfunction createDataContext(parent, index2, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index2,\n    parsed: void 0,\n    raw: void 0,\n    element,\n    index: index2,\n    mode: \"default\",\n    type: \"data\"\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === void 0 || stacks[axis][datasetIndex] === void 0) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nvar isDirectUpdateMode = (mode) => mode === \"reset\" || mode === \"none\";\nvar cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nvar createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked && { keys: getSortedDatasetIndices(chart, true), values: null };\nvar DatasetController = class {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = void 0;\n    this._parsing = false;\n    this._data = void 0;\n    this._objectData = void 0;\n    this._sharedOptions = void 0;\n    this._drawStart = void 0;\n    this._drawCount = void 0;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = void 0;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === \"x\" ? x : axis === \"r\" ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, \"x\"));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, \"y\"));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, \"r\"));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale ? meta.vScale : meta.iScale;\n  }\n  reset() {\n    this._update(\"reset\");\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const { _cachedMeta: meta, _data: data } = this;\n    const { iScale, _stacked } = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const { iScale, vScale } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index2;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index2 = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index2], index2),\n        [vAxis]: vScale.parse(data[index2], index2)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const { xScale, yScale } = meta;\n    const parsed = new Array(count);\n    let i, ilen, index2, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index2 = i + start;\n      item = data[index2];\n      parsed[i] = {\n        x: xScale.parse(item[0], index2),\n        y: yScale.parse(item[1], index2)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const { xScale, yScale } = meta;\n    const { xAxisKey = \"x\", yAxisKey = \"y\" } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index2, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index2 = i + start;\n      item = data[index2];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index2),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index2)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index2) {\n    return this._cachedMeta._parsed[index2];\n  }\n  getDataElement(index2) {\n    return this._cachedMeta.data[index2];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, { mode });\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY };\n    const { min: otherMin, max: otherMax } = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index2) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index2);\n    return {\n      label: iScale ? \"\" + iScale.getLabelForValue(parsed[iScale.axis]) : \"\",\n      value: vScale ? \"\" + vScale.getLabelForValue(parsed[vScale.axis]) : \"\"\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || \"default\");\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {\n  }\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements2 = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || elements2.length - start;\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements2[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index2, active) {\n    const mode = active ? \"active\" : \"default\";\n    return index2 === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index2 || 0, mode);\n  }\n  getContext(index2, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index2 >= 0 && index2 < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index2];\n      context = element.$context || (element.$context = createDataContext(this.getContext(), index2, element));\n      context.parsed = this.getParsed(index2);\n      context.raw = dataset.data[index2];\n      context.index = context.dataIndex = index2;\n    } else {\n      context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index2, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index2);\n  }\n  _resolveElementOptions(elementType, mode = \"default\", index2) {\n    const active = mode === \"active\";\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + \"-\" + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index2);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, \"hover\", elementType, \"\"] : [elementType, \"\"];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names2 = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index2, active);\n    const values = config.resolveNamedOptions(scopes, names2, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index2, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index2, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return { sharedOptions, includeOptions };\n  }\n  updateElement(element, index2, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index2, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(void 0, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index2, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index2, active);\n    this._resolveAnimations(index2, mode, active).update(element, {\n      options: !active && this.getSharedOptions(options) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index2) {\n    this._setStyle(element, index2, \"active\", false);\n  }\n  setHoverStyle(element, datasetIndex, index2) {\n    this._setStyle(element, index2, \"active\", true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, void 0, \"active\", false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, void 0, \"active\", true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements2 = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements2.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, \"reset\");\n    }\n  }\n  updateElements(element, start, count, mode) {\n  }\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync([\"_insertElements\", this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync([\"_removeElements\", this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync([\"_removeElements\", 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync([\"_removeElements\", start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync([\"_insertElements\", start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync([\"_insertElements\", 0, arguments.length]);\n  }\n};\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = void 0;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index2, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index2] - size / 2\n  };\n}\nfunction computeFlexCategoryTraits(index2, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index2];\n  let prev = index2 > 0 ? pixels[index2 - 1] : null;\n  let next = index2 < pixels.length - 1 ? pixels[index2 + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== void 0 && custom.barEnd !== void 0;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = \"left\";\n    end = \"right\";\n  } else {\n    reverse = properties.base < properties.y;\n    start = \"bottom\";\n    end = \"top\";\n  }\n  if (reverse) {\n    top = \"end\";\n    bottom = \"start\";\n  } else {\n    top = \"start\";\n    bottom = \"end\";\n  }\n  return { start, end, reverse, top, bottom };\n}\nfunction setBorderSkipped(properties, options, stack, index2) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = { top: true, right: true, bottom: true, left: true };\n    return;\n  }\n  const { start, end, reverse, top, bottom } = borderProps(properties);\n  if (edge === \"middle\" && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index2) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index2) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === \"start\" ? start : v === \"end\" ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n  properties.inflateAmount = inflateAmount === \"auto\" ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nvar BarController = class extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const { iScale, vScale } = meta;\n    const { xAxisKey = \"x\", yAxisKey = \"y\" } = this._parsing;\n    const iAxisKey = iScale.axis === \"x\" ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === \"x\" ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index2) {\n    const meta = this._cachedMeta;\n    const { iScale, vScale } = meta;\n    const parsed = this.getParsed(index2);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom) ? \"[\" + custom.start + \", \" + custom.end + \"]\" : \"\" + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: \"\" + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === \"reset\";\n    const { index: index2, _cachedMeta: { vScale } } = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? { base, head: base } : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index2 === stack._top || index2 === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? \"active\" : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index2);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const { iScale } = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta) => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== void 0 && skipNull(meta)) {\n        continue;\n      }\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === void 0 && meta.stack === void 0) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(void 0);\n    }\n    return stacks;\n  }\n  _getStackCount(index2) {\n    return this._getStacks(void 0, index2).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index2 = name !== void 0 ? stacks.indexOf(name) : -1;\n    return index2 === -1 ? stacks.length - 1 : index2;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index2) {\n    const { _cachedMeta: { vScale, _stacked }, options: { base: baseValue, minBarLength } } = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index2);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index2)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index2, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index2) : ruler.stackCount;\n      const range = options.barThickness === \"flex\" ? computeFlexCategoryTraits(index2, ruler, options, stackCount) : computeFitCategoryTraits(index2, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index2 : void 0);\n      center = range.start + range.chunk * stackIndex + range.chunk / 2;\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index2)[scale.axis], index2);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n};\nBarController.id = \"bar\";\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: \"bar\",\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: \"number\",\n      properties: [\"x\", \"y\", \"base\", \"width\", \"height\"]\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: \"category\",\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: \"linear\",\n      beginAtZero: true\n    }\n  }\n};\nvar BubbleController = class extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index2) {\n    const meta = this._cachedMeta;\n    const { xScale, yScale } = meta;\n    const parsed = this.getParsed(index2);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: \"(\" + x + \", \" + y + (r ? \", \" + r : \"\") + \")\"\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === \"reset\";\n    const { iScale, vScale } = this._cachedMeta;\n    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? \"active\" : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index2, mode) {\n    const parsed = this.getParsed(index2);\n    let values = super.resolveDataElementOptions(index2, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, { $shared: false });\n    }\n    const radius = values.radius;\n    if (mode !== \"active\") {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n};\nBubbleController.id = \"bubble\";\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: \"point\",\n  animations: {\n    numbers: {\n      type: \"number\",\n      properties: [\"x\", \"y\", \"borderWidth\", \"radius\"]\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: \"linear\"\n    },\n    y: {\n      type: \"linear\"\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return \"\";\n        }\n      }\n    }\n  }\n};\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return { ratioX, ratioY, offsetX, offsetY };\n}\nvar DoughnutController = class extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = void 0;\n    this.outerRadius = void 0;\n    this.offsetX = void 0;\n    this.offsetY = void 0;\n  }\n  linkScales() {\n  }\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i2) => +data[i2];\n      if (isObject(data[start])) {\n        const { key = \"value\" } = this._parsing;\n        getter = (i2) => +resolveObjectKey(data[i2], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const { chartArea } = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const { circumference, rotation } = this._getRotationExtents();\n    const { ratioX, ratioY, offsetX, offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === \"reset\";\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? \"active\" : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index2) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index2], chart.options.locale);\n    return {\n      label: labels[index2] || \"\",\n      value\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== \"inner\") {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n};\nDoughnutController.id = \"doughnut\";\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: \"arc\",\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: \"number\",\n      properties: [\"circumference\", \"endAngle\", \"innerRadius\", \"outerRadius\", \"startAngle\", \"x\", \"y\", \"offset\", \"borderWidth\", \"spacing\"]\n    }\n  },\n  cutout: \"50%\",\n  rotation: 0,\n  circumference: 360,\n  radius: \"100%\",\n  spacing: 0,\n  indexAxis: \"r\"\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== \"spacing\",\n  _indexable: (name) => name !== \"spacing\"\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const { labels: { pointStyle } } = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return \"\";\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = \": \" + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\nvar LineController = class extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const { dataset: line, data: points = [], _dataset } = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let { start, count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, void 0, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === \"reset\";\n    const { iScale, vScale, _stacked, _dataset } = this._cachedMeta;\n    const { sharedOptions, includeOptions } = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const { spanGaps, segment } = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === \"none\";\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? \"active\" : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n};\nLineController.id = \"line\";\nLineController.defaults = {\n  datasetElementType: \"line\",\n  dataElementType: \"point\",\n  showLine: true,\n  spanGaps: false\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: \"category\"\n    },\n    _value_: {\n      type: \"linear\"\n    }\n  }\n};\nvar PolarAreaController = class extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = void 0;\n    this.outerRadius = void 0;\n  }\n  getLabelAndValue(index2) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index2].r, chart.options.locale);\n    return {\n      label: labels[index2] || \"\",\n      value\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY };\n    meta.data.forEach((element, index2) => {\n      const parsed = this.getParsed(index2).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index2)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - radiusLength * this.index;\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === \"reset\";\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? \"active\" : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index2) => {\n      if (!isNaN(this.getParsed(index2).r) && this.chart.getDataVisibility(index2)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index2, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index2) ? toRadians(this.resolveDataElementOptions(index2, mode).angle || defaultAngle) : 0;\n  }\n};\nPolarAreaController.id = \"polarArea\";\nPolarAreaController.defaults = {\n  dataElementType: \"arc\",\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: \"number\",\n      properties: [\"x\", \"y\", \"startAngle\", \"endAngle\", \"innerRadius\", \"outerRadius\"]\n    }\n  },\n  indexAxis: \"r\",\n  startAngle: 0\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const { labels: { pointStyle } } = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return \"\";\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + \": \" + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: \"radialLinear\",\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\nvar PieController = class extends DoughnutController {\n};\nPieController.id = \"pie\";\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: \"100%\"\n};\nvar RadarController = class extends DatasetController {\n  getLabelAndValue(index2) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index2);\n    return {\n      label: vScale.getLabels()[index2],\n      value: \"\" + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== \"resize\") {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, void 0, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === \"reset\";\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? \"active\" : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n};\nRadarController.id = \"radar\";\nRadarController.defaults = {\n  datasetElementType: \"line\",\n  dataElementType: \"point\",\n  indexAxis: \"r\",\n  showLine: true,\n  elements: {\n    line: {\n      fill: \"start\"\n    }\n  }\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: \"radialLinear\"\n    }\n  }\n};\nvar Element = class {\n  constructor() {\n    this.x = void 0;\n    this.y = void 0;\n    this.active = false;\n    this.options = void 0;\n    this.$animations = void 0;\n  }\n  tooltipPosition(useFinalPosition) {\n    const { x, y } = this.getProps([\"x\", \"y\"], useFinalPosition);\n    return { x, y };\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n};\nElement.defaults = {};\nElement.defaultRoutes = void 0;\nvar formatters = {\n  values(value) {\n    return isArray(value) ? value : \"\" + value;\n  },\n  numeric(tickValue, index2, ticks) {\n    if (tickValue === 0) {\n      return \"0\";\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e15) {\n        notation = \"scientific\";\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = { notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal };\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index2, ticks) {\n    if (tickValue === 0) {\n      return \"0\";\n    }\n    const remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index2, ticks);\n    }\n    return \"\";\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = { formatters };\ndefaults.set(\"scale\", {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: \"ticks\",\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: \"\",\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: \"\",\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: \"center\",\n    crossAlign: \"near\",\n    showLabelBackdrop: false,\n    backdropColor: \"rgba(255, 255, 255, 0.75)\",\n    backdropPadding: 2\n  }\n});\ndefaults.route(\"scale.ticks\", \"color\", \"\", \"color\");\ndefaults.route(\"scale.grid\", \"color\", \"\", \"borderColor\");\ndefaults.route(\"scale.grid\", \"borderColor\", \"\", \"borderColor\");\ndefaults.route(\"scale.title\", \"color\", \"\", \"color\");\ndefaults.describe(\"scale\", {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith(\"before\") && !name.startsWith(\"after\") && name !== \"callback\" && name !== \"parser\",\n  _indexable: (name) => name !== \"borderDash\" && name !== \"tickBorderDash\"\n});\ndefaults.describe(\"scales\", {\n  _fallback: \"scale\"\n});\ndefaults.describe(\"scale.ticks\", {\n  _scriptable: (name) => name !== \"backdropPadding\" && name !== \"callback\",\n  _indexable: (name) => name !== \"backdropPadding\"\n});\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\nvar reverseAlign = (align) => align === \"left\" ? \"right\" : align === \"right\" ? \"left\" : align;\nvar offsetFromEdge = (scale, edge, offset) => edge === \"top\" || edge === \"left\" ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index2, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex2 = Math.min(index2, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex2);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index2 === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex2 - 1)) / 2;\n    }\n    lineValue += validIndex2 < index2 ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: \"scale\"\n  });\n}\nfunction createTickContext(parent, index2, tick) {\n  return createContext(parent, {\n    tick,\n    index: index2,\n    type: \"tick\"\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if (reverse && position !== \"right\" || !reverse && position === \"right\") {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const { top, left, bottom, right, chart } = scale;\n  const { chartArea, scales: scales2 } = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales2[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === \"center\") {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales2[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === \"center\") {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === \"left\" ? -HALF_PI : HALF_PI;\n  }\n  return { titleX, titleY, maxWidth, rotation };\n}\nvar Scale = class _Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = void 0;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = void 0;\n    this.bottom = void 0;\n    this.left = void 0;\n    this.right = void 0;\n    this.width = void 0;\n    this.height = void 0;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = void 0;\n    this.maxHeight = void 0;\n    this.paddingTop = void 0;\n    this.paddingBottom = void 0;\n    this.paddingLeft = void 0;\n    this.paddingRight = void 0;\n    this.axis = void 0;\n    this.labelRotation = void 0;\n    this.min = void 0;\n    this.max = void 0;\n    this._range = void 0;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = void 0;\n    this._endPixel = void 0;\n    this._reversePixels = false;\n    this._userMax = void 0;\n    this._userMin = void 0;\n    this._suggestedMax = void 0;\n    this._suggestedMin = void 0;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = void 0;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index2) {\n    return raw;\n  }\n  getUserBounds() {\n    let { _userMin, _userMax, _suggestedMin, _suggestedMax } = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let { min, max, minDefined, maxDefined } = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return { min, max };\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const { beginAtZero, grace, ticks: tickOpts } = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === \"auto\")) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks(\"beforeDataLimits\");\n  }\n  determineDataLimits() {\n  }\n  afterDataLimits() {\n    this._callHooks(\"afterDataLimits\");\n  }\n  beforeBuildTicks() {\n    this._callHooks(\"beforeBuildTicks\");\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks(\"afterBuildTicks\");\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {\n  }\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const { chart, options: { ticks: tickOpts, title: titleOpts, grid: gridOpts } } = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const { first, last, widest, highest } = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const { ticks: { align, padding }, position } = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== \"top\" && this.axis === \"x\";\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === \"start\") {\n        paddingRight = last.width;\n      } else if (align === \"end\") {\n        paddingLeft = first.width;\n      } else if (align !== \"inner\") {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === \"start\") {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === \"end\") {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const { axis, position } = this.options;\n    return position === \"top\" || position === \"bottom\" || axis === \"x\";\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const { ctx, _longestTextCache: caches } = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || { data: {}, gc: [] };\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({ width: widths[idx] || 0, height: heights[idx] || 0 });\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index2) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {\n  }\n  getPixelForTick(index2) {\n    const ticks = this.ticks;\n    if (index2 < 0 || index2 > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index2].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const { min, max } = this;\n    return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n  }\n  getContext(index2) {\n    const ticks = this.ticks || [];\n    if (index2 >= 0 && index2 < ticks.length) {\n      const tick = ticks[index2];\n      return tick.$context || (tick.$context = createTickContext(this.getContext(), index2, tick));\n    }\n    return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== \"auto\") {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const { grid, position } = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === \"top\") {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === \"bottom\") {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === \"left\") {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === \"right\") {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === \"x\") {\n      if (position === \"center\") {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === \"y\") {\n      if (position === \"center\") {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === void 0) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const { position, ticks: optionTicks } = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const { align, crossAlign, padding, mirror } = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = \"middle\";\n    if (position === \"top\") {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === \"bottom\") {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === \"left\") {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === \"right\") {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === \"x\") {\n      if (position === \"center\") {\n        y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === \"y\") {\n      if (position === \"center\") {\n        x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === \"y\") {\n      if (align === \"start\") {\n        textBaseline = \"top\";\n      } else if (align === \"end\") {\n        textBaseline = \"bottom\";\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color2 = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === \"inner\") {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? \"right\" : \"left\";\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? \"left\" : \"right\";\n          } else {\n            tickTextAlign = \"center\";\n          }\n        }\n        if (position === \"top\") {\n          if (crossAlign === \"near\" || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === \"center\") {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === \"near\" || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === \"center\") {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n          case \"middle\":\n            top -= height / 2;\n            break;\n          case \"bottom\":\n            top -= height;\n            break;\n        }\n        switch (textAlign) {\n          case \"center\":\n            left -= width / 2;\n            break;\n          case \"right\":\n            left -= width;\n            break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color: color2,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const { position, ticks } = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === \"top\" ? \"left\" : \"right\";\n    }\n    let align = \"center\";\n    if (ticks.align === \"start\") {\n      align = \"left\";\n    } else if (ticks.align === \"end\") {\n      align = \"right\";\n    } else if (ticks.align === \"inner\") {\n      align = \"inner\";\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const { position, ticks: { crossAlign, mirror, padding } } = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === \"left\") {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === \"near\") {\n          textAlign = \"left\";\n        } else if (crossAlign === \"center\") {\n          textAlign = \"center\";\n          x += widest / 2;\n        } else {\n          textAlign = \"right\";\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === \"near\") {\n          textAlign = \"right\";\n        } else if (crossAlign === \"center\") {\n          textAlign = \"center\";\n          x -= widest / 2;\n        } else {\n          textAlign = \"left\";\n          x = this.left;\n        }\n      }\n    } else if (position === \"right\") {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === \"near\") {\n          textAlign = \"right\";\n        } else if (crossAlign === \"center\") {\n          textAlign = \"center\";\n          x -= widest / 2;\n        } else {\n          textAlign = \"left\";\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === \"near\") {\n          textAlign = \"left\";\n        } else if (crossAlign === \"center\") {\n          textAlign = \"center\";\n          x += widest / 2;\n        } else {\n          textAlign = \"right\";\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = \"right\";\n    }\n    return { textAlign, x };\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === \"left\" || position === \"right\") {\n      return { top: 0, left: this.left, bottom: chart.height, right: this.right };\n    }\n    if (position === \"top\" || position === \"bottom\") {\n      return { top: this.top, left: 0, bottom: this.bottom, right: chart.width };\n    }\n  }\n  drawBackground() {\n    const { ctx, options: { backgroundColor }, left, top, width, height } = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index2 = ticks.findIndex((t) => t.value === value);\n    if (index2 >= 0) {\n      const opts = grid.setContext(this.getContext(index2));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            { x: item.x1, y: item.y1 },\n            { x: item.x2, y: item.y2 },\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            { x: item.tx1, y: item.ty1 },\n            { x: item.tx2, y: item.ty2 },\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const { chart, ctx, options: { grid } } = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const { ctx, options: { position, title, reverse } } = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === \"bottom\" || position === \"center\" || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const { titleX, titleY, maxWidth, rotation } = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: \"middle\",\n      translation: [titleX, titleY]\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== _Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + \"AxisID\";\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index2) {\n    const opts = this.options.ticks.setContext(this.getContext(index2));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n};\nvar TypedRegistry = class {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = /* @__PURE__ */ Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + \".\" + id;\n    if (!id) {\n      throw new Error(\"class does not have id: \" + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n};\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(/* @__PURE__ */ Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach((property) => {\n    const propertyParts = property.split(\".\");\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join(\".\");\n    const parts = routes[property].split(\".\");\n    const targetName = parts.pop();\n    const targetScope = parts.join(\".\");\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return \"id\" in proto && \"defaults\" in proto;\n}\nvar Registry = class {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, \"datasets\", true);\n    this.elements = new TypedRegistry(Element, \"elements\");\n    this.plugins = new TypedRegistry(Object, \"plugins\");\n    this.scales = new TypedRegistry(Scale, \"scales\");\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each(\"register\", args);\n  }\n  remove(...args) {\n    this._each(\"unregister\", args);\n  }\n  addControllers(...args) {\n    this._each(\"register\", args, this.controllers);\n  }\n  addElements(...args) {\n    this._each(\"register\", args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each(\"register\", args, this.plugins);\n  }\n  addScales(...args) {\n    this._each(\"register\", args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, \"controller\");\n  }\n  getElement(id) {\n    return this._get(id, this.elements, \"element\");\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, \"plugin\");\n  }\n  getScale(id) {\n    return this._get(id, this.scales, \"scale\");\n  }\n  removeControllers(...args) {\n    this._each(\"unregister\", args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each(\"unregister\", args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each(\"unregister\", args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each(\"unregister\", args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach((arg) => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, (item) => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry2, component) {\n    const camelMethod = _capitalize(method);\n    callback(component[\"before\" + camelMethod], [], component);\n    registry2[method](component);\n    callback(component[\"after\" + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === void 0) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + \".\");\n    }\n    return item;\n  }\n};\nvar registry = new Registry();\nvar ScatterController = class extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const { data: points = [] } = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let { start, count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const { dataset: line, _dataset } = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, void 0, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const { showLine } = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement(\"line\");\n    }\n    super.addElements();\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === \"reset\";\n    const { iScale, vScale, _stacked, _dataset } = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const { spanGaps, segment } = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === \"none\";\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? \"active\" : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n};\nScatterController.id = \"scatter\";\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: \"point\",\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: \"point\"\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return \"\";\n        },\n        label(item) {\n          return \"(\" + item.label + \", \" + item.formattedValue + \")\";\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: \"linear\"\n    },\n    y: {\n      type: \"linear\"\n    }\n  }\n};\nvar controllers = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  BarController,\n  BubbleController,\n  DoughnutController,\n  LineController,\n  PolarAreaController,\n  PieController,\n  RadarController,\n  ScatterController\n});\nfunction abstract() {\n  throw new Error(\"This method is not implemented: Check that a complete date adapter is provided.\");\n}\nvar DateAdapter = class {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {\n  }\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n};\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\nfunction binarySearch(metaset, axis, value, intersect) {\n  const { controller, data, _sorted } = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== \"r\" && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === \"function\" && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return { lo: start.lo, hi: end.hi };\n      }\n    }\n  }\n  return { lo: 0, hi: data.length - 1 };\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const { index: index2, data } = metasets[i];\n    const { lo, hi } = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index2, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf(\"x\") !== -1;\n  const useY = axis.indexOf(\"y\") !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index2) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({ element, datasetIndex, index: index2 });\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index2) {\n    const { startAngle, endAngle } = element.getProps([\"startAngle\", \"endAngle\"], useFinalPosition);\n    const { angle } = getAngleFromPoint(element, { x: position.x, y: position.y });\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({ element, datasetIndex, index: index2 });\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index2) {\n    const inRange2 = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange2) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange2) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{ element, datasetIndex, index: index2 }];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({ element, datasetIndex, index: index2 });\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === \"r\" && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === \"x\" ? \"inXRange\" : \"inYRange\";\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index2) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({ element, datasetIndex, index: index2 });\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || \"x\";\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements2 = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index2 = items[0].index;\n        const element = meta.data[index2];\n        if (element && !element.skip) {\n          elements2.push({ element, datasetIndex: meta.index, index: index2 });\n        }\n      });\n      return elements2;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || \"xy\";\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({ element: data[i], datasetIndex, index: i });\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || \"xy\";\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || \"xy\";\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, \"x\", options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, \"y\", options.intersect, useFinalPosition);\n    }\n  }\n};\nvar STATIC_POSITIONS = [\"left\", \"top\", \"right\", \"bottom\"];\nfunction filterByPosition(array, position) {\n  return array.filter((v) => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter((v) => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({ position: pos, options: { stack, stackWeight = 1 } } = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && pos + stack,\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts2) {\n  const stacks = {};\n  for (const wrap of layouts2) {\n    const { stack, pos, stackWeight } = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = { count: 0, placed: 0, weight: 0, size: 0 });\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts2, params) {\n  const stacks = buildStacks(layouts2);\n  const { vBoxMaxWidth, hBoxMaxHeight } = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts2.length; i < ilen; ++i) {\n    layout = layouts2[i];\n    const { fullSize } = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter((wrap) => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, \"left\"), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, \"right\"));\n  const top = sortByWeight(filterByPosition(layoutBoxes, \"top\"), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, \"bottom\"));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, \"x\");\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, \"y\");\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, \"chartArea\"),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const { pos, box } = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || { size: 0, count: 1 };\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, \"left\", \"right\"));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, \"top\", \"bottom\"));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal ? { same: widthChanged, other: heightChanged } : { same: heightChanged, other: widthChanged };\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos(\"top\");\n  chartArea.x += updatePos(\"left\");\n  updatePos(\"right\");\n  updatePos(\"bottom\");\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions2) {\n    const margin = { left: 0, top: 0, right: 0, bottom: 0 };\n    positions2.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal ? marginForPositions([\"left\", \"right\"]) : marginForPositions([\"top\", \"bottom\"]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const { same, other } = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let { x, y } = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || { count: 1, placed: 0, weight: 1 };\n    const weight = layout.stackWeight / stack.weight || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set(\"layout\", {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || \"top\";\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index2 = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index2 !== -1) {\n      chart.boxes.splice(index2, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, (box) => {\n      if (typeof box.beforeLayout === \"function\") {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) => wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, { left: 0, top: 0, right: 0, bottom: 0 });\n    });\n  }\n};\nvar BasePlatform = class {\n  acquireContext(canvas, aspectRatio) {\n  }\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {\n  }\n  removeEventListener(chart, type, listener) {\n  }\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n};\nvar BasicPlatform = class extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext(\"2d\") || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n};\nvar EXPANDO_KEY = \"$chartjs\";\nvar EVENT_TYPES = {\n  touchstart: \"mousedown\",\n  touchmove: \"mousemove\",\n  touchend: \"mouseup\",\n  pointerenter: \"mouseenter\",\n  pointerdown: \"mousedown\",\n  pointermove: \"mousemove\",\n  pointerup: \"mouseup\",\n  pointerleave: \"mouseout\",\n  pointerout: \"mouseout\"\n};\nvar isNullOrEmpty = (value) => value === null || value === \"\";\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute(\"height\");\n  const renderWidth = canvas.getAttribute(\"width\");\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || \"block\";\n  style.boxSizing = style.boxSizing || \"border-box\";\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, \"width\");\n    if (displayWidth !== void 0) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === \"\") {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, \"height\");\n      if (displayHeight !== void 0) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nvar eventListenerOptions = supportsEventListenerOptions ? { passive: true } : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const { x, y } = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== void 0 ? x : null,\n    y: y !== void 0 ? y : null\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver((entries) => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, { childList: true, subtree: true });\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver((entries) => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, { childList: true, subtree: true });\n  return observer;\n}\nvar drpListeningCharts = /* @__PURE__ */ new Map();\nvar oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener(\"resize\", onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener(\"resize\", onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver((entries) => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === \"resize\") {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nvar DomPlatform = class extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext(\"2d\");\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    [\"height\", \"width\"].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = void 0;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n};\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || typeof OffscreenCanvas !== \"undefined\" && canvas instanceof OffscreenCanvas) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\nvar PluginService = class {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === \"beforeInit\") {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, \"install\");\n    }\n    const descriptors2 = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors2, chart, hook, args);\n    if (hook === \"afterDestroy\") {\n      this._notify(descriptors2, chart, \"stop\");\n      this._notify(this._init, chart, \"uninstall\");\n    }\n    return result;\n  }\n  _notify(descriptors2, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors2) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = void 0;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors2 = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors2;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins2 = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins2, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors2 = this._cache;\n    const diff = (a, b) => a.filter((x) => !b.some((y) => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors2), chart, \"stop\");\n    this._notify(diff(descriptors2, previousDescriptors), chart, \"start\");\n  }\n};\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins2 = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins2.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins2.indexOf(plugin) === -1) {\n      plugins2.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return { plugins: plugins2, localIds };\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, { plugins: plugins2, localIds }, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (const plugin of plugins2) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, { plugin, local: localIds[id] }, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, { plugin, local }, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [\"\"], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || \"x\";\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === \"_index_\") {\n    axis = indexAxis;\n  } else if (id === \"_value_\") {\n    axis = indexAxis === \"x\" ? \"y\" : \"x\";\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? \"_index_\" : \"_value_\";\n}\nfunction axisFromPosition(position) {\n  if (position === \"top\" || position === \"bottom\") {\n    return \"x\";\n  }\n  if (position === \"left\" || position === \"right\") {\n    return \"y\";\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === \"x\" || id === \"y\") {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || { scales: {} };\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = /* @__PURE__ */ Object.create(null);\n  const scales2 = /* @__PURE__ */ Object.create(null);\n  Object.keys(configScales).forEach((id) => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales2[id] = mergeIf(/* @__PURE__ */ Object.create(null), [{ axis }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach((dataset) => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach((defaultID) => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + \"AxisID\"] || firstIDs[axis] || axis;\n      scales2[id] = scales2[id] || /* @__PURE__ */ Object.create(null);\n      mergeIf(scales2[id], [{ axis }, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales2).forEach((key) => {\n    const scale = scales2[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales2;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nvar keyCache = /* @__PURE__ */ new Map();\nvar keysCached = /* @__PURE__ */ new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nvar addIfFound = (set2, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== void 0) {\n    set2.add(opts);\n  }\n};\nvar Config = class {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = /* @__PURE__ */ new Map();\n    this._resolverCache = /* @__PURE__ */ new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(\n      datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        \"\"\n      ]]\n    );\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(\n      `${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`\n        ],\n        [\n          `datasets.${datasetType}`,\n          \"\"\n        ]\n      ]\n    );\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(\n      `${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        \"\"\n      ]]\n    );\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(\n      `${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || []\n      ]]\n    );\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = /* @__PURE__ */ new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const { options, type } = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = /* @__PURE__ */ new Set();\n    keyLists.forEach((keys) => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach((key) => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach((key) => addIfFound(scopes, options, key));\n      keys.forEach((key) => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach((key) => addIfFound(scopes, defaults, key));\n      keys.forEach((key) => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(/* @__PURE__ */ Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const { options, type } = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      { type },\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names2, context, prefixes = [\"\"]) {\n    const result = { $shared: true };\n    const { resolver, subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names2)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names2) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [\"\"], descriptorDefaults) {\n    const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context) ? _attachContext(resolver, context, void 0, descriptorDefaults) : resolver;\n  }\n};\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = /* @__PURE__ */ new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter((p) => !p.toLowerCase().includes(\"hover\"))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nvar hasFunction = (value) => isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names2) {\n  const { isScriptable, isIndexable } = _descriptors(proxy);\n  for (const prop of names2) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar version = \"3.9.1\";\nvar KNOWN_POSITIONS = [\"top\", \"bottom\", \"left\", \"right\", \"chartArea\"];\nfunction positionIsHorizontal(position, axis) {\n  return position === \"top\" || position === \"bottom\" || KNOWN_POSITIONS.indexOf(position) === -1 && axis === \"x\";\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions2 = chart.options.animation;\n  chart.notifyPlugins(\"afterRender\");\n  callback(animationOptions2 && animationOptions2.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions2 = chart.options.animation;\n  callback(animationOptions2 && animationOptions2.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === \"string\") {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nvar instances = {};\nvar getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === \"mouseout\") {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nvar Chart = class {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        \"Canvas is already in use. Chart with ID '\" + existingChart.id + \"' must be destroyed before the canvas with ID '\" + existingChart.canvas.id + \"' can be reused.\"\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = void 0;\n    this.boxes = [];\n    this.currentDevicePixelRatio = void 0;\n    this.chartArea = void 0;\n    this._active = [];\n    this._lastEvent = void 0;\n    this._listeners = {};\n    this._responsiveListeners = void 0;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = void 0;\n    this.$context = void 0;\n    this._doResize = debounce((mode) => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, \"complete\", onAnimationsComplete);\n    animator.listen(this, \"progress\", onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const { options: { aspectRatio, maintainAspectRatio }, width, height, _aspectRatio } = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins(\"beforeInit\");\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins(\"afterInit\");\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = { width, height };\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? \"resize\" : \"attach\";\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins(\"resize\", { size: newSize });\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales2 = this.scales;\n    const updated = Object.keys(scales2).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === \"r\";\n          const isHorizontal = axis === \"x\";\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? \"chartArea\" : isHorizontal ? \"bottom\" : \"left\",\n            dtype: isRadial ? \"radialLinear\" : isHorizontal ? \"category\" : \"linear\"\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === void 0 || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales2 && scales2[id].type === scaleType) {\n        scale = scales2[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales2[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales2[id];\n      }\n    });\n    each(scales2, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level(\"order\", \"index\"));\n  }\n  _removeUnreferencedMetasets() {\n    const { _metasets: metasets, data: { datasets } } = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index2) => {\n      if (datasets.filter((x) => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index2);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = \"\" + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const { datasetElementType, dataElementType } = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins(\"reset\");\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins(\"beforeUpdate\", { mode, cancelable: true }) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins(\"beforeElementsUpdate\");\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const { controller } = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins(\"afterUpdate\", { mode });\n    this._layers.sort(compare2Level(\"z\", \"_idx\"));\n    const { _active, _lastEvent } = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const { _hiddenIndices } = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const { method, start, count } of changes) {\n      const move = method === \"_removeElements\" ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges.filter((c) => c[0] === idx).map((c, i) => i + \",\" + c.splice(1).join(\",\"))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet).map((c) => c.split(\",\")).map((a) => ({ method: a[1], start: +a[2], count: +a[3] }));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins(\"beforeLayout\", { cancelable: true }) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === \"chartArea\") {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index2) => {\n      item._idx = index2;\n    });\n    this.notifyPlugins(\"afterLayout\");\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins(\"beforeDatasetsUpdate\", { mode, cancelable: true }) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({ datasetIndex: i }) : mode);\n    }\n    this.notifyPlugins(\"afterDatasetsUpdate\", { mode });\n  }\n  _updateDataset(index2, mode) {\n    const meta = this.getDatasetMeta(index2);\n    const args = { meta, index: index2, mode, cancelable: true };\n    if (this.notifyPlugins(\"beforeDatasetUpdate\", args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins(\"afterDatasetUpdate\", args);\n  }\n  render() {\n    if (this.notifyPlugins(\"beforeRender\", { cancelable: true }) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({ chart: this });\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const { width, height } = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins(\"beforeDraw\", { cancelable: true }) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins(\"afterDraw\");\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins(\"beforeDatasetsDraw\", { cancelable: true }) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins(\"afterDatasetsDraw\");\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins(\"beforeDatasetDraw\", args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins(\"afterDatasetDraw\", args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === \"function\") {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter((x) => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, { chart: this, type: \"chart\" }));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === \"boolean\" ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index2) {\n    this._hiddenIndices[index2] = !this._hiddenIndices[index2];\n  }\n  getDataVisibility(index2) {\n    return !this._hiddenIndices[index2];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? \"show\" : \"hide\";\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(void 0, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, { visible });\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : void 0);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins(\"beforeDestroy\");\n    const { canvas, ctx } = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins(\"destroy\");\n    delete instances[this.id];\n    this.notifyPlugins(\"afterDestroy\");\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener2) => {\n      platform.addEventListener(this, type, listener2);\n      listeners[type] = listener2;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener2) => {\n      platform.addEventListener(this, type, listener2);\n      listeners[type] = listener2;\n    };\n    const _remove = (type, listener2) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener2);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove(\"attach\", attached);\n      this.attached = true;\n      this.resize();\n      _add(\"resize\", listener);\n      _add(\"detach\", detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove(\"resize\", listener);\n      this._stop();\n      this._resize(0, 0);\n      _add(\"attach\", attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = void 0;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? \"set\" : \"remove\";\n    let meta, item, i, ilen;\n    if (mode === \"dataset\") {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller[\"_\" + prefix + \"DatasetHoverStyle\"]();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + \"HoverStyle\"](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({ datasetIndex, index: index2 }) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error(\"No dataset found at index \" + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index2],\n        index: index2\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter((x) => !b.some((y) => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins(\"beforeEvent\", args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins(\"afterEvent\", args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const { _active: lastActive = [], options } = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === \"mouseout\") {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n};\nvar invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nvar enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\nfunction clipArc(ctx, element, endAngle) {\n  const { startAngle, pixelMargin, x, y, outerRadius, innerRadius } = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, [\"outerStart\", \"outerEnd\", \"innerStart\", \"innerEnd\"]);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta)\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const { x, y, startAngle: start, pixelMargin, innerRadius: innerR } = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha2 = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? alpha2 * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha2;\n    spacingOffset = (alpha2 - adjustedAngle) / 2;\n  }\n  const beta = Math.max(1e-3, alpha2 * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha2 - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const { outerStart, outerEnd, innerStart, innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n    ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const { fullCircles, startAngle, circumference } = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const { x, y, startAngle, pixelMargin, fullCircles } = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const { options } = element;\n  const { borderWidth, borderJoinStyle } = options;\n  const inner = options.borderAlign === \"inner\";\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || \"round\";\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || \"bevel\";\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nvar ArcElement = class extends Element {\n  constructor(cfg) {\n    super();\n    this.options = void 0;\n    this.circumference = void 0;\n    this.startAngle = void 0;\n    this.endAngle = void 0;\n    this.innerRadius = void 0;\n    this.outerRadius = void 0;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps([\"x\", \"y\"], useFinalPosition);\n    const { angle, distance } = getAngleFromPoint(point, { x: chartX, y: chartY });\n    const { startAngle, endAngle, innerRadius, outerRadius, circumference } = this.getProps([\n      \"startAngle\",\n      \"endAngle\",\n      \"innerRadius\",\n      \"outerRadius\",\n      \"circumference\"\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return betweenAngles && withinRadius;\n  }\n  getCenterPoint(useFinalPosition) {\n    const { x, y, startAngle, endAngle, innerRadius, outerRadius } = this.getProps([\n      \"x\",\n      \"y\",\n      \"startAngle\",\n      \"endAngle\",\n      \"innerRadius\",\n      \"outerRadius\",\n      \"circumference\"\n    ], useFinalPosition);\n    const { offset, spacing } = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const { options, circumference } = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = options.borderAlign === \"inner\" ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n};\nArcElement.id = \"arc\";\nArcElement.defaults = {\n  borderAlign: \"center\",\n  borderColor: \"#fff\",\n  borderJoinStyle: void 0,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: void 0,\n  circular: true\n};\nArcElement.defaultRoutes = {\n  backgroundColor: \"backgroundColor\"\n};\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === \"monotone\") {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const { start: paramsStart = 0, end: paramsEnd = count - 1 } = params;\n  const { start: segmentStart, end: segmentEnd } = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const { points, options } = line;\n  const { count, start, loop, ilen } = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let { move = true, reverse } = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const { count, start, ilen } = pathVars(points, segment, params);\n  const { move = true, reverse } = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index2) => (start + (reverse ? ilen - index2 : index2)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== \"monotone\" && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === \"monotone\") {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const { segments, options } = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, { start, end: start + count - 1 })) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nvar usePath2D = typeof Path2D === \"function\";\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nvar LineElement = class extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = void 0;\n    this._chart = void 0;\n    this._loop = void 0;\n    this._fullLoop = void 0;\n    this._path = void 0;\n    this._points = void 0;\n    this._segments = void 0;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = void 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === \"monotone\") && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, { property, start: value, end: value });\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const { start, end } = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || this.points.length - start;\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, { start, end: start + count - 1 });\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = void 0;\n    }\n  }\n};\nLineElement.id = \"line\";\nLineElement.defaults = {\n  borderCapStyle: \"butt\",\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: \"miter\",\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: \"default\",\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0\n};\nLineElement.defaultRoutes = {\n  backgroundColor: \"backgroundColor\",\n  borderColor: \"borderColor\"\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== \"borderDash\" && name !== \"fill\"\n};\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const { [axis]: value } = el.getProps([axis], useFinalPosition);\n  return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nvar PointElement = class extends Element {\n  constructor(cfg) {\n    super();\n    this.options = void 0;\n    this.parsed = void 0;\n    this.skip = void 0;\n    this.stop = void 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const { x, y } = this.getProps([\"x\", \"y\"], useFinalPosition);\n    return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, \"x\", useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, \"y\", useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const { x, y } = this.getProps([\"x\", \"y\"], useFinalPosition);\n    return { x, y };\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n};\nPointElement.id = \"point\";\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: \"circle\",\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: \"backgroundColor\",\n  borderColor: \"borderColor\"\n};\nfunction getBarBounds(bar, useFinalPosition) {\n  const { x, y, base, width, height } = bar.getProps([\"x\", \"y\", \"base\", \"width\", \"height\"], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return { left, top, right, bottom };\n}\nfunction skipOrLimit(skip2, value, min, max) {\n  return skip2 ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip2 = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip2.top, o.top, 0, maxH),\n    r: skipOrLimit(skip2.right, o.right, 0, maxW),\n    b: skipOrLimit(skip2.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip2.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const { enableBorderRadius } = bar.getProps([\"enableBorderRadius\"]);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip2 = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip2.top || skip2.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip2.top || skip2.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip2.bottom || skip2.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip2.bottom || skip2.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nvar BarElement = class extends Element {\n  constructor(cfg) {\n    super();\n    this.options = void 0;\n    this.horizontal = void 0;\n    this.base = void 0;\n    this.width = void 0;\n    this.height = void 0;\n    this.inflateAmount = void 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const { inflateAmount, options: { borderColor, backgroundColor } } = this;\n    const { inner, outer } = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill(\"evenodd\");\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const { x, y, base, horizontal } = this.getProps([\"x\", \"y\", \"base\", \"horizontal\"], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === \"x\" ? this.width / 2 : this.height / 2;\n  }\n};\nBarElement.id = \"bar\";\nBarElement.defaults = {\n  borderSkipped: \"start\",\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: \"auto\",\n  pointStyle: void 0\n};\nBarElement.defaultRoutes = {\n  backgroundColor: \"backgroundColor\",\n  borderColor: \"borderColor\"\n};\nvar elements = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  ArcElement,\n  LineElement,\n  PointElement,\n  BarElement\n});\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const { x: pointAx, y: pointAy } = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, \"data\", { value: data });\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const { iScale } = meta;\n  const { min, max, minDefined, maxDefined } = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return { start, count };\n}\nvar plugin_decimation = {\n  id: \"decimation\",\n  defaults: {\n    algorithm: \"min-max\",\n    enabled: false\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const { _data, indexAxis } = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === \"y\") {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== \"linear\" && xAxis.type !== \"time\") {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let { start, count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, \"data\", {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n        case \"lttb\":\n          decimated = lttbDecimation(data, start, count, availableWidth, options);\n          break;\n        case \"min-max\":\n          decimated = minMaxDecimation(data, start, count, availableWidth);\n          break;\n        default:\n          throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let { start, end } = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, \"start\", Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, \"end\", Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === \"angle\") {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return { property, start, end };\n}\nfunction _pointsFromSegments(boundary, line) {\n  const { x = null, y = null } = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({ start, end }) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({ x: first.x, y });\n      points.push({ x: last.x, y });\n    } else if (x !== null) {\n      points.push({ x, y: first.y });\n      points.push({ x, y: last.y });\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (; end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: { tension: 0 },\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\nfunction _resolveTarget(sources, index2, propagate) {\n  const source = sources[index2];\n  let fill2 = source.fill;\n  const visited = [index2];\n  let target;\n  if (!propagate) {\n    return fill2;\n  }\n  while (fill2 !== false && visited.indexOf(fill2) === -1) {\n    if (!isNumberFinite(fill2)) {\n      return fill2;\n    }\n    target = sources[fill2];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill2;\n    }\n    visited.push(fill2);\n    fill2 = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index2, count) {\n  const fill2 = parseFillOption(line);\n  if (isObject(fill2)) {\n    return isNaN(fill2.value) ? false : fill2;\n  }\n  let target = parseFloat(fill2);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill2[0], index2, target, count);\n  }\n  return [\"origin\", \"start\", \"end\", \"stack\", \"shape\"].indexOf(fill2) >= 0 && fill2;\n}\nfunction decodeTargetIndex(firstCh, index2, target, count) {\n  if (firstCh === \"-\" || firstCh === \"+\") {\n    target = index2 + target;\n  }\n  if (target === index2 || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill2, scale) {\n  let pixel = null;\n  if (fill2 === \"start\") {\n    pixel = scale.bottom;\n  } else if (fill2 === \"end\") {\n    pixel = scale.top;\n  } else if (isObject(fill2)) {\n    pixel = scale.getPixelForValue(fill2.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill2, scale, startValue) {\n  let value;\n  if (fill2 === \"start\") {\n    value = startValue;\n  } else if (fill2 === \"end\") {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill2)) {\n    value = fill2.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill2 = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill2 === void 0) {\n    fill2 = !!options.backgroundColor;\n  }\n  if (fill2 === false || fill2 === null) {\n    return false;\n  }\n  if (fill2 === true) {\n    return \"origin\";\n  }\n  return fill2;\n}\nfunction _buildStackLine(source) {\n  const { scale, index: index2, line } = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index2);\n  linesBelow.push(_createBoundaryLine({ x: null, y: scale.bottom }, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({ points, options: {} });\n}\nfunction getLinesBelow(scale, index2) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas(\"line\");\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index2) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const { first, last, point } = findPoint(line, sourcePoint, \"x\");\n    if (!point || first && last) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return { first, last, point };\n}\nvar simpleArc = class {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const { x, y, radius } = this;\n    bounds = bounds || { start: 0, end: TAU };\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const { x, y, radius } = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n};\nfunction _getTarget(source) {\n  const { chart, fill: fill2, line } = source;\n  if (isNumberFinite(fill2)) {\n    return getLineByIndex(chart, fill2);\n  }\n  if (fill2 === \"stack\") {\n    return _buildStackLine(source);\n  }\n  if (fill2 === \"shape\") {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index2) {\n  const meta = chart.getDatasetMeta(index2);\n  const visible = meta && chart.isDatasetVisible(index2);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const { scale = {}, fill: fill2 } = source;\n  const pixel = _getTargetPixel(fill2, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const { scale, fill: fill2 } = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill2, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const { line, scale, axis } = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color2 = lineOpts.backgroundColor;\n  const { above = color2, below = color2 } = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, { line, target, above, below, area, scale, axis });\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const { line, target, above, below, area, scale } = cfg;\n  const property = line._loop ? \"angle\" : cfg.axis;\n  ctx.save();\n  if (property === \"x\" && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, { line, target, color: above, scale, property });\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, { line, target, color: below, scale, property });\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const { segments, points } = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const { start, end } = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, { move: lineLoop });\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const { line, target, property, color: color2, scale } = cfg;\n  const segments = _segments(line, target, property);\n  for (const { source: src, target: tgt, start, end } of segments) {\n    const { style: { backgroundColor = color2 } = {} } = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, { move: lineLoop, reverse: true });\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? \"evenodd\" : \"nonzero\");\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const { top, bottom } = scale.chart.chartArea;\n  const { property, start, end } = bounds || {};\n  if (property === \"x\") {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\nvar index = {\n  id: \"filler\",\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw2 = options.drawTime === \"beforeDraw\";\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw2 && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== \"beforeDatasetsDraw\") {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== \"beforeDatasetDraw\") {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: \"beforeDatasetDraw\"\n  }\n};\nvar getBoxSize = (labelOpts, fontSize) => {\n  let { boxHeight = fontSize, boxWidth = fontSize } = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nvar itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nvar Legend = class extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = void 0;\n    this.columnSizes = void 0;\n    this.lineWidths = void 0;\n    this.maxHeight = void 0;\n    this.maxWidth = void 0;\n    this.top = void 0;\n    this.bottom = void 0;\n    this.left = void 0;\n    this.right = void 0;\n    this.height = void 0;\n    this.width = void 0;\n    this._margins = void 0;\n    this.position = void 0;\n    this.weight = void 0;\n    this.fullSize = void 0;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const { options, ctx } = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const { boxWidth, itemHeight } = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const { ctx, maxWidth, options: { labels: { padding } } } = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = \"left\";\n    ctx.textBaseline = \"middle\";\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = { left: 0, top, row, width: itemWidth, height: itemHeight };\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const { ctx, maxHeight, options: { labels: { padding } } } = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({ width: currentColWidth, height: currentColHeight });\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = { left, top: currentColHeight, col, width: itemWidth, height: itemHeight };\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({ width: currentColWidth, height: currentColHeight });\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const { legendHitBoxes: hitboxes, options: { align, labels: { padding }, rtl } } = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === \"top\" || this.options.position === \"bottom\";\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const { options: opts, columnSizes, lineWidths, ctx } = this;\n    const { align, labels: labelOpts } = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const { color: fontColor, padding } = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign(\"left\");\n    ctx.textBaseline = \"middle\";\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const { boxWidth, boxHeight, itemHeight } = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, \"butt\");\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, \"miter\");\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some((v) => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = \"middle\";\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === \"mousemove\" || e.type === \"mouseout\") {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n};\nfunction isListened(type, opts) {\n  if ((type === \"mousemove\" || type === \"mouseout\") && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === \"click\" || type === \"mouseup\")) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: \"legend\",\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ ctx: chart.ctx, options, chart });\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: \"top\",\n    align: \"center\",\n    fullSize: true,\n    reverse: false,\n    weight: 1e3,\n    onClick(e, legendItem, legend) {\n      const index2 = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index2)) {\n        ci.hide(index2);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index2);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const { labels: { usePointStyle, pointStyle, textAlign, color: color2 } } = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : void 0);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color2,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: \"center\",\n      text: \"\"\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith(\"on\"),\n    labels: {\n      _scriptable: (name) => ![\"generateLabels\", \"filter\", \"sort\"].includes(name)\n    }\n  }\n};\nvar Title = class extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = void 0;\n    this.top = void 0;\n    this.bottom = void 0;\n    this.left = void 0;\n    this.right = void 0;\n    this.width = void 0;\n    this.height = void 0;\n    this.position = void 0;\n    this.weight = void 0;\n    this.fullSize = void 0;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === \"top\" || pos === \"bottom\";\n  }\n  _drawArgs(offset) {\n    const { top, left, bottom, right, options } = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === \"left\") {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return { titleX, titleY, maxWidth, rotation };\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const { titleX, titleY, maxWidth, rotation } = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: \"middle\",\n      translation: [titleX, titleY]\n    });\n  }\n};\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: \"title\",\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: \"center\",\n    display: false,\n    font: {\n      weight: \"bold\"\n    },\n    fullSize: true,\n    padding: 10,\n    position: \"top\",\n    text: \"\",\n    weight: 2e3\n  },\n  defaultRoutes: {\n    color: \"color\"\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nvar map2 = /* @__PURE__ */ new WeakMap();\nvar plugin_subtitle = {\n  id: \"subtitle\",\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map2.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map2.get(chart));\n    map2.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map2.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: \"center\",\n    display: false,\n    font: {\n      weight: \"normal\"\n    },\n    fullSize: true,\n    padding: 0,\n    position: \"top\",\n    text: \"\",\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: \"color\"\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false\n  }\n};\nvar positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === \"string\" || str instanceof String) && str.indexOf(\"\\n\") > -1) {\n    return str.split(\"\\n\");\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const { element, datasetIndex, index: index2 } = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const { label, value } = controller.getLabelAndValue(index2);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index2),\n    raw: chart.data.datasets[datasetIndex].data[index2],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index2,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const { body, footer, title } = tooltip;\n  const { boxWidth, boxHeight } = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return { width, height };\n}\nfunction determineYAlign(chart, size) {\n  const { y, height } = size;\n  if (y < height / 2) {\n    return \"top\";\n  } else if (y > chart.height - height / 2) {\n    return \"bottom\";\n  }\n  return \"center\";\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const { x, width } = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === \"left\" && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === \"right\" && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const { x, width } = size;\n  const { width: chartWidth, chartArea: { left, right } } = chart;\n  let xAlign = \"center\";\n  if (yAlign === \"center\") {\n    xAlign = x <= (left + right) / 2 ? \"left\" : \"right\";\n  } else if (x <= width / 2) {\n    xAlign = \"left\";\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = \"right\";\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = \"center\";\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let { x, width } = size;\n  if (xAlign === \"right\") {\n    x -= width;\n  } else if (xAlign === \"center\") {\n    x -= width / 2;\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let { y, height } = size;\n  if (yAlign === \"top\") {\n    y += paddingAndSize;\n  } else if (yAlign === \"bottom\") {\n    y -= height + paddingAndSize;\n  } else {\n    y -= height / 2;\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const { caretSize, caretPadding, cornerRadius } = options;\n  const { xAlign, yAlign } = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === \"center\") {\n    if (xAlign === \"left\") {\n      x += paddingAndSize;\n    } else if (xAlign === \"right\") {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === \"left\") {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === \"right\") {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === \"center\" ? tooltip.x + tooltip.width / 2 : align === \"right\" ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback2) {\n  return pushOrConcat([], splitNewlines(callback2));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: \"tooltip\"\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nvar Tooltip = class extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = void 0;\n    this._size = void 0;\n    this._cachedAnimations = void 0;\n    this._tooltipItems = [];\n    this.$animations = void 0;\n    this.$context = void 0;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = void 0;\n    this.title = void 0;\n    this.beforeBody = void 0;\n    this.body = void 0;\n    this.afterBody = void 0;\n    this.footer = void 0;\n    this.xAlign = void 0;\n    this.yAlign = void 0;\n    this.x = void 0;\n    this.y = void 0;\n    this.height = void 0;\n    this.width = void 0;\n    this.caretX = void 0;\n    this.caretY = void 0;\n    this.labelColors = void 0;\n    this.labelPointStyles = void 0;\n    this.labelTextColors = void 0;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = void 0;\n    this.$context = void 0;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const { callbacks } = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const { callbacks } = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const { callbacks } = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index2, array) => options.filter(element, index2, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = void 0;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, { chart: this.chart, tooltip: this, replay });\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const { xAlign, yAlign } = this;\n    const { caretSize, cornerRadius } = options;\n    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(cornerRadius);\n    const { x: ptX, y: ptY } = tooltipPoint;\n    const { width, height } = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === \"center\") {\n      y2 = ptY + height / 2;\n      if (xAlign === \"left\") {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === \"left\") {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n      } else if (xAlign === \"right\") {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === \"top\") {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return { x1, x2, x3, y1, y2, y3 };\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = \"middle\";\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const { boxHeight, boxWidth, boxPadding } = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, \"left\", options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some((v) => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const { body } = this;\n    const { bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding } = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = \"middle\";\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== \"right\" ? bodyAlign === \"center\" ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = \"middle\";\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const { xAlign, yAlign } = this;\n    const { x, y } = pt;\n    const { width, height } = tooltipSize;\n    const { topLeft, topRight, bottomLeft, bottomRight } = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === \"top\") {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === \"center\" && xAlign === \"right\") {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === \"bottom\") {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === \"center\" && xAlign === \"left\") {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({ datasetIndex, index: index2 }) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error(\"Cannot find a dataset at index \" + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index2],\n        index: index2\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === \"mouseout\") {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const { caretX, caretY, options } = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n};\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: \"tooltip\",\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({ chart, options });\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins(\"beforeTooltipDraw\", args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins(\"afterTooltipDraw\", args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: \"average\",\n    backgroundColor: \"rgba(0,0,0,0.8)\",\n    titleColor: \"#fff\",\n    titleFont: {\n      weight: \"bold\"\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: \"left\",\n    bodyColor: \"#fff\",\n    bodySpacing: 2,\n    bodyFont: {},\n    bodyAlign: \"left\",\n    footerColor: \"#fff\",\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: \"bold\"\n    },\n    footerAlign: \"left\",\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: \"#fff\",\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: \"rgba(0,0,0,0)\",\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: \"easeOutQuart\"\n    },\n    animations: {\n      numbers: {\n        type: \"number\",\n        properties: [\"x\", \"y\", \"width\", \"height\", \"caretX\", \"caretY\"]\n      },\n      opacity: {\n        easing: \"linear\",\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === \"dataset\") {\n            return item.dataset.label || \"\";\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return \"\";\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === \"dataset\") {\n          return tooltipItem.label + \": \" + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || \"\";\n        if (label) {\n          label += \": \";\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: \"font\",\n    footerFont: \"font\",\n    titleFont: \"font\"\n  },\n  descriptors: {\n    _scriptable: (name) => name !== \"filter\" && name !== \"itemSort\" && name !== \"external\",\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: \"animation\"\n    }\n  },\n  additionalOptionScopes: [\"interaction\"]\n};\nvar plugins = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  Decimation: plugin_decimation,\n  Filler: index,\n  Legend: plugin_legend,\n  SubTitle: plugin_subtitle,\n  Title: plugin_title,\n  Tooltip: plugin_tooltip\n});\nvar addIfString = (labels, raw, index2, addedLabels) => {\n  if (typeof raw === \"string\") {\n    index2 = labels.push(raw) - 1;\n    addedLabels.unshift({ index: index2, label: raw });\n  } else if (isNaN(raw)) {\n    index2 = null;\n  }\n  return index2;\n};\nfunction findOrAddLabel(labels, raw, index2, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index2, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index2 : first;\n}\nvar validIndex = (index2, max) => index2 === null ? null : _limitValue(Math.round(index2), 0, max);\nvar CategoryScale = class extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = void 0;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const { index: index2, label } of added) {\n        if (labels[index2] === label) {\n          labels.splice(index2, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index2) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index2 = isFinite(index2) && labels[index2] === raw ? index2 : findOrAddLabel(labels, raw, valueOrDefault(index2, raw), this._addedLabels);\n    return validIndex(index2, labels.length - 1);\n  }\n  determineDataLimits() {\n    const { minDefined, maxDefined } = this.getUserBounds();\n    let { min, max } = this.getMinMax(true);\n    if (this.options.bounds === \"ticks\") {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({ value });\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== \"number\") {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index2) {\n    const ticks = this.ticks;\n    if (index2 < 0 || index2 > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index2].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n};\nCategoryScale.id = \"category\";\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const { bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds } = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const { min: rmin, max: rmax } = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{ value: rmin }, { value: rmax }];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === \"ticks\") {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1e3)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1e3)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({ value: min });\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({ value: Math.round((niceMin + j * spacing) * factor) / factor });\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({ value: max });\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({ value: niceMax });\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal, minRotation }) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 1e-3;\n  const length = 0.75 * minSpacing * (\"\" + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nvar LinearScaleBase = class extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = void 0;\n    this.end = void 0;\n    this._startValue = void 0;\n    this._endValue = void 0;\n    this._valueRange = 0;\n  }\n  parse(raw, index2) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === \"number\" || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const { beginAtZero } = this.options;\n    const { minDefined, maxDefined } = this.getUserBounds();\n    let { min, max } = this;\n    const setMin = (v) => min = minDefined ? min : v;\n    const setMax = (v) => max = maxDefined ? max : v;\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let { maxTicksLimit, stepSize } = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1e3) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1e3;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === \"ticks\") {\n      _setMinAndMaxByKey(ticks, this, \"value\");\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n};\nvar LinearScale = class extends LinearScaleBase {\n  determineDataLimits() {\n    const { min, max } = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 1e-3;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n};\nLinearScale.id = \"linear\";\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\nfunction isMajor(tickVal) {\n  const remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({ value: tickVal, major: isMajor(tickVal) });\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || exp === endExp && significand < endSignificand);\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({ value: lastTick, major: isMajor(tickVal) });\n  return ticks;\n}\nvar LogarithmicScale = class extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = void 0;\n    this.end = void 0;\n    this._startValue = void 0;\n    this._valueRange = 0;\n  }\n  parse(raw, index2) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index2]);\n    if (value === 0) {\n      this._zero = true;\n      return void 0;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const { min, max } = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const { minDefined, maxDefined } = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = (v) => min = minDefined ? min : v;\n    const setMax = (v) => max = maxDefined ? max : v;\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, 1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, 1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === \"ticks\") {\n      _setMinAndMaxByKey(ticks, this, \"value\");\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === void 0 ? \"0\" : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === void 0 || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n};\nLogarithmicScale.id = \"logarithmic\";\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - size / 2,\n      end: pos + size / 2\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return \"center\";\n  } else if (angle < 180) {\n    return \"left\";\n  }\n  return \"right\";\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === \"right\") {\n    x -= w;\n  } else if (align === \"center\") {\n    x -= w / 2;\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= h / 2;\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const { ctx, options: { pointLabels } } = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const { x, y, textAlign, left, top, right, bottom } = scale._pointLabelItems[i];\n    const { backdropColor } = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some((v) => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + plFont.lineHeight / 2,\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign,\n        textBaseline: \"middle\"\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const { ctx } = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const { color: color2, lineWidth } = gridLineOpts;\n  if (!circular && !labelCount || !color2 || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color2;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index2, label) {\n  return createContext(parent, {\n    label,\n    index: index2,\n    type: \"pointLabel\"\n  });\n}\nvar RadialLinearScale = class extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = void 0;\n    this.yCenter = void 0;\n    this.drawingArea = void 0;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const { min, max } = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels().map((value, index2) => {\n      const label = callback(this.options.pointLabels.callback, [value, index2], this);\n      return label || label === 0 ? label : \"\";\n    }).filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index2) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index2 * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index2) {\n    const pointLabels = this._pointLabels || [];\n    if (index2 >= 0 && index2 < pointLabels.length) {\n      const pointLabel = pointLabels[index2];\n      return createPointLabelContext(this.getContext(), index2, pointLabel);\n    }\n  }\n  getPointPosition(index2, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index2) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index2, value) {\n    return this.getPointPosition(index2, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index2) {\n    return this.getPointPositionForValue(index2 || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index2) {\n    const { left, top, right, bottom } = this._pointLabelItems[index2];\n    return {\n      left,\n      top,\n      right,\n      bottom\n    };\n  }\n  drawBackground() {\n    const { backgroundColor, grid: { circular } } = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const { angleLines, grid } = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index2) => {\n        if (index2 !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index2 - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const { color: color2, lineWidth } = optsAtIndex;\n        if (!lineWidth || !color2) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color2;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {\n  }\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = \"center\";\n    ctx.textBaseline = \"middle\";\n    this.ticks.forEach((tick, index2) => {\n      if (index2 === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index2));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index2].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {\n  }\n};\nRadialLinearScale.id = \"radialLinear\";\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: \"chartArea\",\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: void 0,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  \"angleLines.color\": \"borderColor\",\n  \"pointLabels.color\": \"color\",\n  \"ticks.color\": \"color\"\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: \"grid\"\n  }\n};\nvar INTERVALS = {\n  millisecond: { common: true, size: 1, steps: 1e3 },\n  second: { common: true, size: 1e3, steps: 60 },\n  minute: { common: true, size: 6e4, steps: 60 },\n  hour: { common: true, size: 36e5, steps: 24 },\n  day: { common: true, size: 864e5, steps: 30 },\n  week: { common: false, size: 6048e5, steps: 4 },\n  month: { common: true, size: 2628e6, steps: 12 },\n  quarter: { common: false, size: 7884e6, steps: 4 },\n  year: { common: true, size: 3154e7 }\n};\nvar UNITS = Object.keys(INTERVALS);\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const { parser, round: round2, isoWeekday } = scale._parseOpts;\n  let value = input;\n  if (typeof parser === \"function\") {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === \"string\" ? adapter.parse(value, parser) : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round2) {\n    value = round2 === \"week\" && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, \"isoWeek\", isoWeekday) : adapter.startOf(value, round2);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const { lo, hi } = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map3, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index2;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index2 = map3[major];\n    if (index2 >= 0) {\n      ticks[index2].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map3 = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map3[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map3, majorUnit);\n}\nvar TimeScale = class extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = \"day\";\n    this._majorUnit = void 0;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = void 0;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index2) {\n    if (raw === void 0) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || \"day\";\n    let { min, max, minDefined, maxDefined } = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== \"ticks\" || options.ticks.source !== \"labels\") {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return { min, max };\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === \"labels\" ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === \"ticks\" && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === \"year\" ? void 0 : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map((tick) => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = { start, end, factor: 1 / (start + 1 + end) };\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === \"week\" ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, \"isoWeek\", weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? \"day\" : minor);\n    if (adapter.diff(max, min, minor) > 1e5 * stepSize) {\n      throw new Error(min + \" and \" + max + \" are too far apart with stepSize of \" + stepSize + \" \" + minor);\n    }\n    const timestamps = options.ticks.source === \"data\" && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === \"ticks\" || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map((x) => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index2, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index2];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index2, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n      h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return this._cache.data = metas[0].controller.getAllParsedValues(this);\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return this._cache.data = this.normalize(timestamps);\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n};\nTimeScale.id = \"time\";\nTimeScale.defaults = {\n  bounds: \"data\",\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: \"millisecond\",\n    displayFormats: {}\n  },\n  ticks: {\n    source: \"auto\",\n    major: {\n      enabled: false\n    }\n  }\n};\nfunction interpolate2(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({ lo, hi } = _lookupByKey(table, \"pos\", val));\n    }\n    ({ pos: prevSource, time: prevTarget } = table[lo]);\n    ({ pos: nextSource, time: nextTarget } = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({ lo, hi } = _lookupByKey(table, \"time\", val));\n    }\n    ({ time: prevSource, pos: prevTarget } = table[lo]);\n    ({ time: nextSource, pos: nextTarget } = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nvar TimeSeriesScale = class extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = void 0;\n    this._tableRange = void 0;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate2(table, this.min);\n    this._tableRange = interpolate2(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const { min, max } = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        { time: min, pos: 0 },\n        { time: max, pos: 1 }\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({ time: curr, pos: i / (ilen - 1) });\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate2(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate2(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n};\nTimeSeriesScale.id = \"timeseries\";\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  CategoryScale,\n  LinearScale,\n  LogarithmicScale,\n  RadialLinearScale,\n  TimeScale,\n  TimeSeriesScale\n});\nvar registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales\n];\n\n// node_modules/chart.js/auto/auto.mjs\nChart.register(...registerables);\nvar auto_default = Chart;\nexport {\n  auto_default as default\n};\n/*! Bundled license information:\n\nchart.js/dist/chunks/helpers.segment.mjs:\n  (*!\n   * Chart.js v3.9.1\n   * https://www.chartjs.org\n   * (c) 2022 Chart.js Contributors\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chunks/helpers.segment.mjs:\n  (*!\n   * @kurkle/color v0.2.1\n   * https://github.com/kurkle/color#readme\n   * (c) 2022 Jukka Kurkela\n   * Released under the MIT License\n   *)\n\nchart.js/dist/chart.mjs:\n  (*!\n   * Chart.js v3.9.1\n   * https://www.chartjs.org\n   * (c) 2022 Chart.js Contributors\n   * Released under the MIT License\n   *)\n*/\n//# sourceMappingURL=chart__js_auto.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport Chart from \"chart.js/auto\";\n\nexport default class extends Controller {\n  static targets = [ \"allTasksChart\", \"task1Chart\", \"task2Chart\", \"task3Chart\" ]\n\n  connect() {\n    this.initializeAllTasksChart()\n    this.initializeTasksChart()\n  }\n\n  initializeAllTasksChart() {\n    const percentComplete = this.allTasksChartTarget.dataset.percentComplete\n    const percentIncomplete = 100 - percentComplete\n    const data = {\n      labels: ['Complete', 'Incomplete'],\n      datasets: [{\n        data: [percentComplete, percentIncomplete],\n        backgroundColor: ['#95C64F', '#FFFFFF'],\n        hoverOffset: 1,\n        borderWidth: 0\n      }]\n    };\n\n    new Chart(this.allTasksChartTarget, {\n      type: 'pie',\n      data: data,\n      options: {\n        plugins: {\n          legend: {\n            display: false,\n          },\n          tooltip: {\n            enabled: false\n          }\n        }\n      }\n    })\n  }\n\n  initializeTasksChart() {\n    const targets = [\n      this.hasTask1ChartTarget ? this.task1ChartTarget : undefined,\n      this.hasTask2ChartTarget ? this.task2ChartTarget : undefined,\n      this.hasTask3ChartTarget ? this.task3ChartTarget : undefined\n    ].filter(Boolean)\n\n    targets.forEach(target => {\n      const percentComplete = target.dataset.percentComplete\n      const percentIncomplete = 100 - percentComplete\n      const data = {\n        labels: ['Complete', 'Incomplete'],\n        datasets: [{\n          data: [percentComplete, percentIncomplete],\n          backgroundColor: ['#95C64F', '#F3F4F6'],\n          hoverOffset: 1,\n          borderWidth: 0\n        }]\n      };\n\n      new Chart(target, {\n        type: 'doughnut',\n        data: data,\n        options: {\n          cutout: '70%',\n          layout: {\n            padding: 1\n          },\n          plugins: {\n            legend: {\n              display: false,\n            },\n            tooltip: {\n              enabled: false\n            }\n          }\n        }\n      })\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  toggleMembersCheckboxes(isChecked) {\n    for (const checkbox of document.querySelectorAll(\"#group_membership_ids\")) {\n      checkbox.checked = isChecked\n    }\n  }\n\n  cancelReminder(event) {\n    event.preventDefault()\n    this.toggleMembersCheckboxes(false)\n  }\n\n  toggleAllMembers(event) {\n    event.preventDefault()\n    const button = event.target\n    const isGoingToSelectAll = button.textContent === \"Select all\"\n    this.toggleMembersCheckboxes(isGoingToSelectAll)\n    button.textContent = isGoingToSelectAll ? \"Unselect all\" : \"Select all\"\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"kindSelect\",\n    \"fileUploadFields\",\n    \"eventFields\",\n    \"reviewMaterialsFields\",\n    \"formFields\",\n    \"formQuestionTemplate\",\n    \"formQuestions\",\n    \"pollFields\",\n    \"pollQuestionTemplate\",\n    \"pollChoiceTemplate\",\n    \"pollQuestions\",\n    \"formFields\",\n    \"urlTemplate\",\n    \"urls\"\n  ]\n  static values = {\n    isAnswered: Boolean\n  }\n\n  connect() {\n    if (this.hasKindSelectTarget) {\n       const event = new Event(\"change\", { bubbles: true })\n\n      $(this.kindSelectTarget).on(\"select2:select\", function() {\n        this.dispatchEvent(event)\n      })\n\n      this.kindSelectTarget.dispatchEvent(event)\n    }\n  }\n\n  disconnect() {\n    if (this.hasKindSelectTarget) {\n      $(this.kindSelectTarget).select2(\"destroy\")\n    }\n  }\n\n  onKindChange(event) {\n    const select = event.target\n    const selectedKind = select.value\n    const targetName = select.options[select.selectedIndex].dataset.target\n    const target = this[targetName]\n\n    if (selectedKind) {\n      target.classList.remove(\"hidden\")\n      this.hideFields(target)\n      this.toggleFields(target)\n    } else {\n      this.hideFields(null)\n      this.toggleFields(target)\n    }\n  }\n\n  hideFields(selectedTarget) {\n    document.querySelectorAll(\".fields-group\").forEach(element => {\n      if (element !== selectedTarget) {\n        element.classList.add(\"hidden\")\n      }\n    })\n  }\n\n  toggleFields(selectedTarget) {\n    const selector = \":input:not([data-permanently-disabled=true]), button:not([data-permanently-disabled=true])\"\n\n    $(\".fields-group\").each((index, element) => {\n      if (element === selectedTarget) {\n        $(element).find(selector).attr(\"disabled\", false)\n      } else {\n        $(element).find(selector).attr(\"disabled\", true)\n      }\n    })\n  }\n\n  toggleAllMembers(event) {\n    event.preventDefault()\n    const button = event.target\n    const isGoingToSelectAll = button.textContent === \"Select all\"\n\n    for (const checkbox of document.querySelectorAll(\"#group_membership_ids\")) {\n      checkbox.checked = isGoingToSelectAll\n    }\n\n    button.textContent = isGoingToSelectAll ? \"Unselect all\" : \"Select all\"\n  }\n\n  disablePoll() {\n    $(this.pollQuestionsTarget).find(\":input\").attr(\"disabled\", true)\n    $(this.pollFieldsTarget).find(\"button\").attr(\"disabled\", true)\n  }\n\n  addPollQuestion(event) {\n    event.preventDefault()\n    const index = new Date().getTime()\n    const content = $(this.pollQuestionTemplateTarget).html().replaceAll(\"{{index}}\", index)\n    $(this.pollQuestionsTarget).append(content)\n    $(this.pollQuestionsTarget).find(\":input\").attr(\"disabled\", false)\n  }\n\n  deletePollQuestion(event) {\n    event.preventDefault()\n    const index = $(event.target).data(\"index\")\n    const questionToRemove = $(this.pollQuestionsTarget).find(`.poll-question[data-index='${index}']`)\n    questionToRemove.remove()\n  }\n\n  addPollChoice(event) {\n    event.preventDefault()\n    const questionIndex = $(event.target).data(\"index\")\n    const choiceIndex = new Date().getTime()\n    const content = $(this.pollChoiceTemplateTarget).html()\n      .replaceAll(\"{{question_index}}\", questionIndex)\n      .replaceAll(\"{{choice_index}}\", choiceIndex)\n    $(this.pollQuestionsTarget).find(`.poll-question[data-index='${questionIndex}'] .poll-choices`).append(content)\n    $(this.pollQuestionsTarget).find(\":input\").attr(\"disabled\", false)\n  }\n\n  deletePollChoice(event) {\n    event.preventDefault()\n    const choiceIndex = $(event.target).data(\"choiceIndex\")\n    const questionIndex = $(event.target).data(\"questionIndex\")\n    const choiceToRemove = $(this.pollQuestionsTarget).find(`.poll-question[data-index='${questionIndex}'] .poll-choice[data-choice-index='${choiceIndex}']`)\n    choiceToRemove.remove()\n  }\n\n  addUrl(event) {\n    event.preventDefault()\n    const content = $(this.urlTemplateTarget).html()\n    $(this.urlsTarget).append(content)\n    $(\".delete-url-button\").first().show()\n  }\n\n  deleteUrl(event) {\n    event.preventDefault()\n    $(event.target).closest(\".url\").remove()\n\n    if ($(\".url\").length === 1) {\n      $(\".delete-url-button\").first().hide()\n    }\n  }\n\n  addFormQuestion(event) {\n    event.preventDefault()\n    const content = $(this.formQuestionTemplateTarget).html()\n    $(this.formQuestionsTarget).append(content)\n    $(this.formQuestionsTarget).find(\":input\").attr(\"disabled\", false)\n    $(\".delete-question-button\").first().show()\n  }\n\n  deleteFormQuestion(event) {\n    event.preventDefault()\n    $(event.target).closest(\".form-question\").remove()\n\n    if ($(\".form-question\").length === 1) {\n      $(\".delete-question-button\").first().hide()\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"modal\",\n    \"overlay\",\n    \"checkoutLink\",\n    \"closeButton\"\n  ]\n\n  open(event) {\n    const productId = event.currentTarget.dataset.productId\n    this.checkoutLinkTarget.href = `/stripe/checkouts?product_ids=${productId}`\n    this.modalTarget.classList.remove('hidden')\n  }\n\n  close(event) {\n    if (event.currentTarget === this.closeButtonTarget || event.target === this.overlayTarget) {\n      this.modalTarget.classList.add('hidden')\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"tagDropdown\",\n    \"selectedTagsContainer\",\n    \"selectedTagTemplate\",\n    \"tagInput\",\n    \"sortInput\",\n    \"form\",\n    \"searchResultsHeader\"\n  ]\n  static values = {\n    search: String,\n    sortBy: String\n  }\n\n  connect() {\n    let _this = this\n    const tagDropdown = $(this.tagDropdownTarget)\n    this.selectedTags = $(this.tagInputTarget).val().split(\",\").filter(item => item)\n\n    $(document).click(function() {\n      tagDropdown.find(\"ul:visible\").slideToggle(\"fast\")\n    })\n\n    tagDropdown.click(function(event) {\n      event.stopPropagation()\n\n      tagDropdown.find(\"ul\").slideToggle(\"fast\")\n    })\n\n    tagDropdown.find(\"li\").click(function(event) {\n      _this.setValue($(this))\n      _this.formTarget.submit()\n    })\n\n    if (this.searchValue.length > 0 || this.sortByValue.length > 0 || this.selectedTags.length > 0) {\n      setTimeout(() => {\n        this.searchResultsHeaderTarget.scrollIntoView({ behavior: \"smooth\" })\n      }, 100)\n    }\n  }\n\n  unselectTag(event) {\n    const value = $(event.currentTarget).data(\"value\").toString()\n    const tag = $(this.tagDropdownTarget).find(`li[data-value='${value}']`)\n    this.removeValue(tag)\n    this.formTarget.submit()\n  }\n\n  sortByLatest(event) {\n    this.sortInputTarget.value = \"latest\"\n    this.formTarget.submit()\n  }\n\n  sortByPopular(event) {\n    this.sortInputTarget.value = \"popular\"\n    this.formTarget.submit()\n  }\n\n  removeValue(tag) {\n    const value = tag.data(\"value\").toString()\n    tag.find(\".tag-check-icon\").addClass(\"hidden\")\n    this.selectedTags = this.selectedTags.filter(item => item && item !== value)\n    $(this.tagInputTarget).val(this.selectedTags)\n    $(this.selectedTagsContainerTarget).find(`[data-value='${value}']`).remove()\n  }\n\n  setValue(tag) {\n    const value = tag.data(\"value\").toString()\n    const text = tag.data(\"text\")\n    const content = $(this.selectedTagTemplateTarget).html()\n      .replaceAll(\"{{text}}\", text)\n      .replaceAll(\"{{value}}\", value)\n    $(this.tagDropdownTarget).find(\"li\").not(tag).find(\".tag-check-icon\").addClass(\"hidden\")\n    tag.find(\".tag-check-icon\").removeClass(\"hidden\")\n    this.selectedTags = [value]\n    $(this.tagInputTarget).val(this.selectedTags)\n    $(this.selectedTagsContainerTarget).html(content)\n  }\n}\n","const minimumInputLength = 2\nconst delayBetweenRequests = 500\nlet sessionToken\n\nfunction defineGoogleAutocompleteDataAdapter() {\n  const ArrayAdapter = $.fn.select2.amd.require(\"select2/data/array\")\n\n  // patch for select2 that removes the entire tag when using backspace\n  const Search = $.fn.select2.amd.require(\"select2/selection/search\")\n  const oldRemoveChoice = Search.prototype.searchRemoveChoice\n  Search.prototype.searchRemoveChoice = function() {\n    oldRemoveChoice.apply(this, arguments)\n    this.$search.val('')\n  }\n\n  return class extends ArrayAdapter {\n    constructor($element, options) {\n      super($element, options)\n\n      this.autocompleteService = new google.maps.places.AutocompleteService()\n      this.placesService = new google.maps.places.PlacesService(document.getElementById(\"places-map\"))\n      sessionToken = new google.maps.places.AutocompleteSessionToken()\n    }\n\n    query(params, callback) {\n      const data = {results: []}\n\n      if (params.term && params.term !== '' && params.term.length >= minimumInputLength) {\n        if (this.timeoutId) {\n          clearTimeout(this.timeoutId)\n        }\n\n        this.timeoutId = setTimeout(() => {\n          const options = {\n            input: params.term,\n            types: [\"(regions)\"],\n            sessionToken: sessionToken,\n            componentRestrictions: {\n              country: \"us\"\n            }\n          }\n          this.autocompleteService.getPlacePredictions(options).then(response => {\n            response.predictions.forEach(prediction => {\n              data.results.push({\n                id: prediction.description,\n                text: prediction.description,\n                placeId: prediction.place_id\n              })\n            })\n            callback(data)\n          })\n        }, delayBetweenRequests)\n      } else {\n        callback(data)\n      }\n    }\n  }\n}\n\nconst GoogleAutocompleteDataAdapter = new Promise((resolve) => {\n  $(document).ready(function() {\n    const GoogleAutocompleteDataAdapter = defineGoogleAutocompleteDataAdapter()\n\n    // patch for our custom select2 adapter that fetches the place details\n    // when user selects one suggestion (making the request free of charge)\n    // https://developers.google.com/maps/documentation/places/web-service/usage-and-billing#ac-with-details-session\n    const oldSelectMethod = GoogleAutocompleteDataAdapter.prototype.select\n    GoogleAutocompleteDataAdapter.prototype.select = function(data) {\n      const options = {\n        placeId: data.placeId,\n        fields: [\"formatted_address\"],\n        sessionToken: sessionToken\n      }\n      this.placesService.getDetails(options, (place, status) => {\n        sessionToken = new google.maps.places.AutocompleteSessionToken()\n      })\n\n      oldSelectMethod.bind(this)(data)\n    }\n\n    resolve(GoogleAutocompleteDataAdapter)\n  })\n})\n\nexport default GoogleAutocompleteDataAdapter\n","import { Controller } from \"@hotwired/stimulus\"\nimport GoogleAutocompleteDataAdapter from \"../adapters/google_autocomplete_data_adapter\"\nimport \"jquery-validation/dist/jquery.validate.min\"\nimport \"jquery-validation/dist/additional-methods.min\"\n\nexport default class extends Controller {\n  static targets = [\n    \"currentLocation\",\n    \"relocationPreferences\",\n    \"relocationPreferencesDiv\",\n    \"genderSelect\",\n    \"ethnicitySelect\",\n    \"disabilitySelect\",\n    \"pronounsSelect\",\n    \"selfDescribedGender\",\n    \"selfDescribedEthnicity\",\n    \"selfDescribedDisability\",\n    \"selfDescribedPronouns\",\n    \"errors\",\n    \"submitButton\",\n    \"resumeField\",\n    \"resumeContainer\",\n    \"saveToProfileButton\"\n  ]\n  static values = {\n    userId: Number\n  }\n\n  connect() {\n    if (window?.google?.maps?.places) {\n      this.initializeCurrentLocationField()\n      this.initializeRelocationPreferencesSelect()\n    } else {\n      document.addEventListener(\"googleMapsReady\", () => {\n        this.initializeCurrentLocationField()\n        this.initializeRelocationPreferencesSelect()\n      })\n    }\n\n    this.initializeValidation()\n    this.initializeGenderSelect()\n    this.initializePronounsSelect()\n    this.initializeEthnicitySelect()\n    this.initializeDisabilitySelect()\n    this.listenForChanges()\n    this.scrollToErrors()\n  }\n\n  findValidationTarget(element) {\n    if ($(element).is(\"select\") || $(element).is(\":file\")) {\n      return $(element).next()\n    } else if ($(element).is(\":radio\")) {\n      return $(document.getElementsByName($(element).attr(\"name\"))).nextAll()\n    } else {\n      return $(element)\n    }\n  }\n\n  initializeCurrentLocationField() {\n    new google.maps.places.Autocomplete(\n      this.currentLocationTarget,\n      {\n        types: [\"(regions)\"],\n        componentRestrictions: {country: \"us\"}\n      }\n    )\n  }\n\n  initializeRelocationPreferencesSelect() {\n    GoogleAutocompleteDataAdapter.then((AutocompleteClass) => {\n      this.relocationPreferencesSelect = $(this.relocationPreferencesTarget).select2({\n        width: \"style\",\n        multiple: true,\n        dataAdapter: AutocompleteClass,\n        placeholder: \"Start typing a city or state\"\n      })\n      this.relocationPreferencesSelect.on(\"select2:selecting\", function(event) {\n        const text = event.params.args.data.text\n        const selectedOptions = $(this).val() || []\n        const newLength = [...selectedOptions, text].join(\"; \").length\n\n        if (newLength > 255) {\n          alert(\"You have selected too many locations. Please remove some before adding more.\")\n          event.preventDefault()\n        }\n      })\n    })\n  }\n\n  initializeGenderSelect() {\n    this.genderSelect = $(this.genderSelectTarget).select2()\n    $(this.genderSelect).change(event => this.onGenderSelect(event.target.value))\n    $(this.genderSelect).trigger(\"change\")\n  }\n\n  initializePronounsSelect() {\n    this.pronounsSelect = $(this.pronounsSelectTarget).select2()\n    $(this.pronounsSelect).change(event => this.onPronounsSelect(event.target.value))\n    $(this.pronounsSelect).trigger(\"change\")\n  }\n\n  initializeEthnicitySelect() {\n    this.ethnicitySelect = $(this.ethnicitySelectTarget).select2()\n    $(this.ethnicitySelect).change(event => this.onEthnicitySelect(event.target.selectedOptions))\n    $(this.ethnicitySelect).trigger(\"change\")\n  }\n\n  initializeDisabilitySelect() {\n    this.disabilitySelect = $(this.disabilitySelectTarget).select2()\n    $(this.disabilitySelect).change(event => this.onDisabilitySelect(event.target.selectedOptions))\n    $(this.disabilitySelect).trigger(\"change\")\n  }\n\n  onOpenToRelocationChange(event) {\n    const isChecked = event.target.value === \"true\"\n\n    if (isChecked) {\n      this.relocationPreferencesDivTarget.classList.remove(\"hidden\")\n    } else {\n      this.relocationPreferencesDivTarget.classList.add(\"hidden\")\n      $(this.relocationPreferencesTarget).empty()\n    }\n  }\n\n  onGenderSelect(value) {\n    if (value === \"Self-Describe\") {\n      $(this.selfDescribedGenderTarget).show()\n      $(\"#job_application_self_described_gender\").rules(\"add\", \"required\")\n    } else {\n      $(this.selfDescribedGenderTarget).hide()\n      $(\"#job_application_self_described_gender\").rules(\"remove\", \"required\")\n    }\n  }\n\n  onPronounsSelect(value) {\n    if (value === \"Self-Describe:\") {\n      $(this.selfDescribedPronounsTarget).show()\n      $(\"#job_application_self_described_pronouns\").rules(\"add\", \"required\")\n    } else {\n      $(this.selfDescribedPronounsTarget).hide()\n      $(\"#job_application_self_described_pronouns\").rules(\"remove\", \"required\")\n    }\n  }\n\n  onEthnicitySelect(selectedOptions) {\n    const values = Array.from(selectedOptions).map(({ value }) => value)\n\n    if (values.includes(\"Self Describe:\")) {\n      $(this.selfDescribedEthnicityTarget).show()\n      $(\"#job_application_self_described_ethnicity\").rules(\"add\", \"required\")\n    } else {\n      $(this.selfDescribedEthnicityTarget).hide()\n      $(\"#job_application_self_described_ethnicity\").rules(\"remove\", \"required\")\n    }\n  }\n\n  onDisabilitySelect(selectedOptions) {\n    const values = Array.from(selectedOptions).map(({ value }) => value)\n\n    if (values.includes(\"Other disability/impairment:\")) {\n      $(this.selfDescribedDisabilityTarget).show()\n      $(\"#job_application_self_described_disability\").rules(\"add\", \"required\")\n    } else {\n      $(this.selfDescribedDisabilityTarget).hide()\n      $(\"#job_application_self_described_disability\").rules(\"remove\", \"required\")\n    }\n  }\n\n  listenForChanges() {\n    const _this = this\n\n    $(\"#job_application_current_location, #job_application_current_title, #job_application_linkedin_url\").on(\"input\", function() {\n      _this.saveToProfileButtonTarget.disabled = !$(this).valid()\n    })\n\n    $(\"#job_application_current_location, #job_application_current_title, input[name='job_application[open_to_relocation]'], \" +\n      \"#job_application_relocation_preferences, #job_application_current_company_revenue, \" +\n      \"input[name='job_application[private_equity_experience]'], #job_application_sector_experience, \" +\n      \"input[name='job_application[private_equity_sale_process_experience]'], #job_application_linkedin_url, \" +\n      \"#job_application_resume\").on(\"change\", function() {\n        _this.saveToProfileButtonTarget.disabled = !$(this).valid()\n    })\n  }\n\n  scrollToErrors() {\n    if (this.errorsTarget.querySelector(\"div\") !== null) {\n      this.errorsTarget.scrollIntoView()\n    }\n  }\n\n  initializeValidation() {\n    const _this = this\n\n    $.validator.addMethod('filesize', function (value, element, param) {\n      return this.optional(element) || (element.files[0].size <= param)\n    }, function(size) {\n      return `The maximum file size is ${Math.round(size / (1024 * 1024))}MB.`\n    })\n\n    $.validator.addMethod('greaterThanZeroIfFilled', function(value, element) {\n      return this.optional(element) || (value > 0)\n    }, 'The value must be positive.')\n\n    $(\"#job-application-form\").validate({\n      ignore: \"input[type=hidden]\",\n      onfocusout: function(element) {\n        if ($(element).hasClass(\"validate-on-blur\")) {\n          this.element(element)\n        }\n      },\n      invalidHandler: function(event, validator) {\n        if (validator.numberOfInvalids() === 0)\n          return\n\n        $(\"html, body\").animate({\n          scrollTop: $(validator.errorList[0].element).closest(\":visible\").offset().top - 100\n        }, 500)\n      },\n      rules: {\n        \"job_application[current_location]\": \"required\",\n        \"job_application[current_title]\": \"required\",\n        \"job_application[linkedin_url]\": \"required\",\n        \"job_application[open_to_relocation]\": \"required\",\n        \"job_application[current_company_revenue]\": \"required\",\n        \"job_application[private_equity_experience]\": \"required\",\n        \"job_application[private_equity_sale_process_experience]\": \"required\",\n        \"job_application[sector_experience][]\": \"required\",\n        \"job_application[resume]\": {\n          required: true,\n          accept: \"application/pdf\",\n          filesize: 26214400\n        },\n        \"job_application[birth_year]\": {\n          number: true,\n          greaterThanZeroIfFilled: true\n        }\n      },\n      messages: {\n        \"job_application[resume]\": {\n          required: \"This field is required.\",\n          accept: \"Please select a PDF file.\"\n        }\n      },\n      errorClass: \"block text-xs text-red mt-1\",\n      highlight: function (element, errorClass, validClass) {\n        const target = _this.findValidationTarget(element)\n        target.addClass(\"has-error\")\n        $(element.form).find(\"label[for=\" + element.id + \"]\").addClass(errorClass);\n      },\n      unhighlight: function (element, errorClass, validClass) {\n        const target = _this.findValidationTarget(element)\n        target.removeClass(\"has-error\")\n        $(element.form).find(\"label[for=\" + element.id + \"]\").removeClass(errorClass);\n      },\n      errorPlacement: function (label, element) {\n        if (element.is(\":radio\") || element.is(\"select\") || element.is(\":file\")) {\n          label.insertAfter(element.parent().parent())\n        } else {\n          label.insertAfter(element)\n        }\n      }\n    })\n  }\n\n  getOpenToRelocationValue() {\n    let value = null\n\n    document.getElementsByName(\"job_application[open_to_relocation]\").forEach(element => {\n      if (element.checked) {\n        value = element.value\n      }\n    })\n\n    return value\n  }\n\n  getExperienceInPrivateEquity() {\n    let value = null\n\n    document.getElementsByName(\"job_application[private_equity_experience]\").forEach(element => {\n      if (element.checked) {\n        value = element.value\n      }\n    })\n\n    return value\n  }\n\n  getExperienceInPrivateEquitySale() {\n    let value = null\n\n    document.getElementsByName(\"job_application[private_equity_sale_process_experience]\").forEach(element => {\n      if (element.checked) {\n        value = element.value\n      }\n    })\n\n    return value\n  }\n\n  getSectorExperienceValues() {\n    return Array.from(document.getElementById(\"job_application_sector_experience\").selectedOptions).map(option => option.value)\n  }\n\n  getRelocationPreferencesValues() {\n    return Array.from(document.getElementById(\"job_application_relocation_preferences\").selectedOptions).map(option => option.value)\n  }\n\n  saveProfileData() {\n    const resume = $(\"#job_application_resume\").prop(\"files\")[0]\n    const formData  = new FormData()\n    formData.append(\"member_demographic[current_location]\", $(\"#job_application_current_location\").val())\n    formData.append(\"member_demographic[current_title]\", $(\"#job_application_current_title\").val())\n    formData.append(\"member_demographic[open_to_relocation]\", this.getOpenToRelocationValue())\n    formData.append(\"member_demographic[current_company_revenue]\", $(\"#job_application_current_company_revenue\").val())\n    formData.append(\"member_demographic[experience_in_private_equity_company]\", this.getExperienceInPrivateEquity())\n    formData.append(\"member_demographic[experience_sale_process_at_private_equity_company]\", this.getExperienceInPrivateEquitySale())\n    formData.append(\"member_demographic[user_attributes][linkedin_url]\", $(\"#job_application_linkedin_url\").val())\n\n    if (resume) {\n      formData.append(\"member_demographic[user_attributes][resume]\", resume)\n    }\n\n    this.getRelocationPreferencesValues().forEach(location => {\n      formData.append(\"member_demographic[relocation_preferences][]\", location)\n    })\n\n    this.getSectorExperienceValues().forEach(sector => {\n      formData.append(\"member_demographic[sector_experience][]\", sector)\n    })\n\n    fetch(`/account/users/${this.userIdValue}/member_demographics`, {\n      method: \"PATCH\",\n      body: formData,\n      headers: {\n        \"Accept\": \"text/vnd.turbo-stream.html\",\n        \"X-CSRF-Token\": document.querySelector(\"meta[name=csrf-token]\").content\n      }\n    }).then(response => {\n      if (response.ok) {\n        return response.text()\n      }\n\n      throw new Error(`There was a problem when saving user profile data: ${response.statusText}`)\n    }).then(html => {\n      Turbo.renderStreamMessage(html)\n    }).catch(error => {\n      Honeybadger.notify(error)\n    })\n  }\n\n  saveToProfile(event) {\n    event.preventDefault()\n\n    this.saveProfileData()\n    this.saveToProfileButtonTarget.disabled = true\n  }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = [\n    'container',\n    'form',\n    'notifyMe'\n  ]\n  static values = {\n    role: String,\n    industries: String\n  }\n\n  connect() {\n    this.timeout = null\n    this.inputs = document.querySelectorAll(\n      \"input[name='notify_me'],\" +\n      \"input[name='user[job_preferences_current_interest]'],\" +\n      \"input[name='user[job_preferences_roles][]'],\" +\n      \"input[name='user[job_preferences_industries][]']\"\n    )\n    this.inputs.forEach(input => {\n      input.addEventListener('change', this.submit.bind(this))\n    })\n\n    if (this.notifyMeTarget.checked) {\n      this.containerTarget.classList.remove('hidden')\n    }\n  }\n\n  disconnect() {\n    this.inputs.forEach(input => {\n      input.removeEventListener('change', this.submit.bind(this))\n    })\n  }\n\n  toggle() {\n    document.querySelector(`input[name=\"user[job_preferences_roles][]\"][value=\"${this.roleValue}\"]`).checked = this.notifyMeTarget.checked\n\n    this.industriesValue.split(';').forEach(industry => {\n      const input = document.querySelector(`input[name=\"user[job_preferences_industries][]\"][value=\"${industry}\"]`)\n\n      if (input) {\n        input.checked = this.notifyMeTarget.checked\n      }\n    })\n\n    if (this.notifyMeTarget.checked) {\n      document.querySelector(`input[name=\"user[job_preferences_notifications]\"]`).value = 'true'\n    }\n\n    this.containerTarget.classList.toggle('hidden')\n    this.formTarget.requestSubmit()\n  }\n\n  submit() {\n    clearTimeout(this.timeout)\n    this.timeout = setTimeout(() => this.formTarget.requestSubmit(), 1000)\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport GoogleAutocompleteDataAdapter from \"../adapters/google_autocomplete_data_adapter\"\n\nexport default class extends Controller {\n  static targets = [\n    \"currentLocation\",\n    \"relocationPreferences\",\n    \"relocationPreferencesDiv\",\n    \"openToRelocation\",\n    \"selfDescribedGender\",\n    \"selfDescribedPronouns\",\n    \"selfDescribedEthnicity\",\n    \"selfDescribedDisability\"\n  ]\n\n  connect() {\n    if (window?.google?.maps?.places) {\n      this.initializeCurrentLocationField()\n      this.initializeRelocationPreferencesSelect()\n    } else {\n      document.addEventListener(\"googleMapsReady\", () => {\n        this.initializeCurrentLocationField()\n        this.initializeRelocationPreferencesSelect()\n      })\n    }\n\n    this.listenForClicks()\n    if (this.hasSelfDescribedGenderTarget) this.addListenerToGenderField()\n    if (this.hasSelfDescribedPronounsTarget) this.addListenerToPronounsField()\n    if (this.hasSelfDescribedEthnicityTarget) this.addListenerToEthnicityField()\n    if (this.hasSelfDescribedEthnicityTarget) this.addListenerToDisabilityField()\n  }\n\n  initializeCurrentLocationField() {\n    new google.maps.places.Autocomplete(\n      this.currentLocationTarget,\n      {\n        types: [\"(regions)\"],\n        componentRestrictions: {country: \"us\"}\n      }\n    )\n  }\n\n  initializeRelocationPreferencesSelect() {\n    GoogleAutocompleteDataAdapter.then((AutocompleteClass) => {\n      this.relocationPreferencesSelect = $(this.relocationPreferencesTarget).select2({\n        width: \"style\",\n        multiple: true,\n        dataAdapter: AutocompleteClass,\n        placeholder: \"Start typing a city or state\"\n      })\n      this.relocationPreferencesSelect.on(\"select2:selecting\", function(event) {\n        const text = event.params.args.data.text\n        const selectedOptions = $(this).val() || []\n        const newLength = [...selectedOptions, text].join(\"; \").length\n\n        if (newLength > 255) {\n          alert(\"You have selected too many locations. Please remove some before adding more.\")\n          event.preventDefault()\n        }\n      })\n    })\n  }\n\n  onOpenToRelocationChange(event) {\n    const isChecked = event.target.value === \"true\"\n\n    if (isChecked) {\n      this.relocationPreferencesDivTarget.classList.remove(\"absolute\", \"invisible\")\n    } else {\n      this.relocationPreferencesDivTarget.classList.add(\"absolute\", \"invisible\")\n      $(this.relocationPreferencesTarget).empty()\n    }\n  }\n\n  listenForClicks() {\n    const _this = this\n    const form = $('#member-demographics-form')\n    let isFormDirty = false\n\n    form.on('change', ':input', function() {\n      isFormDirty = true\n    })\n\n    document.addEventListener('click', (event) => {\n      const tagName = event.target.tagName\n\n      if (tagName.toLowerCase() === 'a' && isFormDirty) {\n        event.preventDefault()\n        window.dispatchEvent(\n          new CustomEvent(\"open-modal\", {\n            bubbles: true,\n            detail: {\n              modalId: \"unsaved-changes-modal\",\n              route: event.target.href\n            }\n          })\n        )\n      }\n    })\n  }\n\n  addListenerToGenderField() {\n    const selfDescribedGenderDiv = $(this.selfDescribedGenderTarget)\n    const selfDescribedGenderInput = selfDescribedGenderDiv.find(\"input\")\n\n    $(\"select[name='member_demographic[gender]']\").change(function(event) {\n      if (event.target.value === \"Self-Describe\") {\n        selfDescribedGenderDiv.show()\n      } else {\n        selfDescribedGenderDiv.hide()\n        selfDescribedGenderInput.val(\"\")\n      }\n    })\n  }\n\n  addListenerToPronounsField() {\n    const selfDescribedPronounsDiv = $(this.selfDescribedPronounsTarget)\n    const selfDescribedPronounsInput = selfDescribedPronounsDiv.find(\"input\")\n\n    $(\"select[name='member_demographic[pronouns]']\").change(function(event) {\n      if (event.target.value === \"Self-Describe:\") {\n        selfDescribedPronounsDiv.show()\n      } else {\n        selfDescribedPronounsDiv.hide()\n        selfDescribedPronounsInput.val(\"\")\n      }\n    })\n  }\n\n  addListenerToEthnicityField() {\n    const selfDescribedEthnicityDiv = $(this.selfDescribedEthnicityTarget)\n    const selfDescribedEthnicityInput = selfDescribedEthnicityDiv.find(\"input\")\n\n    $(\"select[name='member_demographic[ethnicity][]']\").change(function(event) {\n      if ($(event.target).val().includes(\"Self Describe:\")) {\n        selfDescribedEthnicityDiv.show()\n      } else {\n        selfDescribedEthnicityDiv.hide()\n        selfDescribedEthnicityInput.val(\"\")\n      }\n    })\n  }\n\n  addListenerToDisabilityField() {\n    const selfDescribedDisabilityDiv = $(this.selfDescribedDisabilityTarget)\n    const selfDescribedDisabilityInput = selfDescribedDisabilityDiv.find(\"input\")\n\n    $(\"select[name='member_demographic[disability_or_impairment][]']\").change(function(event) {\n      if ($(event.target).val().includes(\"Other disability/impairment:\")) {\n        selfDescribedDisabilityDiv.show()\n      } else {\n        selfDescribedDisabilityDiv.hide()\n        selfDescribedDisabilityInput.val(\"\")\n      }\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"wrapper\"]\n  static classes = [ \"hidden\" ] // necessary because stimulus-reveal will mess with the [hidden] attribute on the wrapper\n  static values = {\n    showEventName: String,\n    hideEventName: String,\n  }\n\n  toggle() {\n    const eventName = this.isWrapperHidden? this.showEventNameValue: this.hideEventNameValue\n    if (this.isWrapperHidden) {\n      this.showWrapper()\n    }\n    \n    this.wrapperTarget.dispatchEvent(new CustomEvent(eventName))\n  }\n  \n  isWrapperHidden() {\n    this.wrapperTarget.classList.has(this.hiddenClass)\n  }\n  \n  showWrapper() {\n    this.wrapperTarget.classList.remove(this.hiddenClass)\n  }\n  \n  hideWrapper() {\n    this.wrapperTarget.classList.add(this.hiddenClass)\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    \"panel\",\n    \"backdrop\"\n  ]\n\n  connect() {\n    this.eventDetail = {}\n  }\n\n  openModal(event) {\n    const targetModalId = event.detail.modalId\n\n    if (this.element.id === targetModalId) {\n      this.eventDetail = event.detail\n      this.backdropTarget.classList.remove(\"bg-opacity-0\")\n      this.backdropTarget.classList.remove(\"hidden\")\n      this.panelTarget.classList.remove(\"hidden\")\n      this.backdropTarget.classList.add(\"bg-opacity-75\")\n      this.backdropTarget.classList.add(\"fixed\")\n      this.panelTarget.classList.add(\"fixed\")\n    }\n  }\n\n  dismiss() {\n    this.backdropTarget.classList.add(\"bg-opacity-0\")\n    this.backdropTarget.classList.add(\"hidden\")\n    this.panelTarget.classList.add(\"hidden\")\n    this.backdropTarget.classList.remove(\"bg-opacity-75\")\n    this.backdropTarget.classList.remove(\"fixed\")\n    this.panelTarget.classList.remove(\"fixed\")\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ \"links\", \"template\" ]\n\n  connect() {\n    this.wrapperClass = this.data.get(\"wrapperClass\") || \"nested-fields\"\n  }\n\n  addAssociation(event) {\n    event.preventDefault()\n\n    const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime())\n    this.linksTarget.insertAdjacentHTML(\"beforebegin\", content)\n  }\n\n  removeAssociation(event) {\n    event.preventDefault()\n\n    let wrapper = event.target.closest(\".\" + this.wrapperClass)\n\n    // New records are simply removed from the page\n    if (wrapper.dataset.newRecord == \"true\") {\n      wrapper.remove()\n\n      // Existing records are hidden and flagged for deletion\n    } else {\n      wrapper.querySelector(\"input[name*='_destroy']\").value = 1\n      wrapper.style.display = 'none'\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"content\"]\n\n  onLinkClick(event) {\n    const origin = event.target.closest(\"a\");\n\n    if (origin) {\n      analytics.track(\"Link clicked\", {\n        url: origin.href,\n        text: origin.text\n      })\n    }\n  }\n\n  connect() {\n    this.contentTarget.addEventListener(\"click\", this.onLinkClick)\n  }\n\n  disconnect() {\n    this.contentTarget.removeEventListener(\"click\", this.onLinkClick)\n  }\n\n  trackTwitterShare(event) {\n    const origin = event.target.closest(\"a\");\n\n    if (origin) {\n      analytics.track(\"Twitter sharing started\", {\n        url: origin.href\n      })\n    }\n  }\n\n  trackLinkedinShare(event) {\n    const origin = event.target.closest(\"a\");\n\n    if (origin) {\n      analytics.track(\"LinkedIn sharing started\", {\n        url: origin.href\n      })\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  copyPostLink(event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    navigator.clipboard.writeText(event.target.dataset.postUrl)\n    event.target.innerText = \"Link Copied!\"\n    setTimeout(() => {\n      event.target.dispatchEvent(new CustomEvent(\"close-share-dropdown\", { bubbles: true }))\n\n      setTimeout(() => {\n        event.target.innerText = \"Copy Link\"\n      }, 100)\n    }, 1000)\n  }\n\n  shareOnTwitter(event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    const postTitle = event.target.dataset.postTitle\n    const postUrl = event.target.dataset.postUrl\n    window.open(`https://twitter.com/intent/tweet?text=${postTitle} @PE_CXO&url=${postUrl}`, \"_blank\").focus()\n    event.target.dispatchEvent(new CustomEvent(\"close-share-dropdown\", { bubbles: true }))\n  }\n\n  shareOnLinkedin(event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    const postUrl = event.target.dataset.postUrl\n    window.open(`https://www.linkedin.com/sharing/share-offsite/?url=${postUrl}`, \"_blank\").focus()\n    event.target.dispatchEvent(new CustomEvent(\"close-share-dropdown\", { bubbles: true }))\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"slide\"]\n\n  connect() {\n    this.currentIndex = 0\n    this.showCurrentSlide()\n  }\n\n  next() {\n    this.currentIndex = (this.currentIndex + 1) % this.slideTargets.length\n    this.showCurrentSlide()\n  }\n\n  previous() {\n    this.currentIndex = (this.currentIndex - 1 + this.slideTargets.length) % this.slideTargets.length\n    this.showCurrentSlide()\n  }\n\n  showCurrentSlide() {\n    this.slideTargets.forEach((slide, index) => {\n      this.currentIndex === index ? slide.classList.remove(\"hidden\") : slide.classList.add(\"hidden\")\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\nimport $ from \"jquery\"\n\nexport default class extends Controller {\n  static targets = [\n    \"faqContainer\",\n    \"faqTemplate\",\n    \"customLineItemsContainer\",\n    \"customLineItemTemplate\",\n  ]\n\n  addFaqItem(event) {\n    event.preventDefault()\n    const index = new Date().getTime()\n    const content = $(this.faqTemplateTarget).html().replaceAll(\"{{index}}\", index)\n    $(this.faqContainerTarget).append(content)\n    $(\".faq-delete-button\").first().show()\n  }\n\n  removeFaqItem(event) {\n    event.preventDefault()\n    const index = $(event.target).data(\"index\")\n    const faqToRemove = $(this.faqContainerTarget).find(`.faq-item[data-index='${index}']`)\n    faqToRemove.remove()\n\n    if ($(\".faq-item\").length === 1) {\n      $(\".faq-delete-button\").first().hide()\n    }\n  }\n\n  addCustomLineItem(event) {\n    event.preventDefault()\n    const index = new Date().getTime()\n    const content = $(this.customLineItemTemplateTarget).html().replaceAll(\"{{index}}\", index)\n    $(this.customLineItemsContainerTarget).append(content)\n    $(\".line-item-delete-button\").first().show()\n  }\n\n  removeCustomLineItem(event) {\n    event.preventDefault()\n    const index = $(event.target).data(\"index\")\n    const lineItemToRemove = $(this.customLineItemsContainerTarget).find(`.custom-line-item[data-index='${index}']`)\n    lineItemToRemove.addClass(\"hidden\")\n    lineItemToRemove.find(\"input[name*='_destroy']\").val(\"1\")\n\n    if ($(\".custom-line-item\").length === 1) {\n      $(\".line-item-delete-button\").first().hide()\n    }\n  }\n}\n","/**\n * After replacing Webpack with Vite, this stopped working when used\n * via NPM package, probably due to the way Vite registers the controllers.\n * https://github.com/bullet-train-co/stimulus-reveal */\n\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class RevealController extends Controller {\n  static values = {\n    open: Boolean,\n    transitioning: Boolean,\n    targetSelector: String,\n    toggleKeys: String,\n    showKeys: String,\n    hideKeys: String,\n    away: Boolean,\n    debug: Boolean,\n  }\n\n  connect() {\n    this._initCloseKeypressListener()\n    this._initToggleKeypressListener()\n    this._initShowKeypressListener()\n    this._awayHandler = this._awayHandler.bind(this)\n  }\n\n  disconnect() {\n    this._teardown()\n  }\n\n  /**\n   * Shows elements connected to the controller.\n   * @param {Event} event - an event with a currentTarget DOMElement\n   */\n  show(event) {\n    if (this.openValue || this.transitioningValue) return\n\n    this._init(event, true)\n  }\n\n  /**\n   * Hides elements connected to the controller.\n   * @param {Event} event - an event with a currentTarget DOMElement\n   */\n  hide(event) {\n    if (!this.openValue || this.transitioningValue) return\n\n    this._init(event, false)\n  }\n\n  /**\n   * Toggles elements connected to the controller.\n   * @param {Event} event - an event with a currentTarget DOMElement\n   */\n  toggle(event) {\n    if (this.transitioningValue) return\n\n    this._init(event, !this.openValue)\n  }\n\n  // Private methods\n\n  /**\n   * @private\n   * @param {Event} event\n   * @param {Event} shouldOpen\n   */\n  async _init(event, shouldOpen) {\n    if (event && event.currentTarget && event.currentTarget.dataset) {\n      if ('revealPreventDefault' in event.currentTarget.dataset) { event.preventDefault() }\n      if ('revealStopPropagation' in event.currentTarget.dataset) { event.stopPropagation() }\n    }\n    // start stuff\n    const startSelector = `${this.selector}[data-${shouldOpen ? 'enter' : 'leave'\n    }-start]`\n    const startPromises = this._didInitWithPromise(startSelector, shouldOpen)\n    await Promise.all(startPromises)\n\n    const defaultSelector = `${this.selector}:not([data-${shouldOpen ? 'enter' : 'leave'\n    }-start]):not([data-${shouldOpen ? 'enter' : 'leave'}-end])`\n    const defaultPromises = this._didInitWithPromise(\n      defaultSelector,\n      shouldOpen\n    )\n    await Promise.all(defaultPromises)\n\n    // end stuff\n    const endSelector = `${this.selector}[data-${shouldOpen ? 'enter' : 'leave'\n    }-end]`\n    const endPromises = this._didInitWithPromise(endSelector, shouldOpen)\n    await Promise.all(endPromises)\n  }\n\n  /**\n   * @private\n   */\n  _teardown() {\n    if (this.hasAwayValue) {\n      document.removeEventListener('click', this._awayHandler)\n    }\n  }\n\n  _didInitWithPromise(selector, shouldOpen) {\n    this._debug('selecting', selector, this.element.querySelectorAll(selector))\n    return Array.from(this.element.querySelectorAll(selector)).map(\n      (element) => {\n        return this._doInitTransition(element, shouldOpen)\n      }\n    )\n  }\n\n  /**\n   * @private\n   */\n  _initCloseKeypressListener() {\n    if (this.hasHideKeysValue) {\n      document.addEventListener('keydown', (event) => {\n        if (!this.openValue) return\n        if (!this.hideKeysValue.split(',').includes(event.key.toLowerCase())) {\n          return\n        }\n\n        event.stopPropagation()\n        this.toggle(event)\n      })\n    }\n  }\n\n  /**\n   * @private\n   */\n  _initToggleKeypressListener() {\n    if (this.hasToggleKeysValue) {\n      document.addEventListener('keydown', (event) => {\n        if (\n          !this.toggleKeysValue.split(',').includes(event.key.toLowerCase())\n        ) {\n          return\n        }\n\n        event.stopPropagation()\n\n        this.toggle(event)\n      })\n    }\n  }\n\n  /**\n   * @private\n   */\n  _initShowKeypressListener() {\n    if (this.hasShowKeysValue) {\n      document.addEventListener('keydown', (event) => {\n        if (this.openValue) return\n        if (!this.showKeysValue.split(',').includes(event.key.toLowerCase())) {\n          return\n        }\n\n        event.stopPropagation()\n\n        this.toggle(event)\n      })\n    }\n  }\n\n  /**\n   * @private\n   */\n  _awayHandler(event) {\n    if (!this.element.contains(event.target)) {\n      document.removeEventListener('click', this._awayHandler)\n      this.hide(event)\n    }\n    return true\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   * @param {boolean} openState\n   */\n  _doInitTransition(target, openState) {\n    this._debug('init transition', `${openState ? 'open' : 'closed'}`, target)\n    this._debug('dispatching event', `reveal:${openState ? 'show' : 'hide'}`, target)\n    target.dispatchEvent(\n      new Event(`reveal:${openState ? 'show' : 'hide'}`, {\n        bubbles: true,\n        cancelable: false,\n      })\n    )\n\n    return new Promise((resolve, reject) => {\n      if (\n        'transition' in target.dataset &&\n        this.element.offsetParent !== null\n      ) {\n        requestAnimationFrame(() => {\n          this._transitionSetup(target, openState)\n          const _didEndTransition = this._didEndTransition.bind(this)\n\n          target.addEventListener(\n            'transitionend',\n            function _didEndTransitionHandler() {\n              _didEndTransition(target, openState)\n              target.removeEventListener(\n                'transitionend',\n                _didEndTransitionHandler\n              )\n              resolve()\n            }\n          )\n\n          requestAnimationFrame(() => {\n            this._doStartTransition(target, openState)\n          })\n        })\n      } else {\n        if (openState) {\n          this._debug(\n            'force hidden - init',\n            `${openState ? 'open' : 'closed'}`,\n            target\n          )\n          target.hidden = !target.hidden\n        }\n        this._doCompleteTransition(target, openState)\n        resolve()\n      }\n    })\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   */\n  _doStartTransition(target, openState) {\n    this._debug('start transition', `${openState ? 'open' : 'closed'}`, target)\n    this.transitioningValue = true\n    if (target.dataset.useTransitionClasses === 'true') {\n      const transitionClasses = this._transitionClasses(\n        target,\n        this.transitionType\n      )\n      target.classList.add(...transitionClasses.end.split(' '))\n      target.classList.remove(...transitionClasses.start.split(' '))\n    } else {\n      const transitions = this._transitionDefaults(openState)\n      target.style.transformOrigin = transitions.origin\n      target.style.transitionProperty = 'opacity transform'\n      target.style.transitionDuration = `${transitions.duration / 1000}s`\n      target.style.transitionTimingFunction = 'cubic-bezier(0.4, 0.0, 0.2, 1)'\n\n      target.style.opacity = transitions.to.opacity\n      target.style.transform = `scale(${transitions.to.scale / 100})`\n    }\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   * @param {boolean} openState\n   */\n  _didEndTransition(target, openState) {\n    this._debug('end transition', `${openState ? 'open' : 'closed'}`, target)\n    if (target.dataset.useTransitionClasses === 'true') {\n      const transitionClasses = this._transitionClasses(\n        target,\n        this.transitionType\n      )\n      target.classList.remove(...transitionClasses.before.split(' '))\n    } else {\n      target.style.opacity = target.dataset.opacityCache\n      target.style.transform = target.dataset.transformCache\n      target.style.transformOrigin = target.dataset.transformOriginCache\n    }\n    this._doCompleteTransition(target, openState)\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   * @param {boolean} openState\n   */\n  _doCompleteTransition(target, openState) {\n    this._debug(\n      'complete transition',\n      `${openState ? 'open' : 'closed'}`,\n      target\n    )\n    this.transitioningValue = false\n\n    if (!openState) {\n      this._debug(\n        'force hidden - complete',\n        `${openState ? 'open' : 'closed'}`,\n        target\n      )\n      target.hidden = !target.hidden\n    }\n    this.openValue = openState\n\n    this._debug('dispatching event', `reveal:${openState ? 'shown' : 'hidden'}`, target)\n    target.dispatchEvent(\n      new Event(`reveal:${openState ? 'shown' : 'hidden'}`, {\n        bubbles: true,\n        cancelable: false,\n      })\n    )\n\n    if (this.hasAwayValue && openState) {\n      document.addEventListener('click', this._awayHandler)\n    }\n\n    this._debug('dispatching event', 'reveal:complete', target)\n    target.dispatchEvent(\n      new Event('reveal:complete', { bubbles: true, cancelable: false })\n    )\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   * @param {boolean} openState\n   */\n  _transitionSetup(target, openState) {\n    this.transitionType = openState ? 'transitionEnter' : 'transitionLeave'\n\n    if (this.transitionType in target.dataset) {\n      target.dataset.useTransitionClasses = true\n      const transitionClasses = this._transitionClasses(\n        target,\n        this.transitionType\n      )\n      target.classList.add(...transitionClasses.before.split(' '))\n      target.classList.add(...transitionClasses.start.split(' '))\n    } else {\n      target.dataset.useTransitionClasses = false\n      const transitions = this._transitionDefaults(openState)\n      target.dataset.opacityCache = target.style.opacity\n      target.dataset.transformCache = target.style.transform\n      target.dataset.transformOriginCache = target.style.transformOrigin\n\n      target.style.opacity = transitions.from.opacity\n      target.style.transform = `scale(${transitions.from.scale / 100})`\n    }\n    if (openState) {\n      this._debug('opening with transition', target)\n      target.hidden = !target.hidden\n    }\n  }\n\n  /**\n   * @private\n   * @param {boolean} openState\n   */\n  _transitionDefaults(openState) {\n    return {\n      duration: openState ? 200 : 150,\n      origin: 'center',\n      from: {\n        opacity: openState ? 0 : 1,\n        scale: openState ? 95 : 100,\n      },\n      to: {\n        opacity: openState ? 1 : 0,\n        scale: openState ? 100 : 95,\n      },\n    }\n  }\n\n  /**\n   * @private\n   * @param {DOMElement} target\n   * @param {string} transitionType\n   */\n  _transitionClasses(target, transitionType) {\n    return {\n      before: target.dataset[transitionType],\n      start: target.dataset[`${transitionType}Start`],\n      end: target.dataset[`${transitionType}End`],\n    }\n  }\n\n  _debug(...args) {\n    if (this.debugValue) console.log(...args)\n  }\n\n  get selector() {\n    return this.hasTargetSelectorValue\n      ? this.targetSelectorValue\n      : '[data-reveal]'\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"cartItem\", 'purchaseComplete']\n\n  addToCart(event) {\n    if (typeof fbq === \"function\") fbq(\"track\", \"AddToCart\", { product_id: event.target.dataset.productId });\n\n    this.cartItemTarget.classList.remove(\"hidden\")\n    const originalTop = this.cartItemTarget.offsetTop\n    const originalLeft = this.cartItemTarget.offsetLeft\n    const shoppingCart = document.querySelector(\"#shopping_cart\")\n    const shoppingCartTop = shoppingCart.offsetTop\n    const shoppingCartLeft = shoppingCart.offsetLeft\n    this.cartItemTarget.style.position = \"absolute\"\n    this.cartItemTarget.style.top = `${originalTop}px`\n    this.cartItemTarget.style.left = `${originalLeft}px`\n    this.cartItemTarget.style.transform = `translate(${shoppingCartLeft - originalLeft}px, ${shoppingCartTop - originalTop}px)`\n\n    setTimeout(() => {\n      this.cartItemTarget.classList.add(\"hidden\")\n      this.cartItemTarget.style.transform = \"\"\n    }, 3000)\n  }\n\n  purchaseCompleteTargetConnected(_event) {\n    if (typeof fbq === \"function\") fbq(\"track\", \"Purchase\", { order_id: this.purchaseCompleteTarget.dataset.orderId });\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [ \"template\", \"subgroupsList\", \"noSubgroupsNotice\" ]\n\n  connect() {\n    this.toggleVisibility();\n  }\n\n  addSubgroup(event) {\n    event.preventDefault();\n    const index = new Date().getTime();\n    const content = $(this.templateTarget).html().replaceAll(\"{{index}}\", index);\n    $(this.subgroupsListTarget).append(content);\n    this.toggleVisibility();\n  }\n\n  removeSubgroup(event) {\n    event.preventDefault();\n    const indexToRemove = $(event.target).data(\"index\");\n    const isNewRecord = $(event.target).data(\"newRecord\");\n    const subgroupToRemove = $(this.subgroupsListTarget).find(`.subgroup[data-index='${indexToRemove}']`);\n\n    if (isNewRecord) {\n      subgroupToRemove.remove();\n    } else {\n      $(`#group_subgroups_attributes_${indexToRemove}__destroy`).val(true);\n      subgroupToRemove.hide();\n    }\n\n    this.toggleVisibility();\n  }\n\n  toggleVisibility() {\n    const subgroupsVisibleCount = $(\".subgroup:not([style='display: none;'])\").length;\n\n    if (subgroupsVisibleCount === 0) {\n      $(this.noSubgroupsNoticeTarget).show();\n      $(this.subgroupsListTarget).hide();\n    } else {\n      $(this.noSubgroupsNoticeTarget).hide();\n      $(this.subgroupsListTarget).show();\n    }\n  }\n}\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/@popperjs/core/lib/enums.js\nvar top = \"top\";\nvar bottom = \"bottom\";\nvar right = \"right\";\nvar left = \"left\";\nvar auto = \"auto\";\nvar basePlacements = [top, bottom, right, left];\nvar start = \"start\";\nvar end = \"end\";\nvar clippingParents = \"clippingParents\";\nvar viewport = \"viewport\";\nvar popper = \"popper\";\nvar reference = \"reference\";\nvar variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar beforeRead = \"beforeRead\";\nvar read = \"read\";\nvar afterRead = \"afterRead\";\nvar beforeMain = \"beforeMain\";\nvar main = \"main\";\nvar afterMain = \"afterMain\";\nvar beforeWrite = \"beforeWrite\";\nvar write = \"write\";\nvar afterWrite = \"afterWrite\";\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n// node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\nfunction getNodeName(element) {\n  return element ? (element.nodeName || \"\").toLowerCase() : null;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getWindow.js\nfunction getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n  if (node.toString() !== \"[object Window]\") {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n  return node;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\nfunction isShadowRoot(node) {\n  if (typeof ShadowRoot === \"undefined\") {\n    return false;\n  }\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n// node_modules/@popperjs/core/lib/modifiers/applyStyles.js\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function(name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name];\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function(name2) {\n      var value = attributes[name2];\n      if (value === false) {\n        element.removeAttribute(name2);\n      } else {\n        element.setAttribute(name2, value === true ? \"\" : value);\n      }\n    });\n  });\n}\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: \"0\",\n      top: \"0\",\n      margin: \"0\"\n    },\n    arrow: {\n      position: \"absolute\"\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n  return function() {\n    Object.keys(state.elements).forEach(function(name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]);\n      var style = styleProperties.reduce(function(style2, property) {\n        style2[property] = \"\";\n        return style2;\n      }, {});\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function(attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\nvar applyStyles_default = {\n  name: \"applyStyles\",\n  enabled: true,\n  phase: \"write\",\n  fn: applyStyles,\n  effect,\n  requires: [\"computeStyles\"]\n};\n\n// node_modules/@popperjs/core/lib/utils/getBasePlacement.js\nfunction getBasePlacement(placement) {\n  return placement.split(\"-\")[0];\n}\n\n// node_modules/@popperjs/core/lib/utils/math.js\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;\n\n// node_modules/@popperjs/core/lib/utils/userAgent.js\nfunction getUAString() {\n  var uaData = navigator.userAgentData;\n  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands.map(function(item) {\n      return item.brand + \"/\" + item.version;\n    }).join(\" \");\n  }\n  return navigator.userAgent;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\nfunction isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n  var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport;\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\nfunction getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element);\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/contains.js\nfunction contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode();\n  if (parent.contains(child)) {\n    return true;\n  } else if (rootNode && isShadowRoot(rootNode)) {\n    var next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n  return false;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\nfunction isTableElement(element) {\n  return [\"table\", \"td\", \"th\"].indexOf(getNodeName(element)) >= 0;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\nfunction getDocumentElement(element) {\n  return ((isElement(element) ? element.ownerDocument : (\n    // $FlowFixMe[prop-missing]\n    element.document\n  )) || window.document).documentElement;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\nfunction getParentNode(element) {\n  if (getNodeName(element) === \"html\") {\n    return element;\n  }\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element)\n  );\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === \"fixed\") {\n    return null;\n  }\n  return element.offsetParent;\n}\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n  if (isIE && isHTMLElement(element)) {\n    var elementCss = getComputedStyle(element);\n    if (elementCss.position === \"fixed\") {\n      return null;\n    }\n  }\n  var currentNode = getParentNode(element);\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n  while (isHTMLElement(currentNode) && [\"html\", \"body\"].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode);\n    if (css.transform !== \"none\" || css.perspective !== \"none\" || css.contain === \"paint\" || [\"transform\", \"perspective\"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === \"filter\" || isFirefox && css.filter && css.filter !== \"none\") {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n  return null;\n}\nfunction getOffsetParent(element) {\n  var window2 = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === \"static\") {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === \"html\" || getNodeName(offsetParent) === \"body\" && getComputedStyle(offsetParent).position === \"static\")) {\n    return window2;\n  }\n  return offsetParent || getContainingBlock(element) || window2;\n}\n\n// node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\nfunction getMainAxisFromPlacement(placement) {\n  return [\"top\", \"bottom\"].indexOf(placement) >= 0 ? \"x\" : \"y\";\n}\n\n// node_modules/@popperjs/core/lib/utils/within.js\nfunction within(min2, value, max2) {\n  return max(min2, min(value, max2));\n}\nfunction withinMaxClamp(min2, value, max2) {\n  var v = within(min2, value, max2);\n  return v > max2 ? max2 : v;\n}\n\n// node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\nfunction getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}\n\n// node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\nfunction mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}\n\n// node_modules/@popperjs/core/lib/utils/expandToHashMap.js\nfunction expandToHashMap(value, keys) {\n  return keys.reduce(function(hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n\n// node_modules/@popperjs/core/lib/modifiers/arrow.js\nvar toPaddingObject = function toPaddingObject2(padding, state) {\n  padding = typeof padding === \"function\" ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== \"number\" ? padding : expandToHashMap(padding, basePlacements));\n};\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n  var state = _ref.state, name = _ref.name, options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets2 = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? \"height\" : \"width\";\n  if (!arrowElement || !popperOffsets2) {\n    return;\n  }\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === \"y\" ? top : left;\n  var maxProp = axis === \"y\" ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets2[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === \"y\" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2;\n  var min2 = paddingObject[minProp];\n  var max2 = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset2 = within(min2, center, max2);\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);\n}\nfunction effect2(_ref2) {\n  var state = _ref2.state, options = _ref2.options;\n  var _options$element = options.element, arrowElement = _options$element === void 0 ? \"[data-popper-arrow]\" : _options$element;\n  if (arrowElement == null) {\n    return;\n  }\n  if (typeof arrowElement === \"string\") {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n    if (!arrowElement) {\n      return;\n    }\n  }\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n  state.elements.arrow = arrowElement;\n}\nvar arrow_default = {\n  name: \"arrow\",\n  enabled: true,\n  phase: \"main\",\n  fn: arrow,\n  effect: effect2,\n  requires: [\"popperOffsets\"],\n  requiresIfExists: [\"preventOverflow\"]\n};\n\n// node_modules/@popperjs/core/lib/utils/getVariation.js\nfunction getVariation(placement) {\n  return placement.split(\"-\")[1];\n}\n\n// node_modules/@popperjs/core/lib/modifiers/computeStyles.js\nvar unsetSides = {\n  top: \"auto\",\n  right: \"auto\",\n  bottom: \"auto\",\n  left: \"auto\"\n};\nfunction roundOffsetsByDPR(_ref, win) {\n  var x = _ref.x, y = _ref.y;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\nfunction mapToStyles(_ref2) {\n  var _Object$assign2;\n  var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y;\n  var _ref3 = typeof roundOffsets === \"function\" ? roundOffsets({\n    x,\n    y\n  }) : {\n    x,\n    y\n  };\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty(\"x\");\n  var hasY = offsets.hasOwnProperty(\"y\");\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper2);\n    var heightProp = \"clientHeight\";\n    var widthProp = \"clientWidth\";\n    if (offsetParent === getWindow(popper2)) {\n      offsetParent = getDocumentElement(popper2);\n      if (getComputedStyle(offsetParent).position !== \"static\" && position === \"absolute\") {\n        heightProp = \"scrollHeight\";\n        widthProp = \"scrollWidth\";\n      }\n    }\n    offsetParent = offsetParent;\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : (\n        // $FlowFixMe[prop-missing]\n        offsetParent[heightProp]\n      );\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : (\n        // $FlowFixMe[prop-missing]\n        offsetParent[widthProp]\n      );\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n  var commonStyles = Object.assign({\n    position\n  }, adaptive && unsetSides);\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x,\n    y\n  }, getWindow(popper2)) : {\n    x,\n    y\n  };\n  x = _ref4.x;\n  y = _ref4.y;\n  if (gpuAcceleration) {\n    var _Object$assign;\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? \"0\" : \"\", _Object$assign[sideX] = hasX ? \"0\" : \"\", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : \"\", _Object$assign2[sideX] = hasX ? x + \"px\" : \"\", _Object$assign2.transform = \"\", _Object$assign2));\n}\nfunction computeStyles(_ref5) {\n  var state = _ref5.state, options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === \"fixed\"\n  };\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive,\n      roundOffsets\n    })));\n  }\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: \"absolute\",\n      adaptive: false,\n      roundOffsets\n    })));\n  }\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    \"data-popper-placement\": state.placement\n  });\n}\nvar computeStyles_default = {\n  name: \"computeStyles\",\n  enabled: true,\n  phase: \"beforeWrite\",\n  fn: computeStyles,\n  data: {}\n};\n\n// node_modules/@popperjs/core/lib/modifiers/eventListeners.js\nvar passive = {\n  passive: true\n};\nfunction effect3(_ref) {\n  var state = _ref.state, instance = _ref.instance, options = _ref.options;\n  var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;\n  var window2 = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n  if (scroll) {\n    scrollParents.forEach(function(scrollParent) {\n      scrollParent.addEventListener(\"scroll\", instance.update, passive);\n    });\n  }\n  if (resize) {\n    window2.addEventListener(\"resize\", instance.update, passive);\n  }\n  return function() {\n    if (scroll) {\n      scrollParents.forEach(function(scrollParent) {\n        scrollParent.removeEventListener(\"scroll\", instance.update, passive);\n      });\n    }\n    if (resize) {\n      window2.removeEventListener(\"resize\", instance.update, passive);\n    }\n  };\n}\nvar eventListeners_default = {\n  name: \"eventListeners\",\n  enabled: true,\n  phase: \"write\",\n  fn: function fn() {\n  },\n  effect: effect3,\n  data: {}\n};\n\n// node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\nvar hash = {\n  left: \"right\",\n  right: \"left\",\n  bottom: \"top\",\n  top: \"bottom\"\n};\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function(matched) {\n    return hash[matched];\n  });\n}\n\n// node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\nvar hash2 = {\n  start: \"end\",\n  end: \"start\"\n};\nfunction getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function(matched) {\n    return hash2[matched];\n  });\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\nfunction getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft,\n    scrollTop\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\nfunction getWindowScrollBarX(element) {\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\nfunction getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n    if (layoutViewport || !layoutViewport && strategy === \"fixed\") {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\nfunction getDocumentRect(element) {\n  var _element$ownerDocumen;\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n  if (getComputedStyle(body || html).direction === \"rtl\") {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\nfunction isScrollParent(element) {\n  var _getComputedStyle = getComputedStyle(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\nfunction getScrollParent(node) {\n  if ([\"html\", \"body\", \"#document\"].indexOf(getNodeName(node)) >= 0) {\n    return node.ownerDocument.body;\n  }\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n  return getScrollParent(getParentNode(node));\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\nfunction listScrollParents(element, list) {\n  var _element$ownerDocumen;\n  if (list === void 0) {\n    list = [];\n  }\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : (\n    // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)))\n  );\n}\n\n// node_modules/@popperjs/core/lib/utils/rectToClientRect.js\nfunction rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === \"fixed\");\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\nfunction getClippingParents(element) {\n  var clippingParents2 = listScrollParents(getParentNode(element));\n  var canEscapeClipping = [\"absolute\", \"fixed\"].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n  return clippingParents2.filter(function(clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== \"body\";\n  });\n}\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === \"clippingParents\" ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents2[0];\n  var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}\n\n// node_modules/@popperjs/core/lib/utils/computeOffsets.js\nfunction computeOffsets(_ref) {\n  var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference2.x + reference2.width / 2 - element.width / 2;\n  var commonY = reference2.y + reference2.height / 2 - element.height / 2;\n  var offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference2.y - element.height\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference2.y + reference2.height\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference2.x + reference2.width,\n        y: commonY\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference2.x - element.width,\n        y: commonY\n      };\n      break;\n    default:\n      offsets = {\n        x: reference2.x,\n        y: reference2.y\n      };\n  }\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n  if (mainAxis != null) {\n    var len = mainAxis === \"y\" ? \"height\" : \"width\";\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n  return offsets;\n}\n\n// node_modules/@popperjs/core/lib/utils/detectOverflow.js\nfunction detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== \"number\" ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets2 = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: \"absolute\",\n    placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset;\n  if (elementContext === popper && offsetData) {\n    var offset2 = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function(key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? \"y\" : \"x\";\n      overflowOffsets[key] += offset2[axis] * multiply;\n    });\n  }\n  return overflowOffsets;\n}\n\n// node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\nfunction computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {\n    return getVariation(placement2) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements2.filter(function(placement2) {\n    return allowedAutoPlacements.indexOf(placement2) >= 0;\n  });\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements2;\n  }\n  var overflows = allowedPlacements.reduce(function(acc, placement2) {\n    acc[placement2] = detectOverflow(state, {\n      placement: placement2,\n      boundary,\n      rootBoundary,\n      padding\n    })[getBasePlacement(placement2)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function(a, b) {\n    return overflows[a] - overflows[b];\n  });\n}\n\n// node_modules/@popperjs/core/lib/modifiers/flip.js\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\nfunction flip(_ref) {\n  var state = _ref.state, options = _ref.options, name = _ref.name;\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n  var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {\n    return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {\n      placement: placement2,\n      boundary,\n      rootBoundary,\n      padding,\n      flipVariations,\n      allowedAutoPlacements\n    }) : placement2);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = /* @__PURE__ */ new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements2[0];\n  for (var i = 0; i < placements2.length; i++) {\n    var placement = placements2[i];\n    var _basePlacement = getBasePlacement(placement);\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? \"width\" : \"height\";\n    var overflow = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      altBoundary,\n      padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n    if (checks.every(function(check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n    checksMap.set(placement, checks);\n  }\n  if (makeFallbackChecks) {\n    var numberOfChecks = flipVariations ? 3 : 1;\n    var _loop = function _loop2(_i2) {\n      var fittingPlacement = placements2.find(function(placement2) {\n        var checks2 = checksMap.get(placement2);\n        if (checks2) {\n          return checks2.slice(0, _i2).every(function(check) {\n            return check;\n          });\n        }\n      });\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n      if (_ret === \"break\")\n        break;\n    }\n  }\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n}\nvar flip_default = {\n  name: \"flip\",\n  enabled: true,\n  phase: \"main\",\n  fn: flip,\n  requiresIfExists: [\"offset\"],\n  data: {\n    _skip: false\n  }\n};\n\n// node_modules/@popperjs/core/lib/modifiers/hide.js\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function(side) {\n    return overflow[side] >= 0;\n  });\n}\nfunction hide(_ref) {\n  var state = _ref.state, name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: \"reference\"\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets,\n    popperEscapeOffsets,\n    isReferenceHidden,\n    hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    \"data-popper-reference-hidden\": isReferenceHidden,\n    \"data-popper-escaped\": hasPopperEscaped\n  });\n}\nvar hide_default = {\n  name: \"hide\",\n  enabled: true,\n  phase: \"main\",\n  requiresIfExists: [\"preventOverflow\"],\n  fn: hide\n};\n\n// node_modules/@popperjs/core/lib/modifiers/offset.js\nfunction distanceAndSkiddingToXY(placement, rects, offset2) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n  var _ref = typeof offset2 === \"function\" ? offset2(Object.assign({}, rects, {\n    placement\n  })) : offset2, skidding = _ref[0], distance = _ref[1];\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\nfunction offset(_ref2) {\n  var state = _ref2.state, options = _ref2.options, name = _ref2.name;\n  var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function(acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y;\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n  state.modifiersData[name] = data;\n}\nvar offset_default = {\n  name: \"offset\",\n  enabled: true,\n  phase: \"main\",\n  requires: [\"popperOffsets\"],\n  fn: offset\n};\n\n// node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\nfunction popperOffsets(_ref) {\n  var state = _ref.state, name = _ref.name;\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: \"absolute\",\n    placement: state.placement\n  });\n}\nvar popperOffsets_default = {\n  name: \"popperOffsets\",\n  enabled: true,\n  phase: \"read\",\n  fn: popperOffsets,\n  data: {}\n};\n\n// node_modules/@popperjs/core/lib/utils/getAltAxis.js\nfunction getAltAxis(axis) {\n  return axis === \"x\" ? \"y\" : \"x\";\n}\n\n// node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\nfunction preventOverflow(_ref) {\n  var state = _ref.state, options = _ref.options, name = _ref.name;\n  var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary,\n    rootBoundary,\n    padding,\n    altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets2 = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === \"function\" ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === \"number\" ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n  if (!popperOffsets2) {\n    return;\n  }\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n    var mainSide = mainAxis === \"y\" ? top : left;\n    var altSide = mainAxis === \"y\" ? bottom : right;\n    var len = mainAxis === \"y\" ? \"height\" : \"width\";\n    var offset2 = popperOffsets2[mainAxis];\n    var min2 = offset2 + overflow[mainSide];\n    var max2 = offset2 - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData[\"arrow#persistent\"] ? state.modifiersData[\"arrow#persistent\"].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide];\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === \"y\" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset2 + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2);\n    popperOffsets2[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset2;\n  }\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n    var _mainSide = mainAxis === \"x\" ? top : left;\n    var _altSide = mainAxis === \"x\" ? bottom : right;\n    var _offset = popperOffsets2[altAxis];\n    var _len = altAxis === \"y\" ? \"height\" : \"width\";\n    var _min = _offset + overflow[_mainSide];\n    var _max = _offset - overflow[_altSide];\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n    popperOffsets2[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n  state.modifiersData[name] = data;\n}\nvar preventOverflow_default = {\n  name: \"preventOverflow\",\n  enabled: true,\n  phase: \"main\",\n  fn: preventOverflow,\n  requiresIfExists: [\"offset\"]\n};\n\n// node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\nfunction getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\nfunction getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n\n// node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n}\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== \"body\" || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\n// node_modules/@popperjs/core/lib/utils/orderModifiers.js\nfunction order(modifiers) {\n  var map = /* @__PURE__ */ new Map();\n  var visited = /* @__PURE__ */ new Set();\n  var result = [];\n  modifiers.forEach(function(modifier) {\n    map.set(modifier.name, modifier);\n  });\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function(dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n  modifiers.forEach(function(modifier) {\n    if (!visited.has(modifier.name)) {\n      sort(modifier);\n    }\n  });\n  return result;\n}\nfunction orderModifiers(modifiers) {\n  var orderedModifiers = order(modifiers);\n  return modifierPhases.reduce(function(acc, phase) {\n    return acc.concat(orderedModifiers.filter(function(modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}\n\n// node_modules/@popperjs/core/lib/utils/debounce.js\nfunction debounce(fn2) {\n  var pending;\n  return function() {\n    if (!pending) {\n      pending = new Promise(function(resolve) {\n        Promise.resolve().then(function() {\n          pending = void 0;\n          resolve(fn2());\n        });\n      });\n    }\n    return pending;\n  };\n}\n\n// node_modules/@popperjs/core/lib/utils/mergeByName.js\nfunction mergeByName(modifiers) {\n  var merged = modifiers.reduce(function(merged2, current) {\n    var existing = merged2[current.name];\n    merged2[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged2;\n  }, {});\n  return Object.keys(merged).map(function(key) {\n    return merged[key];\n  });\n}\n\n// node_modules/@popperjs/core/lib/createPopper.js\nvar DEFAULT_OPTIONS = {\n  placement: \"bottom\",\n  modifiers: [],\n  strategy: \"absolute\"\n};\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return !args.some(function(element) {\n    return !(element && typeof element.getBoundingClientRect === \"function\");\n  });\n}\nfunction popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n  var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers3 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper4(reference2, popper2, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n    var state = {\n      placement: \"bottom\",\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference2,\n        popper: popper2\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options2 = typeof setOptionsAction === \"function\" ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options2);\n        state.scrollParents = {\n          reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],\n          popper: listScrollParents(popper2)\n        };\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers3, state.options.modifiers)));\n        state.orderedModifiers = orderedModifiers.filter(function(m) {\n          return m.enabled;\n        });\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n        var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;\n        if (!areValidElements(reference3, popper3)) {\n          return;\n        }\n        state.rects = {\n          reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === \"fixed\"),\n          popper: getLayoutRect(popper3)\n        };\n        state.reset = false;\n        state.placement = state.options.placement;\n        state.orderedModifiers.forEach(function(modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n          var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name;\n          if (typeof fn2 === \"function\") {\n            state = fn2({\n              state,\n              options: _options,\n              name,\n              instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function() {\n        return new Promise(function(resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n    if (!areValidElements(reference2, popper2)) {\n      return instance;\n    }\n    instance.setOptions(options).then(function(state2) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state2);\n      }\n    });\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function(_ref) {\n        var name = _ref.name, _ref$options = _ref.options, options2 = _ref$options === void 0 ? {} : _ref$options, effect4 = _ref.effect;\n        if (typeof effect4 === \"function\") {\n          var cleanupFn = effect4({\n            state,\n            name,\n            instance,\n            options: options2\n          });\n          var noopFn = function noopFn2() {\n          };\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function(fn2) {\n        return fn2();\n      });\n      effectCleanupFns = [];\n    }\n    return instance;\n  };\n}\nvar createPopper = /* @__PURE__ */ popperGenerator();\n\n// node_modules/@popperjs/core/lib/popper-lite.js\nvar defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default];\nvar createPopper2 = /* @__PURE__ */ popperGenerator({\n  defaultModifiers\n});\n\n// node_modules/@popperjs/core/lib/popper.js\nvar defaultModifiers2 = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default];\nvar createPopper3 = /* @__PURE__ */ popperGenerator({\n  defaultModifiers: defaultModifiers2\n});\nexport {\n  afterMain,\n  afterRead,\n  afterWrite,\n  applyStyles_default as applyStyles,\n  arrow_default as arrow,\n  auto,\n  basePlacements,\n  beforeMain,\n  beforeRead,\n  beforeWrite,\n  bottom,\n  clippingParents,\n  computeStyles_default as computeStyles,\n  createPopper3 as createPopper,\n  createPopper as createPopperBase,\n  createPopper2 as createPopperLite,\n  detectOverflow,\n  end,\n  eventListeners_default as eventListeners,\n  flip_default as flip,\n  hide_default as hide,\n  left,\n  main,\n  modifierPhases,\n  offset_default as offset,\n  placements,\n  popper,\n  popperGenerator,\n  popperOffsets_default as popperOffsets,\n  preventOverflow_default as preventOverflow,\n  read,\n  reference,\n  right,\n  start,\n  top,\n  variationPlacements,\n  viewport,\n  write\n};\n//# sourceMappingURL=@popperjs_core.js.map\n","import { Controller } from \"@hotwired/stimulus\"\nimport { createPopper } from \"@popperjs/core\"\n\nexport default class extends Controller {\n  static targets = [\"element\", \"tooltip\"]\n  static values = {\n    placement: String,\n    offset: Array\n  }\n\n  connect() {\n    this.popperInstance = createPopper(this.elementTarget, this.tooltipTarget, {\n      placement: this.placementValue || \"top\",\n      modifiers: [\n        {\n          name: \"offset\",\n          options: {\n            offset: this.offsetValue.length > 0 ? this.offsetValue : [0, 12],\n          },\n        },\n      ],\n    })\n  }\n\n  show(event) {\n    this.tooltipTarget.setAttribute(\"data-show\", \"\")\n    this.popperInstance.update()\n  }\n\n  hide(event) {\n    this.tooltipTarget.removeAttribute(\"data-show\")\n  }\n\n  disconnect() {\n    if (this.popperInstance) {\n      this.popperInstance.destroy()\n    }\n  }\n}\n","import ModalController from \"./modal_controller\";\n\nexport default class extends ModalController {\n  async submitForm() {\n    const form = document.querySelector(\"#member-demographics-form\")\n    const formData = new FormData(form)\n    const url = form.getAttribute(\"action\")\n    const method = formData.get(\"_method\").toUpperCase()\n\n    fetch(url, {\n      method: method,\n      body: formData,\n      headers: {\n        \"Accept\": \"application/json\",\n        \"X-CSRF-Token\": document.querySelector(\"meta[name=csrf-token]\").content\n      }\n    })\n      .then(response => {\n        if (response.ok) {\n          window.location.href = this.eventDetail.route\n        } else {\n          throw new Error(\"There was an error submitting the form\")\n        }\n      })\n      .catch(error => {\n        console.log(error)\n        Honeybadger.notify(error)\n      })\n  }\n\n  dismiss() {\n    super.dismiss()\n\n    if (this.eventDetail?.route) {\n      window.location.href = this.eventDetail.route\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"toggleSignInViaForm\"]\n  static values = {\n    hasPasswordSet: Boolean\n  }\n\n  handleToggle(event) {\n    if ((event.target.checked && this.hasPasswordSetValue) || event.target.checked === false) {\n      this.toggleSignInViaFormTarget.submit()\n    }\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = []\n  static values = {\n    vimeoAccessToken: String\n  }\n\n  connect() {\n    this.players = []\n    const script = $(\"<script>\").insertBefore($(\"script\").first())\n    script.on(\"load\", this.initializeVimeoPlayers.bind(this))\n    script.attr(\"src\", \"https://player.vimeo.com/api/player.js\")\n  }\n\n  initializeVimeoPlayers() {\n    let _this = this\n\n    if (this.vimeoAccessTokenValue.length > 0) {\n      $(\".wp-block-embed.is-type-video.is-provider-vimeo iframe\").each(function() {\n        _this.players.push(new Vimeo.Player($(this)[0]))\n      })\n\n      document.addEventListener(\"segment-analytics-loaded\", () => {\n        analytics.ready(this.initializeVimeoAnalytics.bind(this))\n      })\n    }\n  }\n\n  initializeVimeoAnalytics() {\n    this.players.forEach(player => {\n      const vimeoAnalytics = new window.analytics.plugins.VimeoAnalytics(player, this.vimeoAccessTokenValue)\n      vimeoAnalytics.initialize()\n    })\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\"\n\nconst YOUTUBE_VIDEO_PLAYING_STATE = 1\n\nexport default class extends Controller {\n  static targets = []\n  static values = {\n    googleApiKey: String\n  }\n\n  connect() {\n    this.players = []\n    this.youTubeTrackingInterval = undefined\n\n    if (this.googleApiKeyValue.length > 0) {\n      $(\".wp-block-embed.is-type-video.is-provider-youtube iframe\").each(function() {\n        const src = $(this).attr(\"src\")\n\n        if (src.indexOf(\"?\") >= 0) {\n          $(this).attr(\"src\", `${src}&enablejsapi=1`)\n        } else {\n          $(this).attr(\"src\", `${src}?enablejsapi=1`)\n        }\n      })\n\n      window.onYouTubeIframeAPIReady = this.initializeYouTubePlayers.bind(this)\n    }\n\n    $(\"<script>\", { src: \"https://www.youtube.com/iframe_api\" }).insertBefore($(\"script\").first())\n  }\n\n  initializeYouTubePlayers() {\n    let _this = this\n\n    $(\".wp-block-embed.is-type-video.is-provider-youtube iframe\").each(function() {\n      _this.players.push(\n        new YT.Player($(this)[0], {\n          height: \"360\",\n          width: \"640\",\n          videoId: $(this).attr(\"src\").match(/embed\\/(.*)\\?/)[1],\n          events: {\n            \"onStateChange\": _this.onYouTubePlayerStateChange.bind(_this)\n          }\n        })\n      )\n    })\n\n    document.addEventListener(\"segment-analytics-loaded\", () => {\n      analytics.ready(this.initializeYouTubeAnalytics.bind(this))\n    })\n  }\n\n  initializeYouTubeAnalytics() {\n    this.players.forEach(player => {\n      const youTubeAnalytics = new window.analytics.plugins.YouTubeAnalytics(player, this.googleApiKeyValue)\n      youTubeAnalytics.initialize()\n    })\n  }\n\n  onYouTubePlayerStateChange(event) {\n    if (event.data === YOUTUBE_VIDEO_PLAYING_STATE) {\n      clearInterval(this.youTubeTrackingInterval)\n      this.youTubeTrackingInterval = this.trackCurrentYouTubeStatus(event.target)\n    }\n  }\n\n  trackCurrentYouTubeStatus(player) {\n    return setInterval(() => {\n      if (player.playerInfo.playerState === YOUTUBE_VIDEO_PLAYING_STATE) {\n        analytics.track(\"Video Playing\", {\n          position: player.playerInfo.currentTime,\n          quality: player.playerInfo.playbackQuality,\n          sound: player.playerInfo.muted ? 0 : player.getVolume(),\n          total_length: player.playerInfo.duration,\n          video_player: \"youtube\"\n        })\n      }\n    }, 30000)\n  }\n}\n","import \"./chunk-624QZG55.js\";\n\n// node_modules/stimulus-vite-helpers/dist/index.js\nvar CONTROLLER_FILENAME_REGEX = /^(?:.*?(?:controllers|components)\\/|\\.?\\.\\/)?(.+)(?:[/_-]controller\\..+?)$/;\nfunction registerControllers(application, controllerModules) {\n  application.load(definitionsFromGlob(controllerModules));\n}\nfunction definitionsFromGlob(controllerModules) {\n  return Object.entries(controllerModules).map(definitionFromEntry).filter((value) => value);\n}\nfunction definitionFromEntry([name, controllerModule]) {\n  const identifier = identifierForGlobKey(name);\n  const controllerConstructor = controllerModule.default;\n  if (identifier && typeof controllerConstructor === \"function\")\n    return { identifier, controllerConstructor };\n}\nfunction identifierForGlobKey(key) {\n  const logicalName = (key.match(CONTROLLER_FILENAME_REGEX) || [])[1];\n  if (logicalName)\n    return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n}\nexport {\n  CONTROLLER_FILENAME_REGEX,\n  definitionsFromGlob,\n  identifierForGlobKey,\n  registerControllers\n};\n//# sourceMappingURL=stimulus-vite-helpers.js.map\n","// Load all the controllers within this directory and all subdirectories.\n// Controller files must be named *_controller.js.\n\nimport { Application } from '@hotwired/stimulus'\nimport { registerControllers } from 'stimulus-vite-helpers'\n\nconst application = Application.start()\nconst controllers = import.meta.glob('./**/*_controller.js', { eager: true })\nregisterControllers(application, controllers)\n","$(document).on('turbo:load', function() {\n  if (navigator.userAgent.toLocaleLowerCase().includes('electron')) {\n    $('body').addClass('electron')\n  }\n})","import '@hotwired/turbo-rails'\nimport Rails from '@rails/ujs'\nimport * as ActiveStorage from '@rails/activestorage'\nimport 'select2/dist/css/select2.min.css'\nimport select2 from 'select2'\nimport jstz from 'jstz'\nimport Honeybadger from '@honeybadger-io/js'\n\nimport '../account'\nimport '../channels'\nimport '../concerns'\nimport '../controllers'\nimport '../electron'\n\nimport '../stylesheets/falcon/application.scss'\nimport '@icon/themify-icons/themify-icons.css'\n\nwindow.jstz = jstz\nwindow.Honeybadger = Honeybadger\n\nwindow.googleMapsReady = () => {\n  document.dispatchEvent(new Event('googleMapsReady'))\n}\n\nif (!window.Rails) Rails.start()\nActiveStorage.start()\nselect2()\n\n$(document).on('turbo:load', () => {\n  $('.alert-container:not(.persistent)').delay(15000).fadeOut('fast')\n  $('.alert-container .btn-close-alert').click(event => {\n    $(event.target).closest('.alert-container').hide()\n  })\n\n  document.body.addEventListener('click', event => {\n    if (event.target.matches('.disabled') || event.target.closest('.disabled')) {\n      event.preventDefault()\n    }\n  })\n})\n"],"file":"assets/application-UieBR15g.js"}