1import{s as Ut,f as u,a as i,r as qt,g as n,d as w,c as d,h as Kr,D as a,j as o,I as $e,v as e,i as Ke,C as Rt}from"../chunks/scheduler.e2b5ccef.js";import{S as Gt,i as Kt,b as F,d as p,m as b,a as m,t as g,e as h}from"../chunks/index.67416819.js";import{H as Te}from"../chunks/Highlight.4389c7ab.js";import{p as Wr}from"../chunks/python.1e6a822e.js";import{c as Wt}from"../chunks/csharp.45d8a436.js";import{H as jt,F as Vt}from"../chunks/footer.473d2b9b.js";/*! 2 * Grammar "handlebars" derived from highlight.js 11.12.0 (BSD-3-Clause). 3 * Copyright (c) 2006, Ivan Sagalaev. Full text: LICENSE.highlight.txt. 4 */const Yt={name:"handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],register:{name:"handlebars",caseInsensitive:!0,unicode:!1,disableAutodetect:!1,states:[{rules:[1,2,3,6,9,37,39,40,41,42,43,51],subLanguage:"xml"},{rules:[],begin:"\\\\\\{\\{",end:"\\B|\\b",skip:!0},{rules:[],begin:"\\\\\\\\(?=\\{\\{)",end:"\\B|\\b",skip:!0},{rules:[4,5],scope:"comment",begin:"\\{\\{!--",end:"--\\}\\}"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[7,8],scope:"comment",begin:"\\{\\{!",end:"\\}\\}"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[10],scope:"template-tag",begin:"\\{\\{\\{\\{(?!\\/)",end:"\\}\\}\\}\\}",starts:36},{rules:[],scope:"name",begin:`(?:\\.|\\.\\/|\\/)?(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+)(?:(\\.|\\/)(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+))*`,end:"\\B|\\b",keywords:{action:["built_in",1],bindattr:["built_in",1],collection:["built_in",1],component:["built_in",1],concat:["built_in",1],debugger:["built_in",1],each:["built_in",1],"each-in":["built_in",1],get:["built_in",1],hash:["built_in",1],if:["built_in",0],in:["built_in",0],input:["built_in",1],"link-to":["built_in",1],loc:["built_in",1],log:["built_in",1],lookup:["built_in",1],mut:["built_in",1],outlet:["built_in",1],partial:["built_in",1],"query-params":["built_in",1],render:["built_in",1],template:["built_in",1],textarea:["built_in",1],unbound:["built_in",1],unless:["built_in",1],view:["built_in",1],with:["built_in",1],yield:["built_in",1]},keywordPattern:"[\\w.\\/]+",starts:11},{rules:[12,13,15,17,19,27,28],begin:"\\B|\\b",end:"\\}\\}",returnEnd:!0},{relevance:0,rules:[],scope:"number",begin:"\\b\\d+(\\.\\d+)?",end:"\\B|\\b"},{rules:[14],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[16],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[18],begin:"as\\s+\\|",end:"\\|",keywords:{as:["keyword",1]},keywordPattern:"\\w+"},{rules:[],begin:"\\w+",end:"\\B|\\b"},{relevance:0,rules:[],scope:"attr",begin:"(\\[\\]|\\[[^\\]]+\\]|[^\\s!\"#%&'()*+,.\\/;<=>@\\[\\\\\\]^`{|}~]+)(?==)",end:"\\B|\\b",starts:20},{rules:[],begin:"=",end:"=",starts:21},{rules:[22,23,25,27,28],begin:"\\B|\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b\\d+(\\.\\d+)?",end:"\\B|\\b"},{rules:[24],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[26],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[],begin:`(?:\\.|\\.\\/|\\/)?(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+)(?:(\\.|\\/)(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+))*`,end:"\\B|\\b",keywords:{true:["literal",1],false:["literal",1],undefined:["literal",1],null:["literal",1]},keywordPattern:"[\\w.\\/]+"},{rules:[29],begin:"\\(",end:"\\)"},{rules:[],scope:"name",begin:`(?:\\.|\\.\\/|\\/)?(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+)(?:(\\.|\\/)(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+))*`,end:"\\B|\\b",keywords:{action:["built_in",1],bindattr:["built_in",1],collection:["built_in",1],component:["built_in",1],concat:["built_in",1],debugger:["built_in",1],each:["built_in",1],"each-in":["built_in",1],get:["built_in",1],hash:["built_in",1],if:["built_in",0],in:["built_in",0],input:["built_in",1],"link-to":["built_in",1],loc:["built_in",1],log:["built_in",1],lookup:["built_in",1],mut:["built_in",1],outlet:["built_in",1],partial:["built_in",1],"query-params":["built_in",1],render:["built_in",1],template:["built_in",1],textarea:["built_in",1],unbound:["built_in",1],unless:["built_in",1],view:["built_in",1],with:["built_in",1],yield:["built_in",1]},keywordPattern:"[\\w.\\/]+",starts:30},{rules:[31,32,34,17,19,27,28],begin:"\\B|\\b",end:"\\)",returnEnd:!0},{relevance:0,rules:[],scope:"number",begin:"\\b\\d+(\\.\\d+)?",end:"\\B|\\b"},{rules:[33],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[35],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[],begin:"\\B|\\b",end:"\\{\\{\\{\\{\\/",returnEnd:!0,subLanguage:"xml"},{rules:[38],scope:"template-tag",begin:"\\{\\{\\{\\{\\/",end:"\\}\\}\\}\\}"},{rules:[],scope:"name",begin:`(?:\\.|\\.\\/|\\/)?(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+)(?:(\\.|\\/)(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+))*`,end:"\\B|\\b",keywords:{action:["built_in",1],bindattr:["built_in",1],collection:["built_in",1],component:["built_in",1],concat:["built_in",1],debugger:["built_in",1],each:["built_in",1],"each-in":["built_in",1],get:["built_in",1],hash:["built_in",1],if:["built_in",0],in:["built_in",0],input:["built_in",1],"link-to":["built_in",1],loc:["built_in",1],log:["built_in",1],lookup:["built_in",1],mut:["built_in",1],outlet:["built_in",1],partial:["built_in",1],"query-params":["built_in",1],render:["built_in",1],template:["built_in",1],textarea:["built_in",1],unbound:["built_in",1],unless:["built_in",1],view:["built_in",1],with:["built_in",1],yield:["built_in",1]},keywordPattern:"[\\w.\\/]+"},{rules:[10],scope:"template-tag",begin:"\\{\\{#",end:"\\}\\}"},{rules:[],scope:"template-tag",begin:"\\{\\{(?=else\\}\\})",end:"\\}\\}",keywords:{else:["keyword",1]},keywordPattern:"\\w+"},{rules:[],scope:"template-tag",begin:"\\{\\{(?=else if)",end:"\\}\\}",keywords:{else:["keyword",1],if:["keyword",0]},keywordPattern:"\\w+"},{rules:[38],scope:"template-tag",begin:"\\{\\{\\/",end:"\\}\\}"},{rules:[44],scope:"template-variable",begin:"\\{\\{\\{",end:"\\}\\}\\}"},{rules:[],scope:"name",begin:`(?:\\.|\\.\\/|\\/)?(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+)(?:(\\.|\\/)(?:""|"[^"]+"|''|'[^']+'|\\[\\]|\\[[^\\]]+\\]|[^\\s!"#%&'()*+,.\\/;<=>@\\[\\\\\\]^\`{|}~]+))*`,end:"\\B|\\b",keywords:{action:["built_in",1],bindattr:["built_in",1],collection:["built_in",1],component:["built_in",1],concat:["built_in",1],debugger:["built_in",1],each:["built_in",1],"each-in":["built_in",1],get:["built_in",1],hash:["built_in",1],if:["built_in",0],in:["built_in",0],input:["built_in",1],"link-to":["built_in",1],loc:["built_in",1],log:["built_in",1],lookup:["built_in",1],mut:["built_in",1],outlet:["built_in",1],partial:["built_in",1],"query-params":["built_in",1],render:["built_in",1],template:["built_in",1],textarea:["built_in",1],unbound:["built_in",1],unless:["built_in",1],view:["built_in",1],with:["built_in",1],yield:["built_in",1]},keywordPattern:"[\\w.\\/]+",starts:45},{rules:[46,47,49,17,19,27,28],begin:"\\B|\\b",end:"\\}\\}",returnEnd:!0},{relevance:0,rules:[],scope:"number",begin:"\\b\\d+(\\.\\d+)?",end:"\\B|\\b"},{rules:[48],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[50],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[44],scope:"template-variable",begin:"\\{\\{",end:"\\}\\}"}],aliases:["hbs","html.hbs","html.handlebars","htmlbars"]}},Jt=Yt;/*! 5 * Grammar "kotlin" derived from highlight.js 11.12.0 (BSD-3-Clause). 6 * Copyright (c) 2006, Ivan Sagalaev. Full text: LICENSE.highlight.txt. 7 */const Qt={name:"kotlin",aliases:["kt","kts","ktm","ktx"],register:{name:"kotlin",caseInsensitive:!1,unicode:!1,disableAutodetect:!1,states:[{rules:[1,5,8,14,17,18,19,34,49,25,26,28,54,55,56,57,58,59,60,61,62,63],keywords:{abstract:["keyword",1],as:["keyword",1],val:["keyword",1],var:["keyword",1],vararg:["keyword",1],get:["keyword",1],set:["keyword",1],class:["keyword",1],object:["keyword",1],open:["keyword",1],private:["keyword",1],protected:["keyword",1],public:["keyword",1],noinline:["keyword",1],crossinline:["keyword",1],dynamic:["keyword",1],final:["keyword",1],enum:["keyword",1],if:["keyword",0],else:["keyword",1],do:["ke
7yword",1],while:["keyword",1],for:["keyword",0],when:["keyword",1],throw:["keyword",1],try:["keyword",1],catch:["keyword",1],finally:["keyword",1],import:["keyword",1],package:["keyword",1],is:["keyword",1],in:["keyword",0],fun:["keyword",1],override:["keyword",1],companion:["keyword",1],reified:["keyword",1],inline:["keyword",1],lateinit:["keyword",1],init:["keyword",1],interface:["keyword",1],annotation:["keyword",1],data:["keyword",1],sealed:["keyword",1],internal:["keyword",1],infix:["keyword",1],operator:["keyword",1],out:["keyword",1],by:["keyword",1],constructor:["keyword",1],super:["keyword",1],tailrec:["keyword",1],where:["keyword",1],const:["keyword",1],inner:["keyword",1],suspend:["keyword",1],typealias:["keyword",1],external:["keyword",1],expect:["keyword",1],actual:["keyword",1],Byte:["built_in",1],Short:["built_in",1],Char:["built_in",1],Int:["built_in",1],Long:["built_in",1],Boolean:["built_in",1],Float:["built_in",1],Double:["built_in",1],Void:["built_in",1],Unit:["built_in",1],Nothing:["built_in",1],true:["literal",1],false:["literal",1],null:["literal",1]},keywordPattern:"\\w+"},{relevance:0,rules:[2,3,4],scope:"comment",begin:"/\\*\\*",end:"\\*/"},{rules:[],scope:"doctag",begin:"@[A-Za-z]+",end:"\\B|\\b"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[6,7],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[9,12,13],scope:"comment",begin:"/\\*",end:"\\*/"},{rules:[10,11],scope:"comment",begin:"/\\*",end:"\\*/"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[],scope:"keyword",begin:"\\b(break|continue|return|this)\\b",end:"\\B|\\b",starts:15},{rules:[16],begin:"\\B|\\b",end:"\\B|\\b"},{rules:[],scope:"symbol",begin:"@\\w+",end:"\\B|\\b"},{rules:[],scope:"symbol",begin:"[a-zA-Z_]\\w*@",end:"\\B|\\b"},{rules:[],scope:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*[a-zA-Z_]\\w*)?",end:"\\B|\\b"},{rules:[20],scope:"meta",begin:"@[a-zA-Z_]\\w*",end:"\\B|\\b"},{rules:[21,30,32,20],begin:"\\(",end:"\\)"},{rules:[22,23],scope:"string",begin:'"""',end:'"""(?=[^"])'},{rules:[],scope:"variable",begin:"\\$[a-zA-Z_]\\w*",end:"\\B|\\b"},{rules:[24,25,26,28],scope:"subst",begin:"\\$\\{",end:"\\}"},{relevance:0,rules:[],scope:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",end:"\\B|\\b"},{rules:[22,23],scope:"string",begin:'"""',end:'"""(?=[^"])'},{rules:[27],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[29,22,23],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[31],scope:"string",begin:"'",end:"'",illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[33,22,23],scope:"string",begin:'"',end:'"',illegal:"\\n"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{relevance:5,rules:[35,37,38,8],scope:"function",begin:"\\b(fun)(?!\\.)(?=\\b|\\s)",end:"[(]|$",excludeEnd:!0,returnBegin:!0,keywords:{abstract:["keyword",1],as:["keyword",1],val:["keyword",1],var:["keyword",1],vararg:["keyword",1],get:["keyword",1],set:["keyword",1],class:["keyword",1],object:["keyword",1],open:["keyword",1],private:["keyword",1],protected:["keyword",1],public:["keyword",1],noinline:["keyword",1],crossinline:["keyword",1],dynamic:["keyword",1],final:["keyword",1],enum:["keyword",1],if:["keyword",0],else:["keyword",1],do:["ke
7yword",1],while:["keyword",1],for:["keyword",0],when:["keyword",1],throw:["keyword",1],try:["keyword",1],catch:["keyword",1],finally:["keyword",1],import:["keyword",1],package:["keyword",1],is:["keyword",1],in:["keyword",0],fun:["keyword",1],override:["keyword",1],companion:["keyword",1],reified:["keyword",1],inline:["keyword",1],lateinit:["keyword",1],init:["keyword",1],interface:["keyword",1],annotation:["keyword",1],data:["keyword",1],sealed:["keyword",1],internal:["keyword",1],infix:["keyword",1],operator:["keyword",1],out:["keyword",1],by:["keyword",1],constructor:["keyword",1],super:["keyword",1],tailrec:["keyword",1],where:["keyword",1],const:["keyword",1],inner:["keyword",1],suspend:["keyword",1],typealias:["keyword",1],external:["keyword",1],expect:["keyword",1],actual:["keyword",1],Byte:["built_in",1],Short:["built_in",1],Char:["built_in",1],Int:["built_in",1],Long:["built_in",1],Boolean:["built_in",1],Float:["built_in",1],Double:["built_in",1],Void:["built_in",1],Unit:["built_in",1],Nothing:["built_in",1],true:["literal",1],false:["literal",1],null:["literal",1]},keywordPattern:"\\w+",notAfterDot:!0},{relevance:0,rules:[36],begin:"[a-zA-Z_]\\w*\\s*\\(",end:"\\B|\\b",returnBegin:!0},{relevance:0,rules:[],scope:"title",begin:"[a-zA-Z_]\\w*",end:"\\B|\\b"},{relevance:0,rules:[],scope:"type",begin:"<",end:">",keywords:{reified:["keyword",1]},keywordPattern:"\\w+"},{relevance:0,rules:[39,45,8,18,19,25,26,28,48],scope:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:{abstract:["keyword",1],as:["keyword",1],val:["keyword",1],var:["keyword",1],vararg:["keyword",1],get:["keyword",1],set:["keyword",1],class:["keyword",1],object:["keyword",1],open:["keyword",1],private:["keyword",1],protected:["keyword",1],public:["keyword",1],noinline:["keyword",1],crossinline:["keyword",1],dynamic:["keyword",1],final:["keyword",1],enum:["keyword",1],if:["keyword",0],else:["keyword",1],do:["keyword",1],while:["keyword",1],for:["keyword",0],when:["keyword",1],throw:["keyword",1],try:["keyword",1],catch:["keyword",1],finally:["keyword",1],import:["keyword",1],package:["keyword",1],is:["keyword",1],in:["keyword",0],fun:["keyword",1],override:["keyword",1],companion:["keyword",1],reified:["keyword",1],inline:["keyword",1],lateinit:["keyword",1],init:["keyword",1],interface:["keyword",1],annotation:["keyword",1],data:["keyword",1],sealed:["keyword",1],internal:["keyword",1],infix:["keyword",1],operator:["keyword",1],out:["keyword",1],by:["keyword",1],constructor:["keyword",1],super:["keyword",1],tailrec:["keyword",1],where:["keyword",1],const:["keyword",1],inner:["keyword",1],suspend:["keyword",1],typealias:["keyword",1],external:["keyword",1],expect:["keyword",1],actual:["keyword",1],Byte:["built_in",1],Short:["built_in",1],Char:["built_in",1],Int:["built_in",1],Long:["built_in",1],Boolean:["built_in",1],Float:["built_in",1],Double:["built_in",1],Void:["built_in",1],Unit:["built_in",1],Nothing:["built_in",1],true:["literal",1],false:["literal",1],null:["literal",1]},keywordPattern:"\\w+"},{relevance:0,rules:[40,41,42,8],begin:":",end:"[=,\\/]",endsWithParent:!0},{rules:[],scope:"type",begin:"[a-zA-Z_]\\w*",end:"\\B|\\b"},{rules:[40,41],begin:"\\(",end:"\\)"},{rules:[43,44],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[46,47],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",end:"\\B|\\b"},{rules:[50,51,52,53,18,19],begin:"(class|interface|trait)(\\s+)([a-zA-Z_]\\w*)",end:"[:\\{(]|$",excludeEnd:!0,illegal:"extends implements",keywords:{class:["keyword",1],interface:["keyword",1],trait:["keyword",1]},keywordPattern:"\\w+",captureScopes:{1:null,2:null,3:"title.class"}},{relevance:0,rules:[],begin:"\\b(public|protected|internal|private|constructor)(?!\\.)(?=\\b|\\s)",end:"\\B|\\b",keywords:{public:["keyword",1],protected:["keyword",1],internal:["keyword",1],private:["keyword",1],constructor:["keyword",1]},keywordPattern:"\\w+",notAfterDot:!0},{relevance:0,rules:[],scope:"title",begin:"[a-zA-Z_]\\w*",end:"\\B|\\b"},{relevance:0,rules:[],scope:"type",begin:"<",end:">",excludeBegin:!0,excludeEnd:!0},{rules:[],scope:"type",begin:"[,:]\\s*",end:"[<\\(,){\\s]|$",excludeBegin:!0,returnEnd:!0},{rules:[],scope:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` 8`},{relevance:0,rules:[],scope:"number",begin:"(\\b([0-9](_*[0-9])*)((\\.([0-9](_*[0-9])*))|\\.)?|(\\.([0-9](_*[0-9])*)))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b([0-9](_*[0-9])*)((\\.([0-9](_*[0-9])*))[fFdD]?\\b|\\.([fFdD]\\b)?)",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"(\\.([0-9](_*[0-9])*))[fFdD]?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0[xX](([0-9a-fA-F](_*[0-9a-fA-F])*)\\.?|([0-9a-fA-F](_*[0-9a-fA-F])*)?\\.([0-9a-fA-F](_*[0-9a-fA-F])*))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b(0|[1-9](_*[0-9])*)(?:[uU][lL]?|[lL])?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0[xX]([0-9a-fA-F](_*[0-9a-fA-F])*)(?:[uU][lL]?|[lL])?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0(_*[0-7])*(?:[uU][lL]?|[lL])?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0[bB][01](_*[01])*(?:[uU][lL]?|[lL])?\\b",end:"\\B|\\b"}],aliases:["kt","kts","ktm","ktx"]}},eo=Qt;/*! 9 * Grammar "swift" derived from highlight.js 11.12.0 (BSD-3-Clause). 10 * Copyright (c) 2006, Ivan Sagalaev. Full text: LICENSE.highlight.txt. 11 */const ro={name:"swift",register:{name:"swift",caseInsensitive:!1,unicode:!1,disableAutodetect:!1,states:[{rules:[1,4,7,112,113,114,115,118,119,120,98,103,106,109,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,25,84,85,12,93],keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["ke
11yword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[2,3],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[4,5,6],scope:"comment",begin:"/\\*",end:"\\*/"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[8,86,111],begin:"((func|macro))(\\s+)((?:`(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*`|(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u
1102FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*|(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])(?:(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])|[\\u0300-\\u036F]|[\\u1DC0-\\u1DFF]|[\\u20D0-\\u20FF]|[\\uFE00-\\uFE0F]|[\\uFE20-\\uFE2F])*))",end:"\\B|\\b",illegal:"(?:\\[|%)",captureScopes:{1:"keyword",3:null,4:"title.function"}},{rules:[9,4,12],begin:"<",end:">",keywords:{repeat:["keyword",1],each:["keyword",1]},keywordPattern:"\\w+"},{rules:[10,11],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{relevance:0,rules:[13,14,15,16,17,18],begin:"(?=\\b[A-Z])",end:"\\B|\\b"},{rules:[],scope:"type",begin:"(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])+",end:"\\B|\\b"},{relevance:0,rules:[],scope:"type",begin:"[A-Z](?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*",end:"\\B|\\b"},{relevance:0,rules:[],begin:"[?!]+",end:"\\B|\\b"},{relevance:0,rules:[],begin:"\\.\\.\\.",end:"\\B|\\b"},{relevance:0,rules:[],begin:"\\s+&\\s+(?=[A-Z](?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u
1102FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*)",end:"\\B|\\b"},{rules:[19,4,22,23,24,25,84,85,28,12],begin:"<",end:">",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[20,21],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[],begin:"(\\.)((?:\\bProtocol\\b|\\bType\\b|\\binit\\b|\\bself\\b))",end:"\\B|\\b",captureScopes:{1:null,2:"keyword"}},{relevance:0,rules:[],begin:"\\.(?:sending|actor|any|associatedtype|async|await|as\\?|as!|as|borrowing|break|case|catch|class|consume|consuming|continue|convenience|copy|default|defer|deinit|didSet|distributed|do|dynamic|each|else|enum|extension|fallthrough|fileprivate\\(set\\)|fileprivate|final|for|func|get|guard|if|import|indirect|infix|init\\?|init!|inout|internal\\(set\\)|internal|in|is|isolated|nonisolated|lazy|let|macro|mutating|nonmutating|open\\(set\\)|open|operator|optional|override|package|postfix|precedencegroup|prefix|private\\(set\\)|private|protocol|public\\(set\\)|public|repeat|required|rethrows|return|set|some|static|struct|subscript|super|switch|throws|throw|try\\?|try!|try|typealias|unowned\\(safe\\)|unowned\\(unsafe\\)|unowned|var|weak|where|while|willSet)",end:"\\B|\\b"},{rules:[],scope:"keyword",begin:"(?:\\bnonisolated\\(unsafe\\)\\B|\\bnonisolated\\(nonsending\\)\\B|#(?:Preview|expect|require)\\b|\\bas\\?\\B|\\bas!\\B|\\bfileprivate\\(set\\)\\B|\\binit\\?\\B|\\binit!\\B|\\binternal\\(set\\)\\B|\\bo
11pen\\(set\\)\\B|\\bprivate\\(set\\)\\B|\\bpublic\\(set\\)\\B|\\btry\\?\\B|\\btry!\\B|\\bunowned\\(safe\\)\\B|\\bunowned\\(unsafe\\)\\B|\\bAny\\b|\\bSelf\\b|\\binit\\b|\\bself\\b)",end:"\\B|\\b"},{rules:[],scope:"keyword",begin:"(@|#(un)?)available",end:"\\B|\\b",starts:26},{rules:[27],begin:"\\B|\\b",end:"\\B|\\b"},{rules:[28,29,30,31,32,33,34,35,42,47,52,57,61,65,69],begin:"\\(",end:"\\)",keywords:{iOS:["keyword",1],iOSApplicationExtension:["keyword",1],macOS:["keyword",1],macOSApplicationExtension:["keyword",1],macCatalyst:["keyword",1],macCatalystApplicationExtension:["keyword",1],watchOS:["keyword",1],watchOSApplicationExtension:["keyword",1],tvOS:["keyword",1],tvOSApplicationExtension:["keyword",1],swift:["keyword",1]},keywordPattern:"\\w+"},{relevance:0,rules:[],begin:"->",end:"\\B|\\b"},{relevance:0,rules:[],scope:"operator",begin:"(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])(?:(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])|[\\u0300-\\u036F]|[\\u1DC0-\\u1DFF]|[\\u20D0-\\u20FF]|[\\uFE00-\\uFE0F]|[\\uFE20-\\uFE2F])*",end:"\\B|\\b"},{relevance:0,rules:[],scope:"operator",begin:"\\.(\\.|(?:(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])|[\\u0300-\\u036F]|[\\u1DC0-\\u1DFF]|[\\u20D0-\\u20FF]|[\\uFE00-\\uFE0F]|[\\uFE20-\\uFE2F]))+",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0x(([0-9a-fA-F]_*)+)(\\.(([0-9a-fA-F]_*)+))?([pP][+-]?(([0-9]_*)+))?\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0o([0-7]_*)+\\b",end:"\\B|\\b"},{relevance:0,rules:[],scope:"number",begin:"\\b0b([01]_*)+\\b",end:"\\B|\\b"},{rules:[36,37,38,39],scope:"string",begin:'"""',end:'"""'},{rules:[],scope:"subst",begin:`\\\\[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\[\\t ]*(?:[\\r\\n]|\\r\\n)",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,83],scope:"subst",begin:"\\\\\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["ke
11yword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{relevance:0,rules:[],begin:"\\.(?:abs|all|any|assert|assertionFailure|debugPrint|dump|fatalError|getVaList|isKnownUniquelyReferenced|max|min|numericCast|pointwiseMax|pointwiseMin|precondition|preconditionFailure|print|readLine|repeatElement|sequence|stride|swap|swift_unboxFromSwiftValueWithType|transcode|type|unsafeBitCast|unsafeDowncast|withExtendedLifetime|withUnsafeMutablePointer|withUnsafePointer|withVaList|withoutActuallyEscaping|zip)",end:"\\B|\\b"},{rules:[],scope:"built_in",begin:"\\b(?:abs|all|any|assert|assertionFailure|debugPrint|dump|fatalError|getVaList|isKnownUniquelyReferenced|max|min|numericCast|pointwiseMax|pointwiseMin|precondition|preconditionFailure|print|readLine|repeatElement|sequence|stride|swap|swift_unboxFromSwiftValueWithType|transcode|type|unsafeBitCast|unsafeDowncast|withExtendedLifetime|withUnsafeMutablePointer|withUnsafePointer|withVaList|withoutActuallyEscaping|zip)(?=\\()",end:"\\B|\\b"},{rules:[43,44,45,46],scope:"string",begin:'#"""',end:'"""#'},{rules:[],scope:"subst",begin:`\\\\#[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\#u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\#[\\t ]*(?:[\\r\\n]|\\r\\n)",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,82],scope:"subst",begin:"\\\\#\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[48,49,50,51],scope:"string",begin:'##"""',end:'"""##'},{rules:[],scope:"subst",begin:`\\\\##[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\##u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\##[\\t ]*(?:[\\r\\n]|\\r\\n)",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,81],scope:"subst",begin:"\\\\##\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["ke
11yword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[53,54,55,56],scope:"string",begin:'###"""',end:'"""###'},{rules:[],scope:"subst",begin:`\\\\###[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\###u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\###[\\t ]*(?:[\\r\\n]|\\r\\n)",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,80],scope:"subst",begin:"\\\\###\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[58,59,60],scope:"string",begin:'"',end:'"'},{rules:[],scope:"subst",begin:`\\\\[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,79],scope:"subst",begin:"\\\\\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["ke
11yword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[62,63,64],scope:"string",begin:'#"',end:'"#'},{rules:[],scope:"subst",begin:`\\\\#[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\#u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,78],scope:"subst",begin:"\\\\#\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[66,67,68],scope:"string",begin:'##"',end:'"##'},{rules:[],scope:"subst",begin:`\\\\##[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\##u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,77],scope:"subst",begin:"\\\\##\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["ke
11yword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[70,71,72],scope:"string",begin:'###"',end:'"###'},{rules:[],scope:"subst",begin:`\\\\###[0\\\\tnr"']`,end:"\\B|\\b"},{rules:[],scope:"subst",begin:"\\\\###u\\{[0-9a-fA-F]{1,8}\\}",end:"\\B|\\b"},{rules:[22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,76],scope:"subst",begin:"\\\\###\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[],begin:"`(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u
1102FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*`",end:"\\B|\\b"},{rules:[],scope:"variable",begin:"\\$\\d+",end:"\\B|\\b"},{rules:[],scope:"variable",begin:"\\$(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])+",end:"\\B|\\b"},{rules:[76,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[77,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[78,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[79,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[80,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[81,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[82,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[83,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75],begin:"\\(",end:"\\)"},{rules:[],scope:"keyword",begin:"@(?:attached|autoclosure|convention\\((?:swift|block|c)\\)|discardableResult|dynamicCallable|dynamicMemberLookup|escaping|freestanding|frozen|GKInspectable|IBAction|IBDesignable|IBInspectable|IBOutlet|IBSegueAction|inlinable|main|nonobjc|NSApplicationMain|NSCopying|NSManaged|objc\\((?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*\\)|objc|objcMembers|propertyWrapper|requires_stored_property_inits|resultBuilder|Sendable|testable|UIApplicationMain|unchecked|unknown|usableFromInline|warn_unqualified_access)(?=(?:\\(|\\s+))",end:"\\B|\\b"},{rules:[],scope:"meta",begin:"@(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u
1102FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*",end:"\\B|\\b"},{rules:[87,90,4,22,23,24,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,25,84,85,12,93],begin:"\\(",end:"\\)",endsParent:!0,illegal:`["']`,keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{relevance:0,rules:[88,89],begin:"(?:(?=(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u
1102FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*\\s*:)|(?=(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*\\s+(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*\\s*:))",end:":"},{rules:[],scope:"keyword",begin:"\\b_\\b",end:"\\B|\\b"},{rules:[],scope:"params",begin:"(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*",end:"\\B|\\b"},{rules:[91,92],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{relevance:0,rules:[93,94,95,4,98,103,106,109,22,23,24,40,41,28,29,30,31,32,33,34,35,42,47,52,57,61,65,69,73,74,75,25,84,85,12],begin:"\\(",end:"\\)",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["ke
11yword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{relevance:0,rules:[],begin:"(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*\\s*:",end:"\\B|\\b",keywords:{_:["keyword",0]},keywordPattern:"\\w+"},{rules:[96,97],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"},{rules:[99,100,102],scope:"regexp",begin:"###\\/",end:"\\/###"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{relevance:0,rules:[101],begin:"\\[",end:"\\]"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[],scope:"comment",begin:"#(?!.*\\/###)",end:"$"},{rules:[104,100,105],scope:"regexp",begin:"##\\/",end:"\\/##"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[],scope:"comment",begin:"#(?!.*\\/##)",end:"$"},{rules:[107,100,108],scope:"regexp",begin:"#\\/",end:"\\/#"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{rules:[],scope:"comment",begin:"#(?!.*\\/#)",end:"$"},{rules:[110,100],scope:"regexp",begin:"\\/[^\\s](?=[^/\\n]*\\/)",end:"\\/"},{relevance:0,rules:[],begin:"\\\\[\\s\\S]",end:"\\B|\\b"},{relevance:0,rules:[],begin:"\\s+",end:"\\B|\\b"},{rules:[8,86,111],begin:"(\\b(?:subscript|init[?!]?))(\\s*(?=[<(]))",end:"\\B|\\b",illegal:"\\[|%",captureScopes:{1:"keyword",2:null}},{rules:[],begin:"(class\\b)(\\s+)(func\\b)(\\s+)(\\b[A-Za-z_][A-Za-z0-9_]*\\b)",end:"\\B|\\b",captureScopes:{1:"keyword",2:null,3:"keyword",4:null,5:"title.function"}},{rules:[],begin:"(class\\b)(\\s+)(var\\b)",end:"\\B|\\b",captureScopes:{1:"keyword",2:null,3:"keyword"}}
11,{rules:[8,22,23,24,116],begin:"((struct|protocol|class|extension|enum|actor))(\\s+)((?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])(?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*)(\\s*)",end:"\\B|\\b",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["keyword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)",captureScopes:{1:"keyword",3:null,4:"title.class",5:null}},{relevance:0,rules:[117,22,23,24],begin:":",end:"\\{",keywords:{actor:["keyword",1],any:["keyword",1],associatedtype:["keyword",1],async:["keyword",1],await:["keyword",1],as:["keyword",1],borrowing:["keyword",1],break:["keyword",1],case:["keyword",1],catch:["keyword",1],class:["keyword",1],consume:["keyword",1],consuming:["keyword",1],continue:["keyword",1],convenience:["keyword",1],copy:["keyword",1],default:["keyword",1],defer:["keyword",1],deinit:["keyword",1],didSet:["keyword",1],distributed:["keyword",1],do:["ke
11yword",1],dynamic:["keyword",1],each:["keyword",1],else:["keyword",1],enum:["keyword",1],extension:["keyword",1],fallthrough:["keyword",1],fileprivate:["keyword",1],final:["keyword",1],for:["keyword",0],func:["keyword",1],get:["keyword",1],guard:["keyword",1],if:["keyword",0],import:["keyword",1],indirect:["keyword",1],infix:["keyword",1],inout:["keyword",1],internal:["keyword",1],in:["keyword",0],is:["keyword",1],isolated:["keyword",1],nonisolated:["keyword",1],lazy:["keyword",1],let:["keyword",1],macro:["keyword",1],mutating:["keyword",1],nonmutating:["keyword",1],open:["keyword",1],operator:["keyword",1],optional:["keyword",1],override:["keyword",1],package:["keyword",1],postfix:["keyword",1],precedencegroup:["keyword",1],prefix:["keyword",1],private:["keyword",1],protocol:["keyword",1],public:["keyword",1],repeat:["keyword",1],required:["keyword",1],rethrows:["keyword",1],return:["keyword",1],set:["keyword",1],some:["keyword",1],static:["keyword",1],struct:["keyword",1],subscript:["keyword",1],super:["keyword",1],switch:["keyword",1],throws:["keyword",1],throw:["keyword",1],try:["keyword",1],typealias:["keyword",1],unowned:["keyword",1],var:["keyword",1],weak:["keyword",1],where:["keyword",1],while:["keyword",1],willSet:["keyword",1],_:["keyword",0],"#colorLiteral":["keyword",1],"#column":["keyword",1],"#dsohandle":["keyword",1],"#else":["keyword",1],"#elseif":["keyword",1],"#endif":["keyword",1],"#error":["keyword",1],"#file":["keyword",1],"#fileID":["keyword",1],"#fileLiteral":["keyword",1],"#filePath":["keyword",1],"#function":["keyword",1],"#if":["keyword",1],"#imageLiteral":["keyword",1],"#keyPath":["keyword",1],"#line":["keyword",1],"#selector":["keyword",1],"#sourceLocation":["keyword",1],"#warning":["keyword",1],sending:["keyword",1],false:["literal",1],nil:["literal",1],true:["literal",1]},keywordPattern:"(?:\\b\\w+|#\\w+)"},{rules:[],scope:"title.class.inherited",begin:"[A-Z](?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*",end:"\\B|\\b"},{rules:[],begin:"(operator)(\\s+)((?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])(?:(?:[/=\\-+!*%<>&|^~?]|[\\u00A1-\\u00A7]|[\\u00A9\\u00AB]|[\\u00AC\\u00AE]|[\\u00B0\\u00B1]|[\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7]|[\\u2016-\\u2017]|[\\u2020-\\u2027]|[\\u2030-\\u203E]|[\\u2041-\\u2053]|[\\u2055-\\u205E]|[\\u2190-\\u23FF]|[\\u2500-\\u2775]|[\\u2794-\\u2BFF]|[\\u2E00-\\u2E7F]|[\\u3001-\\u3003]|[\\u3008-\\u3020]|[\\u3030])|[\\u0300-\\u036F]|[\\u1DC0-\\u1DFF]|[\\u20D0-\\u20FF]|[\\uFE00-\\uFE0F]|[\\uFE20-\\uFE2F])*)",end:"\\B|\\b",captureScopes:{1:"keyword",2:null,3:"title"}},{rules:[12],begin:"(precedencegroup)(\\s+)([A-Z](?:(?:[a-zA-Z_]|[\\u00A8\\u00AA\\u00AD\\u00AF\\u00B2-\\u00B5\\u00B7-\\u00BA]|[\\u00BC-\\u00BE\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u00FF]|[\\u0100-\\u02FF\\u0370-\\u167F\\u1681-\\u180D\\u180F-\\u1DBF]|[\\u1E00-\\u1FFF]|[\\u200B-\\u200D\\u202A-\\u202E\\u203F-\\u2040\\u2054\\u2060-\\u206F]|[\\u2070-\\u20CF\\u2100-\\u218F\\u2460-\\u24FF\\u2776-\\u2793]|[\\u2C00-\\u2DFF\\u2E80-\\u2FFF]|[\\u3004-\\u3007\\u3021-\\u302F\\u3031-\\u303F\\u3040-\\uD7FF]|[\\uF900-\\uFD3D\\uFD40-\\uFDCF\\uFDF0-\\uFE1F\\uFE30-\\uFE44]|[\\uFE47-\\uFEFE\\uFF00-\\uFFFD])|\\d|[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE20-\\uFE2F])*)",end:"}",keywords:{assignment:["keyword",1],associativity:["keyword",1],higherThan:["keyword",1],left:["keyword",1],lowerThan:["keyword",1],none:["keyword",1],right:["keyword",1],false:["keyword",1],nil:["keyword",1],true:["keyword",1]},keywordPattern:"\\w+",captureScopes:{1:"keyword",2:null,3:"title"}},{relevance:0,rules:[121,4],begin:"\\b(import)(?!\\.)(?=\\b|\\s)",end:"$",keywords:{import:["keyword",1]},keywordPattern:"\\w+",notAfterDot:!0},{rules:[122,123],scope:"comment",begin:"//",end:"$"},{relevance:0,rules:[],scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:"(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",excludeBegin:!0},{rules:[],begin:"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",end:"\\B|\\b"}]}},to=ro,He=""+new URL("../assets/pytorch-on-the-edge-with-ort.cdaa9c84.png",import.meta.url).href,oo=""+new URL("../assets/pytorch-on-the-edge-puppies.106f83fa.png",import.meta.url).href,uo=""+new URL("../assets/pytorch-on-the-edge-speechrec.d26f9fad.png",import.meta.url).href,no=""+new URL("../assets/pytorch-on-the-edge-training.bd3254f5.png",import.meta.url).href,io=""+new URL("../assets/pytorch-on-the-edge-textgen.4b552a2e.png",import.meta.url).href;function ao(k){let c,D,E,B,v,A,x,Pe,Oe,Ie,ze,Xe,Me,Le,Se,Ne,Ue,C,qe,y,_,jr="Run PyTorch models on the edge",We,T,Vr=`By: <a href="https://www.linkedin.com/in/natkershaw/" class="dark:text-blue-300 text-blue-800 underline">Natalie Kershaw</a> 12 and 13 <a href="https://www.linkedin.com/in/prasanthpulavarthi/" class="dark:text-blue-300 text-blue-800 underline">Prasanth Pulavarthi</a>`,je,P,Yr="12TH OCTOBER, 2023",Ve,Ze,r,O,Jr=`Most modern ML models are developed with PyTorch. The agility and flexibility that PyTorch 14 provides for creating and training models has made it the most popular deep learning 15 framework today. The typical workflow is to train these models in the cloud and run them 16 from the cloud as well. However, many scenarios are arising that make it more attractive -
17 or in some cases, required - to run locally on device. These include:`,Ye,I,Qr="<li>Avoiding network round-trips to the cloud (for example in audio and video processing)</li> <li>Keeping user data on device (for privacy protection or regulatory requirements)</li> <li>High cost of cloud resources (especially when device capabilities are underutilized)</li> <li>Application requirements to operate without internet connectivity</li>",Je,z,et,Qe,X,rt=`In this article, we'll demystify running PyTorch models on the edge. We define 'edge' as 18 anywhere that is outside of the cloud, ranging from large, well-resourced personal computers 19 to small footprint devices such as mobile phones. This has been a challenging task to 20 accomplish in the past, but new advances in model optimization and software like 21 <a href="https://onnxruntime.ai/pytorch" class="dark:text-blue-300 text-blue-800 underline">ONNX Runtime</a> 22 make it more feasible - even for new generative AI and large language models like Stable Diffusion, 23 Whisper, and Llama2.`,er,M,tt="Considerations for PyTorch models on the edge",rr,L,ot=`There are several factors to keep in mind when thinking about running a PyTorch model on the 24 edge:`,tr,S,ut=`<li class="mb-2"><strong>Size</strong>: modern models can be several gigabytes (hence the name Large 25 Language Models!). On the cloud, size is usually not a consideration until it becomes too 26 large to fit on a single GPU. At that point there are various well-known solutions for 27 running across multiple GPUs. For edge devices, we need to find models that can fit within 28 the constraints of the device. This sometimes requires a tradeoff with quality. Most 29 modern models come in several sizes (1 billion parameters, 13 billion parameters, 70 30 billion parameters, etc) so you can select a variant that fits on your device. Techniques 31 such as quantization are usually applied to reduce the number of bits representing 32 parameters, further reducing the model size. The size of the application is also 33 constrained by the app stores, so bringing in gigabytes of libraries won't work on the 34 edge.</li> <li class="mb-2"><strong>API for application integration</strong>: on the cloud, models are usually 35 packaged as Docker containers that expose an endpoint that is called by an application or 36 service. On edge devices, Docker containers may take up too many resources or may not even 37 be supported. By using an optimized engine, like ONNX Runtime, the dependency on Python 38 and Docker containers can be eliminated. ONNX Runtime also has APIs in many languages 39 including C, C++, C#, Rust, Java, JavaScript, Objective-C and Swift for making it easier 40 to integrate natively with the hosting application.</li> <li class="mb-2"><strong>Performance</strong>: with large amounts of memory, no power restrictions, and 41 hefty compute capabilities, running non-optimized models on the cloud is possible. On edge 42 devices, these luxuries do not exist and optimization is crucial. For example, ONNX 43 Runtime optimizes memory allocations, fuses model operators, reduces kernel launch times, 44 minimizes tensor transfers between processing units, and applies tuned matrix math 45 algorithms. It's also able to make use of compilers and engines that are device-specific, 46 providing a common interface for your application while harnessing the best approach on 47 each device.</li> <li class="mb-2"><strong>Maintainability</strong>: on the cloud, updating a model is as simple as deploying 48 a new container image and ramping up traffic. On the edge, you need to consider how you 49 will distribute model updates. Sometimes this involves publishing updates to an app store, 50 sometimes it might be possible to implement a data update mechanism within your app and 51 download new model files or maybe even deltas. There are many possible paths, so we won't 52 go into much depth on this topic in this article but it's an aspect to keep in mind as you 53 plan for production.</li> <li class="mb-2"><strong>Hybrid</strong>: instead of cloud versus device, you can choose to utilize both. 54 There are several hybrid patterns that are used in production today by applications such 55 as Office. One pattern is to dynamically decide whether to run on the device or in the 56 cloud based on network conditions or input characteristics. Another pattern is to run part 57 of the model pipeline on the device and part on the cloud. This is especially useful with 58 modern model pipelines that have separate encoder and decoder stages. Using an engine like 59 ONNX Runtime that works on both cloud and device simplifies development. We'll discuss 60 hybrid scenarios in more detail in a forthcoming article.</li> <li><strong>Personalization</strong>: in many cases, the PyTorch model is simply being run on 61 the device. However, you may also have scenarios where you need to personalize the model 62 on the device without sending data to the cloud. Recommendation and content targeting are 63 example scenarios that can improve their quality by updating models based on activity on 64 the device. Fine tuning and training with PyTorch on the device may not feasible (due to 65 performance and size concerns) but using an engine like ONNX Runtime allows PyTorch models 66 to be updated and personalized locally. The same mechanism also enabled federated 67 learning, which can help mitigate user data exposure.</li>`,or,N,nt="Tools for PyTorch models on the edge",ur,Z,it=`We mentioned ONNX Runtime several times above. ONNX Runtime is a compact, standards-based 68 engine that has deep integration with PyTorch. By using PyTorch's ONNX APIs, your PyTorch 69 models can run on a spectrum of edge devices with ONNX Runtime.`,nr,$,dt=`The first step for running PyTorch models on the edge is to get them into a lightweight 70 format that doesn't require the PyTorch framework and its gigabytes of dependencies. PyTorch 71 has thought about this and includes an API that enables exactly this - <a href="https://pytorch.org/docs/stable/onnx.html" class="dark:text-blue-300 text-blue-800 underline">torch.onnx</a>. <a href="https://onnx.ai/">ONNX</a> is an open standard that defines the operators that make 72 up models. The PyTorch ONNX APIs take the Pythonic PyTorch code and turn it into a functional 73 graph that captures the operators that are needed to run the model without Python. As with everything 74 in machine learning, there are some limitations to be aware of. Some PyTorch models cannot be
75 represented as a single graph - in this case you may need to output several graphs and stitch 76 them together in your own pipeline.`,ir,H,at=`The popular Hugging Face library also has APIs that build on top of this torch.onnx 77 functionality to export models to the ONNX format. Over <a href="https://huggingface.co/blog/ort-accelerating-hf-models" class="dark:text-blue-300 text-blue-800 underline">130,000 models</a> are supported making it very likely that the model you care about is one of them.`,dr,U,st=`In this article, we'll show you several examples involving state-of-the-art PyTorch models 78 (like Whisper and Stable Diffusion) on popular devices (like Windows laptops, mobile phones, 79 and web browsers) via various languages (from C# to JavaScript to Swift).`,ar,q,lt="Examples of PyTorch models on the edge",sr,R,wt="Stable Diffusion on Windows",lr,G,yt=`The Stable Diffusion pipeline consists of five PyTorch models that build an image from a 80 text description. The diffusion process iterates on random pixels until the output image 81 matches the description.`,wr,K,kt="To run on the edge, four of the models can be exported to ONNX format from HuggingFace.",yr,W,kr,j,ct='You don't have to export the fifth model, ClipTokenizer, as it is available in <a href="https://onnxruntime.ai/docs/extensions" class="dark:text-blue-300 text-blue-800 underline">ONNX Runtime extensions</a>, a library for pre and post processing PyTorch models.',cr,V,Ft=`To run this pipeline of models as a .NET application, we build the pipeline code in C#. This 82 code can be run on CPU, GPU, or NPU, if they are available on your machine, using ONNX 83 Runtime's device-specific hardware accelerators. This is configured with the <code class="bg-gray-200 dark:bg-gray-700 p-1 rounded">ExecutionProviderTarget</code> below.`,Fr,Y,pr,J,pt="This is the output of the model pipeline, running with 50 inference iterations:",br,Q,bt,mr,ee,mt='You can build the application and run it on Windows with the detailed steps shown in this <a href="https://onnxruntime.ai/docs/tutorials/csharp/stable-diffusion-csharp.html" class="dark:text-blue-300 text-blue-800 underline">tutorial</a>.',gr,re,gt="Text generation in the browser",hr,te,ht=`Running a PyTorch model locally in the browser is not only possible but super simple with 84 the <a href="https://huggingface.co/docs/transformers.js/index" class="dark:text-blue-300 text-blue-800 underline">transformers.js</a> library. Transformers.js uses ONNX Runtime Web as its backend. Many models are already converted 85 to ONNX and served by the tranformers.js CDN, making inference in the browser a matter of writing 86 a few lines of HTML:`,fr,oe,Dr,ue,ft=`You can also embed the call to the transformers pipeline using vanilla JavaScript, or in a 87 web application, with React or Next.js, or write a browser extension.`,Er,ne,Dt=`ONNX Runtime Web currently uses web assembly to execute the model on the CPU. This is fine 88 for many models but leveraging the GPU, if one exists on the device, can improve the user 89 experience. ONNX Runtime Web support for WebGPU is coming *very* soon and enables you to tap 90 into the GPU while use the same inference APIs.`,Br,ie,Et,vr,de,Bt="Speech recognition with Whisper on mobile",Ar,ae,vt=`Whisper from OpenAI is a PyTorch speech recognition model. Whisper comes in a number of 91 different size variants - the smallest, Whisper Tiny, is suitable to run on mobile devices. 92 All components of the Whisper Tiny model (audio decoder, encoder, decoder, and text sequence 93 generation) can be composed and exported to a single ONNX model using the <a href="https://github.com/microsoft/Olive/tree/main/examples/whisper" class="dark:text-blue-300 text-blue-800 underline">Olive framework</a>. To run this model as part of a mobile application, you can use ONNX Runtime Mobile, which 94 supports Android, iOS, react-native, and MAUI/Xamarin.`,xr,se,At=`ONNX Runtime Mobile supports hardware acceleration via NNAPI (on Android), CoreML (on iOS), 95 and XNNPACK (both iOS and Android).`,Cr,le,xt='The relevant snippet of a example <a href="https://github.com/microsoft/onnxruntime-inference-examples/tree/main/mobile/examples/spee
95ch_recognition" class="dark:text-blue-300 text-blue-800 underline">Android mobile app</a> that performs speech transcription on short samples of audio is shown below:',_r,we,Tr,ye,Ct="You can record a short audio clip to transcribe.",Pr,ke,_t,Or,ce,Tt="Train a model to recognize your voice on mobile",Ir,Fe,Pt=`ONNX Runtime can also take a pre-trained model and adapt it to new data. It can do this on 96 the edge - on mobile specifically where it is easy to record your voice, access your photos 97 and other personalized data. Importantly, your data does not leave the device during 98 training.`,zr,pe,Ot=`For example, you can train a PyTorch model to recognize just your own voice on your mobile 99 phone, for authentication scenarios.`,Xr,be,It=`The PyTorch model is obtained from HuggingFace in your development environment, and extra 100 layers are added to perform the speaker classification:`,Mr,me,Lr,ge,zt=`The model and other components necessary for training (a loss function to measure the 101 quality of the model and an optimizer to instruct how the weights are adjusted during 102 training) are exported with ONNX Runtime Training:`,Sr,he,Nr,fe,Xt=`This set of artifacts is now ready to be loaded by the mobile app, shown here as iOS Swift 103 code. The app asks the user for samples of their voice and the model is trained with the 104 samples.`,Zr,De,$r,Ee,Mt="Once the model is trained, you can run it to verify that a voice sample is you!",Hr,Be,Lt,Ur,ve,St=`You can read the full <a href="https://onnxruntime.ai/docs/tutorials/on-device-training/ios-app.html" class="dark:text-blue-300 text-blue-800 underline">Speaker Verification tutorial</a>, and 105 <a href="https://github.com/microsoft/onnxruntime-training-examples/tree/master/on_device_training/mobile/ios" class="dark:text-blue-300 text-blue-800 underline">build and run the application from source</a>.`,qr,Ae,Nt="Where to next?",Rr,xe,Zt=`In this article we've shown why you would run PyTorch models on the edge and what aspects to 106 consider. We also shared several examples with code that you can use for running 107 state-of-the-art PyTorch models on the edge with ONNX Runtime. We also showed how ONNX 108 Runtime was built for performance and cross-platform execution, making it the ideal way to 109 run PyTorch models on the edge. Have fun running PyTorch models on the edge with ONNX 110 Runtime!`,Gr,Ce,$t=`You may have noticed that we didn't include a Llama2 example even though ONNX Runtime is 111 optimized to run it. That's because the amazing Llama2 model deserves its own article, so 112 stay tuned for that!`,Re,_e,Ge;return C=new jt({props:{pathvar:""}}),W=new Te({props:{language:Wr,code:k[0]}}),Y=new Te({props:{language:Wt,code:k[1]}}),oe=new Te({props:{language:Jt,code:k[2]}}),we=new Te({props:{language:eo,code:k[3]}}),me=new Te({props:{language:Wr,code:k[4]}}),he=new Te({props:{language:Wr,code:k[5]}}),De=new Te({props:{language:to,code:k[6]}}),_e=new Vt({props:{pathvar:""}}),{c(){c=u("meta"),D=u("meta"),E=u("meta"),B=u("meta"),v=u("meta"),A=u("meta"),x=u("meta"),Pe=u("meta"),Oe=u("meta"),Ie=u("meta"),ze=u("meta"),Xe=u("meta"),Me=u("meta"),Le=u("meta"),Se=u("meta"),Ne=u("meta"),Ue=i(),F(C.$$.fragment),qe=i(),y=u("div"),_=u("h1"),_.textContent=jr,We=i(),T=u("p"),T.innerHTML=Vr,je=i(),P=u("p"),P.textContent=Yr,Ve=i(),Ze=u("div"),r=u("div"),O=u("p"),O.textContent=Jr,Ye=i(),I=u("ul"),I.innerHTML=Qr,Je=i(),z=u("img"),Qe=i(),X=u("p"),X.innerHTML=rt,er=i(),M=u("h2"),M.textContent=tt,rr=i(),L=u("p"),L.textContent=ot,tr=i(),S=u("ul"),S.innerHTML=ut,or=i(),N=u("h2"),N.textContent=nt,ur=i(),Z=u("p"),Z.textContent=it,nr=i(),$=u("p"),$.innerHTML=dt,ir=i(),H=u("p"),H.innerHTML=at,dr=i(),U=u("p"),U.textContent=st,ar=i(),q=u("h2"),q.textContent=lt,sr=i(),R=u("h3"),R.textContent=wt,lr=i(),G=u("p"),G.textContent=yt,wr=i(),K=u("p"),K.textContent=kt,yr=i(),F(W.$$.fragment),kr=i(),j=u("p"),j.innerHTML=ct,cr=i(),V=u("p"),V.innerHTML=Ft,Fr=i(),F(Y.$$.fragment),pr=i(),J=u("p"),J.textContent=pt,br=i(),Q=u("img"),mr=i(),ee=u("p"),ee.innerHTML=mt,gr=i(),re=u("h3"),re.textContent=gt,hr=i(),te=u("p"),te.innerHTML=ht,fr=i(),F(oe.$$.fragment),Dr=i(),ue=u("p"),ue.textContent=ft,Er=i(),ne=u("p"),ne.textContent=Dt,Br=i(),ie=u("img"),vr=i(),de=u("h3"),de.textContent=Bt,Ar=i(),ae=u("p"),ae.innerHTML=vt,xr=i(),se=u("p"),se.textContent=At,Cr=i(),le=u("p"),le.innerHTML=xt,_r=i(),F(we.$$.fragment),Tr=i(),ye=u("p"),ye.textContent=Ct,Pr=i(),ke=u("img"),Or=i(),ce=u("h3"),ce.textContent=Tt,Ir=i(),Fe=u("p"),Fe.textContent=Pt,zr=i(),pe=u("p"),pe.textContent=Ot,Xr=i(),be=u("p"),be.textContent=It,Mr=i(),F(me.$$.fragment),Lr=i(),ge=u("p"),ge.textContent=zt,Sr=i(),F(he.$$.fragment),Nr=i(),fe=u("p"),fe.textContent=Xt,Zr=i(),F(De.$$.fragment),$r=i(),Ee=u("p"),Ee.textContent=Mt,Hr=i(),Be=u("img"),Ur=i(),ve=u("p"),ve.innerHTML=St,qr=i(),Ae=u("h3"),Ae.textContent=Nt,Rr=i(),xe=u("p"),xe.textContent=Zt,Gr=i(),Ce=u("p"),Ce.textContent=$t,Re=i(),F(_e.$$.fragment),this.h()},l(s){const l=qt("svelte-1wceb9f",document.head);c=n(l,"META",{name:!0,content:!0}),D=n(l,"META",{name:!0,content:!0}),E=n(l,"META",{name:!0,content:!0}),B=n(l,"META",{name:!0,content:!0}),v=n(l,"META",{name:!0,content:!0}),A=n(l,"META",{name:!0,content:!0}),x=n(l,"META",{name:!0,content:!0}),Pe=n(l,"META",{name:!0,content:!0}),Oe=n(l,"META",{name:!0,content:!0}),Ie=n(l,"META",{name:!0,content:!0}),ze=n(l,"META",{name:!0,content:!0}),Xe=n(l,"META",{name:!0,content:!0}),Me=n(l,"META",{name:!0,content:!0}),Le=n(l,"META",{name:!0,content:!0}),Se=n(l,"META",{name:!0,content:!0}),Ne=n(l,"META",{name:!0,content:!0}),l.forEach(w),Ue=d(s),p(C.$$.fragment,s),qe=d(s),y=n(s,"DIV",{class:!0});var f=Kr(y);_=n(f,"H1",{class:!0,"data-svelte-h":!0}),a(_)!=="svelte-jlmxxa"&&(_.textContent=jr),We=d(f),T=n(f,"P",{class:!0,"data-svelte-h":!0}),a(T)!=="svelte-e5mff0"&&(T.innerHTML=Vr),je=d(f),P=n(f,"P",{class:!0,"data-svelte-h":!0}
112),a(P)!=="svelte-17co6hi"&&(P.textContent=Yr),Ve=d(f),Ze=n(f,"DIV",{class:!0});var Ht=Kr(Ze);r=n(Ht,"DIV",{class:!0});var t=Kr(r);O=n(t,"P",{class:!0,"data-svelte-h":!0}),a(O)!=="svelte-1tzhsyd"&&(O.textContent=Jr),Ye=d(t),I=n(t,"UL",{class:!0,"data-svelte-h":!0}),a(I)!=="svelte-1bbprgx"&&(I.innerHTML=Qr),Je=d(t),z=n(t,"IMG",{src:!0,alt:!0,class:!0}),Qe=d(t),X=n(t,"P",{class:!0,"data-svelte-h":!0}),a(X)!=="svelte-ups43y"&&(X.innerHTML=rt),er=d(t),M=n(t,"H2",{class:!0,"data-svelte-h":!0}),a(M)!=="svelte-gq0qao"&&(M.textContent=tt),rr=d(t),L=n(t,"P",{class:!0,"data-svelte-h":!0}),a(L)!=="svelte-ufsxfj"&&(L.textContent=ot),tr=d(t),S=n(t,"UL",{class:!0,"data-svelte-h":!0}),a(S)!=="svelte-gz4uy7"&&(S.innerHTML=ut),or=d(t),N=n(t,"H2",{class:!0,"data-svelte-h":!0}),a(N)!=="svelte-1a1sn6k"&&(N.textContent=nt),ur=d(t),Z=n(t,"P",{class:!0,"data-svelte-h":!0}),a(Z)!=="svelte-zn5q6m"&&(Z.textContent=it),nr=d(t),$=n(t,"P",{class:!0,"data-svelte-h":!0}),a($)!=="svelte-mjb7h1"&&($.innerHTML=dt),ir=d(t),H=n(t,"P",{class:!0,"data-svelte-h":!0}),a(H)!=="svelte-k07vd3"&&(H.innerHTML=at),dr=d(t),U=n(t,"P",{class:!0,"data-svelte-h":!0}),a(U)!=="svelte-ef4i5b"&&(U.textContent=st),ar=d(t),q=n(t,"H2",{class:!0,"data-svelte-h":!0}),a(q)!=="svelte-9v0374"&&(q.textContent=lt),sr=d(t),R=n(t,"H3",{class:!0,"data-svelte-h":!0}),a(R)!=="svelte-1pk9t0f"&&(R.textContent=wt),lr=d(t),G=n(t,"P",{class:!0,"data-svelte-h":!0}),a(G)!=="svelte-qllqc4"&&(G.textContent=yt),wr=d(t),K=n(t,"P",{class:!0,"data-svelte-h":!0}),a(K)!=="svelte-123ycgi"&&(K.textContent=kt),yr=d(t),p(W.$$.fragment,t),kr=d(t),j=n(t,"P",{class:!0,"data-svelte-h":!0}),a(j)!=="svelte-1l4ht59"&&(j.innerHTML=ct),cr=d(t),V=n(t,"P",{class:!0,"data-svelte-h":!0}),a(V)!=="svelte-1p3e2oa"&&(V.innerHTML=Ft),Fr=d(t),p(Y.$$.fragment,t),pr=d(t),J=n(t,"P",{class:!0,"data-svelte-h":!0}),a(J)!=="svelte-1pv2wqs"&&(J.textContent=pt),br=d(t),Q=n(t,"IMG",{src:!0,alt:!0,class:!0}),mr=d(t),ee=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ee)!=="svelte-qu9q3h"&&(ee.innerHTML=mt),gr=d(t),re=n(t,"H3",{class:!0,"data-svelte-h":!0}),a(re)!=="svelte-hwb9te"&&(re.textContent=gt),hr=d(t),te=n(t,"P",{class:!0,"data-svelte-h":!0}),a(te)!=="svelte-a2l5mn"&&(te.innerHTML=ht),fr=d(t),p(oe.$$.fragment,t),Dr=d(t),ue=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ue)!=="svelte-ieuk8b"&&(ue.textContent=ft),Er=d(t),ne=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ne)!=="svelte-19s3ao5"&&(ne.textContent=Dt),Br=d(t),ie=n(t,"IMG",{src:!0,alt:!0,class:!0}),vr=d(t),de=n(t,"H3",{class:!0,"data-svelte-h":!0}),a(de)!=="svelte-1xnmffn"&&(de.textContent=Bt),Ar=d(t),ae=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ae)!=="svelte-q9qv00"&&(ae.innerHTML=vt),xr=d(t),se=n(t,"P",{class:!0,"data-svelte-h":!0}),a(se)!=="svelte-1lw1nze"&&(se.textContent=At),Cr=d(t),le=n(t,"P",{class:!0,"data-svelte-h":!0}),a(le)!=="svelte-5gjujd"&&(le.innerHTML=xt),_r=d(t),p(we.$$.fragment,t),Tr=d(t),ye=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ye)!=="svelte-1ww0o12"&&(ye.textContent=Ct),Pr=d(t),ke=n(t,"IMG",{src:!0,alt:!0,class:!0}),Or=d(t),ce=n(t,"H3",{class:!0,"data-svelte-h":!0}),a(ce)!=="svelte-8l2qew"&&(ce.textContent=Tt),Ir=d(t),Fe=n(t,"P",{class:!0,"data-svelte-h":!0}),a(Fe)!=="svelte-u4ml6p"&&(Fe.textContent=Pt),zr=d(t),pe=n(t,"P",{class:!0,"data-svelte-h":!0}),a(pe)!=="svelte-w4aqaz"&&(pe.textContent=Ot),Xr=d(t),be=n(t,"P",{class:!0,"data-svelte-h":!0}),a(be)!=="svelte-1tu6ov8"&&(be.textContent=It),Mr=d(t),p(me.$$.fragment,t),Lr=d(t),ge=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ge)!=="svelte-15eij9n"&&(ge.textContent=zt),Sr=d(t),p(he.$$.fragment,t),Nr=d(t),fe=n(t,"P",{class:!0,"data-svelte-h":!0}),a(fe)!=="svelte-1iry04g"&&(fe.textContent=Xt),Zr=d(t),p(De.$$.fragment,t),$r=d(t),Ee=n(t,"P",{class:!0,"data-svelte-h":!0}),a(Ee)!=="svelte-nhq867"&&(Ee.textContent=Mt),Hr=d(t),Be=n(t,"IMG",{src:!0,alt:!0,class:!0}),Ur=d(t),ve=n(t,"P",{class:!0,"data-svelte-h":!0}),a(ve)!=="svelte-1syj5ri"&&(ve.innerHTML=St),qr=d(t),Ae=n(t,"H3",{class:!0,"data-svelte-h":!0}),a(Ae)!=="svelte-131942v"&&(Ae.textContent=Nt),Rr=d(t),xe=n(t,"P",{class:!0,"data-svelte-h":!0}),a(xe)!=="svelte-woxhps"&&(xe.textContent=Zt),Gr=d(t),Ce=n(t,"P",{class:!0,"data-svelte-h":!0}
112),a(Ce)!=="svelte-143bkx1"&&(Ce.textContent=$t),t.forEach(w),Ht.forEach(w),f.forEach(w),Re=d(s),p(_e.$$.fragment,s),this.h()},h(){document.title="Run PyTorch models on the edge",o(c,"name","description"),o(c,"content","Everything you need to know about running PyTorch models on the edge with ONNX Runtime."),o(D,"name","title"),o(D,"content","Run PyTorch models on the edge"),o(E,"name","keywords"),o(E,"content","PyTorch, ONNX Runtime, edge computing, machine learning, deep learning, model optimization, model deployment, AI on edge"),o(B,"name","author"),o(B,"content","Natalie Kershaw, Prasanth Pulavarthi"),o(v,"name","date"),o(v,"content","2023-10-12"),o(A,"name","image"),o(A,"content",He),o(x,"name","robots"),o(x,"content","index, follow"),o(Pe,"name","og:title"),o(Pe,"content","Run PyTorch models on the edge"),o(Oe,"name","og:description"),o(Oe,"content","Learn how to run PyTorch models on edge devices using ONNX Runtime. Explore considerations, tools, and examples for deploying PyTorch models on Windows, in the browser, on mobile, and for on-device training."),o(Ie,"name","og:type"),o(Ie,"content","article"),o(ze,"name","og:url"),o(ze,"content","https://onnxruntime.ai/blogs/pytorch-on-the-edge"),o(Xe,"name","og:image"),o(Xe,"content",He),o(Me,"name","twitter:title"),o(Me,"content","Run PyTorch models on the edge"),o(Le,"name","twitter:description"),o(Le,"content","Learn how to run PyTorch models on edge devices using ONNX Runtime. Explore considerations, tools, and examples for deploying PyTorch models on Windows, in the browser, on mobile, and for on-device training."),o(Se,"name","twitter:card"),o(Se,"content",He),o(Ne,"name","twitter:image"),o(Ne,"content",He),o(_,"class","text-5xl pb-2"),o(T,"class","text-neutral"),o(P,"class","text-neutral"),o(O,"class","mb-4"),o(I,"class","list-disc ml-6 mb-4"),$e(z.src,et=He)||o(z,"src",et),o(z,"alt","Diagram showing the PyTorch logo representing a PyTorch model, fanning out to icons for web, mobile and browser devices running ONNX Runtime"),o(z,"class","mb-4 w-3/4 mx-auto"),o(X,"class","mb-4"),o(M,"class","dark:text-blue-300 text-blue-800 underline text-3xl mb-4"),o(L,"class","mb-4"),o(S,"class","list-disc ml-6 mb-4"),o(N,"class","dark:text-blue-300 text-blue-800 underline text-3xl mb-4"),o(Z,"class","mb-4"),o($,"class","mb-4"),o(H,"class","mb-4"),o(U,"class","mb-4"),o(q,"class","dark:text-blue-300 text-blue-800 underline text-3xl mb-4"),o(R,"class","text-2xl mb-2"),o(G,"class","mb-4"),o(K,"class","mb-4"),o(j,"class","mb-4"),o(V,"class","mb-4"),o(J,"class","mb-4"),$e(Q.src,bt=oo)||o(Q,"src",bt),o(Q,"alt","Two golden retriever puppies playing in the grass"),o(Q,"class","mb-4"),o(ee,"class","mb-4"),o(re,"class","text-2xl mb-2"),o(te,"class","mb-4"),o(ue,"class","mb-4"),o(ne,"class","mb-4"),$e(ie.src,Et=io)||o(ie,"src",Et),o(ie,"alt","Text generation in the browser using transformers.js. The prompt is Two golden retriever puppies are playing in the grass, and the response is playing in the grasslands. They are known for their playful nature and they have a playful face."),o(ie,"class","mb-4 w-3/4"),o(de,"class","text-2xl mb-2"),o(ae,"class","mb-4"),o(se,"class","mb-4"),o(le,"class","mb-4"),o(ye,"class","mb-4"),$e(ke.src,_t=uo)||o(ke,"src",_t),o(ke,"alt","Screenshot of an Android app to perform speech recognition using ONNX Runtime, running a PyTorch Whisper model"),o(ke,"class","mb-4"),o(ce,"class","text-2xl mb-2"),o(Fe,"class","mb-4"),o(pe,"class","mb-4"),o(be,"class","mb-4"),o(ge,"class","mb-4"),o(fe,"class","mb-4"),o(Ee,"class","mb-4"),$e(Be.src,Lt=no)||o(Be,"src",Lt),o(Be,"alt","A screenshot of an iPhone app to perform speaker verification by recording a number of speech samples of the speaker"),o(Be,"class","mb-4"),o(ve,"class","mb-4"),o(Ae,"class","text-2xl mb-2"),o(xe,"class","mb-4"),o(Ce,"class","mb-4"),o(r,"class","col-span-12 md:col-span-9"),o(Ze,"class","py-4"),o(y,"class","container mx-auto px-4 md:px-8 lg:px-48 pt-8")},m(s,l){e(document.head,c),e(document.head,D),e(document.head,E),e(document.head,B),e(document.head,v),e(document.head,A),e(document.head,x),e(document.head,Pe),e(document.head,Oe),e(document.head,Ie),e(document.head,ze),e(document.head,Xe),e(document.head,Me),e(document.head,Le),e(document.head,Se),e(document.head,Ne),Ke(s,Ue,l),b(C,s,l),Ke(s,qe,l),Ke(s,y,l),e(y,_),e(y,We),e(y,T),e(y,je),e(y,P),e(y,Ve),e(y,Ze),e(Ze,r),e(r,O),e(r,Ye),e(r,I),e(r,Je),e(r,z),e(r,Qe),e(r,X),e(r,er),e(r,M),e(r,rr),e(r,L),e(r,tr),e(r,S),e(r,or),e(r,N),e(r,ur),e(r,Z),e(r,nr),e(r,$),e(r,ir),e(r,H),e(r,dr),e(r,U),e(r,ar),e(r,q),e(r,sr),e(r,R),e(r,lr),e(r,G),e(r,wr),e(r,K),e(r,yr),b(W,r,null),e(r,kr),e(r,j),e(r,cr),e(r,V),e(r,Fr),b(Y,r,null),e(r,pr),e(r,J),e(r,br),e(r,Q),e(r,mr),e(r,ee),e(r,gr),e(r,re),e(r,hr),e(r,te),e(r,fr),b(oe,r,null),e(r,Dr),e(r,ue),e(r,Er),e(r,ne),e(r,Br),e(r,ie),e(r,vr),e(r,de),e(r,Ar),e(r,ae),e(r,xr),e(r,se),e(r,Cr),e(r,le),e(r,_r),b(we,r,null),e(r,Tr),e(r,ye),e(r,Pr),e(r,ke),e(r,Or),e(r,ce),e(r,Ir),e(r,Fe),e(r,zr),e(r,pe),e(r,Xr),e(r,be),e(r,Mr),b(me,r,null),e(r,Lr),e(r,ge),e(r,Sr),b(he,r,null),e(r,Nr),e(r,fe),e(r,Zr),b(De,r,null),e(r,$r),e(r,Ee),e(r,Hr),e(r,Be),e(r,Ur),e(r,ve),e(r,qr),e(r,Ae),e(r,Rr),e(r,xe),e(r,Gr),e(r,Ce),Ke(s,Re,l),b(_e,s,l),Ge=!0},p:Rt,i(s){Ge||(m(C.$$.fragment,s),m(W.$$.fragment,s),m(Y.$$.fragment,s),m(oe.$$.fragment,s),m(we.$$.fragment,s),m(me.$$.fragment,s),m(he.$$.fragment,s),m(De.$$.fragment,s),m(_e.$$.fragment,s),Ge=!0)},o(s){g(C.$$.fragment,s),g(W.$$.fragment,s),g(Y.$$.fragment,s),g(oe.$$.fragment,s),g(we.$$.fragment,s),g(me.$$.fragment,s),g(he.$$.fragment,s),g(De.$$.fragment,s),g(_e.$$.fragment,s),Ge=!1}
112,d(s){s&&(w(Ue),w(qe),w(y),w(Re)),w(c),w(D),w(E),w(B),w(v),w(A),w(x),w(Pe),w(Oe),w(Ie),w(ze),w(Xe),w(Me),w(Le),w(Se),w(Ne),h(C,s),h(W),h(Y),h(oe),h(we),h(me),h(he),h(De),h(_e,s)}}}function so(k){return[`from optimum.onnxruntime import ORTStableDiffusionPipeline 113pipeline = ORTStableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", export=True) 114pipeline.save_pretrained("./onnx-stable-diffusion")`,`static void Main(string[] args) 115{ 116 var prompt = "Two golden retriever puppies playing in the grass."; 117 var config = new StableDiffusionConfig 118 { 119 NumInferenceSteps = 50, 120 GuidanceScale = 7.5, 121 ExecutionProviderTarget = StableDiffusionConfig.ExecutionProvider.Cpu, 122 DeviceId = 0, 123 TokenizerOnnxPath = ".\\models\\tokenizer\\model.onnx", 124 TextEncoderOnnxPath = ".\\models\\text_encoder\\model.onnx", 125 UnetOnnxPath = ".\\models\\unet\\model.onnx", 126 VaeDecoderOnnxPath = ".\\models\\vae_decoder\\model.onnx", 127 SafetyModelPath = ".\\models\\safety_checker\\model.onnx", 128 }; 129 130 var image = UNet.Inference(prompt, config); 131 132 if (image == null) 133 { 134 Console.WriteLine("Unable to create image, please try again."); 135 } 136}`,`<html> 137 <body> 138 <h1>Enter starting text â¦</h1> 139 140 <form id="form"> 141 <input type="text" id="inputText"> 142 <button type="submit" id="submitButton">Submit</button> 143 </form> 144 145 <div id="output"></div> 146 147 <script type="module"> 148 149 import { pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/[email protected]'; 150 151 let inputText = document.getElementById('inputText'); 152 let outputDiv = document.getElementById('output'); 153 let submitButton = document.getElementById('submitButton'); 154 155 submitButton.addEventListener('click', async (e) => { 156 157 e.preventDefault(); 158 159 let generator = await pipeline('text-generation', 'Xenova/LaMini-Neo-125M'); 160 161 let result = await generator(inputText.value, 162 { max_new_tokens: 200, 163 temperature: 2, 164 repetition_penalty: 1.5, 165 no_repeat_ngram_size: 2, 166 num_beams: 2, 167 num_return_sequences: 1, 168 }); 169 170 outputDiv.innerHTML = result[0].generated_text; 171 }); 172 <\/script> 173 </body> 174</html>`,`init { 175 val env = OrtEnvironment.getEnvironment() 176 val sessionOptions = OrtSession.SessionOptions() 177 sessionOptions.registerCustomOpLibrary(OrtxPackage.getLibraryPath()) 178 179 session = env.createSession(modelBytes, sessionOptions) 180 181 val nMels: Long = 80 182 val nFrames: Long = 3000 183 184 baseInputs = mapOf( 185 "min_length" to createIntTensor(env, intArrayOf(1), tensorShape(1)), 186 "max_length" to createIntTensor(env, intArrayOf(200), tensorShape(1)), 187 "num_beams" to createIntTensor(env, intArrayOf(1), tensorShape(1)), 188 "num_return_sequences" to createIntTensor(env, intArrayOf(1), tensorShape(1)), 189 "length_penalty" to createFloatTensor(env, floatArrayOf(1.0f), tensorShape(1)), 190 "repetition_penalty" to createFloatTensor(env, floatArrayOf(1.0f), tensorShape(1)), 191 ) 192} 193 194data class Result(val text: String, val inferenceTimeInMs: Long) 195 196fun run(audioTensor: OnnxTensor): Result { 197 val inputs = mutableMapOf() 198 baseInputs.toMap(inputs) 199 inputs["audio_pcm"] = audioTensor 200 val startTimeInMs = SystemClock.elapsedRealtime() 201 val outputs = session.run(inputs) 202 val elapsedTimeInMs = SystemClock.elapsedRealtime() - startTimeInMs 203 val recognizedText = outputs.use { 204 @Suppress("UNCHECKED_CAST") 205 (outputs[0].value as Array>)[0][0] 206 } 207 return Result(recognizedText, elapsedTimeInMs) 208}`,`from transformers import Wav2Vec2ForSequenceClassification, AutoConfig 209 import torch 210 211 config = AutoConfig.from_pretrained("superb/wav2vec2-base-superb-sid") 212 model = Wav2Vec2ForSequenceClassification.from_pretrained("superb/wav2vec2-base-superb-sid") 213 214 model.classifier = torch.nn.Linear(256, 2)`,`artifacts.generate_artifacts( 215 onnx_model, 216 requires_grad=requires_grad, 217 frozen_params=frozen_params, 218 loss=CustomCELoss(),
219 optimizer=artifacts.OptimType.AdamW, 220 artifact_directory="MyVoice/artifacts", 221)`,`func trainStep(inputData: [Data], labels: [Int64]) throws { 222 223 let inputs = [try getORTValue(dataList: inputData), try getORTValue(labels: labels)] 224 try trainingSession.trainStep(withInputValues: inputs) 225 226 try trainingSession.optimizerStep() 227 228 try trainingSession.lazyResetGrad() 229}`]}class po extends Gt{constructor(c){super(),Kt(this,c,so,ao,Ut,{})}}export{po as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.