diff mbox

[FFmpeg-devel,GSoC] srcnn - a super resolution filter using CNN

Message ID 1970b8b6-afca-7ed6-da86-7b7b956b1090@gmail.com
State New
Headers show

Commit Message

Mina March 25, 2018, 8:27 a.m. UTC
Hi,

   This patch is introduced as a qualification task required by Super 
Resolution project for GSoC. It passes patchcheck and make fate, doesn't 
introduce new warnings and gives expected results for all tested images. 
It's implemented by the help of the mentor: Pedro Arthur.

Best regards,
Mina Sami.

Comments

Mina April 13, 2018, 12:04 p.m. UTC | #1
Hi,

   I haven't received any feedback regarding this qualification task 
whether it's accepted or not. So, with less than 10 days left for GSoC, 
I thought I was ask for any reviews about my task so that I can fix it 
if anything needs fixing. Thanks in advance.

Best regards,
Mina Sami.


On 03/25/2018 10:27 AM, Mina wrote:
> Hi,
>
>   This patch is introduced as a qualification task required by Super 
> Resolution project for GSoC. It passes patchcheck and make fate, 
> doesn't introduce new warnings and gives expected results for all 
> tested images. It's implemented by the help of the mentor: Pedro Arthur.
>
> Best regards,
> Mina Sami.
>
diff mbox

Patch

From bf8ac38cee36886f6c317681a16aecfa5dee0752 Mon Sep 17 00:00:00 2001
From: MinaBombo <minasamy_@hotmail.com>
Date: Sat, 24 Mar 2018 21:15:08 +0200
Subject: [PATCH] Added srcnn filter

---
 Changelog                   |   1 +
 libavfilter/Makefile        |   1 +
 libavfilter/allfilters.c    |   1 +
 libavfilter/srcnn_weights.h | 290 ++++++++++++++++++++++++++++++++++++++++++++
 libavfilter/vf_srcnn.c      | 264 ++++++++++++++++++++++++++++++++++++++++
 5 files changed, 557 insertions(+)
 create mode 100644 libavfilter/srcnn_weights.h
 create mode 100644 libavfilter/vf_srcnn.c

diff --git a/Changelog b/Changelog
index c1b9df4..e153f12 100644
--- a/Changelog
+++ b/Changelog
@@ -46,6 +46,7 @@  version <next>:
   They can be found at http://git.videolan.org/?p=ffmpeg/nv-codec-headers.git
 - native SBC encoder and decoder
 - drmeter audio filter
+- Added image SRCNN(Super Resolution Convolutional Neural Network) filter. No training yet.
 
 
 version 3.4:
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index fc16512..b37a956 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -323,6 +323,7 @@  OBJS-$(CONFIG_SMARTBLUR_FILTER)              += vf_smartblur.o
 OBJS-$(CONFIG_SOBEL_FILTER)                  += vf_convolution.o
 OBJS-$(CONFIG_SPLIT_FILTER)                  += split.o
 OBJS-$(CONFIG_SPP_FILTER)                    += vf_spp.o
+OBJS-$(CONFIG_SRCNN_FILTER)                  += vf_srcnn.o
 OBJS-$(CONFIG_SSIM_FILTER)                   += vf_ssim.o framesync.o
 OBJS-$(CONFIG_STEREO3D_FILTER)               += vf_stereo3d.o
 OBJS-$(CONFIG_STREAMSELECT_FILTER)           += f_streamselect.o framesync.o
diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index cc423af..42f409c 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -332,6 +332,7 @@  static void register_all(void)
     REGISTER_FILTER(SOBEL,          sobel,          vf);
     REGISTER_FILTER(SPLIT,          split,          vf);
     REGISTER_FILTER(SPP,            spp,            vf);
+    REGISTER_FILTER(SRCNN,          srcnn,          vf);
     REGISTER_FILTER(SSIM,           ssim,           vf);
     REGISTER_FILTER(STEREO3D,       stereo3d,       vf);
     REGISTER_FILTER(STREAMSELECT,   streamselect,   vf);
diff --git a/libavfilter/srcnn_weights.h b/libavfilter/srcnn_weights.h
new file mode 100644
index 0000000..d6ac79c
--- /dev/null
+++ b/libavfilter/srcnn_weights.h
@@ -0,0 +1,290 @@ 
+/*
+ * Copyright (c) 2018 Mina Sami
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Super resolution filter pretrained weights
+ *
+ * @see https://arxiv.org/abs/1501.00092
+ */
+
+#ifndef AVFILTER_SRCNN_WEIGHTS_H
+#define AVFILTER_SRCNN_WEIGHTS_H
+
+const int ff_cnn_num_filters[] = {
+    1, 64, 32, 1
+};
+
+const int ff_cnn_size_filters[] = {
+    1, 9, 1, 5
+};
+
+static const float weights1_64x81[] = {
+    -0.088663,0.05541,0.037197,-0.11961,-0.12342,0.29963,-0.091182,-0.00013614,-0.049024,0.038421,-0.077268,0.027273,0.45762,0.023582,-0.20364,-0.077384,0.072884,0.066799,-0.073151,0.26653,0.078364,-0.28985,-0.50691,0.044665,-0.062469,-0.024425,-0.029073,-0.16885,0.20686,-0.25367,-0.385,-0.12602,0.72579,0.095884,-0.044873,-0.011252,-0.029559,0.22117,-0.38453,-0.05351,0.10956,0.37257,-0.28968,-0.10884,0.19629,0.097468,-0.0056471,-0.13036,0.62543,0.19104,-0.011692,-0.27068,-0.030754,0.029876,0.016809,-0.18318,-0.16016,0.35983,-0.1889,-0.22343,-0.11112,0.32211,-0.18514,-0.06647,0.18006,-0.03566,-0.25352,-0.1837,0.28395,0.0030237,0.24073,-0.14355,0.047419,-0.032212,-0.088013,0.29592,0.041087,-0.10354,-0.11681,-0.010267,0.023704,
+    -0.043954,0.095339,0.12234,-0.052115,0.068812,0.057649,0.086867,-0.12001,0.023536,-0.022271,-0.063779,0.010644,-0.27824,-0.2372,-0.21418,-0.09665,0.10459,0.065994,-0.031174,-0.034654,0.022144,-0.24322,-0.089236,-0.027248,-0.093149,-0.03741,0.078197,0.12521,0.1119,0.34982,0.24304,0.21351,0.37121,0.12193,-0.15492,0.01884,-0.083511,-0.3055,-0.11462,-0.11834,-0.35028,-0.0077491,-0.051849,-0.14424,-0.040476,0.18358,0.16708,0.074863,0.17893,0.12331,0.16825,-0.040669,0.12499,0.12445,-0.085298,-0.23087,-0.24264,-0.0033643,-0.019014,0.0074067,-0.097625,0.097274,-0.14308,0.20925,0.047316,0.17839,0.20143,-0.21384,-0.16858,0.077692,0.11478,0.0022495,-0.095247,-0.11904,-0.11904,0.11935,0.040787,-0.078733,0.19329,-0.060085,-0.036192,
+    -0.035089,-0.021296,0.044676,0.035148,0.047733,-0.036009,-0.098195,-0.074646,0.16331,0.057661,-0.060684,0.023711,0.040779,0.019528,-0.047095,-0.0026468,0.013081,-0.048433,-0.055471,-0.0075115,-0.0018498,0.0063248,0.083345,-0.035346,-0.058733,-0.11715,-0.049685,-0.010658,0.088404,0.068287,0.02097,0.26205,0.11938,0.042141,-0.064057,-0.047907,0.054826,0.074022,0.21512,0.25781,0.42716,0.18216,0.12531,0.1039,-0.010483,-0.075873,-0.012898,0.10066,0.073731,0.15949,-0.086111,0.0066838,0.10756,-0.10216,-0.12101,0.0095138,0.046046,0.067059,0.21903,0.026905,0.0053239,0.0006765,-0.042837,-0.025259,-0.0097077,-0.00097897,0.043258,0.088092,0.018156,-0.012796,-0.10799,0.044633,0.13564,0.033342,-0.12863,-0.13122,-0.0092303,-0.019398,-0.0058522,-0.055109,-0.039393,
+    0.036043,-0.017754,0.012287,0.088192,-0.042565,-0.084126,0.0034042,0.09514,-0.019552,-0.096748,0.18024,-0.080905,-0.24444,0.0068569,0.13042,0.025669,-0.23943,0.044755,-0.016099,-0.18014,-0.11965,0.15632,0.23565,-0.016447,0.08861,0.030304,0.037085,0.20705,-0.30848,0.29852,0.51718,0.0081607,-0.31129,-0.12308,0.23215,-0.034601,-0.053407,0.10226,0.21642,-0.006494,-0.25076,-0.20449,0.050536,0.12136,-0.24143,-0.28441,0.33926,-0.18577,-0.49421,-0.097031,0.0031087,0.15143,-0.08353,0.11526,0.15755,0.11142,0.0034581,-0.17606,0.16818,0.091053,0.039176,-0.09479,0.056351,0.025232,-0.2455,0.063366,0.16319,0.21758,-0.10586,-0.082367,0.069699,-0.024705,-0.053975,0.1787,-0.027807,-0.19675,-0.10373,0.0085135,0.1325,-0.045926,-0.0030839,
+    -0.040478,0.049372,-0.13667,0.13787,-0.13876,0.29655,0.17231,-0.13067,-0.04865,0.044596,-0.031414,0.031237,0.147,-0.48831,-0.44783,-0.32053,0.22293,0.11626,0.030553,-0.13196,-0.095849,0.070506,-0.14856,0.10479,-0.16068,-0.1229,-0.13379,0.024233,0.23596,-0.021007,0.18905,0.50857,0.63729,0.21577,0.011278,0.18822,-0.15459,-0.040722,-0.10378,-0.2068,-0.0048381,-0.08054,-0.20551,-0.16877,-0.13455,0.24717,-0.055627,0.26783,-0.060781,-0.30376,-0.16148,0.13624,0.29368,0.047969,-0.030662,-0.30584,-0.080031,0.10656,-0.018742,0.035879,-0.025629,-0.11311,-0.14456,0.040502,0.28121,-0.058496,0.095959,-0.0041209,0.14833,0.051879,-0.02498,0.12018,-0.05971,-0.027001,-0.15201,0.17206,-0.10739,-0.042039,-0.051566,0.047358,-0.020337,
+    0.079236,0.019853,0.048437,-0.0024803,-0.030446,0.043048,-0.020504,-0.066098,0.12098,0.0073249,-0.12225,-0.053232,-0.057646,-0.020267,-0.024209,-0.0054552,0.009972,0.023966,-0.0081485,-0.005119,0.021226,-0.007966,0.088076,0.0141,-0.025872,-0.077256,0.03291,0.034313,0.097762,0.13438,0.052046,0.23554,0.18288,0.096931,-0.050401,-0.048322,-0.09905,-0.0074815,0.19847,0.14759,0.23091,0.13734,0.13091,0.092883,-0.052742,-0.17167,-0.043067,0.14391,0.038292,0.087384,-0.029238,0.063961,0.12762,-0.028018,-0.12652,0.024752,0.10589,0.098873,0.24563,0.1253,0.061612,-0.024126,0.0072478,-0.047856,0.013433,0.034828,0.07723,0.10088,0.044684,-0.020416,-0.15163,-0.0034704,0.12244,0.039203,-0.069308,-0.015425,-0.016137,-0.045814,0.013486,0.024089,0.016877,
+    0.1252,-0.041655,0.038983,-0.22599,-0.093941,0.19191,0.029383,0.10377,-0.24926,-0.043931,-0.36712,0.31547,0.3685,0.035715,-0.22951,-0.32223,0.11627,0.36968,0.07823,-0.033943,-0.16881,-0.10228,0.1062,0.18821,0.23803,-0.34088,-0.071263,0.061694,0.43413,0.018765,-0.51687,-0.18586,0.023196,0.41149,-0.16325,-0.046247,-0.24676,-0.24048,0.50968,-0.11603,-0.16423,-0.41469,0.031696,0.28646,-0.049831,0.28279,-0.52987,0.44763,0.3877,0.10861,-0.45159,-0.28046,0.25342,-0.0061804,0.061705,-0.42083,-0.30816,0.30253,0.42957,0.21555,0.13188,-0.20663,-0.040693,0.12084,0.54645,-0.072813,-0.38351,-0.27154,-0.075712,0.18073,-0.099786,-0.018041,-0.069594,-0.39042,0.31299,0.034528,0.025153,0.10656,-0.11173,0.037484,0.047296,
+    0.096831,-0.049027,-0.037624,0.10789,-8.22e-06,-0.14364,-0.16597,-0.086689,0.18113,0.18681,-0.031499,0.046268,0.18094,0.13341,-0.0080298,-0.012184,0.017653,-0.14602,0.02609,-0.028548,0.028875,0.050831,0.02065,-0.083282,-0.023063,0.010069,-0.12333,0.053707,-0.032472,-0.039362,-0.088298,-0.13766,-0.1136,0.013083,0.022561,0.13207,0.13662,0.046251,0.058867,0.00079787,-0.01275,-0.010349,0.074101,0.07396,0.18698,-0.047332,0.048088,0.083055,0.030248,0.066442,0.012841,0.035764,0.021402,0.069812,-0.25764,-0.042094,0.0068166,0.053384,0.08177,0.051338,0.11271,0.017544,0.073575,-0.084095,-0.034382,0.00063496,0.1034,0.034956,-0.052124,-0.012171,-0.069775,0.0771,0.19583,-0.11509,-0.063936,0.067016,0.034071,0.023427,-0.012323,-0.0040504,0.073502,
+    -0.050631,0.085424,-0.067135,-0.01852,-0.33999,0.059591,0.02107,0.021753,-0.067537,0.01039,-0.11543,-0.0027277,0.10987,0.2609,0.15582,-0.10302,0.017184,0.038744,0.10182,-0.042675,-0.05238,0.14568,0.22389,0.01804,-0.12594,0.1043,-0.033157,-0.14967,0.16409,-0.059988,-0.015551,-0.46873,0.0081571,0.011156,-0.00060087,0.00054899,-0.24311,0.32611,0.21653,-0.22605,-0.9168,-0.17664,0.21353,0.32204,-0.22002,0.0037587,0.029378,0.051969,0.0074238,-0.3209,-0.15943,-0.08669,0.17429,-0.2017,0.11773,-0.09073,-0.18744,0.11423,0.1911,0.04378,-0.019696,0.034574,0.10653,-0.007747,0.057167,-0.074287,0.10681,0.2351,0.11015,0.0052975,-0.092461,0.083429,-0.057549,0.038701,0.042864,0.0042764,-0.28811,-0.012604,0.029502,0.066303,-0.043212,
+    -0.040782,-0.12889,0.0037809,-0.044991,-0.174,-0.088972,-0.076212,-0.13595,0.14221,0.1424,-0.029454,0.13097,0.11729,0.05685,0.10261,0.13641,0.066823,0.041533,-0.061906,-0.034822,0.13024,0.087793,-0.0091059,-0.084568,-0.02162,-0.050306,-0.056489,-0.075944,0.094752,0.19543,0.13115,0.011391,-0.14204,-0.053267,-0.053505,0.037627,-0.11649,0.072872,0.15282,0.12073,0.12067,-0.0056083,0.04572,0.024192,0.048591,-0.17068,-0.056729,-0.012579,-0.092276,0.022302,0.00049325,0.0095081,0.0031514,-0.0088967,-0.054137,0.047616,0.061746,0.024429,0.12186,0.091697,0.047003,-0.0075268,0.019864,-0.014247,0.00074751,0.00031564,0.047637,0.063831,0.0032783,-0.015528,-0.094335,-0.0087748,0.11492,-0.086722,-0.13946,-0.11358,-0.063979,0.0059381,0.036852,0.0073831,0.017816,
+    0.12232,-0.13326,0.02587,0.10825,0.10331,0.2564,-0.05961,-0.10639,0.0039591,-0.11813,-0.047825,0.12822,-0.044033,-0.26355,0.091526,0.19479,0.20144,-0.06888,0.09495,0.00086272,0.11728,-0.10687,-0.42762,-0.2273,-0.24314,-0.063565,-0.055582,0.032845,-0.14489,-0.064547,0.035593,0.16276,0.43327,-0.03526,0.079954,0.3216,-0.02788,0.069243,-0.027636,-0.073631,0.0028215,0.19948,-0.32169,-0.21487,-0.02214,0.040326,0.17998,0.1057,0.06988,-0.039485,-0.012861,-0.1396,0.058893,-0.028117,-0.10384,-0.14942,-0.15001,0.0046144,-0.096503,-0.030123,0.071898,0.1502,0.0088141,0.03591,0.021772,0.0057695,0.094029,0.015208,0.09445,0.027698,-0.067443,-0.076762,0.014582,-0.0036741,0.063294,-0.054385,-0.053589,0.028128,-0.090204,0.069442,0.014859,
+    -0.0051602,0.013759,0.062362,0.10194,0.053055,-0.23131,-0.22593,0.03435,0.13069,-0.10505,0.055357,-0.026555,-0.016222,-0.067338,0.29509,0.24902,-0.045863,-0.13178,-0.0017491,-0.10163,-0.19645,-0.2107,-0.36477,0.14709,0.1371,-0.030173,0.041727,0.23463,0.12249,0.161,0.28751,0.065775,-0.049968,-0.16704,-0.11296,0.032326,-0.19468,-0.19403,-0.13891,0.28837,0.17562,0.058869,-0.15678,-0.20327,0.25535,-0.038207,0.10567,-0.055865,0.048038,0.037081,0.32004,0.10981,-0.15385,0.028808,0.15569,0.17938,-0.074482,-0.28562,-0.35392,-0.023578,-0.033707,0.010183,0.014598,0.043775,-0.13171,-0.039992,0.0389,-0.097512,-0.052089,0.01067,0.053134,-0.0034349,-0.17609,0.065427,0.10833,0.12016,0.20534,0.022899,-0.0052262,-0.041576,-0.017493,
+    0.04755,0.02836,-0.09969,0.053056,0.06712,-0.024951,0.096333,0.12241,0.066721,-0.14969,0.0069655,-0.010117,0.11533,0.070655,-0.059817,0.056025,0.11349,-0.07753,0.0063369,0.11752,0.026647,0.056599,0.023606,-0.10964,-0.042334,0.061614,0.0057253,0.026712,0.011556,-0.13339,-0.12263,-0.053669,-0.093833,-0.025312,0.040834,0.11758,0.068973,0.090254,-0.048477,-0.044286,-0.0099451,-0.081492,-0.015064,0.0085498,0.059295,0.081214,0.18623,0.024635,0.059,0.06015,-0.04819,0.056722,0.008929,-0.04535,0.031576,0.073812,-0.10185,0.0071176,0.065901,0.033646,0.14542,0.040063,-0.019146,0.041676,0.011366,-0.098442,-0.013422,-0.03246,-0.080806,-0.0064284,-0.05744,-0.080713,-0.073422,-0.043173,0.051688,0.18833,0.037167,-0.10184,-0.032891,0.0048193,-0.027332,
+    0.1152,-0.10765,-0.030569,-0.020864,-0.079977,-0.12052,-0.058285,-0.14723,-0.067705,-0.015621,0.015726,0.14131,0.11011,0.048104,0.075433,0.091275,0.087189,0.23427,-0.1415,-0.0091307,-0.038059,0.017746,0.12451,0.1004,-0.023617,-0.077924,-0.046339,0.085302,0.13883,-0.064842,-0.057418,-0.0055942,-0.048823,0.020849,0.11939,0.036202,0.013776,-0.052864,-0.12257,-0.031724,-0.15581,-0.33504,-0.17516,0.055541,-0.068662,0.051852,0.010789,0.091042,0.24158,0.14323,-0.061515,0.035073,0.21046,-0.013173,-0.02704,-0.080006,-0.04612,0.029197,-0.012629,-0.10133,-0.017108,0.11032,-0.0014046,0.064285,0.025128,-0.012447,-0.0046359,-0.10815,-0.22873,-0.050878,0.079038,0.0074359,-0.026908,0.03015,-0.0032097,-0.0070982,-0.022754,-0.11266,0.086254,0.11682,-0.11312,
+    0.1639,0.083083,0.044148,0.08043,0.063701,-0.10228,-0.10279,-0.11454,-0.13203,-0.1876,-0.26387,-0.0045002,0.069321,0.12449,0.14222,0.32879,0.34202,0.081833,0.21325,-0.22494,-0.12726,0.091477,0.12901,-0.030734,-0.27371,-0.10409,0.14721,0.10748,-0.16,-0.0501,-0.087015,-0.20689,0.071161,-0.23476,-0.26232,-0.013499,0.025579,-0.20042,0.2019,0.092999,-0.11281,0.39265,0.075301,-0.12663,0.067624,0.15581,-0.1886,0.13877,-0.019524,-0.097933,0.18236,-0.16306,-0.088393,0.11949,-0.059917,-0.14886,0.09462,-0.08511,-0.13966,0.24795,0.11795,0.050693,-0.012115,0.044573,-0.04816,0.18829,0.19097,-0.28104,-0.095599,-0.024672,-0.089508,-0.13805,0.0033542,-0.056686,-0.088219,-0.06438,0.061702,0.20626,-0.13128,0.13963,0.028703,
+    -0.043307,0.047828,0.022598,0.028203,0.11307,0.046208,0.033251,0.013018,-0.030189,-0.094285,0.0083047,-0.012987,-0.014565,-0.017758,-0.087058,-0.0072895,0.033061,-0.074576,-0.04535,0.098276,0.011267,0.014673,0.082314,-0.035962,-0.067134,-0.05938,0.013067,0.0018231,0.062105,-0.022566,-0.016408,0.22817,0.10553,-0.0029259,-0.079456,-0.038855,0.045778,0.042214,0.066883,0.15468,0.31194,0.12417,0.075395,0.059888,0.03965,-0.050274,0.0084258,-0.016213,0.038201,0.090472,-0.12545,-0.015552,0.053054,-0.040371,-0.046122,0.023092,-0.06815,0.019336,0.14723,-0.034558,-0.0097971,0.0086862,-0.02285,-0.032456,0.0055913,-0.04095,0.013277,0.068726,-0.0081984,-0.0033175,-0.021463,0.024988,-0.10293,0.058409,-0.014232,-0.0099595,0.05161,-0.034096,0.0081879,0.047314,0.048039,
+    0.080297,-0.040512,0.043602,0.058651,-0.16222,-0.024287,0.083629,0.065009,-0.056594,-0.26241,0.13464,-0.18771,0.1155,0.16736,0.11419,0.042085,-0.28944,0.19866,0.10053,0.34987,-0.067719,0.071371,0.16644,-0.13974,0.027256,0.087808,-0.043968,-0.043444,-0.15181,0.061979,0.017748,-0.034784,-0.44199,-0.18068,0.30195,-0.1637,0.1027,0.04545,0.22483,-0.12152,0.010337,-0.017383,0.055105,0.17041,-0.042339,-0.19112,0.038163,-0.046139,-0.49529,-0.053064,0.18115,0.046868,-0.20612,0.056489,0.12169,0.028137,0.059462,-0.14466,0.096851,0.071876,0.18015,-0.043932,-0.058578,-0.024303,-0.22155,0.12394,0.25892,0.18991,-0.27774,-0.097497,0.095213,0.089169,0.0026096,0.11814,-0.0093177,-0.22345,-0.049469,0.064606,0.064917,-0.039919,-0.060133,
+    -0.0022389,0.075656,-0.073528,0.065104,-0.12369,0.014345,0.032087,0.098317,0.030374,0.06192,-0.013877,-0.15072,0.034635,0.047679,0.1371,-0.093953,-0.063321,-0.08442,-0.089359,0.012318,0.070644,0.14218,0.11147,0.24142,-0.20936,-0.16613,-0.015606,0.019989,0.067589,-0.071917,-0.01237,-0.10487,0.17583,-0.12995,-0.047035,0.15263,0.075385,0.11725,-0.19105,-0.014827,-0.22971,0.11627,-0.019031,-0.04188,0.060789,-0.028909,0.046997,-0.26935,0.18768,-0.14112,0.25967,0.10678,-0.18526,-0.019006,0.097459,-0.05591,-0.082723,0.31723,-0.065839,0.094152,-0.071649,-0.069666,0.026628,-0.19949,-0.024621,0.21312,0.27181,0.01648,-0.1394,-0.34433,0.0015987,0.0038846,0.051192,0.16911,-0.26109,-0.074067,-0.029054,0.13458,0.11527,-0.035414,0.056527,
+    0.0021767,-0.00057614,0.00053733,0.00019933,0.0013521,0.00075393,-0.00013427,-0.0011658,0.0012584,0.00059339,-0.0017465,-0.001484,0.00039302,-0.00046453,-0.0016879,0.00022338,-0.0010296,-0.00097933,-0.00064591,-0.0021236,-0.00032014,-0.0012911,0.00028558,2.8074e-05,-7.3943e-05,-5.3466e-05,-0.00032978,-0.00039564,-0.00086095,0.0014558,0.0010776,0.0011523,0.00021283,-0.0011868,-0.00076822,-0.00032177,-5.2791e-05,0.00013193,-0.0010121,8.3758e-05,-0.00084519,-0.00048462,0.0008424,0.00021479,-0.00050686,-0.0020822,-0.00066382,-0.00088669,-0.00066561,0.00026316,0.00061286,-0.0025305,0.0015005,0.00043556,-0.001875,0.00027807,0.00079155,0.00090569,-7.5554e-05,-8.3754e-05,0.00055462,0.0028697,-0.00061166,0.00037985,-0.0023933,0.00070501,0.00024751,-0.00050084,0.000763,-0.00047074,0.0019536,-0.00038733,-0.00015744,-0.0015862,-0.00070852,0.00038756,-0.0016021,-0.00059031,0.00042595,-0.00037768,-0.0018262,
+    -0.054791,0.25365,-0.2796,0.10039,-0.12158,0.20832,0.18832,0.058016,-0.19122,0.070013,0.01179,-0.14976,0.32274,-0.4436,-0.17158,-0.13726,-0.30719,0.38879,-0.15568,0.17875,-0.19252,0.19171,-0.01479,0.25968,-0.037549,-0.28481,0.041026,-0.19287,0.42374,-0.14859,-0.024422,0.21294,0.66377,0.011664,-0.20433,0.00049039,-0.10848,0.20892,-0.14282,-0.34837,-0.50342,0.37561,0.11458,-0.44292,0.056285,0.07971,-0.023798,0.10833,0.18675,-0.20898,0.044154,0.25637,-0.10855,0.145,0.039943,-0.043283,-0.20616,0.092253,0.086056,-0.21107,-0.073664,0.053957,-0.047548,-0.12711,0.25294,-0.094544,0.025951,0.077157,0.17352,0.044706,-0.0612,-0.039735,0.010746,0.023102,-0.060948,0.048681,-0.20067,0.086467,0.039635,-0.13204,0.086946,
+    -0.097223,0.032107,-0.075592,-0.012425,0.096892,-0.074241,-0.023912,0.045456,-0.082555,-0.1382,0.054376,-0.028119,-0.019562,-0.042756,-0.095187,0.06497,0.15783,-0.068126,-0.031784,0.14993,0.018873,0.047461,0.058278,-0.039791,-0.010545,0.03883,0.041086,-0.017793,0.048312,-0.06488,-0.016817,0.15039,0.008327,-0.050222,-0.04738,0.013195,0.08496,0.039796,0.0049327,0.16051,0.309,0.13151,0.050496,0.01863,0.063266,-0.00083107,0.029277,-0.073004,0.031565,0.096044,-0.070651,-0.019091,-0.022224,-0.098926,0.024224,0.092695,-0.074753,-0.016139,0.076574,-0.056035,-0.0070104,0.056756,-0.018174,0.073988,0.095048,-0.068572,-0.089903,-0.030558,-0.061947,0.0022133,0.081591,0.051684,0.020384,0.1741,-0.0038789,-0.074709,0.039627,-0.030469,-0.0096163,0.018628,-0.044702,
+    0.0011135,-0.0011198,0.00028048,0.00045874,6.9484e-05,-0.0012169,0.00019439,0.00055199,0.00075255,-0.00091654,-0.00074359,-0.00050276,0.0012707,-0.00040015,0.0018892,0.00087337,-0.00057215,-0.00062715,0.00052031,0.0013993,-0.0016475,0.00067735,-0.0014391,-5.637e-05,0.0006965,-0.0009332,-0.0023588,0.00067801,-0.0021588,0.00063711,-0.00088761,-0.00034927,-0.00098505,0.0009846,-0.0015154,-0.00014025,0.0026106,-0.00062986,-0.00056943,0.0013559,0.001492,-0.0013541,2.8062e-06,0.00048254,-0.00041581,-0.00073694,-0.0017634,0.00017263,0.00093605,0.00018216,0.0002068,0.0019894,-0.00058555,-0.001127,-0.00021704,-0.0015883,-0.00067836,0.0014362,-0.00090271,-0.0023118,-0.0011868,-0.0014501,0.0002347,-0.00021924,-0.00018789,0.00048025,0.0013268,-0.00095455,0.0009785,0.00047593,-0.00064591,0.00066396,0.0013779,0.00169,-0.0011343,-0.0014892,-0.00058992,-0.0007053,-0.00080349,-0.00089743,-0.00058739,
+    0.0019979,0.00038865,-0.0010013,0.0010642,0.00076157,0.00053313,4.9322e-05,-0.00049245,-0.00054922,-0.00095389,-0.00080673,-0.0022148,0.00063717,-0.00077768,0.00013405,-0.00073024,3.6588e-05,0.0006878,0.00028876,-0.00021338,-0.0018511,-0.00015202,0.00020338,-0.00081489,-0.0012772,7.2781e-05,0.0018563,-0.00057951,0.0021367,0.00037966,-0.0002546,-0.00028426,-0.00037113,8.8177e-05,-0.0013911,-0.00087404,-0.0013344,-0.0001951,-0.00012777,0.00038812,-0.00031406,-0.00037136,-0.0019522,0.0013455,-0.0020607,0.0021321,-0.00072466,-0.0012057,0.00048415,0.0012452,0.00092225,0.00042794,-6.9421e-05,-0.00076833,-0.00013122,-8.6552e-05,-8.8904e-06,0.00077058,-0.00068508,0.0010243,8.7393e-05,-0.0013966,0.0006112,0.00092403,-0.0014343,-0.00021028,0.00081531,-0.00079259,-0.00010382,-0.00073403,-0.001259,-0.00018111,-0.001712,-0.00044206,-4.5664e-05,-0.00017785,0.00028573,-0.00084725,0.0012532,0.0001405,0.0015475,
+    -0.0010428,0.00074758,0.0029894,0.0010094,0.001214,-0.0031358,-0.001727,0.00022001,-0.0017372,0.00063556,0.0015863,0.003409,0.001236,0.0023517,-0.0013123,0.00042639,-0.0029852,-0.0020502,-0.0021869,-0.0028351,0.0015414,0.0020204,0.00093362,-0.00011486,-0.0031627,-0.00041218,-0.0021209,-0.00056922,-0.00028354,0.0010229,0.0023091,0.0011307,0.00075962,-0.0016434,-0.0027102,-0.0015362,-0.0022551,-0.00071404,-1.4683e-05,0.00099015,0.00094385,0.0011072,-0.00010429,-0.00099521,-0.0010037,-0.0029727,-0.0008929,-3.9986e-05,0.00073888,0.00062455,-1.1671e-05,-0.00095859,0.00022638,-0.0001737,-3.6714e-05,0.00051665,0.00071882,-0.0013193,2.4575e-05,-0.00043652,-0.0004398,-0.00079934,-0.00050814,-0.0033734,-0.0010377,0.00036778,0.0020418,-0.00074999,-0.00062353,1.9585e-05,0.00052948,0.0019362,-0.0032374,-0.0022866,0.00020929,0.00032419,-0.000517,0.0011239,0.00023474,0.00065074,0.00051582,
+    0.00085872,0.00074733,-0.00025842,-0.0013166,0.00043008,-9.0402e-05,0.0011788,-0.00025176,0.00037236,8.9833e-05,-0.00051328,-1.6656e-05,0.00046614,-0.00024955,-0.00052469,0.00063047,-0.0009185,-0.0014048,0.00019008,-0.001163,-0.0015439,0.00013563,0.0006294,-0.0005518,0.00043079,-0.001374,-5.2913e-05,-0.001254,-0.0010594,-0.00098782,-0.0022237,0.00082961,-0.00165,-1.0491e-05,0.00028436,-0.0009809,-0.00025905,0.0019393,0.00082784,-0.00056465,-0.00080607,-0.00030646,-0.00098892,0.00044436,-0.00042044,-0.0026953,0.0010895,-0.00011562,0.00053945,-0.0005808,-0.0007318,-0.00069321,-0.0025039,0.00049945,0.0024093,0.00011227,0.00054906,0.0010855,0.00010403,0.00086772,0.001215,-0.0012398,0.00050781,0.0012428,0.00022204,0.00046933,0.00089653,0.00094699,-0.00020116,0.00027077,-0.0018706,0.00048457,-0.0016372,0.00026659,-2.5259e-05,-0.00078491,-5.2908e-05,0.00039769,-0.00029645,-0.00097565,-0.0014156,
+    0.00038565,-0.0012126,-0.00090426,3.3609e-05,-0.0018875,-0.00015335,-0.0018861,0.0017777,0.00016214,0.0002358,8.01e-05,0.0013927,4.3476e-05,0.0011868,0.0008408,-0.0020492,-0.00014229,-0.00064346,0.0016842,-0.0012947,0.00047095,-0.00044661,-0.00092887,0.00017953,-0.0014246,-0.00075564,0.0016062,-0.00050918,-0.000453,-0.00055412,0.0013322,0.002065,-0.0011003,-0.00054487,0.0023096,-0.00033538,-0.0018162,0.00035935,-0.00090357,-0.0021022,0.00013052,0.00052874,-0.0010279,-0.0017553,-0.0020968,0.0013199,0.00063313,0.00097424,-0.0010674,0.00074101,-0.0011617,-0.0010435,-0.00031435,-8.5375e-05,-0.0010592,0.00044852,3.4784e-05,4.1908e-05,0.001752,-0.001492,0.00069291,0.00014946,-0.00073777,-0.00092336,-0.001821,-0.0011584,-0.0020634,-0.00029677,0.00028264,0.00030143,-0.00069485,-0.00020492,-0.00037612,0.00095228,-0.00020505,-0.00018598,0.00026038,0.00035215,-0.0034441,-0.0018378,2.3875e-06,
+    0.00063606,-0.00097109,-7.9778e-06,-0.0016996,-0.0024402,-0.00012742,0.00058707,-0.00089722,-0.00043766,-0.00080474,7.7059e-05,9.641e-05,-0.0012319,0.0026311,-0.00041181,-0.00072095,-0.0011395,0.00056929,-0.00045052,-0.00025276,0.0014583,-0.00055183,-0.001151,-0.00080505,-0.0014693,-0.0019164,0.00058401,0.00086591,4.3043e-05,0.0016309,-0.0017816,-0.0015453,0.00067586,0.0017389,-8.2103e-05,-6.2855e-05,0.000743,0.00015477,-0.00068476,-0.00082782,0.00021049,-0.000744,-0.0016221,-5.5592e-05,0.00027263,0.00014731,0.00098056,-0.00052714,0.00033434,-0.0012366,0.0024697,0.00024833,-0.00070316,-0.00076237,0.0002487,-0.0012471,-0.00042475,-0.00083855,-0.00032578,0.00068401,-0.00036421,0.00016934,-0.0014108,0.0008613,-2.7616e-05,0.00097087,-0.00061752,0.00077205,-0.00018884,0.0010553,0.00023791,0.00042052,0.0010173,-0.0005163,0.00017586,-0.00084565,-2.4885e-05,-0.0032961,-0.0011469,-9.3697e-05,-0.0014493,
+    -0.096232,0.10485,-0.063151,0.039819,-0.0014363,-0.15152,0.039724,0.053064,-0.07438,0.013473,-0.03075,0.026671,-0.10885,0.12399,0.24108,-0.067726,-0.067666,0.15236,0.13828,-0.098771,-0.040509,0.21815,-0.0089842,-0.2286,-0.02013,0.14801,-0.2521,-0.0051659,-0.07101,-0.06274,0.17723,-0.067052,-0.31079,0.10387,0.4285,-0.009982,-0.088106,0.22323,0.17002,-0.24257,-0.23249,0.14488,-0.011191,-0.33017,-0.090632,-0.14186,0.041418,-0.049464,-0.36716,0.067283,0.68638,0.4052,-0.2975,0.10741,0.33181,-0.050702,-0.18289,0.08518,0.26717,0.11543,-0.068626,-0.24573,0.16061,-0.28891,-0.054239,0.17384,0.3603,-0.18709,-0.32288,-0.17501,-0.19726,0.019928,0.13906,0.015304,-0.040368,-0.17015,-0.12204,0.22163,0.0035465,-0.056759,0.13978,
+    -0.00099959,-0.00182,-3.204e-05,0.0010189,0.0022818,0.00052257,-0.00079928,-1.5113e-05,0.00049971,-0.0011139,5.3658e-05,-0.00059947,-0.0003766,9.2675e-05,-0.00016173,-0.00077145,-0.0011691,-0.00063464,-0.0009605,0.00056717,-0.0004042,0.0007466,0.00073728,-0.00024575,-0.0020089,0.00079984,0.00017298,0.0001195,0.0020309,-0.0012711,0.00174,-0.00097656,-0.0012425,-0.0011191,0.00069548,-0.00088005,0.00071538,7.4097e-05,-0.00079124,0.00077131,0.0010325,0.0013992,-0.0017963,-0.00078626,7.117e-05,-0.0012065,0.001315,-5.5957e-05,-0.00051608,5.7979e-05,-0.000684,0.00069293,-0.00069105,-0.00031766,0.00055507,-0.00051068,-0.00090974,-0.0003868,-0.00054437,-0.00031464,0.0001922,-0.00076588,0.00071429,0.00065835,-0.00038802,0.00032448,-0.00019721,0.00050767,-0.00041441,0.00032692,0.00016968,0.00044188,-0.00072831,-0.0014942,0.00012876,0.00020544,-0.0016893,0.00070973,0.0010939,-0.00060687,-0.0010074,
+    -0.0012665,0.016754,0.26305,0.13984,-0.11388,-0.10658,-0.065199,0.077264,0.017945,0.0069109,-0.077271,-0.24356,-0.30492,0.0015241,0.19691,-0.1137,-0.20053,0.055014,0.021108,0.11379,0.12823,-0.12033,-0.082057,0.18634,0.080315,0.039803,0.10264,-0.069083,-0.067399,0.015077,0.060801,-0.025707,-0.092906,-0.17365,-0.044257,-0.13038,0.11021,0.020617,-0.17159,0.13234,0.39495,0.22673,-0.13186,0.074323,0.22734,-0.04333,0.053376,-0.10663,-0.084194,-0.013404,-0.080287,-0.28356,-0.071037,-0.023827,-0.046279,0.043518,0.063233,0.014668,-0.074954,-0.12318,-0.006352,0.28992,-0.10756,0.04353,-0.059826,-0.10739,0.1163,0.020551,-0.1612,0.017646,0.29594,-0.074551,-0.060867,0.06221,-0.070787,0.14284,0.016842,0.0082178,0.15607,0.014023,-0.17542,
+    -0.0015402,0.00025565,-0.00067234,0.00044708,-9.5463e-05,-3.5591e-05,0.0011325,-0.00026728,-0.0018261,0.0014169,3.4926e-05,0.00011063,0.00025746,-0.00025572,-0.0020368,-8.9446e-05,-0.0012297,0.00079576,-0.0012315,0.0010771,-0.00059177,-0.0021298,-0.00031172,0.0010828,0.00026823,-0.0011722,0.00025862,-0.0029964,0.0020982,0.00071733,0.0018209,-0.0017952,0.00018901,0.00057388,-0.0011678,-0.00086258,-0.0024161,0.00042315,-0.0017524,0.0010439,-5.785e-05,-0.0013306,0.00028503,-0.00041883,8.2892e-05,0.00061704,0.00065633,0.00011567,-0.00011427,0.001082,0.0016165,0.00018962,0.0019755,-0.0015525,-0.0017105,0.0011876,-0.00028421,-0.0014971,-0.00050153,-0.00070496,-0.00067682,8.99e-05,-0.00017749,-0.0013357,-0.0010257,0.00025018,0.0016103,0.00075777,-0.00093808,-0.00034315,0.00015071,-0.0014308,-0.00055653,-0.00075341,2.6478e-05,-6.8593e-06,0.00040428,-0.00093589,-0.00047378,-0.00084572,5.376e-05,
+    -0.15451,0.19095,0.20473,0.02609,0.090184,-0.038669,-0.29472,0.11172,0.12669,-0.085473,-0.11372,-0.45456,-0.16959,0.081688,0.38937,0.3428,-0.33089,-0.17786,0.062101,0.17866,-0.1051,-0.065031,-0.24637,-0.22606,0.19957,0.20033,0.091041,0.20661,0.029972,0.21239,0.32689,-0.13861,-0.27889,-0.30922,-0.00034688,-0.14993,-0.060726,-0.21059,-0.044426,0.090124,-0.22183,-0.070313,-0.051647,0.11669,0.044493,-0.022964,0.13739,-0.12682,0.2075,0.59867,0.44718,0.12741,-0.061925,-0.069917,-0.040256,0.090937,-0.16429,-0.16907,0.076662,-0.15648,-0.13332,-0.016348,0.047096,0.034296,-0.083561,0.16967,-0.066951,-0.17493,-0.24849,0.016458,0.13108,0.028971,-0.044486,-0.018286,0.11338,-0.11079,0.09167,0.17844,-0.038458,0.024416,-0.028454,
+    0.064893,0.030158,0.066637,0.015556,-0.0084089,-0.010151,-0.045359,-0.07109,0.0089018,0.038365,0.0082523,0.057062,0.021778,0.021049,0.039814,0.019147,-0.016651,-0.00012338,-0.055767,-0.0084469,0.0087827,-0.012964,0.03062,0.01987,-0.014467,-0.05448,0.0083493,-0.047145,0.036334,0.020698,-0.0063915,0.093983,0.036466,-0.016738,-0.066264,-0.021751,-0.02036,0.0033441,0.014848,0.024314,0.13402,0.047887,0.0052726,-0.0055662,-0.011406,0.010811,-0.0080901,-0.021759,-0.052334,0.017572,-0.031521,0.0052302,0.045618,-0.025736,0.09221,0.05666,0.033203,0.0097129,0.034623,-0.020982,-0.0028617,0.0023921,-0.050433,0.1087,0.029779,0.047895,0.077021,0.049372,0.0044374,0.026964,-0.02077,-0.031368,-0.0027126,-0.051467,0.0021102,0.048718,0.050533,0.056156,0.12525,0.085612,0.010004,
+    0.048813,-0.040069,-0.024895,0.10932,0.026437,-0.18237,0.069566,0.046133,0.062952,-0.0011143,-0.12402,-0.079595,-0.085674,0.2911,0.078413,-0.158,-0.18639,0.0087913,-0.005786,0.31175,0.17795,-0.19378,0.10012,0.092638,0.22075,-0.13299,0.021534,-0.25835,0.078087,-0.2475,-0.46278,0.090576,0.056545,0.28243,-0.21025,0.099852,0.028138,0.13126,0.2987,-0.17317,0.065426,-0.029811,0.11452,0.12771,0.069289,0.084055,-0.28732,0.13365,-0.045149,-0.16096,-0.43042,-0.082909,0.30299,-0.23474,0.12785,0.040432,0.054107,0.23238,0.18373,-0.25011,-0.055615,0.11793,-0.18258,-0.18931,-0.011876,-0.15527,-0.11441,0.12402,0.15735,-0.0077725,0.067033,0.18276,0.1209,-0.078514,0.11984,0.034761,-0.048247,-0.10135,-0.12304,0.052401,-0.055737,
+    -0.16773,0.1111,-0.010659,-0.1919,-0.056385,0.057074,-0.11251,-0.054106,0.039646,0.28676,-0.062649,0.18963,0.11862,0.054832,0.13197,0.064439,0.12914,-0.033469,-0.093805,-0.39509,-0.045498,-0.052516,0.079533,-0.098056,-0.14164,-0.12616,0.030345,0.045077,0.33114,0.27323,-0.20559,0.0078713,0.026922,0.21213,0.0066593,0.073457,-0.22251,0.012361,-0.23676,-0.35879,-0.051801,-0.28916,-0.11291,0.1451,-0.22574,0.22535,0.17198,0.10329,0.48187,0.65363,0.13932,-0.12812,0.29186,-0.011542,-0.056727,-0.24614,-0.25707,0.13793,-0.13672,-0.029103,-0.0097997,-0.20077,-0.015641,-0.11022,0.15646,-0.1229,-0.079611,-0.36028,0.044074,0.23831,-0.046267,0.1948,0.070211,0.011513,-0.0142,0.10594,-0.11555,0.071831,-0.15568,-0.015137,-0.077523,
+    -0.001057,-0.00011933,-0.0011504,0.001095,-0.0004189,0.00066117,0.00068706,-0.00047927,0.00077256,-0.00013302,-0.0002243,-0.0011844,-0.0016817,0.00088799,-0.00071976,-0.0026471,-0.00035949,-0.00068407,-0.00047932,-0.00033404,-0.00018967,-0.0019072,0.0022352,-0.0017469,6.8257e-05,0.00010221,-0.001698,-0.0011178,-0.00035529,-0.0001795,0.0019976,0.00071999,0.0019489,-0.0014096,-0.00018343,-0.0011374,-0.00012808,-0.00075369,-0.00018413,-0.00045889,0.0001156,0.00054476,0.0010002,-0.00035392,0.0011273,-0.0010927,-0.00033767,0.0004051,0.001427,-0.00055729,-0.00082799,0.0011004,0.00060567,0.00034191,0.00071746,0.0015605,-0.00029265,-0.00012327,-0.00052696,-1.4816e-05,-0.00066205,-0.00077355,-0.00064921,-0.00086103,0.0018014,0.00064415,-0.00044356,-0.00089929,-0.00024225,0.0010501,-0.0011598,-0.00065701,0.0011456,0.00048622,-0.0018411,-0.0013612,-0.00026908,-0.00056406,-0.0013653,-1.7089e-05,-3.3554e-05,
+    -0.21049,0.12132,0.029366,-0.11714,-0.027835,-0.054205,0.038977,0.16723,0.11554,0.16738,0.053934,-0.014359,0.051431,0.087548,-0.029643,-0.0080918,-0.042589,-0.24426,-0.19025,0.13267,0.070906,-0.1285,-0.11498,-0.14561,-0.062827,0.037713,-0.030533,0.0022426,0.080747,0.057045,-0.075644,0.015597,0.15355,0.096325,0.14458,0.09842,0.13968,-0.11876,-0.18227,0.022942,0.095031,-0.032779,-0.21077,-0.0021121,-0.038147,0.010349,-0.0073542,-0.072395,0.10509,0.18382,-0.048366,-0.18059,0.12591,0.1052,0.035,0.18794,-0.047916,-0.33947,-0.23024,-0.028468,0.054627,0.0032924,-0.14791,-0.041791,0.087066,0.02035,-0.047497,-0.073039,-0.036168,0.097591,0.075103,0.13185,-0.069643,0.086619,0.083703,0.16909,0.050515,-0.12434,-0.020951,0.049962,-0.095539,
+    0.098089,-0.042174,0.11261,-0.097932,-0.009377,0.10383,-0.3148,0.041666,-0.0074941,0.0051754,-0.44516,0.078644,0.35874,-0.0032629,0.14902,0.22528,0.066133,-0.0052774,0.084567,-0.095231,0.02939,0.040525,-0.23033,-0.11449,0.144,0.25971,-0.069265,0.19865,-0.20608,-0.16858,0.088905,0.044428,-0.3011,-0.47416,0.14445,-0.2126,0.21731,-0.39368,0.16686,0.49145,0.25179,0.02051,-0.064097,0.25523,0.10251,-0.028641,-0.50983,0.20009,-0.014031,-0.24629,-0.036558,0.043905,-0.24576,-0.046159,0.018607,0.00041071,0.25003,-0.23971,-0.048645,0.063399,0.19724,0.14955,0.057878,-0.090562,0.19933,0.16785,-0.14022,0.1816,-0.16834,-0.18338,0.00424,-0.16899,0.077726,-0.30023,0.091082,-0.058463,0.10296,-0.023347,0.085483,-0.066456,0.15689,
+    -0.013951,0.14006,0.10363,0.05748,-0.035415,-0.14678,-0.0029044,-0.038839,0.052474,-0.066406,-0.020093,-0.46386,-0.30315,0.14792,0.14736,0.10991,0.054949,-0.1166,0.10018,0.13228,0.16289,0.2756,0.28458,0.25922,0.1239,-0.22477,0.11787,-0.1322,0.019542,0.18495,-0.29293,-0.59551,-0.60249,-0.18879,-0.10201,0.026657,0.016032,0.20259,0.25504,0.10817,0.27418,-0.0038298,0.10149,0.14858,-0.095604,-0.14667,-0.31976,-0.4732,-0.17724,0.21804,0.19207,0.21339,0.0029941,0.12965,0.13642,0.023268,-0.10686,0.21463,0.037513,-0.14986,-0.043636,-0.1408,0.08981,-0.19653,0.21892,0.31636,0.44296,-0.065802,-0.20929,-0.067167,-0.011131,-0.060498,0.17359,-0.11022,-0.26506,-0.17635,-0.087403,0.22814,0.11242,0.011584,-0.036959,
+    -0.080513,0.03413,0.020186,0.032504,-0.056753,-0.22755,0.014013,0.15816,-0.094652,0.10396,0.053353,-0.066705,0.021227,0.31651,-0.019804,-0.097589,0.075186,-0.10593,-0.075981,0.17638,0.024622,-0.061207,0.15003,-0.16978,-0.0239,0.10343,0.056688,-0.16327,0.084767,-0.17347,-0.22374,-0.029165,-0.10967,0.12517,-0.11274,0.10271,-0.085243,0.49501,-0.034106,-0.40578,-0.092724,-0.18248,0.1732,0.13147,-0.0038696,-0.0357,0.70162,0.20243,-0.38785,0.11948,-0.16033,-0.14417,0.11564,-0.26699,-0.21927,0.35552,0.059543,-0.19952,0.1067,-0.023358,0.009611,0.042931,-0.057917,-0.3259,0.06421,-0.11756,0.056953,0.067706,-0.048782,0.17067,-0.010371,0.12522,0.045665,0.33434,-0.11481,-0.19744,0.1505,-0.13802,-0.072104,0.030029,-0.037063,
+    0.039394,-0.23628,0.033454,-0.013991,-0.050545,-0.015119,-0.026975,0.014347,0.080181,0.22024,0.067209,0.015866,0.11437,0.03206,-0.01713,-0.010584,-0.28184,-0.11846,-0.18145,0.0455,0.066112,0.25537,0.127,0.078496,0.19416,-0.011852,0.17919,-0.16964,-0.11548,-0.19321,-0.22659,-0.14011,-0.043413,0.048256,-0.020221,-0.025582,0.095962,0.073629,0.023215,-0.11331,0.07634,0.093354,0.057872,0.11146,0.10321,0.099727,0.030443,0.10441,-0.036307,-0.024393,-0.12362,-0.18423,-0.15097,-0.20117,0.12027,-0.02515,0.14299,0.056422,0.029504,0.14781,0.071581,0.056344,-0.01833,-0.16934,-0.23444,-0.017876,-0.0064813,-0.034399,0.16573,0.078928,0.099926,-0.011556,0.16742,-0.068602,-0.030658,0.071589,-0.0056269,-0.093477,-0.068647,0.07024,-0.079346,
+    -0.00064287,0.00048833,0.00035403,0.00081152,0.00065711,0.00041667,-0.00086038,0.00019007,-0.00070439,0.00082868,-0.001395,-0.00060092,-0.00082068,-0.00055765,-0.00040472,-0.00027313,-0.00028334,0.0013879,0.00023154,0.0010704,-0.00065093,0.00012548,-0.00030321,0.00074296,0.00058653,0.00051762,-0.00075379,-0.0018874,-0.00080267,0.00084919,0.0018599,-0.0011441,0.00050587,0.0018451,-0.0024097,0.00030235,1.6437e-05,-0.001603,0.00065611,0.0002455,-0.00028882,-0.00041607,-0.00098146,-0.00066137,0.00081262,-0.00016825,-0.00044055,-0.00082573,0.00014283,0.0013928,-0.000657,-0.0012005,0.00011597,-4.0973e-05,-0.00065795,-0.0017888,-0.00034247,0.00011627,-0.0015091,-6.2593e-05,0.0011955,0.00033649,0.00061297,0.00085671,0.000765,0.00078547,-0.0013633,0.00068389,0.0019097,0.00086294,-0.00068565,0.00077542,-0.0010889,0.0014633,-0.0020133,0.00016315,-0.0010325,0.00033583,-0.0003861,-0.00049238,-0.0016132,
+    -0.00044564,0.0010815,0.00056286,-0.00044855,-0.0004133,0.00043358,0.00063615,0.00072107,-0.00050903,-0.0019743,0.0011092,-0.00024741,0.000794,0.0010135,0.00046003,-0.00085181,-0.00086108,0.00046291,0.00037765,-0.0012405,-0.0013561,-0.0015983,-0.0027604,-0.00088564,-0.0021813,0.00050537,-0.00060517,-0.00041869,-0.0018905,0.00088703,0.0011944,0.0012414,-0.0012548,-0.0009206,0.00061361,-0.00044331,0.00060656,0.00038991,-0.0012466,0.00081004,-6.5106e-05,-0.00093996,0.00051373,-0.0012365,-4.0653e-05,-0.00091144,0.00063949,0.00019929,-0.0014467,-0.0013847,0.0005618,0.0025162,-3.0096e-06,0.00081461,0.0019323,-0.00063419,-0.00018798,-0.00039016,0.00051889,0.0018493,0.0004189,-0.00066171,-0.00044926,0.00061351,0.00074214,-0.00054944,-0.00069801,-0.0007642,-2.5959e-05,0.00029733,0.0014494,-0.00034492,-0.00037504,0.0016392,-0.0014317,-0.0002958,-0.0016167,-0.00080179,-0.0015349,0.00059965,-0.0016865,
+    -0.00037824,-0.00095705,-0.0011277,0.0018043,-0.0012193,-0.00025961,-0.00051346,0.00049968,-0.001139,-0.0002948,0.0015175,-0.00075559,0.00097878,-0.00032183,0.00033166,0.00043391,-0.0019948,0.00017164,-0.00019137,-0.0013574,0.00031628,0.0010475,-0.0010327,0.0010363,-0.00071565,-0.0012618,0.00073116,0.00055483,0.0010244,-0.00015998,-0.00037371,0.0010335,-0.0011574,-0.00091144,-0.00015831,-0.00037357,-7.8791e-05,-0.0011627,-3.2057e-05,0.0011861,-0.00091545,-0.0015579,-0.0006613,5.9016e-05,8.9239e-05,0.00097329,0.00032398,0.00041628,0.00096208,-5.0444e-05,-0.0008907,-0.00074319,9.6331e-05,0.00024186,0.0005225,-0.00066323,-0.00082172,-0.00057524,0.00031895,0.00021011,0.00084128,-0.00063628,-0.0014073,0.00012795,-0.0010525,0.00041546,0.00048592,-0.00087857,-0.00011088,-1.2939e-05,-0.00050557,0.0002223,-4.7034e-05,-0.00023998,0.00074685,-0.00057767,0.00073985,-0.00020299,3.6905e-05,1.2207e-05,0.00027368,
+    -0.037368,0.043655,0.061555,-0.17162,-0.0010409,-0.045729,0.04417,0.077683,-0.020297,-0.036446,0.056331,-0.05259,-0.063966,0.19314,-0.039137,-0.021272,-0.075046,-0.055963,0.062649,0.01632,0.13311,-0.023342,0.2608,0.1322,-0.0125,0.041589,0.16334,-0.13022,-0.078496,-0.022618,-0.32796,-0.25889,-0.20799,-0.12068,-0.11035,-0.12221,-0.030919,0.3315,0.19555,0.046738,0.16163,0.038881,0.25798,0.1462,0.0076228,-0.10936,-0.16709,-0.29867,-0.31483,-0.1773,-0.27364,-0.094595,0.004573,-0.090381,0.24829,0.0044422,0.2956,0.26263,-0.021756,-0.10917,-0.019599,0.21143,-0.016223,-0.044028,-0.31911,0.050835,0.44276,0.34854,0.030038,-0.12292,-0.06384,0.045271,0.084141,0.14136,-0.23514,-0.1073,0.086545,-0.11958,0.091832,0.012878,-0.01705,
+    -0.0060392,0.039495,-0.011576,0.0062799,-0.15893,-0.1356,-0.031758,0.23796,-0.10436,-0.052519,0.064775,-0.12237,0.1002,0.22227,0.12824,-0.17412,-0.11294,0.12766,0.037721,0.1046,-0.010523,-0.08484,-0.081067,0.016815,0.14952,0.21621,-0.14441,0.008106,-0.057048,0.080202,0.027756,-0.16614,-0.31643,-0.096221,0.19705,-0.092363,0.028924,0.12216,-0.17039,-0.062581,0.23278,-0.030293,-0.10371,0.11278,0.055295,-0.25349,0.31958,-0.22877,-0.28526,0.1975,0.12394,0.02495,0.059626,-0.1869,-0.10025,0.28244,0.053823,-0.047657,-0.076409,-0.025941,0.051652,0.2132,0.099894,0.040115,-0.16568,-0.026336,0.29997,0.010898,-0.019212,-0.22077,-0.18565,-0.066963,-0.0080308,0.14637,-0.12054,-0.034752,-0.12024,-0.0060537,0.072639,0.22075,-0.044489,
+    0.00062508,0.00025322,-0.0006213,-0.0015586,0.00019674,4.0992e-05,0.00051097,-0.00081803,0.00060004,0.0013118,0.0002263,0.0014094,0.00019255,0.0014892,-0.0014964,0.00027126,-0.00038198,0.00041936,-0.001249,-0.0012643,-0.00045845,-0.0011734,-4.562e-05,-0.00053911,0.00027575,-0.00065656,-0.00089671,-0.00032053,0.00022495,0.0011181,-0.00020911,-0.00043916,0.00027699,-0.00033785,-0.001403,-0.00067595,0.00061394,-0.0022016,0.00012558,0.00097656,0.00072219,0.0003771,0.00067372,-0.00056439,-0.00027717,0.0002362,-0.00045732,0.0010595,-0.00058886,-0.00029658,0.00085244,0.00136,-0.00015138,0.0011892,-0.00099404,-0.00037576,-0.00010083,-0.00023671,-0.00089805,-0.0014064,-0.00029101,0.0014967,0.001081,0.00021365,0.00093594,-0.00016504,0.00026267,-0.00010171,0.000243,-0.0008212,0.00063386,-0.0016349,-0.0010945,0.00059889,-1.6025e-05,-5.4157e-05,-0.0014825,-0.00087155,0.0011129,-0.00013183,-0.0022961,
+    0.17284,-0.14111,0.10064,0.0057467,0.050704,0.22104,-0.1472,-0.048427,0.020132,-0.12005,-0.07423,-0.058261,0.0993,-0.17803,-0.11883,-0.028432,0.2151,0.027912,-0.14689,-0.020233,0.094025,-0.0012694,-0.18499,-0.060966,-0.058673,0.016928,-0.12905,0.35039,-0.28308,0.22246,0.13651,0.11935,0.306,0.0676,0.033336,-0.0095279,0.13321,-0.72601,0.085357,0.47631,-0.19917,-0.27495,-0.132,0.10678,-0.072215,0.0060991,-0.45554,0.15451,0.70707,-0.13664,-0.26516,0.067814,0.24229,-0.11983,0.09466,-0.30057,-0.082686,0.19891,-0.078489,0.075877,-0.019523,0.050591,0.097096,0.43917,-0.21971,-0.11906,-0.085394,-0.052984,0.27209,-0.12296,-0.079748,-0.11201,-0.21936,-0.043867,0.13712,0.21606,-0.05168,-0.11497,-0.089985,0.14205,0.044915,
+    0.084756,-0.12501,0.081896,0.063461,-0.083759,0.023403,0.33248,-0.25393,-0.10861,-0.078201,0.096865,0.049886,-0.16385,-0.021932,-0.2012,-0.21866,0.46496,0.064029,-0.10432,-0.13829,0.10032,0.085743,0.35273,0.15662,-0.40212,-0.040445,0.060777,0.17599,0.10821,-0.059797,-0.21599,-0.020274,0.24804,0.25499,-0.47728,0.025928,-0.15392,0.10168,0.02932,-0.41325,-0.22018,0.10988,0.59368,-0.28484,-0.048827,-0.040714,-0.016554,0.45058,-0.072275,-0.21292,-0.38256,0.20127,0.20243,-0.0095333,-0.044821,-0.3548,0.15691,0.2215,0.14318,-0.25783,-0.060824,0.11715,0.036427,0.34802,-0.0069186,-0.2594,-0.22054,0.090651,0.27327,0.029627,-0.28665,-0.010202,-0.21084,0.09641,0.18107,0.02777,-0.12537,-0.095451,0.12937,-0.01278,0.063538,
+    0.050251,-0.092703,0.11697,-0.013292,-0.052602,0.13471,0.13055,0.018618,0.024348,0.037256,-0.16717,0.12982,0.01852,0.028659,0.0054491,-0.19638,-0.16908,-0.032184,0.027016,-0.088726,0.15607,-0.14616,-0.1631,-0.068849,-0.073666,0.20056,-0.012123,-0.16513,0.038115,0.23739,-0.079417,-0.02293,0.10595,0.023792,0.19175,-0.0059286,0.058532,0.040732,0.075571,-0.12856,0.096567,0.18394,-0.15239,-0.13476,0.0094462,0.15142,-0.031782,-0.021444,-0.11568,0.092481,0.096023,-0.31866,-0.15197,0.064842,-0.12135,-0.043547,-0.095493,-0.14035,-0.03896,0.032252,-0.10895,0.21686,0.022316,-0.16025,0.21239,0.042298,-0.026489,-0.0070513,0.10273,0.050375,0.18771,-0.21782,-0.012216,0.15663,-0.05364,-0.0013596,-0.010922,0.03811,-0.074286,-0.037009,0.020876,
+    -1.322e-05,-0.00023514,-0.00030173,0.0011701,0.00052196,-0.00017715,-0.0008295,0.0026146,-0.00091741,0.00055828,0.00024705,-0.00028315,0.00049362,-0.0015357,-0.00012245,-0.00040164,0.0003153,0.0011554,0.0010136,-0.00061006,0.0010525,-0.0014441,-0.00040139,0.00031089,-0.0016402,-0.0019647,-0.0018861,-0.0013859,-0.00048397,0.0017165,0.00014805,-0.00081433,0.00060422,0.00029739,0.0011475,-0.00082383,-0.0010876,0.0007562,-0.0026615,0.00013972,-0.0014026,-0.0015811,0.0011933,0.00094972,-0.0010351,-0.0015487,-0.0015998,0.00054792,-0.0018495,-0.0014196,0.00034412,-0.00011232,0.00067111,-0.00077193,0.00012746,-9.4987e-05,0.0017404,-0.00044525,-0.0008572,0.00015535,-7.2743e-05,-0.0012182,-0.00019184,5.0202e-06,0.0013709,-0.0012655,-0.001238,-0.0020388,0.00092468,0.00065635,-0.0014401,-0.00099265,-0.00058997,-0.00068705,0.00044658,0.00010916,8.506e-05,0.00098235,-0.0011804,0.00051836,0.0018983,
+    0.066756,0.10011,-0.13682,-0.2092,0.078356,0.26173,0.14701,-0.1017,-0.015684,-0.10155,0.20362,0.079131,-0.1829,-0.069508,-0.21273,-0.21261,0.006009,0.09304,-0.23018,0.098252,0.097312,-0.26145,-0.050176,0.014348,0.088889,0.14839,-0.047084,0.047672,0.22523,0.15061,-0.051011,0.0088525,0.028483,0.050584,-0.23154,-0.019816,-0.11485,0.040155,0.16233,0.086257,0.15996,-0.033829,0.078218,0.021596,-0.0025906,-0.047755,-0.23395,0.072941,-0.11236,-0.048969,-0.30034,-0.049125,0.37259,-0.17659,0.011824,-0.021367,0.076598,0.099144,0.045059,-0.15567,-0.057692,0.12509,-0.0063543,0.085478,0.093056,-0.22158,0.067959,0.032484,0.14592,0.11007,-0.17675,0.017361,-0.16059,0.081263,0.17254,-0.048549,-0.11559,-0.010671,-0.11523,0.13721,-0.00099268,
+    -0.094133,0.10117,0.076905,0.029048,-0.042452,-0.05787,-0.015473,0.01378,0.061661,-0.047354,0.046855,-0.036578,-0.043292,-0.050823,-0.01254,0.0035728,-0.027614,-0.04868,-0.006214,0.06741,-0.026017,-0.040223,-0.085796,-0.038291,0.018853,0.024484,-0.041643,-0.085452,0.056346,0.019951,0.032319,-0.034079,-0.038873,0.015597,0.060878,-0.055689,-0.10009,-0.0075249,-0.058458,0.040348,0.070226,0.031505,0.0093452,0.041655,-0.03276,-0.012107,-0.012162,-0.089782,0.059606,0.13298,0.089556,7.7725e-05,-0.019989,0.0056618,-0.0031504,0.017819,0.026964,0.15826,0.11291,0.018961,-0.037726,-0.025289,0.039477,-0.01313,-0.043904,-0.0051814,0.10663,-0.05138,-0.144,-0.076207,-0.0017911,0.046365,0.091025,-0.085066,-0.10052,0.083441,0.005159,-0.029294,0.036694,-0.018125,-0.053899,
+    0.04917,-0.033771,0.029063,-0.028348,0.15199,-0.060725,-0.15768,-0.081176,0.20282,0.16408,-0.10849,-0.020854,0.021502,0.059488,0.071586,0.13788,0.067624,-0.17588,-0.13236,-0.069819,-0.15009,-0.056207,0.13636,0.033482,0.014524,-0.083056,-0.053232,-0.089405,-0.030837,-0.17281,-0.13945,0.38792,0.049778,-0.069709,-0.1606,0.052771,0.21169,-0.0026609,0.054675,0.35584,0.90801,0.30999,0.091668,0.0079009,0.16261,-0.059383,-0.062446,-0.072178,0.011742,0.3,-0.22054,-0.071781,0.078165,-0.13415,-0.15026,0.039413,0.04994,0.11277,0.26087,-0.1712,-0.042446,0.087949,-0.075009,0.074956,-0.051164,0.062479,0.15666,0.098254,-0.10906,-0.0026137,-0.079715,0.11947,0.032414,-0.12026,-0.10628,-0.17204,0.026308,0.019237,0.092776,-0.095377,-0.029368,
+    -0.043397,-0.12511,0.15651,-0.11962,-0.037835,-0.11158,0.10787,0.16347,0.028084,0.13743,-0.033054,-0.01031,-0.075868,0.21541,0.014254,-0.28479,-0.1146,-0.065865,0.11692,0.0028136,0.15132,-0.081934,0.082632,-0.15105,-0.0871,0.32538,0.072706,-0.11572,-0.31552,0.19886,-0.09983,0.11135,-0.42221,0.056584,0.4442,-0.32802,0.029111,0.015314,0.23972,-0.23724,0.31093,-0.23003,0.089867,0.40763,0.071544,-0.0030942,0.16851,0.039231,-0.5238,0.052801,-0.072765,-0.013564,-0.16537,-0.13749,-0.0029227,0.088358,0.10155,-0.14177,0.15699,0.073329,0.10025,0.12035,0.18203,-0.19103,-0.11691,0.014916,-0.052644,0.094194,-0.12761,-0.14883,0.14345,-0.13032,0.05057,0.13297,0.010911,-0.11275,0.064768,-0.040464,-0.020889,0.16714,-0.071439,
+    -0.074913,-0.06048,0.073235,0.12827,-0.043285,-0.033572,-0.099707,-0.055231,0.062892,0.21901,-0.035849,-0.0865,-0.018982,0.069578,0.4145,-0.02721,-0.0040386,0.06542,0.12227,-0.10732,-0.084196,-0.15703,-0.74292,-0.043954,-0.01126,0.10814,-0.28268,-0.12527,-0.026224,0.080962,0.68023,0.13561,0.086184,-0.05014,0.35771,-0.041319,0.27182,-0.2389,-0.53879,0.21393,0.079533,0.019276,-0.57131,-0.037592,0.15654,0.15565,0.0046008,-0.045629,0.10213,0.17657,0.68141,-0.13053,-0.069988,0.0038847,-0.4426,0.28803,0.25036,-0.36617,-0.61182,0.052883,-0.0099124,-0.022988,0.010323,-0.021637,0.051468,0.11954,0.31519,-0.035797,-0.17633,0.01432,-0.096968,0.19342,0.081606,-0.080666,-0.14648,-0.13353,0.15164,0.051955,0.095058,-0.026736,-0.088931,
+    0.089182,0.086579,0.0052153,-0.0064735,0.042601,0.01686,-0.013136,-0.057322,-0.068414,-0.089087,-0.015612,-0.061792,-0.074612,-0.037674,-0.068134,0.0088492,0.03466,-0.11153,-0.018928,0.1282,0.038576,0.011053,0.081188,-0.020579,-0.016685,-0.010986,0.035328,0.068221,0.11153,0.01353,-0.016082,0.18805,0.092608,0.032322,-0.076844,-0.0065249,0.018553,0.022786,0.02632,0.058499,0.20685,0.085097,0.092378,0.036499,0.066246,-0.081578,0.028796,-0.022867,-0.040789,0.027246,-0.13526,0.0033017,0.036037,-0.0018032,-0.021064,0.098683,-0.0046158,0.06155,0.17049,-0.0092444,0.040229,0.0084394,0.017657,1.8607e-06,0.022134,-0.020205,0.07614,0.074138,-0.038555,0.0063584,-0.039605,0.0059502,-0.084303,0.00061884,-0.002441,0.088486,0.068978,-0.037364,0.049159,0.082493,0.03697,
+    -0.0024945,-0.076098,0.112,-0.10138,0.12086,0.020787,-0.08021,-0.074377,-0.016653,0.1702,-0.088481,0.040402,0.043664,-0.049819,-0.1011,0.18096,0.076355,0.16501,0.047641,-0.2999,-0.10479,-0.11884,0.023615,-0.15416,0.048736,0.045636,-0.35215,0.24584,-0.1094,0.2384,0.12755,0.20347,-0.093578,0.014412,0.26167,0.059435,0.056774,-0.03671,0.071752,-0.13131,-0.18115,-0.24758,0.055344,-0.11349,-0.14848,-0.18046,0.12989,0.10476,-0.10054,0.01233,0.25114,0.31517,-0.15847,0.31264,-0.26691,-0.010338,0.19292,-0.093103,-0.038397,0.058027,-0.14983,-0.32016,0.24431,0.24325,0.055703,0.040476,-0.11338,0.030284,-0.17188,-0.074785,-0.058253,0.045694,-0.12652,0.0029599,-0.074625,0.044306,0.15832,-0.062993,0.20761,-0.18383,0.047951,
+    0.034533,0.081438,-0.078275,-0.0080959,0.096333,-0.032731,0.03896,0.077966,-0.098001,-0.1739,0.013836,-0.095565,-0.064897,-0.064992,-0.12441,0.074614,0.16298,-0.14313,-0.026222,0.17265,0.018621,0.041154,0.057075,-0.069865,-0.011844,0.036089,0.0047275,0.054056,0.064726,-0.077469,-0.045566,0.13836,0.0064782,-0.032843,-0.10053,-0.030013,0.081073,0.053379,0.01687,0.1271,0.25404,0.090768,0.075499,-0.01345,0.051618,-0.049904,0.11238,-0.004944,0.035916,0.056998,-0.14426,-0.014709,-0.043247,-0.090339,-0.0068687,0.17643,-0.012226,0.071628,0.15758,-0.031031,0.051149,0.046882,0.0042722,0.045019,0.097967,-0.054886,-0.0042488,0.025245,-0.066036,0.026735,0.062312,0.045272,-0.031673,0.13647,-0.00096576,0.018489,0.04139,-0.10097,-0.0093528,0.074551,0.028824,
+    -0.13361,-0.038197,0.0011511,0.01929,0.047142,0.031506,0.06337,0.032303,0.0062814,-0.037401,0.050429,0.081019,0.072322,0.011835,-0.047917,-0.019763,-0.0067713,0.027429,-0.0053185,0.034788,0.0071661,-0.0087184,-0.012048,-0.060003,-0.10047,-0.090471,0.006131,-0.018348,0.030326,-0.0099402,-0.026144,0.071654,0.038436,-0.036048,-0.023669,-0.015906,0.038312,0.078073,0.085536,0.098844,0.12574,0.046023,0.004538,0.071667,0.010145,0.057949,0.026584,0.036963,0.074397,0.072026,-0.0015226,0.017082,0.087375,-0.0057946,0.026332,-0.055387,-0.10465,-0.062769,0.027716,0.017958,-0.001045,0.013927,-0.026691,-0.02242,-0.045605,-0.090647,-0.063127,0.036068,0.065258,0.01939,0.0060568,0.0026107,-0.075331,-0.0042646,-0.059406,-0.045317,0.017716,0.010738,0.025802,0.061775,0.049093,
+    0.062546,-0.084409,-0.059603,-0.21179,-0.037492,0.13205,0.022254,-0.20561,0.098337,-0.010865,0.13121,0.27293,0.28528,0.036214,-0.17419,0.10605,0.11147,-0.053125,-0.034706,-0.4011,-0.17413,-0.0021803,-0.02329,-0.01426,-0.043212,-0.10159,-0.0019525,0.25281,0.18884,0.21823,-0.077534,-0.12631,0.20391,0.17333,-0.055733,0.085427,-0.27624,-0.093995,-0.34804,-0.18736,-0.32889,-0.24964,0.023053,-0.0032602,-0.09734,0.2485,0.44986,0.23925,0.75788,0.46508,-0.096402,0.030361,0.13836,0.034524,-0.49186,-0.33271,-0.1159,0.081899,0.14717,0.090368,-0.19145,-0.16194,0.075463,0.47786,0.033417,-0.22003,-0.65589,-0.49499,0.26522,0.30143,-0.0042514,-0.01142,-0.17787,0.030585,0.15715,0.23354,0.017105,-0.19645,0.014484,-0.17202,0.075689,
+    0.028962,-0.068783,0.050199,0.054761,-0.047709,-0.13679,-0.16251,-0.056206,0.097918,0.16367,-0.1298,0.0027293,0.034146,0.068608,0.063347,0.048673,0.077388,-0.0031245,-0.074526,-0.20246,0.027066,-0.0021527,0.051124,0.15502,0.14651,0.075885,-0.10573,-0.067488,-0.19962,0.047434,-0.011952,-0.020982,0.16967,0.14326,0.026021,-0.00033336,0.066841,-0.11799,0.089756,0.027905,0.075244,0.26025,0.16163,0.0055607,0.018228,0.029732,-0.074889,0.10381,0.0014798,0.052478,0.19517,0.051211,-0.079549,-0.055953,-0.10098,-0.042826,0.12108,0.01542,-0.026093,0.099772,0.065439,-0.05861,-0.046217,-0.024241,0.0035749,0.099805,0.041678,-0.047123,0.01245,0.024943,-0.039778,0.087724,0.12657,-0.076152,-0.058192,-0.092076,-0.050248,0.084844,0.011603,-0.066369,0.075972,
+    0.034712,0.11924,-0.099076,0.071842,-0.11198,0.073184,0.11032,-0.46884,0.094143,-0.14163,0.15164,-0.13412,0.11832,0.087421,0.015128,0.028304,0.27798,0.042134,-0.11279,-0.01955,-0.11386,-0.00070938,-0.13949,0.17623,0.27625,-0.24564,-0.16274,0.19988,0.029754,0.1177,-0.094762,-0.35952,0.082802,0.1404,-0.5055,0.32306,-0.094888,0.18298,0.021064,-0.10248,0.31057,0.49289,-0.063182,-0.53252,0.016926,-0.23779,0.22521,-0.28116,-0.25012,0.045586,0.21047,0.13688,-0.010494,0.18623,-0.067456,0.059422,0.074659,0.17601,-0.24391,-0.13953,-0.14146,-0.22604,0.040419,0.25114,-0.041464,0.068662,0.093638,-0.17197,0.35007,0.14666,-0.11698,-0.087339,-0.11872,0.067955,-0.19596,0.090436,-0.077811,0.063629,-0.044567,-0.13828,0.14514,
+    0.0027842,0.013198,0.032996,-0.0090615,-0.037821,0.059055,0.036658,-0.032938,0.0076556,-0.026547,-0.051363,-0.019686,-0.043634,-0.03369,-0.040152,-0.030751,-0.022468,0.018602,0.012158,0.01535,0.034936,-0.013303,0.037946,-0.0038268,-0.044384,-0.076137,0.01498,0.04361,0.068851,0.09881,0.031302,0.1242,0.15065,0.079782,-0.027735,-0.053834,-0.067803,0.0021824,0.13103,0.056098,0.056191,0.081343,0.10918,0.10302,-0.023758,-0.088561,-0.030784,0.087375,0.013653,0.011639,-0.0060421,0.056429,0.10692,0.041129,-0.043404,-0.0025074,0.012957,0.01234,0.11862,0.09244,0.034744,-0.024896,0.035871,-0.040759,0.013552,-0.0095878,0.017528,0.074509,0.069244,0.0011354,-0.069663,0.0080921,0.029151,0.043506,-0.039757,0.01431,0.00084354,-0.013759,0.026358,0.088239,0.082134,
+};
+
+static const float weights2_32x64x1[] = {
+    -0.24005,0.10371,0.11173,0.043521,-0.23728,0.12154,-0.23676,-0.28548,-0.61274,-0.12219,-0.060052,0.18507,0.16015,0.13923,0.21359,0.10788,-0.26999,-0.14241,-0.0013871,-0.0049516,0.34022,0.00055817,4.7351e-05,0.0037513,0.001157,0.0016542,-0.0011876,0.049888,-7.2016e-05,-0.17735,0.0011245,-0.22381,0.0035837,-0.32107,-0.16167,-0.00079228,0.050561,0.21075,0.077162,-0.33156,0.062659,0.00025429,-0.001299,0.00044869,-0.41595,-0.01995,0.00025669,0.17913,-0.59505,0.32598,0.0013793,-0.089317,-0.13067,0.21109,-0.058545,-0.11938,0.085594,-0.11414,0.28384,-0.01162,0.32102,-0.20085,-0.34134,-0.029155,
+    -0.15287,-0.451,-0.070777,0.14409,0.059531,-0.036572,0.38701,-0.12763,0.059951,0.005409,0.16428,-0.042502,0.032962,-0.19972,-0.25586,-0.054797,-0.13352,0.051931,-0.00059067,0.14124,-0.065952,0.00025939,0.00049357,0.0018757,-0.00041573,0.00061286,-0.00082537,0.0087502,0.00031561,-0.031593,-0.0011056,0.53974,0.16838,0.10016,-0.044581,-0.00082082,0.14558,0.053704,0.39987,0.36513,-6.2205e-05,-0.0015508,0.00019759,0.0014776,0.17199,0.20429,0.00071693,-0.15589,0.13173,0.043023,0.0005359,-0.14489,-0.056274,0.040607,0.12327,-0.068726,0.11685,0.20592,-0.076428,-0.10591,-0.25858,-0.23417,0.12041,-0.091543,
+    0.17293,0.12093,0.12173,-0.17765,-0.038426,0.13791,-0.018015,-0.0035333,0.052375,-0.013714,-0.023779,0.087544,0.0095443,0.0022183,0.0054768,0.14336,-0.30522,-0.027671,0.0002961,-0.090877,0.080019,0.00028917,8.4477e-05,0.0032734,-0.00097737,0.00096942,0.0023891,0.15906,0.00069234,-0.23975,0.00035524,-0.15277,0.09689,-0.13403,-0.1083,-0.0011497,-0.079127,-0.045486,0.071437,-0.11954,0.065195,0.00047708,-0.0012069,0.00023571,-0.021852,-0.10973,-0.00044282,-0.061998,-0.021858,0.1316,0.0011465,-0.12141,-0.062738,0.25537,0.10021,0.1312,0.16516,-0.14928,0.14414,0.039364,0.19444,-0.016148,-0.087619,0.08572,
+    -0.034732,0.088809,0.11532,-0.25092,-0.18177,0.11171,-0.064476,-0.047303,-0.13159,0.01896,-0.29693,0.31514,0.01669,0.085581,0.016951,0.13608,-0.0085978,-0.15839,-0.00063565,0.14605,0.029391,-0.0021237,-0.0021662,0.0011422,0.00031982,-0.00031888,-0.0013893,0.40372,0.0010367,-0.089233,0.0017262,0.049378,0.030529,-0.10995,0.041772,-0.00035097,-0.091725,-0.11212,0.018249,-0.10321,0.03656,-0.00085344,0.00051081,0.0019553,-0.17281,-0.15746,0.0016407,0.10296,-0.056333,0.12174,-0.00029968,-0.046296,-0.052036,0.17916,0.17139,0.2015,0.14662,-0.06499,0.086432,0.026575,-0.26569,-0.10079,-0.20195,0.072891,
+    0.20597,0.14843,0.1169,-0.29244,0.020928,0.14048,-0.032775,0.013995,0.048931,-0.085602,0.072816,0.069943,-0.0065381,0.084742,0.013837,0.10438,-0.32319,-0.033462,-0.00062341,-0.25233,0.08135,-0.0012573,-0.00025875,0.002164,0.00070483,0.00086261,-0.00049946,0.18028,0.00053553,-0.38502,-0.00066076,-0.15524,0.077038,-0.19909,-0.040597,0.00019839,-0.089541,-0.17452,0.19343,-0.039949,-0.053515,0.0010188,0.0012864,-4.6992e-05,0.046477,-0.15381,-0.0009432,0.068324,-0.074734,0.19692,-0.00023191,-0.071899,-0.080105,0.22581,0.11592,0.17915,0.13196,-0.11107,0.12462,0.0063502,0.093214,0.032797,0.040621,0.07625,
+    0.26655,0.0069876,0.05694,-0.21681,0.077802,0.055068,-0.077606,0.038729,-0.79304,-0.1106,0.11751,0.13263,-0.064224,0.021544,0.10655,0.05222,-0.48879,-0.2284,0.001138,0.15314,0.079263,0.00038042,0.0017872,0.00070426,0.00024586,-0.0015021,0.00033512,0.1798,-0.00030351,-0.091836,-0.00031797,-0.17677,0.05355,-0.30156,0.019367,-0.00010185,-0.037124,-0.077966,-0.16881,-0.57964,0.15655,-0.0013217,-0.0010914,0.0011884,0.10661,-0.12484,0.00042265,0.092965,-0.38826,0.29945,0.00077771,-0.28242,-0.09772,0.30563,0.21152,0.070085,0.082358,-0.0094612,0.14995,0.025701,0.22086,0.016543,-0.040672,0.012884,
+    0.006178,-0.013292,0.19167,-0.017106,-0.075068,0.18046,-0.30788,0.048326,0.059621,0.1261,-0.24595,0.12366,0.028637,-0.0061772,-0.048914,0.16809,-0.10487,-0.10495,-0.00045207,0.23579,0.050763,-0.0011827,-0.00010527,0.0018256,0.00089913,-0.0015281,-0.00053364,0.16324,0.0020393,0.015845,0.0016317,-0.06386,0.054094,-0.14963,-0.014347,0.0012925,-0.12354,0.016354,-0.25192,-0.042811,0.1909,-0.00022992,0.0018944,-0.00054305,-0.11097,-0.050558,-0.0011445,-0.0023186,-0.11913,-0.022436,0.0001445,-0.13725,-0.024185,0.24273,0.13877,0.1363,0.15726,-0.15798,0.10887,0.077192,0.097396,-0.09166,-0.20623,0.11894,
+    -0.095082,-0.075439,0.27063,0.087871,0.1014,0.26853,-0.59093,0.19822,0.089375,0.055678,-0.11613,0.039116,0.063157,0.10782,-0.019807,0.14512,-0.060944,-0.07014,0.00016978,0.17468,0.060633,-7.287e-05,0.00059397,0.0018405,0.001129,0.00019233,0.00196,0.076298,0.00034283,-0.00053391,-0.00011325,-0.032019,0.041796,-0.31851,0.08271,0.0021726,-0.16682,-0.03182,-0.32887,0.046451,0.17612,0.00069009,7.9614e-05,-0.00019473,-0.096949,-0.033249,-0.00081721,0.22587,-0.22234,-0.054598,-9.8287e-05,-0.14924,-0.03905,0.20695,0.07705,0.16611,0.14414,-0.23808,0.10244,0.097654,0.088406,-0.024117,0.00066911,0.17866,
+    0.11668,0.10862,0.11338,-0.23225,-0.054111,0.12931,-0.030744,-0.0236,-0.023977,-0.0223,-0.10048,0.16049,-0.0047802,0.040884,0.0047388,0.12917,-0.21303,-0.072749,0.00026209,-0.036599,0.05908,0.00064373,-0.00039178,0.001065,0.00099312,-0.0011871,-0.00032987,0.24312,0.00091929,-0.20851,0.00039866,-0.073717,0.068165,-0.14295,-0.029881,-0.00082499,-0.093396,-0.11395,0.070462,-0.11396,0.027632,-0.0014278,-0.00074672,0.00066866,-0.05321,-0.14419,-0.0019058,0.036103,-0.045452,0.13939,0.0002087,-0.09519,-0.065847,0.22462,0.12798,0.17648,0.15184,-0.12067,0.12076,0.023683,0.0076472,-0.040535,-0.10981,0.078162,
+    0.0611,0.11835,0.10444,-0.2634,-0.055349,0.12658,-0.07218,-0.0094555,-0.09345,-0.080263,-0.091957,0.19738,0.0019429,0.11292,0.06031,0.10732,-0.15051,-0.076561,0.00090799,-0.046496,0.048438,0.00026803,5.6948e-05,0.00083168,0.00028356,0.0023436,-0.00052142,0.28922,0.00051809,-0.24499,-0.00074669,-0.016384,0.058051,-0.19633,0.022773,-0.00047802,-0.090634,-0.14776,0.11926,-0.096436,-0.01233,0.00029323,-0.0010079,0.00074612,-0.10432,-0.17565,-0.00054809,0.14772,-0.045832,0.1693,-0.0022354,-0.073542,-0.081353,0.18026,0.11273,0.20461,0.14013,-0.12387,0.10517,0.010818,-0.11698,-0.035468,-0.051155,0.075713,
+    0.19352,0.20594,0.07897,-0.33665,-0.32913,0.13116,-0.12088,-0.1102,-0.045862,-0.058414,-0.16083,0.12795,-0.068884,0.21972,0.14308,0.056867,-0.15417,-0.090229,-0.0011901,0.095902,0.043304,-5.3808e-05,0.0017778,0.00068947,-0.00033517,-0.00053244,0.00070199,0.25493,0.00053857,-0.16343,0.00023793,-0.14627,-0.052894,-0.026359,-0.35611,0.0010252,-0.072704,0.088962,0.36058,-0.037235,0.17617,-0.00036198,0.0015531,-0.00037672,-0.071252,-0.10504,0.0010543,-0.0016338,-0.39881,0.13447,0.0006068,-0.033088,-0.045111,0.1176,0.15917,0.18349,0.016952,-0.12615,0.032312,-0.070259,0.14373,0.024115,-0.14782,0.030958,
+    0.01811,0.0032063,0.1705,-0.066473,-0.011934,0.17751,-0.24868,0.044789,-0.042075,0.054483,-0.19995,0.15366,0.026442,0.029335,-0.012454,0.14893,-0.10988,-0.080876,0.00012219,0.15185,0.047082,0.0001846,0.00055384,0.0015058,-0.00044093,0.00097333,-0.0017067,0.20057,-0.00089399,-0.050562,-0.0015462,-0.0059439,0.058647,-0.17915,0.056028,-0.0010231,-0.11977,-0.047967,-0.18322,-0.092342,0.12177,-0.0010735,-0.00041025,0.0027656,-0.10717,-0.094324,0.00089209,0.098216,-0.093819,0.039276,0.00050283,-0.13123,-0.049591,0.22643,0.1142,0.19309,0.15799,-0.15699,0.11331,0.057073,-0.019314,-0.076156,-0.19036,0.11569,
+    0.29868,0.26215,0.073968,-0.2949,-0.24176,0.17589,-0.27746,-0.10191,-0.089913,-0.14531,-0.037775,0.054935,-0.088154,0.306,0.021282,0.11163,-0.28069,-0.083778,-0.00033733,0.25699,-0.093728,0.00031245,-0.0016113,0.0033619,-0.0012186,0.00024745,0.0016051,0.30544,0.0014632,-0.081107,0.00042033,-0.29627,-0.084526,-0.23352,-0.3916,-0.0033525,-0.26287,-0.11437,0.34703,0.015164,0.27905,-8.5843e-05,-0.0015158,-0.0014726,-0.22591,-0.26072,0.00015349,0.25017,-0.2572,0.33456,-0.00021782,-0.11384,-0.13193,0.069371,0.21919,0.21284,0.062821,0.010206,-0.048546,-0.064333,0.15781,-0.085211,-0.055269,0.076483,
+    -0.00010576,0.046651,-0.027792,0.015003,0.041954,0.031172,0.010692,0.027772,-0.12542,-0.028713,0.02116,0.024871,-0.15171,0.005234,0.10481,-0.00015563,0.0061266,0.050319,-0.00072786,0.057769,-0.10946,0.00015135,-9.6681e-05,-0.0012628,0.0019641,-0.0014381,-0.00028544,0.032275,-0.00098192,0.011006,0.0015969,-0.020184,-0.073103,-0.031699,-0.06436,0.00032201,-0.043013,0.071165,0.039701,0.00032443,-0.047405,-0.00078486,0.00013456,-0.00058222,-0.0017034,-0.0079832,-0.00011821,0.14862,-0.021435,0.0069105,0.00077028,0.03172,-0.050226,0.072183,-0.090579,0.07371,-0.053778,0.066588,-0.2125,0.015977,-0.0094165,0.11147,-0.00057584,0.047275,
+    0.78198,0.37961,0.032727,-0.28089,0.22353,-0.12401,-0.4067,-0.30482,-0.35138,-0.23155,-0.10113,0.33728,-0.27024,0.27499,-0.098765,0.13187,0.072966,-0.19798,0.0011231,0.19601,0.16111,0.0005953,0.00046917,0.0044457,0.00074047,-0.00024114,-0.0016018,0.21071,0.00058367,-0.14057,-0.0016807,-0.10319,0.1223,0.053132,-0.23962,-0.0012194,0.026986,-0.14691,0.42727,0.096816,-0.16738,-0.0004913,4.6706e-05,0.0014883,-0.098991,-0.025238,0.00085065,0.056789,-0.51852,0.10666,-0.00023312,-0.0072941,-0.13187,0.23599,0.20317,0.56685,-0.075142,-0.20776,-0.11929,0.20095,0.61646,-0.049605,-0.022527,-0.028902,
+    0.21188,0.24053,-0.076983,-0.13883,-0.055531,-0.23756,0.28574,0.039924,-0.92067,-0.013998,-0.12727,0.39528,0.070676,0.1806,0.17611,0.053285,-0.30852,-0.38139,0.00095414,0.30039,0.19056,-0.00056049,0.0019474,0.0032518,0.00010509,-0.0014811,0.00046144,0.20664,0.00076003,-0.12085,-0.0010493,0.090871,0.05694,-0.34471,-0.094695,0.00016782,-0.29504,-0.36681,0.21865,-0.14171,0.48793,0.0011961,-6.0225e-05,0.00053313,-0.16002,0.037432,-0.00021727,0.33133,-0.30647,0.27082,9.6969e-05,-0.3078,-0.13089,0.37038,0.42197,0.38427,0.046711,-0.060445,0.20956,-0.027388,-0.063087,-0.12155,-0.52662,-0.20936,
+    0.024492,-0.016881,0.16145,-0.089105,-0.0062575,0.16621,-0.24253,0.019118,-0.11482,0.095752,-0.24899,0.15462,0.0087667,0.033977,-0.044534,0.13078,-0.09352,-0.13371,-0.00098805,0.16824,0.038047,0.00013228,-0.00067082,-0.00074446,0.00062624,-0.00088878,0.0017322,0.29813,-0.00025256,-0.074125,-0.00070914,0.066849,0.047701,-0.18591,0.18865,-0.00014442,-0.13065,-0.1552,-0.24287,-0.15782,0.079992,0.00010766,-0.00068279,0.0019763,-0.049114,-0.147,0.0004013,0.15923,-0.073739,0.067206,0.00010336,-0.10612,-0.055031,0.22272,0.14349,0.18941,0.14842,-0.076275,0.096731,0.030849,-0.20372,-0.09014,-0.29434,0.09902,
+    -0.030465,0.1165,0.1287,-0.20196,-0.19043,0.16854,-0.13013,-0.019628,-0.2848,-0.074358,-0.16502,0.19246,0.004149,0.092145,0.15674,0.099739,-0.16423,-0.077906,-6.3738e-05,0.1648,0.057664,-0.00039432,0.0013715,0.00078244,0.00029224,0.00017986,-0.00033196,0.24196,-7.1365e-05,-0.13562,-0.00093305,-0.074134,0.083425,-0.15318,-0.19518,0.0014851,-0.029485,0.0019428,0.057081,-0.22925,0.1462,0.001251,0.00010126,-0.00039054,-0.24598,-0.16584,0.0012138,0.075834,-0.080799,0.062911,-0.00057159,-0.15605,-0.079309,0.22947,0.12577,0.10959,0.10915,-0.24639,0.094956,0.018052,0.10493,0.097525,-0.033455,0.091736,
+    0.035122,-0.012224,0.22503,0.061404,0.061417,0.23072,-0.36219,0.13237,0.11727,0.061625,-0.094518,0.04842,0.069165,0.0053151,-0.033621,0.1762,-0.18929,-0.0028446,-9.9965e-05,0.098647,0.083142,-0.00091814,0.0010274,0.0025986,-0.00077725,-0.00057995,-0.00034561,0.035594,1.3618e-05,-0.03075,0.0016638,-0.098494,0.084166,-0.20742,-0.039404,-0.00036933,-0.13116,0.048433,-0.23494,-0.019685,0.19205,-0.00049879,0.0011032,0.0015117,-0.075869,-0.011957,-0.00096619,0.014168,-0.13225,-0.025544,0.00076551,-0.1792,-0.035495,0.26307,0.067958,0.16245,0.17858,-0.24874,0.14598,0.10195,0.26068,-0.034242,-0.085982,0.1556,
+    0.026411,0.13714,0.10322,-0.28045,-0.13542,0.11265,-0.083516,-0.021793,-0.069793,-0.061935,-0.1355,0.2303,-0.008712,0.10867,0.049721,0.11688,-0.12506,-0.093064,-0.00022386,-0.0042831,0.0417,0.00091185,-0.00081095,0.00074836,0.00063271,0.00017271,-0.0010362,0.30264,0.0011932,-0.21439,-0.00098804,-0.050169,0.046964,-0.1658,-0.054139,-0.0019726,-0.082765,-0.10875,0.14453,-0.047551,0.0065702,0.00064894,-0.0020689,-0.00070247,-0.13259,-0.16289,-0.00079884,0.073628,-0.057936,0.14488,-0.00014863,-0.051709,-0.065319,0.17627,0.13228,0.18569,0.13334,-0.11719,0.096052,0.016216,-0.078107,-0.046589,-0.029425,0.073553,
+    0.077388,0.25572,-0.047979,-0.27458,-0.31406,-0.005391,0.066081,-0.03575,-0.1825,-0.026767,-0.31639,0.32747,0.028152,0.084041,0.16643,0.14465,-0.15841,-0.059945,0.00037152,0.21763,-0.026037,0.00090665,0.0020252,0.0011216,-2.7174e-05,-0.00023492,-0.00088734,0.19854,-0.00052354,-0.11501,0.00032299,-0.16939,0.068875,-0.21195,-0.34234,0.0012092,-0.013735,-0.065346,0.15182,-0.31961,0.041757,-0.00014504,-0.00021558,0.0019134,-0.39524,-0.22582,0.0003361,-0.040953,-0.31602,0.11691,0.0013048,-0.082923,-0.11387,-0.020365,0.22902,0.18764,0.19565,-0.26262,0.098503,0.058686,0.31424,-0.23355,-0.28228,0.059283,
+    0.42206,0.13854,-0.079741,-0.28322,-0.40077,-0.092915,0.063446,0.015597,0.08446,-0.35864,-0.36622,0.50972,0.27634,-0.19643,0.2568,0.13328,0.2808,0.27868,-4.9452e-05,0.30511,0.28478,0.00077821,0.0004407,0.00062704,0.0011129,0.001503,-0.0013615,0.030074,0.00024809,-0.23818,-0.00025748,-0.61144,-0.17171,-0.091532,-0.61178,-0.00091817,-0.096741,-0.43263,0.47612,-0.21955,0.06679,-0.00013489,-0.00085217,0.00013285,-0.059049,-0.092285,0.00072941,0.54625,0.1415,-0.010856,-0.00030785,-0.21023,-0.029572,-0.24736,0.4033,0.95253,0.094575,-0.75446,0.30124,0.021453,0.48676,-0.11234,-0.37762,-0.018425,
+    0.07296,0.059599,0.15687,-0.090129,-0.051758,0.15817,-0.18507,0.032852,0.057876,0.030772,-0.11312,0.11001,0.023252,0.0054119,-0.001566,0.15287,-0.20435,-0.045124,-0.00056316,0.063809,0.066449,0.0019463,0.00090247,-0.00042241,0.0011457,-0.00020297,-0.00033927,0.12988,0.0015716,-0.11117,-0.00038433,-0.12949,0.078437,-0.1499,-0.096344,-0.00087957,-0.10044,0.017411,-0.068704,-0.041505,0.12914,-0.00044071,-0.0014618,0.00065926,-0.090943,-0.073152,0.00054799,-0.02735,-0.084712,0.052073,0.0007967,-0.12828,-0.043846,0.23765,0.1066,0.14839,0.16102,-0.18025,0.12618,0.063211,0.19476,-0.047946,-0.099106,0.10489,
+    0.31174,0.17877,0.06712,-0.30806,-0.095714,0.1004,0.076315,-0.067563,-0.24514,-0.15668,0.05691,0.02675,0.08246,0.15251,0.244,0.060841,-0.34118,0.072067,0.00015647,-0.09134,0.10626,-0.0014722,0.0016895,0.0026997,-0.0013719,-0.0026647,-0.00083883,0.21277,0.00016302,-0.3646,-0.00081579,-0.22927,0.030675,-0.14244,-0.23962,0.00041021,-0.018436,0.023543,0.15006,-0.181,0.1083,0.00046877,-0.0012581,0.0012965,-0.039793,-0.24586,0.00038769,-0.05672,0.0029553,0.16941,0.00054961,-0.18932,-0.10476,0.32681,0.084163,0.1447,0.05378,-0.10248,0.13141,-0.033547,0.3236,0.1932,-0.024356,0.0052967,
+    0.40523,0.49614,0.13983,-0.0073458,-0.46968,0.14895,-0.4627,-0.35037,-0.10771,-0.081095,-0.6809,0.20223,0.026867,0.37774,0.48144,0.10478,-0.13514,-0.081212,0.0014553,-0.063279,-0.028708,0.00043295,-0.0011518,0.0015289,-0.00061721,0.00083852,0.0010457,0.0157,-0.0006724,-0.12893,-0.00049793,-0.32699,0.011289,-0.23095,-0.26603,0.001722,-0.17029,-0.71041,0.46759,-0.21591,0.2716,0.00028149,-0.00049018,0.0005414,-0.37874,-0.0050373,-0.00043052,0.31203,0.22263,0.049313,0.0013403,0.03946,-0.14459,-0.1229,0.19186,0.48829,-0.057478,-0.23647,-0.073436,0.27161,0.65438,-0.24275,-0.44666,0.16535,
+    -0.24795,0.061465,0.17415,0.016206,-0.58246,0.059436,-0.72296,-0.025983,-0.048479,0.089631,0.067165,-0.10923,-0.040529,0.10979,0.015185,0.10108,-0.32443,-0.21292,8.4998e-07,-0.039313,0.14753,-7.934e-05,-0.0018962,0.0029355,0.00020818,0.001662,-0.00058926,-0.121,0.00015967,-0.28751,0.00074897,-0.47537,0.053027,-0.17655,-0.36401,8.5199e-05,-0.13304,0.2328,0.10962,-0.042836,0.17726,0.0026859,-0.00060075,-0.0013182,-0.29375,-0.057609,-0.00089214,-0.019781,-0.69957,0.12351,0.0019983,-0.054528,-0.064404,0.20873,-0.14296,-0.33345,0.072988,0.099112,0.094602,0.04455,0.44307,-0.16803,0.022962,0.0083353,
+    4.9708e-05,-0.0025146,2.3118e-05,1.5305e-05,0.0014285,-0.00043278,0.00029743,0.00020737,-0.00098783,-0.0017867,0.0002107,-0.00076179,0.00066417,0.0011071,0.0010781,-0.0030748,-0.00061128,0.00050828,0.0025799,0.0011911,-0.0017789,0.001546,-0.00042269,0.0002861,-0.00094672,-0.00051378,0.00048906,0.00061189,0.00084429,-0.00069551,0.00077861,-0.00080636,-0.0018831,0.0027369,0.00053875,0.0017444,0.0010496,0.00025058,0.0010603,0.00090448,-0.00090206,-0.00092106,-0.00040789,-0.0010925,0.00052809,0.0011317,-0.00079596,0.0010164,-6.4724e-05,-0.0016699,-0.00074936,-0.00067971,-0.00096428,-0.0027088,-0.00059987,0.00010552,-0.00091336,-0.001878,2.6405e-05,-6.863e-05,-0.00070411,0.0013223,-0.00032541,-0.0013106,
+    0.20083,0.23286,0.032523,-0.36512,-0.46888,-0.26507,-0.33263,-0.064717,-0.73831,-0.18759,-0.20192,0.28061,0.18358,-0.0011514,-0.27076,0.20028,-0.28471,-0.19433,-0.0007925,0.0050945,0.21329,0.00057036,-0.00047424,0.0011097,-0.00021287,0.0010287,-0.00041789,0.17429,4.7564e-05,-0.22718,0.0015286,-0.060056,-0.044658,-0.081586,0.15957,-0.0010575,-0.22036,-0.27887,0.28295,-0.023276,0.0361,0.00058798,0.0012142,-0.0008611,-0.090798,-0.092001,9.1906e-05,0.11325,-0.24395,0.20444,-0.0013476,0.0043306,-0.01618,0.50165,0.52226,0.1193,0.076384,-0.12463,0.16022,0.14887,-0.066648,-0.3342,0.44983,-0.16605,
+    -0.28658,0.10607,0.19532,-0.018673,-0.35253,0.17786,-0.69525,-0.038078,-0.27942,-0.085839,0.0091051,-0.11476,0.043652,0.23203,0.14618,0.031704,-0.11272,-0.15111,4.356e-05,0.052463,0.21248,-0.00018583,7.5066e-06,0.0030571,0.00042585,-0.00036943,0.00024029,0.23403,0.0011034,-0.31993,0.001266,-0.073482,0.0072665,-0.33153,-0.08674,-0.00051679,-0.1468,0.025497,0.056329,-0.20352,0.16414,-0.0010638,0.00091376,-0.0027217,-0.38258,-0.10243,6.4927e-05,0.14497,-0.52155,0.19253,0.00057482,-0.021674,-0.11084,0.21385,0.031164,-0.18227,0.031884,-0.01102,0.11781,-0.0004974,-0.063014,0.03483,-0.05228,0.045389,
+    0.00055211,0.017729,-0.17226,0.0037039,0.0015674,-0.10055,0.021109,0.020773,0.14595,-0.04253,0.013751,0.0076898,0.041918,0.01694,0.0021079,-0.066834,0.020539,0.029144,-7.8013e-05,0.00048368,-0.017668,-0.00054482,0.0010524,-0.00076716,-0.00012459,0.00087687,-0.00051358,-0.0037998,0.00038614,0.014109,0.00069322,-0.0067222,-0.020901,0.026552,-0.0011497,-0.00075074,0.028344,0.0092012,0.0057718,0.021699,-0.014503,-3.4917e-05,-0.00035786,-0.0011784,0.060572,0.020316,-0.0011969,-0.048734,0.023842,-0.023542,0.0017062,0.021966,0.0003368,-0.19098,0.065072,-0.025175,-0.045646,0.030473,-0.035558,0.019031,0.025007,0.0028738,0.013087,-0.017679,
+    0.57228,0.44932,0.033468,-0.052153,-0.16511,0.095149,-0.25351,-0.31728,0.020857,0.016308,-0.093144,0.19571,-0.39591,0.26922,0.33176,0.11175,-0.2671,-0.056412,-0.0015118,0.29373,0.17934,-0.0010252,0.0010095,0.003585,0.0006588,0.00093926,0.00033792,0.34794,-0.00042587,-0.080816,0.00038307,-0.011362,-0.0033058,-0.088197,-0.32478,-0.0011537,-0.27391,-0.11554,0.172,-0.0041303,0.41344,0.00035705,0.0014988,0.0013575,-0.55712,-0.28809,-0.0024486,0.1794,-0.20062,0.31715,0.00083554,-0.070665,-0.13723,-0.1097,0.058733,0.24035,0.18251,0.11015,0.2434,-0.041505,0.19961,-0.15186,-0.27343,0.13768,
+    0.22349,-0.0088777,-0.1719,-0.43331,0.20233,0.04317,-0.36004,-0.0067409,0.18265,-0.11805,-0.074125,0.032417,0.051557,0.085616,0.40917,-0.078643,-0.22887,-0.24393,0.00014124,0.64688,-0.036077,-0.0014531,-0.0011161,0.0033059,0.0017938,-3.7507e-05,-0.0016759,0.40134,-0.00073333,-0.28098,-0.0010192,0.019602,0.093149,-0.53063,0.1758,-1.5525e-05,-0.20916,-0.66345,-0.14849,-0.065955,-0.034881,-1.1967e-06,0.0003612,-0.0012568,-0.1061,-0.58169,-0.00066488,0.44566,-0.51217,0.24637,0.0010917,-0.23796,-0.23286,-0.076564,0.3303,0.27319,0.094247,-0.16982,0.017023,-0.10659,0.1109,-0.089413,-0.35293,0.065459,
+};
+
+static const float weights3_32x25[] = {
+    -0.017336,0.025047,0.015386,0.0097884,0.011461,-0.0066918,-0.0085432,-0.021832,-0.04779,0.010204,0.028391,-0.013373,0.091362,0.0081989,0.006445,0.017852,-0.029815,-0.034236,-0.0095083,-0.013271,-0.0081259,0.014487,0.022586,-0.00040658,-0.0040617,
+    0.014926,-0.012476,0.023364,-0.00019504,0.012903,0.014618,-0.022226,0.039244,-0.011736,-0.016776,-0.0086812,-0.034088,0.050252,0.00034837,-0.019156,-0.010947,-0.032532,0.01581,-0.015689,-0.0097489,0.023091,-0.00079307,0.034468,0.0020967,0.0025289,
+    0.019393,-0.0018891,-0.0087748,-0.016453,0.011383,0.0088097,0.001982,0.024057,-0.0069965,-0.0081427,-0.007546,0.018014,0.047536,0.017919,-5.4778e-05,-0.012056,-0.01009,0.0079764,-0.027411,0.0079871,0.013341,-0.014664,-0.01296,-0.0078294,0.012357,
+    -0.0044453,-0.014845,0.00033161,-0.0092831,-0.014642,-0.0030973,-0.017328,0.016758,-0.0037266,-0.015477,-0.0066172,0.031105,0.055385,0.0019724,-0.020789,-0.024213,-0.007594,0.028725,0.0045164,-0.0041783,-0.0017571,-0.016458,-0.0014373,0.010407,0.0082859,
+    0.02694,0.0037114,-0.013394,-0.023557,0.0025062,0.0045377,-0.0028896,0.022511,-0.0044415,-0.0098808,-0.021044,0.0041083,0.043843,0.028093,0.008316,-0.012466,-0.018418,0.011486,-0.021238,0.012321,0.011544,-0.017404,-0.014426,0.0047819,0.0273,
+    0.00038831,0.0015292,0.018398,0.019991,-0.0050414,0.022115,-0.016438,-0.010642,-0.013958,-0.0095514,-0.01444,-0.031565,0.091538,-0.033846,0.010842,-0.0064643,-0.021666,-0.027825,-0.03217,0.018137,0.0049885,0.012685,0.017766,0.0050348,-0.0072901,
+    0.0042215,-0.01961,-0.0010601,-0.0016918,0.020811,0.0010285,-0.0019898,0.018529,-0.014418,0.005243,-0.0069368,0.022588,0.05585,-0.0029949,-0.031903,-0.011034,0.0047075,0.022403,-0.0084363,-0.01029,0.022473,-0.003884,-0.0053869,-0.016705,0.0016193,
+    0.0050745,-0.023836,0.0013283,0.0067895,0.03624,-0.011907,-0.0046545,0.018505,-0.015041,0.025619,-0.029413,0.0012498,0.057651,0.0077435,-0.026403,-0.0085734,0.0044598,0.029603,0.0077111,-0.01203,0.03654,-2.3891e-05,-0.0055082,-0.016411,0.0096741,
+    0.012986,-0.0046585,-0.0046541,-0.015027,4.4365e-05,0.0037739,-0.0056254,0.022858,-0.0040648,-0.011334,-0.011166,0.018506,0.049471,0.014146,-0.0063526,-0.016812,-0.011069,0.017044,-0.015981,0.0039974,0.0076837,-0.016087,-0.0082512,0.0011982,0.014147,
+    0.0080072,-0.0054209,-0.003481,-0.013967,-0.0060895,-0.0034918,-0.012664,0.019767,-0.0018138,-0.010231,-0.018499,0.015938,0.049772,0.018825,-0.0014378,-0.022378,-0.014538,0.022053,-0.0058475,0.002777,0.003788,-0.019044,-0.0066937,0.0094455,0.015116,
+    0.0089508,-0.011579,-0.038735,-0.025483,-0.0045988,-0.0019705,-0.0021303,0.0094679,-0.019498,-0.0072891,-0.00057806,0.033971,0.065135,0.0144,0.0094033,0.0030896,-0.012747,-0.0047717,-0.016302,-0.00016121,0.007957,0.0041568,-0.0042488,-0.0058587,0.011295,
+    0.0052797,-0.012783,0.0043201,-0.0011143,0.013829,-0.0022535,-0.005864,0.021335,-0.0090176,0.001426,-0.014951,0.018751,0.055985,0.0019946,-0.02353,-0.018295,-4.5477e-05,0.02664,-0.0050288,-0.0068505,0.015366,-0.0080705,-0.0030099,-0.007212,0.005222,
+    0.015199,-0.013413,-0.012688,-0.024853,-0.009625,-0.00088587,-0.02051,0.0067011,-0.022034,-0.0038161,-0.0052539,0.028309,0.078799,0.026918,0.030139,-0.0002119,-0.018159,-0.011268,-0.034513,0.00064985,0.012252,-0.0033578,0.0014789,-0.024534,0.013473,
+    -0.010863,-0.0026979,0.0053445,-0.0025222,-0.0024852,-0.009839,-0.0041898,0.0049985,-0.0017825,-9.1097e-05,-0.0052208,0.0013284,0.041162,0.00095234,0.00095609,-0.0088021,-0.001629,0.003383,-0.005412,-0.0050651,-0.0113,-0.005161,-8.2465e-05,-0.0071555,-0.0070844,
+    0.011826,-0.0084492,-0.029875,-0.0068102,0.011964,-0.011421,-0.0015994,0.013553,-0.022081,-0.010166,-0.028963,-0.0034242,0.11658,0.027028,0.0034559,0.0041354,-0.0078459,-0.015702,-0.057007,-0.0097356,0.018808,0.014172,-0.012846,-0.014008,0.017488,
+    -0.019966,-0.0019774,0.0098074,-0.0052229,0.0057441,0.021809,-0.014543,-0.01105,-0.023863,0.01249,0.021637,-0.04904,0.11622,-0.052713,0.013106,-0.0019236,-0.02419,-0.03459,-0.0095198,0.017527,-0.0016539,0.0079173,0.025195,0.0050018,-0.018865,
+    0.0079919,-0.0099945,0.013966,0.0034037,0.0044098,-0.0011488,-0.01298,0.021291,-0.011861,-0.0056803,-0.019348,0.017518,0.055704,-0.0082341,-0.032455,-0.026378,-0.0060074,0.034043,0.00060863,-0.0060978,0.010704,-0.010331,0.0025184,0.00020402,0.0091586,
+    -0.0046207,-0.019019,-0.0039543,-0.0057573,-0.0028753,-0.0041014,-0.01211,0.017782,-0.0093694,-0.010443,-0.011709,0.029355,0.061708,0.018863,0.00014959,-0.017802,-0.013039,0.009691,-0.015811,-0.0072428,0.011613,-0.0081831,-0.0049616,-0.0081696,-0.011142,
+    0.011911,-0.014209,-0.002595,3.0099e-05,0.037273,-0.00041378,0.0056974,0.023486,-0.011684,0.016428,-0.014264,0.012375,0.055691,0.0092182,-0.018465,-0.0063814,0.0067027,0.018198,-0.013824,-0.0060196,0.030274,-0.0030317,-0.010555,-0.021851,0.0050981,
+    0.0043943,-0.010815,-0.010605,-0.016694,-0.0079704,-0.0025396,-0.011344,0.016261,-0.0027838,-0.0099353,-0.011821,0.021071,0.050107,0.018654,-0.0040784,-0.018069,-0.012078,0.018704,-0.0050004,0.00083424,0.0045916,-0.018925,-0.010357,0.0080302,0.01289,
+    -0.015275,-0.012636,-0.022159,-0.026578,-0.023842,-0.017456,-0.0062731,0.024738,0.0015959,-0.022227,0.0029874,0.043246,0.053597,0.018533,0.0037152,-0.0036655,-0.00073221,0.0041338,-0.027597,-0.023045,-0.02433,-0.025037,0.0054867,-0.0050565,-0.019689,
+    0.0070589,-0.025711,-0.040492,-0.055859,-0.020695,-0.016486,-0.020269,0.065497,0.013797,0.01565,-0.043466,-0.0017072,0.11819,0.019084,-0.034191,0.013736,0.0034031,0.012773,-0.047303,-0.013992,-0.014096,-0.018174,-0.021662,-0.024148,0.0028594,
+    0.01029,-0.011209,-0.0082667,-0.010408,0.018301,0.0025677,0.002066,0.020338,-0.009703,0.0014033,-0.0083895,0.019171,0.051874,0.011865,-0.012415,-0.0092653,-0.00085054,0.013343,-0.01754,-0.002096,0.018685,-0.0089012,-0.011406,-0.013634,0.0053699,
+    0.013065,0.0061852,-0.01931,-0.024492,-0.0013983,0.0073914,-0.0066272,0.017187,-0.016293,-0.026624,-0.020286,0.02005,0.053055,0.020338,0.020487,-0.027791,-0.017894,-0.0101,-0.041414,0.011034,0.0088582,-0.006475,-0.0068052,0.0064488,-0.0042941,
+    -0.010343,-0.028723,-0.0053983,-0.01374,-0.029326,-0.049815,-0.036355,-0.0055914,-0.0022775,-0.007203,0.018381,0.044325,0.094884,0.045083,0.0046755,-0.012576,0.027413,0.015592,-0.041248,-0.024964,-0.048041,-0.04541,-0.0043235,-0.029982,-0.014502,
+    0.017746,-0.015992,-0.027176,-0.0016935,0.039605,-0.008181,-0.0098833,-0.030282,-0.058384,0.025399,0.0094021,0.00035681,0.05972,0.02304,-0.0017117,0.043335,-0.039493,-0.031008,-0.012798,-0.01464,0.016878,0.007166,-0.0074393,-0.037354,0.014149,
+    -4.6093e-06,-7.2622e-06,-7.6834e-06,-6.9714e-06,-5e-06,-5.9784e-06,-6.2109e-06,-3.9642e-06,-5.6584e-06,-6.0324e-06,-6.4926e-06,-3.7826e-06,0.03125,-2.3969e-06,-5.6997e-06,-7.0378e-06,-7.2416e-06,-4.1644e-06,-5.4397e-06,-5.8029e-06,-5.1983e-06,-7.5856e-06,-7.7238e-06,-6.9213e-06,-4.7263e-06,
+    -0.0030044,0.0059219,0.0058844,0.016727,0.0021213,0.017586,-0.02644,-0.0401,-0.010032,0.022034,0.023732,-0.05497,0.092623,-0.033417,-0.016189,0.026427,-0.019933,-0.023361,-0.0086142,0.013127,0.0072843,0.00128,-0.021759,0.033992,0.0038339,
+    0.004238,-0.012754,-0.0025555,0.012803,0.017022,-0.011831,-0.028892,-0.023674,-0.051561,0.02422,-0.012512,0.00025987,0.071229,0.0004289,0.00093794,0.0057987,-0.053384,-0.0073699,0.0048934,-0.012663,0.0059655,0.00069129,0.0082262,-0.004451,0.012931,
+    0.011624,0.0046318,0.0031521,0.0015066,0.0030794,0.011075,-0.0013151,0.0031256,-0.0016375,-0.0024924,0.0038245,-0.0030981,0.035595,-0.00082805,-0.0044747,0.0013659,-0.0054627,-0.0021892,-0.0032666,-0.00088623,0.005186,0.005903,0.0066537,0.0042462,0.0046949,
+    0.0042922,-0.012866,0.0077376,-0.0092877,0.0041404,-0.018346,-0.023602,0.0036819,-0.033829,-0.0025713,-0.0096208,0.042019,0.10133,0.010724,0.015642,-0.014492,-0.0099553,-0.004158,-0.047724,0.001651,0.0015475,-0.0043672,-0.0085801,-0.032517,0.013099,
+    0.0036017,-0.015348,-0.0016007,-0.026466,-0.024156,-0.028922,-0.010726,0.035655,-0.01486,-0.024257,-0.072175,-0.014718,0.033047,0.0077159,-0.03106,-0.016381,-0.045895,0.040367,-0.029738,-0.045123,0.0014243,-0.024956,0.034193,-0.010747,-0.015423,
+};
+
+
+static const float biases1_64[] = {
+    -0.016607,
+    -0.011107,
+    -0.004831,
+    -0.048674,
+    -0.030041,
+    -0.072972,
+    -0.019459,
+    -0.009738,
+    0.69512,
+    -0.073694,
+    -0.013542,
+    0.010336,
+    -0.029562,
+    0.018691,
+    -0.021675,
+    0.0040888,
+    -0.080331,
+    -0.020802,
+    -0.00025044,
+    0.015666,
+    -0.02444,
+    -0.00014609,
+    -5.0048e-05,
+    -0.0011854,
+    -8.3538e-05,
+    0,
+    -0.00037627,
+    0.029716,
+    -9.9403e-05,
+    -0.020137,
+    -0.00029498,
+    0.019286,
+    0.0055777,
+    -0.070032,
+    -0.024399,
+    -1.7727e-05,
+    0.0050997,
+    -0.011212,
+    0.0045361,
+    -0.024612,
+    -0.022536,
+    -0.00016232,
+    -0.00017363,
+    -1.5526e-05,
+    -0.065597,
+    -0.0065806,
+    6.6839e-06,
+    0.025229,
+    -0.0013731,
+    0.030352,
+    0,
+    0.0032856,
+    0.0055279,
+    0.020767,
+    -0.0084906,
+    0.026332,
+    -0.04679,
+    0.01033,
+    -0.023649,
+    0.027852,
+    0.054407,
+    -0.080683,
+    -0.0094465,
+    -0.046632,
+};
+
+
+static const float biases2_32[] = {
+    0.12326,
+    0.13271,
+    0.070827,
+    0.051456,
+    0.058446,
+    0.13153,
+    0.080973,
+    0.10153,
+    0.055915,
+    0.052282,
+    -0.11213,
+    0.074621,
+    -0.10301,
+    0.10818,
+    0.15687,
+    0.18226,
+    0.06781,
+    -0.027867,
+    0.10958,
+    0.034253,
+    0.059884,
+    -0.048186,
+    0.074781,
+    -0.073381,
+    -0.022101,
+    -0.049476,
+    0.00016185,
+    0.16787,
+    -0.086404,
+    0.060469,
+    -0.17338,
+    0.2655,
+};
+
+static const float biases3_1[] = {0.050377};
+
+const float *ff_cnn_weights[] = {
+    NULL, weights1_64x81, weights2_32x64x1, weights3_32x25
+};
+
+const float *ff_cnn_biases[] = {
+    NULL, biases1_64, biases2_32, biases3_1
+};
+
+#endif /* AVFILTER_SRCNN_WEIGHTS_H */
\ No newline at end of file
diff --git a/libavfilter/vf_srcnn.c b/libavfilter/vf_srcnn.c
new file mode 100644
index 0000000..3533e46
--- /dev/null
+++ b/libavfilter/vf_srcnn.c
@@ -0,0 +1,264 @@ 
+/*
+ * Copyright (c) 2018 Mina Sami
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Super resolution filter
+ *
+ * @see https://arxiv.org/abs/1501.00092
+ */
+
+#include "libavutil/avassert.h"
+#include "libavutil/imgutils.h"
+#include "libavutil/opt.h"
+#include "avfilter.h"
+#include "formats.h"
+#include "internal.h"
+#include "srcnn_weights.h"
+#include "video.h"
+
+#define NUM_LAYERS 3
+
+typedef float** Kernel;
+
+typedef struct CNNLayer {
+    int num_filters, size_filter;
+    int in_num_filters;
+    Kernel **weights;
+    float *biases;
+    float **out;
+} CNNLayer;
+
+typedef struct SRCNNContext {
+    const AVClass *class;
+
+    CNNLayer layers[NUM_LAYERS+1];
+} SRCNNContext;
+
+static const AVOption srcnn_options[] = {
+    { NULL }
+};
+
+AVFILTER_DEFINE_CLASS(srcnn);
+
+static Kernel srcnn_malloc_kernel(int size)
+{
+    Kernel kernel;
+    int i;
+
+    if (!(kernel = av_malloc_array(size, sizeof(float*))))
+        return NULL;
+    for (i=0; i<size; ++i)
+        if (!(kernel[i] = av_malloc_array(size, sizeof(float))))
+            return NULL;
+    return kernel;
+}
+
+static av_cold int init(AVFilterContext *ctx)
+{
+    SRCNNContext *srcnn = ctx->priv;
+    int index, l, cf, pf, r, c;
+
+    for (l=1; l<=NUM_LAYERS; ++l) {
+        srcnn->layers[l].num_filters = ff_cnn_num_filters[l];
+        srcnn->layers[l].size_filter = ff_cnn_size_filters[l];
+        srcnn->layers[l].in_num_filters = ff_cnn_num_filters[l-1];
+
+        if (!(srcnn->layers[l].weights = av_malloc_array(srcnn->layers[l].num_filters, sizeof(Kernel*))))
+            return AVERROR(ENOMEM);
+        for (cf=0; cf<srcnn->layers[l].num_filters; ++cf) {
+            if (!(srcnn->layers[l].weights[cf] = av_malloc_array(srcnn->layers[l].in_num_filters, sizeof(Kernel) )))
+                return AVERROR(ENOMEM);
+            for (pf=0; pf<srcnn->layers[l].in_num_filters; ++pf)
+                if (!(srcnn->layers[l].weights[cf][pf] = srcnn_malloc_kernel(srcnn->layers[l].size_filter)))
+                    return AVERROR(ENOMEM);
+        }
+        index = 0;
+        for (cf=0; cf<srcnn->layers[l].num_filters; ++cf)
+            for (pf=0; pf<srcnn->layers[l].in_num_filters; ++pf)
+                for (r=0; r<srcnn->layers[l].size_filter; ++r)
+                    for (c=0; c<srcnn->layers[l].size_filter; ++c)
+                        srcnn->layers[l].weights[cf][pf][r][c] = ff_cnn_weights[l][index++];
+
+        if (!(srcnn->layers[l].biases = av_malloc_array(srcnn->layers[l].num_filters, sizeof(float) )))
+            return AVERROR(ENOMEM);
+        memcpy(srcnn->layers[l].biases, ff_cnn_biases[l], srcnn->layers[l].num_filters);
+    }
+
+    return 0;
+}
+
+static int query_formats(AVFilterContext *ctx)
+{
+    static const enum AVPixelFormat pix_fmts[] = {
+        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
+        AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P,
+        AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+        AV_PIX_FMT_NONE
+    };
+
+    return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts));
+}
+
+static int config_props(AVFilterLink *inlink)
+{
+    AVFilterContext *ctx = inlink->dst;
+    SRCNNContext *srcnn = ctx->priv;
+    int l, f;
+
+    for (l=1; l<=NUM_LAYERS; ++l) {
+        if (!(srcnn->layers[l].out = av_malloc_array(srcnn->layers[l].num_filters, sizeof(float*) )))
+            return AVERROR(ENOMEM);
+        for (f=0; f<srcnn->layers[l].num_filters; ++f)
+            if (!(srcnn->layers[l].out[f] = av_malloc_array(inlink->w*inlink->h, sizeof(float) )))
+                return AVERROR(ENOMEM);
+    }
+
+    return 0;
+}
+
+#define THRESHOLD(val, thresh_min, thresh_max)({\
+    val = val < thresh_min ? thresh_min : val;\
+    val = val > thresh_max ? thresh_max : val;\
+})
+
+enum ConvDataType {
+    CONV_FLOAT,
+    CONV_UINT8
+};
+
+static void convolute(float *dst, const void **src, enum ConvDataType src_dt,
+                      int n, int w, int h, int dst_linesize, int src_linesize,
+                      int kernelsize, Kernel *kernel, float bias) {
+    int pivot = (kernelsize+1)>>2;
+    int rel_beg = -pivot;
+    int src_ind, src_rind, src_cind;
+    int row, col, i, j, k;
+    bias *= 255.0;
+
+    for (row=0; row<h; ++row) {
+        for (col=0; col<w; ++col) {
+            for (i=rel_beg; pivot+i<kernelsize; ++i) {
+                for (j=rel_beg; pivot+j<kernelsize; ++j) {
+                    src_rind = row + i;
+                    THRESHOLD(src_rind, 0, h-1);
+                    src_cind = col + j;
+                    THRESHOLD(src_cind, 0, w-1);
+                    src_ind = src_rind*src_linesize + src_cind;
+                    for (k=0; k<n; ++k) {
+                        switch (src_dt) {
+                        case CONV_FLOAT:
+                            dst[col] += (((float**)src)[k][src_ind] * kernel[k][pivot+i][pivot+j]);
+                            break;
+                        case CONV_UINT8:
+                            dst[col] += (((uint8_t**)src)[k][src_ind] * kernel[k][pivot+i][pivot+j]);
+                            break;
+                        }
+                    }
+                }
+            }
+            dst[col] += bias;
+            dst[col] = FFMAX(0, dst[col]);
+        }
+        dst += dst_linesize;
+    }
+}
+
+static int filter_frame(AVFilterLink *inlink, AVFrame *in) {
+    AVFilterContext *ctx = inlink->dst;
+    SRCNNContext *srcnn = ctx->priv;
+    AVFilterLink *outlink = ctx->outputs[0];
+    AVFrame *out;
+    int cf, l, i, j;
+
+    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
+    if (!out) {
+        av_frame_free(&in);
+        return AVERROR(ENOMEM);
+    }
+    av_frame_copy_props(out, in);
+
+    for (cf=0; cf<srcnn->layers[1].num_filters; ++cf)
+        convolute(srcnn->layers[1].out[cf], (const void **)&in->data, CONV_UINT8, 1, inlink->w, inlink->h,
+                  inlink->w, in->linesize[0], srcnn->layers[1].size_filter, srcnn->layers[1].weights[cf],
+                  srcnn->layers[1].biases[cf]);
+    for (l=2; l<=NUM_LAYERS; ++l)
+        for (cf=0; cf<srcnn->layers[l].num_filters; ++cf)
+            convolute(srcnn->layers[l].out[cf], (const void **)srcnn->layers[l-1].out, CONV_FLOAT, srcnn->layers[l].in_num_filters,
+                      inlink->w, inlink->h, inlink->w, inlink->w, srcnn->layers[l].size_filter, srcnn->layers[l].weights[cf],
+                      srcnn->layers[l].biases[cf]);
+
+    av_image_copy(out->data, out->linesize, (const uint8_t **)in->data, in->linesize, inlink->format, inlink->w, inlink->h);
+    for (i=0; i<inlink->h; ++i) {
+        for (j=0; j<inlink->w; ++j) {
+            THRESHOLD(srcnn->layers[NUM_LAYERS].out[0][i*inlink->w+j], 0, 255);
+            out->data[0][i*out->linesize[0]+j] = (uint8_t)srcnn->layers[NUM_LAYERS].out[0][i*inlink->w+j];
+        }
+    }
+
+    av_frame_free(&in);
+    return ff_filter_frame(outlink, out);
+}
+
+static av_cold void uninit(AVFilterContext *ctx)
+{
+    SRCNNContext *srcnn = ctx->priv;
+    int l, i, j;
+
+    for (l=1; l<=NUM_LAYERS; ++l) {
+        av_freep(&srcnn->layers[l].biases);
+        av_freep(srcnn->layers[l].out);
+        for (i=0; i<srcnn->layers[l].num_filters; ++i) {
+            for (j=0; j<srcnn->layers[l].in_num_filters; ++j)
+                av_freep(srcnn->layers[l].weights[i][j]);
+            av_freep(srcnn->layers[l].weights[i]);
+        }
+        av_freep(srcnn->layers[l].weights);
+    }
+}
+
+static const AVFilterPad srcnn_inputs[] = {
+    {   .name         = "default",
+        .type         = AVMEDIA_TYPE_VIDEO,
+        .config_props = config_props,
+        .filter_frame = filter_frame,
+    },
+    { NULL }
+};
+
+static const AVFilterPad srcnn_outputs[] = {
+    {   .name = "default",
+        .type = AVMEDIA_TYPE_VIDEO,
+    },
+    { NULL }
+};
+
+AVFilter ff_vf_srcnn = {
+    .name          = "srcnn",
+    .description   = NULL_IF_CONFIG_SMALL("Super resolution."),
+    .priv_size     = sizeof(SRCNNContext),
+    .init          = init,
+    .uninit        = uninit,
+    .query_formats = query_formats,
+    .inputs        = srcnn_inputs,
+    .outputs       = srcnn_outputs,
+    .priv_class    = &srcnn_class,
+    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
+};
\ No newline at end of file
-- 
2.7.4