pxt-core 7.5.26 → 7.5.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- var pxt;!function(e){!function(e){let t;!function(e){e[e.NonLocal=0]="NonLocal",e[e.Global=1]="Global"}(t=e.VarModifier||(e.VarModifier={})),e.isIndex=function(e){return"Index"===e.kind},e.isSubscript=function(e){return"Subscript"===e.kind}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){var n=e.blocks;let r,i,s,o,a,l,u,c,p,f,m=0,d=0,y=0,k="???";function x(e){return null==e}function T(e){return null!=e}function g(t){return e.tickEvent("python.todo.statement",{kind:t.kind}),n.mkStmt(n.mkText("TODO: "+t.kind))}function h(t){return e.tickEvent("python.todo.expression",{kind:t.kind}),n.mkText(" {TODO: "+t.kind+"} ")}const S=L({primType:"string"}),v=L({primType:"number"}),b=L({primType:"boolean"}),E=L({primType:"void"}),N=L({primType:"any"});let U;const C={str:S,string:S,number:v,bool:b,void:E,any:N};function w(e){switch(e){case ts.SyntaxKind.StringKeyword:return S;case ts.SyntaxKind.NumberKeyword:return v;case ts.SyntaxKind.BooleanKeyword:return b;case ts.SyntaxKind.VoidKeyword:return E;case ts.SyntaxKind.AnyKeyword:return N;default:return U}}function A(t){let n=e.U.flatClone(t);return delete n.pyAST,delete n.pyInstanceType,delete n.pyRetType,delete n.pySymbolType,delete n.moduleTypeMarker,delete n.declared,n.parameters&&(n.parameters=n.parameters.map((t=>(delete(t=e.U.flatClone(t)).pyType,t)))),n}function P(t){if("("==t[0]&&e.U.endsWith(t,")"))return P(t.slice(1,-1));const n=t.indexOf(" => ");if(n>0){const e=t.slice(n+4);if(-1==e.indexOf(")[]")){const r=P(e),i=t.slice(1,n-1);return R(r,(i?i.split(/, /):[]).map((e=>P(e.replace(/\w+\??: /,"")))))}}if(e.U.endsWith(t,"[]"))return F(P(t.slice(0,-2)));if("_py.Array"===t)return F(N);const r=e.U.lookup(C,t);if(r)return r;if(!!t&&!isNaN(t))return v;if("T"==t||"U"==t)return L({primType:"'"+t});if(t.indexOf("|")>=0){return L({primType:"@union",typeArgs:t.split("|").map((e=>e.trim())).map(P)})}let i=K(t+"@type")||K(t);return i?7==i.kind?v:8==i.kind||9==i.kind?i.pyInstanceType||L({classType:i}):6==i.kind?v:(H(null,9502,e.U.lf("'{0}' is not a type near '{1}'",t,k||"???")),L({primType:t})):(H(null,9501,e.U.lf("unknown type '{0}' near '{1}'",t,k||"???")),L({primType:t}))}function I(t){if(!t.pySymbolType){if(k=t.pyQName,t.parameters){pxtc.service.isTaggedTemplate(t)&&(t.parameters=[{name:"literal",description:"",type:"string",options:{}}]);for(let e of t.parameters)e.pyType||(e.pyType=P(e.type))}const n=t.pyRetType;if(xe(t)?t.pyRetType=L({moduleType:t}):t.retType?t.pyRetType=P(t.retType):t.pyRetType||(e.U.oops("no type for: "+t.pyQName),t.pyRetType=L({})),n&&ee(t.pyAST,n,t.pyRetType),3==t.kind||1==t.kind){let n=t.parameters.map((e=>e.pyType));if(n.some(x))return H(null,9526,e.U.lf("function symbol is missing parameter types near '{1}'",k||"???")),L({});t.pySymbolType=R(t.pyRetType,n.filter(T))}else t.pySymbolType=t.pyRetType;8!=t.kind&&9!=t.kind||(t.pyInstanceType=L({classType:t})),k=void 0}return t.pySymbolType}function K(t){return e.U.lookup(i,t)||e.U.lookup(r,t)}function _(e){if(!e)return;let t=K(e);return t&&I(t),t}function L(t={}){let n=e.U.flatClone(t);return n.tid=++d,n}function F(e){return L({primType:"@array",typeArgs:[e]})}function R(e,t){return L({primType:"@fn"+t.length,typeArgs:[e].concat(t)})}function O(t){return!!e.U.startsWith(t.primType||"","@fn")}function D(t){return!!t.primType&&!e.U.startsWith(t.primType,"@")}function $(t){return!!e.U.startsWith(t.primType||"","@union")}function q(){return s.currFun||s.currClass||s.currModule}function M(){let e=q();for(;e&&e.parent;)e=e.parent;return e}function G(){return"main"==s.currModule.name&&!s.currFun&&!s.currClass}function B(t,n,r){const i=_(n);return i||H(t,9503,e.U.lf("No module named '{0}'",n)),i}function z(e,n,r,i){i||(i=q());let s=i.vars[e],o=null==s?void 0:s.symbol;if(!o){let n=W(i);n&&(n+=".");let a=n+e;o=!ae(i)||r!==t.VarModifier.Global&&r!==t.VarModifier.NonLocal?ae(i)?se(4,e):oe(4,a):oe(4,e),s={symbol:o,modifier:r},i.vars[e]=s}for(let e of Object.keys(n))o[e]=n[e];return s}function Q(e){return e.unifyWith?(e.unifyWith=Q(e.unifyWith),e.unifyWith):e}function W(e){let t=e,n="";t.parent&&"FunctionDef"!==t.parent.kind&&"AsyncFunctionDef"!==t.parent.kind&&(n=W(t.parent),n?n+=".":n="");let r=e;return"Module"==e.kind&&"main"==r.name?"":r.name?n+r.name:n+"?"+e.kind}function j(t){let n=e.U.lookup(Ue,t);if(n)return n;for(let n of e.U.values(s.currModule.vars)){let r=n.symbol;if(r.isImport){if(r.expandsTo==t)return r.pyName||H(null,9553,lf("missing pyName")),r.pyName;if(r.isImport&&e.U.startsWith(t,(r.expandsTo||"")+"."))return r.pyName+t.slice(r.expandsTo.length)}}return t}function V(e){return(e=Q(e)).primType?e.typeArgs&&"@array"==e.primType?V(e.typeArgs[0])+"[]":O(e)&&e.typeArgs?"("+e.typeArgs.slice(1).map((e=>"_: "+V(e))).join(", ")+") => "+V(e.typeArgs[0]):$(e)&&e.typeArgs?e.typeArgs.map(V).join(" | "):e.primType+"":e.classType&&e.classType.pyQName?j(e.classType.pyQName)+"":e.moduleType&&e.moduleType.pyQName?j(e.moduleType.pyQName)+"":"any"}function H(e,t,n){l.push(function(e,t,n,r){return e||(e=o),e&&s&&s.currModule?{fileName:a,start:e.startPos,length:e.endPos-e.startPos,line:void 0,column:void 0,code:n,category:t,messageText:r}:{fileName:a,start:0,length:0,line:void 0,column:void 0,code:n,category:t,messageText:r}}(e,pxtc.DiagnosticCategory.Error,t,n))}function J(e){return e.primType?e.primType:e.classType?e.classType:e.moduleType?(e.moduleType.moduleTypeMarker||(e.moduleType.moduleTypeMarker={}),e.moduleType.moduleTypeMarker):null}function X(e){return!J(Q(e))}function Y(t,n,r){var i;(n=Q(n)).classType!=r&&(X(n)?n.classType=r:ee(t,n,(I(i=r),i.pyInstanceType||H(null,9527,e.U.lf("Instance type symbol '{0}' is missing pyInstanceType",i)),i.pyInstanceType)))}function Z(e,t){ee(e,ke(e),t)}function ee(t,n,r){if(n===r)return;if((n=Q(n))===(r=Q(r))||ie(n)||ie(r))return;if("any"===n.primType)return void(n.unifyWith=r);const i=J(n),s=J(r);if(i&&s)if(i===s){if(n.unifyWith=r,n.typeArgs&&r.typeArgs)for(let e=0;e<Math.min(n.typeArgs.length,r.typeArgs.length);++e)ee(t,n.typeArgs[e],r.typeArgs[e]);n.unifyWith=r}else!function(t,n,r){H(t,9500,e.U.lf("types not compatible: {0} and {1}",V(n),V(r)))}(t,n,r);else i&&!s?ee(t,r,n):(y++,n.unifyWith=r)}function te(e,t){const n=Q(e),r=Q(t);if(n===r)return!0;const i=J(n),s=J(r);if(i===s)return!0;if(i&&s){if(re(i)&&re(s)&&i.extendsTypes&&i.extendsTypes.length&&i.extendsTypes.some((e=>e===s.qName)))return!0;if($(r)){for(let e of r.typeArgs||[])if(te(n,e))return!0;return!1}}return!1}function ne(e,t){const n=Q(ke(e)),r=Q(t);te(n,r)||(O(n)||O(r)||D(n)||D(r))&&ee(e,n,r)}function re(e){var t;return!!(null===(t=e)||void 0===t?void 0:t.name)}function ie(e){var t;return!!(null===(t=null==e?void 0:e.primType)||void 0===t?void 0:t.startsWith("'"))}function se(e,t){let n=/(.*)\.(.*)/.exec(t),r=n?n[2]:t;return{kind:e,name:r,pyName:r,qName:t,pyQName:t,namespace:n?n[1]:"",attributes:{},pyRetType:L()}}function oe(t,n){let r=i[n];return r?(r.kind=t,r):(r=se(t,n),r.pyQName||H(null,9527,e.U.lf("Symbol '{0}' is missing pyQName",n)),i[r.pyQName]=r,r)}function ae(e){let t=e;for(;t;){if("FunctionDef"==t.kind)return!0;t=t.parent}return!1}function le(t,n,r){if(!n.symInfo){let i=W(n);e.U.endsWith(i,".__init__")&&(i=i.slice(0,-9)+".__constructor"),ae(r=r||q())?n.symInfo=se(t,i):n.symInfo=oe(t,i);const s=n.symInfo;s.pyAST=n,s.pyName||H(null,9528,e.U.lf("Symbol '{0}' is missing pyName",s.qName||s.name)),r.vars[s.pyName]={symbol:s}}return n.symInfo}function ue(t){let n=t.symInfo.qName;return e.U.values(i).filter((e=>e.namespace==n&&2==e.kind))}function ce(t,n,r=!1,i=!1){let s=t.pyQName+"."+n,o=_(s);if(o)return o;if(!i)for(let r of t.extendsTypes||[]){let i=_(r);if(i){i==t&&e.U.userError("field lookup loop on: "+i.qName+" / "+n);let r=ce(i,n,!0);if(r)return r}}if(!r&&t.pyAST&&"ClassDef"==t.pyAST.kind){let e=oe(2,s);return e.isInstance=!0,e}return null}function pe(t,n,r=!1){const i=ke(t),o=function(e){let t=Q(e);return[t.classType,...fe(t.primType),t.moduleType].filter(T)}(i);for(let l of o){let o=ce(l,n,r);if(o){return!!i.moduleType?o.isInstance&&H(null,9505,e.U.lf("the field '{0}' of '{1}' is not static",n,l.pyQName)):(o.isInstance||H(null,9504,e.U.lf("the field '{0}' of '{1}' is static",n,l.pyQName)),qe(a=t,"super")&&0==a.args.length?o.isProtected=!0:ze(t)&&(s.currClass||H(null,9529,e.U.lf("no class context found for {0}",o.pyQName)),o.namespace!=s.currClass.symInfo.qName&&(o.isProtected=!0))),o}}var a;return null}function fe(e){let t=[];return"@array"==e?t=[K("_py.Array"),K("Array")]:"string"==e&&(t=[K("_py.String"),K("String")]),t.filter((e=>!!e))}function me(t){let n=q(),r=e.U.lookup(n.vars,t);if(r)return r;for(;n;){let r=e.U.lookup(n.vars,t);if(r)return r;do{n=n.parent}while(n&&"ClassDef"==n.kind)}return null}function de(e){if(!e)return null;const t=e.indexOf(".");if(t>0){const n=me(e.slice(0,t)),r=null==n?void 0:n.symbol;r&&r.pyQName!=r.pyName&&(e=r.pyQName+e.slice(t))}else{const t=me(e);if(t)return t}let n=_(e);return n?{symbol:n}:void 0}function ye(e){var t;return null===(t=de(e))||void 0===t?void 0:t.symbol}function ke(e){return e.tsType?Q(e.tsType):(e.tsType=L(),e.tsType)}function xe(e){if(!e)return!1;switch(e.kind){case 5:case 9:case 8:case 6:return!0;default:return!1}}function Te(t){const n=e.U.flatClone(s);let r;try{r=t()}finally{s=n}return r}function ge(e,t){return 0==t.length?n.mkText(""):n.mkGroup([n.mkText("/* TODO: "+e+" "),n.mkGroup(t),n.mkText(" */"),n.mkNewLine()])}function he(e){let t=et(e.value);return e.arg?n.mkInfix(n.mkText(e.arg),"=",t):n.mkGroup([n.mkText("**"),t])}function Se(n){if(!n)return L();let r=Oe(n);if(r){let t=K(r+"@type")||K(r);if(t){if(I(t),6==t.kind)return v;if(t.pyInstanceType)return t.pyInstanceType}else if(C[r])return C[r];H(n,9506,e.U.lf("cannot find type '{0}'",r))}else if(t.isSubscript(n)){if("List"===Oe(n.value)&&t.isIndex(n.slice)){return F(Se(n.slice.value))}}return H(n,9507,e.U.lf("invalid type syntax")),L({})}const ve={Sub:1,Div:1,Pow:1,LShift:1,RShift:1,BitOr:1,BitXor:1,BitAnd:1,FloorDiv:1,Mult:1},be={Eq:1,NotEq:1,Lt:1,LtE:1,Gt:1,GtE:1},Ee={Add:"+",Sub:"-",Mult:"*",MatMult:"Math.matrixMult",Div:"/",Mod:"%",Pow:"**",LShift:"<<",RShift:">>",BitOr:"|",BitXor:"^",BitAnd:"&",FloorDiv:"Math.idiv",And:"&&",Or:"||",Eq:"==",NotEq:"!=",Lt:"<",LtE:"<=",Gt:">",GtE:">=",Is:"===",IsNot:"!==",In:"py.In",NotIn:"py.NotIn"},Ne={Invert:"~",Not:"!",UAdd:"P+",USub:"P-"},Ue={"adafruit_bus_device.i2c_device.I2CDevice":"pins.I2CDevice"};function Ce(e){s.blockDepth++;const t=n.mkBlock(e.map(tt));return s.blockDepth--,t}function we(e){e.vars||(e.vars={},e.parent=q(),e.blockDepth=s.blockDepth)}function Ae(e,t=!1){return"any"===V(e)?t?n.mkText(": any"):n.mkText(""):n.mkText(": "+V(e))}function Pe(e,t){try{return Te(t)}catch(t){return console.log(t),n.mkStmt(ge(`conversion failed for ${e.name||e.kind}`,[]))}}function Ie(e){if(!e||!e.pyAST)return!1;if("FunctionDef"!=e.pyAST.kind)return!1;const t=e.pyAST;return!(!t.callers||1!=t.callers.length)&&!t.callers[0].inCalledPosition}function Ke(t,r=!1){return Pe(t,(()=>{const i=!!s.currClass&&!s.currFun,o=G(),a=!!s.currFun;we(t);const l=ye(W(t)),u=le(i?1:3,t);if(!r&&(l&&l.declared===m&&H(t,9520,lf("Duplicate function declaration")),u.declared=m,Ie(u)))return n.mkText("");i&&(u.isInstance=!0),s.currFun=t;let c="",p=t.name;let f=[ge("decorators",t.decorator_list.filter((e=>"property"==Oe(e)?(c="get",!1):"Attribute"!=e.kind||"setter"!=e.attr||"Name"!=e.value.kind||(p=e.value.id,c="set",!1))).map(et))];if(t.body.length>=1&&"Raise"==t.body[0].kind&&(t.alwaysThrows=!0),i)if(s.currClass||H(t,9531,lf("method '{0}' is missing current class context",u.pyQName)),u.pyRetType||H(t,9532,lf("method '{0}' is missing a return type",u.pyQName)),"__init__"==t.name)f.push(n.mkText("constructor")),Y(t,u.pyRetType,s.currClass.symInfo);else{if("__get__"==p||"__set__"==p){let e=t.vars.value,n=null==e?void 0:e.symbol;if("__set__"==p&&n){let e=ce(s.currClass.symInfo,"__get__");e&&e.pyAST&&"FunctionDef"==e.pyAST.kind&&ee(t,n.pyRetType,e.pyRetType)}p=p.replace(/_/g,"")}c||(c="_"==p[0]?u.isProtected?"protected":"private":"public"),f.push(n.mkText(c+" "),$e(p))}else e.U.assert(!c),"_"==t.name[0]||o||r||a?f.push(n.mkText("function "),$e(p)):f.push(n.mkText("export function "),$e(p));let d=t.returns?Se(t.returns):u.pyRetType;f.push(function(t,r){const i=t.args;i.kwonlyargs.length&&H(t,9517,e.U.lf("keyword-only arguments not supported yet"));let s=i.args.slice();if(r?("self"!=s[0].arg&&H(t,9518,e.U.lf("first argument of method has to be called 'self'")),s.shift()):s.some((e=>"self"==e.arg))&&H(t,9519,e.U.lf("non-methods cannot have an argument called 'self'")),!t.symInfo.parameters){let r=i.defaults.length-s.length;t.symInfo.parameters=s.map((s=>{s.annotation||H(t,9519,e.U.lf("Arg '{0}' missing annotation",s.arg));let o=Se(s.annotation),a="";return r>=0&&(a=n.flattenNode([et(i.defaults[r])]).output,ee(s,o,ke(i.defaults[r]))),r++,{name:s.arg,description:"",type:"",initializer:a,default:a,pyType:o}}))}let o=t.symInfo.parameters.map((r=>{let i=z(r.name,{isParam:!0}),s=null==i?void 0:i.symbol;r.pyType||H(t,9530,e.U.lf("parameter '{0}' missing pyType",r.name)),ee(t,I(s),r.pyType);let o=[$e(r.name),Ae(r.pyType,!0)];return r.default&&o.push(n.mkText(" = "+r.default)),n.mkGroup(o)}));return i.vararg&&o.push(n.mkText("TODO *"+i.vararg.arg)),i.kwarg&&o.push(n.mkText("TODO **"+i.kwarg.arg)),n.H.mkParenthesizedExpression(n.mkCommaSep(o))}(t,i),d&&Q(d)!=E?Ae(d):n.mkText("")),I(u);let y=t.body.map(tt);if("__init__"==t.name){s.currClass||H(t,9533,lf("__init__ method '{0}' is missing current class context",u.pyQName));for(let e of ue(s.currClass)){let t=e.pyAST;t&&t.value&&y.push(n.mkStmt(n.mkText(`this.${Re(e.pyName)} = `),et(t.value)))}}const k=st(t);f.push(n.mkBlock(k.concat(y)));let x=n.mkGroup(f);return r?f[f.length-1].noFinalNewline=!0:x=n.mkStmt(x),x}))}const _e={FunctionDef:e=>Ke(e),ClassDef:t=>Pe(t,(()=>{we(t);const r=le(8,t);e.U.assert(!s.currClass);let i=G();s.currClass=t,t.isNamespace=t.decorator_list.some((e=>"Name"==e.kind&&"namespace"==e.id));let o=t.isNamespace?[n.mkText("namespace "),$e(t.name)]:[ge("keywords",t.keywords.map(he)),ge("decorators",t.decorator_list.map(et)),n.mkText(i?"class ":"export class "),$e(t.name)];if(!t.isNamespace&&t.bases.length>0)if("Enum"==Oe(t.bases[0]))t.isEnum=!0;else{o.push(n.mkText(" extends ")),o.push(n.mkCommaSep(t.bases.map(et)));let e=function(e){let t=ye(De(e));return t&&t.pyAST&&"ClassDef"==t.pyAST.kind?t.pyAST:null}(t.bases[0]);e&&(t.baseClass=e,r.extendsTypes=[e.symInfo.pyQName])}let a=Ce(t.body);o.push(a);let l=ue(t).filter((e=>2==e.kind&&e.isInstance)).map((e=>(e.pyName&&e.pyRetType||H(t,9535,lf("field definition missing py name or ret type",e.qName)),e))).map((e=>n.mkStmt(function(e){return e.pyName&&"_"==e.pyName[0]?e.isProtected?n.mkText("protected "):n.mkText("private "):n.mkText("")}(e),$e(e.pyName),Ae(e.pyRetType))));return a.children=l.concat(a.children),n.mkStmt(n.mkGroup(o))})),Return:e=>{if(e.value){let t=s.currFun;return t&&(t.symInfo.pyRetType||H(e,9536,lf("function '{0}' missing return type",t.symInfo.pyQName)),Z(e.value,t.symInfo.pyRetType)),n.mkStmt(n.mkText("return "),et(e.value))}return n.mkStmt(n.mkText("return"))},AugAssign:e=>{let t=Ee[e.op];return t.length>3?n.mkStmt(n.mkInfix(et(e.target),"=",n.H.mkCall(t,[et(e.target),et(e.value)]))):n.mkStmt(et(e.target),n.mkText(" "+t+"= "),et(e.value))},Assign:e=>Le(e),AnnAssign:e=>Le(e),For:t=>{if(e.U.assert(0==t.orelse.length),t.target.forTargetEndPos=t.endPos,qe(t.iter,"range")){let e=t.iter,r=et(t.target),i=$e(De(t.target));Z(t.target,v);let s=1==e.args.length?n.mkText("0"):et(e.args[0]),o=et(e.args[1==e.args.length?0:1]);return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,"<",o),n.mkText("; "),e.args.length>=3?n.mkInfix(i,"+=",et(e.args[2])):n.mkPostfix([i],"++"),n.mkText(")"),Ce(t.body))}if(m>1){const e=ke(t.target);Z(t.iter,ke(t.iter)==S?e:F(e))}return n.mkStmt(n.mkText("for ("),et(t.target),n.mkText(" of "),et(t.iter),n.mkText(")"),Ce(t.body))},While:t=>(e.U.assert(0==t.orelse.length),n.mkStmt(n.mkText("while ("),et(t.test),n.mkText(")"),Ce(t.body))),If:t=>{let r=t=>{let i=[n.mkText("if ("),et(t.test),n.mkText(")"),Ce(t.body)];return t.orelse.length&&(i[i.length-1].noFinalNewline=!0,1==t.orelse.length&&"If"==t.orelse[0].kind?(i.push(n.mkText(" else ")),e.U.pushRange(i,r(t.orelse[0]))):i.push(n.mkText(" else"),Ce(t.orelse))),i};return n.mkStmt(n.mkGroup(r(t)))},With:t=>{if(1==t.items.length&&function(e,t){let n=ke(e);return!(!n.classType||n.classType.pyQName!=t)||V(n)==t}(t.items[0].context_expr,"pins.I2CDevice")){let r=t.items[0],i=[],s=et(r.context_expr);if(r.optional_vars){let e=Oe(r.optional_vars);if(e){let o=z(e,{isLocal:!0}),a=null==o?void 0:o.symbol;e=Re(e),i.push(n.mkStmt(n.mkText("const "+e+" = "),s)),a.pyRetType||H(t,9537,lf("function '{0}' missing return type",a.pyQName)),Z(r.context_expr,a.pyRetType),s=n.mkText(e)}}return i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("begin()")))),e.U.pushRange(i,t.body.map(tt)),i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("end()")))),n.mkGroup(i)}let r=[],i=t.items.map(((e,t)=>{let i="with"+t;if(e.optional_vars){let t=De(e.optional_vars);z(t,{isLocal:!0}),i=Re(t)}return r.push(n.mkStmt(n.mkText(i+".end()"))),n.mkStmt(n.mkText("const "+i+" = "),n.mkInfix(et(e.context_expr),".",n.mkText("begin()")))}));return e.U.pushRange(i,t.body.map(tt)),e.U.pushRange(i,r),n.mkBlock(i)},Raise:e=>{let t,r=e.exc||e.cause;if(!r)return n.mkStmt(n.mkText("throw"));if(r&&"Call"==r.kind){let e=r;1==e.args.length&&(t=et(e.args[0]))}return t||(t=n.mkGroup([n.mkText("`"),et(r),n.mkText("`")])),n.mkStmt(n.H.mkCall("control.fail",[t]))},Assert:e=>(e.msg||H(e,9537,lf("assert missing message")),n.mkStmt(n.H.mkCall("control.assert",[e.test,e.msg].filter((e=>!!e)).map(et)))),Import:e=>{for(let t of e.names)t.asname&&z(t.asname,{expandsTo:t.name}),B(e,t.name);return n.mkText("")},ImportFrom:e=>{let t=[];for(let r of e.names)if("*"==r.name)e.module||H(e,9538,lf("import missing module name")),z(e.module,{isImportStar:!0});else{let i=e.module+"."+r.name,s=_(i),o=r.asname||r.name;xe(s)?(z(o,{isImport:s,expandsTo:i}),t.push(n.mkStmt(n.mkText(`import ${Re(o)} = ${i}`)))):z(o,{expandsTo:i})}return n.mkGroup(t)},ExprStmt:e=>{return"Str"==e.value.kind?((t=e.value.s).trim().split(/\n/).length<=1?t=t.trim():t+="\n",n.mkStmt(n.mkText("/** "+t+" */"))):n.mkStmt(et(e.value));var t},Pass:e=>n.mkStmt(n.mkText("")),Break:e=>n.mkStmt(n.mkText("break")),Continue:e=>n.mkStmt(n.mkText("continue")),Delete:t=>(H(t,9550,e.U.lf("delete statements are unsupported")),g(t)),Try:e=>{let t=[n.mkText("try"),Ce(e.body.concat(e.orelse))];for(let r of e.handlers)t.push(n.mkText("catch ("),r.name?$e(r.name):n.mkText("_")),r.type&&t.push(n.mkText("/* instanceof "),et(r.type),n.mkText(" */")),t.push(n.mkText(")"),Ce(r.body));return e.finalbody.length&&t.push(n.mkText("finally"),Ce(e.finalbody)),n.mkStmt(n.mkGroup(t))},AsyncFunctionDef:t=>(H(t,9551,e.U.lf("async function definitions are unsupported")),g(t)),AsyncFor:t=>(H(t,9552,e.U.lf("async for statements are unsupported")),g(t)),AsyncWith:t=>(H(t,9553,e.U.lf("async with statements are unsupported")),g(t)),Global:r=>{const i=M();q();for(const n of r.names){e.U.lookup(i.vars,n)||H(r,9521,e.U.lf("No binding found for global variable"));z(n,{},t.VarModifier.Global).firstRefPos<r.startPos&&H(r,9522,e.U.lf("Variable referenced before global declaration"))}return n.mkStmt(n.mkText(""))},Nonlocal:r=>{const i=M(),s=q();for(const n of r.names){const o=it(n,s);o&&o!==i&&o.vars[n].modifier!==t.VarModifier.Global||H(r,9523,e.U.lf("No binding found for nonlocal variable"));z(n,{},t.VarModifier.NonLocal).firstRefPos<r.startPos&&H(r,9524,e.U.lf("Variable referenced before nonlocal declaration"))}return n.mkStmt(n.mkText(""))}};function Le(t){let r,i,o,a;if("Assign"===t.kind){if(1!=t.targets.length)return H(t,9553,e.U.lf("multi-target assignment statements are unsupported")),g(t);a=t.targets[0],o=t.value,r=null,i=null}else{if("AnnAssign"!==t.kind)return t;a=t.target,o=t.value||null,r=t.annotation,i=Se(r),Z(a,i)}let l,u="",c=!!o&&qe(o,"const"),p=Oe(a)||"";if(G()||s.currClass||s.currFun||"_"==p[0]||(u="export "),p&&s.currClass&&!s.currFun){c=!(!o||!s.currClass.isNamespace);let e=ce(s.currClass.symInfo,p);if(e||H(t,9544,lf("cannot get class field")),0==m)return n.mkText("/* skip for now */");e.pyRetType||H(t,9539,lf("function '{0}' missing return type",e.pyQName)),Z(a,e.pyRetType),e.isInstance=!1,u=s.currClass.isNamespace?`export ${c?"const":"let"} `:"static "}if(!o)return H(t,9555,e.U.lf("unable to determine value of assignment")),g(t);if(Z(a,ke(o)),c)return z(De(a),{}),/^static /.test(u)||/const/.test(u)||(u+="const "),n.mkStmt(n.mkText(u),n.mkInfix(et(a),"=",et(o)));if(!u&&"Tuple"==a.kind){let r=a,i=[n.mkText("let "),n.mkText("[")];if(r.elts.filter((e=>"Name"!==e.kind)).length)return H(t,9556,e.U.lf("non-trivial tuple assignment unsupported")),g(t);let s=r.elts.map((e=>e)).map((function(e){je(e,"identifierCompletion"),ke(e);Je(e);return Fe(e,!0)}));return i.push(n.mkCommaSep(s)),i.push(n.mkText("]")),n.mkStmt(n.mkInfix(n.mkGroup(i),"=",et(o)))}if("Name"===a.kind){const e=q().vars[p],t=null==e?void 0:e.symbol;t&&4===t.kind&&void 0===e.modifier&&(void 0===e.firstAssignPos||e.firstAssignPos>a.startPos)&&(e.firstAssignPos=a.startPos,e.firstAssignDepth=s.blockDepth)}if(r&&i&&("NameConstant"===o.kind&&null===o.value||"List"===o.kind&&0===o.elts.length)){const e=V(i);l=n.mkInfix(et(a),":",n.mkText(e))}return l||(l=et(a)),n.mkStmt(n.mkText(u),n.mkInfix(l,"=",et(o)))}function Fe(e,t=!1){let r=e.id,i=de(r),o=null==i?void 0:i.symbol,a=q().vars[r],l=null==a?void 0:a.symbol;return void 0===e.isdef&&(!o||4===o.kind&&o!==l?(s.currClass&&!s.currFun?(e.isdef=!1,i=z(r,{})):(e.isdef=!0,i=z(r,{isLocal:!0})),o=i.symbol):e.isdef=!1,e.symbolInfo=o,e.tsType||H(e,9540,lf("definition missing ts type")),o.pyRetType||H(e,9568,lf("missing py return type")),ee(e,e.tsType,o.pyRetType)),e.isdef&&ot(i,q())&&(e.isdef=!1),Xe(i,e),e.isdef&&!t?n.mkGroup([n.mkText("let "),$e(r)]):$e(r)}function Re(e){return n.isReservedWord(e)?e+"_":e||e}function Oe(e){if("Name"==e.kind){let t=e.id,n=me(t),r=null==n?void 0:n.symbol;return r&&r.expandsTo?r.expandsTo:t}if("Attribute"==e.kind){let t=Oe(e.value);if(t)return t+"."+e.attr}}function De(e){let t=Oe(e);return t||H(null,9542,lf("Cannot get name of unknown expression kind '{0}'",e.kind)),t}function $e(e){return"self"==e?n.mkText("this"):n.mkText(Re(e))}function qe(e,t){if("Call"!=e.kind)return!1;return Oe(e.func)===t}function Me(t,r,i){let s=Ee[r];return e.U.assert(!!s),s.length>3?n.H.mkCall(s,[t,i]):n.mkInfix(t,s,i)}const Ge={memoryview:{n:"",t:U},const:{n:"",t:v},"micropython.const":{n:"",t:v}};const Be=function(){let e={};return Object.keys(pxtc.ts2PyFunNameMap).forEach((t=>{let n=pxtc.ts2PyFunNameMap[t];if(n&&n.n){let r={n:t,t:w(n.t),scale:n.scale};e[n.n]=r}})),Object.keys(Ge).forEach((t=>{e[t]=Ge[t]})),e}();function ze(e){return"Name"==e.kind&&"self"==e.id}function Qe(e){return e.type==n.NT.Prefix&&'"'==e.op[0]?n.mkText(n.backtickLit(JSON.parse(e.op))):e}function We(e){return c&&e.startPos<=c.position&&c.position<=e.endPos}function je(e,t){m>100&&c&&null==p&&(c.type==t||"symbol"==c.type)&&We(e)&&(p=e,f=q())}function Ve(e,t){if(t&&t.pyAST&&"FunctionDef"==t.pyAST.kind){let n=t.pyAST;n.callers||(n.callers=[]),n.callers.indexOf(e)<0&&n.callers.push(e)}}const He={BoolOp:e=>{let t=et(e.values[0]);for(let n=1;n<e.values.length;++n)t=Me(t,e.op,et(e.values[n]));return t},BinOp:e=>{let t=function(e){if("Mod"==e.op&&"Str"==e.left.kind&&("Tuple"==e.right.kind||"List"==e.right.kind)){let t=e.left.s,r=e.right.elts;r=r.slice();let i=[n.mkText("`")];return t.replace(/([^%]+)|(%[\d\.]*([a-zA-Z%]))/g,((e,t,s,o)=>{if(t)i.push(n.mkText(t.replace(/[`\\$]/g,(e=>"\\"+e))));else{let e=r.shift(),t=e?et(e):n.mkText("???");i.push(n.mkText("${"),t,n.mkText("}"))}return""})),i.push(n.mkText("`")),n.mkGroup(i)}return null}(e);if(t)return t;const r=et(e.left),i=et(e.right);return ut(e.left)&&ut(e.right)&&"Add"===e.op?n.H.extensionCall("concat",[r,i],!1):(t=Me(r,e.op,i),ve[e.op]&&(Z(e.left,v),Z(e.right,v),e.tsType||H(e,9570,lf("binary op missing ts type")),ee(e,e.tsType,v)),t)},UnaryOp:t=>{let r=Ne[t.op];return e.U.assert(!!r),n.mkInfix(null,r,et(t.operand))},Lambda:t=>(H(t,9574,e.U.lf("lambda expressions are not supported yet")),h(t)),IfExp:e=>n.mkInfix(n.mkInfix(et(e.test),"?",et(e.body)),":",et(e.orelse)),Dict:e=>{s.blockDepth++;const t=e.keys.map(((t,r)=>{const i=e.values[r];return void 0===t?h(e):n.mkStmt(n.mkInfix(et(t),":",et(i)),n.mkText(","))})),r=n.mkBlock(t);return s.blockDepth--,r},Set:e=>h(e),ListComp:e=>h(e),SetComp:e=>h(e),DictComp:e=>h(e),GeneratorExp:e=>{if(1==e.generators.length&&"Comprehension"==e.generators[0].kind){let t=e.generators[0];if(0==t.ifs.length)return Te((()=>{let r=De(t.target);return z(r,{isParam:!0}),n.mkInfix(et(t.iter),".",n.H.mkCall("map",[n.mkGroup([$e(r),n.mkText(" => "),et(e.elt)])]))}))}return h(e)},Await:e=>h(e),Yield:e=>h(e),YieldFrom:e=>h(e),Compare:e=>{if(1==e.ops.length&&("In"==e.ops[0]||"NotIn"==e.ops[0])){Q(ke(e.comparators[0]))==S&&Z(e.left,S);let t=n.mkInfix(et(e.comparators[0]),".",n.H.mkCall("indexOf",[et(e.left)]));return n.mkInfix(t,"In"==e.ops[0]?">=":"<",n.mkText("0"))}let t=et(e.left),r=et(e.comparators[0]);const i=(e,i,s)=>{be[e]&&ct(i)&&ct(s)&&n.flattenNode([t])!==n.flattenNode([r])&&(t=n.H.mkParenthesizedExpression(n.mkGroup([t,n.mkText(" as any")])),r=n.H.mkParenthesizedExpression(n.mkGroup([r,n.mkText(" as any")])))};i(e.ops[0],e.left,e.comparators[0]);let s=Me(t,e.ops[0],r);for(let n=1;n<e.ops.length;++n)t=et(e.comparators[n-1]),r=et(e.comparators[n]),i(e.ops[n],e.comparators[n-1],e.comparators[n]),s=Me(s,"And",Me(t,e.ops[n],r));return s},Call:t=>{t.func.inCalledPosition=!0;let r,i,o=Oe(t.func),a=ye(o),l=a&&8==a.kind,u=a,m="";if(l)u=ye(a.pyQName+".__constructor");else if("Attribute"==t.func.kind){let e=t.func;i=e.value,r=ke(i),(r.classType||r.primType)&&(m=e.attr,u=pe(i,m,!0),u&&(m=u.name))}let d=t.args.slice();if("super"==o&&0==d.length)return s.currClass&&s.currClass.baseClass&&(t.tsType||H(t,9543,lf("call expr missing ts type")),Y(t,t.tsType,s.currClass.baseClass.symInfo)),n.mkText("super");if(qe(t,"int")&&1===d.length&&d[0]){const e=d[0],t=et(e),r=ke(e);if("string"===r.primType)return n.mkGroup([n.mkText("parseInt"),n.mkText("("),t,n.mkText(")")]);if("number"===r.primType)return n.mkGroup([n.mkInfix(n.mkText("Math"),".",n.mkText("trunc")),n.mkText("("),t,n.mkText(")")])}if(!u){let t=e.U.lookup(Be,o);if(t&&(m=""),m&&(o=V(r)+"."+m,t=e.U.lookup(Be,o),t||"@array"!=J(Q(r))||(o="Array."+m,t=e.U.lookup(Be,o))),m="",t)if("."==t.n[0]&&d.length){if(i=d.shift(),r=ke(i),m=t.n.slice(1),u=pe(i,m),u&&2==u.kind)return n.mkInfix(et(i),".",n.mkText(m))}else u=_(t.n)}if(qe(t,"str"))return ee(t,t.tsType,S),n.mkInfix(n.mkText('""'),"+",et(t.args[0]));u||H(t,9508,e.U.lf("can't find called function '{0}'",o));let y=u?u.parameters:null,k=[];if(y){for(d.length>y.length&&H(t,9510,e.U.lf("too many arguments in call to '{0}'",u.pyQName));d.length<y.length;)d.push(null);d=d.slice(0,y.length);for(let n of t.keywords){let t=y.findIndex((e=>e.name==n.arg));t<0?H(n,9511,e.U.lf("'{0}' doesn't have argument named '{1}'",u.pyQName,n.arg)):null!=d[t]?H(n,9512,e.U.lf("argument '{0} already specified in call to '{1}'",n.arg,u.pyQName)):d[t]=n.value}for(let e=d.length-1;e>=0&&(y[e].initializer&&null==d[e]);e--)d.pop();for(let r=0;r<d.length;++r){let i=d[r];if(null!=i||y[r].initializer)if(i){y[r].pyType||H(t,9545,lf("formal arg missing py type"));const e=y[r].pyType;"any"!==e.primType&&ne(i,e),"Name"==i.kind&&Ie(i.symbolInfo)?k.push(Ke(i.symbolInfo.pyAST,!0)):k.push(et(i))}else y[r].initializer||H(t,9547,lf("formal arg missing initializer")),k.push(n.mkText(y[r].initializer));else H(t,9513,e.U.lf("missing argument '{0}' in call to '{1}'",y[r].name,u.pyQName)),k.push(n.mkText("null"))}}else u&&H(t,9509,e.U.lf("calling non-function")),k=d.map(et);if(!p&&c&&"signature"==c.type&&We(t)){p=t,f=q(),c.auxResult=0;for(let e=0;e<d.length;++e){c.auxResult=e;let t=d[e];if(!t)break;if(t.startPos<=c.position&&c.position<=t.endPos)break}}if(u)if(u.pyRetType||H(t,9549,lf("function missing pyRetType")),i&&ut(i)&&r?function(e,t,n){switch(t.qName){case"Array.pop":case"Array.removeAt":case"Array.shift":case"Array.find":case"Array.get":case"Array._pickRandom":Z(e,n.typeArgs[0]);break;case"Array.concat":case"Array.slice":case"Array.filter":case"Array.fill":Z(e,n);break;case"Array.reduce":if("Call"===e.kind&&e.args.length>1){const t=ke(e.args[1]);t&&Z(e,t)}break;case"Array.map":Z(e,F(N));break;default:Z(e,t.pyRetType)}}(t,u,r):Z(t,u.pyRetType),t.symbolInfo=u,u.attributes.py2tsOverride){const e=function(e){const t=new RegExp(/([^\$]*\()?([^\$\(]*)\$(\d)(?:(?:(?:=(\d+|'[a-zA-Z0-9_]*'|false|true|null|undefined))|(\?)|))/,"y"),n=[];let r,i=0;do{i=t.lastIndex,r=t.exec(e),r&&(r[1]&&n.push({kind:"text",text:r[1]}),n.push({kind:"arg",prefix:r[2],index:parseInt(r[3]),default:r[4],isOptional:!!r[5]}))}while(r);null!=i?n.push({kind:"text",text:e.substr(i)}):n.push({kind:"text",text:e});return{parts:n}}(u.attributes.py2tsOverride);if(e){m&&!i&&H(t,9550,lf("missing recv"));let r=function(e,t,r){const i=[];for(const r of e.parts)if("text"===r.kind)i.push(n.mkText(r.text));else if(t[r.index]||r.default)r.prefix&&i.push(n.mkText(r.prefix)),t[r.index]?i.push(t[r.index]):i.push(n.mkText(r.default));else if(!r.isOptional)return;if(r)return n.mkInfix(r,".",n.mkGroup(i));return n.mkGroup(i)}(e,k,m?et(i):void 0);return r||H(t,9555,lf("buildOverride failed unexpectedly")),r}}else if(u.attributes.pyHelper)return n.mkGroup([n.mkInfix(n.mkText("_py"),".",n.mkText(u.attributes.pyHelper)),n.mkText("("),n.mkCommaSep(i?[et(i)].concat(k):k),n.mkText(")")]);let x=m?n.mkInfix(et(i),".",n.mkText(m)):et(t.func),T=[x,n.mkText("("),n.mkCommaSep(k),n.mkText(")")];return u&&1==k.length&&pxtc.service.isTaggedTemplate(u)&&(T=[x,Qe(k[0])]),l&&(a&&a.pyQName||H(t,9551,lf("missing namedSymbol or pyQName")),T[0]=n.mkText(j(a.pyQName)),T.unshift(n.mkText("new "))),n.mkGroup(T)},Num:e=>(e.tsType||H(e,9556,lf("tsType missing")),ee(e,e.tsType,v),n.mkText(e.ns)),Str:e=>(e.tsType||H(e,9557,lf("tsType missing")),ee(e,e.tsType,S),n.mkText(n.stringLit(e.s))),FormattedValue:e=>h(e),JoinedStr:e=>h(e),Bytes:t=>n.mkText(`hex\`${e.U.toHex(new Uint8Array(t.s))}\``),NameConstant:e=>(null!==e.value&&(e.tsType||H(e,9558,lf("tsType missing")),ee(e,e.tsType,b)),n.mkText(JSON.stringify(e.value))),Ellipsis:e=>h(e),Constant:e=>h(e),Attribute:t=>{let r=et(t.value),i=ke(t.value),s=pe(t.value,t.attr),o=t.attr;if(je(t,"memberCompletion"),s)t.symbolInfo=s,Ve(t,s),t.tsType&&s.pyRetType||H(t,9559,lf("tsType or pyRetType missing")),ee(t,t.tsType,s.pyRetType),o=s.name;else if(i.moduleType){let n=_(i.moduleType.pyQName+"."+t.attr);n?(t.symbolInfo=n,Ve(t,n),Z(t,I(n)),o=n.name):H(t,9514,e.U.lf("module '{0}' has no attribute '{1}'",i.moduleType.pyQName,t.attr))}else m>2&&H(t,9515,e.U.lf("unknown object type; cannot lookup attribute '{0}'",t.attr));return n.mkInfix(r,".",n.mkText(Re(o)))},Subscript:e=>{if("Index"==e.slice.kind){const t=Q(ke(e.value));if(ut(e.value)){Z(e,t.typeArgs[0])}else"string"===t.primType?Z(e,t):m>2&&X(ke(e))&&Z(e,N);let r=e.slice.value;return m>2&&X(ke(r))&&Z(r,v),n.mkGroup([et(e.value),n.mkText("["),et(r),n.mkText("]")])}if("Slice"==e.slice.kind){const t=ke(e.value);Z(e,t);let r=e.slice;if(r.step){const i="string"===(null==t?void 0:t.primType);return n.H.mkCall(i?"_py.stringSlice":"_py.slice",[et(e.value),r.lower?et(r.lower):n.mkText("null"),r.upper?et(r.upper):n.mkText("null"),et(r.step)])}return n.mkInfix(et(e.value),".",n.H.mkCall("slice",[r.lower?et(r.lower):n.mkText("0"),r.upper?et(r.upper):null].filter(T)))}return h(e)},Starred:e=>n.mkGroup([n.mkText("... "),et(e.value)]),Name:e=>{if(je(e,"identifierCompletion"),"self"==e.id&&s.currClass)return e.tsType||H(e,9560,lf("missing tsType")),Y(e,e.tsType,s.currClass.symInfo),n.mkText("this");let t=Je(e),r=null==t?void 0:t.symbol;if(r&&r.isImport)return $e(r.name);if(Xe(t,e),e.ctx.indexOf("Load")>=0){if(!r)return $e(De(e));if(!(null==r?void 0:r.qName))return H(e,9561,lf("missing qName")),$e("unknown");return $e(r.qName.replace("@type",""))}return Fe(e)},List:Ye,Tuple:Ye};function Je(t){let n=de(t.id),r=null==n?void 0:n.symbol;if(!n){let r=e.U.lookup(Be,t.id);r&&(n=de(r.n))}if(n&&r){if(t.symbolInfo=r,t.tsType||H(t,9562,lf("missing tsType")),ee(t,t.tsType,I(r)),r.isImport)return n;Ve(t,r),t.forTargetEndPos&&n.forVariableEndPos!==t.forTargetEndPos&&(n.forVariableEndPos?n.lastRefPos=n.forVariableEndPos+1:n.forVariableEndPos=t.forTargetEndPos)}else m>0&&H(t,9516,e.U.lf("name '{0}' is not defined",t.id));return n}function Xe(e,n){if(e){if(e.modifier===t.VarModifier.Global){const t=M();t&&t.vars[e.symbol.name]&&(e=t.vars[e.symbol.name])}else if(e.modifier===t.VarModifier.NonLocal){const t=it(e.symbol.name,q());t&&(e=t.vars[e.symbol.name])}(void 0===e.firstRefPos||e.firstRefPos>n.startPos)&&(e.firstRefPos=n.startPos),(void 0===e.lastRefPos||e.lastRefPos<n.startPos)&&(e.lastRefPos=n.startPos)}}function Ye(e){return e.tsType||H(e,9563,lf("missing tsType")),ee(e,e.tsType,F(e.elts[0]?ke(e.elts[0]):L())),n.mkGroup([n.mkText("["),n.mkCommaSep(e.elts.map(et)),n.mkText("]")])}function Ze(e){return`${e.startPos}:${e.endPos}`}function et(t){o=t;let n=He[t.kind];n||e.U.oops(t.kind+" - unknown expr"),ke(t);const r=n(t);return r.id=Ze(t),r}function tt(t){o=t;let r=_e[t.kind];r||e.U.oops(t.kind+" - unknown stmt");let i=(t._comments||[]).map((e=>e.value)),s=r(t);return i.length&&(s=n.mkGroup(i.map((e=>n.mkStmt(n.H.mkComment(e)))).concat(s))),s.id=Ze(t),s}function nt(e){return!e||(e.type==n.NT.Prefix&&""==e.op?e.children.every(nt):e.type==n.NT.NewLine)}function rt(e){const t=$e(e.name),r=V(I(e));return n.mkStmt(n.mkGroup([n.mkText("let "),t,n.mkText(": "+r+";")]))}function it(e,n){if(!n)return;const r=n.vars&&n.vars[e];return r&&r.modifier!=t.VarModifier.NonLocal?n:it(e,n.parent)}function st(e){const t=[];let n;for(const r of Object.keys(e.vars))n=e.vars[r],ot(n,e)&&t.push(rt(null==n?void 0:n.symbol));return t}function ot(e,t){return!!(4===e.symbol.kind&&!e.symbol.isParam&&void 0===e.modifier&&(e.lastRefPos>e.forVariableEndPos||e.firstRefPos<e.firstAssignPos||e.firstAssignDepth>t.blockDepth)&&!(function(e){return"Module"===e.kind&&"main"===e.name}(t)&&0===e.firstAssignDepth))}function at(t){if(e.U.assert("Module"==t.kind),t.tsBody)return;var r;s={currClass:void 0,currFun:void 0,currModule:r=t,blockDepth:0},a=r.tsFilename.replace(/\.ts$/,".py"),t.vars||(t.vars={});let i=st(t).concat(t.body.map(tt));return i.every(nt)?void 0:"main"==t.name?i:[n.mkText("namespace "+t.name+" "),n.mkBlock(i)]}function lt(e){m=e,l=[],y=0,o=void 0}function ut(e){const t=Q(ke(e));return t&&"@array"===t.primType}function ct(e){switch(e.kind){case"Num":case"Str":return!0;case"NameConstant":return null!==e.value}return!1}t.py2ts=function(s){let o=[];const m={};l=[],e.U.assert(!!s.sourceFiles,"missing sourceFiles! Cannot convert py to ts");let d=s.sourceFiles.filter((t=>e.U.endsWith(t,".py")));if(0==d.length)return{outfiles:m,diagnostics:l,success:0===l.length,sourceMap:[]};let k=(e,t)=>e.substr(0,e.length-t.length),x=e.U.toDictionary(d,(e=>k(e,".py"))),T=s.sourceFiles.filter((t=>e.U.endsWith(t,".ts"))).filter((e=>k(e,".ts")in x));e.U.assert(!!s.apisInfo,"missing apisInfo! Cannot convert py to ts"),a=d[0],function(t,n){i={},r={};let s=e.U.toDictionary(n,(e=>e));for(let n of e.U.values(t.byQName)){if(s.hasOwnProperty(n.fileName))continue;let t=n;t.extendsTypes&&(t.extendsTypes=t.extendsTypes.filter((e=>e!=t.qName))),t.pyQName&&t.qName||H(null,9526,e.U.lf("Symbol '{0}' is missing qName for '{1}'",t.name,t.pyQName?"ts":"py")),r[t.pyQName]=t,r[t.qName]=t}U=P("Buffer")}(s.apisInfo,T),u=s,c=void 0,s.generatedFiles||(s.generatedFiles=[]);for(const t of d){let n=t,r=t.replace(/\.py$/,"").replace(/.*\//,""),i=s.fileSystem[t];try{a=t;let s=e.py.lex(i),u=e.py.parse(i,n,s);e.U.pushRange(l,u.diagnostics),o.push({kind:"Module",body:u.stmts,blockDepth:0,name:r,source:i,tsFilename:n.replace(/\.py$/,".ts")})}catch(e){console.log("Parse error",e)}}const g=l;for(let e=0;e<5;++e){lt(e);for(let e of o)try{at(e)}catch(e){console.log("Conv pass error",e)}if(0==y)break}lt(1e3),p=void 0,c=s.syntaxInfo||{position:0,type:"symbol"};let h=[];for(let e of o)try{let t=at(e);if(!t)continue;let r=n.flattenNode(t);function S(e){let t=e.id.split(":");if(2!=t.length)return;let n=t.map((e=>parseInt(e)));return{py:{startPos:n[0],endPos:n[1]},ts:{startPos:e.startPos,endPos:e.endPos}}}s.sourceFiles.push(e.tsFilename),s.generatedFiles.push(e.tsFilename),s.fileSystem[e.tsFilename]=r.output,m[e.tsFilename]=r.output,h=r.sourceMap.map(S).filter((e=>!!e))}catch(e){console.log("Conv error",e)}l=g.concat(l);let v={};const b=e.U.values(r).concat(e.U.values(i));let E=[];const N=e=>{if((e=>{switch(e.kind){case 6:case 7:case 4:case 3:case 5:return!0;case 2:case 1:return!e.isInstance;default:return!1}})(e)&&E.indexOf(e)<0){let t=A(e);v[t.qName||t.name]=t}};for(let t=f;t;t=t.parent)t&&t.vars&&e.U.values(t.vars).map((e=>e.symbol)).forEach(N);if(b.forEach(N),c&&p){if(p=p,c.beginPos=p.startPos,c.endPos=p.endPos,c.symbols||(c.symbols=[]),E=c.symbols.slice(),"memberCompletion"==c.type&&"Attribute"==p.kind){const e=ke(p.value);if(e.moduleType)for(let t of b)t.isInstance||t.namespace!=e.moduleType.qName||c.symbols.push(t);else if(e.classType||e.primType){const t=e.classType||fe(e.primType).reduce(((e,t)=>e||t),null);if(t){t.extendsTypes&&t.qName||H(null,9567,lf("missing extendsTypes or qName"));let e=t.extendsTypes.concat(t.qName);for(let t of b)t.isInstance&&e.indexOf(t.namespace)>=0&&c.symbols.push(t)}}}else if("identifierCompletion"==c.type)c.symbols=e.U.values(v);else{let e=p.symbolInfo;e&&c.symbols.push(e)}c.symbols=c.symbols.map(A)}let C=function(){for(let e of l)t.patchPosition(e,s.fileSystem[e.fileName]);return l}();return{outfiles:m,success:0===C.length,diagnostics:C,syntaxInfo:c,globalNames:v,sourceMap:h}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n;!function(e){e[e.Id=0]="Id",e[e.Op=1]="Op",e[e.Keyword=2]="Keyword",e[e.Number=3]="Number",e[e.String=4]="String",e[e.NewLine=5]="NewLine",e[e.Comment=6]="Comment",e[e.Indent=7]="Indent",e[e.Dedent=8]="Dedent",e[e.EOF=9]="EOF",e[e.Error=10]="Error"}(n=t.TokenType||(t.TokenType={})),t.keywords={False:!0,None:!0,True:!0,and:!0,as:!0,assert:!0,async:!0,await:!0,break:!0,class:!0,continue:!0,def:!0,del:!0,elif:!0,else:!0,except:!0,finally:!0,for:!0,from:!0,global:!0,if:!0,import:!0,in:!0,is:!0,lambda:!0,nonlocal:!0,not:!0,or:!0,pass:!0,raise:!0,return:!0,try:!0,while:!0,with:!0,yield:!0};let r,i,s=[];const o={"%":"Mod","&":"BitAnd","*":"Mult","**":"Pow","+":"Add","-":"Sub","/":"Div","//":"FloorDiv","<<":"LShift",">>":"RShift","@":"MatMult","^":"BitXor","|":"BitOr"},a={"!":"Bang","!=":"NotEq","(":"LParen",")":"RParen",",":"Comma","->":"Arrow",".":"Dot",":":"Colon",";":"Semicolon","<":"Lt","<=":"LtE","=":"Assign","==":"Eq",">":"Gt",">=":"GtE","[":"LSquare","]":"RSquare","{":"LBracket","}":"RBracket","~":"Invert"},l={b:/^[_0-1]$/,B:/^[_0-1]$/,o:/^[_0-7]$/,O:/^[_0-7]$/,x:/^[_0-9a-fA-F]$/,X:/^[_0-9a-fA-F]$/},u={b:2,B:2,o:8,O:8,x:16,X:16};let c,p,f=0,m=0;function d(e,t){let n=0,r=0;for(let i=0;i<e;++i)10==t.charCodeAt(i)&&(n++,r=i);return{line:n,column:e-r-1}}function y(e){switch(e.type){case n.Id:return`id(${e.value})`;case n.Op:return"'"+i[e.value]+"'";case n.Keyword:return e.value;case n.Number:return`num(${e.value})`;case n.String:return e.stringPrefix+JSON.stringify(e.value);case n.NewLine:return"<nl>";case n.Comment:return`/* ${e.value} */`;case n.Indent:return"indent"+e.value;case n.Dedent:return"dedent";case n.Error:return`[ERR: ${e.value}]`;case n.EOF:return"End of file";default:return"???"}}t.position=d,t.patchPosition=function(e,t){if(!e.start&&!e.length)return e.start=0,e.length=0,e.line=0,void(e.column=0);let n=d(e.start,t);e.line=n.line,e.column=n.column,e.length>0&&(n=d(e.start+e.length-1,t),e.endLine=n.line,e.endColumn=n.column+2)},t.tokenToString=y,t.friendlyTokenToString=function(e,t){let n=e.endPos-e.startPos,r="";return r=0==n?y(e):n>20?"`"+t.slice(e.startPos,e.startPos+20)+"`...":"`"+t.slice(e.startPos,e.endPos)+"`",r=r.replace(/\r/g,"").replace(/\n/g,"\\n").replace(/\t/g,"\\t"),r},t.tokensToString=function(e){let t="",r=0;for(let i of e){let e=y(i);r+e.length>70&&(r=0,t+="\n"),0!=r&&(t+=" "),t+=e,r+=e.length,i.type!=n.NewLine&&i.type!=n.Comment||(r=0,t+="\n")}return t},t.lex=function(d){for(0==s.length&&function(){const n={'"':v,"'":v,"#":U,"\\":N,".":w};r=e.U.clone(a);for(let e of Object.keys(o))r[e]=o[e],r[e+"="]=o[e]+"Assign";i={};for(let e of Object.keys(r))i[r[e]]=e;for(let e=0;e<128;++e)if(t.rx.isIdentifierStart(e))s[e]=x;else{let i=String.fromCharCode(e);if(n.hasOwnProperty(i))s[e]=n[i];else if(r.hasOwnProperty(i)){let t=!1,n=r[i];for(let e of Object.keys(r))e!=i&&e.startsWith(i)&&(t=!0);s[e]=t?()=>g(n):()=>T(n)}else t.rx.isSpace(e)?s[e]=()=>{}:13==e?s[e]=()=>{10==p.charCodeAt(f)&&f++,b()}:t.rx.isNewline(e)?s[e]=b:A(e)?s[e]=C:s[e]=P}}(),p=d,c=[],f=0,m=0,E();f<p.length;){m=f;const e=p.charCodeAt(f++);e<128?s[e]():t.rx.isIdentifierStart(e)?x():t.rx.isSpace(e)||(t.rx.isNewline(e)?b():P())}return m=f,b(),y(n.EOF,""),c;function y(e,t,n){let r={type:e,value:t,startPos:m,endPos:f,auxValue:n};return c.push(r),r}function k(e){y(n.Error,e)}function x(){for(;t.rx.isIdentifierChar(p.charCodeAt(f));)f++;let e=p.slice(m,f),r=p.charCodeAt(f);t.keywords.hasOwnProperty(e)?y(n.Keyword,e):34==r||39==r?S(e):y(n.Id,e)}function T(e){y(n.Op,e)}function g(e){let t=p.slice(m,f+1);if(2==t.length&&r.hasOwnProperty(t)){let n=p.slice(m,f+2);3==n.length&&r.hasOwnProperty(n)?(f+=2,e=r[n]):(f++,e=r[t])}T(e)}function h(e){switch(e){case 97:return 7;case 98:return 8;case 102:return 12;case 110:return 10;case 114:return 13;case 116:return 9;case 118:return 11;default:return 0}}function S(r){const i=p.charCodeAt(f++);let s=!1;p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i&&(f+=2,s=!0);let o=(r=r.toLowerCase()).indexOf("r")>=0,a="",l="";for(;;){const n=p.charCodeAt(f++);if(n==i){if(!s)break;if(p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i){f+=2;break}l+="\\"+String.fromCharCode(i),a+=String.fromCharCode(i)}else if(92==n){let n=p.charCodeAt(f++);if(13==n&&10==p.charCodeAt(f)&&(n=10,f++),34==n||39==n||92==n)o&&(l+="\\",a+="\\"),l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(n);else if(!o&&h(n))l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(h(n));else if(t.rx.isNewline(n))o&&(a+="\\"+String.fromCharCode(n),l+="\\\\",l+=10==n?"\\n":"\\u"+("0000"+n.toString(16)).slice(-4));else if(o||48!=n)if(o||117!=n&&120!=n)l+="\\\\"+String.fromCharCode(n),a+="\\"+String.fromCharCode(n);else{let t=117==n?4:2,r=p.slice(f,f+t);f+=t;let i=parseInt(r,16);isNaN(i)&&k(e.U.lf("invalid unicode or hex escape")),l+="\\"+String.fromCharCode(n)+r,a+=String.fromCharCode(i)}else l+="\\\\x00",a+="\0"}else{if(isNaN(n)){k(e.U.lf("end of file in a string"));break}if(t.rx.isNewline(n)&&!s){k(e.U.lf("new line in a string"));break}a+=String.fromCharCode(n),l+=String.fromCharCode(n)}}let u=y(n.String,a);u.quoted=l,u.stringPrefix=r}function v(){f--,S("")}function b(){y(n.NewLine,""),E()}function E(){let e=0;for(;;){const t=p.charCodeAt(f);if(9!=t){if(32!=t)break;e++,f++}else e=e+8&-8,f++}y(n.Indent,""+e)}function N(){let n=p.charCodeAt(f);t.rx.isNewline(n)?(f++,13==n&&10==p.charCodeAt(f)&&f++):k(e.U.lf("unexpected character after line continuation character"))}function U(){for(y(n.NewLine,"");f<p.length&&!t.rx.isNewline(p.charCodeAt(f));)f++;y(n.Comment,p.slice(m+1,f)),13==p.charCodeAt(f)&&10==p.charCodeAt(f+1)&&f++,f++,E()}function C(){let t=p[m],r="";if("0"==t){let i=p[f];const s=l[i];if(s){for(f++;;){const e=p[f];if(!s.test(e))break;r+=e,f++}if(r){let s=parseInt(r,u[i]);isNaN(s)&&k(e.U.lf("invalid number")),y(n.Number,t+i+r,s)}else k(e.U.lf("expecting numbers to follow 0b, 0o, 0x"));return}}let i=!1,s=!1,o=!1;for(f=m;;){const e=p.charCodeAt(f);if(!o||43!=e&&45!=e)if(o=!1,95==e||A(e));else if(s||i||46!=e){if(s||69!=e&&101!=e)break;s=!0,o=!0}else i=!0;else;r+=String.fromCharCode(e),f++}!i&&!s&&"0"==t&&r.length>1&&!/^0+/.test(r)&&k(e.U.lf("unexpected leading zero"));let a=parseFloat(r);isNaN(a)&&k(e.U.lf("invalid number")),y(n.Number,r,a)}function w(){A(p.charCodeAt(f))?C():y(n.Op,"Dot")}function A(e){return 48<=e&&e<=57}function P(){k(e.U.lf("invalid token"))}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n,r,i,s,o,a,l,u,c;function p(){return r[o]}function f(){for(;r[o];o++){let i=r[o];if(i.type!=t.TokenType.Comment){if(n>=0&&i.type==t.TokenType.Op)switch(i.value){case"LParen":case"LSquare":case"LBracket":n++;break;case"RParen":case"RSquare":case"RBracket":n--}if(i.type!=t.TokenType.Error){if(n>0){if(i.type==t.TokenType.NewLine||i.type==t.TokenType.Indent)continue}else if(i.type==t.TokenType.Indent){if(r[o+1].type==t.TokenType.NewLine){o++;continue}let n=parseInt(i.value),s=l[l.length-1];if(n==s)continue;if(n>s)return void l.push(n);{i.type=t.TokenType.Dedent;let s=0;for(;l.length;){let t=l[l.length-1];if(!(t>n)){for(t!=n&&d(9552,e.U.lf("inconsitent indentation"));s>1;)r.splice(o,0,i),s--;return}l.pop(),s++}}}return}d(9551,i.value)}else a.push(i)}}function m(){u=p(),u.type!=t.TokenType.EOF&&(o++,f())}function d(n,r){r||(r=e.U.lf("invalid syntax")),n||(n=9550);const o=p(),a={code:n,category:pxtc.DiagnosticCategory.Error,messageText:e.U.lf("{0} near {1}",r,t.friendlyTokenToString(o,i)),fileName:s,start:o.startPos,length:o.endPos?o.endPos-o.startPos:0,line:0,column:0};t.patchPosition(a,i),c.push(a),9572!=n&&c.length>100&&e.U.userError(e.U.lf("too many parse errors"))}function y(n,r){const i=p();(i.type==n&&i.value==r||(d(9553,e.U.lf("expecting {0}",t.tokenToString(function(e,t){return{type:e,value:t,startPos:0,endPos:0}}(n,r)))),i.type!=t.TokenType.NewLine))&&m()}function k(){y(t.TokenType.NewLine,"")}function x(e){y(t.TokenType.Keyword,e)}function T(e){y(t.TokenType.Op,e)}function g(){let e=p();return e.type==t.TokenType.Keyword?e.value:""}function h(){let e=p();return e.type==t.TokenType.Op?e.value:""}const S={if:function e(){let t=E("If");m(),t.test=W(),t.body=b(),"elif"==g()?t.orelse=[e()]:t.orelse=U();return N(t)},while:function(){let e=E("While");return x("while"),e.test=W(),e.body=b(),e.orelse=U(),N(e)},for:function(){let e=E("For");return x("for"),e.target=$(),q(e.target),x("in"),e.iter=D(),e.body=b(),e.orelse=U(),N(e)},try:function(){let e=E("Try");x("try"),e.body=b(),e.handlers=[];let t=!1;for(;"except"==g();){let n=E("ExceptHandler");e.handlers.push(n),m(),"Colon"!=h()?(t&&d(),n.type=W(),"as"==g()?(m(),n.name=ge()):n.name=void 0):(t=!0,n.type=void 0,n.name=void 0),n.body=b()}e.orelse=U(),0==e.handlers.length&&e.orelse.length&&d();"finally"==g()?(m(),e.finalbody=b()):e.finalbody=[];return N(e)},with:function(){let t=E("With");return x("with"),t.items=ke(e.U.lf("with item"),C),t.body=b(),N(t)},def:function(){let e=E("FunctionDef");x("def"),e.name=ge(),T("LParen"),e.args=z(!0),T("RParen"),e.returns=void 0,"Arrow"==h()&&(m(),e.returns=W());return e.body=b(),N(e)},class:function(){let e=E("ClassDef");if(x("class"),e.name=ge(),"LParen"==h()){let t=he();e.bases=t.args,e.keywords=t.keywords}else e.bases=[],e.keywords=[];return e.body=b(),N(e)}},v={del:function(){let t=E("Delete");return x("del"),t.targets=ye(e.U.lf("expression"),oe),N(t)},pass:function(){let e=E("Pass");return x("pass"),N(e)},break:function(){let e=E("Break");return m(),N(e)},continue:function(){let e=E("Continue");return m(),N(e)},return:function(){let e=E("Return");m(),A()?e.value=void 0:e.value=D();return N(e)},raise:function(){let e=E("Raise");x("raise"),e.exc=void 0,e.cause=void 0,A()||(e.exc=W(),"from"==g()&&(m(),e.cause=W()));return N(e)},global:P,nonlocal:function(){let e=P();return e.kind="Nonlocal",e},import:function(){let t=E("Import");return m(),t.names=ke(e.U.lf("import name"),K),N(t)},from:function(){let n=E("ImportFrom");m(),n.level=L(),p().type==t.TokenType.Id?n.module=I():n.module=void 0;n.level||n.module||d();if(x("import"),"Mult"==h()){m();let e=E("Alias");e.name="*",n.names=[e]}else"LParen"==h()?(m(),n.names=ye(e.U.lf("import name"),_),T("RParen")):n.names=ye(e.U.lf("import name"),_);return N(n)},assert:function(){let e=E("Assert");m(),e.test=W(),"Comma"==h()?(m(),e.msg=W()):e.msg=void 0;return N(e)},yield:function(){p();if(m(),"from"==g()){let e=E("YieldFrom");return e.value=W(),w(N(e))}let e=E("Yield");A()||(e.value=D());return w(N(e))}};function b(){return T("Colon"),function(){if(p().type==t.TokenType.NewLine){let n;if(m(),p().type!=t.TokenType.Indent)d(9554,e.U.lf("expected an indented block")),n=B();else{const r=parseInt(p().value);for(m(),n=B();;){if(p().type==t.TokenType.Dedent){const e=isNaN(r)||parseInt(p().value)<r;if(m(),e)break}if(e.U.pushRange(n,B()),p().type==t.TokenType.EOF)break}}return n}return G()}()}function E(e,t){let n=t||p();return{startPos:n.startPos,endPos:n.endPos,kind:e}}function N(e){return e.endPos=u.endPos,e}function U(){return"else"==g()?(m(),b()):[]}function C(){let e=E("WithItem");return e.context_expr=W(),e.optional_vars=void 0,"as"==g()&&(m(),e.optional_vars=oe()),N(e)}function w(e){let t=E("ExprStmt");return t.startPos=e.startPos,t.endPos=e.endPos,t.value=e,t}function A(){let e=p();return e.type==t.TokenType.NewLine||e.type==t.TokenType.Op&&"Semicolon"==e.value}function P(){let e=E("Global");for(m(),e.names=[];e.names.push(ge()),"Comma"==h();)m();return N(e)}function I(){let e="";for(;;){if(e+=ge(),"Dot"!=h())return e;e+=".",m()}}function K(){let e=E("Alias");return e.name=I(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,N(e)}function _(){let e=E("Alias");return e.name=ge(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,N(e)}function L(){let e=0;for(;;)if("Dot"==h())e+=1,m();else{if("Ellipsis"!=h())return e;e+=3,m()}}function F(e,t){let n=E("Tuple",e);return n.elts=t,N(n)}function R(t){let n=p(),r=ye(e.U.lf("expression"),t),i=r[0];return 1!=r.length?F(n,r):i}function O(){return R(le)}function D(){return R(W)}function $(){return R(oe)}function q(e){if("Tuple"==e.kind){e.elts.forEach(q)}else e.ctx="Store"}function M(){let n=e.U.lookup(v,g());return n?n():function(){let n=p(),r=O(),i=h();if("Assign"==i){let e=E("Assign");for(e.targets=[r];;){if(m(),r=O(),i=h(),"Assign"!=i){e.value=r;break}e.targets.push(r)}return e.targets.forEach(q),N(e)}if("Colon"==i){let e=E("AnnAssign");return e.target=r,m(),e.annotation=W(),"Assign"==h()&&(m(),e.value=W()),e.simple=n.type==t.TokenType.Id&&"Name"==r.kind?1:0,q(e.target),N(e)}if(e.U.endsWith(i,"Assign")){let e=E("AugAssign");return e.target=r,e.op=i.replace("Assign",""),m(),e.value=D(),q(e.target),N(e)}if("Semicolon"==i||p().type==t.TokenType.NewLine){let e=E("ExprStmt");return e.value=r,N(e)}return d(9555,e.U.lf("unexpected token")),m(),null}()}function G(){let e=[M()];for(;"Semicolon"==h()&&(m(),p().type!=t.TokenType.NewLine);)e.push(M());return k(),e.filter((e=>!!e))}function B(){const r=c.length,i=p().type==t.TokenType.Indent;i&&(m(),d(9573,e.U.lf("unexpected indent")));let s=[];for(;"MatMult"==h();)m(),s.push(ve()),k();let o=g(),l=e.U.lookup(S,g()),f=[],y=a;if(a=[],"class"==o||"def"==o){let e=l();e.decorator_list=s,f=[e]}else s.length?d(9556,e.U.lf("decorators not allowed here")):f=l?[l()]:G();y.length&&f.length&&(f[0]._comments=y);if(c.length>r){for(n=-1;u.type!=t.TokenType.Dedent&&u.type!=t.TokenType.NewLine&&(m(),p().type!=t.TokenType.EOF););i&&p().type===t.TokenType.Dedent&&m(),n=0}return f}function z(n){let r=E("Arguments");for(r.args=[],r.defaults=[],r.kwonlyargs=[],r.kw_defaults=[],r.vararg=void 0;;){let n=h();if("Colon"==n||"RParen"==n)break;if("Mult"==n)r.vararg&&d(9557,e.U.lf("multiple *arg")),m(),p().type==t.TokenType.Id?r.vararg=i():r.vararg=void 0;else if("Pow"==n)r.kwarg&&d(9558,e.U.lf("multiple **arg")),m(),r.kwarg=i();else{r.kwarg&&d(9559,e.U.lf("arguments after **"));let t,n=i();"Assign"==h()&&(m(),t=W()),void 0!==r.vararg&&t?(r.kwonlyargs.push(n),r.kw_defaults.push(t)):(r.args.push(n),t?r.defaults.push(t):r.defaults.length&&d(9560,e.U.lf("non-default argument follows default argument")))}if("Comma"!=h())break;m()}return r.kwarg||(r.kwarg=void 0),r.vararg||(r.vararg=void 0),N(r);function i(){let e=E("Arg");return e.arg=ge(),e.annotation=void 0,n&&"Colon"==h()&&(m(),e.annotation=W()),e}}function Q(e){let t=E("Lambda");return m(),t.args=z(!1),T("Colon"),t.body=e?ue():W(),N(t)}function W(){if("lambda"==g())return Q();let e=p(),t=H();if("if"==g()){let n=E("IfExp",e);return n.body=t,x("if"),n.test=H(),x("else"),n.orelse=W(),N(n)}return t}function j(e,t){let n=p(),r=t();if(g()==e){let i=E("BoolOp",n);for(i.op="or"==e?"Or":"And",i.values=[r];g()==e;)x(e),i.values.push(t());return N(i)}return r}function V(){return j("and",J)}function H(){return j("or",V)}function J(){if("not"==g()){let e=E("UnaryOp");return m(),e.op="Not",e.operand=J(),N(e)}return function(){let e=p(),t=oe();if(!Y())return t;let n=E("Compare",e);n.left=t,n.comparators=[],n.ops=[];for(;;){let e=Y();if(!e)break;m(),"NotIn"==e?x("in"):"Is"==e&&"not"==g()&&(m(),e="IsNot"),n.ops.push(e),n.comparators.push(oe())}return N(n)}()}const X={Lt:"Lt",Gt:"Gt",Eq:"Eq",GtE:"GtE",LtE:"LtE",NotEq:"NotEq",in:"In",not:"NotIn",is:"Is"};function Y(){return X[h()]||X[g()]||null}const Z={Invert:"Invert",Sub:"USub",Add:"UAdd"};function ee(e,t){let n=p(),r=e();for(;;){let i=h();if(!(i&&t.indexOf(","+i+",")>=0))return r;{let t=E("BinOp",n);t.left=r,t.op=i,m(),t.right=e(),r=t}}}function te(){return ee(be,",Mult,MatMult,Div,Mod,FloorDiv,")}function ne(){return ee(te,",Add,Sub,")}function re(){return ee(ne,",LShift,RShift,")}function ie(){return ee(re,",BitAnd,")}function se(){return ee(ie,",BitXor,")}function oe(){return ee(se,",BitOr,")}function ae(){let t,n=p();if("Colon"!=h()&&(t=W()),"Colon"==h()){let e=E("Slice",n);e.lower=t,m();let r=h();return e.upper="Colon"!=r&&"Comma"!=r&&"RSquare"!=r?W():void 0,e.step=void 0,"Colon"==h()&&(m(),r=h(),"Comma"!=r&&"RSquare"!=r&&(e.step=W())),N(e)}{t||d(9570,e.U.lf("unable to parse lower subscript"));let n=E("Index");return n.value=t,N(n)}}function le(){if("Mult"==h()){let e=E("Starred");return e.value=oe(),N(e)}return W()}function ue(){return"lambda"==g()?Q(!0):H()}function ce(){let e=[];for(;;){let t=E("Comprehension");for(t.is_async=0,e.push(t),x("for"),t.target=$(),q(t.target),x("in"),t.iter=H(),t.ifs=[];"if"==g();)m(),t.ifs.push(ue());if("for"!=g())return e}}function pe(){let t=p();if("Mult"==h()){let e=E("Starred");return m(),e.value=W(),N(e)}if("Pow"==h()){let e=E("Keyword");return m(),e.arg=void 0,e.value=W(),N(e)}let n=W();if("Assign"==h()){"Name"!=n.kind&&d(9561,e.U.lf("invalid keyword argument; did you mean ==?")),m();let r=E("Keyword",t);return r.arg=n.id||"???",r.value=W(),N(r)}if("for"==g()){let e=E("GeneratorExp",t);return e.elt=n,e.generators=ce(),N(e)}return n}function fe(){let e=E("NameConstant");return e.value=null,m(),N(e)}function me(){let n=p();if(n.type==t.TokenType.Id){let e=E("Name");return m(),e.id=n.value,e.ctx="Load",N(e)}if(n.type==t.TokenType.Number){let e=E("Num");return m(),e.ns=n.value,e.n=n.auxValue,N(e)}if(n.type==t.TokenType.String){m();let r=n.value;for(;p().type==t.TokenType.String;)r+=p().value,m();if("b"==n.stringPrefix){let t=E("Bytes",n);return t.s=e.U.toArray(e.U.stringToUint8Array(r)),N(t)}{let e=E("Str",n);return e.s=r,N(e)}}if(n.type==t.TokenType.Keyword){if("None"==n.value||"True"==n.value||"False"==n.value){let e=E("NameConstant");return m(),e.value="True"==n.value||"False"!=n.value&&null,N(e)}return d(9564,e.U.lf("expecting atom")),fe()}if(n.type==t.TokenType.Op){let t=n.value;return"LParen"==t?Te("RParen","Tuple","GeneratorExp"):"LSquare"==t?Te("RSquare","List","ListComp"):"LBracket"==t?function(){let t=p();if(m(),"Pow"==h())return m(),r(void 0,oe());if("RBracket"==h()){let e=E("Dict",t);return m(),e.keys=[],e.values=[],N(e)}{let n=le();return"Starred"!=n.kind&&"Colon"==h()?(m(),r(n,W())):function(n){if("for"==g()){"Starred"==n.kind&&d(9562,e.U.lf("iterable unpacking cannot be used in comprehension"));let r=E("SetComp",t);return r.elt=n,r.generators=ce(),N(r)}let r=E("Set",t);if(r.elts=[n],"Comma"==h()){let t=xe("RBracket",e.U.lf("set element"),le);r.elts=[n].concat(t)}else T("RBracket");return N(r)}(n)}function n(){if("Pow"==h())return m(),[null,oe()];{let e=W();return T("Colon"),[e,W()]}}function r(r,i){if("for"==g()){r||d(9563,e.U.lf("dict unpacking cannot be used in dict comprehension"));let n=E("DictComp",t);return n.key=r,n.value=i,n.generators=ce(),N(n)}let s=E("Dict",t);if(s.keys=[r],s.values=[i],"Comma"==h()){let t=xe("RBracket",e.U.lf("dict element"),n);for(let e of t)e.length>=2&&e[0]&&e[1]&&(s.keys.push(e[0]),s.values.push(e[1]))}else T("RBracket");return N(s)}}():(d(9565,e.U.lf("unexpected operator")),fe())}return d(9566,e.U.lf("unexpected token")),fe()}function de(){let n=h();return"RParen"==n||"RSquare"==n||"RBracket"==n||"Colon"==n||"Semicolon"==n||(!!e.U.endsWith(n,"Assign")||("in"==g()||p().type==t.TokenType.NewLine))}function ye(t,n){let r=[];if(de())return r;for(;;){r.push(n());let i="Comma"==h();if(i&&m(),de())return r;if(!i)return d(9567,e.U.lf("expecting {0}",t)),r}}function ke(e,t){let n=[];for(;n.push(t()),"Comma"==h();)m();return n}function xe(t,n,r){m();let i=[];if(h()!=t)for(;;){i.push(r());let s="Comma"==h();if(s&&m(),h()==t)break;if(!s){d(9568,e.U.lf("expecting {0}",n));break}}return T(t),i}function Te(t,n,r){let i=p();if(m(),h()==t){m();let e=E(n,i);return e.elts=[],N(e)}let s=le();if("for"==g()){let e=E(r,i);return e.elt=s,e.generators=ce(),T(t),N(e)}if("Comma"==h()){let r=E(n,i);return m(),r.elts=ye(e.U.lf("expression"),le),r.elts.unshift(s),T(t),N(r)}if(T(t),"List"==n){let e=E(n,i);return e.elts=[s],N(e)}return s}function ge(){let n=p();return n.type!=t.TokenType.Id&&d(9569,e.U.lf("expecting identifier")),m(),n.value}function he(){let t=xe("RParen",e.U.lf("argument"),pe),n=[],r=[];for(let i of t)"Keyword"==i.kind?r.push(i):(r.length&&d(9570,e.U.lf("positional argument follows keyword argument")),n.push(i));return{args:n,keywords:r}}function Se(t,n){let r=h();if("LParen"==r){let e=E("Call",t);e.func=n;let r=he();return e.args=r.args,e.keywords=r.keywords,N(e)}if("LSquare"==r){let r=p(),i=E("Subscript",t);i.value=n;let s=xe("RSquare",e.U.lf("subscript"),ae);if(0==s.length)d(9571,e.U.lf("need non-empty index list"));else if(1==s.length)i.slice=s[0];else if(s.every((e=>"Index"==e.kind))){let e=s[0];e.value=F(r,s.map((e=>e.value))),i.slice=e}else{let e=E("ExtSlice",r);e.dims=s,i.slice=N(e)}return N(i)}if("Dot"==r){let e=E("Attribute",t);return e.value=n,m(),e.attr=ge(),N(e)}return n}function ve(){let e=p(),t=me();for(;;){let n=Se(e,t);if(n===t)return t;t=n}}function be(){if(Z[h()]){let e=E("UnaryOp");return e.op=Z[h()],m(),e.operand=be(),N(e)}return function(){p();let e=ve();if("Pow"==h()){let t=E("BinOp");return m(),t.left=e,t.op="Pow",t.right=be(),N(t)}return e}()}const Ee={kind:1,id:2,n:3,s:4,func:5,key:6,elt:7,elts:8,keys:9,left:10,ops:11,comparators:12,names:13,items:14,test:15,targets:16,dims:17,context_expr:18,name:19,bases:20,type:21,inClass:22,target:23,annotation:24,simple:25,op:26,operand:27,right:28,values:29,iter:30,ifs:31,is_async:32,value:33,slice:34,attr:35,generators:36,args:37,keywords:38,body:39,handlers:40,orelse:41,finalbody:42,decorator_list:43,kwonlyargs:44,kw_defaults:45,defaults:46,arg:47},Ne={lineno:1,col_offset:1,startPos:1,endPos:1,kind:1},Ue={body:1,orelse:1,finalbody:1},Ce={_comments:1,ctx:1,ns:1};t.dump=function(t,n=!1){const r=(t,i)=>{if(Array.isArray(i)){let e="";for(let n=0;n<i.length;++n)n>0&&(e+=", "),e+=r(t,i[n]);return"["+e+"]"}if(!i||!i.kind)return JSON.stringify(i);let s="",o=Object.keys(i);o.sort(((t,n)=>(Ee[t]||100)-(Ee[n]||100)||e.U.strcmp(t,n)));for(let a of o)if(!(e.U.lookup(Ne,a)||n&&e.U.lookup(Ce,a)))if(s&&(s+=", "),s+=a+"=",Array.isArray(i[a])&&i[a].length&&e.U.lookup(Ue,a)){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+r(e,t)+"\n";s+=t+"]"}else if("_comments"==a){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+JSON.stringify(t.value)+"\n";s+=t+"]"}else s+=r(t,i[a]);return i.kind+"("+s+")"};let i="";for(let e of t)i+=r("",e)+"\n";return i},t.parse=function(m,y,k){i=m,s=y,r=k,n=0,o=0,a=[],l=[0],c=[];let x=[];try{if(u=r[0],f(),p().type!=t.TokenType.EOF)for(x=B();p().type!=t.TokenType.EOF;)e.U.pushRange(x,B())}catch(t){d(9572,e.U.lf("exception: {0}",t.message))}return{stmts:x,diagnostics:c}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){function n(e,t,n){const r={fileName:e.getSourceFile().fileName,start:e.getStart(),length:e.getEnd()-e.getStart(),line:void 0,column:void 0,code:t,category:pxtc.DiagnosticCategory.Error,messageText:n},i=new Error(n);throw i.pyDiagnostic=r,i}t.decompileToPython=function(r,i){let s={blocksInfo:void 0,outfiles:{},diagnostics:[],success:!0,times:{}};try{let o=function(r,i){const s=r.getTypeChecker(),o=(new ts.pxtc.LSHost(r),r.getSourceFile(i)),a=pxtc.decompiler.buildCommentMap(o),l=e.U.toSet(d(),(e=>e)),[u,c]=ts.pxtc.decompiler.buildRenameMap(r,o,{takenNames:l,declarations:"all"}),p=pxtc.getApiInfo(r),f=e.U.mapMap(p.byQName,((e,t)=>t.fileName==i?void 0:t)),m=t.computeScopeVariableLookup(o);return b(o);function d(){return["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EnvironmentError","Exception","False","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","NameError","None","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","True","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError","_","__build_class__","__debug__","__doc__","__import__","__loader__","__name__","__package__","__spec__","abs","all","any","ascii","bin","bool","bytearray","bytes","callable","chr","classmethod","compile","complex","copyright","credits","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","license","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","quit","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip",...Object.keys(e.py.keywords)]}function y(e){if(!e.getSourceFile())return null;let t=e.getText();return f[t]||null}function k(e){if(!e.getSourceFile())return null;let t=e.getText();const n=s.getSymbolAtLocation(e);n&&(t=s.getFullyQualifiedName(n));let r=f[t];if(r&&r.attributes.alias)return r.attributes.alias;if(r&&r.pyQName){if(r.isInstance){if(ts.isPropertyAccessExpression(e))return null;const t=new RegExp(`(?:^|.)${r.namespace}.(.+)`).exec(r.pyQName);if(t)return t[1]}return r.pyQName}return t in pxtc.ts2PyFunNameMap?pxtc.ts2PyFunNameMap[t].n:null}function x(t){let r=k(t);if(r)return r;if(!ts.isIdentifier(t))return e.tickEvent("depython.todo.advancedname"),n(t,3001,"Unsupported advanced name format: "+t.getText());let i=t.text;if(t.getSourceFile()){const e=u.getRenameForPosition(t.getStart());e&&(i=e.name)}return i}function T(e){return"string"!=typeof e&&(e=x(e)),c[e]?pxtc.decompiler.getNewName(e,c):(c[e]=!0,e)}function g(e,t){return 0!=(e.flags&t)}function h(e,t){return g(s.getTypeAtLocation(e),t)}function S(e){return h(e,ts.TypeFlags.StringLike)}function v(e){return h(e,ts.TypeFlags.NumberLike)}function b(e){let t=e.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[]).reduce(((e,t)=>t||e[e.length-1]?[...e,t]:e),[]);return a.filter((e=>!e.owner)).forEach((e=>t.push(...N(e)))),t.join("\n")}function E(e){switch(e.kind){case ts.SyntaxKind.SyntaxList:return e._children.map(E).reduce(((e,t)=>e.concat(t)),[]);case ts.SyntaxKind.EndOfFileToken:case ts.SyntaxKind.OpenBraceToken:case ts.SyntaxKind.CloseBraceToken:return[];default:return U(e)}}function N(e){let t=[];if(e.kind===pxtc.decompiler.CommentKind.SingleLine)t.push("# "+e.text);else{t.push('"""');for(const n of e.lines)t.push(n);t.push('"""')}return t}function U(e){const t=C(e);return pxtc.decompiler.getCommentsForStatement(e,a).map(N).reduce(((e,t)=>e.concat(t)),[]).concat(t)}function C(t){return ts.isVariableStatement(t)?$(t):ts.isClassDeclaration(t)?q(t):ts.isEnumDeclaration(t)?M(t):ts.isExpressionStatement(t)?z(t):ts.isFunctionDeclaration(t)?W(t):ts.isIfStatement(t)?O(t):ts.isForStatement(t)?R(t):ts.isForOfStatement(t)?F(t):ts.isWhileStatement(t)?I(t):ts.isReturnStatement(t)?P(t):ts.isBlock(t)?Q(t):ts.isTypeAliasDeclaration(t)?A(t):ts.isEmptyStatement(t)?[]:ts.isModuleDeclaration(t)?w(t):ts.isBreakStatement(t)?["break"]:ts.isContinueStatement(t)?["continue"]:(e.tickEvent("depython.todo.statement",{statement:t.kind}),n(t,3002,`Not supported in MakeCode Python: ${ts.SyntaxKind[t.kind]} (${t.kind})`))}function w(e){let n=x(e.name),r=e.body&&e.body.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[]).map((e=>t.indent1(e)));return["@namespace",`class ${n}:`].concat(r||[])}function A(e){let t=pxtc.emitPyTypeFromTypeNode(e.type);return[`${x(e.name)} = ${t}`]}function P(e){if(!e.expression)return["return"];let[t,n]=Se(e.expression),r=X("return ",t);return n.concat(r)}function I(e){let[t,n]=Se(e.expression),r=L(e.statement),i=X("while ",t,":");return n.concat(i).concat(r)}function K(e){let t=Math.floor(Number(e));return t!==1/0&&String(t)===e}function _(e){if(!e.initializer)return null;if(e.initializer.kind!==ts.SyntaxKind.VariableDeclarationList)return null;let t=e.initializer;if(1!==t.declarations.length)return null;let n=t.declarations[0],r=x(n.name);if(!n.initializer||!ge(n.initializer)||!v(n.initializer))return null;let[i,s]=Se(n.initializer);if(s.length)return null;let o=J(i);if(!e.condition)return null;if(!ts.isBinaryExpression(e.condition))return null;if(!ts.isIdentifier(e.condition.left))return null;if(x(e.condition.left)!=r)return null;if(!v(e.condition.right))return null;let[a,l]=Se(e.condition.right);if(l.length)return null;let u=J(a),c=u;if(e.condition.operatorToken.kind===ts.SyntaxKind.LessThanEqualsToken&&K(u))c=""+(Number(u)+1);else if(e.condition.operatorToken.kind!==ts.SyntaxKind.LessThanToken)return null;return e.incrementor&&(ts.isPostfixUnaryExpression(e.incrementor)||ts.isPrefixUnaryExpression(e.incrementor))?e.incrementor.operator!==ts.SyntaxKind.PlusPlusToken?null:o<c?{name:r,fromIncl:o,toExcl:c}:null:null}function L(e){let n=C(e).map(t.indent1);return n.length<1&&(n=[t.indent1("pass")]),n}function F(t){if(!ts.isVariableDeclarationList(t.initializer))return e.tickEvent("depython.todo.forof.complexexp"),n(t,3003,"Unsupported expression in for..of initializer: "+t.initializer.getText());let r=t.initializer.declarations.map((e=>x(e.name)));if(1!==r.length)return e.tickEvent("depython.todo.forof.multidecl"),n(t,3004,"Unsupported multiple declerations in for..of: "+t.initializer.getText());let i=r[0],[s,o]=Se(t.expression),a=o;a=a.concat(X(`for ${i} in `,s,":"));let l=L(t.statement);return a=a.concat(l),a}function R(e){let n=_(e);if(n){let{name:t,fromIncl:r,toExcl:i}=n,s="0"===r?`for ${t} in range(${i}):`:`for ${t} in range(${r}, ${i}):`,o=L(e.statement);return[s].concat(o)}let r,i=[];if(e.initializer)if(ts.isVariableDeclarationList(e.initializer)){let t=e.initializer.declarations.map(V).reduce(((e,t)=>e.concat(t)),[]);i=i.concat(t)}else{let[t,n]=Se(e.initializer);i=i.concat(n).concat(t)}if(e.condition){let[t,n]=Se(e.condition);i=i.concat(n),r=J(t)}else r="True";let s=`while ${r}:`;i.push(s);let o=C(e.statement).map(t.indent1);if(0!==o.length||e.incrementor||(o=[t.indent1("pass")]),i=i.concat(o),e.incrementor){let n=B(e.incrementor);if(n)i=i.concat(n.map(t.indent1));else{let[n,r]=Se(e.incrementor);i=i.concat(r).concat(n.map(t.indent1))}}return i}function O(e){let{supportStmts:t,ifStmt:n,rest:r}=D(e);return t.concat([n]).concat(r)}function D(e){let t=[],[n,r]=Se(e.expression);t=t.concat(r);let i=`if ${J(n)}:`,s=[],o=L(e.thenStatement);if(s=s.concat(o),e.elseStatement)if(ts.isIfStatement(e.elseStatement)){let{supportStmts:n,ifStmt:r,rest:i}=D(e.elseStatement),o=`el${r}`;t=t.concat(n),s.push(o),s=s.concat(i)}else{s.push("else:");let t=L(e.elseStatement);s=s.concat(t)}return{supportStmts:t,ifStmt:i,rest:s}}function $(e){return e.declarationList.declarations.map(V).reduce(((e,t)=>e.concat(t)),[])}function q(t){return e.tickEvent("depython.todo.classes"),n(t,3016,"Unsupported: classes are not supported in Python right now.")}function M(r){let i=[];i.push(`class ${x(r.name)}(Enum):`);let s=r.members.every((e=>!!e.initializer)),o=!r.members.every((e=>!!e.initializer));if(!s&&!o)return e.tickEvent("depython.todo.enummix"),n(r,3005,"Unsupported enum decleration: has mixture of explicit and implicit initialization");if(s)return e.tickEvent("depython.todo.enuminit"),n(r,3006,"Unsupported: explicit enum initialization");let a=0;for(let e of r.members)i.push(t.indent1(`${x(e.name)} = ${a++}`));return i}function G(e){return!(!ts.isPrefixUnaryExpression(e)&&!ts.isPostfixUnaryExpression(e))&&(e.operator===ts.SyntaxKind.MinusMinusToken||e.operator===ts.SyntaxKind.PlusPlusToken)}function B(e){if(!G(e))return null;let[t,n]=Se(e.operand),r=e.operator===ts.SyntaxKind.MinusMinusToken?" -= 1":" += 1",i=n;return i.push(`${J(t)}${r}`),i}function z(e){let t=B(e.expression);if(t)return t;const[n,r]=Se(e.expression);return r.length?["",...r,...n,""]:[...r,...n]}function Q(e){return e.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[])}function W(r,i,s,o){let a=[];r.kind!==ts.SyntaxKind.MethodDeclaration&&r.kind!==ts.SyntaxKind.Constructor||a.push("self");let l=(s?oe(r.parameters,s):r.parameters).map((e=>j(e,!o)));a=a.concat(l);let u,c=a.join(", "),p=[];if(i)u=i;else{if(!r.name)return e.tickEvent("depython.todo.anonymousfunc"),n(r,3012,"Unsupported: anonymous function decleration");u=x(r.name)}if(p.push(`def ${u}(${c}):`),!r.body)return e.tickEvent("depython.todo.funcwithoutbody"),n(r,3013,"Unsupported: function decleration without body");let f=[];if(ts.isBlock(r.body))f=Q(r.body);else{let[e,t]=Se(r.body);f=f.concat(t),f.concat(e)}if(f.length){let e=m.getExplicitGlobals(r).map((e=>x(e)));e&&e.length&&f.unshift(`global ${e.join(", ")}`);let n=m.getExplicitNonlocals(r).map((e=>x(e)));n&&n.length&&f.unshift(`nonlocal ${n.join(", ")}`),p=p.concat(f.map(t.indent1))}else p.push(t.indent1("pass"));return p}function j(t,r=!0){let i=t.altName||x(t.name),s="";if(t.type&&r){let e=pxtc.emitPyTypeFromTypeNode(t.type);e&&-1===e.indexOf("(TODO")&&(s=`: ${e}`)}let o="";if(t.initializer){let[r,i]=Se(t.initializer);if(i.length)return e.tickEvent("depython.todo.complexinit"),n(t,3007,`Unsupported: complex expression in parameter default value not supported. Expression: ${t.initializer.getText()}`);o=` = ${J(r)}`}return`${i}${s}${o}`}function V(e){let t=[],n=x(e.name);if(e.initializer){let r,[i,s]=Se(e.initializer);if(t=t.concat(s),e.type){r=`${n}: ${pxtc.emitPyTypeFromTypeNode(e.type)} = ${J(i)}`}else r=`${n} = ${J(i)}`;return t.push(r),t}return t}function H(e,t){return[[e],t||[]]}function J(e,t="\n"){return e.join(t)}function X(e="",t,n=""){return t[0]=e+t[0],t[t.length-1]=t[t.length-1]+n,t}function Y(t,r){switch(t){case ts.SyntaxKind.BarBarToken:return"or";case ts.SyntaxKind.AmpersandAmpersandToken:return"and";case ts.SyntaxKind.ExclamationToken:return"not";case ts.SyntaxKind.LessThanToken:return"<";case ts.SyntaxKind.LessThanEqualsToken:return"<=";case ts.SyntaxKind.GreaterThanToken:return">";case ts.SyntaxKind.GreaterThanEqualsToken:return">=";case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsToken:return"==";case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:return"!=";case ts.SyntaxKind.EqualsToken:return"=";case ts.SyntaxKind.PlusToken:return"+";case ts.SyntaxKind.MinusToken:return"-";case ts.SyntaxKind.AsteriskToken:return"*";case ts.SyntaxKind.PlusEqualsToken:return"+=";case ts.SyntaxKind.MinusEqualsToken:return"-=";case ts.SyntaxKind.PercentToken:return"%";case ts.SyntaxKind.SlashToken:return"/";case ts.SyntaxKind.PlusPlusToken:case ts.SyntaxKind.MinusMinusToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,"Unsupported ++ and -- in an expression (not a statement or for loop)");case ts.SyntaxKind.AmpersandToken:return"&";case ts.SyntaxKind.CaretToken:return"^";case ts.SyntaxKind.LessThanLessThanToken:return"<<";case ts.SyntaxKind.GreaterThanGreaterThanToken:return">>";case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3009,"Unsupported operator: >>>");case ts.SyntaxKind.AsteriskAsteriskToken:return"**";case ts.SyntaxKind.AsteriskAsteriskEqualsToken:return"**=";case ts.SyntaxKind.PercentEqualsToken:return"%=";case ts.SyntaxKind.AsteriskEqualsToken:return"*=";case ts.SyntaxKind.SlashEqualsToken:return"/=";default:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,`Unsupported Python operator (code: ${t})`)}}function Z(e){let t=S(e.left),n=S(e.right),r=e.operatorToken.kind===ts.SyntaxKind.PlusToken&&(t||n),[i,s]=Se(e.left);r&&!t&&(i=X("str(",i,")"));let o=Y(e.operatorToken.kind,e),[a,l]=Se(e.right);r&&!n&&(a=X("str(",a,")"));let u=s.concat(l);return[X(J(i)+" "+o+" ",a),u]}function ee(e){let t=k(e);if(t)return H(t);let[n,r]=Se(e.expression),i=x(e.name);return H("length"===i?`len(${J(n)})`:`${J(n)}.${i}`,r)}function te(e){if(ts.isPropertyAccessExpression(e)){let t=x(e.name),n=t.substr(t.lastIndexOf(".")+1);return ts.isIdentifier(e.expression)?[n]:te(e.expression).concat([n])}return ts.isIdentifier(e)?[x(e)]:[]}function ne(t,n,r,i){let o="";n&&(o=te(n).map(e.U.snakify).join("_"));let a=[];if(r&&r.length>1&&i&&i.length>1)for(let t=0;t<r.length&&t<i.length;t++){let n=i[t];if(g(s.getTypeAtLocation(n),ts.TypeFlags.EnumLike)){let t=te(n).map(e.U.snakify);a=a.concat(t)}}let l=a.join("_"),u="";o||l||!t||(u=x(t.name));let c=([o,l,u].filter((e=>e)).map(e.U.snakify).map((e=>e.toLowerCase())).join("_")||"my_callback").split("_");c.length>4&&(c=f(c));let p=e.U.toDictionary(["any","on","event"],(e=>e));for(;c.length>2;){let e=m(c,p);if(e.length==c.length)break;c=e}return c=["on",...c],c.join("_");function f(e){let t={},n=[];for(let r of e)r in t||(t[r]=!0,n.push(r));return n}function m(e,t){let n=[],r=!1;for(let i of e)!(i in t)||r?n.push(i):r=!0;return n}}function re(e){let n=e.join(", ");return n.length>60&&e.length>1?e.map(((n,r)=>{let i=","==n.charAt(n.length-1)?"":",";if(0==r){let e=n.split("\n");if(e.length>1){n=e.shift()+"\n"+t.indent1(e.join("\n"))}return n+i}return r==e.length-1?t.indent1(n):t.indent1(n+i)})):[n]}function ie(e,t,n,r,i){if((ts.isFunctionExpression(e)||ts.isArrowFunction(e))&&t&&t.type&&ts.isFunctionTypeNode(t.type)){let s;return ae(e,ne(t,n,r,i),s,!0)}return Se(e)}function se(t){let r=s.getTypeAtLocation(t.expression),i=s.typeToTypeNode(r),o=ts.createNodeArray([]);if(ts.isFunctionTypeNode(i)&&(o=i.parameters,t.arguments&&o.length<t.arguments.length))return e.tickEvent("depython.todo.argparammismatch",{kind:t.kind}),n(t,3010,"TODO: Unsupported call site where caller the arguments outnumber the callee parameters: "+t.getText());const a=y(t.expression);if(t.arguments&&a&&"TD_ID"==a.attributes.shim)return Se(t.arguments[0]);if(ts.isPropertyAccessExpression(t.expression)&&"toString"===t.expression.name.getText()){const[e,n]=Se(t.expression.expression);return[X("str(",e,")"),n]}let[l,u]=Se(t.expression),c=J(l),p=(t.arguments||ts.createNodeArray()).map(((e,n,r)=>ie(e,o[n],t.expression,o,r))),f=p.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),u);if(0===c.indexOf("_py.py_")){if(p.length<=0)return e.tickEvent("depython.todo._pynoargs"),n(t,3014,"Unsupported: call expression has no arguments for _py.py_ fn");c=c.substr(7).split("_").filter(((e,t)=>0!==t)).join("_");return[X(`${p.shift()[0]}.${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}return[X(`${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}function oe(e,t){let n=[],r={};for(let i=0;i<Math.max(e.length,t.length);i++){let s;if(e[i])s=e[i],r[x(s.name)]=!0;else{s=t[i];let e=x(s.name);r[e]&&(e=pxtc.decompiler.getNewName(e,r),s=Object.assign({altName:e},t[i]))}n.push(s)}return ts.createNodeArray(n,!1)}function ae(e,t,n,r){let i=e.name?x(e.name):T(t||"my_function");return H(i,W(e,i,n,r))}function le(e){switch(e){case ts.SyntaxKind.ExclamationToken:return" ";case ts.SyntaxKind.PlusToken:case ts.SyntaxKind.MinusToken:return"";default:return" "}}function ue(e){let t=Y(e.operator,e),[n,r]=Se(e.operand);return H(`${t}${le(e.operator)}${J(n)}`,r)}function ce(e){let t=Y(e.operator,e),[n,r]=Se(e.operand),i=le(e.operator);return H(`${J(n)}${i}${t}`,r)}function pe(e){let t=e.elements.map(Se),n=t.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),[]);return[X("[",re(t.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),"]"),n]}function fe(t){if(!t.argumentExpression)return e.tickEvent("depython.todo.accesswithoutexp"),n(t,3015,"Unsupported: element access expression without an argument expression");let[r,i]=Se(t.expression),[s,o]=Se(t.argumentExpression),a=i.concat(o);return H(`${J(r)}[${J(s)}]`,a)}function me(e){let[t,n]=Se(e.expression);return H(`(${J(t)})`,n)}function de(e){if(ts.isNoSubstitutionTemplateLiteral(e))return H(`"""\n${t.indent1(e.text.trim())}\n"""`);let[n,r]=Se(e.tag),[i,s]=Se(e.template),o=r.concat(s);return H(`${J(n)}(${J(i)})`,o)}function ye(e){if("undefined"==e.text)return H("None");return H(x(e))}function ke(e,t){let n=e=>ke(e,t);return ts.isBinaryExpression(e)?n(e.left)&&n(e.right):ts.isPropertyAccessExpression(e)?n(e.expression):ts.isPrefixUnaryExpression(e)||ts.isPostfixUnaryExpression(e)?e.operator!==ts.SyntaxKind.PlusPlusToken&&e.operator!==ts.SyntaxKind.MinusMinusToken&&n(e.operand):ts.isParenthesizedExpression(e)?n(e.expression):ts.isArrayLiteralExpression(e)?e.elements.map(n).reduce(((e,t)=>e&&t),!0):ts.isElementAccessExpression(e)?n(e.expression)&&(!e.argumentExpression||n(e.argumentExpression)):t(e)}function xe(e){return e.parent?e.parent.kind===ts.SyntaxKind.ParenthesizedExpression?xe(e.parent):e.parent:void 0}function Te(e){if("any"===e.type.getText().trim()&&(ts.isNumericLiteral(e.expression)||ts.isStringLiteral(e.expression)||e.expression.kind===ts.SyntaxKind.TrueKeyword||e.expression.kind===ts.SyntaxKind.FalseKeyword)){const t=xe(e);if((null==t?void 0:t.kind)===ts.SyntaxKind.BinaryExpression)switch(t.operatorToken.kind){case ts.SyntaxKind.EqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.LessThanToken:case ts.SyntaxKind.LessThanEqualsToken:case ts.SyntaxKind.GreaterThanToken:case ts.SyntaxKind.GreaterThanEqualsToken:return!0}}return!1}function ge(e){return ke(e,(e=>{switch(e.kind){case ts.SyntaxKind.PropertyAccessExpression:case ts.SyntaxKind.BinaryExpression:case ts.SyntaxKind.ParenthesizedExpression:case ts.SyntaxKind.ArrayLiteralExpression:case ts.SyntaxKind.ElementAccessExpression:case ts.SyntaxKind.TrueKeyword:case ts.SyntaxKind.FalseKeyword:case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:case ts.SyntaxKind.NumericLiteral:case ts.SyntaxKind.StringLiteral:case ts.SyntaxKind.NoSubstitutionTemplateLiteral:return!0;case ts.SyntaxKind.CallExpression:case ts.SyntaxKind.NewExpression:case ts.SyntaxKind.FunctionExpression:case ts.SyntaxKind.ArrowFunction:case ts.SyntaxKind.Identifier:case ts.SyntaxKind.ThisKeyword:return!1;case ts.SyntaxKind.PrefixUnaryExpression:case ts.SyntaxKind.PostfixUnaryExpression:let t=e;return t.operator!==ts.SyntaxKind.PlusPlusToken&&t.operator!==ts.SyntaxKind.MinusMinusToken}return!1}))}function he(e){let[t,n]=Se(e.condition),[r,i]=Se(e.whenTrue),[s,o]=Se(e.whenFalse),a=n.concat(i).concat(o);return H(`${r} if ${J(t)} else ${J(s)}`,a)}function Se(t){if(ts.isBinaryExpression(t))return Z(t);if(ts.isPropertyAccessExpression(t))return ee(t);if(ts.isCallExpression(t))return se(t);if(ts.isNewExpression(t))return se(t);if(ts.isFunctionExpression(t)||ts.isArrowFunction(t))return ae(t);if(ts.isPrefixUnaryExpression(t))return ue(t);if(ts.isPostfixUnaryExpression(t))return ce(t);if(ts.isParenthesizedExpression(t))return me(t);if(ts.isArrayLiteralExpression(t))return pe(t);if(ts.isElementAccessExpression(t))return fe(t);if(ts.isNoSubstitutionTemplateLiteral(t)||ts.isTaggedTemplateExpression(t))return de(t);switch(t.kind){case ts.SyntaxKind.TrueKeyword:return H("True");case ts.SyntaxKind.FalseKeyword:return H("False");case ts.SyntaxKind.ThisKeyword:return H("self");case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:return H("None")}return ts.isIdentifier(t)?ye(t):ts.isNumericLiteral(t)||ts.isStringLiteral(t)?H(t.getText()):ts.isConditionalExpression(t)?he(t):ts.isAsExpression(t)&&Te(t)?Se(t.expression):(e.tickEvent("depython.todo.expression",{kind:t.kind}),n(t,3017,"Unsupported expression kind: "+t.kind))}}(r,i),a=i.replace(/(\.py)?\.\w*$/i,"")+".py";s.outfiles[a]=o}catch(t){t.pyDiagnostic?s.diagnostics=[t.pyDiagnostic]:e.reportException(t),s.success=!1}return s};function r(e){return n=>(n||"").split("\n").map((n=>`${t.INDENT.repeat(e)}${n}`)).join("\n")}t.INDENT=" ",t.indent=r,t.indent1=r(1)}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){!function(e){const t=/[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;e.isIdentifierStart=function(e){return ts.pxtc.isIdentifierStart(e,ts.pxtc.ScriptTarget.ES5)},e.isIdentifierChar=function(e){return ts.pxtc.isIdentifierPart(e,ts.pxtc.ScriptTarget.ES5)},e.isSpace=function(e){return!!(32===e||9===e||11===e||12===e||160===e||e>=5760&&t.test(String.fromCharCode(e)))},e.isNewline=function(e){return 10===e||13===e||(8232===e||8233===e)}}(e.rx||(e.rx={}))}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){function t(e){const t={refs:[],children:[],owner:void 0};return function e(r){var i;if(!r)return t;if(ts.isPropertyAccessOrQualifiedName(r))return t;if(ts.isIdentifier(r))return{refs:[{kind:"read",node:r,varName:r.text}],children:[],owner:void 0};if(ts.isVariableDeclaration(r)||ts.isParameter(r)){const t=e(r.initializer);return{refs:[...t.refs,{kind:"decl",node:r,varName:r.name.getText()}],children:t.children,owner:void 0}}if(ts.isPrefixUnaryExpression(r)||ts.isPostfixUnaryExpression(r)){const t=e(r.operand),i=r.operand.getText();return n(t,{refs:[{kind:"assign",node:r,varName:i}],children:[],owner:void 0})}if(function(e){const t=[ts.SyntaxKind.EqualsToken,ts.SyntaxKind.PlusEqualsToken,ts.SyntaxKind.MinusEqualsToken,ts.SyntaxKind.AsteriskEqualsToken,ts.SyntaxKind.AsteriskAsteriskEqualsToken,ts.SyntaxKind.SlashEqualsToken,ts.SyntaxKind.PercentEqualsToken,ts.SyntaxKind.LessThanLessThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,ts.SyntaxKind.AmpersandEqualsToken,ts.SyntaxKind.BarEqualsToken,ts.SyntaxKind.CaretEqualsToken];return ts.isBinaryExpression(e)&&t.some((t=>e.operatorToken.kind===t))}(r)){const t=e(r.right);let i;r.operatorToken.kind!==ts.SyntaxKind.EqualsToken&&(i=e(r.left));const s=r.left.getText();return n(i,n(t,{refs:[{kind:"assign",node:r,varName:s}],children:[],owner:void 0}))}if(ts.isFunctionExpression(r)||ts.isArrowFunction(r)||ts.isFunctionDeclaration(r)||ts.isMethodDeclaration(r)){const s=null===(i=r.name)||void 0===i?void 0:i.getText();let o;s&&(o={kind:"decl",node:r,varName:s});const a=r.parameters.map((t=>e(t))).reduce(n,t),l=e(r.body),u=n(a,l);return u.owner=r,{refs:o?[o]:[],children:[u],owner:void 0}}return r.getChildren().map(e).reduce(n,t)}(e);function n(e,n){return e&&n?{refs:[...e.refs,...n.refs],children:[...e.children,...n.children],owner:e.owner||n.owner}:e||n||t}}function n(e,t,r=[]){const i=[],s=[],o=[],a=[],l={};for(const n of e.refs)"read"===n.kind||"assign"===n.kind?l[n.varName]?o.push(n):p(n)?s.push(n):t&&t[n.varName]?i.push(n):a.push(n):l[n.varName]=n;const u=t||l,c=t?[...r,l]:[];return{globalUsage:i,nonlocalUsage:s,localUsage:o,environmentUsage:a,children:e.children.map((e=>n(e,u,c))),owner:e.owner};function p(e){return r.map((t=>t[e.varName])).reduce(((e,t)=>t||e),void 0)}}function r(e){return`${e.kind}:${e.varName}`}e.computeScopeVariableLookup=function(e){const r=n(t(e)),i=new Map,s=new Map;return function e(t){const n=a((r=t,[...r.globalUsage,...r.environmentUsage].filter((e=>"assign"===e.kind)).map((e=>e))));var r;i.set(t.owner,n);const o=a(function(e){return e.nonlocalUsage.filter((e=>"assign"===e.kind)).map((e=>e))}(t));s.set(t.owner,o),t.children.forEach(e)}(r),{getExplicitGlobals:e=>i.get(e)||[],getExplicitNonlocals:e=>s.get(e)||[]};function o(e){let t=e.node.operand||e.node.left;return ts.isIdentifier(t)?t:void 0}function a(e){return e.map(o).filter((e=>!!e)).map((e=>e)).reduce(((e,t)=>e.find((e=>e.text===t.text))?e:[...e,t]),[])}},e.toStringVariableScopes=function(i){const s=t(i),o=n(s);return function t(n){return[n.refs.map(r).join(", "),...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])]}(s).join("\n")+"\n\n\n"+function(t){return function t(n){const i=n.globalUsage.map(r).join(", "),s=n.nonlocalUsage.map(r).join(", "),o=n.localUsage.map(r).join(", "),a=n.environmentUsage.map(r).join(", ");return[i?"global "+i:"",s?"nonlocal "+s:"",o?"local "+o:"",a?"env "+a:"",...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])].filter((e=>!!e))}(t).join("\n")}(o)}}(e.py||(e.py={}))}(pxt||(pxt={}));
1
+ var pxt;!function(e){!function(e){let t;!function(e){e[e.NonLocal=0]="NonLocal",e[e.Global=1]="Global"}(t=e.VarModifier||(e.VarModifier={})),e.isIndex=function(e){return"Index"===e.kind},e.isSubscript=function(e){return"Subscript"===e.kind}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){var n=e.blocks;let r,i,s,o,a,l,u,c,p,f,m=0,d=0,y=0,k="???";function x(e){return null==e}function T(e){return null!=e}function g(t){return e.tickEvent("python.todo.statement",{kind:t.kind}),n.mkStmt(n.mkText("TODO: "+t.kind))}function h(t){return e.tickEvent("python.todo.expression",{kind:t.kind}),n.mkText(" {TODO: "+t.kind+"} ")}const S=L({primType:"string"}),v=L({primType:"number"}),b=L({primType:"boolean"}),E=L({primType:"void"}),N=L({primType:"any"});let U;const C={str:S,string:S,number:v,bool:b,void:E,any:N};function A(e){switch(e){case ts.SyntaxKind.StringKeyword:return S;case ts.SyntaxKind.NumberKeyword:return v;case ts.SyntaxKind.BooleanKeyword:return b;case ts.SyntaxKind.VoidKeyword:return E;case ts.SyntaxKind.AnyKeyword:return N;default:return U}}function w(t){let n=e.U.flatClone(t);return delete n.pyAST,delete n.pyInstanceType,delete n.pyRetType,delete n.pySymbolType,delete n.moduleTypeMarker,delete n.declared,n.parameters&&(n.parameters=n.parameters.map((t=>(delete(t=e.U.flatClone(t)).pyType,t)))),n}function P(t){if("("==t[0]&&e.U.endsWith(t,")"))return P(t.slice(1,-1));const n=t.indexOf(" => ");if(n>0){const e=t.slice(n+4);if(-1==e.indexOf(")[]")){const r=P(e),i=t.slice(1,n-1);return R(r,(i?i.split(/, /):[]).map((e=>P(e.replace(/\w+\??: /,"")))))}}if(e.U.endsWith(t,"[]"))return F(P(t.slice(0,-2)));if("_py.Array"===t)return F(N);const r=e.U.lookup(C,t);if(r)return r;if(!!t&&!isNaN(t))return v;if("T"==t||"U"==t)return L({primType:"'"+t});if(t.indexOf("|")>=0){return L({primType:"@union",typeArgs:t.split("|").map((e=>e.trim())).map(P)})}let i=K(t+"@type")||K(t);return i?7==i.kind?v:8==i.kind||9==i.kind?i.pyInstanceType||L({classType:i}):6==i.kind?v:(H(null,9502,e.U.lf("'{0}' is not a type near '{1}'",t,k||"???")),L({primType:t})):(H(null,9501,e.U.lf("unknown type '{0}' near '{1}'",t,k||"???")),L({primType:t}))}function I(t){if(!t.pySymbolType){if(k=t.pyQName,t.parameters){pxtc.service.isTaggedTemplate(t)&&(t.parameters=[{name:"literal",description:"",type:"string",options:{}}]);for(let e of t.parameters)e.pyType||(e.pyType=P(e.type))}const n=t.pyRetType;if(xe(t)?t.pyRetType=L({moduleType:t}):t.retType?t.pyRetType=P(t.retType):t.pyRetType||(e.U.oops("no type for: "+t.pyQName),t.pyRetType=L({})),n&&ee(t.pyAST,n,t.pyRetType),3==t.kind||1==t.kind){let n=t.parameters.map((e=>e.pyType));if(n.some(x))return H(null,9526,e.U.lf("function symbol is missing parameter types near '{1}'",k||"???")),L({});t.pySymbolType=R(t.pyRetType,n.filter(T))}else t.pySymbolType=t.pyRetType;8!=t.kind&&9!=t.kind||(t.pyInstanceType=L({classType:t})),k=void 0}return t.pySymbolType}function K(t){return e.U.lookup(i,t)||e.U.lookup(r,t)}function _(e){if(!e)return;let t=K(e);return t&&I(t),t}function L(t={}){let n=e.U.flatClone(t);return n.tid=++d,n}function F(e){return L({primType:"@array",typeArgs:[e]})}function R(e,t){return L({primType:"@fn"+t.length,typeArgs:[e].concat(t)})}function O(t){return!!e.U.startsWith(t.primType||"","@fn")}function D(t){return!!t.primType&&!e.U.startsWith(t.primType,"@")}function $(t){return!!e.U.startsWith(t.primType||"","@union")}function q(){return s.currFun||s.currClass||s.currModule}function M(){let e=q();for(;e&&e.parent;)e=e.parent;return e}function G(){return"main"==s.currModule.name&&!s.currFun&&!s.currClass}function B(t,n,r){const i=_(n);return i||H(t,9503,e.U.lf("No module named '{0}'",n)),i}function z(e,n,r,i){i||(i=q());let s=i.vars[e],o=null==s?void 0:s.symbol;if(!o){let n=W(i);n&&(n+=".");let a=n+e;o=!ae(i)||r!==t.VarModifier.Global&&r!==t.VarModifier.NonLocal?ae(i)?se(4,e):oe(4,a):oe(4,e),s={symbol:o,modifier:r},i.vars[e]=s}for(let e of Object.keys(n))o[e]=n[e];return s}function Q(e){return e.unifyWith?(e.unifyWith=Q(e.unifyWith),e.unifyWith):e}function W(e){let t=e,n="";t.parent&&"FunctionDef"!==t.parent.kind&&"AsyncFunctionDef"!==t.parent.kind&&(n=W(t.parent),n?n+=".":n="");let r=e;return"Module"==e.kind&&"main"==r.name?"":r.name?n+r.name:n+"?"+e.kind}function j(t){let n=e.U.lookup(Ue,t);if(n)return n;for(let n of e.U.values(s.currModule.vars)){let r=n.symbol;if(r.isImport){if(r.expandsTo==t)return r.pyName||H(null,9553,lf("missing pyName")),r.pyName;if(r.isImport&&e.U.startsWith(t,(r.expandsTo||"")+"."))return r.pyName+t.slice(r.expandsTo.length)}}return t}function V(e){return(e=Q(e)).primType?e.typeArgs&&"@array"==e.primType?V(e.typeArgs[0])+"[]":O(e)&&e.typeArgs?"("+e.typeArgs.slice(1).map((e=>"_: "+V(e))).join(", ")+") => "+V(e.typeArgs[0]):$(e)&&e.typeArgs?e.typeArgs.map(V).join(" | "):e.primType+"":e.classType&&e.classType.pyQName?j(e.classType.pyQName)+"":e.moduleType&&e.moduleType.pyQName?j(e.moduleType.pyQName)+"":"any"}function H(e,t,n){l.push(function(e,t,n,r){return e||(e=o),e&&s&&s.currModule?{fileName:a,start:e.startPos,length:e.endPos-e.startPos,line:void 0,column:void 0,code:n,category:t,messageText:r}:{fileName:a,start:0,length:0,line:void 0,column:void 0,code:n,category:t,messageText:r}}(e,pxtc.DiagnosticCategory.Error,t,n))}function J(e){return e.primType?e.primType:e.classType?e.classType:e.moduleType?(e.moduleType.moduleTypeMarker||(e.moduleType.moduleTypeMarker={}),e.moduleType.moduleTypeMarker):null}function X(e){return!J(Q(e))}function Y(t,n,r){var i;(n=Q(n)).classType!=r&&(X(n)?n.classType=r:ee(t,n,(I(i=r),i.pyInstanceType||H(null,9527,e.U.lf("Instance type symbol '{0}' is missing pyInstanceType",i)),i.pyInstanceType)))}function Z(e,t){ee(e,ke(e),t)}function ee(t,n,r){if(n===r)return;if((n=Q(n))===(r=Q(r))||ie(n)||ie(r))return;if("any"===n.primType)return void(n.unifyWith=r);const i=J(n),s=J(r);if(i&&s)if(i===s){if(n.unifyWith=r,n.typeArgs&&r.typeArgs)for(let e=0;e<Math.min(n.typeArgs.length,r.typeArgs.length);++e)ee(t,n.typeArgs[e],r.typeArgs[e]);n.unifyWith=r}else!function(t,n,r){H(t,9500,e.U.lf("types not compatible: {0} and {1}",V(n),V(r)))}(t,n,r);else i&&!s?ee(t,r,n):(y++,n.unifyWith=r)}function te(e,t){const n=Q(e),r=Q(t);if(n===r)return!0;const i=J(n),s=J(r);if(i===s)return!0;if(i&&s){if(re(i)&&re(s)&&i.extendsTypes&&i.extendsTypes.length&&i.extendsTypes.some((e=>e===s.qName)))return!0;if($(r)){for(let e of r.typeArgs||[])if(te(n,e))return!0;return!1}}return!1}function ne(e,t){const n=Q(ke(e)),r=Q(t);te(n,r)||(O(n)||O(r)||D(n)||D(r))&&ee(e,n,r)}function re(e){var t;return!!(null===(t=e)||void 0===t?void 0:t.name)}function ie(e){var t;return!!(null===(t=null==e?void 0:e.primType)||void 0===t?void 0:t.startsWith("'"))}function se(e,t){let n=/(.*)\.(.*)/.exec(t),r=n?n[2]:t;return{kind:e,name:r,pyName:r,qName:t,pyQName:t,namespace:n?n[1]:"",attributes:{},pyRetType:L()}}function oe(t,n){let r=i[n];return r?(r.kind=t,r):(r=se(t,n),r.pyQName||H(null,9527,e.U.lf("Symbol '{0}' is missing pyQName",n)),i[r.pyQName]=r,r)}function ae(e){let t=e;for(;t;){if("FunctionDef"==t.kind)return!0;t=t.parent}return!1}function le(t,n,r){if(!n.symInfo){let i=W(n);e.U.endsWith(i,".__init__")&&(i=i.slice(0,-9)+".__constructor"),ae(r=r||q())?n.symInfo=se(t,i):n.symInfo=oe(t,i);const s=n.symInfo;s.pyAST=n,s.pyName||H(null,9528,e.U.lf("Symbol '{0}' is missing pyName",s.qName||s.name)),r.vars[s.pyName]={symbol:s}}return n.symInfo}function ue(t){let n=t.symInfo.qName;return e.U.values(i).filter((e=>e.namespace==n&&2==e.kind))}function ce(t,n,r=!1,i=!1){let s=t.pyQName+"."+n,o=_(s);if(o)return o;if(!i)for(let r of t.extendsTypes||[]){let i=_(r);if(i){i==t&&e.U.userError("field lookup loop on: "+i.qName+" / "+n);let r=ce(i,n,!0);if(r)return r}}if(!r&&t.pyAST&&"ClassDef"==t.pyAST.kind){let e=oe(2,s);return e.isInstance=!0,e}return null}function pe(t,n,r=!1){const i=ke(t),o=function(e){let t=Q(e);return[t.classType,...fe(t.primType),t.moduleType].filter(T)}(i);for(let l of o){let o=ce(l,n,r);if(o){return!!i.moduleType?o.isInstance&&H(null,9505,e.U.lf("the field '{0}' of '{1}' is not static",n,l.pyQName)):(o.isInstance||H(null,9504,e.U.lf("the field '{0}' of '{1}' is static",n,l.pyQName)),qe(a=t,"super")&&0==a.args.length?o.isProtected=!0:ze(t)&&(s.currClass||H(null,9529,e.U.lf("no class context found for {0}",o.pyQName)),o.namespace!=s.currClass.symInfo.qName&&(o.isProtected=!0))),o}}var a;return null}function fe(e){let t=[];return"@array"==e?t=[K("_py.Array"),K("Array")]:"string"==e&&(t=[K("_py.String"),K("String")]),t.filter((e=>!!e))}function me(t){let n=q(),r=e.U.lookup(n.vars,t);if(r)return r;for(;n;){let r=e.U.lookup(n.vars,t);if(r)return r;do{n=n.parent}while(n&&"ClassDef"==n.kind)}return null}function de(e){if(!e)return null;const t=e.indexOf(".");if(t>0){const n=me(e.slice(0,t)),r=null==n?void 0:n.symbol;r&&r.pyQName!=r.pyName&&(e=r.pyQName+e.slice(t))}else{const t=me(e);if(t)return t}let n=_(e);return n?{symbol:n}:void 0}function ye(e){var t;return null===(t=de(e))||void 0===t?void 0:t.symbol}function ke(e){return e.tsType?Q(e.tsType):(e.tsType=L(),e.tsType)}function xe(e){if(!e)return!1;switch(e.kind){case 5:case 9:case 8:case 6:return!0;default:return!1}}function Te(t){const n=e.U.flatClone(s);let r;try{r=t()}finally{s=n}return r}function ge(e,t){return 0==t.length?n.mkText(""):n.mkGroup([n.mkText("/* TODO: "+e+" "),n.mkGroup(t),n.mkText(" */"),n.mkNewLine()])}function he(e){let t=et(e.value);return e.arg?n.mkInfix(n.mkText(e.arg),"=",t):n.mkGroup([n.mkText("**"),t])}function Se(n){if(!n)return L();let r=Oe(n);if(r){let t=K(r+"@type")||K(r);if(t){if(I(t),6==t.kind)return v;if(t.pyInstanceType)return t.pyInstanceType}else if(C[r])return C[r];H(n,9506,e.U.lf("cannot find type '{0}'",r))}else if(t.isSubscript(n)){if("List"===Oe(n.value)&&t.isIndex(n.slice)){return F(Se(n.slice.value))}}return H(n,9507,e.U.lf("invalid type syntax")),L({})}const ve={Sub:1,Div:1,Pow:1,LShift:1,RShift:1,BitOr:1,BitXor:1,BitAnd:1,FloorDiv:1,Mult:1},be={Eq:1,NotEq:1,Lt:1,LtE:1,Gt:1,GtE:1},Ee={Add:"+",Sub:"-",Mult:"*",MatMult:"Math.matrixMult",Div:"/",Mod:"%",Pow:"**",LShift:"<<",RShift:">>",BitOr:"|",BitXor:"^",BitAnd:"&",FloorDiv:"Math.idiv",And:"&&",Or:"||",Eq:"==",NotEq:"!=",Lt:"<",LtE:"<=",Gt:">",GtE:">=",Is:"===",IsNot:"!==",In:"py.In",NotIn:"py.NotIn"},Ne={Invert:"~",Not:"!",UAdd:"P+",USub:"P-"},Ue={"adafruit_bus_device.i2c_device.I2CDevice":"pins.I2CDevice"};function Ce(e){s.blockDepth++;const t=n.mkBlock(e.map(tt));return s.blockDepth--,t}function Ae(e){e.vars||(e.vars={},e.parent=q(),e.blockDepth=s.blockDepth)}function we(e,t=!1){return"any"===V(e)?t?n.mkText(": any"):n.mkText(""):n.mkText(": "+V(e))}function Pe(e,t){try{return Te(t)}catch(t){return console.log(t),n.mkStmt(ge(`conversion failed for ${e.name||e.kind}`,[]))}}function Ie(e){if(!e||!e.pyAST)return!1;if("FunctionDef"!=e.pyAST.kind)return!1;const t=e.pyAST;return!(!t.callers||1!=t.callers.length)&&!t.callers[0].inCalledPosition}function Ke(t,r=!1){return Pe(t,(()=>{const i=!!s.currClass&&!s.currFun,o=G(),a=!!s.currFun;Ae(t);const l=ye(W(t)),u=le(i?1:3,t);if(!r&&(l&&l.declared===m&&H(t,9520,lf("Duplicate function declaration")),u.declared=m,Ie(u)))return n.mkText("");i&&(u.isInstance=!0),s.currFun=t;let c="",p=t.name;let f=[ge("decorators",t.decorator_list.filter((e=>"property"==Oe(e)?(c="get",!1):"Attribute"!=e.kind||"setter"!=e.attr||"Name"!=e.value.kind||(p=e.value.id,c="set",!1))).map(et))];if(t.body.length>=1&&"Raise"==t.body[0].kind&&(t.alwaysThrows=!0),i)if(s.currClass||H(t,9531,lf("method '{0}' is missing current class context",u.pyQName)),u.pyRetType||H(t,9532,lf("method '{0}' is missing a return type",u.pyQName)),"__init__"==t.name)f.push(n.mkText("constructor")),Y(t,u.pyRetType,s.currClass.symInfo);else{if("__get__"==p||"__set__"==p){let e=t.vars.value,n=null==e?void 0:e.symbol;if("__set__"==p&&n){let e=ce(s.currClass.symInfo,"__get__");e&&e.pyAST&&"FunctionDef"==e.pyAST.kind&&ee(t,n.pyRetType,e.pyRetType)}p=p.replace(/_/g,"")}c||(c="_"==p[0]?u.isProtected?"protected":"private":"public"),f.push(n.mkText(c+" "),$e(p))}else e.U.assert(!c),"_"==t.name[0]||o||r||a?f.push(n.mkText("function "),$e(p)):f.push(n.mkText("export function "),$e(p));let d=t.returns?Se(t.returns):u.pyRetType;f.push(function(t,r){const i=t.args;i.kwonlyargs.length&&H(t,9517,e.U.lf("keyword-only arguments not supported yet"));let s=i.args.slice();if(r?("self"!=s[0].arg&&H(t,9518,e.U.lf("first argument of method has to be called 'self'")),s.shift()):s.some((e=>"self"==e.arg))&&H(t,9519,e.U.lf("non-methods cannot have an argument called 'self'")),!t.symInfo.parameters){let r=i.defaults.length-s.length;t.symInfo.parameters=s.map((s=>{s.annotation||H(t,9519,e.U.lf("Arg '{0}' missing annotation",s.arg));let o=Se(s.annotation),a="";return r>=0&&(a=n.flattenNode([et(i.defaults[r])]).output,ee(s,o,ke(i.defaults[r]))),r++,{name:s.arg,description:"",type:"",initializer:a,default:a,pyType:o}}))}let o=t.symInfo.parameters.map((r=>{let i=z(r.name,{isParam:!0}),s=null==i?void 0:i.symbol;r.pyType||H(t,9530,e.U.lf("parameter '{0}' missing pyType",r.name)),ee(t,I(s),r.pyType);let o=[$e(r.name),we(r.pyType,!0)];return r.default&&o.push(n.mkText(" = "+r.default)),n.mkGroup(o)}));return i.vararg&&o.push(n.mkText("TODO *"+i.vararg.arg)),i.kwarg&&o.push(n.mkText("TODO **"+i.kwarg.arg)),n.H.mkParenthesizedExpression(n.mkCommaSep(o))}(t,i),d&&Q(d)!=E?we(d):n.mkText("")),I(u);let y=t.body.map(tt);if("__init__"==t.name){s.currClass||H(t,9533,lf("__init__ method '{0}' is missing current class context",u.pyQName));for(let e of ue(s.currClass)){let t=e.pyAST;t&&t.value&&y.push(n.mkStmt(n.mkText(`this.${Re(e.pyName)} = `),et(t.value)))}}const k=st(t);f.push(n.mkBlock(k.concat(y)));let x=n.mkGroup(f);return r?f[f.length-1].noFinalNewline=!0:x=n.mkStmt(x),x}))}const _e={FunctionDef:e=>Ke(e),ClassDef:t=>Pe(t,(()=>{Ae(t);const r=le(8,t);e.U.assert(!s.currClass);let i=G();s.currClass=t,t.isNamespace=t.decorator_list.some((e=>"Name"==e.kind&&"namespace"==e.id));let o=t.isNamespace?[n.mkText("namespace "),$e(t.name)]:[ge("keywords",t.keywords.map(he)),ge("decorators",t.decorator_list.map(et)),n.mkText(i?"class ":"export class "),$e(t.name)];if(!t.isNamespace&&t.bases.length>0)if("Enum"==Oe(t.bases[0]))t.isEnum=!0;else{o.push(n.mkText(" extends ")),o.push(n.mkCommaSep(t.bases.map(et)));let e=function(e){let t=ye(De(e));return t&&t.pyAST&&"ClassDef"==t.pyAST.kind?t.pyAST:null}(t.bases[0]);e&&(t.baseClass=e,r.extendsTypes=[e.symInfo.pyQName])}let a=Ce(t.body);o.push(a);let l=ue(t).filter((e=>2==e.kind&&e.isInstance)).map((e=>(e.pyName&&e.pyRetType||H(t,9535,lf("field definition missing py name or ret type",e.qName)),e))).map((e=>n.mkStmt(function(e){return e.pyName&&"_"==e.pyName[0]?e.isProtected?n.mkText("protected "):n.mkText("private "):n.mkText("")}(e),$e(e.pyName),we(e.pyRetType))));return a.children=l.concat(a.children),n.mkStmt(n.mkGroup(o))})),Return:e=>{if(e.value){let t=s.currFun;return t&&(t.symInfo.pyRetType||H(e,9536,lf("function '{0}' missing return type",t.symInfo.pyQName)),Z(e.value,t.symInfo.pyRetType)),n.mkStmt(n.mkText("return "),et(e.value))}return n.mkStmt(n.mkText("return"))},AugAssign:e=>{let t=Ee[e.op];return t.length>3?n.mkStmt(n.mkInfix(et(e.target),"=",n.H.mkCall(t,[et(e.target),et(e.value)]))):n.mkStmt(et(e.target),n.mkText(" "+t+"= "),et(e.value))},Assign:e=>Le(e),AnnAssign:e=>Le(e),For:t=>{if(e.U.assert(0==t.orelse.length),t.target.forTargetEndPos=t.endPos,qe(t.iter,"range")){let e=t.iter,r=et(t.target),i=$e(De(t.target));Z(t.target,v);let s=1==e.args.length?n.mkText("0"):et(e.args[0]),o=et(e.args[1==e.args.length?0:1]);if(e.args.length<=2)return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,"<",o),n.mkText("; "),n.mkPostfix([i],"++"),n.mkText(")"),Ce(t.body));let a="Num"===e.args[2].kind?e.args[2].n:void 0;if(null==a&&"UnaryOp"===e.args[2].kind){const t=e.args[2];"Num"===t.operand.kind&&("UAdd"===t.op?a=t.operand.n:"USub"===t.op&&(a=-t.operand.n))}if(void 0!==a){const l=a>0?"<":">";return n.mkStmt(n.mkText("for ("),n.mkInfix(r,"=",s),n.mkText("; "),n.mkInfix(i,l,o),n.mkText("; "),n.mkInfix(i,"+=",et(e.args[2])),n.mkText(")"),Ce(t.body))}}if(m>1){const e=ke(t.target);Z(t.iter,ke(t.iter)==S?e:F(e))}return n.mkStmt(n.mkText("for ("),et(t.target),n.mkText(" of "),et(t.iter),n.mkText(")"),Ce(t.body))},While:t=>(e.U.assert(0==t.orelse.length),n.mkStmt(n.mkText("while ("),et(t.test),n.mkText(")"),Ce(t.body))),If:t=>{let r=t=>{let i=[n.mkText("if ("),et(t.test),n.mkText(")"),Ce(t.body)];return t.orelse.length&&(i[i.length-1].noFinalNewline=!0,1==t.orelse.length&&"If"==t.orelse[0].kind?(i.push(n.mkText(" else ")),e.U.pushRange(i,r(t.orelse[0]))):i.push(n.mkText(" else"),Ce(t.orelse))),i};return n.mkStmt(n.mkGroup(r(t)))},With:t=>{if(1==t.items.length&&function(e,t){let n=ke(e);return!(!n.classType||n.classType.pyQName!=t)||V(n)==t}(t.items[0].context_expr,"pins.I2CDevice")){let r=t.items[0],i=[],s=et(r.context_expr);if(r.optional_vars){let e=Oe(r.optional_vars);if(e){let o=z(e,{isLocal:!0}),a=null==o?void 0:o.symbol;e=Re(e),i.push(n.mkStmt(n.mkText("const "+e+" = "),s)),a.pyRetType||H(t,9537,lf("function '{0}' missing return type",a.pyQName)),Z(r.context_expr,a.pyRetType),s=n.mkText(e)}}return i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("begin()")))),e.U.pushRange(i,t.body.map(tt)),i.push(n.mkStmt(n.mkInfix(s,".",n.mkText("end()")))),n.mkGroup(i)}let r=[],i=t.items.map(((e,t)=>{let i="with"+t;if(e.optional_vars){let t=De(e.optional_vars);z(t,{isLocal:!0}),i=Re(t)}return r.push(n.mkStmt(n.mkText(i+".end()"))),n.mkStmt(n.mkText("const "+i+" = "),n.mkInfix(et(e.context_expr),".",n.mkText("begin()")))}));return e.U.pushRange(i,t.body.map(tt)),e.U.pushRange(i,r),n.mkBlock(i)},Raise:e=>{let t,r=e.exc||e.cause;if(!r)return n.mkStmt(n.mkText("throw"));if(r&&"Call"==r.kind){let e=r;1==e.args.length&&(t=et(e.args[0]))}return t||(t=n.mkGroup([n.mkText("`"),et(r),n.mkText("`")])),n.mkStmt(n.H.mkCall("control.fail",[t]))},Assert:e=>(e.msg||H(e,9537,lf("assert missing message")),n.mkStmt(n.H.mkCall("control.assert",[e.test,e.msg].filter((e=>!!e)).map(et)))),Import:e=>{for(let t of e.names)t.asname&&z(t.asname,{expandsTo:t.name}),B(e,t.name);return n.mkText("")},ImportFrom:e=>{let t=[];for(let r of e.names)if("*"==r.name)e.module||H(e,9538,lf("import missing module name")),z(e.module,{isImportStar:!0});else{let i=e.module+"."+r.name,s=_(i),o=r.asname||r.name;xe(s)?(z(o,{isImport:s,expandsTo:i}),t.push(n.mkStmt(n.mkText(`import ${Re(o)} = ${i}`)))):z(o,{expandsTo:i})}return n.mkGroup(t)},ExprStmt:e=>{return"Str"==e.value.kind?((t=e.value.s).trim().split(/\n/).length<=1?t=t.trim():t+="\n",n.mkStmt(n.mkText("/** "+t+" */"))):n.mkStmt(et(e.value));var t},Pass:e=>n.mkStmt(n.mkText("")),Break:e=>n.mkStmt(n.mkText("break")),Continue:e=>n.mkStmt(n.mkText("continue")),Delete:t=>(H(t,9550,e.U.lf("delete statements are unsupported")),g(t)),Try:e=>{let t=[n.mkText("try"),Ce(e.body.concat(e.orelse))];for(let r of e.handlers)t.push(n.mkText("catch ("),r.name?$e(r.name):n.mkText("_")),r.type&&t.push(n.mkText("/* instanceof "),et(r.type),n.mkText(" */")),t.push(n.mkText(")"),Ce(r.body));return e.finalbody.length&&t.push(n.mkText("finally"),Ce(e.finalbody)),n.mkStmt(n.mkGroup(t))},AsyncFunctionDef:t=>(H(t,9551,e.U.lf("async function definitions are unsupported")),g(t)),AsyncFor:t=>(H(t,9552,e.U.lf("async for statements are unsupported")),g(t)),AsyncWith:t=>(H(t,9553,e.U.lf("async with statements are unsupported")),g(t)),Global:r=>{const i=M();q();for(const n of r.names){e.U.lookup(i.vars,n)||H(r,9521,e.U.lf("No binding found for global variable"));z(n,{},t.VarModifier.Global).firstRefPos<r.startPos&&H(r,9522,e.U.lf("Variable referenced before global declaration"))}return n.mkStmt(n.mkText(""))},Nonlocal:r=>{const i=M(),s=q();for(const n of r.names){const o=it(n,s);o&&o!==i&&o.vars[n].modifier!==t.VarModifier.Global||H(r,9523,e.U.lf("No binding found for nonlocal variable"));z(n,{},t.VarModifier.NonLocal).firstRefPos<r.startPos&&H(r,9524,e.U.lf("Variable referenced before nonlocal declaration"))}return n.mkStmt(n.mkText(""))}};function Le(t){let r,i,o,a;if("Assign"===t.kind){if(1!=t.targets.length)return H(t,9553,e.U.lf("multi-target assignment statements are unsupported")),g(t);a=t.targets[0],o=t.value,r=null,i=null}else{if("AnnAssign"!==t.kind)return t;a=t.target,o=t.value||null,r=t.annotation,i=Se(r),Z(a,i)}let l,u="",c=!!o&&qe(o,"const"),p=Oe(a)||"";if(G()||s.currClass||s.currFun||"_"==p[0]||(u="export "),p&&s.currClass&&!s.currFun){c=!(!o||!s.currClass.isNamespace);let e=ce(s.currClass.symInfo,p);if(e||H(t,9544,lf("cannot get class field")),0==m)return n.mkText("/* skip for now */");e.pyRetType||H(t,9539,lf("function '{0}' missing return type",e.pyQName)),Z(a,e.pyRetType),e.isInstance=!1,u=s.currClass.isNamespace?`export ${c?"const":"let"} `:"static "}if(!o)return H(t,9555,e.U.lf("unable to determine value of assignment")),g(t);if(Z(a,ke(o)),c)return z(De(a),{}),/^static /.test(u)||/const/.test(u)||(u+="const "),n.mkStmt(n.mkText(u),n.mkInfix(et(a),"=",et(o)));if(!u&&"Tuple"==a.kind){let r=a,i=[n.mkText("let "),n.mkText("[")];if(r.elts.filter((e=>"Name"!==e.kind)).length)return H(t,9556,e.U.lf("non-trivial tuple assignment unsupported")),g(t);let s=r.elts.map((e=>e)).map((function(e){je(e,"identifierCompletion"),ke(e);Je(e);return Fe(e,!0)}));return i.push(n.mkCommaSep(s)),i.push(n.mkText("]")),n.mkStmt(n.mkInfix(n.mkGroup(i),"=",et(o)))}if("Name"===a.kind){const e=q().vars[p],t=null==e?void 0:e.symbol;t&&4===t.kind&&void 0===e.modifier&&(void 0===e.firstAssignPos||e.firstAssignPos>a.startPos)&&(e.firstAssignPos=a.startPos,e.firstAssignDepth=s.blockDepth)}if(r&&i&&("NameConstant"===o.kind&&null===o.value||"List"===o.kind&&0===o.elts.length)){const e=V(i);l=n.mkInfix(et(a),":",n.mkText(e))}return l||(l=et(a)),n.mkStmt(n.mkText(u),n.mkInfix(l,"=",et(o)))}function Fe(e,t=!1){let r=e.id,i=de(r),o=null==i?void 0:i.symbol,a=q().vars[r],l=null==a?void 0:a.symbol;return void 0===e.isdef&&(!o||4===o.kind&&o!==l?(s.currClass&&!s.currFun?(e.isdef=!1,i=z(r,{})):(e.isdef=!0,i=z(r,{isLocal:!0})),o=i.symbol):e.isdef=!1,e.symbolInfo=o,e.tsType||H(e,9540,lf("definition missing ts type")),o.pyRetType||H(e,9568,lf("missing py return type")),ee(e,e.tsType,o.pyRetType)),e.isdef&&ot(i,q())&&(e.isdef=!1),Xe(i,e),e.isdef&&!t?n.mkGroup([n.mkText("let "),$e(r)]):$e(r)}function Re(e){return n.isReservedWord(e)?e+"_":e||e}function Oe(e){if("Name"==e.kind){let t=e.id,n=me(t),r=null==n?void 0:n.symbol;return r&&r.expandsTo?r.expandsTo:t}if("Attribute"==e.kind){let t=Oe(e.value);if(t)return t+"."+e.attr}}function De(e){let t=Oe(e);return t||H(null,9542,lf("Cannot get name of unknown expression kind '{0}'",e.kind)),t}function $e(e){return"self"==e?n.mkText("this"):n.mkText(Re(e))}function qe(e,t){if("Call"!=e.kind)return!1;return Oe(e.func)===t}function Me(t,r,i){let s=Ee[r];return e.U.assert(!!s),s.length>3?n.H.mkCall(s,[t,i]):n.mkInfix(t,s,i)}const Ge={memoryview:{n:"",t:U},const:{n:"",t:v},"micropython.const":{n:"",t:v}};const Be=function(){let e={};return Object.keys(pxtc.ts2PyFunNameMap).forEach((t=>{let n=pxtc.ts2PyFunNameMap[t];if(n&&n.n){let r={n:t,t:A(n.t),scale:n.scale};e[n.n]=r}})),Object.keys(Ge).forEach((t=>{e[t]=Ge[t]})),e}();function ze(e){return"Name"==e.kind&&"self"==e.id}function Qe(e){return e.type==n.NT.Prefix&&'"'==e.op[0]?n.mkText(n.backtickLit(JSON.parse(e.op))):e}function We(e){return c&&e.startPos<=c.position&&c.position<=e.endPos}function je(e,t){m>100&&c&&null==p&&(c.type==t||"symbol"==c.type)&&We(e)&&(p=e,f=q())}function Ve(e,t){if(t&&t.pyAST&&"FunctionDef"==t.pyAST.kind){let n=t.pyAST;n.callers||(n.callers=[]),n.callers.indexOf(e)<0&&n.callers.push(e)}}const He={BoolOp:e=>{let t=et(e.values[0]);for(let n=1;n<e.values.length;++n)t=Me(t,e.op,et(e.values[n]));return t},BinOp:e=>{let t=function(e){if("Mod"==e.op&&"Str"==e.left.kind&&("Tuple"==e.right.kind||"List"==e.right.kind)){let t=e.left.s,r=e.right.elts;r=r.slice();let i=[n.mkText("`")];return t.replace(/([^%]+)|(%[\d\.]*([a-zA-Z%]))/g,((e,t,s,o)=>{if(t)i.push(n.mkText(t.replace(/[`\\$]/g,(e=>"\\"+e))));else{let e=r.shift(),t=e?et(e):n.mkText("???");i.push(n.mkText("${"),t,n.mkText("}"))}return""})),i.push(n.mkText("`")),n.mkGroup(i)}return null}(e);if(t)return t;const r=et(e.left),i=et(e.right);return ut(e.left)&&ut(e.right)&&"Add"===e.op?n.H.extensionCall("concat",[r,i],!1):(t=Me(r,e.op,i),ve[e.op]&&(Z(e.left,v),Z(e.right,v),e.tsType||H(e,9570,lf("binary op missing ts type")),ee(e,e.tsType,v)),t)},UnaryOp:t=>{let r=Ne[t.op];return e.U.assert(!!r),n.mkInfix(null,r,et(t.operand))},Lambda:t=>(H(t,9574,e.U.lf("lambda expressions are not supported yet")),h(t)),IfExp:e=>n.mkInfix(n.mkInfix(et(e.test),"?",et(e.body)),":",et(e.orelse)),Dict:e=>{s.blockDepth++;const t=e.keys.map(((t,r)=>{const i=e.values[r];return void 0===t?h(e):n.mkStmt(n.mkInfix(et(t),":",et(i)),n.mkText(","))})),r=n.mkBlock(t);return s.blockDepth--,r},Set:e=>h(e),ListComp:e=>h(e),SetComp:e=>h(e),DictComp:e=>h(e),GeneratorExp:e=>{if(1==e.generators.length&&"Comprehension"==e.generators[0].kind){let t=e.generators[0];if(0==t.ifs.length)return Te((()=>{let r=De(t.target);return z(r,{isParam:!0}),n.mkInfix(et(t.iter),".",n.H.mkCall("map",[n.mkGroup([$e(r),n.mkText(" => "),et(e.elt)])]))}))}return h(e)},Await:e=>h(e),Yield:e=>h(e),YieldFrom:e=>h(e),Compare:e=>{if(1==e.ops.length&&("In"==e.ops[0]||"NotIn"==e.ops[0])){Q(ke(e.comparators[0]))==S&&Z(e.left,S);let t=n.mkInfix(et(e.comparators[0]),".",n.H.mkCall("indexOf",[et(e.left)]));return n.mkInfix(t,"In"==e.ops[0]?">=":"<",n.mkText("0"))}let t=et(e.left),r=et(e.comparators[0]);const i=(e,i,s)=>{be[e]&&ct(i)&&ct(s)&&n.flattenNode([t])!==n.flattenNode([r])&&(t=n.H.mkParenthesizedExpression(n.mkGroup([t,n.mkText(" as any")])),r=n.H.mkParenthesizedExpression(n.mkGroup([r,n.mkText(" as any")])))};i(e.ops[0],e.left,e.comparators[0]);let s=Me(t,e.ops[0],r);for(let n=1;n<e.ops.length;++n)t=et(e.comparators[n-1]),r=et(e.comparators[n]),i(e.ops[n],e.comparators[n-1],e.comparators[n]),s=Me(s,"And",Me(t,e.ops[n],r));return s},Call:t=>{t.func.inCalledPosition=!0;let r,i,o=Oe(t.func),a=ye(o),l=a&&8==a.kind,u=a,m="";if(l)u=ye(a.pyQName+".__constructor");else if("Attribute"==t.func.kind){let e=t.func;i=e.value,r=ke(i),(r.classType||r.primType)&&(m=e.attr,u=pe(i,m,!0),u&&(m=u.name))}let d=t.args.slice();if("super"==o&&0==d.length)return s.currClass&&s.currClass.baseClass&&(t.tsType||H(t,9543,lf("call expr missing ts type")),Y(t,t.tsType,s.currClass.baseClass.symInfo)),n.mkText("super");if(qe(t,"int")&&1===d.length&&d[0]){const e=d[0],t=et(e),r=ke(e);if("string"===r.primType)return n.mkGroup([n.mkText("parseInt"),n.mkText("("),t,n.mkText(")")]);if("number"===r.primType)return n.mkGroup([n.mkInfix(n.mkText("Math"),".",n.mkText("trunc")),n.mkText("("),t,n.mkText(")")])}if(!u){let t=e.U.lookup(Be,o);if(t&&(m=""),m&&(o=V(r)+"."+m,t=e.U.lookup(Be,o),t||"@array"!=J(Q(r))||(o="Array."+m,t=e.U.lookup(Be,o))),m="",t)if("."==t.n[0]&&d.length){if(i=d.shift(),r=ke(i),m=t.n.slice(1),u=pe(i,m),u&&2==u.kind)return n.mkInfix(et(i),".",n.mkText(m))}else u=_(t.n)}if(qe(t,"str"))return ee(t,t.tsType,S),n.mkInfix(n.mkText('""'),"+",et(t.args[0]));u||H(t,9508,e.U.lf("can't find called function '{0}'",o));let y=u?u.parameters:null,k=[];if(y){for(d.length>y.length&&H(t,9510,e.U.lf("too many arguments in call to '{0}'",u.pyQName));d.length<y.length;)d.push(null);d=d.slice(0,y.length);for(let n of t.keywords){let t=y.findIndex((e=>e.name==n.arg));t<0?H(n,9511,e.U.lf("'{0}' doesn't have argument named '{1}'",u.pyQName,n.arg)):null!=d[t]?H(n,9512,e.U.lf("argument '{0} already specified in call to '{1}'",n.arg,u.pyQName)):d[t]=n.value}for(let e=d.length-1;e>=0&&(y[e].initializer&&null==d[e]);e--)d.pop();for(let r=0;r<d.length;++r){let i=d[r];if(null!=i||y[r].initializer)if(i){y[r].pyType||H(t,9545,lf("formal arg missing py type"));const e=y[r].pyType;"any"!==e.primType&&ne(i,e),"Name"==i.kind&&Ie(i.symbolInfo)?k.push(Ke(i.symbolInfo.pyAST,!0)):k.push(et(i))}else y[r].initializer||H(t,9547,lf("formal arg missing initializer")),k.push(n.mkText(y[r].initializer));else H(t,9513,e.U.lf("missing argument '{0}' in call to '{1}'",y[r].name,u.pyQName)),k.push(n.mkText("null"))}}else u&&H(t,9509,e.U.lf("calling non-function")),k=d.map(et);if(!p&&c&&"signature"==c.type&&We(t)){p=t,f=q(),c.auxResult=0;for(let e=0;e<d.length;++e){c.auxResult=e;let t=d[e];if(!t)break;if(t.startPos<=c.position&&c.position<=t.endPos)break}}if(u)if(u.pyRetType||H(t,9549,lf("function missing pyRetType")),i&&ut(i)&&r?function(e,t,n){switch(t.qName){case"Array.pop":case"Array.removeAt":case"Array.shift":case"Array.find":case"Array.get":case"Array._pickRandom":Z(e,n.typeArgs[0]);break;case"Array.concat":case"Array.slice":case"Array.filter":case"Array.fill":Z(e,n);break;case"Array.reduce":if("Call"===e.kind&&e.args.length>1){const t=ke(e.args[1]);t&&Z(e,t)}break;case"Array.map":Z(e,F(N));break;default:Z(e,t.pyRetType)}}(t,u,r):Z(t,u.pyRetType),t.symbolInfo=u,u.attributes.py2tsOverride){const e=function(e){const t=new RegExp(/([^\$]*\()?([^\$\(]*)\$(\d)(?:(?:(?:=(\d+|'[a-zA-Z0-9_]*'|false|true|null|undefined))|(\?)|))/,"y"),n=[];let r,i=0;do{i=t.lastIndex,r=t.exec(e),r&&(r[1]&&n.push({kind:"text",text:r[1]}),n.push({kind:"arg",prefix:r[2],index:parseInt(r[3]),default:r[4],isOptional:!!r[5]}))}while(r);null!=i?n.push({kind:"text",text:e.substr(i)}):n.push({kind:"text",text:e});return{parts:n}}(u.attributes.py2tsOverride);if(e){m&&!i&&H(t,9550,lf("missing recv"));let r=function(e,t,r){const i=[];for(const r of e.parts)if("text"===r.kind)i.push(n.mkText(r.text));else if(t[r.index]||r.default)r.prefix&&i.push(n.mkText(r.prefix)),t[r.index]?i.push(t[r.index]):i.push(n.mkText(r.default));else if(!r.isOptional)return;if(r)return n.mkInfix(r,".",n.mkGroup(i));return n.mkGroup(i)}(e,k,m?et(i):void 0);return r||H(t,9555,lf("buildOverride failed unexpectedly")),r}}else if(u.attributes.pyHelper)return n.mkGroup([n.mkInfix(n.mkText("_py"),".",n.mkText(u.attributes.pyHelper)),n.mkText("("),n.mkCommaSep(i?[et(i)].concat(k):k),n.mkText(")")]);let x=m?n.mkInfix(et(i),".",n.mkText(m)):et(t.func),T=[x,n.mkText("("),n.mkCommaSep(k),n.mkText(")")];return u&&1==k.length&&pxtc.service.isTaggedTemplate(u)&&(T=[x,Qe(k[0])]),l&&(a&&a.pyQName||H(t,9551,lf("missing namedSymbol or pyQName")),T[0]=n.mkText(j(a.pyQName)),T.unshift(n.mkText("new "))),n.mkGroup(T)},Num:e=>(e.tsType||H(e,9556,lf("tsType missing")),ee(e,e.tsType,v),n.mkText(e.ns)),Str:e=>(e.tsType||H(e,9557,lf("tsType missing")),ee(e,e.tsType,S),n.mkText(n.stringLit(e.s))),FormattedValue:e=>h(e),JoinedStr:e=>h(e),Bytes:t=>n.mkText(`hex\`${e.U.toHex(new Uint8Array(t.s))}\``),NameConstant:e=>(null!==e.value&&(e.tsType||H(e,9558,lf("tsType missing")),ee(e,e.tsType,b)),n.mkText(JSON.stringify(e.value))),Ellipsis:e=>h(e),Constant:e=>h(e),Attribute:t=>{let r=et(t.value),i=ke(t.value),s=pe(t.value,t.attr),o=t.attr;if(je(t,"memberCompletion"),s)t.symbolInfo=s,Ve(t,s),t.tsType&&s.pyRetType||H(t,9559,lf("tsType or pyRetType missing")),ee(t,t.tsType,s.pyRetType),o=s.name;else if(i.moduleType){let n=_(i.moduleType.pyQName+"."+t.attr);n?(t.symbolInfo=n,Ve(t,n),Z(t,I(n)),o=n.name):H(t,9514,e.U.lf("module '{0}' has no attribute '{1}'",i.moduleType.pyQName,t.attr))}else m>2&&H(t,9515,e.U.lf("unknown object type; cannot lookup attribute '{0}'",t.attr));return n.mkInfix(r,".",n.mkText(Re(o)))},Subscript:e=>{if("Index"==e.slice.kind){const t=Q(ke(e.value));if(ut(e.value)){Z(e,t.typeArgs[0])}else"string"===t.primType?Z(e,t):m>2&&X(ke(e))&&Z(e,N);let r=e.slice.value;return m>2&&X(ke(r))&&Z(r,v),n.mkGroup([et(e.value),n.mkText("["),et(r),n.mkText("]")])}if("Slice"==e.slice.kind){const t=ke(e.value);Z(e,t);let r=e.slice;if(r.step){const i="string"===(null==t?void 0:t.primType);return n.H.mkCall(i?"_py.stringSlice":"_py.slice",[et(e.value),r.lower?et(r.lower):n.mkText("null"),r.upper?et(r.upper):n.mkText("null"),et(r.step)])}return n.mkInfix(et(e.value),".",n.H.mkCall("slice",[r.lower?et(r.lower):n.mkText("0"),r.upper?et(r.upper):null].filter(T)))}return h(e)},Starred:e=>n.mkGroup([n.mkText("... "),et(e.value)]),Name:e=>{if(je(e,"identifierCompletion"),"self"==e.id&&s.currClass)return e.tsType||H(e,9560,lf("missing tsType")),Y(e,e.tsType,s.currClass.symInfo),n.mkText("this");let t=Je(e),r=null==t?void 0:t.symbol;if(r&&r.isImport)return $e(r.name);if(Xe(t,e),e.ctx.indexOf("Load")>=0){if(!r)return $e(De(e));if(!(null==r?void 0:r.qName))return H(e,9561,lf("missing qName")),$e("unknown");return $e(r.qName.replace("@type",""))}return Fe(e)},List:Ye,Tuple:Ye};function Je(t){let n=de(t.id),r=null==n?void 0:n.symbol;if(!n){let r=e.U.lookup(Be,t.id);r&&(n=de(r.n))}if(n&&r){if(t.symbolInfo=r,t.tsType||H(t,9562,lf("missing tsType")),ee(t,t.tsType,I(r)),r.isImport)return n;Ve(t,r),t.forTargetEndPos&&n.forVariableEndPos!==t.forTargetEndPos&&(n.forVariableEndPos?n.lastRefPos=n.forVariableEndPos+1:n.forVariableEndPos=t.forTargetEndPos)}else m>0&&H(t,9516,e.U.lf("name '{0}' is not defined",t.id));return n}function Xe(e,n){if(e){if(e.modifier===t.VarModifier.Global){const t=M();t&&t.vars[e.symbol.name]&&(e=t.vars[e.symbol.name])}else if(e.modifier===t.VarModifier.NonLocal){const t=it(e.symbol.name,q());t&&(e=t.vars[e.symbol.name])}(void 0===e.firstRefPos||e.firstRefPos>n.startPos)&&(e.firstRefPos=n.startPos),(void 0===e.lastRefPos||e.lastRefPos<n.startPos)&&(e.lastRefPos=n.startPos)}}function Ye(e){return e.tsType||H(e,9563,lf("missing tsType")),ee(e,e.tsType,F(e.elts[0]?ke(e.elts[0]):L())),n.mkGroup([n.mkText("["),n.mkCommaSep(e.elts.map(et)),n.mkText("]")])}function Ze(e){return`${e.startPos}:${e.endPos}`}function et(t){o=t;let n=He[t.kind];n||e.U.oops(t.kind+" - unknown expr"),ke(t);const r=n(t);return r.id=Ze(t),r}function tt(t){o=t;let r=_e[t.kind];r||e.U.oops(t.kind+" - unknown stmt");let i=(t._comments||[]).map((e=>e.value)),s=r(t);return i.length&&(s=n.mkGroup(i.map((e=>n.mkStmt(n.H.mkComment(e)))).concat(s))),s.id=Ze(t),s}function nt(e){return!e||(e.type==n.NT.Prefix&&""==e.op?e.children.every(nt):e.type==n.NT.NewLine)}function rt(e){const t=$e(e.name),r=V(I(e));return n.mkStmt(n.mkGroup([n.mkText("let "),t,n.mkText(": "+r+";")]))}function it(e,n){if(!n)return;const r=n.vars&&n.vars[e];return r&&r.modifier!=t.VarModifier.NonLocal?n:it(e,n.parent)}function st(e){const t=[];let n;for(const r of Object.keys(e.vars))n=e.vars[r],ot(n,e)&&t.push(rt(null==n?void 0:n.symbol));return t}function ot(e,t){return!!(4===e.symbol.kind&&!e.symbol.isParam&&void 0===e.modifier&&(e.lastRefPos>e.forVariableEndPos||e.firstRefPos<e.firstAssignPos||e.firstAssignDepth>t.blockDepth)&&!(function(e){return"Module"===e.kind&&"main"===e.name}(t)&&0===e.firstAssignDepth))}function at(t){if(e.U.assert("Module"==t.kind),t.tsBody)return;var r;s={currClass:void 0,currFun:void 0,currModule:r=t,blockDepth:0},a=r.tsFilename.replace(/\.ts$/,".py"),t.vars||(t.vars={});let i=st(t).concat(t.body.map(tt));return i.every(nt)?void 0:"main"==t.name?i:[n.mkText("namespace "+t.name+" "),n.mkBlock(i)]}function lt(e){m=e,l=[],y=0,o=void 0}function ut(e){const t=Q(ke(e));return t&&"@array"===t.primType}function ct(e){switch(e.kind){case"Num":case"Str":return!0;case"NameConstant":return null!==e.value}return!1}t.py2ts=function(s){let o=[];const m={};l=[],e.U.assert(!!s.sourceFiles,"missing sourceFiles! Cannot convert py to ts");let d=s.sourceFiles.filter((t=>e.U.endsWith(t,".py")));if(0==d.length)return{outfiles:m,diagnostics:l,success:0===l.length,sourceMap:[]};let k=(e,t)=>e.substr(0,e.length-t.length),x=e.U.toDictionary(d,(e=>k(e,".py"))),T=s.sourceFiles.filter((t=>e.U.endsWith(t,".ts"))).filter((e=>k(e,".ts")in x));e.U.assert(!!s.apisInfo,"missing apisInfo! Cannot convert py to ts"),a=d[0],function(t,n){i={},r={};let s=e.U.toDictionary(n,(e=>e));for(let n of e.U.values(t.byQName)){if(s.hasOwnProperty(n.fileName))continue;let t=n;t.extendsTypes&&(t.extendsTypes=t.extendsTypes.filter((e=>e!=t.qName))),t.pyQName&&t.qName||H(null,9526,e.U.lf("Symbol '{0}' is missing qName for '{1}'",t.name,t.pyQName?"ts":"py")),r[t.pyQName]=t,r[t.qName]=t}U=P("Buffer")}(s.apisInfo,T),u=s,c=void 0,s.generatedFiles||(s.generatedFiles=[]);for(const t of d){let n=t,r=t.replace(/\.py$/,"").replace(/.*\//,""),i=s.fileSystem[t];try{a=t;let s=e.py.lex(i),u=e.py.parse(i,n,s);e.U.pushRange(l,u.diagnostics),o.push({kind:"Module",body:u.stmts,blockDepth:0,name:r,source:i,tsFilename:n.replace(/\.py$/,".ts")})}catch(e){console.log("Parse error",e)}}const g=l;for(let e=0;e<5;++e){lt(e);for(let e of o)try{at(e)}catch(e){console.log("Conv pass error",e)}if(0==y)break}lt(1e3),p=void 0,c=s.syntaxInfo||{position:0,type:"symbol"};let h=[];for(let e of o)try{let t=at(e);if(!t)continue;let r=n.flattenNode(t);function S(e){let t=e.id.split(":");if(2!=t.length)return;let n=t.map((e=>parseInt(e)));return{py:{startPos:n[0],endPos:n[1]},ts:{startPos:e.startPos,endPos:e.endPos}}}s.sourceFiles.push(e.tsFilename),s.generatedFiles.push(e.tsFilename),s.fileSystem[e.tsFilename]=r.output,m[e.tsFilename]=r.output,h=r.sourceMap.map(S).filter((e=>!!e))}catch(e){console.log("Conv error",e)}l=g.concat(l);let v={};const b=e.U.values(r).concat(e.U.values(i));let E=[];const N=e=>{if((e=>{switch(e.kind){case 6:case 7:case 4:case 3:case 5:return!0;case 2:case 1:return!e.isInstance;default:return!1}})(e)&&E.indexOf(e)<0){let t=w(e);v[t.qName||t.name]=t}};for(let t=f;t;t=t.parent)t&&t.vars&&e.U.values(t.vars).map((e=>e.symbol)).forEach(N);if(b.forEach(N),c&&p){if(p=p,c.beginPos=p.startPos,c.endPos=p.endPos,c.symbols||(c.symbols=[]),E=c.symbols.slice(),"memberCompletion"==c.type&&"Attribute"==p.kind){const e=ke(p.value);if(e.moduleType)for(let t of b)t.isInstance||t.namespace!=e.moduleType.qName||c.symbols.push(t);else if(e.classType||e.primType){const t=e.classType||fe(e.primType).reduce(((e,t)=>e||t),null);if(t){t.extendsTypes&&t.qName||H(null,9567,lf("missing extendsTypes or qName"));let e=t.extendsTypes.concat(t.qName);for(let t of b)t.isInstance&&e.indexOf(t.namespace)>=0&&c.symbols.push(t)}}}else if("identifierCompletion"==c.type)c.symbols=e.U.values(v);else{let e=p.symbolInfo;e&&c.symbols.push(e)}c.symbols=c.symbols.map(w)}let C=function(){for(let e of l)t.patchPosition(e,s.fileSystem[e.fileName]);return l}();return{outfiles:m,success:0===C.length,diagnostics:C,syntaxInfo:c,globalNames:v,sourceMap:h}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n;!function(e){e[e.Id=0]="Id",e[e.Op=1]="Op",e[e.Keyword=2]="Keyword",e[e.Number=3]="Number",e[e.String=4]="String",e[e.NewLine=5]="NewLine",e[e.Comment=6]="Comment",e[e.Indent=7]="Indent",e[e.Dedent=8]="Dedent",e[e.EOF=9]="EOF",e[e.Error=10]="Error"}(n=t.TokenType||(t.TokenType={})),t.keywords={False:!0,None:!0,True:!0,and:!0,as:!0,assert:!0,async:!0,await:!0,break:!0,class:!0,continue:!0,def:!0,del:!0,elif:!0,else:!0,except:!0,finally:!0,for:!0,from:!0,global:!0,if:!0,import:!0,in:!0,is:!0,lambda:!0,nonlocal:!0,not:!0,or:!0,pass:!0,raise:!0,return:!0,try:!0,while:!0,with:!0,yield:!0};let r,i,s=[];const o={"%":"Mod","&":"BitAnd","*":"Mult","**":"Pow","+":"Add","-":"Sub","/":"Div","//":"FloorDiv","<<":"LShift",">>":"RShift","@":"MatMult","^":"BitXor","|":"BitOr"},a={"!":"Bang","!=":"NotEq","(":"LParen",")":"RParen",",":"Comma","->":"Arrow",".":"Dot",":":"Colon",";":"Semicolon","<":"Lt","<=":"LtE","=":"Assign","==":"Eq",">":"Gt",">=":"GtE","[":"LSquare","]":"RSquare","{":"LBracket","}":"RBracket","~":"Invert"},l={b:/^[_0-1]$/,B:/^[_0-1]$/,o:/^[_0-7]$/,O:/^[_0-7]$/,x:/^[_0-9a-fA-F]$/,X:/^[_0-9a-fA-F]$/},u={b:2,B:2,o:8,O:8,x:16,X:16};let c,p,f=0,m=0;function d(e,t){let n=0,r=0;for(let i=0;i<e;++i)10==t.charCodeAt(i)&&(n++,r=i);return{line:n,column:e-r-1}}function y(e){switch(e.type){case n.Id:return`id(${e.value})`;case n.Op:return"'"+i[e.value]+"'";case n.Keyword:return e.value;case n.Number:return`num(${e.value})`;case n.String:return e.stringPrefix+JSON.stringify(e.value);case n.NewLine:return"<nl>";case n.Comment:return`/* ${e.value} */`;case n.Indent:return"indent"+e.value;case n.Dedent:return"dedent";case n.Error:return`[ERR: ${e.value}]`;case n.EOF:return"End of file";default:return"???"}}t.position=d,t.patchPosition=function(e,t){if(!e.start&&!e.length)return e.start=0,e.length=0,e.line=0,void(e.column=0);let n=d(e.start,t);e.line=n.line,e.column=n.column,e.length>0&&(n=d(e.start+e.length-1,t),e.endLine=n.line,e.endColumn=n.column+2)},t.tokenToString=y,t.friendlyTokenToString=function(e,t){let n=e.endPos-e.startPos,r="";return r=0==n?y(e):n>20?"`"+t.slice(e.startPos,e.startPos+20)+"`...":"`"+t.slice(e.startPos,e.endPos)+"`",r=r.replace(/\r/g,"").replace(/\n/g,"\\n").replace(/\t/g,"\\t"),r},t.tokensToString=function(e){let t="",r=0;for(let i of e){let e=y(i);r+e.length>70&&(r=0,t+="\n"),0!=r&&(t+=" "),t+=e,r+=e.length,i.type!=n.NewLine&&i.type!=n.Comment||(r=0,t+="\n")}return t},t.lex=function(d){for(0==s.length&&function(){const n={'"':v,"'":v,"#":U,"\\":N,".":A};r=e.U.clone(a);for(let e of Object.keys(o))r[e]=o[e],r[e+"="]=o[e]+"Assign";i={};for(let e of Object.keys(r))i[r[e]]=e;for(let e=0;e<128;++e)if(t.rx.isIdentifierStart(e))s[e]=x;else{let i=String.fromCharCode(e);if(n.hasOwnProperty(i))s[e]=n[i];else if(r.hasOwnProperty(i)){let t=!1,n=r[i];for(let e of Object.keys(r))e!=i&&e.startsWith(i)&&(t=!0);s[e]=t?()=>g(n):()=>T(n)}else t.rx.isSpace(e)?s[e]=()=>{}:13==e?s[e]=()=>{10==p.charCodeAt(f)&&f++,b()}:t.rx.isNewline(e)?s[e]=b:w(e)?s[e]=C:s[e]=P}}(),p=d,c=[],f=0,m=0,E();f<p.length;){m=f;const e=p.charCodeAt(f++);e<128?s[e]():t.rx.isIdentifierStart(e)?x():t.rx.isSpace(e)||(t.rx.isNewline(e)?b():P())}return m=f,b(),y(n.EOF,""),c;function y(e,t,n){let r={type:e,value:t,startPos:m,endPos:f,auxValue:n};return c.push(r),r}function k(e){y(n.Error,e)}function x(){for(;t.rx.isIdentifierChar(p.charCodeAt(f));)f++;let e=p.slice(m,f),r=p.charCodeAt(f);t.keywords.hasOwnProperty(e)?y(n.Keyword,e):34==r||39==r?S(e):y(n.Id,e)}function T(e){y(n.Op,e)}function g(e){let t=p.slice(m,f+1);if(2==t.length&&r.hasOwnProperty(t)){let n=p.slice(m,f+2);3==n.length&&r.hasOwnProperty(n)?(f+=2,e=r[n]):(f++,e=r[t])}T(e)}function h(e){switch(e){case 97:return 7;case 98:return 8;case 102:return 12;case 110:return 10;case 114:return 13;case 116:return 9;case 118:return 11;default:return 0}}function S(r){const i=p.charCodeAt(f++);let s=!1;p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i&&(f+=2,s=!0);let o=(r=r.toLowerCase()).indexOf("r")>=0,a="",l="";for(;;){const n=p.charCodeAt(f++);if(n==i){if(!s)break;if(p.charCodeAt(f)==i&&p.charCodeAt(f+1)==i){f+=2;break}l+="\\"+String.fromCharCode(i),a+=String.fromCharCode(i)}else if(92==n){let n=p.charCodeAt(f++);if(13==n&&10==p.charCodeAt(f)&&(n=10,f++),34==n||39==n||92==n)o&&(l+="\\",a+="\\"),l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(n);else if(!o&&h(n))l+="\\"+String.fromCharCode(n),a+=String.fromCharCode(h(n));else if(t.rx.isNewline(n))o&&(a+="\\"+String.fromCharCode(n),l+="\\\\",l+=10==n?"\\n":"\\u"+("0000"+n.toString(16)).slice(-4));else if(o||48!=n)if(o||117!=n&&120!=n)l+="\\\\"+String.fromCharCode(n),a+="\\"+String.fromCharCode(n);else{let t=117==n?4:2,r=p.slice(f,f+t);f+=t;let i=parseInt(r,16);isNaN(i)&&k(e.U.lf("invalid unicode or hex escape")),l+="\\"+String.fromCharCode(n)+r,a+=String.fromCharCode(i)}else l+="\\\\x00",a+="\0"}else{if(isNaN(n)){k(e.U.lf("end of file in a string"));break}if(t.rx.isNewline(n)&&!s){k(e.U.lf("new line in a string"));break}a+=String.fromCharCode(n),l+=String.fromCharCode(n)}}let u=y(n.String,a);u.quoted=l,u.stringPrefix=r}function v(){f--,S("")}function b(){y(n.NewLine,""),E()}function E(){let e=0;for(;;){const t=p.charCodeAt(f);if(9!=t){if(32!=t)break;e++,f++}else e=e+8&-8,f++}y(n.Indent,""+e)}function N(){let n=p.charCodeAt(f);t.rx.isNewline(n)?(f++,13==n&&10==p.charCodeAt(f)&&f++):k(e.U.lf("unexpected character after line continuation character"))}function U(){for(y(n.NewLine,"");f<p.length&&!t.rx.isNewline(p.charCodeAt(f));)f++;y(n.Comment,p.slice(m+1,f)),13==p.charCodeAt(f)&&10==p.charCodeAt(f+1)&&f++,f++,E()}function C(){let t=p[m],r="";if("0"==t){let i=p[f];const s=l[i];if(s){for(f++;;){const e=p[f];if(!s.test(e))break;r+=e,f++}if(r){let s=parseInt(r,u[i]);isNaN(s)&&k(e.U.lf("invalid number")),y(n.Number,t+i+r,s)}else k(e.U.lf("expecting numbers to follow 0b, 0o, 0x"));return}}let i=!1,s=!1,o=!1;for(f=m;;){const e=p.charCodeAt(f);if(!o||43!=e&&45!=e)if(o=!1,95==e||w(e));else if(s||i||46!=e){if(s||69!=e&&101!=e)break;s=!0,o=!0}else i=!0;else;r+=String.fromCharCode(e),f++}!i&&!s&&"0"==t&&r.length>1&&!/^0+/.test(r)&&k(e.U.lf("unexpected leading zero"));let a=parseFloat(r);isNaN(a)&&k(e.U.lf("invalid number")),y(n.Number,r,a)}function A(){w(p.charCodeAt(f))?C():y(n.Op,"Dot")}function w(e){return 48<=e&&e<=57}function P(){k(e.U.lf("invalid token"))}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){let n,r,i,s,o,a,l,u,c;function p(){return r[o]}function f(){for(;r[o];o++){let i=r[o];if(i.type!=t.TokenType.Comment){if(n>=0&&i.type==t.TokenType.Op)switch(i.value){case"LParen":case"LSquare":case"LBracket":n++;break;case"RParen":case"RSquare":case"RBracket":n--}if(i.type!=t.TokenType.Error){if(n>0){if(i.type==t.TokenType.NewLine||i.type==t.TokenType.Indent)continue}else if(i.type==t.TokenType.Indent){if(r[o+1].type==t.TokenType.NewLine){o++;continue}let n=parseInt(i.value),s=l[l.length-1];if(n==s)continue;if(n>s)return void l.push(n);{i.type=t.TokenType.Dedent;let s=0;for(;l.length;){let t=l[l.length-1];if(!(t>n)){for(t!=n&&d(9552,e.U.lf("inconsitent indentation"));s>1;)r.splice(o,0,i),s--;return}l.pop(),s++}}}return}d(9551,i.value)}else a.push(i)}}function m(){u=p(),u.type!=t.TokenType.EOF&&(o++,f())}function d(n,r){r||(r=e.U.lf("invalid syntax")),n||(n=9550);const o=p(),a={code:n,category:pxtc.DiagnosticCategory.Error,messageText:e.U.lf("{0} near {1}",r,t.friendlyTokenToString(o,i)),fileName:s,start:o.startPos,length:o.endPos?o.endPos-o.startPos:0,line:0,column:0};t.patchPosition(a,i),c.push(a),9572!=n&&c.length>100&&e.U.userError(e.U.lf("too many parse errors"))}function y(n,r){const i=p();(i.type==n&&i.value==r||(d(9553,e.U.lf("expecting {0}",t.tokenToString(function(e,t){return{type:e,value:t,startPos:0,endPos:0}}(n,r)))),i.type!=t.TokenType.NewLine))&&m()}function k(){y(t.TokenType.NewLine,"")}function x(e){y(t.TokenType.Keyword,e)}function T(e){y(t.TokenType.Op,e)}function g(){let e=p();return e.type==t.TokenType.Keyword?e.value:""}function h(){let e=p();return e.type==t.TokenType.Op?e.value:""}const S={if:function e(){let t=E("If");m(),t.test=W(),t.body=b(),"elif"==g()?t.orelse=[e()]:t.orelse=U();return N(t)},while:function(){let e=E("While");return x("while"),e.test=W(),e.body=b(),e.orelse=U(),N(e)},for:function(){let e=E("For");return x("for"),e.target=$(),q(e.target),x("in"),e.iter=D(),e.body=b(),e.orelse=U(),N(e)},try:function(){let e=E("Try");x("try"),e.body=b(),e.handlers=[];let t=!1;for(;"except"==g();){let n=E("ExceptHandler");e.handlers.push(n),m(),"Colon"!=h()?(t&&d(),n.type=W(),"as"==g()?(m(),n.name=ge()):n.name=void 0):(t=!0,n.type=void 0,n.name=void 0),n.body=b()}e.orelse=U(),0==e.handlers.length&&e.orelse.length&&d();"finally"==g()?(m(),e.finalbody=b()):e.finalbody=[];return N(e)},with:function(){let t=E("With");return x("with"),t.items=ke(e.U.lf("with item"),C),t.body=b(),N(t)},def:function(){let e=E("FunctionDef");x("def"),e.name=ge(),T("LParen"),e.args=z(!0),T("RParen"),e.returns=void 0,"Arrow"==h()&&(m(),e.returns=W());return e.body=b(),N(e)},class:function(){let e=E("ClassDef");if(x("class"),e.name=ge(),"LParen"==h()){let t=he();e.bases=t.args,e.keywords=t.keywords}else e.bases=[],e.keywords=[];return e.body=b(),N(e)}},v={del:function(){let t=E("Delete");return x("del"),t.targets=ye(e.U.lf("expression"),oe),N(t)},pass:function(){let e=E("Pass");return x("pass"),N(e)},break:function(){let e=E("Break");return m(),N(e)},continue:function(){let e=E("Continue");return m(),N(e)},return:function(){let e=E("Return");m(),w()?e.value=void 0:e.value=D();return N(e)},raise:function(){let e=E("Raise");x("raise"),e.exc=void 0,e.cause=void 0,w()||(e.exc=W(),"from"==g()&&(m(),e.cause=W()));return N(e)},global:P,nonlocal:function(){let e=P();return e.kind="Nonlocal",e},import:function(){let t=E("Import");return m(),t.names=ke(e.U.lf("import name"),K),N(t)},from:function(){let n=E("ImportFrom");m(),n.level=L(),p().type==t.TokenType.Id?n.module=I():n.module=void 0;n.level||n.module||d();if(x("import"),"Mult"==h()){m();let e=E("Alias");e.name="*",n.names=[e]}else"LParen"==h()?(m(),n.names=ye(e.U.lf("import name"),_),T("RParen")):n.names=ye(e.U.lf("import name"),_);return N(n)},assert:function(){let e=E("Assert");m(),e.test=W(),"Comma"==h()?(m(),e.msg=W()):e.msg=void 0;return N(e)},yield:function(){p();if(m(),"from"==g()){let e=E("YieldFrom");return e.value=W(),A(N(e))}let e=E("Yield");w()||(e.value=D());return A(N(e))}};function b(){return T("Colon"),function(){if(p().type==t.TokenType.NewLine){let n;if(m(),p().type!=t.TokenType.Indent)d(9554,e.U.lf("expected an indented block")),n=B();else{const r=parseInt(p().value);for(m(),n=B();;){if(p().type==t.TokenType.Dedent){const e=isNaN(r)||parseInt(p().value)<r;if(m(),e)break}if(e.U.pushRange(n,B()),p().type==t.TokenType.EOF)break}}return n}return G()}()}function E(e,t){let n=t||p();return{startPos:n.startPos,endPos:n.endPos,kind:e}}function N(e){return e.endPos=u.endPos,e}function U(){return"else"==g()?(m(),b()):[]}function C(){let e=E("WithItem");return e.context_expr=W(),e.optional_vars=void 0,"as"==g()&&(m(),e.optional_vars=oe()),N(e)}function A(e){let t=E("ExprStmt");return t.startPos=e.startPos,t.endPos=e.endPos,t.value=e,t}function w(){let e=p();return e.type==t.TokenType.NewLine||e.type==t.TokenType.Op&&"Semicolon"==e.value}function P(){let e=E("Global");for(m(),e.names=[];e.names.push(ge()),"Comma"==h();)m();return N(e)}function I(){let e="";for(;;){if(e+=ge(),"Dot"!=h())return e;e+=".",m()}}function K(){let e=E("Alias");return e.name=I(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,N(e)}function _(){let e=E("Alias");return e.name=ge(),"as"==g()?(m(),e.asname=ge()):e.asname=void 0,N(e)}function L(){let e=0;for(;;)if("Dot"==h())e+=1,m();else{if("Ellipsis"!=h())return e;e+=3,m()}}function F(e,t){let n=E("Tuple",e);return n.elts=t,N(n)}function R(t){let n=p(),r=ye(e.U.lf("expression"),t),i=r[0];return 1!=r.length?F(n,r):i}function O(){return R(le)}function D(){return R(W)}function $(){return R(oe)}function q(e){if("Tuple"==e.kind){e.elts.forEach(q)}else e.ctx="Store"}function M(){let n=e.U.lookup(v,g());return n?n():function(){let n=p(),r=O(),i=h();if("Assign"==i){let e=E("Assign");for(e.targets=[r];;){if(m(),r=O(),i=h(),"Assign"!=i){e.value=r;break}e.targets.push(r)}return e.targets.forEach(q),N(e)}if("Colon"==i){let e=E("AnnAssign");return e.target=r,m(),e.annotation=W(),"Assign"==h()&&(m(),e.value=W()),e.simple=n.type==t.TokenType.Id&&"Name"==r.kind?1:0,q(e.target),N(e)}if(e.U.endsWith(i,"Assign")){let e=E("AugAssign");return e.target=r,e.op=i.replace("Assign",""),m(),e.value=D(),q(e.target),N(e)}if("Semicolon"==i||p().type==t.TokenType.NewLine){let e=E("ExprStmt");return e.value=r,N(e)}return d(9555,e.U.lf("unexpected token")),m(),null}()}function G(){let e=[M()];for(;"Semicolon"==h()&&(m(),p().type!=t.TokenType.NewLine);)e.push(M());return k(),e.filter((e=>!!e))}function B(){const r=c.length,i=p().type==t.TokenType.Indent;i&&(m(),d(9573,e.U.lf("unexpected indent")));let s=[];for(;"MatMult"==h();)m(),s.push(ve()),k();let o=g(),l=e.U.lookup(S,g()),f=[],y=a;if(a=[],"class"==o||"def"==o){let e=l();e.decorator_list=s,f=[e]}else s.length?d(9556,e.U.lf("decorators not allowed here")):f=l?[l()]:G();y.length&&f.length&&(f[0]._comments=y);if(c.length>r){for(n=-1;u.type!=t.TokenType.Dedent&&u.type!=t.TokenType.NewLine&&(m(),p().type!=t.TokenType.EOF););i&&p().type===t.TokenType.Dedent&&m(),n=0}return f}function z(n){let r=E("Arguments");for(r.args=[],r.defaults=[],r.kwonlyargs=[],r.kw_defaults=[],r.vararg=void 0;;){let n=h();if("Colon"==n||"RParen"==n)break;if("Mult"==n)r.vararg&&d(9557,e.U.lf("multiple *arg")),m(),p().type==t.TokenType.Id?r.vararg=i():r.vararg=void 0;else if("Pow"==n)r.kwarg&&d(9558,e.U.lf("multiple **arg")),m(),r.kwarg=i();else{r.kwarg&&d(9559,e.U.lf("arguments after **"));let t,n=i();"Assign"==h()&&(m(),t=W()),void 0!==r.vararg&&t?(r.kwonlyargs.push(n),r.kw_defaults.push(t)):(r.args.push(n),t?r.defaults.push(t):r.defaults.length&&d(9560,e.U.lf("non-default argument follows default argument")))}if("Comma"!=h())break;m()}return r.kwarg||(r.kwarg=void 0),r.vararg||(r.vararg=void 0),N(r);function i(){let e=E("Arg");return e.arg=ge(),e.annotation=void 0,n&&"Colon"==h()&&(m(),e.annotation=W()),e}}function Q(e){let t=E("Lambda");return m(),t.args=z(!1),T("Colon"),t.body=e?ue():W(),N(t)}function W(){if("lambda"==g())return Q();let e=p(),t=H();if("if"==g()){let n=E("IfExp",e);return n.body=t,x("if"),n.test=H(),x("else"),n.orelse=W(),N(n)}return t}function j(e,t){let n=p(),r=t();if(g()==e){let i=E("BoolOp",n);for(i.op="or"==e?"Or":"And",i.values=[r];g()==e;)x(e),i.values.push(t());return N(i)}return r}function V(){return j("and",J)}function H(){return j("or",V)}function J(){if("not"==g()){let e=E("UnaryOp");return m(),e.op="Not",e.operand=J(),N(e)}return function(){let e=p(),t=oe();if(!Y())return t;let n=E("Compare",e);n.left=t,n.comparators=[],n.ops=[];for(;;){let e=Y();if(!e)break;m(),"NotIn"==e?x("in"):"Is"==e&&"not"==g()&&(m(),e="IsNot"),n.ops.push(e),n.comparators.push(oe())}return N(n)}()}const X={Lt:"Lt",Gt:"Gt",Eq:"Eq",GtE:"GtE",LtE:"LtE",NotEq:"NotEq",in:"In",not:"NotIn",is:"Is"};function Y(){return X[h()]||X[g()]||null}const Z={Invert:"Invert",Sub:"USub",Add:"UAdd"};function ee(e,t){let n=p(),r=e();for(;;){let i=h();if(!(i&&t.indexOf(","+i+",")>=0))return r;{let t=E("BinOp",n);t.left=r,t.op=i,m(),t.right=e(),r=t}}}function te(){return ee(be,",Mult,MatMult,Div,Mod,FloorDiv,")}function ne(){return ee(te,",Add,Sub,")}function re(){return ee(ne,",LShift,RShift,")}function ie(){return ee(re,",BitAnd,")}function se(){return ee(ie,",BitXor,")}function oe(){return ee(se,",BitOr,")}function ae(){let t,n=p();if("Colon"!=h()&&(t=W()),"Colon"==h()){let e=E("Slice",n);e.lower=t,m();let r=h();return e.upper="Colon"!=r&&"Comma"!=r&&"RSquare"!=r?W():void 0,e.step=void 0,"Colon"==h()&&(m(),r=h(),"Comma"!=r&&"RSquare"!=r&&(e.step=W())),N(e)}{t||d(9570,e.U.lf("unable to parse lower subscript"));let n=E("Index");return n.value=t,N(n)}}function le(){if("Mult"==h()){let e=E("Starred");return e.value=oe(),N(e)}return W()}function ue(){return"lambda"==g()?Q(!0):H()}function ce(){let e=[];for(;;){let t=E("Comprehension");for(t.is_async=0,e.push(t),x("for"),t.target=$(),q(t.target),x("in"),t.iter=H(),t.ifs=[];"if"==g();)m(),t.ifs.push(ue());if("for"!=g())return e}}function pe(){let t=p();if("Mult"==h()){let e=E("Starred");return m(),e.value=W(),N(e)}if("Pow"==h()){let e=E("Keyword");return m(),e.arg=void 0,e.value=W(),N(e)}let n=W();if("Assign"==h()){"Name"!=n.kind&&d(9561,e.U.lf("invalid keyword argument; did you mean ==?")),m();let r=E("Keyword",t);return r.arg=n.id||"???",r.value=W(),N(r)}if("for"==g()){let e=E("GeneratorExp",t);return e.elt=n,e.generators=ce(),N(e)}return n}function fe(){let e=E("NameConstant");return e.value=null,m(),N(e)}function me(){let n=p();if(n.type==t.TokenType.Id){let e=E("Name");return m(),e.id=n.value,e.ctx="Load",N(e)}if(n.type==t.TokenType.Number){let e=E("Num");return m(),e.ns=n.value,e.n=n.auxValue,N(e)}if(n.type==t.TokenType.String){m();let r=n.value;for(;p().type==t.TokenType.String;)r+=p().value,m();if("b"==n.stringPrefix){let t=E("Bytes",n);return t.s=e.U.toArray(e.U.stringToUint8Array(r)),N(t)}{let e=E("Str",n);return e.s=r,N(e)}}if(n.type==t.TokenType.Keyword){if("None"==n.value||"True"==n.value||"False"==n.value){let e=E("NameConstant");return m(),e.value="True"==n.value||"False"!=n.value&&null,N(e)}return d(9564,e.U.lf("expecting atom")),fe()}if(n.type==t.TokenType.Op){let t=n.value;return"LParen"==t?Te("RParen","Tuple","GeneratorExp"):"LSquare"==t?Te("RSquare","List","ListComp"):"LBracket"==t?function(){let t=p();if(m(),"Pow"==h())return m(),r(void 0,oe());if("RBracket"==h()){let e=E("Dict",t);return m(),e.keys=[],e.values=[],N(e)}{let n=le();return"Starred"!=n.kind&&"Colon"==h()?(m(),r(n,W())):function(n){if("for"==g()){"Starred"==n.kind&&d(9562,e.U.lf("iterable unpacking cannot be used in comprehension"));let r=E("SetComp",t);return r.elt=n,r.generators=ce(),N(r)}let r=E("Set",t);if(r.elts=[n],"Comma"==h()){let t=xe("RBracket",e.U.lf("set element"),le);r.elts=[n].concat(t)}else T("RBracket");return N(r)}(n)}function n(){if("Pow"==h())return m(),[null,oe()];{let e=W();return T("Colon"),[e,W()]}}function r(r,i){if("for"==g()){r||d(9563,e.U.lf("dict unpacking cannot be used in dict comprehension"));let n=E("DictComp",t);return n.key=r,n.value=i,n.generators=ce(),N(n)}let s=E("Dict",t);if(s.keys=[r],s.values=[i],"Comma"==h()){let t=xe("RBracket",e.U.lf("dict element"),n);for(let e of t)e.length>=2&&e[0]&&e[1]&&(s.keys.push(e[0]),s.values.push(e[1]))}else T("RBracket");return N(s)}}():(d(9565,e.U.lf("unexpected operator")),fe())}return d(9566,e.U.lf("unexpected token")),fe()}function de(){let n=h();return"RParen"==n||"RSquare"==n||"RBracket"==n||"Colon"==n||"Semicolon"==n||(!!e.U.endsWith(n,"Assign")||("in"==g()||p().type==t.TokenType.NewLine))}function ye(t,n){let r=[];if(de())return r;for(;;){r.push(n());let i="Comma"==h();if(i&&m(),de())return r;if(!i)return d(9567,e.U.lf("expecting {0}",t)),r}}function ke(e,t){let n=[];for(;n.push(t()),"Comma"==h();)m();return n}function xe(t,n,r){m();let i=[];if(h()!=t)for(;;){i.push(r());let s="Comma"==h();if(s&&m(),h()==t)break;if(!s){d(9568,e.U.lf("expecting {0}",n));break}}return T(t),i}function Te(t,n,r){let i=p();if(m(),h()==t){m();let e=E(n,i);return e.elts=[],N(e)}let s=le();if("for"==g()){let e=E(r,i);return e.elt=s,e.generators=ce(),T(t),N(e)}if("Comma"==h()){let r=E(n,i);return m(),r.elts=ye(e.U.lf("expression"),le),r.elts.unshift(s),T(t),N(r)}if(T(t),"List"==n){let e=E(n,i);return e.elts=[s],N(e)}return s}function ge(){let n=p();return n.type!=t.TokenType.Id&&d(9569,e.U.lf("expecting identifier")),m(),n.value}function he(){let t=xe("RParen",e.U.lf("argument"),pe),n=[],r=[];for(let i of t)"Keyword"==i.kind?r.push(i):(r.length&&d(9570,e.U.lf("positional argument follows keyword argument")),n.push(i));return{args:n,keywords:r}}function Se(t,n){let r=h();if("LParen"==r){let e=E("Call",t);e.func=n;let r=he();return e.args=r.args,e.keywords=r.keywords,N(e)}if("LSquare"==r){let r=p(),i=E("Subscript",t);i.value=n;let s=xe("RSquare",e.U.lf("subscript"),ae);if(0==s.length)d(9571,e.U.lf("need non-empty index list"));else if(1==s.length)i.slice=s[0];else if(s.every((e=>"Index"==e.kind))){let e=s[0];e.value=F(r,s.map((e=>e.value))),i.slice=e}else{let e=E("ExtSlice",r);e.dims=s,i.slice=N(e)}return N(i)}if("Dot"==r){let e=E("Attribute",t);return e.value=n,m(),e.attr=ge(),N(e)}return n}function ve(){let e=p(),t=me();for(;;){let n=Se(e,t);if(n===t)return t;t=n}}function be(){if(Z[h()]){let e=E("UnaryOp");return e.op=Z[h()],m(),e.operand=be(),N(e)}return function(){p();let e=ve();if("Pow"==h()){let t=E("BinOp");return m(),t.left=e,t.op="Pow",t.right=be(),N(t)}return e}()}const Ee={kind:1,id:2,n:3,s:4,func:5,key:6,elt:7,elts:8,keys:9,left:10,ops:11,comparators:12,names:13,items:14,test:15,targets:16,dims:17,context_expr:18,name:19,bases:20,type:21,inClass:22,target:23,annotation:24,simple:25,op:26,operand:27,right:28,values:29,iter:30,ifs:31,is_async:32,value:33,slice:34,attr:35,generators:36,args:37,keywords:38,body:39,handlers:40,orelse:41,finalbody:42,decorator_list:43,kwonlyargs:44,kw_defaults:45,defaults:46,arg:47},Ne={lineno:1,col_offset:1,startPos:1,endPos:1,kind:1},Ue={body:1,orelse:1,finalbody:1},Ce={_comments:1,ctx:1,ns:1};t.dump=function(t,n=!1){const r=(t,i)=>{if(Array.isArray(i)){let e="";for(let n=0;n<i.length;++n)n>0&&(e+=", "),e+=r(t,i[n]);return"["+e+"]"}if(!i||!i.kind)return JSON.stringify(i);let s="",o=Object.keys(i);o.sort(((t,n)=>(Ee[t]||100)-(Ee[n]||100)||e.U.strcmp(t,n)));for(let a of o)if(!(e.U.lookup(Ne,a)||n&&e.U.lookup(Ce,a)))if(s&&(s+=", "),s+=a+"=",Array.isArray(i[a])&&i[a].length&&e.U.lookup(Ue,a)){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+r(e,t)+"\n";s+=t+"]"}else if("_comments"==a){s+="[\n";let e=t+" ";for(let t of i[a])s+=e+JSON.stringify(t.value)+"\n";s+=t+"]"}else s+=r(t,i[a]);return i.kind+"("+s+")"};let i="";for(let e of t)i+=r("",e)+"\n";return i},t.parse=function(m,y,k){i=m,s=y,r=k,n=0,o=0,a=[],l=[0],c=[];let x=[];try{if(u=r[0],f(),p().type!=t.TokenType.EOF)for(x=B();p().type!=t.TokenType.EOF;)e.U.pushRange(x,B())}catch(t){d(9572,e.U.lf("exception: {0}",t.message))}return{stmts:x,diagnostics:c}}}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(t){function n(e,t,n){const r={fileName:e.getSourceFile().fileName,start:e.getStart(),length:e.getEnd()-e.getStart(),line:void 0,column:void 0,code:t,category:pxtc.DiagnosticCategory.Error,messageText:n},i=new Error(n);throw i.pyDiagnostic=r,i}t.decompileToPython=function(r,i){let s={blocksInfo:void 0,outfiles:{},diagnostics:[],success:!0,times:{}};try{let o=function(r,i){const s=r.getTypeChecker(),o=(new ts.pxtc.LSHost(r),r.getSourceFile(i)),a=pxtc.decompiler.buildCommentMap(o),l=e.U.toSet(d(),(e=>e)),[u,c]=ts.pxtc.decompiler.buildRenameMap(r,o,{takenNames:l,declarations:"all"}),p=pxtc.getApiInfo(r),f=e.U.mapMap(p.byQName,((e,t)=>t.fileName==i?void 0:t)),m=t.computeScopeVariableLookup(o);return b(o);function d(){return["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EnvironmentError","Exception","False","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","NameError","None","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","True","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError","_","__build_class__","__debug__","__doc__","__import__","__loader__","__name__","__package__","__spec__","abs","all","any","ascii","bin","bool","bytearray","bytes","callable","chr","classmethod","compile","complex","copyright","credits","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","license","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","quit","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip",...Object.keys(e.py.keywords)]}function y(e){if(!e.getSourceFile())return null;let t=e.getText();return f[t]||null}function k(e){if(!e.getSourceFile())return null;let t=e.getText();const n=s.getSymbolAtLocation(e);n&&(t=s.getFullyQualifiedName(n));let r=f[t];if(r&&r.attributes.alias)return r.attributes.alias;if(r&&r.pyQName){if(r.isInstance){if(ts.isPropertyAccessExpression(e))return null;const t=new RegExp(`(?:^|.)${r.namespace}.(.+)`).exec(r.pyQName);if(t)return t[1]}return r.pyQName}return t in pxtc.ts2PyFunNameMap?pxtc.ts2PyFunNameMap[t].n:null}function x(t){let r=k(t);if(r)return r;if(!ts.isIdentifier(t))return e.tickEvent("depython.todo.advancedname"),n(t,3001,"Unsupported advanced name format: "+t.getText());let i=t.text;if(t.getSourceFile()){const e=u.getRenameForPosition(t.getStart());e&&(i=e.name)}return i}function T(e){return"string"!=typeof e&&(e=x(e)),c[e]?pxtc.decompiler.getNewName(e,c):(c[e]=!0,e)}function g(e,t){return 0!=(e.flags&t)}function h(e,t){return g(s.getTypeAtLocation(e),t)}function S(e){return h(e,ts.TypeFlags.StringLike)}function v(e){return h(e,ts.TypeFlags.NumberLike)}function b(e){let t=e.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[]).reduce(((e,t)=>t||e[e.length-1]?[...e,t]:e),[]);return a.filter((e=>!e.owner)).forEach((e=>t.push(...N(e)))),t.join("\n")}function E(e){switch(e.kind){case ts.SyntaxKind.SyntaxList:return e._children.map(E).reduce(((e,t)=>e.concat(t)),[]);case ts.SyntaxKind.EndOfFileToken:case ts.SyntaxKind.OpenBraceToken:case ts.SyntaxKind.CloseBraceToken:return[];default:return U(e)}}function N(e){let t=[];if(e.kind===pxtc.decompiler.CommentKind.SingleLine)t.push("# "+e.text);else{t.push('"""');for(const n of e.lines)t.push(n);t.push('"""')}return t}function U(e){const t=C(e);return pxtc.decompiler.getCommentsForStatement(e,a).map(N).reduce(((e,t)=>e.concat(t)),[]).concat(t)}function C(t){return ts.isVariableStatement(t)?$(t):ts.isClassDeclaration(t)?q(t):ts.isEnumDeclaration(t)?M(t):ts.isExpressionStatement(t)?z(t):ts.isFunctionDeclaration(t)?W(t):ts.isIfStatement(t)?O(t):ts.isForStatement(t)?R(t):ts.isForOfStatement(t)?F(t):ts.isWhileStatement(t)?I(t):ts.isReturnStatement(t)?P(t):ts.isBlock(t)?Q(t):ts.isTypeAliasDeclaration(t)?w(t):ts.isEmptyStatement(t)?[]:ts.isModuleDeclaration(t)?A(t):ts.isBreakStatement(t)?["break"]:ts.isContinueStatement(t)?["continue"]:(e.tickEvent("depython.todo.statement",{statement:t.kind}),n(t,3002,`Not supported in MakeCode Python: ${ts.SyntaxKind[t.kind]} (${t.kind})`))}function A(e){let n=x(e.name),r=e.body&&e.body.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[]).map((e=>t.indent1(e)));return["@namespace",`class ${n}:`].concat(r||[])}function w(e){let t=pxtc.emitPyTypeFromTypeNode(e.type);return[`${x(e.name)} = ${t}`]}function P(e){if(!e.expression)return["return"];let[t,n]=Se(e.expression),r=X("return ",t);return n.concat(r)}function I(e){let[t,n]=Se(e.expression),r=L(e.statement),i=X("while ",t,":");return n.concat(i).concat(r)}function K(e){let t=Math.floor(Number(e));return t!==1/0&&String(t)===e}function _(e){if(!e.initializer)return null;if(e.initializer.kind!==ts.SyntaxKind.VariableDeclarationList)return null;let t=e.initializer;if(1!==t.declarations.length)return null;let n=t.declarations[0],r=x(n.name);if(!n.initializer||!ge(n.initializer)||!v(n.initializer))return null;let[i,s]=Se(n.initializer);if(s.length)return null;let o=J(i);if(!e.condition)return null;if(!ts.isBinaryExpression(e.condition))return null;if(!ts.isIdentifier(e.condition.left))return null;if(x(e.condition.left)!=r)return null;if(!v(e.condition.right))return null;let[a,l]=Se(e.condition.right);if(l.length)return null;let u=J(a),c=u;if(e.condition.operatorToken.kind===ts.SyntaxKind.LessThanEqualsToken&&K(u))c=""+(Number(u)+1);else if(e.condition.operatorToken.kind!==ts.SyntaxKind.LessThanToken)return null;return e.incrementor&&(ts.isPostfixUnaryExpression(e.incrementor)||ts.isPrefixUnaryExpression(e.incrementor))?e.incrementor.operator!==ts.SyntaxKind.PlusPlusToken?null:o<c?{name:r,fromIncl:o,toExcl:c}:null:null}function L(e){let n=C(e).map(t.indent1);return n.length<1&&(n=[t.indent1("pass")]),n}function F(t){if(!ts.isVariableDeclarationList(t.initializer))return e.tickEvent("depython.todo.forof.complexexp"),n(t,3003,"Unsupported expression in for..of initializer: "+t.initializer.getText());let r=t.initializer.declarations.map((e=>x(e.name)));if(1!==r.length)return e.tickEvent("depython.todo.forof.multidecl"),n(t,3004,"Unsupported multiple declerations in for..of: "+t.initializer.getText());let i=r[0],[s,o]=Se(t.expression),a=o;a=a.concat(X(`for ${i} in `,s,":"));let l=L(t.statement);return a=a.concat(l),a}function R(e){let n=_(e);if(n){let{name:t,fromIncl:r,toExcl:i}=n,s="0"===r?`for ${t} in range(${i}):`:`for ${t} in range(${r}, ${i}):`,o=L(e.statement);return[s].concat(o)}let r,i=[];if(e.initializer)if(ts.isVariableDeclarationList(e.initializer)){let t=e.initializer.declarations.map(V).reduce(((e,t)=>e.concat(t)),[]);i=i.concat(t)}else{let[t,n]=Se(e.initializer);i=i.concat(n).concat(t)}if(e.condition){let[t,n]=Se(e.condition);i=i.concat(n),r=J(t)}else r="True";let s=`while ${r}:`;i.push(s);let o=C(e.statement).map(t.indent1);if(0!==o.length||e.incrementor||(o=[t.indent1("pass")]),i=i.concat(o),e.incrementor){let n=B(e.incrementor);if(n)i=i.concat(n.map(t.indent1));else{let[n,r]=Se(e.incrementor);i=i.concat(r).concat(n.map(t.indent1))}}return i}function O(e){let{supportStmts:t,ifStmt:n,rest:r}=D(e);return t.concat([n]).concat(r)}function D(e){let t=[],[n,r]=Se(e.expression);t=t.concat(r);let i=`if ${J(n)}:`,s=[],o=L(e.thenStatement);if(s=s.concat(o),e.elseStatement)if(ts.isIfStatement(e.elseStatement)){let{supportStmts:n,ifStmt:r,rest:i}=D(e.elseStatement),o=`el${r}`;t=t.concat(n),s.push(o),s=s.concat(i)}else{s.push("else:");let t=L(e.elseStatement);s=s.concat(t)}return{supportStmts:t,ifStmt:i,rest:s}}function $(e){return e.declarationList.declarations.map(V).reduce(((e,t)=>e.concat(t)),[])}function q(t){return e.tickEvent("depython.todo.classes"),n(t,3016,"Unsupported: classes are not supported in Python right now.")}function M(r){let i=[];i.push(`class ${x(r.name)}(Enum):`);let s=r.members.every((e=>!!e.initializer)),o=!r.members.every((e=>!!e.initializer));if(!s&&!o)return e.tickEvent("depython.todo.enummix"),n(r,3005,"Unsupported enum decleration: has mixture of explicit and implicit initialization");if(s)return e.tickEvent("depython.todo.enuminit"),n(r,3006,"Unsupported: explicit enum initialization");let a=0;for(let e of r.members)i.push(t.indent1(`${x(e.name)} = ${a++}`));return i}function G(e){return!(!ts.isPrefixUnaryExpression(e)&&!ts.isPostfixUnaryExpression(e))&&(e.operator===ts.SyntaxKind.MinusMinusToken||e.operator===ts.SyntaxKind.PlusPlusToken)}function B(e){if(!G(e))return null;let[t,n]=Se(e.operand),r=e.operator===ts.SyntaxKind.MinusMinusToken?" -= 1":" += 1",i=n;return i.push(`${J(t)}${r}`),i}function z(e){let t=B(e.expression);if(t)return t;const[n,r]=Se(e.expression);return r.length?["",...r,...n,""]:[...r,...n]}function Q(e){return e.getChildren().map(E).reduce(((e,t)=>e.concat(t)),[])}function W(r,i,s,o){let a=[];r.kind!==ts.SyntaxKind.MethodDeclaration&&r.kind!==ts.SyntaxKind.Constructor||a.push("self");let l=(s?oe(r.parameters,s):r.parameters).map((e=>j(e,!o)));a=a.concat(l);let u,c=a.join(", "),p=[];if(i)u=i;else{if(!r.name)return e.tickEvent("depython.todo.anonymousfunc"),n(r,3012,"Unsupported: anonymous function decleration");u=x(r.name)}if(p.push(`def ${u}(${c}):`),!r.body)return e.tickEvent("depython.todo.funcwithoutbody"),n(r,3013,"Unsupported: function decleration without body");let f=[];if(ts.isBlock(r.body))f=Q(r.body);else{let[e,t]=Se(r.body);f=f.concat(t),f.concat(e)}if(f.length){let e=m.getExplicitGlobals(r).map((e=>x(e)));e&&e.length&&f.unshift(`global ${e.join(", ")}`);let n=m.getExplicitNonlocals(r).map((e=>x(e)));n&&n.length&&f.unshift(`nonlocal ${n.join(", ")}`),p=p.concat(f.map(t.indent1))}else p.push(t.indent1("pass"));return p}function j(t,r=!0){let i=t.altName||x(t.name),s="";if(t.type&&r){let e=pxtc.emitPyTypeFromTypeNode(t.type);e&&-1===e.indexOf("(TODO")&&(s=`: ${e}`)}let o="";if(t.initializer){let[r,i]=Se(t.initializer);if(i.length)return e.tickEvent("depython.todo.complexinit"),n(t,3007,`Unsupported: complex expression in parameter default value not supported. Expression: ${t.initializer.getText()}`);o=` = ${J(r)}`}return`${i}${s}${o}`}function V(e){let t=[],n=x(e.name);if(e.initializer){let r,[i,s]=Se(e.initializer);if(t=t.concat(s),e.type){r=`${n}: ${pxtc.emitPyTypeFromTypeNode(e.type)} = ${J(i)}`}else r=`${n} = ${J(i)}`;return t.push(r),t}return t}function H(e,t){return[[e],t||[]]}function J(e,t="\n"){return e.join(t)}function X(e="",t,n=""){return t[0]=e+t[0],t[t.length-1]=t[t.length-1]+n,t}function Y(t,r){switch(t){case ts.SyntaxKind.BarBarToken:return"or";case ts.SyntaxKind.AmpersandAmpersandToken:return"and";case ts.SyntaxKind.ExclamationToken:return"not";case ts.SyntaxKind.LessThanToken:return"<";case ts.SyntaxKind.LessThanEqualsToken:return"<=";case ts.SyntaxKind.GreaterThanToken:return">";case ts.SyntaxKind.GreaterThanEqualsToken:return">=";case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsToken:return"==";case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:return"!=";case ts.SyntaxKind.EqualsToken:return"=";case ts.SyntaxKind.PlusToken:return"+";case ts.SyntaxKind.MinusToken:return"-";case ts.SyntaxKind.AsteriskToken:return"*";case ts.SyntaxKind.PlusEqualsToken:return"+=";case ts.SyntaxKind.MinusEqualsToken:return"-=";case ts.SyntaxKind.PercentToken:return"%";case ts.SyntaxKind.SlashToken:return"/";case ts.SyntaxKind.PlusPlusToken:case ts.SyntaxKind.MinusMinusToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,"Unsupported ++ and -- in an expression (not a statement or for loop)");case ts.SyntaxKind.AmpersandToken:return"&";case ts.SyntaxKind.CaretToken:return"^";case ts.SyntaxKind.LessThanLessThanToken:return"<<";case ts.SyntaxKind.GreaterThanGreaterThanToken:return">>";case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3009,"Unsupported operator: >>>");case ts.SyntaxKind.AsteriskAsteriskToken:return"**";case ts.SyntaxKind.AsteriskAsteriskEqualsToken:return"**=";case ts.SyntaxKind.PercentEqualsToken:return"%=";case ts.SyntaxKind.AsteriskEqualsToken:return"*=";case ts.SyntaxKind.SlashEqualsToken:return"/=";default:return e.tickEvent("depython.todo.unsupportedop",{op:t}),n(r,3008,`Unsupported Python operator (code: ${t})`)}}function Z(e){let t=S(e.left),n=S(e.right),r=e.operatorToken.kind===ts.SyntaxKind.PlusToken&&(t||n),[i,s]=Se(e.left);r&&!t&&(i=X("str(",i,")"));let o=Y(e.operatorToken.kind,e),[a,l]=Se(e.right);r&&!n&&(a=X("str(",a,")"));let u=s.concat(l);return[X(J(i)+" "+o+" ",a),u]}function ee(e){let t=k(e);if(t)return H(t);let[n,r]=Se(e.expression),i=x(e.name);return H("length"===i?`len(${J(n)})`:`${J(n)}.${i}`,r)}function te(e){if(ts.isPropertyAccessExpression(e)){let t=x(e.name),n=t.substr(t.lastIndexOf(".")+1);return ts.isIdentifier(e.expression)?[n]:te(e.expression).concat([n])}return ts.isIdentifier(e)?[x(e)]:[]}function ne(t,n,r,i){let o="";n&&(o=te(n).map(e.U.snakify).join("_"));let a=[];if(r&&r.length>1&&i&&i.length>1)for(let t=0;t<r.length&&t<i.length;t++){let n=i[t];if(g(s.getTypeAtLocation(n),ts.TypeFlags.EnumLike)){let t=te(n).map(e.U.snakify);a=a.concat(t)}}let l=a.join("_"),u="";o||l||!t||(u=x(t.name));let c=([o,l,u].filter((e=>e)).map(e.U.snakify).map((e=>e.toLowerCase())).join("_")||"my_callback").split("_");c.length>4&&(c=f(c));let p=e.U.toDictionary(["any","on","event"],(e=>e));for(;c.length>2;){let e=m(c,p);if(e.length==c.length)break;c=e}return c=["on",...c],c.join("_");function f(e){let t={},n=[];for(let r of e)r in t||(t[r]=!0,n.push(r));return n}function m(e,t){let n=[],r=!1;for(let i of e)!(i in t)||r?n.push(i):r=!0;return n}}function re(e){let n=e.join(", ");return n.length>60&&e.length>1?e.map(((n,r)=>{let i=","==n.charAt(n.length-1)?"":",";if(0==r){let e=n.split("\n");if(e.length>1){n=e.shift()+"\n"+t.indent1(e.join("\n"))}return n+i}return r==e.length-1?t.indent1(n):t.indent1(n+i)})):[n]}function ie(e,t,n,r,i){if((ts.isFunctionExpression(e)||ts.isArrowFunction(e))&&t&&t.type&&ts.isFunctionTypeNode(t.type)){let s;return ae(e,ne(t,n,r,i),s,!0)}return Se(e)}function se(t){let r=s.getTypeAtLocation(t.expression),i=s.typeToTypeNode(r),o=ts.createNodeArray([]);if(ts.isFunctionTypeNode(i)&&(o=i.parameters,t.arguments&&o.length<t.arguments.length))return e.tickEvent("depython.todo.argparammismatch",{kind:t.kind}),n(t,3010,"TODO: Unsupported call site where caller the arguments outnumber the callee parameters: "+t.getText());const a=y(t.expression);if(t.arguments&&a&&"TD_ID"==a.attributes.shim)return Se(t.arguments[0]);if(ts.isPropertyAccessExpression(t.expression)&&"toString"===t.expression.name.getText()){const[e,n]=Se(t.expression.expression);return[X("str(",e,")"),n]}let[l,u]=Se(t.expression),c=J(l),p=(t.arguments||ts.createNodeArray()).map(((e,n,r)=>ie(e,o[n],t.expression,o,r))),f=p.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),u);if(0===c.indexOf("_py.py_")){if(p.length<=0)return e.tickEvent("depython.todo._pynoargs"),n(t,3014,"Unsupported: call expression has no arguments for _py.py_ fn");c=c.substr(7).split("_").filter(((e,t)=>0!==t)).join("_");return[X(`${p.shift()[0]}.${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}return[X(`${c}(`,re(p.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),")"),f]}function oe(e,t){let n=[],r={};for(let i=0;i<Math.max(e.length,t.length);i++){let s;if(e[i])s=e[i],r[x(s.name)]=!0;else{s=t[i];let e=x(s.name);r[e]&&(e=pxtc.decompiler.getNewName(e,r),s=Object.assign({altName:e},t[i]))}n.push(s)}return ts.createNodeArray(n,!1)}function ae(e,t,n,r){let i=e.name?x(e.name):T(t||"my_function");return H(i,W(e,i,n,r))}function le(e){switch(e){case ts.SyntaxKind.ExclamationToken:return" ";case ts.SyntaxKind.PlusToken:case ts.SyntaxKind.MinusToken:return"";default:return" "}}function ue(e){let t=Y(e.operator,e),[n,r]=Se(e.operand);return H(`${t}${le(e.operator)}${J(n)}`,r)}function ce(e){let t=Y(e.operator,e),[n,r]=Se(e.operand),i=le(e.operator);return H(`${J(n)}${i}${t}`,r)}function pe(e){let t=e.elements.map(Se),n=t.map((([e,t])=>t)).reduce(((e,t)=>e.concat(t)),[]);return[X("[",re(t.map((([e,t])=>e)).reduce(((e,t)=>e.concat(t)),[])),"]"),n]}function fe(t){if(!t.argumentExpression)return e.tickEvent("depython.todo.accesswithoutexp"),n(t,3015,"Unsupported: element access expression without an argument expression");let[r,i]=Se(t.expression),[s,o]=Se(t.argumentExpression),a=i.concat(o);return H(`${J(r)}[${J(s)}]`,a)}function me(e){let[t,n]=Se(e.expression);return H(`(${J(t)})`,n)}function de(e){if(ts.isNoSubstitutionTemplateLiteral(e))return H(`"""\n${t.indent1(e.text.trim())}\n"""`);let[n,r]=Se(e.tag),[i,s]=Se(e.template),o=r.concat(s);return H(`${J(n)}(${J(i)})`,o)}function ye(e){if("undefined"==e.text)return H("None");return H(x(e))}function ke(e,t){let n=e=>ke(e,t);return ts.isBinaryExpression(e)?n(e.left)&&n(e.right):ts.isPropertyAccessExpression(e)?n(e.expression):ts.isPrefixUnaryExpression(e)||ts.isPostfixUnaryExpression(e)?e.operator!==ts.SyntaxKind.PlusPlusToken&&e.operator!==ts.SyntaxKind.MinusMinusToken&&n(e.operand):ts.isParenthesizedExpression(e)?n(e.expression):ts.isArrayLiteralExpression(e)?e.elements.map(n).reduce(((e,t)=>e&&t),!0):ts.isElementAccessExpression(e)?n(e.expression)&&(!e.argumentExpression||n(e.argumentExpression)):t(e)}function xe(e){return e.parent?e.parent.kind===ts.SyntaxKind.ParenthesizedExpression?xe(e.parent):e.parent:void 0}function Te(e){if("any"===e.type.getText().trim()&&(ts.isNumericLiteral(e.expression)||ts.isStringLiteral(e.expression)||e.expression.kind===ts.SyntaxKind.TrueKeyword||e.expression.kind===ts.SyntaxKind.FalseKeyword)){const t=xe(e);if((null==t?void 0:t.kind)===ts.SyntaxKind.BinaryExpression)switch(t.operatorToken.kind){case ts.SyntaxKind.EqualsEqualsToken:case ts.SyntaxKind.EqualsEqualsEqualsToken:case ts.SyntaxKind.ExclamationEqualsToken:case ts.SyntaxKind.ExclamationEqualsEqualsToken:case ts.SyntaxKind.LessThanToken:case ts.SyntaxKind.LessThanEqualsToken:case ts.SyntaxKind.GreaterThanToken:case ts.SyntaxKind.GreaterThanEqualsToken:return!0}}return!1}function ge(e){return ke(e,(e=>{switch(e.kind){case ts.SyntaxKind.PropertyAccessExpression:case ts.SyntaxKind.BinaryExpression:case ts.SyntaxKind.ParenthesizedExpression:case ts.SyntaxKind.ArrayLiteralExpression:case ts.SyntaxKind.ElementAccessExpression:case ts.SyntaxKind.TrueKeyword:case ts.SyntaxKind.FalseKeyword:case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:case ts.SyntaxKind.NumericLiteral:case ts.SyntaxKind.StringLiteral:case ts.SyntaxKind.NoSubstitutionTemplateLiteral:return!0;case ts.SyntaxKind.CallExpression:case ts.SyntaxKind.NewExpression:case ts.SyntaxKind.FunctionExpression:case ts.SyntaxKind.ArrowFunction:case ts.SyntaxKind.Identifier:case ts.SyntaxKind.ThisKeyword:return!1;case ts.SyntaxKind.PrefixUnaryExpression:case ts.SyntaxKind.PostfixUnaryExpression:let t=e;return t.operator!==ts.SyntaxKind.PlusPlusToken&&t.operator!==ts.SyntaxKind.MinusMinusToken}return!1}))}function he(e){let[t,n]=Se(e.condition),[r,i]=Se(e.whenTrue),[s,o]=Se(e.whenFalse),a=n.concat(i).concat(o);return H(`${r} if ${J(t)} else ${J(s)}`,a)}function Se(t){if(ts.isBinaryExpression(t))return Z(t);if(ts.isPropertyAccessExpression(t))return ee(t);if(ts.isCallExpression(t))return se(t);if(ts.isNewExpression(t))return se(t);if(ts.isFunctionExpression(t)||ts.isArrowFunction(t))return ae(t);if(ts.isPrefixUnaryExpression(t))return ue(t);if(ts.isPostfixUnaryExpression(t))return ce(t);if(ts.isParenthesizedExpression(t))return me(t);if(ts.isArrayLiteralExpression(t))return pe(t);if(ts.isElementAccessExpression(t))return fe(t);if(ts.isNoSubstitutionTemplateLiteral(t)||ts.isTaggedTemplateExpression(t))return de(t);switch(t.kind){case ts.SyntaxKind.TrueKeyword:return H("True");case ts.SyntaxKind.FalseKeyword:return H("False");case ts.SyntaxKind.ThisKeyword:return H("self");case ts.SyntaxKind.NullKeyword:case ts.SyntaxKind.UndefinedKeyword:return H("None")}return ts.isIdentifier(t)?ye(t):ts.isNumericLiteral(t)||ts.isStringLiteral(t)?H(t.getText()):ts.isConditionalExpression(t)?he(t):ts.isAsExpression(t)&&Te(t)?Se(t.expression):(e.tickEvent("depython.todo.expression",{kind:t.kind}),n(t,3017,"Unsupported expression kind: "+t.kind))}}(r,i),a=i.replace(/(\.py)?\.\w*$/i,"")+".py";s.outfiles[a]=o}catch(t){t.pyDiagnostic?s.diagnostics=[t.pyDiagnostic]:e.reportException(t),s.success=!1}return s};function r(e){return n=>(n||"").split("\n").map((n=>`${t.INDENT.repeat(e)}${n}`)).join("\n")}t.INDENT=" ",t.indent=r,t.indent1=r(1)}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){!function(e){const t=/[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;e.isIdentifierStart=function(e){return ts.pxtc.isIdentifierStart(e,ts.pxtc.ScriptTarget.ES5)},e.isIdentifierChar=function(e){return ts.pxtc.isIdentifierPart(e,ts.pxtc.ScriptTarget.ES5)},e.isSpace=function(e){return!!(32===e||9===e||11===e||12===e||160===e||e>=5760&&t.test(String.fromCharCode(e)))},e.isNewline=function(e){return 10===e||13===e||(8232===e||8233===e)}}(e.rx||(e.rx={}))}(e.py||(e.py={}))}(pxt||(pxt={})),function(e){!function(e){function t(e){const t={refs:[],children:[],owner:void 0};return function e(r){var i;if(!r)return t;if(ts.isPropertyAccessOrQualifiedName(r))return t;if(ts.isIdentifier(r))return{refs:[{kind:"read",node:r,varName:r.text}],children:[],owner:void 0};if(ts.isVariableDeclaration(r)||ts.isParameter(r)){const t=e(r.initializer);return{refs:[...t.refs,{kind:"decl",node:r,varName:r.name.getText()}],children:t.children,owner:void 0}}if(ts.isPrefixUnaryExpression(r)||ts.isPostfixUnaryExpression(r)){const t=e(r.operand),i=r.operand.getText();return n(t,{refs:[{kind:"assign",node:r,varName:i}],children:[],owner:void 0})}if(function(e){const t=[ts.SyntaxKind.EqualsToken,ts.SyntaxKind.PlusEqualsToken,ts.SyntaxKind.MinusEqualsToken,ts.SyntaxKind.AsteriskEqualsToken,ts.SyntaxKind.AsteriskAsteriskEqualsToken,ts.SyntaxKind.SlashEqualsToken,ts.SyntaxKind.PercentEqualsToken,ts.SyntaxKind.LessThanLessThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,ts.SyntaxKind.AmpersandEqualsToken,ts.SyntaxKind.BarEqualsToken,ts.SyntaxKind.CaretEqualsToken];return ts.isBinaryExpression(e)&&t.some((t=>e.operatorToken.kind===t))}(r)){const t=e(r.right);let i;r.operatorToken.kind!==ts.SyntaxKind.EqualsToken&&(i=e(r.left));const s=r.left.getText();return n(i,n(t,{refs:[{kind:"assign",node:r,varName:s}],children:[],owner:void 0}))}if(ts.isFunctionExpression(r)||ts.isArrowFunction(r)||ts.isFunctionDeclaration(r)||ts.isMethodDeclaration(r)){const s=null===(i=r.name)||void 0===i?void 0:i.getText();let o;s&&(o={kind:"decl",node:r,varName:s});const a=r.parameters.map((t=>e(t))).reduce(n,t),l=e(r.body),u=n(a,l);return u.owner=r,{refs:o?[o]:[],children:[u],owner:void 0}}return r.getChildren().map(e).reduce(n,t)}(e);function n(e,n){return e&&n?{refs:[...e.refs,...n.refs],children:[...e.children,...n.children],owner:e.owner||n.owner}:e||n||t}}function n(e,t,r=[]){const i=[],s=[],o=[],a=[],l={};for(const n of e.refs)"read"===n.kind||"assign"===n.kind?l[n.varName]?o.push(n):p(n)?s.push(n):t&&t[n.varName]?i.push(n):a.push(n):l[n.varName]=n;const u=t||l,c=t?[...r,l]:[];return{globalUsage:i,nonlocalUsage:s,localUsage:o,environmentUsage:a,children:e.children.map((e=>n(e,u,c))),owner:e.owner};function p(e){return r.map((t=>t[e.varName])).reduce(((e,t)=>t||e),void 0)}}function r(e){return`${e.kind}:${e.varName}`}e.computeScopeVariableLookup=function(e){const r=n(t(e)),i=new Map,s=new Map;return function e(t){const n=a((r=t,[...r.globalUsage,...r.environmentUsage].filter((e=>"assign"===e.kind)).map((e=>e))));var r;i.set(t.owner,n);const o=a(function(e){return e.nonlocalUsage.filter((e=>"assign"===e.kind)).map((e=>e))}(t));s.set(t.owner,o),t.children.forEach(e)}(r),{getExplicitGlobals:e=>i.get(e)||[],getExplicitNonlocals:e=>s.get(e)||[]};function o(e){let t=e.node.operand||e.node.left;return ts.isIdentifier(t)?t:void 0}function a(e){return e.map(o).filter((e=>!!e)).map((e=>e)).reduce(((e,t)=>e.find((e=>e.text===t.text))?e:[...e,t]),[])}},e.toStringVariableScopes=function(i){const s=t(i),o=n(s);return function t(n){return[n.refs.map(r).join(", "),...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])]}(s).join("\n")+"\n\n\n"+function(t){return function t(n){const i=n.globalUsage.map(r).join(", "),s=n.nonlocalUsage.map(r).join(", "),o=n.localUsage.map(r).join(", "),a=n.environmentUsage.map(r).join(", ");return[i?"global "+i:"",s?"nonlocal "+s:"",o?"local "+o:"",a?"env "+a:"",...n.children.map(t).map((t=>t.map(e.indent1))).map((e=>["{",...e,"}"])).reduce(((e,t)=>[...e,...t]),[])].filter((e=>!!e))}(t).join("\n")}(o)}}(e.py||(e.py={}))}(pxt||(pxt={}));