{"version":3,"sources":["webpack:///./node_modules/core-js/modules/es.string.match.js","webpack:///./src/assets/blockly/blocks/gta_ai_turtle.js","webpack:///./public/blockly/msg/details/zh-hans-gta.js"],"names":["fixRegExpWellKnownSymbolLogic","anObject","toLength","requireObjectCoercible","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","this","matcher","undefined","call","RegExp","String","res","done","value","rx","S","global","fullUnicode","unicode","lastIndex","result","A","n","matchStr","Blockly","Blocks","init","appendDummyInput","appendField","setOutput","setStyle","setTooltip","setInputsInline","setHelpUrl","Msg","Python","block","code","ORDER_NONE","appendValueInput","setCheck","setAlign","ALIGN_RIGHT","FieldDropdown","setPreviousStatement","setNextStatement","value_name","valueToCode","ORDER_ATOMIC","replace","dropdown_name1","getFieldValue","num_name2","FieldAngle","angle_name2","FieldNumber","x","y","dropdown","axios","num","angle","radios","steps","FieldColour","diameter","color","speed","FieldTextInput","str","font_family","font_size","font_type","position","axiosX","axiosY","cor","ORDER_FUNCTION_CALL","pen_way","size","pencolor","fillcolor","begin_end","name1","shape","mode","val2","val3","val4","val","bgcolor","pic","method","val1","title","textInput","numInput","gtaMsgHans","path","console","log"],"mappings":"kHACA,IAAIA,EAAgC,EAAQ,QACxCC,EAAW,EAAQ,QACnBC,EAAW,EAAQ,QACnBC,EAAyB,EAAQ,QACjCC,EAAqB,EAAQ,QAC7BC,EAAa,EAAQ,QAGzBL,EAA8B,QAAS,GAAG,SAAUM,EAAOC,EAAaC,GACtE,MAAO,CAGL,SAAeC,GACb,IAAIC,EAAIP,EAAuBQ,MAC3BC,OAAoBC,GAAVJ,OAAsBI,EAAYJ,EAAOH,GACvD,YAAmBO,IAAZD,EAAwBA,EAAQE,KAAKL,EAAQC,GAAK,IAAIK,OAAON,GAAQH,GAAOU,OAAON,KAI5F,SAAUD,GACR,IAAIQ,EAAMT,EAAgBD,EAAaE,EAAQE,MAC/C,GAAIM,EAAIC,KAAM,OAAOD,EAAIE,MAEzB,IAAIC,EAAKnB,EAASQ,GACdY,EAAIL,OAAOL,MAEf,IAAKS,EAAGE,OAAQ,OAAOjB,EAAWe,EAAIC,GAEtC,IAAIE,EAAcH,EAAGI,QACrBJ,EAAGK,UAAY,EACf,IAEIC,EAFAC,EAAI,GACJC,EAAI,EAER,MAAwC,QAAhCF,EAASrB,EAAWe,EAAIC,IAAc,CAC5C,IAAIQ,EAAWb,OAAOU,EAAO,IAC7BC,EAAEC,GAAKC,EACU,KAAbA,IAAiBT,EAAGK,UAAYrB,EAAmBiB,EAAGnB,EAASkB,EAAGK,WAAYF,IAClFK,IAEF,OAAa,IAANA,EAAU,KAAOD,Q,gGC5B9BG,IAAQC,OAAO,kBAAoB,CACjCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKwB,WAAU,GACfxB,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK2B,iBAAgB,GACrB3B,KAAK4B,WAAWT,IAAQU,IAAI,qBAGhCV,IAAQW,OAAO,kBAAoB,SAASC,GAC1C,IAAIC,EAAO,UACX,MAAO,CAACA,EAAMb,IAAQW,OAAOG,aAI/Bd,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,WACN,CAAC,IAAK,QAER,SAEJtC,KAAKkC,iBAAiB,SAASC,SAAS,UACxCnC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,4BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIC,EAAiBd,EAAMe,cAAc,SACrCC,EAAY5B,IAAQW,OAAOY,YAC7BX,EACA,QACAZ,IAAQW,OAAOa,cAGbX,EAAO,GAAH,OAAMS,EAAN,YAAoBI,EAApB,YAAsCE,EAAtC,OACR,OAAOf,GAITb,IAAQC,OAAO,uBAAyB,CACtCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,YACN,CAAC,IAAK,OACN,CAAC,IAAK,WAER,SAEJtC,KAAKkC,iBAAiB,SAASC,SAAS,UACxCnC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,qCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,0BAIhCV,IAAQW,OAAO,uBAAyB,SAASC,GAC/C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIC,EAAiBd,EAAMe,cAAc,SACrCC,EAAY5B,IAAQW,OAAOY,YAC7BX,EACA,QACAZ,IAAQW,OAAOa,cAGbX,EAAO,GAAH,OAAMS,EAAN,YAAoBI,EAApB,YAAsCE,EAAtC,OACR,OAAOf,GAITb,IAAQC,OAAO,qBAAuB,CACpCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,SACP,CAAC,KAAM,UAET,SAEDf,YAAY,MACZA,YAAY,IAAIJ,IAAQ6B,WAAW,IAAK,SAC3ChD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,wBAIhCV,IAAQW,OAAO,qBAAuB,SAASC,GAC7C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIC,EAAiBd,EAAMe,cAAc,SACrCG,EAAclB,EAAMe,cAAc,SAClCd,EAAO,GAAH,OAAMS,EAAN,YAAoBI,EAApB,YAAsCI,EAAtC,OACR,OAAOjB,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,SACN,CAAC,IAAK,QAER,SAEDf,YAAY,IAAIJ,IAAQ6B,WAAW,IAAK,SAC3ChD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,2BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIC,EAAiBd,EAAMe,cAAc,SACrCG,EAAclB,EAAMe,cAAc,SAClCd,EAAO,GAAH,OAAMS,EAAN,YAAoBI,EAApB,YAAsCI,EAAtC,OACR,OAAOjB,GAITb,IAAQC,OAAO,mBAAqB,CAClCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,QACN,CAAC,IAAK,QAER,SAEDf,YAAY,IAAIJ,IAAQ6B,WAAW,IAAK,SAC3ChD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,2BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,sBAIhCV,IAAQW,OAAO,mBAAqB,SAASC,GAC3C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIC,EAAiBd,EAAMe,cAAc,SACrCG,EAAclB,EAAMe,cAAc,SAClCd,EAAO,GAAH,OAAMS,EAAN,YAAoBI,EAApB,YAAsCI,EAAtC,OACR,OAAOjB,GAITb,IAAQC,OAAO,mBAAqB,CAClCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,QACN,CAAC,IAAK,UACN,CAAC,IAAK,kBAER,SAEDf,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SAC3ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WACH,4CAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,sBAIhCV,IAAQW,OAAO,mBAAqB,SAASC,GAC3C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIO,EAAIpB,EAAMe,cAAc,SACxBM,EAAIrB,EAAMe,cAAc,SACxBO,EAAWtB,EAAMe,cAAc,SAC/Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBY,EAApB,YAAgCF,EAAhC,YAAqCC,EAArC,OACR,OAAOpB,GAITb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,KACN,CAAC,IAAK,OAER,SAEDf,YAAY,QACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SAC3ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIU,EAAQvB,EAAMe,cAAc,SAC5BS,EAAMxB,EAAMe,cAAc,SAC1Bd,EAAO,GAAH,OAAMS,EAAN,eAAuBa,EAAvB,YAAgCC,EAAhC,OACR,OAAOvB,GAITb,IAAQC,OAAO,yBAA2B,CACxCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,QACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,cACN,CAAC,IAAK,UAER,SAEDf,YAAY,IAAIJ,IAAQ+B,YAAY,IAAK,SACzC3B,YAAY,KACfvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,iCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,4BAIhCV,IAAQW,OAAO,yBAA2B,SAASC,GACjD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIY,EAAQzB,EAAMe,cAAc,SAC5BO,EAAWtB,EAAMe,cAAc,SAC/Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBY,EAApB,YAAgCG,EAAhC,OACR,OAAOxB,GAITb,IAAQC,OAAO,mBAAqB,CAClCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,QACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,sBAIhCV,IAAQW,OAAO,mBAAqB,SAASC,GAC3C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,aACR,OAAOT,GAITb,IAAQC,OAAO,qBAAuB,CACpCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,KAAM,SAC7ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,wBAIhCV,IAAQW,OAAO,qBAAuB,SAASC,GAC7C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIa,EAAS1B,EAAMe,cAAc,SAC7BU,EAAQzB,EAAMe,cAAc,SAC5Bd,EAAO,GAAH,OAAMS,EAAN,mBAA2BgB,EAA3B,YAAqCD,EAArC,OACR,OAAOxB,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,aACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SAC3ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIc,EAAQ3B,EAAMe,cAAc,SAC5BW,EAAS1B,EAAMe,cAAc,SAC7Bd,EAAO,GAAH,OAAMS,EAAN,mBAA2BgB,EAA3B,kBAA2CC,EAA3C,OACR,OAAO1B,GAITb,IAAQC,OAAO,kBAAoB,CACjCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,MACZA,YAAY,IAAIJ,IAAQwC,YAAY,WAAY,SACnD3D,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,qBAIhCV,IAAQW,OAAO,kBAAoB,SAASC,GAC1C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAEIZ,EAFA4B,EAAW7B,EAAMe,cAAc,SAC/Be,EAAQ9B,EAAMe,cAAc,SAOhC,OAJEd,EADE6B,EACK,GAAH,OAAMpB,EAAN,gBAAwBmB,EAAxB,YAAoCC,EAApC,OAEG,GAAH,OAAMpB,EAAN,gBAAwBmB,EAAxB,OAEC5B,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,MACfvB,KAAKkC,iBAAiB,SAASC,SAAS,MACxCnC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAMIZ,EANA4B,EAAW7B,EAAMe,cAAc,SAC/Be,EAAQ1C,IAAQW,OAAOY,YACzBX,EACA,OACAZ,IAAQW,OAAOa,cAQjB,OAJEX,EADE6B,EACK,GAAH,OAAMpB,EAAN,gBAAwBmB,EAAxB,YAAoCC,EAApC,OAEG,GAAH,OAAMpB,EAAN,gBAAwBmB,EAAxB,OAEC5B,GAITb,IAAQC,OAAO,mBAAqB,CAClCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,sBAIhCV,IAAQW,OAAO,mBAAqB,SAASC,GAC3C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,aACR,OAAOT,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SAC3ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIkB,EAAQ/B,EAAMe,cAAc,SAC5Bd,EAAO,GAAH,OAAMS,EAAN,kBAA0BqB,EAA1B,OACR,OAAO9B,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,QACZA,YAAY,IAAIJ,IAAQ4C,eAAe,eAAgB,SACvDxC,YAAY,MACZA,YAAY,IAAIJ,IAAQ4C,eAAe,SAAU,SACjDxC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,IAAK,SACzC3B,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,UACP,CAAC,KAAM,UACP,CAAC,KAAM,UAET,SAEJtC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIoB,EAAMjC,EAAMe,cAAc,SAC1BmB,EAAclC,EAAMe,cAAc,SAClCoB,EAAYnC,EAAMe,cAAc,SAChCqB,EAAYpC,EAAMe,cAAc,SAChCd,EAAO,GAAH,OAAMS,EAAN,mBAA2BuB,EAA3B,oBAA0CC,EAA1C,aAA0DC,EAA1D,aAAwEC,EAAxE,SACR,OAAOnC,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBACLtB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WACH,kCAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,cACR,OAAOT,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBACLtB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WACH,8CAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,cACR,OAAOT,GAMTb,IAAQC,OAAO,uBAAyB,CACtCC,KAAM,WACJrB,KAAKsB,mBACLtB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,QACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,YACN,CAAC,IAAK,SAER,SAEJtC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,6BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,0BAIhCV,IAAQW,OAAO,uBAAyB,SAASC,GAC/C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIwB,EAAWrC,EAAMe,cAAc,SAC/Bd,EAAO,GAAH,OAAMS,EAAN,YAAoB2B,EAApB,QACR,OAAOpC,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,UACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,KACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,SACfvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIyB,EAAStC,EAAMe,cAAc,SAC7BwB,EAASvC,EAAMe,cAAc,SAC7Bd,EAAO,GAAH,OAAMS,EAAN,oBAA4B4B,EAA5B,YAAsCC,EAAtC,OACR,OAAOtC,GAITb,IAAQC,OAAO,kBAAoB,CACjCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,QACN,CAAC,IAAK,UAER,SAEDf,YAAY,MACfvB,KAAK2B,iBAAgB,GACrB3B,KAAKwB,WAAU,GACfxB,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,qBAIhCV,IAAQW,OAAO,kBAAoB,SAASC,GAC1C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI2B,EAAMxC,EAAMe,cAAc,SAC1Bd,EAAO,GAAH,OAAMS,EAAN,YAAoB8B,EAApB,MACR,MAAO,CAACvC,EAAMb,IAAQW,OAAO0C,sBAI/BrD,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,aAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,gBACR,OAAOT,GAITb,IAAQC,OAAO,uBAAyB,CACtCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,UACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SACxC3B,YAAY,QACfvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WACH,qCAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,0BAIhCV,IAAQW,OAAO,uBAAyB,SAASC,GAC/C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIO,EAAIpB,EAAMe,cAAc,SACxBM,EAAIrB,EAAMe,cAAc,SAExBd,EAAO,GAAH,OAAMS,EAAN,qBAA6BU,EAA7B,YAAkCC,EAAlC,OACR,OAAOpB,GAKTb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,YACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WACH,wCAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,gBACR,OAAOT,GAGTb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,YACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,cACdzB,KAAK0B,WAAW,yCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAE1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,gBACR,OAAOT,GAITb,IAAQC,OAAO,4BAA8B,CAC3CC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YACtB,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,WACP,CAAC,KAAM,WAET,SAEFtC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,+BAIhCV,IAAQW,OAAO,4BAA8B,SAASC,GACpD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI6B,EAAU1C,EAAMe,cAAc,SAC9Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBgC,EAApB,QACR,OAAOzC,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,WACN,CAAC,IAAK,MACN,CAAC,IAAK,UAER,SAEJtC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WACH,mCAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI6B,EAAU1C,EAAMe,cAAc,SAC9Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBgC,EAApB,QACR,OAAOzC,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,SACN,CAAC,IAAK,MACN,CAAC,IAAK,QAER,SAEJtC,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WACH,oCAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI6B,EAAU1C,EAAMe,cAAc,SAC9Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBgC,EAApB,QACR,OAAOzC,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAY,GAAI,SAC3ClD,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,UAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI8B,EAAO3C,EAAMe,cAAc,SAC3Bd,EAAO,GAAH,OAAMS,EAAN,oBAA4BiC,EAA5B,OACR,OAAO1C,GAITb,IAAQC,OAAO,qBAAuB,CACpCC,KAAM,WACJrB,KAAKsB,mBACLtB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,UACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,gCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,wBAIhCV,IAAQW,OAAO,qBAAuB,SAASC,GAC7C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,eACR,OAAOT,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YAAY,IAAIJ,IAAQwC,YAAY,WAAY,SACnD3D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI+B,EAAW5C,EAAMe,cAAc,SAC/Bd,EAAO,GAAH,OAAMS,EAAN,mBAA2BkC,EAA3B,QACR,OAAO3C,GAITb,IAAQC,OAAO,uBAAyB,CACtCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,SACZA,YAAY,IAAIJ,IAAQwC,YAAY,WAAY,SACnD3D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,0BAIhCV,IAAQW,OAAO,uBAAyB,SAASC,GAC/C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAI+B,EAAW5C,EAAMe,cAAc,SAC/Bd,EAAO,GAAH,OAAMS,EAAN,sBAA8BkC,EAA9B,QACR,OAAO3C,GAITb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,UACZA,YAAY,IAAIJ,IAAQwC,YAAY,WAAY,SACnD3D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIgC,EAAY7C,EAAMe,cAAc,SAEhCd,EAAO,GAAH,OAAMS,EAAN,uBAA+BmC,EAA/B,QACR,OAAO5C,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBACLtB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,UACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,gCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,gBACR,OAAOT,GAITb,IAAQC,OAAO,6BAA+B,CAC5CC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,UACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,cACP,CAAC,KAAM,cAET,SAEJtC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,yBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,gCAIhCV,IAAQW,OAAO,6BAA+B,SAASC,GACrD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIiC,EAAY9C,EAAMe,cAAc,SAChCd,EAAO,GAAH,OAAMS,EAAN,YAAoBoC,EAApB,QACR,OAAO7C,GAITb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,QACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,QACpCvB,KAAK2B,iBAAgB,GACrB3B,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC3Bb,EAAMe,cAAc,SAAnC,IACId,EAAO,GAAH,OAAMS,EAAN,wBACR,OAAOT,GAMTb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YACtB,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,cACP,CAAC,KAAM,gBAET,SAEFtC,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIkC,EAAQ/C,EAAMe,cAAc,SAC5Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBqC,EAApB,QACR,OAAO9C,GAITb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,SACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,iCAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,kBACR,OAAOT,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,OACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,KAAM,SACP,CAAC,KAAM,WACP,CAAC,KAAM,UACP,CAAC,IAAK,UACN,CAAC,KAAM,YAET,SAEJtC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAImC,EAAQhD,EAAMe,cAAc,SAC5Bd,EAAO,GAAH,OAAMS,EAAN,mBAA2BsC,EAA3B,QACR,OAAO/C,GAITb,IAAQC,OAAO,yBAA2B,CACxCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,WACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,OAAQ,QACT,CAAC,OAAQ,QACT,CAAC,WAAY,cAEf,SAEJtC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,uEAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,4BAIhCV,IAAQW,OAAO,yBAA2B,SAASC,GACjD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIoC,EAAOjD,EAAMe,cAAc,SAC3Bd,EAAO,GAAH,OAAMS,EAAN,wBAAgCuC,EAAhC,QACR,OAAOhD,GAITb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBACFC,YAAY,SACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,aACN,CAAC,IAAK,gBAER,SAEDf,YAAY,UACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SAC1ClD,KAAKsB,mBAAmBC,YAAY,UACnCA,YAAY,IAAIJ,IAAQ+B,YAAe,SACxClD,KAAKsB,mBAAmBC,YAAY,QACnCA,YAAY,IAAIJ,IAAQ+B,YAAe,SACxClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,oJAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIoC,EAAOjD,EAAMe,cAAc,SAC3BmC,EAAOlD,EAAMe,cAAc,SAC3BoC,EAAOnD,EAAMe,cAAc,SAC3BqC,EAAOpD,EAAMe,cAAc,SAC3Bd,EAAO,GAAH,OAAMS,EAAN,YAAoBuC,EAApB,YAA4BC,EAA5B,YAAoCC,EAApC,YAA4CC,EAA5C,OACR,OAAOnD,GAITb,IAAQC,OAAO,0BAA4B,CACzCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,SACnCA,YAAY,IAAIJ,IAAQ+B,YAAe,SACxClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,kHAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,6BAIhCV,IAAQW,OAAO,0BAA4B,SAASC,GAClD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IACIZ,EADAoD,EAAMrD,EAAMe,cAAc,SAO9B,OAJEd,EADEoD,EACK,GAAH,OAAM3C,EAAN,wBAAgC2C,EAAhC,OAEG,GAAH,OAAM3C,EAAN,oBAECT,GAITb,IAAQC,OAAO,2BAA6B,CAC1CC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,UACnCA,YAAY,IAAIJ,IAAQ+B,YAAe,SACxClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,qDAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,8BAIhCV,IAAQW,OAAO,2BAA6B,SAASC,GACnD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIwC,EAAMrD,EAAMe,cAAc,SAC1Bd,EAAO,GAAH,OAAMS,EAAN,yBAAiC2C,EAAjC,OACR,OAAOpD,GAITb,IAAQC,OAAO,mBAAqB,CAClCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,QACnCA,YAAY,IAAIJ,IAAQ+B,YAAe,SACxClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,iDAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,sBAIhCV,IAAQW,OAAO,mBAAqB,SAASC,GAC3C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIwC,EAAMrD,EAAMe,cAAc,SAC1Bd,EAAO,GAAH,OAAMS,EAAN,iBAAyB2C,EAAzB,OACR,OAAOpD,GAITb,IAAQC,OAAO,6BAA+B,CAC5CC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aAClBrC,KAAKsB,mBACJC,YAAY,YACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SAC1ClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,kNAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,gCAIhCV,IAAQW,OAAO,6BAA+B,SAASC,GACrD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIwC,EAAMrD,EAAMe,cAAc,SAC1BmC,EAAOlD,EAAMe,cAAc,SAC3BoC,EAAOnD,EAAMe,cAAc,SAC3BqC,EAAOpD,EAAMe,cAAc,SAC3Bd,EAAO,GAAH,OAAMS,EAAN,2BAAmC2C,EAAnC,YAA0CH,EAA1C,YAAkDC,EAAlD,YAA0DC,EAA1D,OACR,OAAOnD,GAITb,IAAQC,OAAO,4BAA8B,CAC3CC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aAClBrC,KAAKsB,mBACJC,YAAY,YACfvB,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WACH,mDAEF1B,KAAK4B,WAAWT,IAAQU,IAAI,+BAIhCV,IAAQW,OAAO,4BAA8B,SAASC,GACpD,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,sBACR,OAAOT,GAOTb,IAAQC,OAAO,sBAAwB,CACrCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,UACZA,YAAY,IAAIJ,IAAQwC,YAAY,WAAY,SACnD3D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,yBAIhCV,IAAQW,OAAO,sBAAwB,SAASC,GAC9C,IAAIsD,EAAUtD,EAAMe,cAAc,SAE9Bd,EAAO,4BAAH,OAA+BqD,EAA/B,QACR,OAAOrD,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,QACbvB,KAAKkC,iBAAiB,SAASC,WACjCnC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,iHAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIuD,EAAMnE,IAAQW,OAAOY,YACvBX,EACA,QACAZ,IAAQW,OAAOa,cAEbX,EAAO,yBAAH,OAA4BsD,EAA5B,OACR,OAAOtD,GAKTb,IAAQC,OAAO,0BAA4B,CACzCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,MACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,eACN,CAAC,IAAK,WAER,SAEJtC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,kFAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,6BAIhCV,IAAQW,OAAO,0BAA4B,SAASC,GAClD,IAAIwD,EAASxD,EAAMe,cAAc,SAE7Bd,EAAO,mBAAH,OAAsBuD,EAAtB,QACR,OAAOvD,GAGTb,IAAQC,OAAO,0BAA4B,CACzCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,QACZA,YACC,IAAIJ,IAAQmB,cAAc,CACxB,CAAC,IAAK,eACN,CAAC,IAAK,WAER,SAEJtC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,+BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,6BAIhCV,IAAQW,OAAO,0BAA4B,SAASC,GAClD,IAAIwD,EAASxD,EAAMe,cAAc,SAC7Bd,EAAO,mBAAH,OAAsBuD,EAAtB,QACR,OAAOvD,GAITb,IAAQC,OAAO,yBAA2B,CACxCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,QACZA,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SAC1ClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,+BAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,4BAIhCV,IAAQW,OAAO,yBAA2B,SAASC,GACjD,IAAIyD,EAAOzD,EAAMe,cAAc,SAC3BmC,EAAOlD,EAAMe,cAAc,SAC3Bd,EAAO,8BAAH,OAAiCwD,EAAjC,YAAyCP,EAAzC,OACR,OAAOjD,GAITb,IAAQC,OAAO,kCAAoC,CACjDC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,SACZA,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,SACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SAE1ClD,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,wFAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,qCAIhCV,IAAQW,OAAO,kCAAoC,SAASC,GAC1D,IAAIyD,EAAOzD,EAAMe,cAAc,SAC3BmC,EAAOlD,EAAMe,cAAc,SAC3BoC,EAAOnD,EAAMe,cAAc,SAC3BqC,EAAOpD,EAAMe,cAAc,SAC3Bd,EAAO,uCAAH,OAA0CwD,EAA1C,YAAkDP,EAAlD,YAA0DC,EAA1D,YAAkEC,EAAlE,OACR,OAAOnD,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,OACfvB,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,6DAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIyD,EAAOzD,EAAMe,cAAc,SAC3Bd,EAAO,yBAAH,OAA4BwD,EAA5B,OACR,OAAOxD,GAITb,IAAQC,OAAO,qBAAuB,CACpCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,MACZA,YAAY,IAAIJ,IAAQ+B,YAAe,SACvC3B,YAAY,OACfvB,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,6DAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,wBAIhCV,IAAQW,OAAO,qBAAuB,SAASC,GAC7C,IAAIyD,EAAOzD,EAAMe,cAAc,SAC3Bd,EAAO,0BAAH,OAA6BwD,EAA7B,OACR,OAAOxD,GAQTb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKsB,mBAAmBC,YAAY,MACpCvB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,cACR,OAAOT,GAKTb,IAAQC,OAAO,wBAA0B,CACvCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,UACZA,YAAY,IAAIJ,IAAQ4C,eAAe,OAAQ,SAC/CxC,YAAY,MACZA,YAAY,IAAIJ,IAAQ4C,eAAe,QAAS,SACnD/D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,2BAIhCV,IAAQW,OAAO,wBAA0B,SAASC,GAChD,IAAI0D,EAAQ1D,EAAMe,cAAc,SAC5B4C,EAAY3D,EAAMe,cAAc,SAChCd,EAAO,4BAAH,OAA+ByD,EAA/B,cAA0CC,EAA1C,QACR,OAAO1D,GAITb,IAAQC,OAAO,uBAAyB,CACtCC,KAAM,WACJrB,KAAKsB,mBACFC,YAAY,YACZA,YAAY,IAAIJ,IAAQ4C,eAAe,OAAQ,SAC/CxC,YAAY,MACZA,YAAY,IAAIJ,IAAQ4C,eAAe,QAAS,SACnD/D,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,0BAIhCV,IAAQW,OAAO,uBAAyB,SAASC,GAC/C,IAAI0D,EAAQ1D,EAAMe,cAAc,SAC5B6C,EAAW5D,EAAMe,cAAc,SAC/Bd,EAAO,2BAAH,OAA8ByD,EAA9B,cAAyCE,EAAzC,QACR,OAAO3D,GAITb,IAAQC,OAAO,oBAAsB,CACnCC,KAAM,WACJrB,KAAKkC,iBAAiB,QACnBC,SAAS,MACTC,SAASjB,IAAQkB,aACpBrC,KAAKsB,mBAAmBC,YAAY,OACpCvB,KAAKuC,sBAAqB,EAAM,MAChCvC,KAAKwC,kBAAiB,EAAM,MAC5BxC,KAAK2B,iBAAgB,GACrB3B,KAAKyB,SAAS,wBACdzB,KAAK0B,WAAW,IAChB1B,KAAK4B,WAAWT,IAAQU,IAAI,uBAIhCV,IAAQW,OAAO,oBAAsB,SAASC,GAC5C,IAAIU,EAAatB,IAAQW,OAAOY,YAC9BX,EACA,OACAZ,IAAQW,OAAOa,cAEjBF,EAAaA,EAAWG,QAAQ,SAAU,IAC1C,IAAIZ,EAAO,GAAH,OAAMS,EAAN,cACR,OAAOT,I,kCCr6DT,2DAIa4D,EAAa,WAA0C,IAAzCC,EAAyC,qFAGpEC,QAAQC,IAAI,SAASF,GAEnB1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,mCACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BACA1E,IAAQU,IAAR,6BAAoCgE,EAApC,gCACA1E,IAAQU,IAAR,6BAAoCgE,EAApC,gCACA1E,IAAQU,IAAR,6BAAoCgE,EAApC,gCAGA1E,IAAQU,IAAR,qCAEOgE,EAFP,qCAKA1E,IAAQU,IAAR,6CAEOgE,EAFP,yCAOA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,8BAGA1E,IAAQU,IAAR,sCAEOgE,EAFP,kCAKA1E,IAAQU,IAAR,oCAA2CgE,EAA3C,gCAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,6BAGA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,8BAGA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,+BAGA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,8BAIA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,+BAGA1E,IAAQU,IAAR,yCAEOgE,EAFP,uCAKA1E,IAAQU,IAAR,qCAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,qCAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,iCAGA1E,IAAQU,IAAR,qCAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,+BAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,+BAGA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,6BAGA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,iCAGA1E,IAAQU,IAAR,0CAEOgE,EAFP,wCAKA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,8BAGA1E,IAAQU,IAAR,uCAEOgE,EAFP,qCAKA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,gCAGA1E,IAAQU,IAAR,oCAEOgE,EAFP,kCAKA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,8BAIA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,mBAGA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,wBAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,0BAGA1E,IAAQU,IAAR,oCAEOgE,EAFP,qCAKA1E,IAAQU,IAAR,sCAEOgE,EAFP,uCAKA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,8BAGA1E,IAAQU,IAAR,yCAEOgE,EAFP,kCAKA1E,IAAQU,IAAR,2CAEOgE,EAFP,oCAKA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,2BAGA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,2BAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,0BAGA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,4BAGA1E,IAAQU,IAAR,wCAEOgE,EAFP,gCAKA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,0BAGA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,wBAIA1E,IAAQU,IAAR,uCAEOgE,EAFP,gCAKA1E,IAAQU,IAAR,0CAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,6BAGA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,6BAGA1E,IAAQU,IAAR,oCAA2CgE,EAA3C,4BAGA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,2BAGA1E,IAAQU,IAAR,uCAEOgE,EAFP,+BAKA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,4BAGA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,2BAGA1E,IAAQU,IAAR,0CAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,4CAEOgE,EAFP,qCAKA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,yBAIA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,gCAGA1E,IAAQU,IAAR,sCAEOgE,EAFP,qCAKA1E,IAAQU,IAAR,8BAAqCgE,EAArC,6BAGA1E,IAAQU,IAAR,qCAEOgE,EAFP,wCAKA1E,IAAQU,IAAR,oCAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,iCAGA1E,IAAQU,IAAR,oCAEOgE,EAFP,mCAKA1E,IAAQU,IAAR,2CAEOgE,EAFP,0CAKA1E,IAAQU,IAAR,yCAEOgE,EAFP,wCAKA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,gCAEA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,8BAEA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,gCAGA1E,IAAQU,IAAR,4CAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,0CAEOgE,EAFP,uCAIA1E,IAAQU,IAAR,yCAEOgE,EAFP,sCAIA1E,IAAQU,IAAR,6CAAoDgE,EAApD,oBAEA1E,IAAQU,IAAR,2CAAkDgE,EAAlD,oBAIA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,iBAGA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,0BAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,2BAGA1E,IAAQU,IAAR,sCAEOgE,EAFP,gCAKA1E,IAAQU,IAAR,sCAEOgE,EAFP,gCAKA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,0BAGA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,2BAMA1E,IAAQU,IAAR,gDAAuDgE,EAAvD,mBAIA1E,IAAQU,IAAR,kDAEOgE,EAFP,sBAKA1E,IAAQU,IAAR,sDAEOgE,EAFP,sBAKA1E,IAAQU,IAAR,uDAEOgE,EAFP,sBAKA1E,IAAQU,IAAR,oDAEOgE,EAFP,sBAKA1E,IAAQU,IAAR,2DAEOgE,EAFP,sBAKA1E,IAAQU,IAAR,kDAEOgE,EAFP,sBAMA1E,IAAQU,IAAR,qDAEOgE,EAFP,yBAKA1E,IAAQU,IAAR,wDAEOgE,EAFP,yBAMA1E,IAAQU,IAAR,uDAEOgE,EAFP,+BAKA1E,IAAQU,IAAR,kEAEOgE,EAFP,+BAKA1E,IAAQU,IAAR,2DAEOgE,EAFP,+BAKA1E,IAAQU,IAAR,4DAEOgE,EAFP,+BAMA1E,IAAQU,IAAR,yCAEOgE,EAFP,6BAOA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,iCAEOgE,EAFP,0CAIA1E,IAAQU,IAAR,+BAEOgE,EAFP,wCAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,6BAAoCgE,EAApC,sCAEA1E,IAAQU,IAAR,6BAAoCgE,EAApC,sCAEA1E,IAAQU,IAAR,kCAEOgE,EAFP,2CAIA1E,IAAQU,IAAR,mCAEOgE,EAFP,4CAIA1E,IAAQU,IAAR,6BAAoCgE,EAApC,sCAEA1E,IAAQU,IAAR,+BAEOgE,EAFP,wCAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,6BAAoCgE,EAApC,sCAEA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,qCAEA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,qCAEA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,iCAEOgE,EAFP,0CAIA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAKA1E,IAAQU,IAAR,gCAEOgE,EAFP,0CAIA1E,IAAQU,IAAR,8BAEOgE,EAFP,wCAIA1E,IAAQU,IAAR,gCAEOgE,EAFP,0CAIA1E,IAAQU,IAAR,+BAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,8BAEOgE,EAFP,wCAIA1E,IAAQU,IAAR,8BAEOgE,EAFP,wCAIA1E,IAAQU,IAAR,iCAEOgE,EAFP,2CAIA1E,IAAQU,IAAR,kCAEOgE,EAFP,4CAIA1E,IAAQU,IAAR,gCAEOgE,EAFP,0CAIA1E,IAAQU,IAAR,uCAEOgE,EAFP,iDAKA1E,IAAQU,IAAR,kCAEOgE,EAFP,2CAIA1E,IAAQU,IAAR,kCAEOgE,EAFP,2CAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,mCAEOgE,EAFP,4CAIA1E,IAAQU,IAAR,kCAEOgE,EAFP,2CAIA1E,IAAQU,IAAR,oCAEOgE,EAFP,6CAIA1E,IAAQU,IAAR,qCAEOgE,EAFP,8CAIA1E,IAAQU,IAAR,6BAAoCgE,EAApC,sCAEA1E,IAAQU,IAAR,uCAEOgE,EAFP,gDAIA1E,IAAQU,IAAR,sCAEOgE,EAFP,+CAMA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,oCAEOgE,EAFP,6CAIA1E,IAAQU,IAAR,oCAEOgE,EAFP,6CAIA1E,IAAQU,IAAR,mCAEOgE,EAFP,4CAIA1E,IAAQU,IAAR,4CAEOgE,EAFP,qDAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,gCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,8BAAqCgE,EAArC,uCAEA1E,IAAQU,IAAR,sCAEOgE,EAFP,yCAIA1E,IAAQU,IAAR,kCAEOgE,EAFP,qCAIA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,oCAQA1E,IAAQU,IAAR,8BAAqCgE,EAArC,gCAGA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,kCAGA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,sCACA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,kCACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,+BAEA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,mCACA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,qCACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,wCACA1E,IAAQU,IAAR,wCAA+CgE,EAA/C,0CACA1E,IAAQU,IAAR,6BAAoCgE,EAApC,+BAEA1E,IAAQU,IAAR,2CAAkDgE,EAAlD,+CACA1E,IAAQU,IAAR,8BAAqCgE,EAArC,kCACA1E,IAAQU,IAAR,uCAA8CgE,EAA9C,2CACA1E,IAAQU,IAAR,0BAAiCgE,EAAjC,8BACA1E,IAAQU,IAAR,wCAA+CgE,EAA/C,4CACA1E,IAAQU,IAAR,2BAAkCgE,EAAlC,+BACA1E,IAAQU,IAAR,uCAA8CgE,EAA9C,2CACA1E,IAAQU,IAAR,0BAAiCgE,EAAjC,8BAEA1E,IAAQU,IAAR,2BAAkCgE,EAAlC,6BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,8BACA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,mCACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,8BACA1E,IAAQU,IAAR,4BAAmCgE,EAAnC,8BAEA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,oCAA2CgE,EAA3C,wCACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,yCAEA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,yCACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,yCACA1E,IAAQU,IAAR,mCAA0CgE,EAA1C,uCACA1E,IAAQU,IAAR,oCAA2CgE,EAA3C,wCAEA1E,IAAQU,IAAR,yCAAgDgE,EAAhD,+CACA1E,IAAQU,IAAR,0CAAiDgE,EAAjD,gDACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,2CACA1E,IAAQU,IAAR,6BAAoCgE,EAApC,mCACA1E,IAAQU,IAAR,kCAAyCgE,EAAzC,wCACA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,sCACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,4CACA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,sCACA1E,IAAQU,IAAR,iCAAwCgE,EAAxC,uCAEA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,kCACA1E,IAAQU,IAAR,wCAA+CgE,EAA/C,2CAUD1E,IAAQU,IAAR,uBAA8BgE,EAA9B,yBACA1E,IAAQU,IAAR,gCAAuCgE,EAAvC,kCACA1E,IAAQU,IAAR,+BAAsCgE,EAAtC,iCACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,uCACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,uCAGA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,yCACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,yCAEA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,yCACA1E,IAAQU,IAAR,uCAA8CgE,EAA9C,2CACA1E,IAAQU,IAAR,sCAA6CgE,EAA7C,0CACA1E,IAAQU,IAAR,uCAA8CgE,EAA9C,2CAEA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,uCAEA1E,IAAQU,IAAR,uCAA8CgE,EAA9C,0CACA1E,IAAQU,IAAR,0CAAiDgE,EAAjD,6CAEA1E,IAAQU,IAAR,2CAAkDgE,EAAlD,6CACA1E,IAAQU,IAAR,2BAAkCgE,EAAlC,6BACA1E,IAAQU,IAAR,yCAAgDgE,EAAhD,2CACA1E,IAAQU,IAAR,wCAA+CgE,EAA/C,0CACA1E,IAAQU,IAAR,yCAAgDgE,EAAhD,2CACA1E,IAAQU,IAAR,qCAA4CgE,EAA5C,uCACA1E,IAAQU,IAAR,uCAA8CgE,EAA9C","file":"js/chunk-269e3410.2658ae36.js","sourcesContent":["'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","/**\n * @override\n * 自定义积木,要采用统一样式,必须在定义积木样式, \n * 设置output:'String/Number/Boolean/...'\n *\n * skulpt海龟库的教程文档:\n * https://runestone.academy/runestone/books/published/thinkcspy/PythonTurtle/OurFirstTurtleProgram.html \n *\n */\nimport Blockly from 'blockly'\n\n// 画笔\nBlockly.Blocks['gta_turtle_pan'] = {\n init: function() {\n this.appendDummyInput().appendField('画笔')\n this.setOutput(true)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setInputsInline(true)\n this.setHelpUrl(Blockly.Msg['gta_turtle_pan'])\n },\n}\nBlockly.Python['gta_turtle_pan'] = function(block) {\n var code = 'gta_pen'\n return [code, Blockly.Python.ORDER_NONE]\n}\n\n//海龟动作-移动和绘制-前进\nBlockly.Blocks['gta_turtle_forward'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('前进')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'forward'],\n ['二', 'fd'],\n ]),\n 'NAME1'\n )\n this.appendValueInput('NAME2').setCheck('Number')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('前进一forward和前进二fd是效果一样的方法')\n this.setHelpUrl(Blockly.Msg['gta_turtle_forward'])\n },\n}\n\nBlockly.Python['gta_turtle_forward'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var dropdown_name1 = block.getFieldValue('NAME1')\n var num_name2 = Blockly.Python.valueToCode(\n block,\n 'NAME2',\n Blockly.Python.ORDER_ATOMIC\n )\n\n var code = `${value_name}.${dropdown_name1}(${num_name2})\\n`\n return code\n}\n\n// 海龟动作-移动和绘制-后退\nBlockly.Blocks['gta_turtle_backward'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('后退')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'backward'],\n ['二', ' bk'],\n ['三', ' back'],\n ]),\n 'NAME1'\n )\n this.appendValueInput('NAME2').setCheck('Number')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('后退一backward、后退二bk、后退三back是效果一样的方法')\n this.setHelpUrl(Blockly.Msg['gta_turtle_backward'])\n },\n}\n\nBlockly.Python['gta_turtle_backward'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var dropdown_name1 = block.getFieldValue('NAME1')\n var num_name2 = Blockly.Python.valueToCode(\n block,\n 'NAME2',\n Blockly.Python.ORDER_ATOMIC\n )\n\n var code = `${value_name}.${dropdown_name1}(${num_name2})\\n`\n return code\n}\n\n// 画笔旋转 - 废除\nBlockly.Blocks['gta_turtle_rotate'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(\n new Blockly.FieldDropdown([\n ['向右', 'right'],\n ['向左', 'left'],\n ]),\n 'NAME1'\n )\n .appendField('旋转')\n .appendField(new Blockly.FieldAngle(90), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_rotate'])\n },\n}\n\nBlockly.Python['gta_turtle_rotate'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n // console.log('value_name', value_name)\n var dropdown_name1 = block.getFieldValue('NAME1')\n var angle_name2 = block.getFieldValue('NAME2')\n var code = `${value_name}.${dropdown_name1}(${angle_name2})\\n`\n return code\n}\n\n// 海龟动作-移动和绘制-右转\nBlockly.Blocks['gta_turtle_right'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('右转')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'right'],\n ['二', 'rt'],\n ]),\n 'NAME1'\n )\n .appendField(new Blockly.FieldAngle(90), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('右转一right、右转二rt、是效果一样的方法')\n this.setHelpUrl(Blockly.Msg['gta_turtle_right'])\n },\n}\n\nBlockly.Python['gta_turtle_right'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var dropdown_name1 = block.getFieldValue('NAME1')\n var angle_name2 = block.getFieldValue('NAME2')\n var code = `${value_name}.${dropdown_name1}(${angle_name2})\\n`\n return code\n}\n\n// 海龟动作-移动和绘制-左转\nBlockly.Blocks['gta_turtle_left'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('左转')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'left'],\n ['二', 'lt'],\n ]),\n 'NAME1'\n )\n .appendField(new Blockly.FieldAngle(90), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('左转一right、左转二rt、是效果一样的方法')\n this.setHelpUrl(Blockly.Msg['gta_turtle_left'])\n },\n}\n\nBlockly.Python['gta_turtle_left'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n // console.log('value_name', value_name)\n var dropdown_name1 = block.getFieldValue('NAME1')\n var angle_name2 = block.getFieldValue('NAME2')\n var code = `${value_name}.${dropdown_name1}(${angle_name2})\\n`\n return code\n}\n\n// goto\nBlockly.Blocks['gta_turtle_goto'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('前往')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'goto'],\n ['二', 'setpos'],\n ['三', ' setposition'],\n ]),\n 'NAME3'\n )\n .appendField('X:')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('Y:')\n .appendField(new Blockly.FieldNumber(0), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip(\n '前往一goto、前往二setpos、前往三setposition是效果一样的方法'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_goto'])\n },\n}\n\nBlockly.Python['gta_turtle_goto'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var x = block.getFieldValue('NAME1')\n var y = block.getFieldValue('NAME2')\n var dropdown = block.getFieldValue('NAME3')\n var code = `${value_name}.${dropdown}(${x},${y})\\n`\n return code\n}\n\n// setx_sety 设置x或y的坐标\nBlockly.Blocks['gta_turtle_setx_sety'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('设置')\n .appendField(\n new Blockly.FieldDropdown([\n ['x', 'x'],\n ['y', 'y'],\n ]),\n 'NAME1'\n )\n .appendField('坐标为:')\n .appendField(new Blockly.FieldNumber(0), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_setx_sety'])\n },\n}\n\nBlockly.Python['gta_turtle_setx_sety'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var axios = block.getFieldValue('NAME1')\n var num = block.getFieldValue('NAME2')\n var code = `${value_name}.set${axios}(${num})\\n`\n return code\n}\n\n//设置朝向 画笔面向多少度\nBlockly.Blocks['gta_turtle_setheading'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('设置朝向')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'setheading'],\n ['二', 'seth'],\n ]),\n 'NAME2'\n )\n .appendField(new Blockly.FieldNumber(90), 'NAME1')\n .appendField('度')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('设置朝向一setheading和朝向二seth是一样的方法')\n this.setHelpUrl(Blockly.Msg['gta_turtle_setheading'])\n },\n}\n\nBlockly.Python['gta_turtle_setheading'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var angle = block.getFieldValue('NAME1')\n var dropdown = block.getFieldValue('NAME2')\n var code = `${value_name}.${dropdown}(${angle})\\n`\n return code\n}\n\n//返回原点-新\nBlockly.Blocks['gta_turtle_home'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField('返回原点')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_home'])\n },\n}\n\nBlockly.Python['gta_turtle_home'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n\n var code = `${value_name}.home()\\n`\n return code\n}\n\n// 画圆/圆弧\nBlockly.Blocks['gta_turtle_circle'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('画圆:半径')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('角度')\n .appendField(new Blockly.FieldNumber(360), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_circle'])\n },\n}\n\nBlockly.Python['gta_turtle_circle'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var radios = block.getFieldValue('NAME1')\n var angle = block.getFieldValue('NAME2')\n var code = `${value_name}.circle(${radios},${angle})\\n`\n return code\n}\n\n// 绘制正多边形\nBlockly.Blocks['gta_turtle_polygon'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('绘制')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('边形:外接圆的半径')\n .appendField(new Blockly.FieldNumber(0), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_polygon'])\n },\n}\n\nBlockly.Python['gta_turtle_polygon'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var steps = block.getFieldValue('NAME1')\n var radios = block.getFieldValue('NAME2')\n var code = `${value_name}.circle(${radios},steps=${steps})\\n`\n return code\n}\n\n// 绘制圆dot\nBlockly.Blocks['gta_turtle_dot'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('画点:')\n .appendField('直径')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('颜色')\n .appendField(new Blockly.FieldColour('#ff0000'), 'NAME2')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_dot'])\n },\n}\n\nBlockly.Python['gta_turtle_dot'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var diameter = block.getFieldValue('NAME1')\n var color = block.getFieldValue('NAME2')\n var code\n if (color) {\n code = `${value_name}.dot(${diameter},${color})\\n`\n } else {\n code = `${value_name}.dot(${diameter})\\n`\n }\n return code\n}\n\n// 绘制圆dot 新\nBlockly.Blocks['gta_turtle_dot_2'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('画点:')\n .appendField('直径')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('颜色')\n this.appendValueInput('NAME2').setCheck(null)\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_dot_2'])\n },\n}\n\nBlockly.Python['gta_turtle_dot_2'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var diameter = block.getFieldValue('NAME1')\n var color = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n var code\n if (color) {\n code = `${value_name}.dot(${diameter},${color})\\n`\n } else {\n code = `${value_name}.dot(${diameter})\\n`\n }\n return code\n}\n\n// 撤销 新\nBlockly.Blocks['gta_turtle_undo'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField('撤销')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_undo'])\n },\n}\n\nBlockly.Python['gta_turtle_undo'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.undo()\\n`\n return code\n}\n\n// 设置画笔速度\nBlockly.Blocks['gta_turtle_speed'] = {\n init: function() {\n this.appendDummyInput().appendField('设置')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('速度')\n .appendField(new Blockly.FieldNumber(5), 'NAME1')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_speed'])\n },\n}\n\nBlockly.Python['gta_turtle_speed'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var speed = block.getFieldValue('NAME1')\n var code = `${value_name}.speed(${speed})\\n`\n return code\n}\n\n// 绘制文字印章write\nBlockly.Blocks['gta_turtle_write'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('文字印章')\n .appendField(new Blockly.FieldTextInput('hello world'), 'NAME1')\n .appendField('字体')\n .appendField(new Blockly.FieldTextInput('Arial'), 'NAME2')\n .appendField('字号')\n .appendField(new Blockly.FieldNumber(10), 'NAME3')\n .appendField('类型')\n .appendField(\n new Blockly.FieldDropdown([\n ['正常', 'normal'],\n ['倾斜', 'italic'],\n ['加粗', 'bold'],\n ]),\n 'NAME4'\n )\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_write'])\n },\n}\n\nBlockly.Python['gta_turtle_write'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n\n var str = block.getFieldValue('NAME1')\n var font_family = block.getFieldValue('NAME2')\n var font_size = block.getFieldValue('NAME3')\n var font_type = block.getFieldValue('NAME4')\n var code = `${value_name}.write('${str}',font=('${font_family}',${font_size},'${font_type}'))\\n`\n return code\n}\n\n// 重置\nBlockly.Blocks['gta_turtle_reset'] = {\n init: function() {\n this.appendDummyInput()\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 重置')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip(\n '从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_reset'])\n },\n}\n\nBlockly.Python['gta_turtle_reset'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.reset()\\n`\n return code\n}\n\n// 清空\nBlockly.Blocks['gta_turtle_clear'] = {\n init: function() {\n this.appendDummyInput()\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 清空')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip(\n '从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_clear'])\n },\n}\n\nBlockly.Python['gta_turtle_clear'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.clear()\\n`\n return code\n}\n\n/** 获取海龟的状态*/\n\n// 获取位置\nBlockly.Blocks['gta_turtle_position'] = {\n init: function() {\n this.appendDummyInput()\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('获取位置')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'position'],\n ['二', 'pos'],\n ]),\n 'NAME1'\n )\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('位置一position、位置二pos方法的效果一样')\n this.setHelpUrl(Blockly.Msg['gta_turtle_position'])\n },\n}\n\nBlockly.Python['gta_turtle_position'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var position = block.getFieldValue('NAME1')\n var code = `${value_name}.${position}()\\n`\n return code\n}\n\n// 获取海龟库朝向\nBlockly.Blocks['gta_turtle_towards'] = {\n init: function() {\n this.appendDummyInput().appendField('获取')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 朝向 (X')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('Y')\n .appendField(new Blockly.FieldNumber(0), 'NAME2')\n .appendField(') 的角度')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_towards'])\n },\n}\n\nBlockly.Python['gta_turtle_towards'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var axiosX = block.getFieldValue('NAME1')\n var axiosY = block.getFieldValue('NAME2')\n var code = `${value_name}.towards(${axiosX},${axiosY})\\n`\n return code\n}\n\n// 设置画笔的x/y坐标\nBlockly.Blocks['gta_turtle_cor'] = {\n init: function() {\n this.appendDummyInput().appendField('获取')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 的')\n .appendField(\n new Blockly.FieldDropdown([\n ['x', 'xcor'],\n ['y', 'ycor'],\n ]),\n 'NAME1'\n )\n .appendField('坐标')\n this.setInputsInline(true)\n this.setOutput(true)\n this.setStyle('hat_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_cor'])\n },\n}\n\nBlockly.Python['gta_turtle_cor'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var cor = block.getFieldValue('NAME1')\n var code = `${value_name}.${cor}()`\n return [code, Blockly.Python.ORDER_FUNCTION_CALL]\n}\n\n//获取朝向\nBlockly.Blocks['gta_turtle_heading'] = {\n init: function() {\n this.appendDummyInput().appendField('获取 ')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 朝向')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('返回海龟当前的朝向')\n this.setHelpUrl(Blockly.Msg['gta_turtle_heading'])\n },\n}\n\nBlockly.Python['gta_turtle_heading'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.heading()\\n`\n return code\n}\n\n//获取距离\nBlockly.Blocks['gta_turtle_distance'] = {\n init: function() {\n this.appendDummyInput().appendField('获取 ')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 到 (X:')\n .appendField(new Blockly.FieldNumber(0), 'NAME1')\n .appendField('Y:')\n .appendField(new Blockly.FieldNumber(0), 'NAME2')\n .appendField(') 距离')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip(\n '返回从海龟位置到由 (x,y),适量或另一海龟对应位置的单位距离。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_distance'])\n },\n}\n\nBlockly.Python['gta_turtle_distance'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var x = block.getFieldValue('NAME1')\n var y = block.getFieldValue('NAME2')\n\n var code = `${value_name}.distance(${x},${y})\\n`\n return code\n}\n\n// 设置度量单位\n// 设置度量单位为角度\nBlockly.Blocks['gta_turtle_degrees'] = {\n init: function() {\n this.appendDummyInput().appendField('设置 ')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 度量单位为角度')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip(\n '设置角度的度量单位,即设置一个圆周为多少 \"度\"。默认值为 360 度。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_degrees'])\n },\n}\n\nBlockly.Python['gta_turtle_degrees'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n\n var code = `${value_name}.degrees()\\n`\n return code\n}\n\nBlockly.Blocks['gta_turtle_radians'] = {\n init: function() {\n this.appendDummyInput().appendField('设置 ')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 度量单位为弧度')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('hat_blocks')\n this.setTooltip('设置角度的度量单位为弧度。其值等于 degrees(2*math.pi)。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_radians'])\n },\n}\n\nBlockly.Python['gta_turtle_radians'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n\n var code = `${value_name}.degrees()\\n`\n return code\n}\n/** 画笔控制*/\n// 画笔 落笔-抬笔\nBlockly.Blocks['gta_turtle_penup_pendown'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(\n new Blockly.FieldDropdown([\n ['落笔', 'pendown'],\n ['抬笔', 'penup'],\n ]),\n 'NAME1'\n )\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_penup_pendown'])\n },\n}\n\nBlockly.Python['gta_turtle_penup_pendown'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var pen_way = block.getFieldValue('NAME1')\n var code = `${value_name}.${pen_way}()\\n`\n return code\n}\n\n// 画笔 落笔\nBlockly.Blocks['gta_turtle_pendown'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('落笔 ')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'pendown'],\n ['二', 'pd'],\n ['三', 'down'],\n ]),\n 'NAME1'\n )\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip(\n '画笔落下,移动时将画线(落笔一、落笔二、落笔三的方法效果一样)'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_pendown'])\n },\n}\n\nBlockly.Python['gta_turtle_pendown'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var pen_way = block.getFieldValue('NAME1')\n var code = `${value_name}.${pen_way}()\\n`\n return code\n}\n\n// 画笔 抬笔\nBlockly.Blocks['gta_turtle_penup'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('抬笔 ')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'penup'],\n ['二', 'pu'],\n ['三', 'up'],\n ]),\n 'NAME1'\n )\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip(\n '画笔抬起,移动时不画线。(抬起一、抬起二、抬起三的方法效果一样)'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_penup'])\n },\n}\n\nBlockly.Python['gta_turtle_penup'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var pen_way = block.getFieldValue('NAME1')\n var code = `${value_name}.${pen_way}()\\n`\n return code\n}\n\n// 设置笔画粗细\nBlockly.Blocks['gta_turtle_pensize'] = {\n init: function() {\n this.appendDummyInput().appendField('设置')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('粗细')\n .appendField(new Blockly.FieldNumber(5), 'NAME1')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('设置画笔宽度')\n this.setHelpUrl(Blockly.Msg['gta_turtle_pensize'])\n },\n}\n\nBlockly.Python['gta_turtle_pensize'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var size = block.getFieldValue('NAME1')\n var code = `${value_name}.pensize(${size})\\n`\n return code\n}\n\n// 画笔是否落下\nBlockly.Blocks['gta_turtle_isdown'] = {\n init: function() {\n this.appendDummyInput()\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField('画笔是否落下')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('如果画笔落下返回 True,如果画笔抬起返回 False')\n this.setHelpUrl(Blockly.Msg['gta_turtle_isdown'])\n },\n}\n\nBlockly.Python['gta_turtle_isdown'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.isdown()\\n`\n return code\n}\n\n// 设置画笔颜色\nBlockly.Blocks['gta_turtle_color'] = {\n init: function() {\n this.appendDummyInput().appendField('设置')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 颜色')\n .appendField(new Blockly.FieldColour('#ff0000'), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_color'])\n },\n}\n\nBlockly.Python['gta_turtle_color'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var pencolor = block.getFieldValue('NAME1')\n var code = `${value_name}.color('${pencolor}')\\n`\n return code\n}\n\n// 设置画笔颜色\nBlockly.Blocks['gta_turtle_pencolor'] = {\n init: function() {\n this.appendDummyInput().appendField('设置')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 笔头颜色')\n .appendField(new Blockly.FieldColour('#ff0000'), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_pencolor'])\n },\n}\n\nBlockly.Python['gta_turtle_pencolor'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var pencolor = block.getFieldValue('NAME1')\n var code = `${value_name}.pencolor('${pencolor}')\\n`\n return code\n}\n\n// 设置画笔填充色\nBlockly.Blocks['gta_turtle_fillcolor'] = {\n init: function() {\n this.appendDummyInput().appendField('设置')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 笔头填充色')\n .appendField(new Blockly.FieldColour('#ff0000'), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_fillcolor'])\n },\n}\n\nBlockly.Python['gta_turtle_fillcolor'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var fillcolor = block.getFieldValue('NAME1')\n // var code = `${value_name}.color('${fillcolor}')\\n`\n var code = `${value_name}.fillcolor('${fillcolor}')\\n`\n return code\n}\n\n// 画笔是否填充\nBlockly.Blocks['gta_turtle_filling'] = {\n init: function() {\n this.appendDummyInput()\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField('画笔是否填充')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('返回填充状态 (填充为 True,否则为 False)。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_filling'])\n },\n}\n\nBlockly.Python['gta_turtle_filling'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.filling()\\n`\n return code\n}\n\n// 设置画笔填充起点、终点\nBlockly.Blocks['gta_turtle_begin_end_fill'] = {\n init: function() {\n this.appendDummyInput().appendField('设置当前点为')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('填充')\n .appendField(\n new Blockly.FieldDropdown([\n ['起点', 'begin_fill'],\n ['终点', 'end_fill'],\n ]),\n 'NAME1'\n )\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_control_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_begin_end_fill'])\n },\n}\n\nBlockly.Python['gta_turtle_begin_end_fill'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var begin_end = block.getFieldValue('NAME1')\n var code = `${value_name}.${begin_end}()\\n`\n return code\n}\n\n// 设置新画笔\nBlockly.Blocks['gta_turtle_set_pan'] = {\n init: function() {\n this.appendDummyInput().appendField('设置变量')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField('为新画笔')\n this.setInputsInline(true)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_set_pan'])\n },\n}\n\nBlockly.Python['gta_turtle_set_pan'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var diameter = block.getFieldValue('NAME1')\n var code = `${value_name} = turtle.Turtle()\\n`\n return code\n}\n\n/**海龟状态 */ \n\n// 隐藏/显示画笔\nBlockly.Blocks['gta_turtle_hide_show'] = {\n init: function() {\n this.appendDummyInput().appendField(\n new Blockly.FieldDropdown([\n ['隐藏', 'hideturtle'],\n ['显示', 'showturtle'],\n ]),\n 'NAME1'\n )\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_hide_show'])\n },\n}\n\nBlockly.Python['gta_turtle_hide_show'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var name1 = block.getFieldValue('NAME1')\n var code = `${value_name}.${name1}()\\n`\n return code\n}\n\n// 是否可见\nBlockly.Blocks['gta_turtle_isvisible'] = {\n init: function() {\n this.appendDummyInput().appendField(' 是否可见')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip('如果海龟显示返回 True,如果海龟隐藏返回 False。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_isvisible'])\n },\n}\n\nBlockly.Python['gta_turtle_isvisible'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.isvisible()\\n`\n return code\n}\n\n//设置画笔形状shape\nBlockly.Blocks['gta_turtle_shape'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('形状:')\n .appendField(\n new Blockly.FieldDropdown([\n ['箭头', 'arrow'],\n ['经典', 'classic'],\n ['海龟', 'turtle'],\n ['圆', 'circle'],\n ['方形', 'square'],\n ]),\n 'NAME1'\n )\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_shape'])\n },\n}\n\nBlockly.Python['gta_turtle_shape'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var shape = block.getFieldValue('NAME1')\n var code = `${value_name}.shape('${shape}')\\n`\n return code\n}\n\n//大小调整模式\nBlockly.Blocks['gta_turtle_resizemode'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('大小调整模式:')\n .appendField(\n new Blockly.FieldDropdown([\n ['auto', 'auto'],\n ['user', 'user'],\n ['noresize', 'noresize'],\n ]),\n 'NAME1'\n )\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '设置大小调整模式为以下值之一: \"auto\", \"user\", \"noresize\"。如未指定 rmode 则返回当前的大小调整模式。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_resizemode'])\n },\n}\n\nBlockly.Python['gta_turtle_resizemode'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var mode = block.getFieldValue('NAME1')\n var code = `${value_name}.resizemode('${mode}')\\n`\n return code\n}\n\n//调整形状大小\nBlockly.Blocks['gta_turtle_shapesize'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField('调整大小:')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'shapesize'],\n ['二', 'turtlesize'],\n ]),\n 'NAME1'\n )\n .appendField(' 水平拉升:')\n .appendField(new Blockly.FieldNumber(), 'NAME2')\n this.appendDummyInput().appendField(' 垂直拉升:')\n .appendField(new Blockly.FieldNumber(), 'NAME3')\n this.appendDummyInput().appendField(' 粗细:')\n .appendField(new Blockly.FieldNumber(), 'NAME4')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '返回或设置画笔的属性 x/y-拉伸因子和/或轮廓。设置大小调整模式为 \"user\"。当且仅当大小调整模式设为 \"user\" 时海龟会基于其拉伸因子调整外观: stretch_wid 为垂直于其朝向的宽度拉伸因子,stretch_len 为平等于其朝向的长度拉伸因子,决定形状轮廓线的粗细。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_shapesize'])\n },\n}\n\nBlockly.Python['gta_turtle_shapesize'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var mode = block.getFieldValue('NAME1')\n var val2 = block.getFieldValue('NAME2')\n var val3 = block.getFieldValue('NAME3')\n var val4 = block.getFieldValue('NAME4')\n var code = `${value_name}.${mode}(${val2},${val3},${val4})\\n`\n return code\n}\n\n// 剪切因子\nBlockly.Blocks['gta_turtle_shearfactor'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 剪切因子')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '设置或返回当前的剪切因子。根据 share 指定的剪切因子即剪切角度的切线来剪切海龟形状。不 改变海龟的朝向 (移动方向)。如未指定 shear 参数: 返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_shearfactor'])\n },\n}\n\nBlockly.Python['gta_turtle_shearfactor'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var val = block.getFieldValue('NAME1')\n var code\n if (val) {\n code = `${value_name}.shearfactor(${val})\\n`\n } else {\n code = `${value_name}.shearfactor()\\n`\n }\n return code\n}\n\n// 设置倾角\nBlockly.Blocks['gta_turtle_settiltangle'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 设置倾角:')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角,不 改变海龟的朝向 (移动方向)。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_settiltangle'])\n },\n}\n\nBlockly.Python['gta_turtle_settiltangle'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var val = block.getFieldValue('NAME1')\n var code = `${value_name}.settiltangle(${val})\\n`\n return code\n}\n\n// 设置倾斜\nBlockly.Blocks['gta_turtle_tilt'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 倾斜:')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '海龟形状自其当前的倾角转动 angle 指定的角度,但 不 改变海龟的朝向 (移动方向)。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_tilt'])\n },\n}\n\nBlockly.Python['gta_turtle_tilt'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var val = block.getFieldValue('NAME1')\n var code = `${value_name}.tilt(${val})\\n`\n return code\n}\n\n// 变形(获取变形或者设置变形)\nBlockly.Blocks['gta_turtle_shapetransform'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 变形: t11')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n .appendField(' t12 ')\n .appendField(new Blockly.FieldNumber(), 'NAME2')\n .appendField(' t21 ')\n .appendField(new Blockly.FieldNumber(), 'NAME3')\n .appendField(' t22 ')\n .appendField(new Blockly.FieldNumber(), 'NAME4')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '设置或返回海龟形状的当前变形矩阵。如未指定任何矩阵元素,则返回以 4 元素元组表示的变形矩阵。 否则就根据设置指定元素的矩阵来改变海龟形状,矩阵第一排的值为 t11, t12 而第二排的值为 t21, t22。 行列式 t11 * t22 - t12 * t21 必须不为零,否则会引发错误。 根据指定矩阵修改拉伸因子 stretchfactor, 剪切因子 shearfactor 和倾角 tiltangle。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_shapetransform'])\n },\n}\n\nBlockly.Python['gta_turtle_shapetransform'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var val = block.getFieldValue('NAME1')\n var val2 = block.getFieldValue('NAME2')\n var val3 = block.getFieldValue('NAME3')\n var val4 = block.getFieldValue('NAME4')\n var code = `${value_name}.shapetransform(${val},${val2},${val3},${val4})\\n`\n return code\n}\n\n// 获取形状多边形\nBlockly.Blocks['gta_turtle_get_shapepoly'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput()\n .appendField(' 获取形状多边形')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_status_blocks')\n this.setTooltip(\n '返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。'\n )\n this.setHelpUrl(Blockly.Msg['gta_turtle_get_shapepoly'])\n },\n}\n\nBlockly.Python['gta_turtle_get_shapepoly'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.get_shapepoly()\\n`\n return code\n}\n\n\n/**海龟窗口*/ \n// TurtleScreen/Screen 方法 \n// 设置背景颜色\nBlockly.Blocks['gta_turtle_bgcolor'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('设置背景颜色')\n .appendField(new Blockly.FieldColour('#ff0000'), 'NAME1')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_bgcolor'])\n },\n}\n\nBlockly.Python['gta_turtle_bgcolor'] = function(block) {\n var bgcolor = block.getFieldValue('NAME1')\n\n var code = `turtle.Screen().bgcolor('${bgcolor}')\\n`\n return code\n}\n\n// 背景图片\nBlockly.Blocks['gta_turtle_bgpic'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('背景图片')\n this.appendValueInput('NAME1').setCheck()\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('设置背景图片或返回当前背景图片名称。如果 picname 为一个文件名,则将相应图片设为背景。如果 picname 为 \"nopic\",则删除当前背景图片。如果 picname 为 None,则返回当前背景图片文件名。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_bgpic'])\n },\n}\n\nBlockly.Python['gta_turtle_bgpic'] = function(block) {\n var pic = Blockly.Python.valueToCode(\n block,\n 'NAME1',\n Blockly.Python.ORDER_ATOMIC\n )\n var code = `turtle.Screen().bgpic(${pic})\\n`\n return code\n}\n\n\n//清屏\nBlockly.Blocks['gta_turtle_clearscreen'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('清屏')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'clearscreen'],\n ['二', 'clear'],\n ]),\n 'NAME1'\n )\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。清屏一、清屏二的方法效果一样。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_clearscreen'])\n },\n}\n\nBlockly.Python['gta_turtle_clearscreen'] = function(block) {\n var method = block.getFieldValue('NAME1')\n\n var code = `turtle.Screen().${method}()\\n`\n return code\n}\n// 重置屏幕\nBlockly.Blocks['gta_turtle_resetscreen'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('重置屏幕')\n .appendField(\n new Blockly.FieldDropdown([\n ['一', 'resetscreen'],\n ['二', 'reset'],\n ]),\n 'NAME1'\n )\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('重置屏幕上的所有海龟为其初始状态。一和二的方法效一致。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_resetscreen'])\n },\n}\n\nBlockly.Python['gta_turtle_resetscreen'] = function(block) { \n var method = block.getFieldValue('NAME1')\n var code = `turtle.Screen().${method}()\\n`\n return code\n}\n\n// 屏幕大小\nBlockly.Blocks['gta_turtle_screensize'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('屏幕大小')\n .appendField(' 长')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n .appendField(' 宽')\n .appendField(new Blockly.FieldNumber(), 'NAME2')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('重置屏幕上的所有海龟为其初始状态。一和二的方法效一致。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_screensize'])\n },\n}\n\nBlockly.Python['gta_turtle_screensize'] = function(block) { \n var val1 = block.getFieldValue('NAME1')\n var val2 = block.getFieldValue('NAME2')\n var code = `turtle.Screen().screensize(${val1},${val2})\\n`\n return code\n}\n\n// 设置世界坐标系\nBlockly.Blocks['gta_turtle_setworldcoordinates'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('世界坐标系')\n .appendField(' 左下角X')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n .appendField(' 左下角Y')\n .appendField(new Blockly.FieldNumber(), 'NAME2')\n .appendField(' 右上角X')\n .appendField(new Blockly.FieldNumber(), 'NAME3')\n .appendField(' 右上角Y')\n .appendField(new Blockly.FieldNumber(), 'NAME4')\n\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('设置用户自定义坐标系并在必要时切换模式为 \"world\"。这会执行一次 screen.reset()。如果 \"world\" 模式已激活,则所有图形将根据新的坐标系重绘。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_setworldcoordinates'])\n },\n}\n\nBlockly.Python['gta_turtle_setworldcoordinates'] = function(block) { \n var val1 = block.getFieldValue('NAME1')\n var val2 = block.getFieldValue('NAME2')\n var val3 = block.getFieldValue('NAME3')\n var val4 = block.getFieldValue('NAME4')\n var code = `turtle.Screen().setworldcoordinates(${val1},${val2},${val3},${val4})\\n`\n return code\n}\n\n// 延迟\nBlockly.Blocks['gta_turtle_delay'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('延迟')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n .appendField(' 毫秒')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('设置或返回以毫秒数表示的延迟值 delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_delay'])\n },\n}\n\nBlockly.Python['gta_turtle_delay'] = function(block) { \n var val1 = block.getFieldValue('NAME1')\n var code = `turtle.Screen().delay(${val1})\\n`\n return code\n}\n\n// 延迟\nBlockly.Blocks['gta_turtle_tracer'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('延迟')\n .appendField(new Blockly.FieldNumber(), 'NAME1')\n .appendField(' 毫秒')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('设置或返回以毫秒数表示的延迟值 delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。')\n this.setHelpUrl(Blockly.Msg['gta_turtle_tracer'])\n },\n}\n\nBlockly.Python['gta_turtle_tracer'] = function(block) { \n var val1 = block.getFieldValue('NAME1')\n var code = `turtle.Screen().tracer(${val1})\\n`\n return code\n}\n\n\n\n\n\n// 清空画笔\nBlockly.Blocks['gta_turtle_clear'] = {\n init: function() {\n this.appendDummyInput().appendField('清空')\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_clear'])\n },\n}\n\nBlockly.Python['gta_turtle_clear'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.clear()\\n`\n return code\n}\n\n\n// 生成对话框\nBlockly.Blocks['gta_turtle_textinput'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('对话框:标题')\n .appendField(new Blockly.FieldTextInput('对话框'), 'NAME1')\n .appendField('内容')\n .appendField(new Blockly.FieldTextInput('输入字符'), 'NAME2')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_textinput'])\n },\n}\n\nBlockly.Python['gta_turtle_textinput'] = function(block) {\n var title = block.getFieldValue('NAME1')\n var textInput = block.getFieldValue('NAME2')\n var code = `turtle.Screen.textinput('${title}','${textInput}')\\n`\n return code\n}\n\n// 数字对话框\nBlockly.Blocks['gta_turtle_numinput'] = {\n init: function() {\n this.appendDummyInput()\n .appendField('数字对话框:标题')\n .appendField(new Blockly.FieldTextInput('对话框'), 'NAME1')\n .appendField('内容')\n .appendField(new Blockly.FieldTextInput('输入数字'), 'NAME2')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_numinput'])\n },\n}\n\nBlockly.Python['gta_turtle_numinput'] = function(block) {\n var title = block.getFieldValue('NAME1')\n var numInput = block.getFieldValue('NAME2')\n var code = `turtle.Screen.numinput('${title}','${numInput}')\\n`\n return code\n}\n\n//设置画笔标记 \nBlockly.Blocks['gta_turtle_stamp'] = {\n init: function() {\n this.appendValueInput('NAME')\n .setCheck(null)\n .setAlign(Blockly.ALIGN_RIGHT)\n this.appendDummyInput().appendField(' 标记')\n this.setPreviousStatement(true, null)\n this.setNextStatement(true, null)\n this.setInputsInline(true)\n this.setStyle('turtle_screen_blocks')\n this.setTooltip('')\n this.setHelpUrl(Blockly.Msg['gta_turtle_stamp'])\n },\n}\n\nBlockly.Python['gta_turtle_stamp'] = function(block) {\n var value_name = Blockly.Python.valueToCode(\n block,\n 'NAME',\n Blockly.Python.ORDER_ATOMIC\n )\n value_name = value_name.replace(/\\(|\\)/g, '')\n var code = `${value_name}.stamp()\\n`\n return code\n}\n","'use strict'\n\nimport Blockly from 'blockly'\n\nexport const gtaMsgHans = (path = `/projects/base/helpdocument`) => {\n /**事件类别的积木跳转配置*/\n\nconsole.log('path--',path)\n\n Blockly.Msg[`gta_ai_event_1`] = `${path}?menu=Events#gta_ai_event_1`\n Blockly.Msg[`gta_ai_event_2`] = `${path}?menu=Events#gta_ai_event_2`\n Blockly.Msg[`gta_ai_event_3`] = `${path}?menu=Events#gta_ai_event_3`\n Blockly.Msg[`gta_ai_event_4`] = `${path}?menu=Events#gta_ai_event_4`\n Blockly.Msg[`gta_ai_event_5`] = `${path}?menu=Events#gta_ai_event_5`\n Blockly.Msg[`gta_ai_event_6`] = `${path}?menu=Events#gta_ai_event_6`\n Blockly.Msg[`gta_ai_event_print`] = `${path}?menu=Events#gta_ai_event_print`\n Blockly.Msg[`gta_ai_event_7`] = `${path}?menu=Events#gta_ai_event_7`\n Blockly.Msg[`gta_ai_event_8`] = `${path}?menu=Events#gta_ai_event_8`\n Blockly.Msg[`gta_ai_event_9`] = `${path}?menu=Events#gta_ai_event_9`\n Blockly.Msg[`gta_ai_event_9`] = `${path}?menu=Events#gta_ai_event_9`\n Blockly.Msg[`gta_ai_event_10`] = `${path}?menu=Events#gta_ai_event_10`\n Blockly.Msg[`gta_ai_event_11`] = `${path}?menu=Events#gta_ai_event_11`\n Blockly.Msg[`gta_ai_event_12`] = `${path}?menu=Events#gta_ai_event_12`\n\n // controls_repeat_ext\n Blockly.Msg[\n `CONTROLS_REPEAT_HELPURL`\n ] = `${path}?menu=Control#controls_repeat_ext`\n\n // gta_controls_whileUntil\n Blockly.Msg[\n `GTA_CONTROLS_WHILEUNTIL_HELPURL`\n ] = `${path}?menu=Control#gta_controls_whileUntil`\n // export const GTA_CONTROLS_WHILEUNTIL_HELPURL =\n // `${path}?menu=Control#2`\n\n // controls_for\n Blockly.Msg[`CONTROLS_FOR_HELPURL`] = `${path}?menu=Control#controls_for`\n\n // controls_forEach\n Blockly.Msg[\n `CONTROLS_FOREACH_HELPURL`\n ] = `${path}?menu=Control#controls_forEach`\n\n // break_continue\n Blockly.Msg[`BREAK_CONTINUE_HELPURL`] = `${path}?menu=Control#break_continue`\n\n // controls_if\n Blockly.Msg[`CONTROLS_IF_HELPURL`] = `${path}?menu=Control#controls_if`\n\n // logic_negate\n Blockly.Msg[`LOGIC_NEGATE_HELPURL`] = `${path}?menu=Control#logic_negate`\n\n // logic_ternary\n Blockly.Msg[`LOGIC_TERNARY_HELPURL`] = `${path}?menu=Control#logic_ternary`\n\n // waiting_time\n Blockly.Msg[`WAITING_TIME_HELPURL`] = `${path}?menu=Control#waiting_time`\n\n // 运算类别的积木跳转配置\n // math_number\n Blockly.Msg[`MATH_NUMBER_HELPURL`] = `${path}?menu=Operators#math_number`\n\n // math_arithmetic_add\n Blockly.Msg[\n `MATH_ARITHMETIC_ADD_HELPURL`\n ] = `${path}?menu=Operators#math_arithmetic_add`\n\n // logic_compare_1\n Blockly.Msg[\n `LOGIC_COMPARE_1_HELPURL`\n ] = `${path}?menu=Operators#logic_compare_1`\n\n // logic_operation\n Blockly.Msg[\n `LOGIC_OPERATION_HELPURL`\n ] = `${path}?menu=Operators#logic_operation`\n\n // logic_boolean\n Blockly.Msg[`LOGIC_BOOLEAN_HELPURL`] = `${path}?menu=Operators#logic_boolean`\n\n // math_random_int\n Blockly.Msg[\n `MATH_RANDOM_INT_HELPURL`\n ] = `${path}?menu=Operators#math_random_int`\n\n // math_modulo\n Blockly.Msg[`MATH_MODULO_HELPURL`] = `${path}?menu=Operators#math_modulo`\n\n // math_single\n Blockly.Msg[`MATH_SINGLE_HELPURL`] = `${path}?menu=Operators#math_single`\n\n // math_trig\n Blockly.Msg[`MATH_TRIG_HELPURL`] = `${path}?menu=Operators#math_trig`\n\n // math_constant\n Blockly.Msg[`MATH_CONSTANT_HELPURL`] = `${path}?menu=Operators#math_constant`\n\n // math_number_property\n Blockly.Msg[\n `MATH_NUMBER_PROPERTY_HELPURL`\n ] = `${path}?menu=Operators#math_number_property`\n\n // math_round\n Blockly.Msg[`MATH_ROUND_HELPURL`] = `${path}?menu=Operators#math_round`\n\n // math_random_float\n Blockly.Msg[\n `MATH_RANDOM_FLOAT_HELPURL`\n ] = `${path}?menu=Operators#math_random_float`\n\n // math_on_list\n Blockly.Msg[`MATH_ONLIST_HELPURL`] = `${path}?menu=Operators#math_on_list`\n\n // math_constrain\n Blockly.Msg[\n `MATH_CONSTRAIN_HELPURL`\n ] = `${path}?menu=Operators#math_constrain`\n\n // math_atan2\n Blockly.Msg[`MATH_ATAN2_HELPURL`] = `${path}?menu=Operators#math_atan2`\n\n // 文本、字符串-->类别的积木跳转配置\n // text\n Blockly.Msg[`TEXT_TEXT_HELPURL`] = `${path}?menu=Text#text`\n\n // text_join\n Blockly.Msg[`TEXT_JOIN_HELPURL`] = `${path}?menu=Text#text_join`\n\n // text_length\n Blockly.Msg[`TEXT_LENGTH_HELPURL`] = `${path}?menu=Text#text_length`\n\n // gta_ai_variable_change\n Blockly.Msg[\n `GTA_AI_VARIABLE_CHANGE`\n ] = `${path}?menu=Text#gta_ai_variable_change`\n\n // gta_ai_variable_change_2\n Blockly.Msg[\n `GTA_AI_VARIABLE_CHANGE_2`\n ] = `${path}?menu=Text#gta_ai_variable_change_2`\n\n // text_changeCase\n Blockly.Msg[`TEXT_CHANGECASE_HELPURL`] = `${path}?menu=Text#text_changeCase`\n\n // gta_ai_text_include\n Blockly.Msg[\n `ATA_AI_TEXT_INCLUDE_HELPURL`\n ] = `${path}?menu=Text#gta_ai_text_include`\n\n // gta_ai_text_include_2\n Blockly.Msg[\n `ATA_AI_TEXT_INCLUDE_2_HELPURL`\n ] = `${path}?menu=Text#gta_ai_text_include_2`\n\n // text_isEmpty\n Blockly.Msg[`TEXT_ISEMPTY_HELPURL`] = `${path}?menu=Text#text_isEmpty`\n\n // text_indexOf\n Blockly.Msg[`TEXT_INDEXOF_HELPURL`] = `${path}?menu=Text#text_indexOf`\n\n // lists_split\n Blockly.Msg[`LISTS_SPLIT_HELPURL`] = `${path}?menu=Text#lists_split`\n\n // lists_split_1\n Blockly.Msg[`LISTS_SPLIT_1_HELPURL`] = `${path}?menu=Text#lists_split_1`\n\n // text_getSubstring\n Blockly.Msg[\n `TEXT_GET_SUBSTRING_HELPURL`\n ] = `${path}?menu=Text#text_getSubstring`\n\n // text_append\n Blockly.Msg[`TEXT_APPEND_HELPURL`] = `${path}?menu=Text#text_append`\n\n // text_trim\n Blockly.Msg[`TEXT_TRIM_HELPURL`] = `${path}?menu=Text#text_trim`\n\n // 列表-->类别的积木跳转配置\n // lists_create_with(items=`0`/items=`2`)\n Blockly.Msg[\n `LISTS_CREATE_WITH_HELPURL`\n ] = `${path}?menu=List#lists_create_with`\n\n // lists_establish_with(items=`0`/items=`2`)\n Blockly.Msg[\n `LISTS_ESTABLISH_WITH_HELPURL`\n ] = `${path}?menu=List#lists_establish_with`\n\n // lists_setIndex\n Blockly.Msg[`LISTS_SET_INDEX_HELPURL`] = `${path}?menu=List#lists_setIndex`\n\n // lists_getIndex\n Blockly.Msg[`LISTS_GET_INDEX_HELPURL`] = `${path}?menu=List#lists_getIndex`\n\n // lists_indexOf\n Blockly.Msg[`LISTS_INDEX_OF_HELPURL`] = `${path}?menu=List#lists_indexOf`\n\n // lists_length\n Blockly.Msg[`LISTS_LENGTH_HELPURL`] = `${path}?menu=List#lists_length`\n\n // lists_getSublist\n Blockly.Msg[\n `LISTS_GET_SUBLIST_HELPURL`\n ] = `${path}?menu=List#lists_getSublist`\n\n // lists_isEmpty\n Blockly.Msg[`LISTS_ISEMPTY_HELPURL`] = `${path}?menu=List#lists_isEmpty`\n\n // lists_repeat\n Blockly.Msg[`LISTS_REPEAT_HELPURL`] = `${path}?menu=List#lists_repeat`\n\n // gta_ai_lists_include\n Blockly.Msg[\n `GAT_AI_LISTS_INCLUDE_HELPURL`\n ] = `${path}?menu=List#gta_ai_lists_include`\n\n // gta_ai_lists_include_2\n Blockly.Msg[\n `GAT_AI_LISTS_INCLUDE_2_HELPURL`\n ] = `${path}?menu=List#gta_ai_lists_include_2`\n\n // lists_sort\n Blockly.Msg[`LISTS_SORT_HELPURL`] = `${path}?menu=List#lists_sort`\n\n // 字典-->类别的积木跳转配置\n // create_dict\n Blockly.Msg[`CREATE_DICT_HELPURL`] = `${path}?menu=Dictionary#create_dict`\n\n // dict_create_with\n Blockly.Msg[\n `DICT_CREATE_WITH_HELPURL`\n ] = `${path}?menu=Dictionary#dict_create_with`\n\n // set_dict\n Blockly.Msg[`SET_DICT_HELPURL`] = `${path}?menu=Dictionary#set_dict`\n\n // gta_ai_get_dict_key\n Blockly.Msg[\n `GTA_AI_GET_DICT_HELPURL`\n ] = `${path}?menu=Dictionary#gta_ai_get_dict_key`\n\n // length_of_dict\n Blockly.Msg[\n `LENGTH_OF_DICT_HELPURL`\n ] = `${path}?menu=Dictionary#length_of_dict`\n\n // del_dict_key\n Blockly.Msg[`DEL_DICT_KEY_HELPURL`] = `${path}?menu=Dictionary#del_dict_key`\n\n // del_dict_key_2\n Blockly.Msg[\n `DEL_DICT_KEY_2_HELPURL`\n ] = `${path}?menu=Dictionary#del_dict_key_2`\n\n // gta_ai_dict_include_2\n Blockly.Msg[\n `GET_AI_DICT_INCLUDE_2_HELPURL`\n ] = `${path}?menu=Dictionary#gta_ai_dict_include_2`\n\n // gta_ai_dict_include\n Blockly.Msg[\n `GET_AI_DICT_INCLUDE_HELPURL`\n ] = `${path}?menu=Dictionary#gta_ai_dict_include`\n\n // 变量-->类别的积木跳转配置\n Blockly.Msg[`VARIABLES_SET_HELPURL`] = `${path}?menu=Variable#variables_set`\n\n Blockly.Msg[`MATH_CHANGE_HELPURL`] = `${path}?menu=Variable#math_change`\n\n Blockly.Msg[`VARIABLES_GET_HELPURL`] = `${path}?menu=Variable#variables_get`\n\n // 函数-->类别的积木跳转配置\n Blockly.Msg[\n `PROCEDURES_DEFNORETURN_HELPURL`\n ] = `${path}?menu=Function#procedures_defnoreturn`\n\n Blockly.Msg[\n `PROCEDURES_DEFRETURN_HELPURL`\n ] = `${path}?menu=Function#procedures_defreturn`\n\n Blockly.Msg[\n `PROCEDURES_IFRETURN_HELPURL`\n ] = `${path}?menu=Function#procedures_ifreturn`\n\n Blockly.Msg[`PROCEDURES_CALLNORETURN_HELPURL`] = `${path}?menu=Function#2`\n\n Blockly.Msg[`PROCEDURES_CALLRETURN_HELPURL`] = `${path}?menu=Function#2`\n\n // 媒体 --> 音频功能,图片,摄像头\n // upload_audio\n Blockly.Msg[`UPLOAD_AUDIO_HELPURL`] = `${path}?menu=Media#1`\n\n // play_audio\n Blockly.Msg[`PLAY_AUDIO_HELPURL`] = `${path}?menu=Media#play_audio`\n\n // pause_audio\n Blockly.Msg[`PAUSE_AUDIO_HELPURL`] = `${path}?menu=Media#pause_audio`\n\n // volume_add_audio\n Blockly.Msg[\n `VOLUME_ADD_AUDIO_HELPURL`\n ] = `${path}?menu=Media#volume_add_audio`\n\n // volume_set_audio\n Blockly.Msg[\n `VOLUME_SET_AUDIO_HELPURL`\n ] = `${path}?menu=Media#volume_set_audio`\n\n // pic_blocks\n Blockly.Msg[`PIC_BLOCKS_HELPURL`] = `${path}?menu=Media#pic_blocks`\n\n // play_camera\n Blockly.Msg[`PLAY_CAMERA_HELPURL`] = `${path}?menu=Media#play_camera`\n\n /** 数据库积木 - 通用模型积木*/\n\n // 我的模型 - MyModel //\n // 植物识别 plant_recognition\n Blockly.Msg[`MY_MODEL_PLANT_RECOGNITION_HELPURL`] = `${path}?menu=MyModel#1`\n\n // 基础模型 - BasicModel //\n // 物体检测 Object_detection\n Blockly.Msg[\n `BASIC_MODEL_OBJECT_DETECTION_HELPURL`\n ] = `${path}?menu=BasicModel#1`\n\n // 图像分类 image_classification\n Blockly.Msg[\n `BASIC_MODEL_IMAGE_CLASSIFICATION_HELPURL`\n ] = `${path}?menu=BasicModel#2`\n\n // 人物识别 character_recognition\n Blockly.Msg[\n `BASIC_MODEL_CHARACTER_RECOGNITION_HELPURL`\n ] = `${path}?menu=BasicModel#3`\n\n // 语音识别 speech_recognition\n Blockly.Msg[\n `BASIC_MODEL_SPEECH_RECOGNITION_HELPURL`\n ] = `${path}?menu=BasicModel#4`\n\n // 文字识别 written_words_recognition\n Blockly.Msg[\n `BASIC_MODEL_WRITTEN_WORDS_RECOGNITION_HELPURL`\n ] = `${path}?menu=BasicModel#5`\n\n // 语音合成 speech_synthesis\n Blockly.Msg[\n `BASIC_MODEL_SPEECH_SYNTHESIS_HELPURL`\n ] = `${path}?menu=BasicModel#6`\n\n // 进阶模型 - AdvancedModel //\n // 人物识别 - 人脸识别 face_recognition\n Blockly.Msg[\n `ADVANCED_MODEL_FACE_RECOGNITION_HELPURL`\n ] = `${path}?menu=AdvancedModel#1`\n\n // 人物识别 - 人体分析 human_body_analysis\n Blockly.Msg[\n `ADVANCED_MODEL_HUMAN_BODY_ANALYSIS_HELPURL`\n ] = `${path}?menu=AdvancedModel#2`\n\n // 智能硬件 - IntelligentHardware //\n // 智能摄像头 smart_camera\n Blockly.Msg[\n `INTELLIGENT_HARDWARE_SMART_CAMERA_HELPURL`\n ] = `${path}?menu=IntelligentHardware#1`\n\n // 智能机械臂 intelligent_manipulator\n Blockly.Msg[\n `INTELLIGENT_HARDWARE_INTELLIGENT_MANIPULATOR_HELPURL`\n ] = `${path}?menu=IntelligentHardware#2`\n\n // AGV无人小车 AGV_unmanned_car\n Blockly.Msg[\n `INTELLIGENT_HARDWARE_AGV_UNMANNED_CAR_HELPURL`\n ] = `${path}?menu=IntelligentHardware#3`\n\n // AI人形机器人 AI_humanoid_robot\n Blockly.Msg[\n `INTELLIGENT_HARDWARE_AI_HUMANOID_ROBOT_HELPURL`\n ] = `${path}?menu=IntelligentHardware#4`\n\n // 新建积木 - NewBuildingBlocks //\n // New_Building_Blocks\n Blockly.Msg[\n `NEW_BUILDING_BLOCKS_HELPURL`\n ] = `${path}?menu=NewBuildingBlocks#1`\n\n /**海龟库积木类别*/\n //海龟动作\n\n Blockly.Msg[\n `gta_turtle_forward`\n ] = `${path}?menu=TurtleMotion#gta_turtle_forward`\n\n Blockly.Msg[\n `gta_turtle_backward`\n ] = `${path}?menu=TurtleMotion#gta_turtle_backward`\n\n Blockly.Msg[\n `gta_turtle_rotate`\n ] = `${path}?menu=TurtleMotion#gta_turtle_rotate`\n\n Blockly.Msg[`gta_turtle_right`] = `${path}?menu=TurtleMotion#gta_turtle_right`\n\n Blockly.Msg[`gta_turtle_left`] = `${path}?menu=TurtleMotion#gta_turtle_left`\n\n Blockly.Msg[`gta_turtle_goto`] = `${path}?menu=TurtleMotion#gta_turtle_goto`\n\n Blockly.Msg[\n `gta_turtle_setx_sety`\n ] = `${path}?menu=TurtleMotion#gta_turtle_setx_sety`\n\n Blockly.Msg[\n `gta_turtle_setheading`\n ] = `${path}?menu=TurtleMotion#gta_turtle_setheading`\n\n Blockly.Msg[`gta_turtle_home`] = `${path}?menu=TurtleMotion#gta_turtle_home`\n\n Blockly.Msg[\n `gta_turtle_circle`\n ] = `${path}?menu=TurtleMotion#gta_turtle_circle`\n\n Blockly.Msg[`gta_turtle_dot_2`] = `${path}?menu=TurtleMotion#gta_turtle_dot_2`\n\n Blockly.Msg[\n `gta_turtle_polygon`\n ] = `${path}?menu=TurtleMotion#gta_turtle_polygon`\n\n Blockly.Msg[`gta_turtle_speed`] = `${path}?menu=TurtleMotion#gta_turtle_speed`\n\n Blockly.Msg[`gta_turtle_undo`] = `${path}?menu=TurtleMotion#gta_turtle_undo`\n\n Blockly.Msg[`gta_turtle_reset`] = `${path}?menu=TurtleMotion#gta_turtle_reset`\n\n Blockly.Msg[`gta_turtle_write`] = `${path}?menu=TurtleMotion#gta_turtle_write`\n\n Blockly.Msg[`gta_turtle_pan`] = `${path}?menu=TurtleMotion#gta_turtle_pan`\n\n Blockly.Msg[\n `gta_turtle_towards`\n ] = `${path}?menu=TurtleMotion#gta_turtle_towards`\n\n Blockly.Msg[`gta_turtle_cor`] = `${path}?menu=TurtleMotion#gta_turtle_cor`\n\n Blockly.Msg[\n `gta_turtle_heading`\n ] = `${path}?menu=TurtleMotion#gta_turtle_heading`\n\n Blockly.Msg[\n `gta_turtle_distance`\n ] = `${path}?menu=TurtleMotion#gta_turtle_distance`\n\n Blockly.Msg[\n `gta_turtle_degrees`\n ] = `${path}?menu=TurtleMotion#gta_turtle_degrees`\n\n Blockly.Msg[\n `gta_turtle_radians`\n ] = `${path}?menu=TurtleMotion#gta_turtle_radians`\n\n // 画笔控制\n Blockly.Msg[\n `gta_turtle_pendown`\n ] = `${path}?menu=TurtleControl#gta_turtle_pendown`\n\n Blockly.Msg[\n `gta_turtle_penup`\n ] = `${path}?menu=TurtleControl#gta_turtle_penup`\n\n Blockly.Msg[\n `gta_turtle_pensize`\n ] = `${path}?menu=TurtleControl#gta_turtle_pensize`\n\n Blockly.Msg[\n `gta_turtle_isdown`\n ] = `${path}?menu=TurtleControl#gta_turtle_isdown`\n\n Blockly.Msg[\n `gta_turtle_color`\n ] = `${path}?menu=TurtleControl#gta_turtle_color`\n\n Blockly.Msg[\n `gta_turtle_color`\n ] = `${path}?menu=TurtleControl#gta_turtle_color`\n\n Blockly.Msg[\n `gta_turtle_pencolor`\n ] = `${path}?menu=TurtleControl#gta_turtle_pencolor`\n\n Blockly.Msg[\n `gta_turtle_fillcolor`\n ] = `${path}?menu=TurtleControl#gta_turtle_fillcolor`\n\n Blockly.Msg[\n `gta_turtle_filling`\n ] = `${path}?menu=TurtleControl#gta_turtle_filling`\n\n Blockly.Msg[\n `gta_turtle_begin_end_fill`\n ] = `${path}?menu=TurtleControl#gta_turtle_begin_end_fill`\n\n // 海龟状态\n Blockly.Msg[\n `gta_turtle_hide_show`\n ] = `${path}?menu=TurtleStatus#gta_turtle_hide_show`\n\n Blockly.Msg[\n `gta_turtle_isvisible`\n ] = `${path}?menu=TurtleStatus#gta_turtle_isvisible`\n\n Blockly.Msg[`gta_turtle_shape`] = `${path}?menu=TurtleStatus#gta_turtle_shape`\n\n Blockly.Msg[\n `gta_turtle_resizemode`\n ] = `${path}?menu=TurtleStatus#gta_turtle_resizemode`\n\n Blockly.Msg[\n `gta_turtle_shapesize`\n ] = `${path}?menu=TurtleStatus#gta_turtle_shapesize`\n\n Blockly.Msg[\n `gta_turtle_shearfactor`\n ] = `${path}?menu=TurtleStatus#gta_turtle_shearfactor`\n\n Blockly.Msg[\n `gta_turtle_settiltangle`\n ] = `${path}?menu=TurtleStatus#gta_turtle_settiltangle`\n\n Blockly.Msg[`gta_turtle_tilt`] = `${path}?menu=TurtleStatus#gta_turtle_tilt`\n\n Blockly.Msg[\n `gta_turtle_shapetransform`\n ] = `${path}?menu=TurtleStatus#gta_turtle_shapetransform`\n\n Blockly.Msg[\n `gta_turtle_get_shapepoly`\n ] = `${path}?menu=TurtleStatus#gta_turtle_get_shapepoly`\n\n //海龟库窗口\n\n Blockly.Msg[\n `gta_turtle_bgcolor`\n ] = `${path}?menu=TurtleScreen#gta_turtle_bgcolor`\n\n Blockly.Msg[\n `gta_turtle_clearscreen`\n ] = `${path}?menu=TurtleScreen#gta_turtle_clearscreen`\n\n Blockly.Msg[\n `gta_turtle_resetscreen`\n ] = `${path}?menu=TurtleScreen#gta_turtle_resetscreen`\n\n Blockly.Msg[\n `gta_turtle_screensize`\n ] = `${path}?menu=TurtleScreen#gta_turtle_screensize`\n\n Blockly.Msg[\n `gta_turtle_setworldcoordinates`\n ] = `${path}?menu=TurtleScreen#gta_turtle_setworldcoordinates`\n\n Blockly.Msg[`gta_turtle_delay`] = `${path}?menu=TurtleScreen#gta_turtle_delay`\n\n Blockly.Msg[\n `gta_turtle_set_pan`\n ] = `${path}?menu=TurtleScreen#gta_turtle_set_pan`\n\n Blockly.Msg[`gta_turtle_stamp`] = `${path}?menu=TurtleScreen#gta_turtle_stamp`\n\n Blockly.Msg[`gta_turtle_clear`] = `${path}?menu=TurtleScreen#gta_turtle_clear`\n\n Blockly.Msg[\n `gta_turtle_penup_pendown`\n ] = `${path}?menu=Turtle#gta_turtle_penup_pendown`\n\n Blockly.Msg[\n `gta_turtle_textinput`\n ] = `${path}?menu=Turtle#gta_turtle_textinput`\n\n Blockly.Msg[`gta_turtle_numinput`] = `${path}?menu=Turtle#gta_turtle_numinput`\n\n /**\n * \n * 小聪编辑器\n * */\n //事件\n\n Blockly.Msg[`gta_define_robot`] = `${path}?menu=Event#gta_define_robot`\n\n \n Blockly.Msg[`gta_turn_on_motion`] = `${path}?menu=Event#gta_turn_on_motion`\n\n //行驶 \n Blockly.Msg[`gta_move_in_open_loop`] = `${path}?menu=Motion#gta_move_in_open_loop`\n Blockly.Msg[`gta_straight_move`] = `${path}?menu=Motion#gta_straight_move`\n Blockly.Msg[`gta_robot_turn`] = `${path}?menu=Motion#gta_robot_turn`\n //灯光\n Blockly.Msg[`gta_set_light_color`] = `${path}?menu=Light#gta_set_light_color`\n Blockly.Msg[`gta_set_light_mode_on`] = `${path}?menu=Light#gta_set_light_mode_on`\n Blockly.Msg[`gta_set_light_mode_blink`] = `${path}?menu=Light#gta_set_light_mode_blink`\n Blockly.Msg[`gta_set_light_mode_breathe`] = `${path}?menu=Light#gta_set_light_mode_breathe`\n Blockly.Msg[`gta_light_on_of`] = `${path}?menu=Light#gta_light_on_of`\n //行驶 \n Blockly.Msg[`gta_forearm_move_in_open_loop`] = `${path}?menu=Posture#gta_forearm_move_in_open_loop`\n Blockly.Msg[`gta_forearm_move`] = `${path}?menu=Posture#gta_forearm_move`\n Blockly.Msg[`gta_arm_move_in_open_loop`] = `${path}?menu=Posture#gta_arm_move_in_open_loop`\n Blockly.Msg[`gta_arm_move`] = `${path}?menu=Posture#gta_arm_move`\n Blockly.Msg[`gta_head_move_in_open_loop`] = `${path}?menu=Posture#gta_head_move_in_open_loop`\n Blockly.Msg[`gta_head_move`] = `${path}?menu=Posture#gta_head_move`\n Blockly.Msg[`gta_paw_move_in_open_loop`] = `${path}?menu=Posture#gta_paw_move_in_open_loop`\n Blockly.Msg[`gta_paw_move`] = `${path}?menu=Posture#gta_paw_move`\n //声音\n Blockly.Msg[`gta_robot_tts`] = `${path}?menu=Voice#gta_robot_tts`\n Blockly.Msg[`gta_robot_play`] = `${path}?menu=Voice#gta_robot_play`\n Blockly.Msg[`gta_get_play_status`] = `${path}?menu=Voice#gta_get_play_status`\n Blockly.Msg[`gta_set_volume`] = `${path}?menu=Voice#gta_set_volume`\n Blockly.Msg[`gta_get_volume`] = `${path}?menu=Voice#gta_get_volume`\n //情感\n Blockly.Msg[`gta_robot_play_emotion_1`] = `${path}?menu=Emotion#gta_robot_play_emotion_1`\n Blockly.Msg[`gta_robot_play_emotion_2`] = `${path}?menu=Emotion#gta_robot_play_emotion_2`\n Blockly.Msg[`gta_robot_play_emotion_3`] = `${path}?menu=Emotion#gta_robot_play_emotion_3`\n Blockly.Msg[`gta_robot_play_emotion_4`] = `${path}?menu=Emotion#gta_robot_play_emotion_4`\n Blockly.Msg[`gta_robot_play_emotion_5`] = `${path}?menu=Emotion#gta_robot_play_emotion_5`\n Blockly.Msg[`gta_robot_play_emotion_6`] = `${path}?menu=Emotion#gta_robot_play_emotion_6`\n Blockly.Msg[`gta_turn_on_expression`] = `${path}?menu=Emotion#gta_turn_on_expression`\n Blockly.Msg[`gta_turn_off_expression`] = `${path}?menu=Emotion#gta_turn_off_expression`\n //显示\n Blockly.Msg[`gta_robot_display_image`] = `${path}?menu=Display#gta_robot_display_image`\n Blockly.Msg[`gta_robot_display_audio`] = `${path}?menu=Display#gta_robot_display_audio`\n Blockly.Msg[`gta_robot_show_camera`] = `${path}?menu=Display#gta_robot_show_camera`\n Blockly.Msg[`gta_robot_stop_showing`] = `${path}?menu=Display#gta_robot_stop_showing`\n // 检测\n Blockly.Msg[`gta_turn_on_cliff_detection`] = `${path}?menu=Detection#gta_turn_on_cliff_detection`\n Blockly.Msg[`gta_turn_off_cliff_detection`] = `${path}?menu=Detection#gta_turn_off_cliff_detection`\n Blockly.Msg[`gta_robot_read_infrared`] = `${path}?menu=Detection#gta_robot_read_infrared`\n Blockly.Msg[`gta_detect_face`] = `${path}?menu=Detection#gta_detect_face`\n Blockly.Msg[`gta_get_face_feature`] = `${path}?menu=Detection#gta_get_face_feature`\n Blockly.Msg[`gta_detect_pattern`] = `${path}?menu=Detection#gta_detect_pattern`\n Blockly.Msg[`gta_get_pattern_location`] = `${path}?menu=Detection#gta_get_pattern_location`\n Blockly.Msg[`gta_read_gyroscope`] = `${path}?menu=Detection#gta_read_gyroscope`\n Blockly.Msg[`gta_read_gyroscope2`] = `${path}?menu=Detection#gta_read_gyroscope2`\n // 摄像头\n Blockly.Msg[`gta_display_video`] = `${path}?menu=Camera#gta_display_video`\n Blockly.Msg[`gta_robot_get_camera_image`] = `${path}?menu=Camera#gta_robot_get_camera_image`\n \n \n \n/**\n * \n * 小智编辑器\n * \n * */\n//事件\n Blockly.Msg[`gta_robot`] = `${path}?menu=Event#gta_robot`\n Blockly.Msg[`gta_define_robot_B`] = `${path}?menu=Event#gta_define_robot_B`\n Blockly.Msg[`gta_robot_B_close`] = `${path}?menu=Event#gta_robot_B_close`\n Blockly.Msg[`gta_robot_B_get_battery`] = `${path}?menu=Event#gta_robot_B_get_battery`\n Blockly.Msg[`gta_robot_B_get_version`] = `${path}?menu=Event#gta_robot_B_get_version`\n \n //行驶\n Blockly.Msg[`gta_robot_B_drive_wheels`] = `${path}?menu=Motion#gta_robot_B_drive_wheels`\n Blockly.Msg[`gta_robot_B_chassis_move`] = `${path}?menu=Motion#gta_robot_B_chassis_move`\n //姿势\n Blockly.Msg[`gta_robot_B_arm_recenter`] = `${path}?menu=Postrue#gta_robot_B_arm_recenter`\n Blockly.Msg[`gta_robot_B_arm_move_to`] = `${path}?menu=Posture#gta_robot_B_arm_move_to`\n Blockly.Msg[`gta_robot_B_gripper_close`] = `${path}?menu=Posture#gta_robot_B_gripper_close`\n Blockly.Msg[`gta_robot_B_gripper_open`] = `${path}?menu=Posture#gta_robot_B_gripper_open`\n Blockly.Msg[`gta_robot_B_servo_move_to`] = `${path}?menu=Posture#gta_robot_B_servo_move_to`\n //灯光\n Blockly.Msg[`gta_robot_B_led_set_led`] = `${path}?menu=Light#gta_robot_B_led_set_led`\n //摄像头\n Blockly.Msg[`gta_robot_B_display_video`] = `${path}?menu=Camera#gta_robot_B_display_video`\n Blockly.Msg[`gta_robot_B_get_camera_image`] = `${path}?menu=Camera#gta_robot_B_get_camera_image`\n //技能\n Blockly.Msg[`gta_robot_B_detect_color_blob`] = `${path}?menu=Skill#gta_robot_B_detect_color_blob`\n Blockly.Msg[`gta_robot_hsv`] = `${path}?menu=Skill#gta_robot_hsv`\n Blockly.Msg[`gta_robot_B_move_along_line`] = `${path}?menu=Skill#gta_robot_B_move_along_line`\n Blockly.Msg[`gta_robot_B_detect_pattern`] = `${path}?menu=Skill#gta_robot_B_detect_pattern`\n Blockly.Msg[`gta_robot_B_move_to_pattern`] = `${path}?menu=Skill#gta_robot_B_move_to_pattern`\n Blockly.Msg[`gta_robot_B_detect_face`] = `${path}?menu=Skill#gta_robot_B_detect_face`\n Blockly.Msg[`gta_robot_B_detect_qrcode`] = `${path}?menu=Skill#gta_robot_B_detect_qrcode`\n\n}\n"],"sourceRoot":""}