4Misc_Start(#4Platform”Á@›èVersionCheckgè@bThis experiment requires Igor Pro 8.00 or later because it has waves with long dimension labels. ¬xHHô@îÿîÿRg(üšHHdh ¬xHHô@îÿîÿRg(üšHHdh ¬x HHô@îÿîÿRg(üšHHdh ^Graph*WDashSettings#úÿ  !4 4 4 4 4 4 Uhome!!dþÿÿÿþE:+RecentWindows÷3D Graphics.ihfAdvanced Topics.ihfAnalysis of Functions.ihfAnalysis.ihfAnnotations.ihfCategory Plots.ihfCommands.ihfContour Plots.ihfControls.ihfGraph1_2:JsonReading,...;...graph1_7:JsonReading,...;...Graph2:usedRowsIgor Reference.ihf 4Misc_End(#XOPState_Startà(#LIH_XOP-64ph1_AxonTelegraph64ph1_16;Graph1_5MIESUtils-64aph1_13;Graph1_12;GMultiClamp700xCommander64iZeroMQ-64er.ipf\.ipNIDAQmx640o@JSON-64ÿÿÿÿ4XOPState_End(#ß0––L;µIÆV_FlagS_info)ProcGlobal#CodeBrowserModule#updatePanel; •HideTools/A The JSON XOP is developed by www.byte-physics.de. •bench() •bench() •bench() •bench() •bench() •bench() •testme() •testme() •testme() •testme() •testme() •testme() •testme() value •bench() •bench() •bench() •bench() •bench() •AppendToGraph resultWave[%TextWaveHashAL][%Reading][] •AppendToGraph resultWave[%TextWaveHashAL][%Writing][] •Legend/C/N=text0/J "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write";DelayUpdate •AppendText/N=text0 "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write";DelayUpdate •AppendText/N=text0 "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write";DelayUpdate •AppendText/N=text0 "TextWaveHashAL\\X0 \\s(TextWaveHashReadingAL) Read \\s(TextWaveHashWritingAL) Write";DelayUpdate •AppendText/N=text0 "TextWaveHashTB\\X0 \\s(TextWaveHashReadingTB) Read \\s(TextWaveHashWritingTB) Write\r\n" •Legend/C/N=text0/J "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write";DelayUpdate •AppendText/N=text0 "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write";DelayUpdate •AppendText/N=text0 "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write";DelayUpdate •AppendText/N=text0 "TextWaveHashAL\\X0 \\s(TextWaveHashReadingAL) Read \\s(TextWaveHashWritingAL) Write";DelayUpdate •AppendText/N=text0 "TextWaveHashTB\\X0 \\s(TextWaveHashReadingTB) Read \\s(TextWaveHashWritingTB) Write" •Graph1_2() •Graph1_2() •Graph1_2() •bench() •bench() •bench() •bench() •bench() •testme() •testme() •testme() value •bench() •bench() •bench() •bench() •bench() •bench() •bench() •testme() value •bench() •testme() value •Edit/K=0 root:indizesHM •bench() •testme() value •bench() •bench() •Edit/K=0 root:indizesHM •stats() •Edit/K=0 root:usedRows •Edit/K=0 root:usedRows •stats() •stats() •Edit/K=0 root:usedRows •stats() •stats() •Edit/K=0 root:usedRows •bench() •stats() •Display/K=0 root:usedRows •bench() •stats() •bench() •stats() •bench() •stats() •bench() •stats() •Display/K=0 root:usedRows •bench() •stats() •//histogram/b=3 usedRows, hist •make hist •histogram/b=3 usedRows, hist •Display/K=0 root:hist •ModifyGraph mode=3 •histogram/b={0, 10, 10} usedRows, hist •histogram/b={0, 1, 10} usedRows, hist • dostuff() 2.22192800003052e-07 •bench() •FunctionProfilingPanel() •bench() •graph1_2() •bench() •SavePICT/E=-5/B=72 !Rê… ¬€`_÷Û?÷ÛHresultWave<ð?ð?š™™™™™¹?ð?eSð ýÔ>øøøøø_€Älћº><¹*y 3Ù>øøøøøOmx“BMÈ>%l&|BøÕ>øøøøø¡K“­‰àº>]Ÿ7~·Ø>øøøøø:ä, xðÈ>íS§fƒ Ö>øøøøøšaKÑÂÌ»>@Îf›øøøøø“°ëîlÈ>EíN„‡Õ>øøøøø’lCÿãŒ>ò_ÿùŠ~Ø>øøøøøíµ"‚ùÇ>LèË^øYÖ>øøøøøVÛ,âd°Œ>Wô˚ÜØ>øøøøøÒÞ"(eïÈ>Áqø(LmÖ>øøøøøX ŽýŒ>ëü€¬Lœâ>øøøøø hz<;‚È>Ï\LØ#Iê>øøøøøÊŸÿœ>‹{âïÍ5î>øøøøø5Y'WF]É>qdqA®»Ö>øøøøøFÎ_t»œ>IÉù}ùØ>øøøøø–`Š*ñÈ>Û›lÉËÖ>øøøøø†7ï(c¶œ>Ñ_ëúR!Ù>øøøøøÝ억/LÈ>£AéY+×>øøøøøá¥H|öuœ>S~çQÐ1Ù>øøøøø+"ÊSÈ>ê݊ŠY+×>øøøøøülÈdœ>–Š@ÙÙ>øøøøøJ_ŽrŸEÈ>9a_>×>øøøøø{Î'<²Ÿ>°…ÅM²jÙ>øøøøøíVŽ flÈ>ËZ­>×>øøøøøóázu#¿>‚x<±wtÙ>øøøøøŸbÈ7È>í%ü÷Å×>øøøøø/s‘­ô{Ÿ>ç, ô£Ù>øøøøø]ß©ÑCœÈ>»u a×>øøøøø®ülìÀŸ>ô2š&ç>øøøøøÿ—.ˆ5É>JÞkÎâá×>øøøøø!fÄ?K[¿>…€ÄŒÿÓÙ>øøøøøýw@ë„ÅÈ>²1ÈÀ®€×>øøøøøQ"W$šŸ>5îŠ-múÙ>øøøøø‹™‹êŠ¶È>zæå°ûØ>øøøøøñ£;e¿>q)ÖÍ&×Ù>øøøøø4B7+†ºÈ>ÊwËܵ×>øøøøø†€š‚Ê2À>RžyÝ·ðÙ>øøøøør%=>ÄÜÈ>øI9ˆk¯×>øøøøøÃòTÍŸ>Á%6*;Ú>øøøøøœhh#‹­È>H nbPŸ×>øøøøøœy`¶SéÀ>3>åûV Û>øøøøø’ï­£Ãä>‘Ûí‚ÚÒ×>øøøøø/t€»G‘À>Ž Š#Û>øøøøø P_>uÆä>ÁÓTäJ\Ø>øøøøøÓÏHB*žÀ>Ö ‘cXÛ>øøøøøó ·˜–wä>n»ñj4Ø>øøøøøÒf"¬ÂÀ>l­D_ëÚ>øøøøø;ªŸZ«ñã>qïÖ"wØ>øøøøøJ­œpcŠÁ>X:z6ËÚ>øøøøøƉ'.Þßã>WÞ]€àþ×>øøøøø2²¿GX¯À>Gr8h`Ü>øøøøøŠ¶ÆölÈã>ó)¶8™Û>øøøøøÞá7Ï¢Ä>×"K5Û>øøøøøñ•ù«gýã>*)fs‹/Ü>øøøøøÎÉæ3Ê>?I£m£Û>øøøøøÕÅ\5,ä>£L$‡ŸÞ>øøøøøXý¶ÌŽyÅ>M“.Ÿ”VÛ>øøøøø¢…“AŸã>›ó©!»Ü>øøøøøXý¶ÌŽyÅ>â°7ï"ýÚ>øøøøøŽ ñ?¿ÿã>"ÈbäÛ>øøøøøãÉ¡æÆ>nTÈBÂÚ>øøøøøpŸº‘èã>pDRfÞÅÜ>øøøøøÁ¬P€û¹Å>Cèí瓡Ú>øøøøø“ЃAËã>Ì,jHÞ>øøøøøð!—îäÅ>ó,2]s‰Ú>øøøøø>ÁUlûã>Xæt&Ý>øøøøø5^ºI ‚Ê>x£Œ†ûÚ>øøøøøM®,÷­øã>Úóë=KÝ>øøøøøòP%líÊ>å„Î|Ã}Ú>øøøøø!ï| Æã>³Qç›~ZÜ>øøøøøÆ­8‹ÍýÇ>Ô_G9;›Ú>øøøøøiÊb£/ºã>%ÒæÜ>øøøøøŒµ§?ÖÉ>}>’† pÚ>øøøøø@“pªÄã>5Sk«£4ß>øøøøøÆÄæãÚPÐ>žöâ/~Ú>øøøøøs˔ihä>µEˆáÙTß>øøøøøúlӎÑðÌ>'NH•Ú>øøøøøñÆò.‚åã>⊜tQÝ>øøøøøÔ¢“J]Ñ>Å=lbÓïà>øøøøø1‰±(¬Jè>0a4+à>øøøøøµDxŝœÍ>c^íäÚ>øøøøø? aú3Ãã>Ž2Dµ¢Ù>øøøøøJ„º…Ë>ªŸeÕÚ>øøøøø Âën³'ä>8Ðæ@šÛ>øøøøøŽÇ-b¯âÊ>yL1h‡Þ>øøøøøBŸ3Kã>=<ðÖÞÙ>øøøøø#DŠ:ìÌ>oµºµt¿Ú>øøøøø^OֈBã>ZÄên"ãÙ>øøøøø||!hõ£Ë>rrLœ±šÛ>øøøøøOøÁÇÉâ>OÅtŸ+ÄÛ>øøøøøØêz»ˆcË>\§ËÁÑÝ>øøøøø7—Lâ>¡Y§£öÛ>øøøøøZzú)ÊÌ>·AOö4Û>øøøøøü‰o7â>qEZÒð>øøøøø…g×÷ÀÒÌ>.gK* Ý>øøøøøë‡ù©wñá>ÀvSˆÏÜ>øøøøø?æ$†ìÌ>vy+وÛ>øøøøøÏ}¯@í¶á>€¢ì ×3Ü>øøøøøÌLåĉ5Í> aŕjÛ>øøøøø=fS·*á>¥£ÜÇ{Ü>øøøøøý­FxšÍ>‚«ì霊Û>øøøøøð¢+îà>n<ñÿWÛÜ>øøøøøýw¯ îfÍ>>ä…–œÛ>øøøøøµæâýTÞ> h„LlÝ>øøøøø„ùeøÏ>ûkú%lÝ>øøøøøÍ/g–\èÛ>W•;;2ÙÜ>øøøøø©UìÇÎ>]˜lCàÆÛ>øøøøøüiÆg Ù>eË º)Ý>øøøøø² Ā_ÂÏ>QßٔÉ(Ü>øøøøø¶Ðù¯Ø>—Ãrt*³Ý>øøøøøók'1GÐ> 2H%“;Ý>øøøøø2õwó·‡×>@ 3iSÝ>øøøøøœ”OÉÑ>ðeZ€Ü>øøøøø^÷ô‰ºÖ>øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøJSONTextwaveStringByKeyDimLabelWaveTextWaveHashALTextWaveHashTBReadingWriting° ²—0 @ñ^’ ÷ے ÷Û^resultWaveSummed2ð?ð?š™™™™™¹?ð?É£eîk®î>¬59!WÊ>²^Vr_Ë>8„Ï{Å>¯¢P`Ï?z‘d±š#å>šåbge.õ>zmۜïÌí>òP%líÊ>ó)¶8™Ë>ÔýRõáÆ>E’jén?`bâEdå>WåŒrz( ?4_ÊeHÛ)?Ä;&?9ÊxJ]á>~R›8™Û>§I„¡i`?êŸRL”s(?QÿfÉo#?Ú©^#îfí>¯CÞËXË>F”ö_Ë>Ÿ‘ŠhúÅ>§7H-9?Ž9ÎmÂÍä>ö”œ{G!?W_]š¥ì>š¯Þ{ŽË>3Øo¹Ë>ÑtyÅØÑ>Ž‰9­€ß?»Nˆo7ä>#+¿ Æ%?r=÷ c(ì>@ÝŠÞÅÌ>ØŒª³Z â>š®×OZÞ>yçŸ ^ô?Ú'6ÕIüä>f€}ŠE?*ñ8Ä÷Mì>vœGÁ Ì> «ùrçŠË>5f€pυÈ>œüàfý>äÕ§ŠGä>ÿ _ºŽ? XÝ°Žë>3Àª@+Ì>ŠÈÆÌ>[ ŠA{Æ>`̎;Bÿ>™ò!š:ä>Àn¿ˆÍ?^öYÓ*€ë>þ1,þn¹Ë>|Q:ÖË>6ÑB]ÿÉÆ>ð¡~ù> vŽ“T8ä>\– …c3?*™E8äê>j€]¢Í>ùf@b`‚Ì>+G`Ç>}p yý>ÔÿiÛ#›ä>A[L/Ž?T [Ûºï>Xœ  ±Ð>׎=Öç%Ð><u×#ÞÑ>ŠŽþ–Ôþ>Sðo+0æ>œGžŸ7?*X¯Žî>F‘ZÍÏ>fýS—9Ð>ŠŽ5YºÑ> ógš?ˆr¯K„å>£Âë ÑÄ'?pûÔgœÞî>²–pV²‘Ï>EûEö.+Ñ>f(ʁú’Ñ>”—ØXeÒü>š® €>å>Ì,Ô,bÊ?\K…&Êí> ÕC’®`Ñ>(ZgDìÐ>ègNàzÑ> KtýþÇÿ>‚óŒK~å>ÕŸž¬|?6Æ \7ˆí>ºŽ£ÿéÏ>‚ŸügPÑ>fþn ®Ò>€OÅð…—ú>9/©5(eå>‹3DoK?*Ü(bâÕ÷> ±af€EØ>€ÿž"ãç>NÞf±‘Eæ>|]Ÿœué?ìÊ}žØó>nØ!›!?öÀßéÃKì>CÇ­9±ÆÐ>Î çÑQÓ>|+Ú*¡Ó>ëw °Õù>P©eo‰æ>rÃJ`Ο ?ï2ª©žÃì>`º9*qÜÐ>õ©:áÔ> ä*€UÔ>9OmW…¹ü>ÚÆ]1ñä>åÝË\d ?ãCфn—ë>·ð‘ÅkÒ>ƜOòåÍÙ>&—ŸÔ>ÑTn+cø>‚FªDûä>Ø×?…ØNdë>(˜&+ÜÒ>ÿx=ù~hÚ>\W6íšÔ>šöö+ŽÜû>³B-‘ïå>PÿŽˆ.?Æbð7fë>Ï^u˜™Ó>ˆ,Ýv4Ý>ÌÕõ“(Ö>E° ÌMø>àQ|ß,æ>öƒ‘Éov?";d%Uë>ËÛ®#ðÓ>?ªê›çà>0އjç§×>$š‚-].ü>f xExå>Ào Â÷þ>$ ”¶ì>è]U©ÝÔ>¯[ È iã>˜RÅ4YÙ>h G³‰Õ÷>aŠÿ¶§bæ>9÷9åB–ÿ>–O?aä?:Êdœ¿Sí>ž f%—çý>g @™ýð>4>ŸêD?w†Tí­û>`öYK: ?7âg5uí>m3ãÜiØ>Ú 4Ù ?2ú~oPÛë>¢4‘„‹ø>óJN&Ѷå>Çt5ÀdÖ®å>ÊTt(Ûôð>˜ž„á¡%â>|2鑖ü>rÒëë¹úù>Êp§þ ?oŠmî>ÙÆ)éL{Ü>M,BªŸý>%¥®}nò>ÍeéVp?ڗ"⊞æ>ŲüŒ`?nOoÇIPë> ƒF©NËà>÷tSkUö>ŽYMžqã>n,€,Æü>'g ) #ç>®:'îeNø>ØáƒÝŸ6ë>døßI4øã>[N-š¢ý>\®£¥¿¬é>Üʏänø>Œ'žÀdç>,wz¶÷>žE°Íø>‹¬(æ^ä>ó¬à&Üäÿ>:¿â$Fî>ºxrO£ü>Rž-rU·ç>;"£û>@ìâŒS>? åäHÞû>W«~ŸÃ?x^®nŠ£ñ>æńöŒß?ºÐjŸYþ>–5ՆÏûú>b[QO]ð>©«åU.$$?‚Ÿ¡OÁ¢û>Ç/ÔoõÊÿ>e2óÉýé>üÂâ\Hƒ?Äw”i)ì>“ò#žÚqû>$ÿ ô°Ã?°ëÅÎÇú>x„!›Îø>﷙õ4*ë>š§‡DQó>Ü!#¬‚pí>w5[·‹ò>Nd74?—pu²ý>ð}Îë@åü>zùÆËôoì>àö}ï®ó>ªSº#*jì>ÿjL8«×õ>Œ &í¬³?Îf?/Q?óÊµË gù>ùïÿጞî>³0ú‚Œaü>–ê– ôí>ù{ܬéú>Õ_ꑥ¥?Ùs!Óò:?.–@ñÍü>Ä ö¢®‰ð>:þú«hõ>¶ë›,Yì>øÚþ{?d*†i#?©ù¡:× ?Šg.|Nù>Ñè*² ò>ô„ÚÞñ>º²]‘î]ð> &qžÞï?ŒI”šÕ¶(? ƒÔÍYÜ?&ö÷ôÉ?ßú“VÌô>*¿Z{“èõ>NÌ}'ð>fXF[Ê?ëj+š.?µל– ? š)‘–Où>’ö>W¹q=ò>($DÙãì>èÐÀ–,/?@8Ý F3? ä!íô”?lö º_ÿ>H'Úrhù>f+ëó>ûXy‡í>² p[ô?Ž#Ž¯=8?öq_Òi"?«»÷Íe?+ê‹ý#ý>„UD¹ô>nÞa&ê>՝*ÂÍ ?’jJ f @?ú5ÌÞ¥Ü#?é¡Ÿ*‹2?Ô¹”h»“?ø®{6Ѕî>6qBê>¿}†.ä ?Ã\Js2 E?€})€o)?m ʯbnû>Œ‹µ#? 4Úsoï>ȉ‘ž5íë>`öáw«(?£‹zŽQ?^$#dœ0?⾖Ç5'ÿ>eÎÔ°‹ ?—NÓD¡qî>Àš«È¶ì>ÑžqU+?G&Ö£}P?ƒÎ[x?‘5?͑/j6~û>‚"#Ôa?à÷=ã8ï>t1‹Y§×ë>,óû[r2?¹€–/÷T?&iÕ.:?©²Ú‚Î?×TF]?*~zÕÕ_ï>pØ°ëàì>tØlã,A@?ïy¢K­kX?ØÜ »ÙA?ߎÐ'ïú>-ä^K&?˜g€SêÅí>Ð#ŸÇé>ël•®9>?žÜ11~e?cjtÞCõH?šà Ÿä?ä"Ó7=?L°^ƒ…í>èdځî>'„wóO?êHÂè-f?4à°êP?Ž`|pB?“Í1š?"?ó¿‰:Àð>ŸŠ`‹Öî>ÇO ôS?:S0h j?|ÞxWU?MÚ,£Áù?Ç)CfÌf3?Ìøn«zï>JSONTextwaveStringByKeyDimLabelWaveTextWaveHashALTextWaveHashTBReading€;Y@_+ôÛ+ôÛdddð?ð?ð?ð?€®}@ _=ôÛ=ôÛdddnumð?ð?ð?ð?€þ@ù^Ø÷ÛØ÷ÛusedRowsð?ð?ð?ð?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?@€?@@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?@@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?@€?€?@@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?@€?€?€?€?€?€?€?@€?€?@€?€?@@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?@@€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?@€?@@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?@€?@@€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?€?@@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?@€?€?€?€?@€?@@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?€?@@€?€?€?@€?€?€?€?€?@€?@@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@@@€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?@€?@€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?@€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?@@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@@€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?@€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?@€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?@€?€?@€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?@@@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?@€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@@@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?@@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?@€?€?€?@€?€?€?€?€?€?€?@€?€?@@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?@€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?@€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@@€?€?€?€?€?€?€?@€?@€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?@€?€?@€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?@€?@€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?@€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?@€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?@€?šàÙh_÷ÛG÷Û hist ð?ð?ð?ð?Â'GüœFEB  Packages!Iݓ  ResizeControlsPanel!lܓ~0––L;µIÆIndicatorWindowName–8/Š$* èû^¯ ©Ú¯ ©Ú:EditorTextWaverð?ð?ð?ð?SF_InfoTabSettingsbutton_BrowserSettings_Exportbutton_Calculation_RestoreDatabutton_RemoveRangesbutton_TimeAlignment_Actionbutton_sweepFormula_checkbutton_sweepFormula_displaycheck_BrowserSettings_ADCcheck_BrowserSettings_ARcheck_BrowserSettings_DACcheck_BrowserSettings_DB_Failedcheck_BrowserSettings_DB_Passedcheck_BrowserSettings_OChancheck_BrowserSettings_OVScheck_BrowserSettings_PAcheck_BrowserSettings_SFcheck_BrowserSettings_TAcheck_BrowserSettings_TTLcheck_BrowserSettings_dDAQcheck_BrowserSettings_splitTTLcheck_Calculation_AverageTracescheck_Calculation_ZeroTracescheck_Display_EqualYignorecheck_Display_EqualYrangecheck_Display_VisibleXrangecheck_SweepControl_HideSweepcheck_auto_removecheck_channelSel_AD_0check_channelSel_AD_1check_channelSel_AD_10check_channelSel_AD_11check_channelSel_AD_12check_channelSel_AD_13check_channelSel_AD_14check_channelSel_AD_15check_channelSel_AD_2check_channelSel_AD_3check_channelSel_AD_4check_channelSel_AD_5check_channelSel_AD_6check_channelSel_AD_7check_channelSel_AD_8check_channelSel_AD_9check_channelSel_AD_Allcheck_channelSel_DA_0check_channelSel_DA_1check_channelSel_DA_2check_channelSel_DA_3check_channelSel_DA_4check_channelSel_DA_5check_channelSel_DA_6check_channelSel_DA_7check_channelSel_DA_Allcheck_channelSel_HEADSTAGE_0check_channelSel_HEADSTAGE_1check_channelSel_HEADSTAGE_2check_channelSel_HEADSTAGE_3check_channelSel_HEADSTAGE_4check_channelSel_HEADSTAGE_5check_channelSel_HEADSTAGE_6check_channelSel_HEADSTAGE_7check_channelSel_HEADSTAGE_ALLcheck_headstage_axis_labelcheck_highlightRangescheck_overlaySweeps_disableHScheck_overlaySweeps_non_commulacheck_ovs_clear_on_new_ra_cyclecheck_ovs_clear_on_new_stimset_cyclecheck_pulseAver_deconvcheck_pulseAver_indTracescheck_pulseAver_multGraphscheck_pulseAver_showAvercheck_pulseAver_timeAligncheck_pulseAver_zeroTracgroup_SB_axes_scalinggroup_calcgroup_channelSel_ADgroup_channelSel_DAgroup_channelSel_HEADSTAGEgroup_enable_artifactgroup_enable_channelsgroup_enable_dashboardgroup_enable_pulsegroup_enable_sweepFormulagroup_enable_sweepsgroup_properties_artefactgroup_properties_pulsegroup_properties_sweepFormulagroup_properties_sweepsgroup_pulseAver_deconvgroup_timealignmentlist_dashboardlist_of_rangeslist_of_ranges1popup_DB_lockedDevicespopup_TimeAlignment_Masterpopup_TimeAlignment_Modepopup_overlaySweeps_selectsetvar_Display_EqualYlevelsetvar_TimeAlignment_LevelCrosssetvar_cutoff_length_aftersetvar_cutoff_length_beforesetvar_overlaySweeps_offsetsetvar_overlaySweeps_stepsetvar_pulseAver_deconv_rangesetvar_pulseAver_deconv_smthsetvar_pulseAver_deconv_tausetvar_pulseAver_endPulsesetvar_pulseAver_fallbackLengthsetvar_pulseAver_startPulsesetvar_sweepFormula_parseResultslider_BrowserSettings_dDAQstatus_sweepFormula_parserLeft\W623\JRLeft\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRLeft\W623\JRLeft\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRLeft\W623\JRMiddle\W623\JRLeft\W623\JRMiddle\W623\JRLeft\W623\JRLeft\W623\JRLeft\W623\JRMiddle\W623\JRLeft\W623\JRLeft\W623\JRMiddle\W623\JRMiddle\W623\JRLeft\W623\JRLeft\W623\JRLeft\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRMiddle\W623\JRLeft\W623\JRMiddle\W623\JRRight\W623\JRRight\W623\JRRight\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRLeft\W623\JRLeft\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRRight\W623\JRSame Width\W623\JRRight\W623\JRSame Width\W623\JRRight\W623\JRRight\W623\JRRight\W623\JRSame Width\W623\JRRight\W623\JRRight\W623\JRSame Width\W623\JRSame Width\W623\JRRight\W623\JRRight\W623\JRRight\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRSame Width\W623\JRLeft\W623\JRSame Width\W623\JRRight\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRBottom\W623\JRBottom\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRGuide enableBoxTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRGuide enableBoxTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRGuide MainBoxTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRBottom\W623\JRTop\W623\JRBottom\W623\JRBottom\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRBottom\W623\JRBottom\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRGuide enableBoxBottom\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRGuide enableBoxBottom\W623\JRTop\W623\JRBottom\W623\JRTop\W623\JRGuide MainBoxBottom\W623\JRBottom\W623\JRTop\W623\JRTop\W623\JRBottom\W623\JRBottom\W623\JRBottom\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRTop\W623\JRBottom\W623\JRTop\W623\JRBottom\W623\JRSF_InfoTabSettingsbutton_BrowserSettings_Exportbutton_Calculation_RestoreDatabutton_RemoveRangesbutton_TimeAlignment_Actionbutton_sweepFormula_checkbutton_sweepFormula_displaycheck_BrowserSettings_ADCcheck_BrowserSettings_ARcheck_BrowserSettings_DACcheck_BrowserSettings_DB_Failedcheck_BrowserSettings_DB_Passedcheck_BrowserSettings_OChancheck_BrowserSettings_OVScheck_BrowserSettings_PAcheck_BrowserSettings_SFcheck_BrowserSettings_TAcheck_BrowserSettings_TTLcheck_BrowserSettings_dDAQcheck_BrowserSettings_splitTTLcheck_Calculation_AverageTracescheck_Calculation_ZeroTracescheck_Display_EqualYignorecheck_Display_EqualYrangecheck_Display_VisibleXrangecheck_SweepControl_HideSweepcheck_auto_removecheck_channelSel_AD_0check_channelSel_AD_1check_channelSel_AD_10check_channelSel_AD_11check_channelSel_AD_12check_channelSel_AD_13check_channelSel_AD_14check_channelSel_AD_15check_channelSel_AD_2check_channelSel_AD_3check_channelSel_AD_4check_channelSel_AD_5check_channelSel_AD_6check_channelSel_AD_7check_channelSel_AD_8check_channelSel_AD_9check_channelSel_AD_Allcheck_channelSel_DA_0check_channelSel_DA_1check_channelSel_DA_2check_channelSel_DA_3check_channelSel_DA_4check_channelSel_DA_5check_channelSel_DA_6check_channelSel_DA_7check_channelSel_DA_Allcheck_channelSel_HEADSTAGE_0check_channelSel_HEADSTAGE_1check_channelSel_HEADSTAGE_2check_channelSel_HEADSTAGE_3check_channelSel_HEADSTAGE_4check_channelSel_HEADSTAGE_5check_channelSel_HEADSTAGE_6check_channelSel_HEADSTAGE_7check_channelSel_HEADSTAGE_ALLcheck_headstage_axis_labelcheck_highlightRangescheck_overlaySweeps_disableHScheck_overlaySweeps_non_commulacheck_ovs_clear_on_new_ra_cyclecheck_ovs_clear_on_new_stimset_cyclecheck_pulseAver_deconvcheck_pulseAver_indTracescheck_pulseAver_multGraphscheck_pulseAver_showAvercheck_pulseAver_timeAligncheck_pulseAver_zeroTracgroup_SB_axes_scalinggroup_calcgroup_channelSel_ADgroup_channelSel_DAgroup_channelSel_HEADSTAGEgroup_enable_artifactgroup_enable_channelsgroup_enable_dashboardgroup_enable_pulsegroup_enable_sweepFormulagroup_enable_sweepsgroup_properties_artefactgroup_properties_pulsegroup_properties_sweepFormulagroup_properties_sweepsgroup_pulseAver_deconvgroup_timealignmentlist_dashboardlist_of_rangeslist_of_ranges1popup_DB_lockedDevicespopup_TimeAlignment_Masterpopup_TimeAlignment_Modepopup_overlaySweeps_selectsetvar_Display_EqualYlevelsetvar_TimeAlignment_LevelCrosssetvar_cutoff_length_aftersetvar_cutoff_length_beforesetvar_overlaySweeps_offsetsetvar_overlaySweeps_stepsetvar_pulseAver_deconv_rangesetvar_pulseAver_deconv_smthsetvar_pulseAver_deconv_tausetvar_pulseAver_endPulsesetvar_pulseAver_fallbackLengthsetvar_pulseAver_startPulsesetvar_sweepFormula_parseResultslider_BrowserSettings_dDAQstatus_sweepFormula_parsernameleftrighttopbottom /M`{”¯Èàù7Rkƒ›³Ìæ#?Yr©ºÏäú&<Rh}’§ŒÑæû'<Qf{¥ºÏæ:VrŽªÆäþ0On’šÁÛó $9CViƒ˜­ÃÕî0Mdz›©žÎè  4 S m ˆ £ Œ Ù õ  ) H c ‚  · Ã Ï Ý ë ù    - ; I W e s    « ¹ Ç Õ ã ñ ÿ  ) 7 E S a o } ‹ ™ § µ Ã Ñ ß í û  % 3 A O ] k y ‡ • £ ± ¿ Í Û é ÷ !/=KYguƒ‘Ÿ­»É×åó)5CO[gu›©µÁÍÛé÷!/=KYguƒ‘Ÿ­¹ÇÔáî$6BN`r„–šºÌÞð&8J\n€’€¶ÈÚìþ"4FXj|Ž ²ÄÖèú 0BTfxŠœ®ÀÒäö,>Pbt†˜ªŒÎàò(:L^k}Šœ©¶ÃÕâï -:L^p‚”ŠžÊÜî$6HZfx…›Š±ŒÇÕãîù%0;U`kvŒ—¢­žÃÎÙäïú&1<GR]hs~‰”ŸªµÀËÖáì÷ #.9DOZep{†‘œ§²œÈÓÞéôÿ  +6P[fq‰”ŸªµÀËÖáì÷ #.9DOZep{‰”¢°»ÆÑÜçõ$/:EP[xƒŽ™€¯ºÅÐÛæñü(3>IT_ju€‹–¡¬·ÂÍØãîù   % 0 ; F Q \ g r } ˆ “ ž © Ž ¿ Ê Õ à ë ö ! !!"!-!8!C!N!Y!v!!!š!µ!Ã!Î!Ù!ç!õ!"""$"/":"E"P"["f"q"|"‡"’""š"³"Á"Ì"Ú"EditorTextWaveÁ=Üm_¯ ©Ú¯ ©ÚEditorTitleWaveð?ð?ð?ð?ControlLeft EdgeRight EdgeTop EdgeBottom Edge"-»6( *  _¯ ©ÚÀ ©Ú:EditorSelWaverð?ð?ð?ð?€?SF_InfoTabSettingsbutton_BrowserSettings_Exportbutton_Calculation_RestoreDatabutton_RemoveRangesbutton_TimeAlignment_Actionbutton_sweepFormula_checkbutton_sweepFormula_displaycheck_BrowserSettings_ADCcheck_BrowserSettings_ARcheck_BrowserSettings_DACcheck_BrowserSettings_DB_Failedcheck_BrowserSettings_DB_Passedcheck_BrowserSettings_OChancheck_BrowserSettings_OVScheck_BrowserSettings_PAcheck_BrowserSettings_SFcheck_BrowserSettings_TAcheck_BrowserSettings_TTLcheck_BrowserSettings_dDAQcheck_BrowserSettings_splitTTLcheck_Calculation_AverageTracescheck_Calculation_ZeroTracescheck_Display_EqualYignorecheck_Display_EqualYrangecheck_Display_VisibleXrangecheck_SweepControl_HideSweepcheck_auto_removecheck_channelSel_AD_0check_channelSel_AD_1check_channelSel_AD_10check_channelSel_AD_11check_channelSel_AD_12check_channelSel_AD_13check_channelSel_AD_14check_channelSel_AD_15check_channelSel_AD_2check_channelSel_AD_3check_channelSel_AD_4check_channelSel_AD_5check_channelSel_AD_6check_channelSel_AD_7check_channelSel_AD_8check_channelSel_AD_9check_channelSel_AD_Allcheck_channelSel_DA_0check_channelSel_DA_1check_channelSel_DA_2check_channelSel_DA_3check_channelSel_DA_4check_channelSel_DA_5check_channelSel_DA_6check_channelSel_DA_7check_channelSel_DA_Allcheck_channelSel_HEADSTAGE_0check_channelSel_HEADSTAGE_1check_channelSel_HEADSTAGE_2check_channelSel_HEADSTAGE_3check_channelSel_HEADSTAGE_4check_channelSel_HEADSTAGE_5check_channelSel_HEADSTAGE_6check_channelSel_HEADSTAGE_7check_channelSel_HEADSTAGE_ALLcheck_headstage_axis_labelcheck_highlightRangescheck_overlaySweeps_disableHScheck_overlaySweeps_non_commulacheck_ovs_clear_on_new_ra_cyclecheck_ovs_clear_on_new_stimset_cyclecheck_pulseAver_deconvcheck_pulseAver_indTracescheck_pulseAver_multGraphscheck_pulseAver_showAvercheck_pulseAver_timeAligncheck_pulseAver_zeroTracgroup_SB_axes_scalinggroup_calcgroup_channelSel_ADgroup_channelSel_DAgroup_channelSel_HEADSTAGEgroup_enable_artifactgroup_enable_channelsgroup_enable_dashboardgroup_enable_pulsegroup_enable_sweepFormulagroup_enable_sweepsgroup_properties_artefactgroup_properties_pulsegroup_properties_sweepFormulagroup_properties_sweepsgroup_pulseAver_deconvgroup_timealignmentlist_dashboardlist_of_rangeslist_of_ranges1popup_DB_lockedDevicespopup_TimeAlignment_Masterpopup_TimeAlignment_Modepopup_overlaySweeps_selectsetvar_Display_EqualYlevelsetvar_TimeAlignment_LevelCrosssetvar_cutoff_length_aftersetvar_cutoff_length_beforesetvar_overlaySweeps_offsetsetvar_overlaySweeps_stepsetvar_pulseAver_deconv_rangesetvar_pulseAver_deconv_smthsetvar_pulseAver_deconv_tausetvar_pulseAver_endPulsesetvar_pulseAver_fallbackLengthsetvar_pulseAver_startPulsesetvar_sweepFormula_parseResultslider_BrowserSettings_dDAQstatus_sweepFormula_parsernameleftrighttopbottomEditorSelWave  WindowCoordinates!®Þ“v@$_©Ú©Ú W_windowCoordinates ð?ð?ð?ð?ResizeControlsPanel90697.251778.2485.757296872.25388.5windowNamelefttoprightbottompanelResscreenReswidthPointsheightPoints!')+16  KBColorize!Ÿß“³ 0––L;µIÆgStartingHuegLinearHuegSaturationð?gLightnessà?gAllMarkersMenuItem4@gUniqueMarkersMenuItemð?gAllLineStylesMenuItemð?gPopRedgPopGreengPopBluegColorTableNamedBZ14Øù9˜_ y"Û y"Û,PhueRGBImaged{®Gáz„?ð?ð?ð?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿööêêÒÒºº¢¢ŠŠxx``BBHHNNTTZZ``llrrxx„„ŠŠ––¢¢®®ŽŽÀÀÌÌÞÞêêüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ****006666<š™™>ÍÌÌ>?š™?333?ÍÌL?fff?šܪ@( _ y"Û y"Û hueTickLabels ð?ð?ð?ð?Ø`$˜$_ y"Û y"Û,PsatRGBImagedð?ð?ð?ð?™™Ÿš¥›«œ±·žŸŸÄ Ê¡Ð¢Ö£Ü€â¥éŠï§õšû©«¬ ­®¯ °&±,²2³8Ž?µE¶K·QžW¹]ºc»jŒpœvŸ|¿‚ÀˆÁŽÂ”ÛġŧƭdzȹɿÊÆËÌÌÒÍØÎÞÏäÐêÑñÒ÷ÓýÔÖ ×ØÙÚ"Û(Ü.Ý4Þ:ß@àGáMâSãYä_åeækçrèxé~ê„ëŠìí–îï£ð©ñ¯òµó»ôÁõÇöÎ÷ÔøÚùàúæûìüòýùþÕn%numÅllfk¶jjWi§h÷gGg˜fèe8eˆdØc(cybÉaai`º_ _Z^ª]û\K\›[ëZ;Z‹YÜX,X|WÌVVmUœT T^S®RþQNQžPîO?ONßM/M€LÐK KpJÁIIaH±GGQF¢EòDBD’CãB3BƒAÓ@#@t?Ä>>d=µ<q=k 8 1+% Øû³˜)_ y"Û y"Û,PlightRGBImagedð?ð?ð?ð?ffüim&qŒtRxæ{|ƒš†<ŠÒh‘þ”’˜(œŸŸT£èŠ~ª®ª±>µÔžjŒÀ”Ã*ÇÀÊVÎêрÕÙ¬Ü@àÖãlçë–î,òÂõXùìüÿÿÿÿÿÿþÿþÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿþÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿþÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÝt ¢:Ñhÿ–-Ä[óŠ!žOæ}«CÚqŸ6 Í d!ü!’"*#Á#X$ï$†%&µ&K'ã'z()š)—*–-•0’369Ž<‹?ŠB‰E†H…K„N‚QT~W}Z|]y`xcwfuislqoproulxk{j~hf„d‡cŠb_^“]–[™YœWŸV¢U¥RšQ«P®O±LŽJ·IºHœEÀDÃCÆBÉ?Ì>Ï<҂®C Ùo™/Å X$î'…+/®2D6Û9q=AšD1HÇK[OñR‡VZ±]GaÜdshlo2sÈv]zó}‰…³ˆIŒßu“ —Ÿš5žË¡^¥õš‹¬!°µ³J·áºwŸ  Å7É  CodeBrowser!rߓ.0––L;µIÆparsingTime33333'†@checksumTime@M@parsingChecksum@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855ØF{€_Õñöۜ÷Û6saveVariablesð?ð?ð?ð?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?f–D€XDÍRNGf†5DÍÌ D{Eó‰F3“7D3³6Dfæ2DÍÌ1D3s1D3“1D@1Dš1Dš91DšËˆF¹EÍ̎Bš™CB3’Eff4Bš™BšùDfn E33wBpB33mB33mBÍÌjBÍÌbBhB33iBjB …D3SDVALIDPARSINGTIMECHECKSUMTIME¿`{×OT0 M_Õñöۜ÷Û declarations†ð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W520\k(47872,47872,47872)\K(47872,47872,47872)\W522\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W523\k(0,0,0)\K(0,0,0)\W523\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W520\k(0,0,0)\K(0,0,0)\W520\k(0,0,0)\K(0,0,0)\W523\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W522\k(47872,47872,47872)\K(47872,47872,47872)\W522\k(47872,47872,47872)\K(47872,47872,47872)\W522MyExerciseRoutineProto() -> varRunFuncWithProfiling(funcref, [var, var, var]) -> varDoProfiling()StartProfiling()StopProfiling()ProfilingCalcTopFuncs()ProfilingPrintTopFuncs()ProfilingAnnotateFunc()BeginFunctionProfiling([var]) -> varEndFunctionProfiling([var, var]) -> varFuncProfStartStopProc()CleanupHook()FunctionProfilingPanel() : PanelMyProfilingStuff{profilingFuncPercent, validSamps, invalidSamps, profilingLineHitCount, testTime, tid, , }CreateHDF5BrowserGlobals()SetBrowserDataFolder()SetHDF5BrowserData()CountSlashes()GetObjectOrAttributeDataTypeClass()GetObjectOrAttributeDataTypeClassStr()ExtractObjectNamesFromFullPaths()GetGroupHierarchy()GetFileHierarchy()ResetListSelections()HDF5GetObjectFullPath()GetTextPreviewString()GetNumericPreviewString()GetPreviewString()GetDatasetTooltip()FillDatasetsList()FillGroupAttributesList()FillDatasetAttributesList()FillLists()FillListsPreservingSelection(HDF5BrowserData&) -> varSelectedGroupName()SelectedGroupPath()SelectedDatasetName()SelectedDatasetPath()SelectedAttributeName()SelectedAttributePath()SetMembersPopupMenu()HDF5GetReadOnlySetting()HDF5GetSortByCreationOrderSetting()HDF5GetCompLoadInfo()HDF5GetTranspose2DSetting()HDF5GetLoadDatasetOptions()MembersPopupProc()SetButtonStates()DrawFilePath()DrawGroupPath()DrawDatasetInfo()UpdateAfterFileCreateOrOpen()CreateFileButtonProc()OpenHDF5File()OpenFileButtonProc()FileWasUnexpectedlyClosed()FileWasClosed()CloseFileButtonProc()LoadDatasetButtonProc()LoadGroupButtonProc()AttachListWaves()HDF5BrowserPanelHook()SelectDataset()UpdateAfterGroupSelected()GroupsListActionProc()GroupAttributesListActionProc()HandleDatasetDoubleClick()HDF5BrowserContexualMenuSupportsDataTypeClass()HDF5BrowserPopupSetGlobals()HDF5BrowserPopupMenuText()GetWaveDataAsText()GetDataAsText()HandleContextualClick()DatasetsListActionProc()DatasetAttributesListActionProc()ListBoxActionProc()SetButtonTitleInAllBrowsers()SetGraphButtonTitle()GraphButtonProc()SetTableButtonTitle()TableButtonProc()SetDumpButtonTitle()DumpButtonProc()HelpButtonProc()CreateRecentFilesPopup()CreateCloseFileButton()CreateHelpButton()CreateSortByCreationOrderCheckbox()CreateShowPropertiesInDumpCheckbox()CreateLoadGroupOnlyOnceCheckbox()EnableOrDisableLoadGroupOnlyOnceCheckbox()CreateHDF5BrowserPanel()HDF5BrowserCheckboxProc()HDF5BrowserPrefCheckboxProc(WMCheckboxAction&) -> var : CheckBoxControlCreateNewHDF5Browser() -> varIsHDF5Browser()HDF5GetIndexedBrowserName()HDF5GetTopBrowserName()HDF5AreAnyBrowsersOpen()UpdateBrowserIfNecessary()UpdateHDF5Browsers()FixCloseHDF5FileButtons()AfterFileOpenHook()WaveRank()HDF5BrowserDumpIsVisible()HDF5BrowserDumpHook()HDF5CreateDumpWindow()HDF5ClearDumpNotebook()CleanupDump()HDF5DisplayDumpOfSelectedGroup()DisplayDumpOfSelectedDataset()DisplayDumpOfSelectedAttribute()HDF5BrowserGraphIsVisible()HDF5BrowserGraphHook()HDF5CreateBrowserGraph()SetImageLayer()DisplayGraphOfSelectedData()HDF5BrowserTableIsVisible()HDF5BrowserTableHook()HDF5CreateBrowserTable()DisplayTableOfSelectedData()RemoveFromGraphAndTable()KillConflictingBrowserWaves()LoadSelectedDataForDisplay()HDF5DisplaySelectedDataset()HDF5DisplaySelectedAttribute()MinWindowSize()PositionControlRelative()OffsetControls()HDF5ResizeBrowser()HDF5BrowserLoadPackagePrefs()HDF5BrowserSavePackagePrefs()GetPrefWindowCoords()SetPrefWindowCoords()GetPrefBrowserSettings()GetRecentFilesWave()SetRecentFilesFromWave()HDF5BrowserLoadRecentFilesPrefs()HDF5BrowserSaveRecentFilesPrefs()ClearRecentFiles()PrintRecentFiles()GetRecentFilesList()GetRecentFileByIndex()RemoveRecentFileByIndex()OpenRecentFileByIndex()SaveAsRecentFile()FillRecentFilesPopMenu()RecentFilesPopMenuProc()HDF5CheckDataClass(str, str&) -> varHDF5MakeHyperslabWave(str, var) -> waveInitHDF5DataInfo(HDF5DataInfo&) -> varHDF5DatasetRank(var, str) -> varHDF5AttributeRank(var, str, var, str) -> varInitHDF5DatatypeInfo(HDF5DatatypeInfo&) -> varInitHDF5LinkInfoStruct(HDF5LinkInfoStruct&) -> varHDF5IsExternalLink(var, str) -> varStringsAreEqual()GetUnquotedLeafName()HaveObjectNameConflict()SaveButtonProc()DoneButtonProc()GetPrefSavePanelSettings()SetPrefSavePanelSettings()SetSaveButtonState()HDF5SaveWavesPanelHook()HDF5SaveDataFolderPanelHook()DisplaySaveWavesPanel()DisplaySaveDataFolderPanel()HDF5BrowserSelectorNotification(str, var, str, str) -> varSaveWavesButtonProc()SaveDataFolderButtonProc()CloseSavePanels()HDF5SaveWavesPanelIsVisible()HDF5SaveDFPanelIsVisible()kHDF5ListGroupSeparatorkHDF5ListAttributeSeparatorH5S_MAX_RANKH5T_ORDER_LEH5T_ORDER_BEH5T_ORDER_VAXH5T_ORDER_MIXEDH5T_ORDER_NONEH5T_SGN_NONEH5T_SGN_2H5T_INTEGERH5T_FLOATH5T_TIMEH5T_STRINGH5T_BITFIELDH5T_OPAQUEH5T_COMPOUNDH5T_REFERENCEH5T_ENUMH5T_VLENH5T_ARRAYH5S_SCALARH5S_SIMPLEH5S_NULLH5D_COMPACTH5D_CONTIGUOUSH5D_CHUNKEDH5D_VIRTUALH5T_STR_NULLTERMH5T_STR_NULLPADH5T_STR_SPACEPADH5T_CSET_ASCIIH5T_CSET_UTF8H5L_TYPE_HARDH5L_TYPE_SOFTH5L_TYPE_EXTERNALkLoadAllMembersStringkGraphButtonNamekShowGraphButtonTitlekHideGraphButtonTitlekTableButtonNamekShowTableButtonTitlekHideTableButtonTitlekDumpButtonNamekShowDumpButtonTitlekHideDumpButtonTitlekPackageNamekCurrentPrefsVersionkPrefFileNamekPrefRecordIDkCurrentRecentFilesPrefsVersionkRecentFilesPrefFileNamekRecentFilesPrefRecordIDkNoRecentFilesStrkNumRecentFileFieldskHDF5DataInfoVersionkHDF5DatatypeInfoVersionkHDF5LinkInfoStructVersionHDF5BrowserData{datasetInfo, creationOrder, readOnly, fullPath, path, fileName, fileID, hyperSelectionWavePath, groupPath, browserName, , }HDF5BrowserPrefs{reserved[100], reservedSave[14], includeIgorAttributes, saveGroupsRecursively, reservedLoad[13], loadGroupOnlyOnce, transpose2DDatasets, loadGroupsRecursively, reservedOverall[14], creationOrder, readOnly, browserBottom, browserRight, browserTop, browserLeft, savePanelBottom, savePanelRight, savePanelTop, savePanelLeft, dumpBottom, dumpRight, dumpTop, dumpLeft, tableBottom, tableRight, tableTop, tableLeft, graphBottom, graphRight, graphTop, graphLeft, prefsVersion, , }HDF5BrowserRecentFilesPrefs{recentFile9[400], recentFile8[400], recentFile7[400], recentFile6[400], recentFile5[400], recentFile4[400], recentFile3[400], recentFile2[400], recentFile1[400], recentFile0[400], reserved[100], prefsVersion, , }Menu Load WavesMenu HDF5BrowserPopupMenu(contextualmenu)JSON_Parse(str, [var]) -> varJSON_Dump(var, [var, var]) -> strJSON_New([var]) -> varJSON_Release(var, [var]) -> varJSON_Remove(var, str, [var]) -> varJSON_AddTreeObject(var, str, [var]) -> varJSON_AddTreeArray(var, str, [var]) -> varJSON_AddTree()JSON_GetKeys(var, str, [var, var]) -> waveJSON_GetType(var, str, [var]) -> varJSON_GetArraySize(var, str, [var]) -> varJSON_GetMaxArraySize(var, str, [var]) -> waveJSON_GetString(var, str, [var]) -> strJSON_GetVariable(var, str, [var]) -> varJSON_GetTextWave(var, str, [var]) -> waveJSON_GetWave(var, str, [var]) -> waveJSON_GetInt64(var, str, [var])JSON_GetUInt64(var, str, [var])JSON_AddString(var, str, str, [var]) -> varJSON_AddVariable(var, str, var, [var, var]) -> varJSON_AddNull(var, str, [var]) -> varJSON_AddBoolean(var, str, var, [var]) -> varJSON_AddWave(var, str, wave, [var]) -> varJSON_AddInt64(var, str, , [var]) -> varJSON_AddUInt64(var, str, , [var]) -> varAddValueI64()JSON_AddObjects(var, str, [var, var]) -> varJSON_AddJSON(var, str, var, [var]) -> varJSON_SetString(var, str, str, [var]) -> varJSON_SetVariable(var, str, var, [var, var]) -> varJSON_SetNull(var, str, [var]) -> varJSON_SetBoolean(var, str, var, [var]) -> varJSON_SetWave(var, str, wave, [var]) -> varJSON_SetInt64(var, str, , [var]) -> varJSON_SetUInt64(var, str, , [var]) -> varSetValueI64()JSON_SetObjects(var, str, [var, var]) -> varJSON_SetJSON(var, str, var, [var]) -> varJSON_ClearRTError()JSON_KVPairsToJSON()JSON_GetIgorInfo([var]) -> varJSON_Version([var]) -> strJSON_Exists(var, str) -> varJSON_DisableQuietMode() -> varJSON_EnableQuietMode() -> varJSON_SetIgnoreErrors() -> varJSON_UnsetIgnoreErrors() -> varJSON_ZFLAG_DEFAULTJSON_ZFLAG_DEFAULTJSON_QFLAG_DEFAULTJSON_QFLAG_DEFAULTJSON_OBJECTJSON_ARRAYJSON_NUMERICJSON_STRINGJSON_BOOLJSON_NULLFunca_0() -> varFunca_1() -> varFuncb_1() -> varIntNoise(var, var) -> varBench() -> varFindPointIndexOfString(str, wave/T, wave) -> varHM_Create() -> waveHM_AddEntry(wave, str, str) -> varHM_GetEntry(wave, str) -> strWaveRef(wave) -> waveStats() -> vardostuff() -> varTestMe() -> varROWSCOLSGraph0() : GraphGraph1_2() : GraphMenu Run BenchmarkMakeListIntoWaveSelector(str, str, [var, var, str, str, str]) -> varWS_AddSelectableString(str, str, str) -> varWS_RemoveSelectableString(str, str, str) -> varWS_IndexedObjectPath(str, str, var) -> strWS_SelectedObjectsList(str, str) -> strWS_CountSelectedObjects(str, str) -> varWS_SelectObjectList(str, str, str, [var]) -> varWS_SelectAnObject(str, str, str, [var]) -> varWS_ClearSelection(str, str) -> varWS_UpdateWaveSelectorWidget(str, str) -> varWS_OpenAFolder(str, str, str) -> varWS_OpenAFolderFully(str, str, str) -> varWS_CloseAFolder(str, str, str) -> varWS_SetNotificationProc(str, str, str, [var]) -> varnamefiltertemplate(str, var) -> varOpenAFolder()CloseAFolder(WaveSelectorListInfo&, var) -> varWMWS_WinHook(WMWinHookStruct&) -> varIsWindowOrChild()RootWindowName()WS_HandleWindowRename()WS_ExtNotificationTemplate(str, var, str, str) -> varWS_NotificationTemplate(str, var) -> varCallNotificationProc()WS_KillListDataFolder(str, str, str) -> varWaveSelectorListProc(WMListboxAction&) -> var : ListBoxControlreturnIndentString()WS_FindAndKillWaveSelector(str, str) -> varFindFolderForWaveSelector()MakePopupIntoWaveSelectorSort(str, str, str, [str]) -> varWS_AddListToBeSorted(WaveSelectorSortInfo&, str, str) -> varWS_SortKindMenu(str, str) -> strWS_SortKindPopMenuProc(WMPopupAction&) -> var : PopupMenuControlWS_SortKindAction()WS_SetPopupSorting()WS_ReverseList()WS_SortWaveList()WS_SetGetSortOrder(str, str, var&, var&) -> varWS_SetFilterString(str, str, str) -> strWS_GetFilterString(str, str) -> strWS_SetListOptionsStr(str, str, str) -> strWS_GetListOptionsStr(str, str) -> strWS_SetNameFilterProc(str, str, str) -> strWS_SetAllowFilteringDataFolders(str, str, var) -> varWS_isRootWindow()WinIsExterior()WS_FindHookableHost()WMWS_WavesWMWS_NVarsWMWS_StringsWMWS_DataFoldersWMWS_SelectionNonContinguousWMWS_SelectionNonContiguousWMWS_SelectionContinguousWMWS_SelectionContiguousWMWS_SelectionSingleWMWS_FolderOpenedWMWS_FolderClosedWMWS_DoubleClickWMWS_SelectionChangedWMWS_SelectionChangedShiftWMWS_KilledWMWS_PopupPanelKilledWMWS_sortNoneWMWS_sortByNameWMWS_sortByCreationDateWMWS_sortByModificationDateWMWS_sortByNumberOfPointsWMWS_sortByDimensionalityWMWS_ErrorNoErrorWMWS_ErrorOptionStringTooLongMAX_OBJ_NAMEMAX_DOUBLE_NAMEWaveSelectorVersionMAX_SORT_LIST_CONTROLSWaveSelectorListInfo{allowFilterDataFolders, RootFolderRow, sortReverse, sortKind, isExtendedProc, NotificationProc[3*MAX_OBJ_NAME+3], nameFilterProcStr[3*MAX_OBJ_NAME+3], wavelistMatchStr[MAX_OBJ_NAME+1], wavelistOptions2[100], wavelistOptions1[100], SelWaveName[MAX_OBJ_NAME+1], ListWaveName[MAX_OBJ_NAME+1], folderName[MAX_OBJ_NAME+1], contents, version, , }ControlSpec{controlname[MAX_OBJ_NAME+1], windowname[MAX_DOUBLE_NAME+1], , }WaveSelectorSortInfo{ControlSpec, ControlSpec, sortReverse, sortKind, version, , }.E\sŠ¡žÏæý+ZqˆŸ¶Íäû)@Wn…œ³Êáø&=Tk‚™°ÇÞõ #:Qh–­ÄÛò  7Ne|“ªÁØï4Kby§ŸÕì1H_v€»Òé.E\sŠ¡žÏæý + B Y p ‡ ž µ Ì ã ú  ( ? V m „ › ² É à ÷  % < S j  ˜ ¯ Æ Ý ô " 9 P g ~ • ¬ Ã Ú ñ   6 M d ƒ ¢ Á à ÿ =\sŠ¡žÏæý+BYp‡žµÌãú)Xo†ŽËâù'>Ulƒš±Èßö $;Ri€—®ÅÜó !8Of}¬Û 9h—Æõ$S‚±à>mœËâù'>Ulƒ¢Áàÿ=\s’±Ðï-LkŠ©Èç%Dc‚™ž×ö4Sr‘°Çæ3RiˆŸ¶ÍäBq ·Îåü*AXo†ŽËâù'>Ulƒš±Èßö $ ; R i € — ® Å Ü ó !!!8!O!f!}!”!«!Â!Ù!ð!""5"L"c"z"‘"š"¿"Ö"í"##2#I#`#w#Ž#¥#Œ#Ó#ê#$$/$F$]$t$‹$¢$¹$Ð$ç$þ$%,%C%Z%q%ˆ%Ÿ%¶%Í%ä%û%&)&X&‡&¶&å&'C'r'‘'Æ'Ó'ã'ò' (!(8(\(ƒ(š(§(Ç(1)K)a)u)ƒ)Š)Ì)í)**'*>*T*m**’*€*œ*Ø*ã*+++>+S+h++–+«+Ã+æ+û+,1,C,T,b,q,‚,Ÿ,µ,Ã,×,ò,----B-S-i-x-’-š-Ç-á-.,.F.Y.h..—.ž.Ë.è.ý./#/4/H/X/h/€/—/©/Ì/ð/0;0S0l0³0Ð0ß0ú01)1C1W1p1ƒ11§1Œ1Ò1é1ö1242T2o2…22¬2È2ã2ù23-3F3c33›3¹3È3á3ñ34!4>4S4h4€4”4¬4Í4î455&5<5U5l5~5–5®5Ò5ù56?6k6™6Ë6î6ÿ67,7<7L7f7€7”7¬7É7à7ü768K8e8v8“8­8Ä8ß8ë8÷8999-999B9M9V9^9h9t9~9Š9—9Ÿ9§9°9º9Ä9Ì9×9å9ð9û9 ::*:8:E:R:_:p:…:•:ª:¿:Ï:ä:ù:;;0;<;P;];j;‰;¡;¹;Ê;Þ;ò; <$<¯<™>‰?˜?Á?Þ?ÿ?@4@W@@ª@ž@â@A/A\A‚AªAÓAøAB5B`B’B¶BâB C3C[ChC”CœCèCD>DjD”D»DãDðDEEEXElEŠE€EÀEÞEûEF7FIF[FmFFŠF”F F«FŽFœFÍFÝFíFGGDGWGyG–G«G¹GÉGØGÜGàGðGHHXH„H³HÝHI,I\IŠI¬IØIüI%JJJ}J J­JÜJKK"K9KnK–K¬K×KL)LTLoL©LåLMEMXMlM|MMŒMäMN1NVN€NµNÆNÕNêNôNþN OO6OQOjO‚O–O§OžOÈOÝO÷OPP$P3PJPeP~P—PšPÅPÑPàPóP QrRœRS˜&þXC_Õñöۜ÷ۆ lines†ð?ð?ð?ð?58ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÒÿÿÿÿÿÿÿÿ WÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ * ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3=NbmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#$%&'+,0123456789:>?@CDEFJKLPQUVWÔ–—˜ÆÇÈö÷øó ô õ ö ö÷øùú1`kYø ü™(AWlƒŸ°ÿÿÿÿÑò &AXo†ŽÐé<Tfÿÿÿÿˆ žÑð$<Nÿÿÿÿpˆÿÿÿÿÿÿÿÿ¹Óö   #\s|ŸµºÁÎ-·/Jg®ÌÝ Ku›ÀÖÿÿÿÿ`xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/:ÿÿÿÿÁÿÿÿÿDdv¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)l€Š¢ªœÿÿÿÿÿÿÿÿÿÿÿÿ{|}~‚ƒ„…ˆ‰Š‹ŒŽ’“”•–—š›ž ¡€ (Ô5É|/D_Õñöۜ÷ۆprocs†ð?ð?ð?ð?FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]FunctionProfiling.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]HDF5 Browser.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]json_functions.ipf [ProcGlobal]Proca.ipf [ProcGlobal]Proca.ipf [ProcGlobal]Procb.ipf [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]Procedure [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]WaveSelectorWidget.ipf [ProcGlobal]"DfˆªÌî2Tv˜ºÜù3PmŠ§Äáþ8Ur¬Éæ =Zw”±Îë%B_|™¶Óð *Gdž»Øõ/Li†£ÀÝú4Qn‹šÅâÿ 9 V s  ­ Ê ç  ! > [ x • ² Ï ì & C ` } š · Ô ñ  + H e ‚ Ÿ Œ Ù ö  0 M j ‡ € Á Þ û 5RoŒ©Æã:Wt‘®Ëè"?\y–³Ðí 'Da~›žÕò,Ifƒ œÚ÷1Nkˆ¥Âßü6SpªÇä;Xu’¯Ìé#@]z—ŽÑî (Ebœ¹Öó-Jg„¡ŸÛø2Ol‰ŠÃàý7TqŽ«Èå>]|›ºÙø6Ut“²Ñð.Ml‹ªÉè&Edƒ¢Áàÿ=\{š¹Ø÷ 5 T s ’ ± Ð ï !-!L!k!Š!©!È!ç!""2"H"^"t"Š" "¶"Ì"â"ø"#$#:#P#f#|#’#µ#Ø#û#$A$d$‡$ª$Í$ð$%6%Y%|%Ÿ%Â%å%&+&N&q&”&·&Ú&ý& 'C'f'‰'¬'Ï'ò'(8([(~(¡(Ä(ç( )-)P)s)–)¹)Ü)ÿ)"*E*h*‹*®*Ñ*ô*+:+]+€+£+Æ+é+ ,/,R,u,˜,»,Þ,-$-G-j--°-Ó-ö-.<.xㅖk0 *_Õñöۜ÷Û help†ð?ð?ð?ð?functionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionfunctionfunctionthreadsafefunctionfunctionthreadsafefunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionTo find where your code is spending the most time, create a function that takes no
paremeters and exercises your code for at least a second. Then call it via
RunFuncWithProfiling(yourFuncHere)
Or, if your test will take longer than 100 seconds, use
RunFuncWithProfiling(yourFuncHere,testTime=yourTimeEstimate)

The top functions will be printed into a notebook named "ProfilingResults"
The left hand side will be annotated with percentages and a bar.
The results will look best in a monospaced font.
By default, the bar length will be relative to the total hit count. You can make it relative
to the line with the maximum hit count by including the optional variable normMode=1 like so:
RunFuncWithProfiling(yourFuncHere,normMode=1)
By default, results are printed until the total exceeds 80%. You can change that by providing
the optional variable maxPct like so:
RunFuncWithProfiling(yourFuncHere,maxPct=90)

Your test function may call functions that are ThreadSafe and those that reside in an independent module
but only functions in the main thread are profiled.

If you have code that is inconvenient or difficult to wrap into a function that can
be passed to RunFuncWithProfiling, you can use the function pair:
BeginFunctionProfiling([testTime])
EndFunctionProfiling([normMode,maxPct])
You can create a simple panel with a button that calls these functions by executing:
FunctionProfilingPanel()
Don't forget to stop profiling.

The profiling code relies on two built-in functions that were added in Igor PRo 6.23. They are:

A numeric function:
GetRTLocation(sleepMs)
sleepMs is the number of milliseconds to sleep the current thread after fetching a value.
Gets a code that defines the current location in the source that was executing at the time this was called.
Use in a preemptive thread to sample a running routine for performance profiling.
The result (stored in a double) can be passed to GetRTLocInfo to determine the location in the procedures.
Note that this samples the main thread only and the locations will become meaningless after any procedure editing.

And a string fucnction:
GetRTLocInfo(code)
code is the result from a (very recent) GetRTLocation
Returns Key-value string: "PROCNAME:name;LINE:line;FUNCNAME:name;" or, a zero length string if the location could not be found.
line number is padded with zeros to enable sorting

Created LH111202
JP, Igor 7.03 - updated to work with independent modules, uses new IMNAME:independentModuleName; output from GetRTLocInfo()
Igor 9.00 - stop profiling on panel close and scroll to the top in the result notebook
*********** background versions ***********


You can create a simple panel with a button that calls these functions by executing:
FunctionProfilingPanel()
This action procedure is called if you open an Igor8 experiment.
It must be non-static because it is non-static in Igor8.
************* End of HDF5 Browser HDF5 Browser Recent Files Prefs Routines ***************
************* Start of HDF5 Utility Routines ***************
HR, 2020-02-03, version 2.00: HDF5MakeHyperslabWave now returns a wave reference.
If path is "", it makes a free wave.
HDF5DatasetRank(locationID, name)
Returns rank or zero in event of error.
HDF5AttributeRank(locationID, name)
Returns rank or zero in event of error.
@}
@addtogroup JSONXOP_Parse
@{
@brief Parse a JSON string with the XOP

@param jsonStr string representation of the JSON object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric identifier of the JSON object on success
@}
@addtogroup JSONXOP_Dump
@{
@brief Dump a JSON id to its string representation

@param jsonID numeric identifier of the main object
@param indent [optional, default 0] number of white spaces for pretty output indentation.
Use -1 for compact output.
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a string representation of the JSON object
@}
@addtogroup JSONXOP_New
@{
@brief register a new object

@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric identifier of the JSON object on success
@}
@addtogroup JSONXOP_Release
@{
@brief Release a JSON id from memory

@param jsonID numeric identifier of the main object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success, NaN otherwise
@}
@addtogroup JSONXOP_Remove
@{
@brief Remove a path element from a JSON string representation

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success, NaN otherwise
@}
@addtogroup JSONXOP_AddTree
@{
@brief Recursively add new objects to the tree

Non-existing path elements are recursively created.
@see JSON_AddTreeArray JSON_OBJECT

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success
@brief Recursively add a new array to the tree.

Non-existing path elements are created as objects.
@see JSON_AddTreeObject JSON_ARRAY

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_GetKeys
@{
@brief Get the name of all object members of the specified path

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@param esc [optional, 0 or 1] set to ignore RFC 6901 path escaping standards
@returns a free text wave with all elements as rows.
@}
@}
@addtogroup JSONXOP_GetType
@{
@brief get the JSON Type for an element at the given path.

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric value representing one of the defined @see JSON_TYPES
@}
@addtogroup JSONXOP_GetArraySize
@{
@brief Get the number of elements in an array.

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric variable with the number of elements the array at jsonPath
@}
@addtogroup JSONXOP_GetMaxArraySize
@{
@brief Get the maximum element size for each dimension in an array

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free numeric wave with the size for each dimension as rows
@}
@addtogroup JSONXOP_GetValue
@{
@brief Get a text entity as string variable from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a string containing the entity
@brief Get a numeric, boolean or null entity as variable from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric variable containing the entity
@brief Get an array as text wave from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free text wave with the elements of the array
@brief Get an array as numeric wave from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free numeric double precision wave with the elements of the array
@brief Get a 64bit integer from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a 64bit variable
@brief Get an unsigned 64bit integer from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns an unsigned 64bit variable
@}
@addtogroup JSONXOP_AddValue
@{
@brief Add a string entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value string value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a numeric entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value numeric value to add
@param significance [optional] number of digits after the decimal sign
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a `null` entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a numeric value as boolean to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value boolean value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a WAVE as array entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param wv WAVE reference to the wave to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a 64bit integer to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value int64 value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add an unsigned 64bit integer to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value uint64 value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a specified number of objects to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param objCount [optional, default 1] number of objects
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Merge a JSON object to another object

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param jsonID2 numeric identifier of the merged object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a string entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new string value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a numeric entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new numeric value
@param significance [optional] number of digits after the decimal sign
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a `null` entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a boolean value at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new boolean value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a WAVE as array entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param wv WAVE reference to the new wave
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a 64bit integer at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new int64 value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with an unsigned 64bit integer at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new uint64 value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a specified number of objects at the giveln location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param objCount [optional, default 1] number of objects
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace an entity with the given JSON object at the specified location in the main object

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param jsonID2 numeric identifier of the merged object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@addtogroup JSON_GetIgorInfo
@{
@brief Return JSON with Igor information

@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_Version
@{
@brief Output version information useful for issue reports

@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_Exists
@{
@brief Check if the jsonID/jsonPath is valid

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@returns 1 if object at jsonPath exists in JSON object, 0 otherwise
@}
@addtogroup JSONXOP_Options
@{
@brief Disables quiet mode
@brief Enables quiet mode@brief Sets the ignore errors define for the json wrapper functions@brief Undefines the ignore errors define for the json wrapper functionsExecute/Q "Graph0()"
Execute/Q "Graph1_2()"
private functionsstatic Function GetIndexedWaveListFromUD(index, rootWindowName, outWindowName, outListName)
Variable index
String rootWindowName, &outWindowName, &outListName

String thelist = GetUserData(rootWindowName, "", "WaveWidgetList")
if (index >= ItemsInList(thelist))
return -1
endif
outWindowName = StringByKey("WindowName", stringfromlist(index, thelist), "=", ",")
outListName = StringByKey("ListName", stringfromlist(index, thelist), "=", ",")

return index
end
MakePopupIntoWaveSelectorSort can be called up to 8 times for the same PopupMenu control,
allowing it to control the sorting of up to 8 lists in any window.

Each list must already be a WaveSelector.

Each list's sorting order will be controlled by the one PopupMenu.
For example:
MakePopupIntoWaveSelectorSort("Panel0", "list0InPanel0", "sortPopupInPanel0")
MakePopupIntoWaveSelectorSort("Panel0", "list1InPanel0", "sortPopupInPanel0")
MakePopupIntoWaveSelectorSort("Panel0", "list2InPanel0", "sortPopupInPanel0")
makes the sortPopupInPanel0 control the sorting of three lists.

Note that the popup and list controls in the above code are all in the Panel0 window.

You can put the popup and list controls in completely different windows/subwindows like this:
MakePopupIntoWaveSelectorSort("Panel0#P0", "list0InPanel0P0", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
MakePopupIntoWaveSelectorSort("Panel0#P1", "list0InPanel0P1", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
MakePopupIntoWaveSelectorSort("Panel0#P2", "list0InPanel0P2", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
 (08@HPX```hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ¢ŽÆØêü (08@HPX`hpx€ˆ˜ š°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°ÂÔæø .6HZl~¢ŽÆØêü 2DVhp‚”ŠžÊÜî,>FN`hz‚Š’ššššššššššš¢ª²ºÂÊÒÚâêòú        " * 2 : B J R Z b j r z ‚ Š ’ š ¢ ª ² º Â Ê Ò Ú â ê ò ú    " * 2 : B J R Z b j r z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z z 1>KXerŒCP]jjjw„‘ž«žÅÒßìù -:GTan{ˆ•¢¯ŒÉÖãðý $1>KXerŒ™Š³ÀÍÚçô(5BO\ivƒª·ÄÑÞëø,9FS`mö*7DQ^kx…’Ÿ¬¹ÆÓàíú!.;HUbo|‰–£°œÊ×äñþ %2?LYfs€š§Ž[áîG¢¯ŒÉÖãðý  $ 1 > K X e r  Œ ™ Š ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ /"R$m%Î&“(©*_,l,°.œ0€2s4=6ä7z9';˜<>Ú?ÌACŸD7F¹GFISIøJL/N=P Q@SôT’V;XHX ZÙ[æ[ó[Ì\Œ]0_ž_Ò_0`“`“`“`“`“`“`“`“`“`“`“` `­`º`Ç`aaa)a6aCaPa]ajajajajajajawa„a‘aža«ažaÅaÒaßaìaùabb b>bKbXbebrbbŒb™bŠb³bÀbÍbÚb×dädyi†i“i i­iºiÇiÔiáiîiûijj"j/jâ—3ì)â—[â—u◀â—mâ—dâ—gâ—v◈â—,ì1ìKâ—8◠ìFì9ìYâ—ìEâ—Qâ—fâ—bâ—c●◇â—jâ—yâ—)ìHì0â—9â—#ì$ì-ì@â—0ìN◄â—a◌◎◅â—nâ—x◉â—oìZì #€<ö@Z◜÷Û_free_ð?ð?ð?ð?#€@ö@V◜÷Û_free_ð?ð?ð?ð?#15²ù-ø*ìÕñöÛŸ_free_ßð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W539\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W522\k(0,0,0)\K(0,0,0)\W523\k(0,0,0)\K(0,0,0)\W523CreateHDF5BrowserGlobals()SetBrowserDataFolder()SetHDF5BrowserData()CountSlashes()GetObjectOrAttributeDataTypeClass()GetObjectOrAttributeDataTypeClassStr()ExtractObjectNamesFromFullPaths()GetGroupHierarchy()GetFileHierarchy()ResetListSelections()HDF5GetObjectFullPath()GetTextPreviewString()GetNumericPreviewString()GetPreviewString()GetDatasetTooltip()FillDatasetsList()FillGroupAttributesList()FillDatasetAttributesList()FillLists()FillListsPreservingSelection(HDF5BrowserData&) -> varSelectedGroupName()SelectedGroupPath()SelectedDatasetName()SelectedDatasetPath()SelectedAttributeName()SelectedAttributePath()SetMembersPopupMenu()HDF5GetReadOnlySetting()HDF5GetSortByCreationOrderSetting()HDF5GetCompLoadInfo()HDF5GetTranspose2DSetting()HDF5GetLoadDatasetOptions()MembersPopupProc()SetButtonStates()DrawFilePath()DrawGroupPath()DrawDatasetInfo()UpdateAfterFileCreateOrOpen()CreateFileButtonProc()OpenHDF5File()OpenFileButtonProc()FileWasUnexpectedlyClosed()FileWasClosed()CloseFileButtonProc()LoadDatasetButtonProc()LoadGroupButtonProc()AttachListWaves()HDF5BrowserPanelHook()SelectDataset()UpdateAfterGroupSelected()GroupsListActionProc()GroupAttributesListActionProc()HandleDatasetDoubleClick()HDF5BrowserContexualMenuSupportsDataTypeClass()HDF5BrowserPopupSetGlobals()HDF5BrowserPopupMenuText()GetWaveDataAsText()GetDataAsText()HandleContextualClick()DatasetsListActionProc()DatasetAttributesListActionProc()ListBoxActionProc()SetButtonTitleInAllBrowsers()SetGraphButtonTitle()GraphButtonProc()SetTableButtonTitle()TableButtonProc()SetDumpButtonTitle()DumpButtonProc()HelpButtonProc()CreateRecentFilesPopup()CreateCloseFileButton()CreateHelpButton()CreateSortByCreationOrderCheckbox()CreateShowPropertiesInDumpCheckbox()CreateLoadGroupOnlyOnceCheckbox()EnableOrDisableLoadGroupOnlyOnceCheckbox()CreateHDF5BrowserPanel()HDF5BrowserCheckboxProc()HDF5BrowserPrefCheckboxProc(WMCheckboxAction&) -> var : CheckBoxControlCreateNewHDF5Browser() -> varIsHDF5Browser()HDF5GetIndexedBrowserName()HDF5GetTopBrowserName()HDF5AreAnyBrowsersOpen()UpdateBrowserIfNecessary()UpdateHDF5Browsers()FixCloseHDF5FileButtons()AfterFileOpenHook()WaveRank()HDF5BrowserDumpIsVisible()HDF5BrowserDumpHook()HDF5CreateDumpWindow()HDF5ClearDumpNotebook()CleanupDump()HDF5DisplayDumpOfSelectedGroup()DisplayDumpOfSelectedDataset()DisplayDumpOfSelectedAttribute()HDF5BrowserGraphIsVisible()HDF5BrowserGraphHook()HDF5CreateBrowserGraph()SetImageLayer()DisplayGraphOfSelectedData()HDF5BrowserTableIsVisible()HDF5BrowserTableHook()HDF5CreateBrowserTable()DisplayTableOfSelectedData()RemoveFromGraphAndTable()KillConflictingBrowserWaves()LoadSelectedDataForDisplay()HDF5DisplaySelectedDataset()HDF5DisplaySelectedAttribute()MinWindowSize()PositionControlRelative()OffsetControls()HDF5ResizeBrowser()HDF5BrowserLoadPackagePrefs()HDF5BrowserSavePackagePrefs()GetPrefWindowCoords()SetPrefWindowCoords()GetPrefBrowserSettings()GetRecentFilesWave()SetRecentFilesFromWave()HDF5BrowserLoadRecentFilesPrefs()HDF5BrowserSaveRecentFilesPrefs()ClearRecentFiles()PrintRecentFiles()GetRecentFilesList()GetRecentFileByIndex()RemoveRecentFileByIndex()OpenRecentFileByIndex()SaveAsRecentFile()FillRecentFilesPopMenu()RecentFilesPopMenuProc()HDF5CheckDataClass(str, str&) -> varHDF5MakeHyperslabWave(str, var) -> waveInitHDF5DataInfo(HDF5DataInfo&) -> varHDF5DatasetRank(var, str) -> varHDF5AttributeRank(var, str, var, str) -> varInitHDF5DatatypeInfo(HDF5DatatypeInfo&) -> varInitHDF5LinkInfoStruct(HDF5LinkInfoStruct&) -> varHDF5IsExternalLink(var, str) -> varStringsAreEqual()GetUnquotedLeafName()HaveObjectNameConflict()SaveButtonProc()DoneButtonProc()GetPrefSavePanelSettings()SetPrefSavePanelSettings()SetSaveButtonState()HDF5SaveWavesPanelHook()HDF5SaveDataFolderPanelHook()DisplaySaveWavesPanel()DisplaySaveDataFolderPanel()HDF5BrowserSelectorNotification(str, var, str, str) -> varSaveWavesButtonProc()SaveDataFolderButtonProc()CloseSavePanels()HDF5SaveWavesPanelIsVisible()HDF5SaveDFPanelIsVisible()kHDF5ListGroupSeparatorkHDF5ListAttributeSeparatorH5S_MAX_RANKH5T_ORDER_LEH5T_ORDER_BEH5T_ORDER_VAXH5T_ORDER_MIXEDH5T_ORDER_NONEH5T_SGN_NONEH5T_SGN_2H5T_INTEGERH5T_FLOATH5T_TIMEH5T_STRINGH5T_BITFIELDH5T_OPAQUEH5T_COMPOUNDH5T_REFERENCEH5T_ENUMH5T_VLENH5T_ARRAYH5S_SCALARH5S_SIMPLEH5S_NULLH5D_COMPACTH5D_CONTIGUOUSH5D_CHUNKEDH5D_VIRTUALH5T_STR_NULLTERMH5T_STR_NULLPADH5T_STR_SPACEPADH5T_CSET_ASCIIH5T_CSET_UTF8H5L_TYPE_HARDH5L_TYPE_SOFTH5L_TYPE_EXTERNALkLoadAllMembersStringkGraphButtonNamekShowGraphButtonTitlekHideGraphButtonTitlekTableButtonNamekShowTableButtonTitlekHideTableButtonTitlekDumpButtonNamekShowDumpButtonTitlekHideDumpButtonTitlekPackageNamekCurrentPrefsVersionkPrefFileNamekPrefRecordIDkCurrentRecentFilesPrefsVersionkRecentFilesPrefFileNamekRecentFilesPrefRecordIDkNoRecentFilesStrkNumRecentFileFieldskHDF5DataInfoVersionkHDF5DatatypeInfoVersionkHDF5LinkInfoStructVersionHDF5BrowserData{datasetInfo, creationOrder, readOnly, fullPath, path, fileName, fileID, hyperSelectionWavePath, groupPath, browserName, , }HDF5BrowserPrefs{reserved[100], reservedSave[14], includeIgorAttributes, saveGroupsRecursively, reservedLoad[13], loadGroupOnlyOnce, transpose2DDatasets, loadGroupsRecursively, reservedOverall[14], creationOrder, readOnly, browserBottom, browserRight, browserTop, browserLeft, savePanelBottom, savePanelRight, savePanelTop, savePanelLeft, dumpBottom, dumpRight, dumpTop, dumpLeft, tableBottom, tableRight, tableTop, tableLeft, graphBottom, graphRight, graphTop, graphLeft, prefsVersion, , }HDF5BrowserRecentFilesPrefs{recentFile9[400], recentFile8[400], recentFile7[400], recentFile6[400], recentFile5[400], recentFile4[400], recentFile3[400], recentFile2[400], recentFile1[400], recentFile0[400], reserved[100], prefsVersion, , }Menu Load WavesMenu HDF5BrowserPopupMenu(contextualmenu).E\sŠ¡žÏæý+BYp‡žµÌãú(?Vm„›²Éà÷%<Sj˜¯ÆÝô "9Pg~•¬ÃÚñ6Md{’©À×î3JaxŠœÔë0G^uŒ£ºÑèÿ-D[r‰ ·Îåü * A X o †  Ž Ë â ù  ' > U l ƒ š ± È ß ö $ ; R i € — ® Å Ü ó ) H g † ¥ Ä ã   0 G ^ u Œ £ º Ñ è ÿ -D[r‰ Ïþ,CZqˆŸ¶Íäû)@Wn…œ³Êáø&=Tk‚™°ÇÞõ #R°ß=l›Êù(W†µäBqˆŸ¶Íäû)CYm{žÄåø 6LewŠœµÐÛ#6K`wŽ£»Þó);LZiz—­»Ïêù%:KapŠ ¿Ù$>Q`w°Ãàõ,@P`x¡Äè 3Kd«È×ò !;Oh{…ŸŽÊáî,Lg}•€ÀÛñ % > [ w “ ± À Ù é ü !6!K!`!x!Œ!€!Å!æ!ø! ""4"M"d"v"Ž"Š"Ê"ñ"#7#c#‘#Ã#æ#÷# $$$4$D$^$x$Œ$€$Á$Ø$ô$.%C%]%n%‹%¥%Œ%×%ã%ï%û%&&%&1&:&E&N&V&`&l&v&‚&&—&Ÿ&š&²&Œ&Ä&Ï&Ý&è&ó&''"'0'='J'W'h'}''¢'·'Ç'Ü'ñ'((((4(H(U(b((™(±(Â(Ö(ê())§)‘+,,¹,#ÞgèŽ<ìÕñöÛ_free_ð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529Funca_0() -> varFunca_1() -> var.>N#¯¡èg4ìÕñöÛ_free_ð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529Funcb_1() -> var'#x1óÀx>◜÷Û_free_ð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W520\k(0,0,0)\K(0,0,0)\W520\k(0,0,0)\K(0,0,0)\W523IntNoise(var, var) -> varBench() -> varFindPointIndexOfString(str, wave/T, wave) -> varHM_Create() -> waveHM_AddEntry(wave, str, str) -> varHM_GetEntry(wave, str) -> strWaveRef(wave) -> waveStats() -> vardostuff() -> varTestMe() -> varROWSCOLSGraph0() : GraphGraph1_2() : GraphMenu Run Benchmark.E\sŠ¡žÏæý+BYr€°Ãå%5DHL\n€#•ÕÒåp3ìÕñöۜ_free_Nð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W522\k(47872,47872,47872)\K(47872,47872,47872)\W522\k(47872,47872,47872)\K(47872,47872,47872)\W522MakeListIntoWaveSelector(str, str, [var, var, str, str, str]) -> varWS_AddSelectableString(str, str, str) -> varWS_RemoveSelectableString(str, str, str) -> varWS_IndexedObjectPath(str, str, var) -> strWS_SelectedObjectsList(str, str) -> strWS_CountSelectedObjects(str, str) -> varWS_SelectObjectList(str, str, str, [var]) -> varWS_SelectAnObject(str, str, str, [var]) -> varWS_ClearSelection(str, str) -> varWS_UpdateWaveSelectorWidget(str, str) -> varWS_OpenAFolder(str, str, str) -> varWS_OpenAFolderFully(str, str, str) -> varWS_CloseAFolder(str, str, str) -> varWS_SetNotificationProc(str, str, str, [var]) -> varnamefiltertemplate(str, var) -> varOpenAFolder()CloseAFolder(WaveSelectorListInfo&, var) -> varWMWS_WinHook(WMWinHookStruct&) -> varIsWindowOrChild()RootWindowName()WS_HandleWindowRename()WS_ExtNotificationTemplate(str, var, str, str) -> varWS_NotificationTemplate(str, var) -> varCallNotificationProc()WS_KillListDataFolder(str, str, str) -> varWaveSelectorListProc(WMListboxAction&) -> var : ListBoxControlreturnIndentString()WS_FindAndKillWaveSelector(str, str) -> varFindFolderForWaveSelector()MakePopupIntoWaveSelectorSort(str, str, str, [str]) -> varWS_AddListToBeSorted(WaveSelectorSortInfo&, str, str) -> varWS_SortKindMenu(str, str) -> strWS_SortKindPopMenuProc(WMPopupAction&) -> var : PopupMenuControlWS_SortKindAction()WS_SetPopupSorting()WS_ReverseList()WS_SortWaveList()WS_SetGetSortOrder(str, str, var&, var&) -> varWS_SetFilterString(str, str, str) -> strWS_GetFilterString(str, str) -> strWS_SetListOptionsStr(str, str, str) -> strWS_GetListOptionsStr(str, str) -> strWS_SetNameFilterProc(str, str, str) -> strWS_SetAllowFilteringDataFolders(str, str, var) -> varWS_isRootWindow()WinIsExterior()WS_FindHookableHost()WMWS_WavesWMWS_NVarsWMWS_StringsWMWS_DataFoldersWMWS_SelectionNonContinguousWMWS_SelectionNonContiguousWMWS_SelectionContinguousWMWS_SelectionContiguousWMWS_SelectionSingleWMWS_FolderOpenedWMWS_FolderClosedWMWS_DoubleClickWMWS_SelectionChangedWMWS_SelectionChangedShiftWMWS_KilledWMWS_PopupPanelKilledWMWS_sortNoneWMWS_sortByNameWMWS_sortByCreationDateWMWS_sortByModificationDateWMWS_sortByNumberOfPointsWMWS_sortByDimensionalityWMWS_ErrorNoErrorWMWS_ErrorOptionStringTooLongMAX_OBJ_NAMEMAX_DOUBLE_NAMEWaveSelectorVersionMAX_SORT_LIST_CONTROLSWaveSelectorListInfo{allowFilterDataFolders, RootFolderRow, sortReverse, sortKind, isExtendedProc, NotificationProc[3*MAX_OBJ_NAME+3], nameFilterProcStr[3*MAX_OBJ_NAME+3], wavelistMatchStr[MAX_OBJ_NAME+1], wavelistOptions2[100], wavelistOptions1[100], SelWaveName[MAX_OBJ_NAME+1], ListWaveName[MAX_OBJ_NAME+1], folderName[MAX_OBJ_NAME+1], contents, version, , }ControlSpec{controlname[MAX_OBJ_NAME+1], windowname[MAX_DOUBLE_NAME+1], , }WaveSelectorSortInfo{ControlSpec, ControlSpec, sortReverse, sortKind, version, , }.E\sŠ¡žÏæý+BYp‡žµÌãú(?Vm„›²Éà÷%<Sj˜¯ÆÝô "9Pg~•¬ÃÚñ6Md{’©À×î3Ja¿îL{ªîIsšÂò B n ’ » à  6 C r — š ž Ï  , B m « ¿ ê  ? { › Û î   # R z  Ç ì K\k€Š” °Ìç,=N^s˜­ºÉàû->[gv‰ŸS¥#€mö@)◜÷Û_free_ð?ð?ð?ð?#€;ö@[◜÷Û_free_ð?ð?ð?ð?#€!ö@u◜÷Û_free_ð?ð?ð?ð?#€ö@€â—œ÷Û_free_ð?ð?ð?ð?#€)ö@m◜÷Û_free_ð?ð?ð?ð?#€2ö@d◜÷Û_free_ð?ð?ð?ð?#€/ö@g◜÷Û_free_ð?ð?ð?ð?#€ ö@v◜÷Û_free_ð?ð?ð?ð?#€ö@ˆâ—œ÷Û_free_ð?ð?ð?ð?#ëŒÓãÈ,ì÷öÛr_free_9ð?ð?ð?ð?\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,65280)\K(0,0,65280)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(47872,47872,47872)\K(47872,47872,47872)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534\k(0,0,0)\K(0,0,0)\W534JSON_Parse(str, [var]) -> varJSON_Dump(var, [var, var]) -> strJSON_New([var]) -> varJSON_Release(var, [var]) -> varJSON_Remove(var, str, [var]) -> varJSON_AddTreeObject(var, str, [var]) -> varJSON_AddTreeArray(var, str, [var]) -> varJSON_AddTree()JSON_GetKeys(var, str, [var, var]) -> waveJSON_GetType(var, str, [var]) -> varJSON_GetArraySize(var, str, [var]) -> varJSON_GetMaxArraySize(var, str, [var]) -> waveJSON_GetString(var, str, [var]) -> strJSON_GetVariable(var, str, [var]) -> varJSON_GetTextWave(var, str, [var]) -> waveJSON_GetWave(var, str, [var]) -> waveJSON_GetInt64(var, str, [var])JSON_GetUInt64(var, str, [var])JSON_AddString(var, str, str, [var]) -> varJSON_AddVariable(var, str, var, [var, var]) -> varJSON_AddNull(var, str, [var]) -> varJSON_AddBoolean(var, str, var, [var]) -> varJSON_AddWave(var, str, wave, [var]) -> varJSON_AddInt64(var, str, , [var]) -> varJSON_AddUInt64(var, str, , [var]) -> varAddValueI64()JSON_AddObjects(var, str, [var, var]) -> varJSON_AddJSON(var, str, var, [var]) -> varJSON_SetString(var, str, str, [var]) -> varJSON_SetVariable(var, str, var, [var, var]) -> varJSON_SetNull(var, str, [var]) -> varJSON_SetBoolean(var, str, var, [var]) -> varJSON_SetWave(var, str, wave, [var]) -> varJSON_SetInt64(var, str, , [var]) -> varJSON_SetUInt64(var, str, , [var]) -> varSetValueI64()JSON_SetObjects(var, str, [var, var]) -> varJSON_SetJSON(var, str, var, [var]) -> varJSON_ClearRTError()JSON_KVPairsToJSON()JSON_GetIgorInfo([var]) -> varJSON_Version([var]) -> strJSON_Exists(var, str) -> varJSON_DisableQuietMode() -> varJSON_EnableQuietMode() -> varJSON_SetIgnoreErrors() -> varJSON_UnsetIgnoreErrors() -> varJSON_ZFLAG_DEFAULTJSON_ZFLAG_DEFAULTJSON_QFLAG_DEFAULTJSON_QFLAG_DEFAULTJSON_OBJECTJSON_ARRAYJSON_NUMERICJSON_STRINGJSON_BOOLJSON_NULL>]|›ºÙð.Ml‹ªÉè&Edƒ¢Áàÿ5Ts’±Ðï-Dc‚™°Ïæ3Ja¿î4Kby§Äåû=gžÈìBh¹Þü F x œ È ò  A N z £ Î $ P z ¡ É Ö  + > R p Š Š Ä á þ  / A S e p z † ‘ š £ # ŸYp1ìå÷Û_free_ð?ð?ð?ð?\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W529\k(0,0,0)\K(0,0,0)\W520\k(47872,47872,47872)\K(47872,47872,47872)\W522MyExerciseRoutineProto() -> varRunFuncWithProfiling(funcref, [var, var, var]) -> varDoProfiling()StartProfiling()StopProfiling()ProfilingCalcTopFuncs()ProfilingPrintTopFuncs()ProfilingAnnotateFunc()BeginFunctionProfiling([var]) -> varEndFunctionProfiling([var, var]) -> varFuncProfStartStopProc()CleanupHook()FunctionProfilingPanel() : PanelMyProfilingStuff{profilingFuncPercent, validSamps, invalidSamps, profilingLineHitCount, testTime, tid, , }.E\sŠ¡žÏæý+Zy®»ËÚñ  Dk‚¯#€+ö@K◜÷Û _free_ð?ð?ð?ð?#€>ö@8◜÷Û _free_ð?ð?ð?ð?#üãŒ ìÕñöÛß _free_ßð?ð?ð?ð?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$ * ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3=NbmtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#$%&'+,0123456789:>?@CDEFJKLPQUVWÔ–—˜ÆÇÈö÷øó ô õ ö ö÷øùú1`kYø ü™#ˆ—èHFìÕñöÛ _free_ð?ð?ð?ð? #„ªèD9ìÕñöÛ _free_ð?ð?ð?ð?#ŒÂõ|Y◜÷Û _free_ð?ð?ð?ð?#\s|ŸµºÁÎ-#žûæxìÕñöÛN _free_Nð?ð?ð?ð?·/Jg®ÌÝ Ku›ÀÖÿÿÿÿ`xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/:ÿÿÿÿÁÿÿÿÿDdv¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)l€Š¢ªœÿÿÿÿÿÿÿÿÿÿÿÿ{|}~‚ƒ„…ˆ‰Š‹ŒŽ’“”•–—š›ž ¡€ (#€1ö@E◜÷Û _free_ð?ð?ð?ð?#€%ö@Q◜÷Û _free_ð?ð?ð?ð?#€ö@f◜÷Û _free_ð?ð?ð?ð?#€ö@b◜÷Û _free_ð?ð?ð?ð?#€ö@c◜÷Û _free_ð?ð?ð?ð?#€çõ@â—œ÷Û _free_ð?ð?ð?ð?#€ïõ@‡â—œ÷Û _free_ð?ð?ð?ð?#€ ö@j◜÷Û _free_ð?ð?ð?ð?#€ýõ@y◜÷Û _free_ð?ð?ð?ð?#d0â$)ì÷öÛ9 _free_9ð?ð?ð?ð?(AWlƒŸ°ÿÿÿÿÑò &AXo†ŽÐé<Tfÿÿÿÿˆ žÑð$<Nÿÿÿÿpˆÿÿÿÿÿÿÿÿ¹Óö  #ž;ÁxHìå÷Û _free_ð?ð?ð?ð?58ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÒÿÿÿÿÿÿÿÿ W#€fö@0◜÷Û_free_ð?ð?ð?ð?#€]ö@9◜÷Û_free_ð?ð?ð?ð?#¶ÏÙø#ìÕñöÛŸ_free_ßð?ð?ð?ð?functionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionThis action procedure is called if you open an Igor8 experiment.
It must be non-static because it is non-static in Igor8.
************* End of HDF5 Browser HDF5 Browser Recent Files Prefs Routines ***************
************* Start of HDF5 Utility Routines ***************
HR, 2020-02-03, version 2.00: HDF5MakeHyperslabWave now returns a wave reference.
If path is "", it makes a free wave.
HDF5DatasetRank(locationID, name)
Returns rank or zero in event of error.
HDF5AttributeRank(locationID, name)
Returns rank or zero in event of error.
 (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (0BTfxŠœ®ÀÈÐØàèðø (08@HPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP]jw„‘ž«žÅÒßìù -:GTan{ˆ•¢¯ŒÉÖãðý $1>KXerŒ™Š³ÀÍÚçô(5BO\ivƒª·ÄÑÞëø   , 9 F S Ü é ö    * 7 D Q ^ k x … ’ Ÿ ¬ ¹ Æ Ó à í ú   ! . ; H U b o | ‰ – £ ° œ Ê × ä ñ þ  % 2 ? L Y f s €  š A Ç Ô -ˆ•¢¯ŒÉÖãðý $1>KXerŒ™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™™#º£èj$ìÕñöÛ_free_ð?ð?ð?ð?functionfunction*#ºèU-ìÕñöÛ_free_ð?ð?ð?ð?function#ø¯ô@x@◜÷Û_free_ð?ð?ð?ð?functionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionExecute/Q "Graph0()"
Execute/Q "Graph1_2()"
 (08@HPPPPPP]˜¥²¿ÌÙæó#TÛ€ p0ìÕñöۜ_free_Nð?ð?ð?ð?functionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionprivate functionsstatic Function GetIndexedWaveListFromUD(index, rootWindowName, outWindowName, outListName)
Variable index
String rootWindowName, &outWindowName, &outListName

String thelist = GetUserData(rootWindowName, "", "WaveWidgetList")
if (index >= ItemsInList(thelist))
return -1
endif
outWindowName = StringByKey("WindowName", stringfromlist(index, thelist), "=", ",")
outListName = StringByKey("ListName", stringfromlist(index, thelist), "=", ",")

return index
end
MakePopupIntoWaveSelectorSort can be called up to 8 times for the same PopupMenu control,
allowing it to control the sorting of up to 8 lists in any window.

Each list must already be a WaveSelector.

Each list's sorting order will be controlled by the one PopupMenu.
For example:
MakePopupIntoWaveSelectorSort("Panel0", "list0InPanel0", "sortPopupInPanel0")
MakePopupIntoWaveSelectorSort("Panel0", "list1InPanel0", "sortPopupInPanel0")
MakePopupIntoWaveSelectorSort("Panel0", "list2InPanel0", "sortPopupInPanel0")
makes the sortPopupInPanel0 control the sorting of three lists.

Note that the popup and list controls in the above code are all in the Panel0 window.

You can put the popup and list controls in completely different windows/subwindows like this:
MakePopupIntoWaveSelectorSort("Panel0#P0", "list0InPanel0P0", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
MakePopupIntoWaveSelectorSort("Panel0#P1", "list0InPanel0P1", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
MakePopupIntoWaveSelectorSort("Panel0#P2", "list0InPanel0P2", "sortPopupInPanel0", popupcontrolwindow= "Panel0")
 (08@HPX`hpx€ˆ˜ š°žÀÈÐØàèðø (08@HPX`hpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…’Ÿ¬¹ÆÓàíú!.LYfs€š§ŽÁÎÛèåò‡ ” ¡ ® » È Õ â ï ü  # 0 = J W d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d #€Hö@N◜÷Û_free_ð?ð?ð?ð?#€ö@„â—œ÷Û_free_ð?ð?ð?ð?#€5ö@a◜÷Û_free_ð?ð?ð?ð?#€ ö@Œâ—œ÷Û_free_ð?ð?ð?ð?#€ö@Žâ—œ÷Û_free_ð?ð?ð?ð?#€ö@…â—œ÷Û_free_ð?ð?ð?ð?#€(ö@n◜÷Û_free_ð?ð?ð?ð?#€ö@x◜÷Û_free_ð?ð?ð?ð?#€ ö@‰â—œ÷Û_free_ð?ð?ð?ð?#F"ž DÈoì÷öÛr_free_9ð?ð?ð?ð?functionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionthreadsafefunctionfunctionthreadsafefunctionthreadsafefunctionfunctionfunctionthreadsafefunctionfunctionthreadsafefunctionfunctionfunctionfunction@}
@addtogroup JSONXOP_Parse
@{
@brief Parse a JSON string with the XOP

@param jsonStr string representation of the JSON object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric identifier of the JSON object on success
@}
@addtogroup JSONXOP_Dump
@{
@brief Dump a JSON id to its string representation

@param jsonID numeric identifier of the main object
@param indent [optional, default 0] number of white spaces for pretty output indentation.
Use -1 for compact output.
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a string representation of the JSON object
@}
@addtogroup JSONXOP_New
@{
@brief register a new object

@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric identifier of the JSON object on success
@}
@addtogroup JSONXOP_Release
@{
@brief Release a JSON id from memory

@param jsonID numeric identifier of the main object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success, NaN otherwise
@}
@addtogroup JSONXOP_Remove
@{
@brief Remove a path element from a JSON string representation

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success, NaN otherwise
@}
@addtogroup JSONXOP_AddTree
@{
@brief Recursively add new objects to the tree

Non-existing path elements are recursively created.
@see JSON_AddTreeArray JSON_OBJECT

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns 0 on success
@brief Recursively add a new array to the tree.

Non-existing path elements are created as objects.
@see JSON_AddTreeObject JSON_ARRAY

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_GetKeys
@{
@brief Get the name of all object members of the specified path

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@param esc [optional, 0 or 1] set to ignore RFC 6901 path escaping standards
@returns a free text wave with all elements as rows.
@}
@}
@addtogroup JSONXOP_GetType
@{
@brief get the JSON Type for an element at the given path.

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric value representing one of the defined @see JSON_TYPES
@}
@addtogroup JSONXOP_GetArraySize
@{
@brief Get the number of elements in an array.

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric variable with the number of elements the array at jsonPath
@}
@addtogroup JSONXOP_GetMaxArraySize
@{
@brief Get the maximum element size for each dimension in an array

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free numeric wave with the size for each dimension as rows
@}
@addtogroup JSONXOP_GetValue
@{
@brief Get a text entity as string variable from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a string containing the entity
@brief Get a numeric, boolean or null entity as variable from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a numeric variable containing the entity
@brief Get an array as text wave from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free text wave with the elements of the array
@brief Get an array as numeric wave from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a free numeric double precision wave with the elements of the array
@brief Get a 64bit integer from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns a 64bit variable
@brief Get an unsigned 64bit integer from a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@returns an unsigned 64bit variable
@}
@addtogroup JSONXOP_AddValue
@{
@brief Add a string entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value string value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a numeric entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value numeric value to add
@param significance [optional] number of digits after the decimal sign
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a `null` entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a numeric value as boolean to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value boolean value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a WAVE as array entity to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param wv WAVE reference to the wave to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a 64bit integer to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value int64 value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add an unsigned 64bit integer to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value uint64 value to add
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Add a specified number of objects to a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param objCount [optional, default 1] number of objects
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Merge a JSON object to another object

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param jsonID2 numeric identifier of the merged object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a string entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new string value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a numeric entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new numeric value
@param significance [optional] number of digits after the decimal sign
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a `null` entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a boolean value at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new boolean value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a WAVE as array entity at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param wv WAVE reference to the new wave
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a 64bit integer at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new int64 value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with an unsigned 64bit integer at the given location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param value new uint64 value
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace with a specified number of objects at the giveln location in a JSON object

@param jsonID numeric identifier of the JSON object
@param jsonPath RFC 6901 compliant JSON Pointer
@param objCount [optional, default 1] number of objects
@param ignoreErr [optional, default 0] set to ignore runtime errors
@brief Replace an entity with the given JSON object at the specified location in the main object

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@param jsonID2 numeric identifier of the merged object
@param ignoreErr [optional, default 0] set to ignore runtime errors
@addtogroup JSON_GetIgorInfo
@{
@brief Return JSON with Igor information

@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_Version
@{
@brief Output version information useful for issue reports

@param ignoreErr [optional, default 0] set to ignore runtime errors
@}
@addtogroup JSONXOP_Exists
@{
@brief Check if the jsonID/jsonPath is valid

@param jsonID numeric identifier of the main object
@param jsonPath RFC 6901 compliant JSON Pointer
@returns 1 if object at jsonPath exists in JSON object, 0 otherwise
@}
@addtogroup JSONXOP_Options
@{
@brief Disables quiet mode
@brief Enables quiet mode@brief Sets the ignore errors define for the json wrapper functions@brief Undefines the ignore errors define for the json wrapper functions$6HZl~†˜ªŒÎàò(:L^p‚”ŠžÀÒäö,>Pbj|Ž–ž°žÊÒÚâêêêêêêêêêêêf‰€ Ê à –£çÓ·ªt±^ÏT "$G%Ö&n(ð)}+Š+/-Ç.f0t2×3w5+7É8r::D<>>*>?ó?gAÕA BgBÊBÊBÊBÊBÊBÊBÊBÊBÊBÊBÊB#@²Ž pZìå÷Û_free_ð?ð?ð?ð?functionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionfunctionTo find where your code is spending the most time, create a function that takes no
paremeters and exercises your code for at least a second. Then call it via
RunFuncWithProfiling(yourFuncHere)
Or, if your test will take longer than 100 seconds, use
RunFuncWithProfiling(yourFuncHere,testTime=yourTimeEstimate)

The top functions will be printed into a notebook named "ProfilingResults"
The left hand side will be annotated with percentages and a bar.
The results will look best in a monospaced font.
By default, the bar length will be relative to the total hit count. You can make it relative
to the line with the maximum hit count by including the optional variable normMode=1 like so:
RunFuncWithProfiling(yourFuncHere,normMode=1)
By default, results are printed until the total exceeds 80%. You can change that by providing
the optional variable maxPct like so:
RunFuncWithProfiling(yourFuncHere,maxPct=90)

Your test function may call functions that are ThreadSafe and those that reside in an independent module
but only functions in the main thread are profiled.

If you have code that is inconvenient or difficult to wrap into a function that can
be passed to RunFuncWithProfiling, you can use the function pair:
BeginFunctionProfiling([testTime])
EndFunctionProfiling([normMode,maxPct])
You can create a simple panel with a button that calls these functions by executing:
FunctionProfilingPanel()
Don't forget to stop profiling.

The profiling code relies on two built-in functions that were added in Igor PRo 6.23. They are:

A numeric function:
GetRTLocation(sleepMs)
sleepMs is the number of milliseconds to sleep the current thread after fetching a value.
Gets a code that defines the current location in the source that was executing at the time this was called.
Use in a preemptive thread to sample a running routine for performance profiling.
The result (stored in a double) can be passed to GetRTLocInfo to determine the location in the procedures.
Note that this samples the main thread only and the locations will become meaningless after any procedure editing.

And a string fucnction:
GetRTLocInfo(code)
code is the result from a (very recent) GetRTLocation
Returns Key-value string: "PROCNAME:name;LINE:line;FUNCNAME:name;" or, a zero length string if the location could not be found.
line number is padded with zeros to enable sorting

Created LH111202
JP, Igor 7.03 - updated to work with independent modules, uses new IMNAME:independentModuleName; output from GetRTLocInfo()
Igor 9.00 - stop profiling on panel close and scroll to the top in the result notebook
*********** background versions ***********


You can create a simple panel with a button that calls these functions by executing:
FunctionProfilingPanel()
 (08@HPX``` $ 1 > K X e r ) 6 C P P P *t»// Platform=WindowsNT, IGORVersion=9.000, architecture=Intel, systemTextEncoding="Windows-1252", historyTextEncoding="UTF-8", procwinTextEncoding="UTF-8", recreationTextEncoding="UTF-8", build=36731 #pragma TextEncoding = "UTF-8" Silent 101 // use | as bitwise or -- not comment. if (IgorVersion() < 8.00) *** This experiment requires Igor Pro 8.00 or later because it has waves with long dimension labels *** endif DefaultFont "Arial" Execute/P/Q/Z SelectString(NumberByKey("IGORVERS", IgorInfo(0)) >= 5, "", "COMPILEPROCEDURES ") Execute/Q/Z SelectString(NumberByKey("IGORVERS", IgorInfo(0)) >= 5, "", "SetIgorHook AfterCompiledHook=ProcGlobal#CodeBrowserModule#updatePanel") Graph1_1() Graph1_3() Graph1_4() Graph1_5() Graph1_6() Graph1_8() Graph1_9() Graph1_10() Graph1_11() Graph1_12() Graph1_13() Graph1_14() Graph1_15() Graph1_16() Graph1_17() Graph1_19() Graph2() Graph1_2() MoveWindow/C 11.25,155,899.25,657.5 MoveWindow/P 18,322.25,854.25,1363.25 graph1_7() FunctionProfilingPanel() KillStrings/Z root:gWMSetNextTextFilesTextEncoding Window FunctionProfilingPanel() : Panel PauseUpdate; Silent 1 // building window... NewPanel /FLT=1 /K=1 /W=(52,65,292,193) Button bStart,pos={61.00,50.00},size={112.00,28.00},proc=FuncProfilingModule#FuncProfStartStopProc Button bStart,title="Start Profiling" SetWindow kwTopWin,hook(cleanup)=FuncProfilingModule#CleanupHook SetActiveSubwindow _endfloat_ EndMacro Window graph1_7() : Graph PauseUpdate; Silent 1 // building window... Display /W=(930.75,738.5,1701,1222.25) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHashAL][%Reading][*]/TN=TextWaveHashReadingAL,resultWave[%TextWaveHashTB][%Reading][*]/TN=TextWaveHashReadingTB AppendToGraph resultWave[%JSON][%Writing][*]/TN=JsonWriting,resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting AppendToGraph resultWave[%textwave][%Writing][*]/TN=TextWaveWriting,resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting AppendToGraph resultWave[%wave][%Writing][*]/TN=WaveWriting,resultWave[%TextWaveHashAL][%Writing][*]/TN=TextWaveHashWritingAL AppendToGraph resultWave[%TextWaveHashTB][%Writing][*]/TN=TextWaveHashWritingTB ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReadingAL)=19 ModifyGraph marker(TextWaveHashReadingTB)=19,marker(JsonWriting)=16,marker(DimLabelWriting)=16 ModifyGraph marker(TextWaveWriting)=16,marker(StringByKeyWriting)=16,marker(WaveWriting)=16 ModifyGraph marker(TextWaveHashWritingAL)=16,marker(TextWaveHashWritingTB)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(TextWaveHashReadingTB)=(65535,0,52428),rgb(JsonWriting)=(0,0,0) ModifyGraph rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph rgb(TextWaveHashWritingTB)=(65535,0,52428) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHashAL\\X0 \\s(TextWaveHashReadingAL) Read \\s(TextWaveHashWritingAL) Write" AppendText "TextWaveHashTB\\X0 \\s(TextWaveHashReadingTB) Read \\s(TextWaveHashWritingTB) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_2() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHashAL][%Reading][*]/TN=TextWaveHashReadingAL,resultWave[%TextWaveHashTB][%Reading][*]/TN=TextWaveHashReadingTB AppendToGraph resultWave[%JSON][%Writing][*]/TN=JsonWriting,resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting AppendToGraph resultWave[%textwave][%Writing][*]/TN=TextWaveWriting,resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting AppendToGraph resultWave[%wave][%Writing][*]/TN=WaveWriting,resultWave[%TextWaveHashAL][%Writing][*]/TN=TextWaveHashWritingAL AppendToGraph resultWave[%TextWaveHashTB][%Writing][*]/TN=TextWaveHashWritingTB ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(JsonWriting)=16 ModifyGraph marker(DimLabelWriting)=16,marker(TextWaveWriting)=16,marker(StringByKeyWriting)=16 ModifyGraph marker(WaveWriting)=16 EndMacro Window Graph2() : Graph PauseUpdate; Silent 1 // building window... Display /W=(86.25,193.25,620.25,608.75) usedRows EndMacro Window Graph1_19() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_17() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_16() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_15() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_14() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_13() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_12() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_11() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_10() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_9() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_8() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_6() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_5() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_4() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_3() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Window Graph1_1() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHash][%Reading][*]/TN=TextWaveHashReading,resultWave[%JSON][%Writing][*]/TN=JsonWriting AppendToGraph resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting,resultWave[%textwave][%Writing][*]/TN=TextWaveWriting AppendToGraph resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting,resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHash][%Writing][*]/TN=TextWaveHashWriting ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(TextWaveHashReading)=19 ModifyGraph marker(JsonWriting)=16,marker(DimLabelWriting)=16,marker(TextWaveWriting)=16 ModifyGraph marker(StringByKeyWriting)=16,marker(WaveWriting)=16,marker(TextWaveHashWriting)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText "TextWaveHash\\X0 \\s(TextWaveHashReading) Read \\s(TextWaveHashWriting) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro s>#pragma TextEncoding = "UTF-8" #pragma rtGlobals=3 // Use modern global access method and strict wave access. #pragma rtFunctionErrors=1 #include "json_functions" #include // Key Value Store benchmark // // requires free JSON XOP from https://docs.byte-physics.de/json-xop/ #define JSON_TEST //#define STRING_BY_KEY_TEST //#define DIM_LABELS_TEST //#define WAVE_TEST //#define TEXT_WAVE_TEST //#define TEXT_WAVE_HASH_MAP_TEST_AL #define TEXT_WAVE_HASH_MAP_TEST_TB constant ROWS = 0 constant COLS = 1 Menu "Run Benchmark" "Start Benchmark", /Q, Bench() End Function IntNoise(from, to) Variable from, to Variable amp = to - from return floor(from + mod(abs(enoise(100 * amp)), amp + 1)) End Function Bench() variable NUM_RUNS_READ = 100 variable NUM_RUNS_WRITE = 100 variable numExponentials = 6 variable expStep = 10 variable size variable ref, i, j, idx, jsonID, e, elapsed string output, name, str, result variable numRunsWrite Make/O/D/N=(7, 2, numExponentials * expStep) resultWave resultWave = NaN SetScale/P z, 0, 1 / expStep, "", resultWave SetDimLabel 0, 0, JSON, resultWave SetDimLabel 0, 1, Textwave, resultWave SetDimLabel 0, 2, StringByKey, resultWave SetDimLabel 0, 3, DimLabel, resultWave SetDimLabel 0, 4, Wave, resultWave SetDimLabel 0, 5, TextWaveHashAL, resultWave SetDimLabel 0, 6, TextWaveHashTB, resultWave SetDimLabel 1, 0, Reading, resultWave SetDimLabel 1, 1, Writing, resultWave // Execute/Q "Graph0()" // Execute/Q "Graph1_2()" // name is the key and num2str(index) is the value for(e = 0; e < numExponentials * expStep; e += 1) size = trunc(10^(e / expStep)) if(e > 25) NUM_RUNS_READ = 10 NUM_RUNS_WRITE = 10 endif if(e > 40) NUM_RUNS_READ = 100 NUM_RUNS_WRITE = 100 endif if(size < NUM_RUNS_WRITE) numRunsWrite = NUM_RUNS_WRITE else numRunsWrite = 1 endif SetRandomSeed 1 Make/N=(NUM_RUNS_READ)/O indizes = IntNoise(0, size - 1) #ifdef JSON_TEST jsonID = JSON_New() ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) JSON_SetString(jsonID, "/" + name, num2str(j)) endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%JSON][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) output = JSON_GetString(jsonID, "/" + name) endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%JSON][%Reading][e] = elapsed JSON_Release(jsonID) #endif // JSON_TEST #ifdef TEXT_WAVE_TEST Make/FREE/T/N=(size) tw ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) tw[j] = name endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%TextWave][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) //FindValue/TEXT=(name)/TXOP=4/UOFV tw FindValue/TEXT=(name)/TXOP=4 tw output = num2str(V_Value) endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%TextWave][%Reading][e] = elapsed #endif // TEXT_WAVE_TEST #ifdef TEXT_WAVE_HASH_MAP_TEST_AL Make/FREE/T/N=(size) tw Make/FREE/I/U/N=(size) twHash // crc32 values are unsigned 32-bit integers ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) tw[j] = name twHash[j] = StringCrC(0, name) endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%TextWaveHashAL][%Writing][e] = elapsed Variable outputIndex ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) outputIndex = FindPointIndexOfString(name, tw, twHash) output = tw[outputIndex] endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%TextWaveHashAL][%Reading][e] = elapsed #endif // TEXT_WAVE_HASH_MAP_TEST_AL #ifdef TEXT_WAVE_HASH_MAP_TEST_TB WAVE indizesHM = HM_Create() ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) HM_AddEntry(indizesHM, name, num2str(j)) endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%TextWaveHashTB][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) output = HM_GetEntry(indizesHM, name) endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%TextWaveHashTB][%Reading][e] = elapsed #endif // TEXT_WAVE_HASH_MAP_TEST_TB #ifdef STRING_BY_KEY_TEST ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) str = PadString("", size * 20, 0) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) str += name + ":" + num2str(j) + ";" endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%StringByKey][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) result = StringbyKey(name, str) endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%StringByKey][%Reading][e] = elapsed #endif // STRING_BY_KEY_TEST #ifdef DIM_LABELS_TEST Make/n=(size)/FREE/T dimlabels ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) for(j = 0; j < size; j += 1) name = "abcd" + num2str(j) SetdimLabel ROWS, j, $name, dimlabels dimlabels[j] = num2str(j) endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%DimLabel][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2str(indizes[i]) result = dimlabels[%$name] endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%DimLabel][%Reading][e] = elapsed #endif // DIM_LABELS_TEST #ifdef WAVE_TEST ref = stopmSTimer(-2) for(i = 0; i < numRunsWrite; i += 1) DFREF dfr = NewFreeDataFolder() for(j = 0; j < size; j += 1) name = "abcd" + num2istr(j) Make/T/N=1 dfr:$name/WAVE=wv wv[0] = num2istr(j) endfor endfor elapsed = (stopmSTimer(-2) - ref)/1e6/numRunsWrite/size resultWave[%Wave][%Writing][e] = elapsed ref = stopmSTimer(-2) for(i = 0; i < NUM_RUNS_READ; i += 1) name = "abcd" + num2istr(indizes[i]) WAVE/SDFR=dfr/T wv = $name result = wv[0] endfor elapsed = (stopmSTimer(-2) - ref)/1e6/NUM_RUNS_READ resultWave[%Wave][%Reading][e] = elapsed #endif // WAVE_TEST DoUpdate endfor Duplicate/O resultWave, resultWaveSummed resultWaveSummed[][0][] = resultWaveSummed[p][0][r] + resultWaveSummed[p][1][r] Redimension/N=(-1, 1, -1) resultWaveSummed End Window Graph0() : Graph PauseUpdate; Silent 1 // building window... Display /W=(255,60.5,1026,544.25) resultWaveSummed[%JSON][0][*]/TN=JSON,resultWaveSummed[%DimLabel][0][*]/TN=DimLabel AppendToGraph resultWaveSummed[%StringByKey][0][*]/TN=StringByKey,resultWaveSummed[%TExtwave][0][*]/TN=TextWave AppendToGraph resultWaveSummed[%wave][0][*]/TN=Wave AppendToGraph resultWaveSummed[%TextWaveHash][0][*]/TN=TextWaveHash ModifyGraph mode=4 ModifyGraph marker=55 ModifyGraph lSize=1.5 ModifyGraph rgb(JSON)=(0,0,0),rgb(DimLabel)=(39321,1,31457),rgb(StringByKey)=(65535,32764,16385) ModifyGraph rgb(TextWave)=(2,39321,1),rgb(Wave)=(0,0,65535) ModifyGraph msize=2 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-37.94/Y=39.69 "\\Z18\\Zr075Dimension Label\\[0 \\s(DimLabel)\rJSON\\X0 \\s(JSON)\rTextWave\\X0 \\s(TextWave) " AppendText "\nStringByKey\\X0 \\s(StringByKey) \rWave\\X0 \\s(Wave) " AppendText "\nTextWaveHash\\X0 \\s(TextWaveHash) " TextBox/C/N=text1/A=MC/X=3.63/Y=47.01 "\\Z18Combined time of one write and read operation" EndMacro Window Graph1_2() : Graph PauseUpdate; Silent 1 // building window... Display /W=(70.5,601.25,840.75,1085) resultWave[%JSON][%Reading][*]/TN=JsonReading AppendToGraph resultWave[%dimlabel][%Reading][*]/TN=DimLabelReading,resultWave[%textwave][%Reading][*]/TN=TextWaveReading AppendToGraph resultWave[%stringByKey][%Reading][*]/TN=StringByKeyReading,resultWave[%wave][%Reading][*]/TN=WaveReading AppendToGraph resultWave[%TextWaveHashAL][%Reading][*]/TN=TextWaveHashReadingAL AppendToGraph resultWave[%TextWaveHashTB][%Reading][*]/TN=TextWaveHashReadingTB AppendToGraph resultWave[%JSON][%Writing][*]/TN=JsonWriting,resultWave[%dimlabel][%Writing][*]/TN=DimLabelWriting AppendToGraph resultWave[%textwave][%Writing][*]/TN=TextWaveWriting,resultWave[%stringByKey][%Writing][*]/TN=StringByKeyWriting AppendToGraph resultWave[%wave][%Writing][*]/TN=WaveWriting AppendToGraph resultWave[%TextWaveHashAL][%Writing][*]/TN=TextWaveHashWritingAL AppendToGraph resultWave[%TextWaveHashTB][%Writing][*]/TN=TextWaveHashWritingTB ModifyGraph mode=4 ModifyGraph marker(JsonReading)=19,marker(DimLabelReading)=19,marker(TextWaveReading)=19 ModifyGraph marker(StringByKeyReading)=19,marker(WaveReading)=19,marker(JsonWriting)=16 ModifyGraph marker(DimLabelWriting)=16,marker(TextWaveWriting)=16,marker(StringByKeyWriting)=16 ModifyGraph marker(WaveWriting)=16 ModifyGraph marker(TextWaveHashReadingAL)=19 ModifyGraph marker(TextWaveHashWritingAL)=16 ModifyGraph marker(TextWaveHashReadingTB)=19 ModifyGraph marker(TextWaveHashWritingTB)=16 ModifyGraph lSize=1.5 ModifyGraph rgb(JsonReading)=(0,0,0),rgb(DimLabelReading)=(39321,1,31457),rgb(TextWaveReading)=(2,39321,1) ModifyGraph rgb(StringByKeyReading)=(65535,32764,16385),rgb(WaveReading)=(0,0,65535) ModifyGraph rgb(JsonWriting)=(0,0,0),rgb(DimLabelWriting)=(39321,1,31457),rgb(TextWaveWriting)=(2,39321,1) ModifyGraph rgb(StringByKeyWriting)=(65535,32764,16385),rgb(WaveWriting)=(0,0,65535) ModifyGraph rgb(TextWaveHashReadingTB)=(65535,0,52428) ModifyGraph rgb(TextWaveHashWritingTB)=(65535,0,52428) ModifyGraph msize=2 ModifyGraph mrkThick=1 ModifyGraph grid(left)=1 ModifyGraph log(left)=1 ModifyGraph minor(bottom)=1 ModifyGraph fSize=18 ModifyGraph lblMargin(left)=10 ModifyGraph lblLatPos(left)=3 Label left "\\Z18Execution time in [s]" Label bottom "\\Z18data size, 10\\Sx\\M elements" Legend/C/N=text0/J/A=MC/X=-30.58/Y=40.81 "\\Z18\\Zr075\rDimension Label\\[0 \\s(DimLabelReading) Read \\s(DimLabelWriting) Write" AppendText "JSON\\X0 \\s(JsonReading) Read \\s(JsonWriting) Write\nTextwave\\X0 \\s(TextWaveReading) Read \\s(TextWaveWriting) Write" AppendText "\nStringByKey\\X0 \\s(StringByKeyReading) Read \\s(StringByKeyWriting) Write\r\nWave\\X0 \\s(WaveReading) Read \\s(WaveWriting) Write" AppendText/N=text0 "TextWaveHashAL\\X0 \\s(TextWaveHashReadingAL) Read \\s(TextWaveHashWritingAL) Write" AppendText/N=text0 "TextWaveHashTB\\X0 \\s(TextWaveHashReadingTB) Read \\s(TextWaveHashWritingTB) Write" TextBox/C/N=text1/A=MC/X=-9.64/Y=147.84 "Time of one read/write operation" TextBox/C/N=text2/A=MC/X=11.55/Y=47.79 "\\Z18Time of one read/write operation" EndMacro Function FindPointIndexOfString(String inputStr, WAVE/T textWave, WAVE hashTableWave) int inputStrCRC = StringCRC(0, inputStr) Variable pointIndex = -1 Variable currentStartingIndex = 0 do FindValue/U=(inputStrCRC)/S=(currentStartingIndex) hashTableWave // Slower but provides the right answer //FindValue/U=(inputStrCRC)/UOFV hashTableWave // Not for use if avoiding collissions is a must! if (V_Value < 0) return V_Value // Didn't find inputStr in textWave elseif (CmpStr(textWave[V_Value], inputStr, 2)!=0) // Check for the unusual but possible case where the crc32 of inputStr // matches in hashTableWave but the actual unhashed text // strings do not match. currentStartingIndex = V_Value + 1 else return V_Value endif while (1) // Should never get here End Function/WAVE HM_Create() Make/FREE/WAVE/N=(2^16, 3) indizesHM indizesHM[][0] = NewFreeWave(0x60, 1) return indizesHM End Function HM_AddEntry(WAVE/WAVE indizes, string key, string value) variable idx, numCols, nextFreeRow, i idx = StringCRC(0, key) & 0xFFFF WAVE usedRows = indizes[idx][0] nextFreeRow = usedRows[0] if(nextFreeRow > 0) WAVE/T keys = indizes[idx][1] WAVE/T values = indizes[idx][2] // Much faster than FindValue for(i = 0; i < nextFreeRow; i += 1) if(!cmpstr(keys[i], key)) values[i] = value return NaN endif endfor if(nextFreeRow == DimSize(keys, ROWS)) Redimension/N=(DimSize(keys, ROWS) * 2) keys, values endif else Make/FREE/N=(16)/T keys, values indizes[idx][1] = keys indizes[idx][2] = values endif keys[nextFreeRow] = key values[nextFreeRow] = value usedRows[0] = nextFreeRow + 1 End Function/S HM_GetEntry(WAVE/WAVE indizes, string key) variable idx, nextFreeRow, i idx = StringCRC(0, key) & 0xFFFF WAVE usedRows = indizes[idx][0] WAVE/T keys = indizes[idx][1] WAVE/T values = indizes[idx][2] nextFreeRow = usedRows[0] // Much faster than FindValue for(i = 0; i < nextFreeRow; i += 1) if(!cmpstr(keys[i], key)) return values[i] endif endfor print "BUG" End Function/WAVE WaveRef(WAVE/WAVE wv) return wv ENd Function Stats() WAVE/WAVE indizesHM Make/O/N=(2^16) usedRows = WaveRef(indizesHM[p][0])[0] End Function dostuff() variable i, ref, crc ref = stopmstimer(-2) for(i = 0; i < 1e6; i += 1) crc = stringcrc(0, "abcd") endfor print/D (stopmstimer(-2) - ref)/1e6/1e6 End Function TestMe() WAVE indizes = HM_Create() HM_AddEntry(indizes, "abcd8883", "value") print HM_GetEntry(indizes, "abcd8883") End // //Function HM_AddEntry(WAVE indizes, string key, string value) // // variable idx, numRows // // idx = StringCRC(0, key) & 0xFFFF // // WAVE/WAVE indizesWave = indizes // WAVE/T keys = indizesWave[idx][0] // WAVE/T values = indizesWave[idx][1] // // numRows = DimSize(keys, ROWS) // Redimension/N=(numRows + 1) keys, values // keys[numRows] = key // values[numRows] = values //End // //Function/S HM_GetEntry(WAVE indizes, string key) // // variable idx // // idx = StringCRC(0, key) & 0xFFFF // // WAVE/WAVE indizesWave = indizes // WAVE/T keys = indizesWave[idx][0] // WAVE/T values = indizesWave[idx][1] // // FindValue/TXOP=4/TEXT=(key) keys // // return values[V_Value] //End // // //Function/WAVE HM_Create() // // Make/FREE/WAVE/N=(2^16) indizesHM = NewFreeWave(0, 2) // // return indizesHM //End // //Function HM_AddEntry(WAVE/WAVE indizes, string key, string value) // // variable idx, numCols // // idx = StringCRC(0, key) & 0xFFFF // // WAVE/T keysAndValues = indizes[idx] // // FindValue/TXOP=4/TEXT=(key)/RMD=[0][] keysAndValues // // if(V_Value >= 0) // keysAndValues[0][V_col] = key // keysAndValues[1][V_col] = value // return NaN // endif // // numCols = DimSize(keysAndValues, COLS) // Redimension/N=(-1, numCols + 1) keysAndValues // // keysAndValues[0][numCols] = key // keysAndValues[1][numCols] = value //End // //Function/S HM_GetEntry(WAVE/WAVE indizes, string key) // // variable idx // // idx = StringCRC(0, key) & 0xFFFF // WAVE/T keysAndValues = indizes[idx] // // FindValue/TXOP=4/TEXT=(key)/RMD=[0][] keysAndValues // // return keysAndValues[1][V_col] //End