[libcamera-devel] [PATCH v5 1/2] ipa: rkisp1: Take into account color temperature during LSC algorithm
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Wed Nov 9 11:27:18 CET 2022
hi Paul,
On Wed, Nov 09, 2022 at 07:04:37PM +0900, Paul Elder wrote:
> On Wed, Nov 09, 2022 at 11:30:55AM +0200, Laurent Pinchart wrote:
> > On Tue, Nov 08, 2022 at 07:10:12PM +0100, Jacopo Mondi via libcamera-devel wrote:
> > > On Tue, Nov 08, 2022 at 06:24:07PM +0900, Paul Elder via libcamera-devel wrote:
> > > > From: Florian Sylvestre <fsylvestre at baylibre.com>
> > > >
> > > > Add coefficients sets in the YAML tuning file to allow using different set
> > > > depending of the image color temperature (provided by AWB algorithm).
> > > >
> > > > During processing, LSC algorithm computes coefficients by doing a linear
> > > > interpolation between the two closer set.
> > > >
> > > > Signed-off-by: Florian Sylvestre <fsylvestre at baylibre.com>
> > > > Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> > > >
> > > > ---
> > > > Changes in v5:
> > > > - fix cosmetic issues
> > > > - fix set0 and set1 (they were swapped)
> > > > - improve and simplify ct-rounding conditions
> > > >
> > > > Changes in v4:
> > > > - save both the original and adjusted color temperature
> > > > - for more correct decisions on skipping interpolation
> > > > - use map to store the LSC tables based on their color temperature
> > > > - for easier searching for available color temperatures LSC tables
> > > > - redesign the LSC color temperature selection
> > > > - fix conditions for skipping interpolation
> > > > - fix choosing the nearest color temperature LSC table
> > > > - it used to be that, if ct was within 10% of both the upper and
> > > > lower ct, the lower ct would be chosen unconditionally
> > > > ---
> > > > src/ipa/rkisp1/algorithms/lsc.cpp | 206 ++++++++++++++++++++++----
> > > > src/ipa/rkisp1/algorithms/lsc.h | 26 +++-
> > > > src/ipa/rkisp1/data/ov5640.yaml | 231 ++++++++++++++++++++----------
> > > > 3 files changed, 358 insertions(+), 105 deletions(-)
> > > >
> > > > diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > index e1c59033..9afa14ea 100644
> > > > --- a/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > +++ b/src/ipa/rkisp1/algorithms/lsc.cpp
> > > > @@ -7,6 +7,7 @@
> > > >
> > > > #include "lsc.h"
> > > >
> > > > +#include <algorithm>
> > > > #include <cmath>
> > > > #include <numeric>
> > > >
> > > > @@ -89,6 +90,7 @@ static std::vector<uint16_t> parseTable(const YamlObject &tuningData,
> > > > }
> > > >
> > > > LensShadingCorrection::LensShadingCorrection()
> > > > + : lastCt_({ 0, 0 })
> > > > {
> > > > }
> > > >
> > > > @@ -104,14 +106,46 @@ int LensShadingCorrection::init([[maybe_unused]] IPAContext &context,
> > > > if (xSize_.empty() || ySize_.empty())
> > > > return -EINVAL;
> > > >
> > > > - rData_ = parseTable(tuningData, "r");
> > > > - grData_ = parseTable(tuningData, "gr");
> > > > - gbData_ = parseTable(tuningData, "gb");
> > > > - bData_ = parseTable(tuningData, "b");
> > > > + /* Get all defined sets to apply. */
> > > > + const YamlObject &yamlSets = tuningData["sets"];
> > > > + if (!yamlSets.isList()) {
> > > > + LOG(RkISP1Lsc, Error)
> > > > + << "'sets' parameter not found in tuning file";
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > + const auto &sets = yamlSets.asList();
> > > > + for (const auto &yamlSet : sets) {
> > > > + uint32_t ct = yamlSet["ct"].get<uint32_t>(0);
> > > > +
> > > > + if (sets_.count(ct)) {
> > > > + LOG(RkISP1Lsc, Error)
> > > > + << "Multiple sets found for color temperature "
> > > > + << ct;
> > > > + return -EINVAL;
> > > > + }
> > > > +
> > > > + Components &set = sets_[ct];
> > > > +
> > > > + set.ct = ct;
> > > > + set.r = parseTable(yamlSet, "r");
> > > > + set.gr = parseTable(yamlSet, "gr");
> > > > + set.gb = parseTable(yamlSet, "gb");
> > > > + set.b = parseTable(yamlSet, "b");
> > > >
> > > > - if (rData_.empty() || grData_.empty() ||
> > > > - gbData_.empty() || bData_.empty())
> > > > + if (set.r.empty() || set.gr.empty() ||
> > > > + set.gb.empty() || set.b.empty()) {
> > > > + LOG(RkISP1Lsc, Error)
> > > > + << "Set for color temperature " << ct
> > > > + << " is missing tables";
> > > > + return -EINVAL;
> > > > + }
> > > > + }
> > > > +
> > > > + if (sets_.empty()) {
> > > > + LOG(RkISP1Lsc, Error) << "Failed to load any sets";
> > > > return -EINVAL;
> > > > + }
> > > >
> > > > return 0;
> > > > }
> > > > @@ -151,36 +185,160 @@ int LensShadingCorrection::configure(IPAContext &context,
> > > > return 0;
> > > > }
> > > >
> > > > +void LensShadingCorrection::writeTableRegs(rkisp1_params_cfg *params)
> > >
> > > I think a rename has been suggested in the prevous version, not
> > > because this function doesn't actually "Write Tables to Registers" but
> > > because this name and "copyTable" doesn't convey what part of the
> > > paramters structure they handle
> > >
> > > I would not mind if this function and the one below could be merged
> > > into one, as they effectively program parameters with a single table.
> > > The interpolate function would return a Component, which we can then
> > > pass to the unfied "fillParameters()" function.
> >
> > That would be less efficient though. I'm fine with separate functions to
> > write the LSC tables and the other LSC parameters, but I would indeed
> > like this function to be renamed.
>
> I'm having trouble coming up with a better name :/
>
> writeTableSize? writeTableSizeAndEnableLSC?
setParameters() ?
> > > It's a bit of redesign, and populating a Component to then write it to
> > > memory is indeed less efficient, so I'll leave it to you to decide how
> > > to better handle this.
> > >
> > > (At least it should be possible to call "writeTableRegs()" from
> > > "copyTable()" and "interpolateTable()")
> > >
> > > > +{
> > > > + struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> > > > +
> > > > + memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));
> > > > + memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));
> > > > + memcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));
> > > > + memcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));
> > > > +
> > > > + params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > + params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > + params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > +}
> > > > +
> > > > +void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,
> > > > + const Components &set)
> > > > +{
> > > > + std::copy(set.r.begin(), set.r.end(), &config.r_data_tbl[0][0]);
> > > > + std::copy(set.gr.begin(), set.gr.end(), &config.gr_data_tbl[0][0]);
> > > > + std::copy(set.gb.begin(), set.gb.end(), &config.gb_data_tbl[0][0]);
> > > > + std::copy(set.b.begin(), set.b.end(), &config.b_data_tbl[0][0]);
> > > > +}
> > > > +
> > > > +/*
> > > > + * Interpolate LSC parameters based on color temperature value.
> > > > + */
> > > > +void LensShadingCorrection::interpolateTable(rkisp1_cif_isp_lsc_config &config,
> > > > + const Components &set0,
> > > > + const Components &set1,
> > > > + const uint32_t ct)
> > > > +{
> > > > + double coeff0 = (set1.ct - ct) / (set1.ct - set0.ct);
> > > > + double coeff1 = (ct - set0.ct) / (set1.ct - set0.ct);
> > > > +
> > > > + for (unsigned int i = 0; i < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++i) {
> > > > + for (unsigned int j = 0; j < RKISP1_CIF_ISP_LSC_SAMPLES_MAX; ++j) {
> > > > + unsigned int sample = i * RKISP1_CIF_ISP_LSC_SAMPLES_MAX + j;
> > > > +
> > > > + config.r_data_tbl[i][j] =
> > > > + set0.r[sample] * coeff0 +
> > > > + set1.r[sample] * coeff1;
> > > > +
> > > > + config.gr_data_tbl[i][j] =
> > > > + set0.gr[sample] * coeff0 +
> > > > + set1.gr[sample] * coeff1;
> > > > +
> > > > + config.gb_data_tbl[i][j] =
> > > > + set0.gb[sample] * coeff0 +
> > > > + set1.gb[sample] * coeff1;
> > > > +
> > > > + config.b_data_tbl[i][j] =
> > > > + set0.b[sample] * coeff0 +
> > > > + set1.b[sample] * coeff1;
> > > > + }
> > > > + }
> > > > +}
> > > > +
> > > > /**
> > > > * \copydoc libcamera::ipa::Algorithm::prepare
> > > > */
> > > > -void LensShadingCorrection::prepare([[maybe_unused]] IPAContext &context,
> > > > +void LensShadingCorrection::prepare(IPAContext &context,
> > > > const uint32_t frame,
> > > > [[maybe_unused]] IPAFrameContext &frameContext,
> > > > rkisp1_params_cfg *params)
> > > > {
> > > > - if (frame > 0)
> > > > + struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> > > > +
> > > > + /*
> > > > + * If there is only one set, the configuration has already been done
> > > > + * for first frame.
> > > > + */
> > > > + if (sets_.size() == 1 && frame > 0)
> > > > return;
> > > >
> > > > - struct rkisp1_cif_isp_lsc_config &config = params->others.lsc_config;
> > > > + /*
> > > > + * If there is only one set, pick it. We can ignore lastCt_, as it will
> > > > + * never be relevant.
> > > > + */
> > > > + if (sets_.size() == 1) {
> > > > + writeTableRegs(params);
> > > > + copyTable(config, sets_.cbegin()->second);
> > > > + return;
> > > > + }
> > > >
> > > > - memcpy(config.x_grad_tbl, xGrad_, sizeof(config.x_grad_tbl));
> > > > - memcpy(config.y_grad_tbl, yGrad_, sizeof(config.y_grad_tbl));
> > > > - memcpy(config.x_size_tbl, xSizes_, sizeof(config.x_size_tbl));
> > > > - memcpy(config.y_size_tbl, ySizes_, sizeof(config.y_size_tbl));
> > > > + uint32_t ct = context.activeState.awb.temperatureK;
> > > > + ct = std::clamp(ct, sets_.cbegin()->first, sets_.crbegin()->first);
> > > > +
> > > > + /*
> > > > + * If the original is the same, then it means the same adjustment would
> > > > + * be made. If the adjusted is the same, then it means that it's the
> > > > + * same as what was actually applied. Thus in these cases we can skip
> > > > + * reprogramming the LSC.
> > > > + *
> > > > + * ctOriginal == ctAdjusted can only happen if an interpolation
> > > > + * happened, or if ctOriginal has an exact entry in sets_. This means
> > > > + * that if ctOriginal != ctAdjusted, then ctOriginal was adjusted to
> > > > + * the nearest available entry in sets_, resulting in ctAdjusted.
> > > > + * Clearly, any ct value that is in between ctOriginal and ctAdjusted
> > > > + * will be adjusted to the same ctAdjusted value, so we can skip
> > > > + * reprogramming the LSC table.
> > > > + *
> > > > + * We also skip updating the ctOriginal value, as the last one has a
> > > > + * larger bound and thus a larger range of ct values that will be
> > > > + * adjusted to the same ctAdjusted.
> > > > + */
> > > > + if ((lastCt_.ctOriginal <= ct && ct <= lastCt_.ctAdjusted) ||
> > > > + (lastCt_.ctAdjusted <= ct && ct <= lastCt_.ctOriginal))
> > > > + return;
> > >
> > > I think I got what is happening here and I think it's fine.
> > > Actually the second paragraph in the comment drove me a bit off road,
> > > I would shorten it to
> > >
> > > /*
> > > * The color temperature used in the last run is stored in
> > > * lastCt_ as the original target temperature and the closest
> > > * one from sets_ it has been adjusted to.
> >
> > That's not correct, ctAdjusted doesn't necessarily correspond to one of
> > the tables from the tuning data, it can also be an intermediate value
> > when interpolating.
> >
> > > *
> > > * If the current target color temperature is included in
> > > * between the original and the adjusted temperatures, the
> > > * same adjustment will be done again, thus we can skip
> > > * reprogramming the LSC.
> > > *
> > > * ctOriginal == ctAdjusted can only happen if an interpolation
> > > * happened or if ctOriginal has an exact entry in sets_. In
> > > * this case if the target temperature doesn't match exactly, we will
> > > * have to recompute.
> > > *
> > > * We also skip updating the ctOriginal value, as the last one has a
> > > * larger bound and thus a larger range of ct values that will be
> > > * adjusted to the same ctAdjusted.
> > > */
> > > if ((lastCt_.ctOriginal <= ct && ct <= lastCt_.ctAdjusted) ||
> > > (lastCt_.ctAdjusted <= ct && ct <= lastCt_.ctOriginal))
> > > return;
> > >
> > > >
> > > > - std::copy(rData_.begin(), rData_.end(),
> > > > - &config.r_data_tbl[0][0]);
> > > > - std::copy(grData_.begin(), grData_.end(),
> > > > - &config.gr_data_tbl[0][0]);
> > > > - std::copy(gbData_.begin(), gbData_.end(),
> > > > - &config.gb_data_tbl[0][0]);
> > > > - std::copy(bData_.begin(), bData_.end(),
> > > > - &config.b_data_tbl[0][0]);
> > > > + writeTableRegs(params);
> > > >
> > > > - params->module_en_update |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > - params->module_ens |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > - params->module_cfg_update |= RKISP1_CIF_ISP_MODULE_LSC;
> > > > + /*
> > > > + * The color temperature matches exactly one of the available LSC tables.
> > > > + */
> > > > + if (sets_.count(ct)) {
> > > > + copyTable(config, sets_[ct]);
> > > > + lastCt_ = { ct, ct };
> > > > + return;
> > > > + }
> > > > +
> > > > + /* No shortcuts left; we need to round or interpolate */
> > > > + auto iter = sets_.upper_bound(ct);
> > > > + const Components &set1 = iter->second;
> > > > + const Components &set0 = (--iter)->second;
> > > > + uint32_t ct0 = set0.ct;
> > > > + uint32_t ct1 = set1.ct;
> > > > + uint32_t diff0 = ct - ct0;
> > > > + uint32_t diff1 = ct1 - ct;
> > > > + static constexpr double kThreshold = 0.1;
> > > > + float thresh = kThreshold * (ct1 - ct0);
> >
> > s/thresh/threshold/
> >
> > > The threshold will here depend on the distribution of the color
> > > temperatures in the configuration file. If ct1 and ct0 are very far
> > > apart, we will allow larger intervals. I guess it's fine, the
> > > alternative would be to compute the threshold on the target color
> > > temperature, but then the accepted interval would increase as the
> > > color temperature increses, something that doesn't make sense..
> >
> > v4 used kThreshold * ct, and I complained about it for the reason you
> > describe here :-)
> >
> > > > +
> > > > + if (diff0 < thresh) {
> > > > + LOG(RkISP1Lsc, Debug) << "using LSC table for " << ct0;
> > > > + copyTable(config, set0);
> > > > + lastCt_ = { ct, ct0 };
> > > > + return;
> > > > + }
> > > > +
> > > > + if (diff1 < thresh) {
> > > > + LOG(RkISP1Lsc, Debug) << "using LSC table for " << ct1;
> > > > + copyTable(config, set1);
> > > > + lastCt_ = { ct, ct1 };
> > > > + return;
> > > > + }
> >
> > Don't you need to pick the closest one, like in v4 ?
>
> Not anymore. The way that thresh is defined means that it can never be
> the case that diff0 *and* diff1 are less than thresh.
>
> Do I need a proof...?
>
> Proposition: Let
> - ct, ct0, and ct1 be integers such that ct0 < ct < ct1
> - diff0 = ct - ct0
> - diff1 = ct1 - ct
> - thresh = 0.1 * (ct1 - ct0)
> diff0 and diff1 cannot both be less than thresh. That is, if one of
> the two is less than thresh, then the other cannot also be less than
> thresh.
>
> Proof:
>
> Assume for the purpose of contradiction that diff0 and diff1 are both
> less than thresh. This gives us the following equations:
>
> 1: ct - ct0 < thresh
> 2: ct1 - ct < thresh
>
> Let us transform equations 1 and 2 into equations 3 and 4 respectively,
> into terms of ct:
>
> ct - ct0 < thresh
> 3: ct < thresh + ct0
>
> ct1 - ct < thresh
> -ct < thresh - ct1
> 4: ct > ct1 - thresh
>
> Combining equations 3 and 4 we get:
>
> ct1 - thresh < ct < thresh + ct0
>
> Let's expand thresh:
>
> ct1 - 0.1 * (ct1 - ct0) < ct < 0.1 * (ct1 - ct0) + ct0
> ct1 - 0.1*ct1 + 0.1*ct0 < ct < 0.1*ct1 - 0.1*ct0 + ct0
> 0.9*ct1 + 0.1*ct0 < ct < 0.1*ct1 + 0.9*ct0
>
> Clearly can get rid of ct and just compare the two boundaries, based on
> transitivity. Since ct0 is less than ct1 based on the axioms of the
> proposition, let's move ct0 to the left and ct1 to the right:
>
> 0.9*ct1 + 0.1*ct0 < 0.1*ct1 + 0.9*ct0
> 0.1*ct0 - 0.9*ct0 < 0.1*ct1 - 0.9*ct1
> -0.8*ct0 < -0.8*ct1
> ct0 > ct1
>
> And we have a contradiction with the assumption based on the
> proposition, thereby proving the proposition to be true.
>
> QED
:-)
> Corollary: The proposition holds for any kThreshold that is between 0
> and 1 exclusive.
>
> >
> > if (diff0 < thresh || diff1 < thresh) {
> > const Components &set = diff0 < diff1 ? set0 : set1;
> > LOG(RkISP1Lsc, Debug) << "using LSC table for " << set.ct;
> > copyTable(config, set);
> > lastCt_ = { ct, set.ct };
> > return;
> > }
This construct produces less code though. Up to you.
> > > > +
> > > > + /*
> > > > + * ct is not within 10% of the difference between the neighbouring
> > > > + * color temperatures, so we need to interpolate.
> > > > + */
> > > > + LOG(RkISP1Lsc, Debug)
> > > > + << "ct is " << ct << ", interpolating between "
> > > > + << ct0 << " and " << ct1;
> > > > + interpolateTable(config, set0, set1, ct);
> > > > + lastCt_ = { ct, ct };
> > > > }
> > > >
> > > > REGISTER_IPA_ALGORITHM(LensShadingCorrection, "LensShadingCorrection")
> > > > diff --git a/src/ipa/rkisp1/algorithms/lsc.h b/src/ipa/rkisp1/algorithms/lsc.h
> > > > index da81ea53..7c0b634c 100644
> > > > --- a/src/ipa/rkisp1/algorithms/lsc.h
> > > > +++ b/src/ipa/rkisp1/algorithms/lsc.h
> > > > @@ -7,6 +7,8 @@
> > > >
> > > > #pragma once
> > > >
> > > > +#include <map>
> > > > +
> > > > #include "algorithm.h"
> > > >
> > > > namespace libcamera {
> > > > @@ -26,17 +28,31 @@ public:
> > > > rkisp1_params_cfg *params) override;
> > > >
> > > > private:
> > > > - std::vector<uint16_t> rData_;
> > > > - std::vector<uint16_t> grData_;
> > > > - std::vector<uint16_t> gbData_;
> > > > - std::vector<uint16_t> bData_;
> > > > -
> > > > + struct Components {
> > > > + uint32_t ct;
> > > > + std::vector<uint16_t> r;
> > >
> > > Missing #include <vector>
> >
> > Not a new issue, but nice to fix indeed.
> >
> > > > + std::vector<uint16_t> gr;
> > > > + std::vector<uint16_t> gb;
> > > > + std::vector<uint16_t> b;
> > > > + };
> > > > +
> > > > + void writeTableRegs(rkisp1_params_cfg *params);
> > > > + void copyTable(rkisp1_cif_isp_lsc_config &config, const Components &set0);
> > > > + void interpolateTable(rkisp1_cif_isp_lsc_config &config,
> > > > + const Components &set0, const Components &set1,
> > > > + const uint32_t ct);
> > > > +
> > > > + std::map<uint32_t, Components> sets_;
> > > > std::vector<double> xSize_;
> > > > std::vector<double> ySize_;
> > > > uint16_t xGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > uint16_t yGrad_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > uint16_t xSizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > uint16_t ySizes_[RKISP1_CIF_ISP_LSC_SECTORS_TBL_SIZE];
> > > > + struct {
> > > > + uint32_t ctOriginal;
> > > > + uint32_t ctAdjusted;
> > >
> > > nit: the structure is named "Ct" already. I would name the members
> > > "original" (or target) and "adjusted".
> >
> > I forgot to mention that in the review of the preview version :-)
> >
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >
> > > Anyway, all minors and details, the logic is there and works
> > > Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> > >
> > > > + } lastCt_;
> > > > };
> > > >
> > > > } /* namespace ipa::rkisp1::algorithms */
> > > > diff --git a/src/ipa/rkisp1/data/ov5640.yaml b/src/ipa/rkisp1/data/ov5640.yaml
> > > > index 3dc369ac..897b83cb 100644
> > > > --- a/src/ipa/rkisp1/data/ov5640.yaml
> > > > +++ b/src/ipa/rkisp1/data/ov5640.yaml
> > > > @@ -20,82 +20,161 @@ algorithms:
> > > > - LensShadingCorrection:
> > > > x-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> > > > y-size: [ 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625, 0.0625 ]
> > > > - r: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - gr: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - gb: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > - b: [
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > - ]
> > > > + sets:
> > > > + - ct: 3000
> > > > + r: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + gr: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + gb: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + b: [
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024, 1024,
> > > > + ]
> > > > + - ct: 7000
> > > > + r: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + gr: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + gb: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > + b: [
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536,
> > > > + ]
> > > > - DefectPixelClusterCorrection:
> > > > fixed-set: false
> > > > sets:
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list