diff --git a/uppsrc/ScatterCtrl/Properties.cpp b/uppsrc/ScatterCtrl/Properties.cpp index e760110b1..45c559195 100644 --- a/uppsrc/ScatterCtrl/Properties.cpp +++ b/uppsrc/ScatterCtrl/Properties.cpp @@ -389,12 +389,24 @@ DataDlg::DataDlg(ScatterCtrl& scatter) Value DataDlg::DataSourceX::Format(const Value& q) const { - return pscatter->GetValueX(index, q); + Value ret = pscatter->GetStringX(index, q); + if (ret.Is()) { + String sret = ret; + sret.Replace("\n", " "); + return sret; + } + return ret; } Value DataDlg::DataSourceY::Format(const Value& q) const { - return pscatter->GetValueY(index, q); + Value ret = pscatter->GetStringY(index, q); + if (ret.Is()) { + String sret = ret; + sret.Replace("\n", " "); + return sret; + } + return ret; } void DataDlg::OnTab() @@ -438,7 +450,6 @@ void DataDlg::OnTab() } } } - data.WhenBar = THISBACK(OnArrayBar); } @@ -613,7 +624,13 @@ ProcessingTab::ProcessingTab() tabFreq.opXAxis.WhenAction = THISBACK(OnFFT); tabFreq.type.WhenAction = THISBACK(OnFFT); tabFreq.type = 0; - tabFreq.setWindow.WhenAction = THISBACK(OnFFT); + + for (int i = 0; i < DataSource::GetFFTWindowCount(); ++i) + tabFreq.window.Add(InitCaps(DataSource::GetFFTWindowStr(i))); + tabFreq.window.SetIndex(0); + tabFreq.window.WhenAction = THISBACK(OnFFT); + tabFreq.num <<= 1; + tabFreq.overlapping <<= 0.1; tabFit.opSeries = true; tabFit.opSeries.WhenAction = THISBACK(OnOp); @@ -628,6 +645,7 @@ ProcessingTab::ProcessingTab() tabFit.opMin.WhenAction = THISBACK(OnOp); tabFit.opMovAvg.WhenAction = THISBACK(OnOp); tabFit.opSecAvg.WhenAction = THISBACK(OnOp); + tabFit.butAutoSensSector.WhenAction = THISBACK(OnAutoSensSector); tabFit.width.WhenLostFocus = THISBACK(OnUpdateSensitivity); tabFit.width.WhenAction = THISBACK(OnUpdateSensitivity); @@ -732,13 +750,40 @@ void ProcessingTab::OnOp() tabFit.scatter.ScatterDraw::Show(7, tabFit.opSpline); tabFit.scatter.ScatterDraw::Show(8, tabFit.opMax); tabFit.scatter.ScatterDraw::Show(9, tabFit.opMin); - tabFit.scatter.ScatterDraw::Show(10, tabFit.opMovAvg); - tabFit.scatter.ScatterDraw::Show(11, tabFit.opSecAvg); + tabFit.scatter.ScatterDraw::Show(10,tabFit.opMovAvg); + tabFit.scatter.ScatterDraw::Show(11,tabFit.opSecAvg); UpdateEquations(); OnShowEquation(); } + +void ProcessingTab::OnAutoSensSector() +{ + DataSource &data = tabFit.scatter.GetSeries(0); + Vector secAvg; + double baseWidth; + + baseWidth = 0; + for (int64 i = 1; i < data.GetCount(); ++i) + baseWidth += (data.x(i) - data.x(i-1)); + baseWidth /= (data.GetCount() - 1); + + double rangeX = data.x(data.GetCount() - 1) - data.x(int64(0)); + + for(double width = baseWidth; width < rangeX/10.; width += baseWidth) { + secAvg = data.SectorAverageY(width); + VectorPointf sector(secAvg); + Vector ids; + sector.MaxListY(ids, 10*baseWidth); + if (ids.GetCount() < 5) { + tabFit.width <<= width; + return; + } + } + tabFit.scatter.Refresh(); +} + void ProcessingTab::OnOperation() { if (exclamationOpened) // To avoid WhenLostFocus to be called when Exclamation() is opened @@ -797,6 +842,9 @@ void ProcessingTab::UpdateField(const String _name, int _id) val = data.MaxY(idmx); if (!IsNull(val)) tabFit.eMax = Format("(%f,%f)", data.x(idmx), val); + Pointf p = data.MaxSubDataImpY(idmx, 3); + if (!IsNull(p)) + tabFit.eMaxImp = Format("(%f,%f)", p.x, p.y); val = data.MinY(idmx); if (!IsNull(val)) tabFit.eMin = Format("(%f,%f)", data.x(idmx), val); @@ -1002,7 +1050,7 @@ void ProcessingTab::OnFFT() PointfLess less; Sort(orderedSeries, less); - resampledSeries.Clear(); + Vector resampledSeries; resampledSeries << orderedSeries[0].y; double nextSample = orderedSeries[0].x + samplingTime; for (int i = 0; i < orderedSeries.GetCount() - 1;) { @@ -1020,9 +1068,27 @@ void ProcessingTab::OnFFT() resampledSeries << orderedSeries[orderedSeries.GetCount() - 1].y; VectorY series(resampledSeries, 0, samplingTime); - fft = series.FFTY(samplingTime, tabFreq.opXAxis == 1, tabFreq.type, tabFreq.setWindow); + fft = series.FFTY(samplingTime, tabFreq.opXAxis == 1, tabFreq.type, + tabFreq.window.GetIndex(), tabFreq.num, tabFreq.overlapping); VectorPointf fftData(fft); fftData.MaxY(idMaxFFT); + Pointf p = fftData.MaxSubDataImpY(idMaxFFT, 3); + if (!IsNull(p)) + tabFreq.eMax = Format("(%f,%f)", p.x, p.y); + + if (tabFreq.type == DataSource::T_PSD) { + double m_1, m0, m1, m2; + fftData.GetSpectralMomentsY(tabFreq.opXAxis == 1, m_1, m0, m1, m2); + tabFreq.m_1 <<= FormatDouble(m_1); + tabFreq.m0 <<= FormatDouble(m0); + tabFreq.m1 <<= FormatDouble(m1); + tabFreq.m2 <<= FormatDouble(m2); + } else { + tabFreq.m_1 <<= ""; + tabFreq.m0 <<= ""; + tabFreq.m1 <<= ""; + tabFreq.m2 <<= ""; + } } if (fft.IsEmpty()) { tabFreq.comments.SetText(errText); @@ -1032,9 +1098,9 @@ void ProcessingTab::OnFFT() String strtype; switch(tabFreq.type) { - case DataSource::T_FFT: strtype = t_("FFT"); break; - case DataSource::T_PHASE: strtype = t_("FFT-phase [rad]"); break; - case DataSource::T_PSD: strtype = t_("PSD"); break; + case DataSource::T_FFT: strtype = t_("FFT"); break; + case DataSource::T_PHASE: strtype = t_("FFT-phase [rad]"); break; + case DataSource::T_PSD: strtype = t_("Power Spectral Density"); break; } String legend = tabFit.scatter.GetLegend(0) + String("-") + strtype; tabFreq.scatter.AddSeries(fft).Legend(legend); diff --git a/uppsrc/ScatterCtrl/Properties.h b/uppsrc/ScatterCtrl/Properties.h index 1a0415f0b..2c6dbcd12 100644 --- a/uppsrc/ScatterCtrl/Properties.h +++ b/uppsrc/ScatterCtrl/Properties.h @@ -118,6 +118,7 @@ public: void UpdateField(const String name, int id); void OnFFT(); void OnOp(); + void OnAutoSensSector(); void OnShowEquation(); void UpdateEquations(); void OnFromTo(); @@ -138,7 +139,6 @@ private: bool tabFreqFirst, tabOpFirst; Vector fft; - Vector resampledSeries; AvgEquation average; LinearEquation linear; PolynomialEquation2 cuadratic; diff --git a/uppsrc/ScatterCtrl/ScatterCtrl.cpp b/uppsrc/ScatterCtrl/ScatterCtrl.cpp index 575dc140e..a2d762a85 100644 --- a/uppsrc/ScatterCtrl/ScatterCtrl.cpp +++ b/uppsrc/ScatterCtrl/ScatterCtrl.cpp @@ -169,21 +169,21 @@ void ScatterCtrl::DoMouseAction(bool down, Point pt, ScatterAction action, int v ZoomWindow(false, pt); } switch (action) { - case SCROLL: Scrolling(down, pt); - break; + case SCROLL: Scrolling(down, pt); + break; case ZOOM_H_ENL: - case ZOOM_H_RED: MouseZoom(value, true, false); - break; + case ZOOM_H_RED: MouseZoom(value, true, false); + break; case ZOOM_V_ENL: - case ZOOM_V_RED: MouseZoom(value, false, true); - break; + case ZOOM_V_RED: MouseZoom(value, false, true); + break; case SHOW_COORDINATES: LabelPopUp(down, pt); break; - case ZOOM_WINDOW: ZoomWindow(down, pt); - break; - case CONTEXT_MENU: if(showContextMenu) - MenuBar::Execute(THISBACK(ContextMenu)); - break; + case ZOOM_WINDOW: ZoomWindow(down, pt); + break; + case CONTEXT_MENU: if(showContextMenu && !down) + MenuBar::Execute(THISBACK(ContextMenu)); + break; case NO_ACTION:; } } @@ -256,8 +256,10 @@ void ScatterCtrl::ProcessMouse(bool down, Point &pt, bool ctrl, bool alt, bool s if (mouseBehavior[i].ctrl == ctrl && mouseBehavior[i].alt == alt && mouseBehavior[i].shift == shift && mouseBehavior[i].left == left && mouseBehavior[i].middle == middle && mouseBehavior[i].right == right && - ((mouseBehavior[i].middleWheel == 0) || mouseBehavior[i].middleWheel == ((middleWheel > 0) - (middleWheel < 0)))) + ((mouseBehavior[i].middleWheel == 0) || mouseBehavior[i].middleWheel == ((middleWheel > 0) - (middleWheel < 0)))) { DoMouseAction(down, pt, mouseBehavior[i].action, middleWheel); + break; + } } } diff --git a/uppsrc/ScatterCtrl/ScatterCtrl.lay b/uppsrc/ScatterCtrl/ScatterCtrl.lay index 481343ded..baeddc99d 100644 --- a/uppsrc/ScatterCtrl/ScatterCtrl.lay +++ b/uppsrc/ScatterCtrl/ScatterCtrl.lay @@ -118,7 +118,7 @@ LAYOUT(ProcessingTab, 504, 328) ITEM(Label, name, SetFrame(ThinInsetFrame()).RightPosZ(0, 232).TopPosZ(0, 19)) END_LAYOUT -LAYOUT(ProcessingTabFit, 580, 428) +LAYOUT(ProcessingTabFit, 700, 428) ITEM(Option, opSeries, SetLabel(t_("Series")).RightPosZ(116, 84).TopPosZ(4, 16)) ITEM(Option, opAverage, SetLabel(t_("Average")).RightPosZ(136, 64).TopPosZ(24, 16)) ITEM(Option, opLinear, SetLabel(t_("Linear")).RightPosZ(136, 64).TopPosZ(44, 16)) @@ -129,15 +129,15 @@ LAYOUT(ProcessingTabFit, 580, 428) ITEM(Option, opMin, SetLabel(t_("Min curve")).RightPosZ(72, 128).TopPosZ(208, 16)) ITEM(Option, opSpline, SetLabel(t_("Spline")).RightPosZ(72, 128).TopPosZ(144, 16)) ITEM(ScatterCtrl, scatter, SetPlotAreaLeftMargin(60).SetPlotAreaBottomMargin(50).ShowContextMenu(true).ShowPropertiesDlg(true).ShowProcessDlg(true).ShowButtons(true).HSizePosZ(0, 208).VSizePosZ(0, 0)) - ITEM(Label, dv___10, SetLabel(t_("Min:")).RightPosZ(160, 40).TopPosZ(316, 19)) + ITEM(Label, dv___10, SetLabel(t_("Max imp.:")).RightPosZ(144, 56).TopPosZ(316, 19)) ITEM(Label, dv___11, SetLabel(t_("R2 coeff.")).RightPosZ(0, 48).TopPosZ(4, 19)) ITEM(Label, dv___12, SetLabel(t_("Num decimals:")).RightPosZ(120, 80).TopPosZ(164, 19)) ITEM(EditIntSpin, numDecimals, Max(20).Min(0).RightPosZ(84, 36).TopPosZ(164, 19)) ITEM(Option, showEquation, SetLabel(t_("Show Eq.")).RightPosZ(4, 72).TopPosZ(164, 16)) - ITEM(Label, dv___15, SetLabel(t_("Max:")).RightPosZ(160, 40).TopPosZ(292, 19)) - ITEM(Label, dv___16, SetLabel(t_("StdDev:")).RightPosZ(144, 56).TopPosZ(388, 19)) - ITEM(EditString, eMin, SetEditable(false).RightPosZ(4, 136).TopPosZ(316, 19)) - ITEM(EditDouble, eStdDev, SetEditable(false).RightPosZ(4, 136).TopPosZ(388, 19)) + ITEM(Label, dv___15, SetLabel(t_("Max:")).RightPosZ(144, 56).TopPosZ(292, 19)) + ITEM(Label, dv___16, SetLabel(t_("StdDev:")).RightPosZ(144, 56).TopPosZ(412, 19)) + ITEM(EditString, eMaxImp, SetEditable(false).RightPosZ(4, 136).TopPosZ(316, 19)) + ITEM(EditDouble, eStdDev, SetEditable(false).RightPosZ(4, 136).TopPosZ(412, 19)) ITEM(EditString, eqSinusTend, SetEditable(false).RightPosZ(52, 84).TopPosZ(124, 19)) ITEM(EditDouble, r2Linear, SetEditable(false).RightPosZ(4, 44).TopPosZ(44, 19)) ITEM(EditDouble, r2Cuadratic, SetEditable(false).RightPosZ(4, 44).TopPosZ(64, 19)) @@ -148,8 +148,8 @@ LAYOUT(ProcessingTabFit, 580, 428) ITEM(EditString, eqCubic, SetEditable(false).RightPosZ(52, 84).TopPosZ(84, 19)) ITEM(EditDouble, r2Cubic, SetEditable(false).RightPosZ(4, 44).TopPosZ(84, 19)) ITEM(EditString, eMax, SetEditable(false).RightPosZ(4, 136).TopPosZ(292, 19)) - ITEM(Label, dv___29, SetLabel(t_("Average:")).RightPosZ(144, 56).TopPosZ(340, 19)) - ITEM(EditDouble, eAverage, SetEditable(false).RightPosZ(4, 136).TopPosZ(340, 19)) + ITEM(Label, dv___29, SetLabel(t_("Average:")).RightPosZ(144, 56).TopPosZ(364, 19)) + ITEM(EditDouble, eAverage, SetEditable(false).RightPosZ(4, 136).TopPosZ(364, 19)) ITEM(EditString, eqLinear, SetEditable(false).RightPosZ(52, 84).TopPosZ(44, 19)) ITEM(EditString, eqCuadratic, SetEditable(false).RightPosZ(52, 84).TopPosZ(64, 19)) ITEM(EditString, eqAverage, SetEditable(false).RightPosZ(52, 84).TopPosZ(24, 19)) @@ -158,21 +158,41 @@ LAYOUT(ProcessingTabFit, 580, 428) ITEM(Option, opSecAvg, SetLabel(t_("Sector Average")).RightPosZ(72, 128).TopPosZ(248, 16)) ITEM(Option, opMovAvg, SetLabel(t_("Moving Average")).RightPosZ(72, 128).TopPosZ(228, 16)) ITEM(LabelBox, dv___38, SetLabel(t_("Statistical data")).RightPosZ(4, 200).TopPosZ(268, 24)) - ITEM(Label, dv___39, SetLabel(t_("RMS:")).RightPosZ(144, 56).TopPosZ(364, 19)) - ITEM(EditDouble, eRMS, SetEditable(false).RightPosZ(4, 136).TopPosZ(364, 19)) + ITEM(Label, dv___39, SetLabel(t_("RMS:")).RightPosZ(144, 56).TopPosZ(388, 19)) + ITEM(EditDouble, eRMS, SetEditable(false).RightPosZ(4, 136).TopPosZ(388, 19)) + ITEM(Button, butAutoSensSector, SetLabel(t_("Autosens")).RightPosZ(4, 64).TopPosZ(248, 15)) + ITEM(Label, dv___42, SetLabel(t_("Min:")).RightPosZ(144, 56).TopPosZ(340, 19)) + ITEM(EditString, eMin, SetEditable(false).RightPosZ(4, 136).TopPosZ(340, 19)) END_LAYOUT -LAYOUT(ProcessingTabFrequency, 524, 276) - ITEM(ScatterCtrl, scatter, SetPlotAreaLeftMargin(60).SetPlotAreaBottomMargin(40).ShowContextMenu(true).ShowPropertiesDlg(true).ShowProcessDlg(true).ShowButtons(true).HSizePosZ(0, 100).VSizePosZ(0, 20)) +LAYOUT(ProcessingTabFrequency, 552, 420) + ITEM(ScatterCtrl, scatter, SetPlotAreaLeftMargin(60).SetPlotAreaBottomMargin(40).ShowContextMenu(true).ShowPropertiesDlg(true).ShowProcessDlg(true).ShowButtons(true).HSizePosZ(0, 128).VSizePosZ(0, 20)) ITEM(Label, dv___1, SetLabel(t_("sec")).RightPosZ(4, 28).TopPosZ(20, 19)) - ITEM(EditDouble, samplingTime, RightPosZ(36, 56).TopPosZ(20, 19)) - ITEM(Button, butFFT, SetLabel(t_("FFT")).RightPosZ(4, 88).TopPosZ(48, 20)) - ITEM(Label, dv___4, SetLabel(t_("Sampling time:")).RightPosZ(4, 88).TopPosZ(0, 19)) - ITEM(Label, comments, HSizePosZ(0, 0).BottomPosZ(1, 19)) - ITEM(Switch, opXAxis, SetLabel(t_("Time\nFrequency")).RightPosZ(12, 76).TopPosZ(92, 32)) - ITEM(LabelBox, dv___7, SetLabel(t_("X Axis")).RightPosZ(4, 92).TopPosZ(76, 52)) - ITEM(Switch, type, SetLabel(t_("FFT\nPhase\nPSD")).RightPosZ(16, 72).TopPosZ(136, 52)) - ITEM(Option, setWindow, SetLabel(t_("Window")).RightPosZ(4, 84).TopPosZ(192, 16)) + ITEM(EditDouble, samplingTime, RightPosZ(36, 84).TopPosZ(20, 19)) + ITEM(Button, butFFT, SetLabel(t_("FFT")).RightPosZ(4, 116).TopPosZ(48, 20)) + ITEM(Label, dv___4, SetLabel(t_("Sampling time:")).RightPosZ(32, 88).TopPosZ(0, 19)) + ITEM(Label, comments, HSizePosZ(0, 128).BottomPosZ(1, 19)) + ITEM(Switch, opXAxis, SetLabel(t_("Time\nFrequency")).RightPosZ(32, 84).TopPosZ(92, 32)) + ITEM(LabelBox, dv___7, SetLabel(t_("Subdivision")).RightPosZ(4, 120).TopPosZ(232, 56)) + ITEM(LabelBox, dv___8, SetLabel(t_("Spectral moments")).RightPosZ(4, 120).TopPosZ(316, 100)) + ITEM(Switch, type, SetLabel(t_("FFT\nPhase\nPSD")).RightPosZ(44, 72).TopPosZ(136, 52)) + ITEM(EditDoubleSpin, overlapping, Max(1).Min(0).RightPosZ(8, 40).TopPosZ(264, 19)) + ITEM(Label, dv___11, SetLabel(t_("Overlapping:")).RightPosZ(44, 76).TopPosZ(264, 19)) + ITEM(EditIntSpin, num, Min(1).RightPosZ(8, 40).TopPosZ(244, 19)) + ITEM(Label, dv___13, SetLabel(t_("Number:")).RightPosZ(44, 76).TopPosZ(244, 19)) + ITEM(Label, dv___14, SetLabel(t_("Window")).RightPosZ(4, 116).TopPosZ(188, 19)) + ITEM(DropList, window, RightPosZ(4, 116).TopPosZ(208, 19)) + ITEM(Label, dv___16, SetLabel(t_("m0:")).RightPosZ(92, 28).TopPosZ(352, 19)) + ITEM(EditString, m0, SetEditable(false).RightPosZ(8, 84).TopPosZ(352, 19)) + ITEM(Label, dv___18, SetLabel(t_("m1:")).RightPosZ(92, 28).TopPosZ(372, 19)) + ITEM(EditString, m1, SetEditable(false).RightPosZ(8, 84).TopPosZ(372, 19)) + ITEM(Label, dv___20, SetLabel(t_("Max:")).RightPosZ(96, 28).TopPosZ(292, 19)) + ITEM(EditString, eMax, SetEditable(false).RightPosZ(4, 92).TopPosZ(292, 19)) + ITEM(Label, dv___22, SetLabel(t_("m2:")).RightPosZ(92, 28).TopPosZ(392, 19)) + ITEM(EditString, m2, SetEditable(false).RightPosZ(8, 84).TopPosZ(392, 19)) + ITEM(Label, dv___24, SetLabel(t_("m-1:")).RightPosZ(92, 28).TopPosZ(332, 19)) + ITEM(EditString, m_1, SetEditable(false).RightPosZ(8, 84).TopPosZ(332, 19)) + ITEM(LabelBox, dv___26, SetLabel(t_("X Axis")).RightPosZ(4, 120).TopPosZ(76, 52)) END_LAYOUT LAYOUT(ProcessingTabOp, 544, 328) diff --git a/uppsrc/ScatterCtrl/ScatterCtrl.t b/uppsrc/ScatterCtrl/ScatterCtrl.t index 27f1cfc77..b609a122a 100644 --- a/uppsrc/ScatterCtrl/ScatterCtrl.t +++ b/uppsrc/ScatterCtrl/ScatterCtrl.t @@ -492,9 +492,9 @@ esES("FFT-fase [rad]") euES("") frFR("") -T_("PSD") +T_("Power Spectral Density") caES("") -esES("") +esES("Espectro de densidad energ\303\251tica") euES("") frFR("") @@ -731,7 +731,7 @@ frFR("Marque") T_("Type:") caES("") -esES("") +esES("Tipo:") euES("") frFR("") @@ -819,9 +819,9 @@ esES("Curva m\303\255n.") euES("") frFR("") -T_("Min:") +T_("Max imp.:") caES("") -esES("M\303\255n:") +esES("") euES("") frFR("") @@ -869,7 +869,7 @@ frFR("") T_("Sector Average") caES("") -esES("") +esES("Promed. sector") euES("") frFR("") @@ -887,10 +887,22 @@ frFR("") T_("RMS:") caES("") +esES("Med. cuad.:") +euES("") +frFR("") + +T_("Autosens") +caES("") esES("") euES("") frFR("") +T_("Min:") +caES("") +esES("M\303\255n:") +euES("") +frFR("") + T_("sec") caES("") esES("seg") @@ -909,9 +921,15 @@ esES("Tiempo\nFrecuencia") euES("") frFR("") -T_("X Axis") +T_("Subdivision") caES("") -esES("Eje X") +esES("Subdivisi\303\263n") +euES("") +frFR("") + +T_("Spectral moments") +caES("") +esES("Momentos espectrales") euES("") frFR("") @@ -921,12 +939,54 @@ esES("FFT\nFase\nPSD") euES("") frFR("") +T_("Overlapping:") +caES("") +esES("Solapamiento:") +euES("") +frFR("") + +T_("Number:") +caES("") +esES("N\303\272m:") +euES("") +frFR("") + T_("Window") caES("") esES("Ventana") euES("") frFR("") +T_("m0:") +caES("") +esES("") +euES("") +frFR("") + +T_("m1:") +caES("") +esES("") +euES("") +frFR("") + +T_("m2:") +caES("") +esES("") +euES("") +frFR("") + +T_("m-1:") +caES("") +esES("") +euES("") +frFR("") + +T_("X Axis") +caES("") +esES("Eje X") +euES("") +frFR("") + T_("x <") caES("") esES("") @@ -947,31 +1007,31 @@ frFR("") T_("Size:") caES("") -esES("") +esES("Tam:") euES("") frFR("") T_("Font:") caES("") -esES("") +esES("Tipo:") euES("") frFR("") T_("Text:") caES("") -esES("") +esES("Texto:") euES("") frFR("") T_("Bold") caES("") -esES("") +esES("Negrita") euES("") frFR("") T_("Italic") caES("") -esES("") +esES("Cursiva") euES("") frFR("") diff --git a/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tpp b/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tpp index be28452ca..06cbf08ca 100644 --- a/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tpp +++ b/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tpp @@ -119,8 +119,8 @@ and `"Data`" dialogs.&] the `"Data`" dialog details are described.&] [s1; &] [s6;%- &] -[s5;:Upp`:`:ScatterCtrl`:`:ShowProcessDlg`(bool`):%- [_^Upp`:`:ScatterCtrl^ ScatterCtrl -][@(0.0.255) `&]_[* ShowProcessDlg]([@(0.0.255) bool]_[*@3 show]_`=_[@(0.0.255) true])&] +[s5;:ScatterCtrl`:`:ShowProcessDlg`(bool`):%- [_^Upp`:`:ScatterCtrl^ ScatterCtrl][@(0.0.255) `& +]_[* ShowProcessDlg]([@(0.0.255) bool]_[*@3 show]_`=_[@(0.0.255) true])&] [s3; If [%-*@3 show] is true, the context menu will have a `"Process`" dialog.&] [s3; In DEBUG mode the `"Process`" menu will always appear.&] @@ -128,6 +128,13 @@ dialog.&] dialog details are described.&] [s1; &] [s6;%- &] +[s5;:ScatterCtrl`:`:ShowButtons`(bool`):%- [_^ScatterCtrl^ ScatterCtrl][@(0.0.255) `&]_[* S +howButtons]([@(0.0.255) bool]_[*@3 show]_`=_[@(0.0.255) true])&] +[s3; If [%-*@3 show] is true, Properties, Data and Process buttons +will appear at the right top end of the control.&] +[s3; In DEBUG mode these buttons will always appear.&] +[s1; &] +[s6;%- &] [s5;:ScatterCtrl`:`:ShowInfo`(bool`):%- [_^ScatterCtrl^ ScatterCtrl]_`&[* ShowInfo]([@(0.0.255) b ool]_[*@3 show]_`=_[@(0.0.255) true])&] [s3; If [%-*@3 show] is true it shows a legend with mouse location diff --git a/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tppi b/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tppi index 73e158e18..f15c0b4be 100644 --- a/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tppi +++ b/uppsrc/ScatterCtrl/src.tpp/ScatterCtrl$en-us.tppi @@ -314,18 +314,18 @@ COMPRESSED 193,74,2,185,129,190,167,163,122,254,206,11,113,87,4,197,171,53,8,26,249,59,19,85,22,162,74,11,161,55,148,234,249,187,223,161,161,86,103,116,95,19,126,48,204,182,23,182,51,113,126,108,91,206,241,214,211,95,237,160,215,148,50,44,139,222,32,86,98,39,37,198,116,157,69,126,165,207,49,86,129,248,180,189,42,192,206,8,66,195,44,29,48,37,95,183,64,152,207,28,73,178,112,189,197,18,151,109,137,134,229,198,214,26,188,168,127,93,87,154,245,47,147,245,4,195,152,169,72,254,38,187,32,16,23,5,30,22,146,88,87,60,78,170,255,177,252,241,46,5,169,224,182,13,130,0,246,213,42,134,235,83,164,83,12,80,97,121,126,65,46,203,60,56,142,114,186,177,4,125,126,77,223,184,101,97,184,240,65,159,191,79,86,250,190,185,147,102,58,22,102,158,91,113,207,243,190,121,83,204,18,165,190,239,133,31,252,214,174,165,196,7,108,242,91,190,194,200,56,211,186,126,99,46,148,43,79,226,235,198,46,85,10,251,65,178,185,98,182,229,35,152,105,170,124,242, 87,102,232,194,168,74,18,208,57,103,98,37,175,105,166,197,136,54,104,20,196,0,183,76,113,249,251,191,241,28,255,251,250,255,246,51,251,245,144,129,10,73,100,6,10,165,44,195,235,207,231,147,142,60,10,2,91,162,245,248,59,22,185,18,117,244,121,63,142,239,138,10,252,63,159,99,213,231,23,240,26,203,232,79,96,82,196,104,196,104,12,82,72,178,78,152,81,210,53,4,109,32,41,26,141,3,23,49,200,73,73,242,203,215,115,172,61,254,121,62,87,61,98,144,211,137,184,255,96,89,175,179,72,73,24,125,24,134,192,149,244,173,126,32,175,220,173,254,105,219,23,125,90,30,247,60,8,254,73,64,83,105,15,0,20,187,61,76,83,6,250,220,121,244,59,171,246,11,126,78,242,121,37,29,188,123,30,194,250,190,96,49,76,106,185,152,113,129,127,180,122,165,237,19,72,19,255,167,5,151,232,125,173,191,187,167,229,117,219,190,61,185,195,179,63,163,192,135,60,175,53,217,218,253,189,39,197,46,145,38,183,30,163,179,221,143,153,222,125,89,191,241,123,14,138,153, 44,152,109,30,68,240,137,216,209,15,195,169,141,168,13,12,15,41,126,126,121,195,2,72,174,250,24,181,242,134,200,253,238,181,78,213,162,128,233,187,71,43,134,213,101,16,19,234,239,99,142,90,238,137,38,230,238,90,22,1,154,254,123,245,9,84,139,241,109,23,63,121,1,73,250,54,11,250,38,136,97,7,246,4,193,224,35,95,191,3,171,81,1,79,107,238,142,255,206,27,242,24,187,79,87,60,139,134,233,26,82,116,55,128,84,102,1,176,147,184,97,0,126,102,0,210,59,209,188,80,8,134,113,60,48,111,96,247,176,87,177,95,192,175,103,178,37,139,248,99,150,10,13,180,39,94,82,81,39,85,126,231,183,31,144,33,101,199,107,227,166,111,40,235,31,155,209,31,50,136,217,215,243,96,228,190,5,194,223,69,11,240,217,44,36,74,91,239,146,108,87,221,0,135,57,45,112,201,131,240,252,53,201,25,130,36,127,119,84,133,51,70,235,205,253,89,238,71,136,115,109,121,188,243,176,69,179,218,15,129,59,34,170,76,52,76,255,103,147,21,111,3,107,112,127,167, -191,42,59,129,141,174,239,201,74,94,24,255,247,110,253,111,115,143,242,127,138,187,22,238,180,113,37,252,87,116,246,222,182,78,147,146,64,30,77,210,179,231,108,2,9,33,33,192,134,36,132,244,16,108,140,0,7,99,187,126,240,232,62,126,251,29,73,126,200,96,131,13,220,221,61,61,20,219,154,209,124,223,204,72,35,33,119,161,248,212,159,158,116,235,114,124,122,84,121,255,74,246,0,103,239,175,250,97,71,207,254,188,206,213,111,107,196,77,110,140,95,254,184,204,21,14,207,200,60,72,198,222,210,141,122,140,235,87,181,171,198,87,25,31,24,119,51,107,246,122,127,10,53,251,33,12,12,195,35,22,203,206,180,127,255,245,240,226,197,104,200,3,77,63,105,76,198,51,88,169,140,7,63,103,87,103,166,109,85,31,135,199,187,213,220,110,175,231,60,221,212,110,15,220,28,146,250,157,250,65,229,250,253,199,96,122,182,155,47,158,100,27,227,155,195,28,172,77,32,22,181,219,217,239,195,254,253,238,235,253,164,123,74,126,227,155,25,199,55,239,151,131,233,126,109,48, +191,42,59,129,141,174,239,201,74,94,24,255,247,110,253,111,115,143,242,127,138,187,22,238,180,113,37,252,87,116,246,222,182,78,147,146,64,30,77,210,179,231,108,2,9,33,33,192,134,36,132,244,16,108,140,0,7,99,187,126,240,232,62,126,251,29,73,126,200,96,131,13,236,222,61,61,20,219,154,209,124,223,204,72,35,33,119,161,248,212,159,158,116,235,114,124,122,84,121,255,74,246,0,103,239,175,250,97,71,207,254,188,206,213,111,107,196,77,110,140,95,254,184,204,21,14,207,200,60,72,198,222,210,141,122,140,235,87,181,171,198,87,25,31,24,119,51,107,246,122,127,10,53,251,33,12,12,195,35,22,203,206,180,127,255,245,240,226,197,104,200,3,77,63,105,76,198,51,88,169,140,7,63,103,87,103,166,109,85,31,135,199,187,213,220,110,175,231,60,221,212,110,15,220,28,146,250,157,250,65,229,250,253,199,96,122,182,155,47,158,100,27,227,155,195,28,172,77,32,22,181,219,217,239,195,254,253,238,235,253,164,123,74,126,227,155,25,199,55,239,151,131,233,126,109,48, 125,60,206,107,205,220,25,204,247,199,89,231,121,106,201,248,229,78,237,41,131,105,227,246,161,162,92,214,110,167,52,63,7,242,67,127,210,44,21,102,151,133,137,121,183,235,220,221,157,124,213,179,119,195,199,198,233,139,115,100,12,179,120,127,118,137,71,47,117,231,1,214,45,23,197,242,253,13,36,223,205,251,228,168,84,208,78,30,134,175,197,87,24,125,78,229,193,197,59,121,145,177,248,222,232,159,29,87,221,252,127,151,59,228,127,204,0,62,60,185,119,14,203,147,202,217,217,169,188,123,40,217,245,201,126,13,124,154,107,224,94,185,126,228,188,234,214,245,229,239,207,205,114,94,255,145,55,135,16,168,199,95,167,77,253,57,63,109,66,42,125,173,94,21,202,57,205,32,139,222,125,60,190,130,228,236,55,202,165,167,83,205,29,107,106,47,249,211,247,93,39,59,118,156,225,200,247,81,1,254,148,13,178,109,3,241,49,105,86,95,238,134,83,235,113,182,219,211,142,115,23,16,238,13,184,61,36,103,58,114,198,208,31,111,30,154,118,238,168,171,221,152,202,180,52,122, 135,213,122,227,180,86,207,247,251,183,86,255,62,55,57,125,213,179,210,177,241,88,106,46,29,251,250,165,218,81,175,116,8,43,146,139,95,127,221,105,181,254,250,235,99,235,187,117,240,13,185,127,125,207,161,103,108,90,146,173,168,24,229,10,200,146,37,219,198,38,234,155,146,49,64,178,174,217,166,174,162,142,100,225,46,210,53,212,250,254,102,235,134,34,139,231,226,190,184,95,103,141,11,166,52,17,247,45,83,14,223,249,47,214,196,47,142,37,254,135,191,121,46,158,203,170,100,89,111,57,196,221,110,129,25,153,22,51,41,199,153,86,178,145,99,97,11,61,137,187,226,46,34,45,145,110,162,154,164,104,196,70,176,167,139,71,146,214,69,182,142,250,216,70,29,76,109,55,113,207,196,214,0,89,6,38,86,155,200,48,65,64,209,250,232,135,35,169,138,61,139,236,106,21,184,174,14,248,170,99,108,142,21,236,131,11,96,228,109,83,21,219,96,143,78,192,32,123,128,77,140,20,11,73,26,210,93,33,164,247,124,70,13,221,178,148,142,2,214,40,216,98,246,100,61,167, 124,248,66,190,160,63,254,200,30,192,127,215,66,54,119,186,83,164,159,191,101,17,179,247,115,14,229,117,205,178,77,71,182,1,96,1,219,146,162,122,222,61,113,53,88,199,223,206,121,235,128,123,254,82,16,119,206,161,225,247,207,60,132,150,176,67,36,15,191,1,33,96,27,208,245,19,248,7,52,136,186,45,195,12,117,245,39,53,181,230,116,84,69,70,247,24,202,47,19,149,21,203,78,96,234,69,183,123,175,131,247,47,241,64,26,43,186,41,10,29,93,87,197,189,184,79,112,177,247,213,213,116,33,219,138,174,185,40,127,19,14,50,7,153,220,241,241,14,26,235,74,183,213,6,220,243,93,180,4,190,25,209,69,154,253,118,136,100,194,204,30,138,121,42,169,118,252,67,107,160,244,150,60,86,241,178,167,35,165,219,85,241,220,115,0,26,122,60,25,96,188,196,58,83,233,15,72,23,33,82,92,195,233,247,150,231,113,160,3,73,72,131,64,253,254,225,11,247,156,164,87,7,35,85,114,52,121,0,25,5,29,106,44,36,244,81,71,209,36,210,136,196,246,16,207,72, -188,119,209,136,144,234,74,91,200,34,153,57,243,116,18,42,247,90,126,15,170,29,92,80,170,130,75,66,77,112,197,176,206,95,51,236,180,83,247,62,131,75,50,15,172,51,84,5,119,195,49,187,36,226,30,32,121,199,120,46,232,146,198,82,132,112,75,88,205,57,19,3,30,84,143,53,128,2,68,242,220,90,168,7,57,62,231,147,12,55,100,44,193,148,87,177,100,206,65,90,130,98,177,121,48,32,36,51,21,98,101,0,15,84,236,13,117,137,233,135,240,187,195,179,101,233,190,94,138,115,74,255,169,4,15,82,20,248,137,23,85,172,103,197,180,97,78,186,163,173,254,161,12,141,200,71,15,33,151,135,161,164,34,40,66,41,229,61,224,17,160,150,162,117,21,192,0,19,134,210,163,221,147,232,32,115,32,186,19,219,153,76,6,141,89,99,122,31,66,26,90,41,54,107,96,98,184,45,15,36,19,169,202,16,35,241,19,22,63,145,38,226,39,152,250,63,37,12,118,22,161,161,32,74,151,190,161,80,73,149,188,9,82,54,77,198,134,48,172,202,215,144,213,73,108,91, +188,119,209,136,144,234,74,91,200,34,153,57,243,116,18,42,247,90,126,15,170,29,92,80,170,130,75,66,77,112,197,176,206,95,51,236,180,83,247,62,131,75,50,15,172,51,84,5,119,195,49,187,36,226,30,32,121,199,120,46,232,146,198,82,132,112,75,88,205,57,19,3,30,84,143,53,128,2,68,242,220,90,168,7,57,62,231,147,12,55,100,44,193,148,87,177,100,206,65,90,130,98,177,121,48,32,36,51,21,98,101,0,15,84,236,13,117,137,233,135,240,187,195,179,101,233,190,94,138,115,74,255,173,4,15,82,20,248,137,23,85,172,103,197,180,97,78,186,163,173,254,165,12,141,200,71,15,33,151,135,161,164,34,40,66,41,229,61,224,17,160,150,162,117,21,192,0,19,134,210,163,221,147,232,32,115,32,186,19,219,153,76,6,141,89,99,122,31,66,26,90,41,54,107,96,98,184,45,15,36,19,169,202,16,35,241,19,22,63,145,38,226,39,152,250,63,37,12,118,22,161,161,32,74,151,190,161,80,73,149,188,9,82,54,77,198,134,48,172,202,215,144,213,73,108,91, 63,71,235,216,142,30,31,189,6,252,83,199,20,63,47,218,238,197,63,154,215,5,201,217,126,91,170,238,13,133,175,91,109,241,51,155,8,67,122,60,10,160,3,203,159,46,66,45,144,196,106,154,142,123,131,228,6,185,102,227,26,205,30,135,84,188,138,198,215,70,25,95,47,70,81,165,34,53,154,213,193,97,146,188,98,49,84,43,158,159,135,209,39,12,15,143,181,27,226,64,168,105,67,227,36,35,59,196,98,168,211,22,239,8,241,99,200,13,158,194,216,49,114,44,169,83,96,252,215,54,255,28,42,208,249,250,36,44,50,91,16,233,73,170,133,125,39,149,122,158,139,168,126,215,5,50,148,205,150,12,145,169,146,65,224,167,174,143,136,47,94,144,52,85,172,76,148,228,108,185,100,51,144,92,77,113,113,142,145,151,168,20,244,195,120,161,53,159,131,182,99,146,124,3,146,200,96,151,16,91,146,68,156,239,181,153,202,198,166,111,227,223,127,255,157,61,57,57,74,103,107,51,157,173,245,129,62,129,213,138,141,167,246,61,214,28,55,98,215,138,213,176,166,216,80,181, -160,93,116,168,46,134,29,109,75,38,33,138,156,77,154,180,7,52,130,46,40,3,48,181,234,6,214,96,64,16,104,121,9,107,33,69,30,146,5,37,204,163,93,220,147,28,213,222,73,154,191,208,93,205,4,117,38,89,249,21,212,254,134,116,132,116,109,159,144,189,69,70,38,10,68,3,12,90,48,185,32,241,151,160,127,241,23,90,50,136,191,20,36,91,130,139,46,172,30,245,126,144,174,26,42,92,93,62,21,33,178,186,48,242,234,246,192,107,193,52,74,234,68,34,235,7,195,128,41,205,19,90,58,204,210,21,57,215,191,63,204,222,192,218,187,69,13,143,176,111,181,74,106,191,175,108,192,41,11,33,3,207,147,85,55,152,12,43,253,46,134,52,81,58,254,106,99,33,12,158,12,99,126,1,30,68,131,140,173,136,80,88,20,73,26,17,174,190,127,39,28,72,231,62,73,209,222,247,93,227,182,13,20,173,31,5,84,85,92,8,132,108,74,231,184,8,143,149,180,158,158,52,109,219,226,71,215,47,68,234,255,48,98,65,5,77,110,144,34,90,197,125,12,17,62,81, -32,183,216,248,173,234,50,43,254,105,77,195,238,145,58,158,140,95,201,33,131,115,47,172,123,32,173,167,168,88,20,100,178,243,68,139,245,168,250,206,175,77,195,98,97,228,84,69,43,4,150,233,115,233,160,18,59,254,30,19,220,19,114,167,164,229,193,193,78,22,53,96,161,1,136,91,94,61,6,29,89,126,96,146,221,53,137,176,49,97,173,32,184,152,5,100,230,114,25,164,234,83,160,127,212,243,170,98,116,116,201,236,134,252,30,7,155,107,31,239,241,48,61,203,171,164,69,136,80,195,179,93,57,183,31,134,185,163,216,35,201,200,36,36,142,11,169,176,49,161,224,162,93,47,210,153,138,190,107,26,56,117,219,36,21,235,42,238,174,89,184,64,82,209,246,144,79,244,111,46,52,42,210,136,49,86,113,84,117,41,71,156,195,169,16,79,19,228,62,204,234,93,50,143,67,253,79,67,4,70,53,172,89,144,48,222,208,115,91,187,42,210,105,163,86,41,210,241,194,114,12,67,55,109,220,93,224,48,232,3,216,35,134,65,71,4,74,29,171,228,142,91,65,128,77,146, -53,164,102,66,50,154,116,157,72,46,52,144,244,150,33,41,232,125,96,123,221,145,139,68,182,216,110,197,45,120,169,96,80,172,230,97,169,72,151,134,238,234,196,109,32,236,164,169,73,235,202,79,76,108,161,249,29,111,16,184,22,26,130,99,225,211,43,80,233,119,97,167,189,56,76,204,87,211,192,208,88,177,200,62,130,231,104,34,155,225,127,80,0,251,65,101,105,36,245,177,176,195,102,22,147,138,83,105,210,156,112,77,159,187,123,39,125,182,43,210,115,52,119,219,146,238,67,4,74,210,44,145,243,186,74,150,198,108,156,100,23,31,215,93,155,81,241,232,193,179,253,70,31,190,33,90,40,156,179,150,139,90,200,38,15,125,180,224,233,48,97,94,103,2,109,157,184,158,197,118,209,84,186,219,132,236,235,219,20,118,31,20,137,237,164,224,253,110,5,78,46,37,13,13,165,107,67,50,146,141,202,13,192,83,45,97,240,193,142,34,51,110,66,155,36,3,69,213,9,156,92,10,80,53,85,183,47,76,44,109,211,191,33,157,155,250,216,16,219,82,114,31,135,186,22,56, -217,20,148,92,192,218,119,155,116,248,250,54,165,130,44,202,147,83,225,119,43,112,114,41,105,216,60,220,125,45,113,225,206,140,11,135,123,36,22,22,229,92,243,157,196,80,30,21,59,168,107,221,34,101,109,119,82,101,113,174,156,171,104,34,221,104,83,5,171,29,72,59,18,104,235,29,134,50,57,216,107,152,56,61,192,244,251,102,112,137,138,56,200,228,217,27,237,36,26,110,15,158,60,166,129,76,84,9,190,84,138,136,165,237,183,153,185,129,194,173,76,208,169,88,224,166,234,180,60,148,165,14,249,199,48,182,22,2,129,190,77,98,128,105,73,0,63,232,78,8,228,82,195,223,102,28,112,26,183,18,8,41,169,224,66,97,61,50,94,182,53,246,49,109,155,12,126,83,170,34,41,244,23,129,181,79,11,184,185,85,192,205,77,0,207,82,1,110,10,179,245,0,231,182,139,56,247,175,67,94,82,171,222,75,102,95,209,88,89,178,23,254,160,160,87,22,187,158,2,198,24,21,94,245,117,195,82,152,245,24,87,3,13,202,139,167,132,184,167,15,238,9,159,232,199,227, -71,221,136,127,120,169,219,182,62,74,81,57,51,75,5,106,210,158,219,247,30,237,100,207,211,182,198,242,130,104,227,221,182,33,157,129,186,56,74,71,236,105,24,119,44,232,64,159,192,4,147,66,44,70,67,92,220,172,113,45,67,145,2,254,38,13,17,250,240,193,223,9,9,219,219,138,148,77,183,115,225,201,131,59,183,232,14,95,91,42,111,44,139,66,95,227,250,254,224,32,38,114,7,7,34,173,55,2,107,83,109,166,121,226,52,199,82,217,202,73,164,183,150,19,94,180,119,73,204,132,204,76,62,216,134,196,182,54,160,134,24,216,82,208,241,196,164,11,59,78,9,27,34,183,152,92,188,194,173,65,229,149,174,159,98,97,172,137,34,55,140,38,109,232,134,204,78,49,240,13,244,73,153,254,118,182,225,143,241,76,201,6,63,242,197,121,198,215,45,16,29,41,92,193,67,91,126,64,132,183,127,254,0,203,194,206,58,103,80,154,82,148,74,212,116,203,75,244,154,174,108,180,240,244,244,197,85,163,84,255,27,235,134,253,18,75,118,12,117,127,105,229,6,86,12,235, -45,190,11,1,196,214,129,250,178,81,146,7,106,226,82,123,186,6,22,88,54,173,3,165,185,29,40,205,56,40,179,53,160,192,234,32,69,54,112,1,232,195,8,197,72,132,233,197,80,156,37,29,145,130,184,73,85,127,49,177,138,51,130,53,189,181,5,186,93,77,113,140,107,206,40,45,231,174,70,1,68,19,110,176,22,23,96,45,157,9,230,12,79,71,184,103,221,26,164,63,232,147,186,33,201,244,72,229,198,188,7,202,182,72,125,160,116,29,246,121,124,9,28,192,35,72,231,3,206,204,53,220,112,161,201,3,178,49,183,177,11,152,162,216,159,21,216,211,148,30,96,58,5,38,156,214,1,30,178,4,228,123,182,167,35,222,181,110,13,210,175,21,85,221,234,134,104,88,107,138,77,81,111,146,238,129,108,146,29,162,112,71,2,17,75,61,181,93,234,102,23,110,111,29,63,167,119,13,6,58,84,58,49,7,92,103,2,19,157,227,33,132,97,117,180,114,33,225,179,144,104,19,27,45,170,72,27,200,129,63,83,173,151,35,188,185,174,233,33,215,165,51,158,119,68,170, -84,44,176,131,196,249,250,115,29,27,146,41,217,4,128,119,6,148,63,57,149,58,28,35,52,211,243,85,33,229,115,199,172,44,108,68,190,72,65,238,123,175,79,184,71,159,81,70,182,198,244,208,146,5,159,88,237,146,70,172,155,228,165,89,36,250,133,163,176,11,150,162,104,209,96,9,83,36,182,19,99,83,25,156,192,97,236,146,189,29,52,63,160,99,50,187,183,67,77,136,173,238,139,64,174,101,37,102,23,187,57,255,6,151,251,2,149,97,98,242,166,11,121,243,74,235,42,236,96,18,57,133,22,188,136,85,178,221,35,234,231,76,173,146,61,62,248,86,61,160,7,251,115,71,167,223,80,165,42,182,47,242,143,165,106,229,203,159,21,221,237,46,19,211,184,158,127,168,150,203,95,254,172,211,51,255,204,64,250,42,184,21,39,241,90,173,222,139,237,27,177,125,85,1,185,87,93,31,89,8,102,33,229,167,174,217,48,100,205,128,11,149,174,199,251,188,50,180,74,219,195,85,33,82,155,137,187,142,60,167,108,169,174,231,144,101,99,114,20,92,142,183,107,149,170,245, -205,66,245,155,106,67,108,151,42,215,85,160,151,29,216,213,96,230,239,233,224,244,14,57,34,168,201,170,67,15,35,178,99,186,244,141,184,23,122,246,176,9,254,134,81,133,188,191,133,23,244,50,219,26,165,74,161,218,96,182,145,131,174,196,14,118,98,19,98,91,197,178,13,49,213,153,5,47,57,45,88,71,29,47,182,203,87,215,143,129,251,201,43,184,1,164,56,153,135,82,241,134,19,98,175,72,172,148,122,170,5,34,142,177,186,61,192,171,4,18,0,76,155,147,225,94,75,71,173,214,255,0,218,46,99,108, +160,93,116,168,46,134,29,109,75,38,33,138,156,77,154,180,7,52,130,46,40,3,48,181,234,6,214,96,64,16,104,121,9,107,33,69,30,146,5,37,204,163,93,220,147,28,213,222,73,154,191,208,93,205,4,117,38,89,249,21,212,254,134,116,132,116,109,159,144,189,69,70,38,10,68,3,12,90,48,185,32,241,151,160,127,241,23,90,50,136,191,20,36,91,130,139,46,172,30,245,126,144,174,26,42,92,93,62,21,33,178,186,48,242,234,246,192,107,193,52,74,234,68,34,235,7,195,128,41,205,19,90,58,204,210,21,57,215,191,63,204,222,192,218,187,69,13,143,176,111,181,74,106,191,175,108,192,41,11,33,3,207,147,85,55,152,12,43,253,46,134,52,81,58,254,106,35,97,24,200,216,138,136,129,39,195,152,91,172,39,13,5,87,223,255,39,14,72,231,62,59,209,110,247,125,226,182,13,20,173,239,126,170,42,206,247,33,155,54,246,216,165,99,219,80,64,109,152,178,174,150,127,194,73,65,180,239,33,18,172,52,226,93,26,80,135,245,235,242,77,137,70,146,77,185,98, +195,26,144,141,48,8,184,213,16,95,28,70,121,18,230,135,176,202,5,23,38,99,181,164,245,244,164,148,182,197,143,46,139,68,234,31,152,0,96,65,66,110,144,53,137,138,251,132,141,137,2,67,21,155,14,85,93,102,107,41,90,34,178,123,100,89,68,166,131,228,129,4,41,115,97,221,67,40,246,20,21,139,130,76,54,242,232,218,39,170,92,246,75,253,176,88,24,57,85,209,10,129,101,250,92,58,168,196,142,191,101,7,247,132,220,41,105,121,112,176,147,69,13,88,183,1,226,150,87,222,66,71,22,31,0,164,90,150,128,6,218,10,82,150,89,64,10,1,151,65,170,62,5,250,71,61,175,42,70,71,151,204,110,200,239,113,176,185,246,241,30,15,211,179,188,232,92,132,8,75,34,182,201,233,246,195,48,119,20,123,36,25,153,132,196,113,33,21,54,38,20,92,180,235,69,58,83,209,119,77,3,167,110,155,100,1,176,138,187,107,22,46,144,84,180,61,228,19,253,155,11,141,138,52,98,140,85,28,85,93,202,17,231,112,42,196,211,4,35,42,20,73,93,82,22,193, +0,66,67,4,230,10,172,89,144,48,222,24,114,91,187,42,178,49,169,82,164,163,176,229,24,134,110,218,184,187,192,97,208,7,176,71,12,131,142,8,148,58,86,201,29,183,32,3,155,36,107,72,205,132,100,52,233,178,155,92,104,32,233,141,99,41,232,125,96,63,29,68,174,185,217,222,69,43,110,255,128,10,6,181,127,30,86,222,116,165,237,46,246,220,6,194,78,154,18,191,174,252,196,196,22,154,223,241,6,129,107,161,33,56,22,62,189,122,159,126,23,118,218,139,195,196,252,226,4,24,26,43,22,217,150,241,28,77,100,51,252,239,51,96,63,168,44,141,164,62,22,118,216,96,111,82,113,42,77,154,19,174,233,115,119,43,170,207,54,153,122,142,230,238,2,211,109,157,64,73,154,29,135,188,174,146,157,6,54,78,178,139,143,235,46,117,169,120,244,224,217,126,163,15,223,16,45,191,206,89,203,69,45,100,207,140,62,90,240,116,152,48,175,51,129,182,78,188,60,192,118,209,84,186,219,132,236,235,219,20,118,31,20,137,237,164,224,253,110,5,78,46,37,13,13,165, +107,67,50,146,125,223,13,192,83,45,97,240,193,6,45,51,110,66,155,36,3,69,213,9,156,92,10,80,53,85,183,47,76,44,109,211,191,33,157,155,250,216,16,219,82,114,31,135,186,22,56,217,20,148,92,76,21,107,155,116,248,250,54,165,130,236,113,36,167,194,239,86,224,228,82,210,176,121,184,251,90,226,194,157,25,23,14,247,72,44,44,202,185,230,59,137,161,60,42,118,80,215,186,69,202,218,238,164,202,226,92,57,87,209,68,186,209,166,10,86,59,144,118,36,208,214,59,12,101,114,176,215,48,113,122,128,233,247,205,224,18,21,113,144,201,179,55,218,73,52,220,30,60,121,76,3,153,168,18,124,169,20,17,75,219,111,51,115,3,133,91,153,160,83,177,192,77,213,105,121,40,75,29,242,111,139,108,45,4,2,125,155,196,0,211,146,0,126,208,157,16,200,165,134,191,205,56,224,52,110,37,16,82,82,193,133,194,122,100,188,108,107,236,99,218,54,25,252,166,84,69,82,232,47,2,107,159,22,112,115,171,128,155,155,0,158,165,2,220,20,102,235,1,206,109,23, +113,238,255,14,121,73,173,122,47,153,125,69,99,101,201,94,248,131,130,94,89,236,122,10,24,99,84,120,213,215,13,75,97,214,99,92,13,52,40,47,30,186,226,158,62,184,7,166,162,31,143,31,117,35,254,225,165,110,219,250,40,69,229,204,44,21,168,73,123,110,223,123,180,147,61,79,219,26,203,11,162,141,119,219,134,116,6,234,226,40,29,177,167,97,220,177,160,3,125,2,19,76,10,177,24,13,113,113,179,198,181,12,69,10,248,155,52,68,232,195,7,127,39,36,108,111,43,82,54,221,206,133,39,15,238,220,162,59,124,109,169,188,177,44,10,125,141,235,251,131,131,152,200,29,28,136,180,222,8,172,77,181,153,230,137,211,28,75,101,43,39,145,222,90,78,120,209,222,37,49,19,50,51,249,96,27,18,219,218,128,26,98,96,75,65,199,19,147,46,236,56,37,108,136,220,98,114,241,10,183,6,149,87,186,126,138,133,177,38,138,220,48,154,180,161,27,50,59,197,192,55,208,39,101,250,219,217,134,63,148,50,37,27,252,200,23,231,25,95,183,64,116,164,112,5,15, +109,249,121,27,222,254,249,243,64,11,59,235,156,65,105,74,81,42,81,211,45,47,209,107,186,178,209,194,211,211,23,87,141,82,253,111,172,27,246,75,44,217,49,212,253,165,149,27,88,49,172,183,248,46,4,16,91,7,234,203,70,73,30,168,137,75,237,233,26,88,96,217,180,14,148,230,118,160,52,227,160,204,214,128,2,171,131,20,217,192,5,160,15,35,20,35,17,166,23,67,113,150,116,68,10,226,38,85,253,197,196,42,206,8,214,244,214,22,232,118,53,197,49,174,57,163,180,156,187,26,5,16,77,184,193,90,92,128,181,116,38,152,51,60,29,225,158,117,107,144,254,160,79,234,134,36,211,19,170,27,243,30,40,219,34,245,129,210,117,216,231,241,37,112,0,143,32,157,15,56,51,215,112,195,133,38,15,200,198,220,198,46,96,138,98,127,86,96,79,83,122,128,233,20,152,112,90,7,120,200,18,144,239,217,158,142,120,215,186,53,72,191,86,84,117,171,27,162,97,173,41,54,69,189,73,186,7,178,73,118,136,194,29,9,68,44,245,212,118,169,155,93,184,189,117,252, +156,222,53,24,232,80,233,196,28,112,157,9,76,116,142,135,16,134,213,209,202,133,132,207,66,162,77,108,180,168,34,109,32,7,254,76,181,94,142,240,230,186,166,135,92,151,206,120,222,17,169,82,177,192,206,101,231,235,207,117,108,72,166,100,19,0,222,201,90,254,228,84,234,112,140,208,76,207,87,133,148,207,29,179,178,176,17,249,94,10,185,239,189,141,226,158,36,71,25,217,26,211,67,75,22,124,98,181,75,26,177,110,146,151,102,145,232,23,14,24,47,88,138,162,69,131,37,76,145,216,78,140,77,101,112,2,135,177,75,246,178,213,252,128,142,201,236,222,14,53,33,182,186,239,85,185,150,149,152,93,236,230,252,11,113,238,251,104,134,137,201,139,67,228,69,54,173,171,176,131,73,228,20,90,240,94,91,201,118,79,252,159,51,181,74,246,248,224,91,245,128,190,39,145,59,58,253,134,42,85,177,125,145,127,44,85,43,95,254,172,232,110,119,153,152,198,245,252,67,181,92,254,242,103,157,190,66,193,12,164,111,214,91,113,18,175,213,234,189,216,190,17,219,87,21,144, +123,213,245,145,133,96,22,82,126,234,154,13,67,214,12,184,80,233,122,188,207,43,67,171,180,61,92,21,34,181,153,184,235,200,115,202,150,234,122,14,89,54,38,103,141,229,120,187,86,169,90,223,44,84,191,169,54,196,118,169,114,93,5,122,217,129,93,13,102,254,158,14,78,239,144,35,130,154,172,58,244,48,34,59,166,75,95,48,124,161,103,15,155,224,111,24,85,200,235,112,120,65,47,179,173,81,170,20,170,13,102,27,57,232,74,236,96,39,54,33,182,85,44,219,16,83,157,89,240,206,216,130,117,212,241,98,187,124,117,253,24,184,159,188,209,28,64,138,147,121,40,21,111,56,33,247,104,246,42,169,167,90,32,226,24,171,219,3,188,74,32,1,192,180,57,25,238,45,127,212,106,253,15,217,67,209,183,