简易DDS信号发生器的设计与验证

1.原理

相位累加器:N表示K值位宽。K=2^N*Fout/Fclk。并且在输入相位累加器之前还进行了数据寄存,表示K值在变化的时候,不会影响相位累加器的工作。

相位调制器:寄存器的作用一样的,防止P变化影响相位调制器的正常工作。

波形数据表ROM会存储要显示的完整周期的信号。比如完整周期的正弦波信号,假如地址位宽是12位宽,数据位宽是8位宽,那么就表示有2^12=4096个地址,每个地址可以存储1B数据。对正弦波信号进行完整的存储就是沿着横轴进行等间隔采样4096次,每次 采集的信号幅值用1个字节来表示。最大值是255,最小值是0。每个存储单元都写入一个幅值,这样就把完整的正弦波信号写入到波形数据表ROM当中。然后以相位调制器传入的数据,作为ROM的读地址,然后将地址对应的幅值以数字量的形式输出。

D/A转换器将数字幅值数字量转换成模拟量,就得到了输出信号。

如果有第5部分的话,就将输出信号通过一个低通滤波器,再输出。

当K等于1时(K是不为0的整数),得到的输出时钟的频率是最小的,得出的Fout是DDS的最小分辨率。K值越大输出时钟的频率越大,但K也不是无限大的,根据采样定理,K<=2^n/2。

相位累加器得到的相位码M是如何实现寻址的功能的呢?波形数据表的位宽应该等于M位宽。如果2^N=2^M,也就是N=M,如果N很大,那么对波形数据表的存贮空间就很大,增加了技术上的要求和成本,在实际中若M!=N,一般都是使用相位累加值的高几位对ROM寻址。也就是N>M,如图,把N的高8位传给M,也就是并不是每个系统时钟都会对ROM读地址进行一次更新,而是多个时钟周期进行读地址更新,能保证相位累加器溢出时,从正弦ROM表中刚好读取的时整个正弦周期的采样点。相位累加器每计数2^N次对应一个正弦周期,相位累加器一秒钟计数的频率是系统时钟的频率,如果K等于1,输出的时钟就是频率的分辨率,控制K值增加,相位累加器溢出的值就会增加,对应的clk_out的频率就会变为K倍频率分辨率。这样就实现了频率的调节。

举个例子:M=12,D=8,N=32,那么只把N的高12位传给相位调制器,当K等于1,N的低20位每个时钟周期就加1,直到低20位全都为111...111。此时需要进位,把进位就传给M,此时低为又开始从0计数到20位都为1。ROM地址开始等于0,就是把0地址的数据读取2^20次。完成读取之后会向前进位,将1地址,读取2^20次,依次读取,ROM中4096个地址,每个地址都会读取2^20次。输出的频率应该是1/2^20,周期被扩大了2^20倍,当K=100,低20位的数据每次增加100,低20位溢出的时间会比K=1时快100倍,ROM当中一个地址读的次数就是2^20/100次,这时输出的频率就是K=1时输出频率的100倍

2.实验目标

利用外部的AD/DA板卡,设计并实现一个简易的DDS信号发生器,使用按键切换正弦波、锯齿波、方波、三角波四种波形的输出。频率相位可以在代码中调节。FPGA实现的是波形数据表ROM及其之间的部分。

最终输出有改动,在输出时钟前加了一个反相器

2.1 所有波形matlab代码

clc;                    %清除命令行命令
clear all;              %清除工作区变量,释放内存空间
F1=1;                   %信号频率
Fs=2^12;                %采样频率
P1=0;                   %信号初始相位
N=2^12;                 %采样点数
t=[0:1/Fs:(N-1)/Fs];    %采样时刻
ADC=2^7 - 1;            %直流分量
A=2^7;                  %信号幅度
s1=A*sin(2*pi*F1*t + pi*P1/180) + ADC;          %正弦波信号
s2=A*square(2*pi*F1*t + pi*P1/180) + ADC;       %方波信号
s3=A*sawtooth(2*pi*F1*t + pi*P1/180,0.5) + ADC; %三角波信号
s4=A*sawtooth(2*pi*F1*t + pi*P1/180) + ADC;     %锯齿波信号
%创建mif文件
fild = fopen('all_wave_16384x8.mif','wt');
%写入mif文件头
fprintf(fild, '%s\n','WIDTH=8;');           %位宽
fprintf(fild, '%s\n\n','DEPTH=16384;');     %深度
fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;'); %地址格式
fprintf(fild, '%s\n\n','DATA_RADIX=UNS;');  %数据格式
fprintf(fild, '%s\t','CONTENT');            %地址
fprintf(fild, '%s\n','BEGIN');              %开始
for j = 1:4
    for i = 1:N
        if j == 1       %打印正弦信号数据
            s0(i) = round(s1(i));    %对小数四舍五入以取整
            fprintf(fild, '\t%g\t',i-1);  %地址编码
        end

        if j == 2       %打印方波信号数据
            s0(i) = round(s2(i));    %对小数四舍五入以取整
            fprintf(fild, '\t%g\t',i-1+N);  %地址编码
        end

        if j == 3       %打印三角波信号数据
            s0(i) = round(s3(i));    %对小数四舍五入以取整
            fprintf(fild, '\t%g\t',i-1+(2*N));  %地址编码
        end

        if j == 4       %打印锯齿波信号数据
            s0(i) = round(s4(i));    %对小数四舍五入以取整
            fprintf(fild, '\t%g\t',i-1+(3*N));  %地址编码
        end

        if s0(i) <0             %负1强制置零
            s0(i) = 0
        end
        
        fprintf(fild, '%s\t',':');      %冒号
        fprintf(fild, '%d',s0(i));      %数据写入
        fprintf(fild, '%s\n',';');      %分号,换行
    end
end
fprintf(fild, '%s\n','END;');       %结束
fclose(fild);

.coe文件

memory_initialization_radix=10;
memory_initialization_vector=    
127,
127,
127,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
234,
234,
234,
234,
234,
234,
234,
234,
234,
233,
233,
233,
233,
233,
233,
233,
233,
233,
232,
232,
232,
232,
232,
232,
232,
232,
232,
231,
231,
231,
231,
231,
231,
231,
231,
231,
230,
230,
230,
230,
230,
230,
230,
230,
229,
229,
229,
229,
229,
229,
229,
229,
229,
228,
228,
228,
228,
228,
228,
228,
228,
227,
227,
227,
227,
227,
227,
227,
227,
226,
226,
226,
226,
226,
226,
226,
226,
225,
225,
225,
225,
225,
225,
225,
225,
224,
224,
224,
224,
224,
224,
224,
224,
223,
223,
223,
223,
223,
223,
223,
222,
222,
222,
222,
222,
222,
222,
222,
221,
221,
221,
221,
221,
221,
221,
221,
220,
220,
220,
220,
220,
220,
220,
219,
219,
219,
219,
219,
219,
219,
218,
218,
218,
218,
218,
218,
218,
218,
217,
217,
217,
217,
217,
217,
217,
216,
216,
216,
216,
216,
216,
216,
215,
215,
215,
215,
215,
215,
215,
214,
214,
214,
214,
214,
214,
214,
213,
213,
213,
213,
213,
213,
213,
212,
212,
212,
212,
212,
212,
211,
211,
211,
211,
211,
211,
211,
210,
210,
210,
210,
210,
210,
210,
209,
209,
209,
209,
209,
209,
209,
208,
208,
208,
208,
208,
208,
207,
207,
207,
207,
207,
207,
207,
206,
206,
206,
206,
206,
206,
205,
205,
205,
205,
205,
205,
205,
204,
204,
204,
204,
204,
204,
203,
203,
203,
203,
203,
203,
202,
202,
202,
202,
202,
202,
202,
201,
201,
201,
201,
201,
201,
200,
200,
200,
200,
200,
200,
199,
199,
199,
199,
199,
199,
198,
198,
198,
198,
198,
198,
197,
197,
197,
197,
197,
197,
196,
196,
196,
196,
196,
196,
195,
195,
195,
195,
195,
195,
194,
194,
194,
194,
194,
194,
193,
193,
193,
193,
193,
193,
192,
192,
192,
192,
192,
192,
191,
191,
191,
191,
191,
191,
190,
190,
190,
190,
190,
190,
189,
189,
189,
189,
189,
189,
188,
188,
188,
188,
188,
188,
187,
187,
187,
187,
187,
186,
186,
186,
186,
186,
186,
185,
185,
185,
185,
185,
185,
184,
184,
184,
184,
184,
183,
183,
183,
183,
183,
183,
182,
182,
182,
182,
182,
182,
181,
181,
181,
181,
181,
180,
180,
180,
180,
180,
180,
179,
179,
179,
179,
179,
179,
178,
178,
178,
178,
178,
177,
177,
177,
177,
177,
177,
176,
176,
176,
176,
176,
175,
175,
175,
175,
175,
175,
174,
174,
174,
174,
174,
173,
173,
173,
173,
173,
173,
172,
172,
172,
172,
172,
171,
171,
171,
171,
171,
170,
170,
170,
170,
170,
170,
169,
169,
169,
169,
169,
168,
168,
168,
168,
168,
168,
167,
167,
167,
167,
167,
166,
166,
166,
166,
166,
165,
165,
165,
165,
165,
165,
164,
164,
164,
164,
164,
163,
163,
163,
163,
163,
162,
162,
162,
162,
162,
162,
161,
161,
161,
161,
161,
160,
160,
160,
160,
160,
159,
159,
159,
159,
159,
158,
158,
158,
158,
158,
158,
157,
157,
157,
157,
157,
156,
156,
156,
156,
156,
155,
155,
155,
155,
155,
154,
154,
154,
154,
154,
154,
153,
153,
153,
153,
153,
152,
152,
152,
152,
152,
151,
151,
151,
151,
151,
150,
150,
150,
150,
150,
149,
149,
149,
149,
149,
148,
148,
148,
148,
148,
148,
147,
147,
147,
147,
147,
146,
146,
146,
146,
146,
145,
145,
145,
145,
145,
144,
144,
144,
144,
144,
143,
143,
143,
143,
143,
142,
142,
142,
142,
142,
141,
141,
141,
141,
141,
141,
140,
140,
140,
140,
140,
139,
139,
139,
139,
139,
138,
138,
138,
138,
138,
137,
137,
137,
137,
137,
136,
136,
136,
136,
136,
135,
135,
135,
135,
135,
134,
134,
134,
134,
134,
133,
133,
133,
133,
133,
132,
132,
132,
132,
132,
132,
131,
131,
131,
131,
131,
130,
130,
130,
130,
130,
129,
129,
129,
129,
129,
128,
128,
128,
128,
128,
127,
127,
127,
127,
127,
126,
126,
126,
126,
126,
125,
125,
125,
125,
125,
124,
124,
124,
124,
124,
123,
123,
123,
123,
123,
122,
122,
122,
122,
122,
122,
121,
121,
121,
121,
121,
120,
120,
120,
120,
120,
119,
119,
119,
119,
119,
118,
118,
118,
118,
118,
117,
117,
117,
117,
117,
116,
116,
116,
116,
116,
115,
115,
115,
115,
115,
114,
114,
114,
114,
114,
113,
113,
113,
113,
113,
113,
112,
112,
112,
112,
112,
111,
111,
111,
111,
111,
110,
110,
110,
110,
110,
109,
109,
109,
109,
109,
108,
108,
108,
108,
108,
107,
107,
107,
107,
107,
106,
106,
106,
106,
106,
106,
105,
105,
105,
105,
105,
104,
104,
104,
104,
104,
103,
103,
103,
103,
103,
102,
102,
102,
102,
102,
101,
101,
101,
101,
101,
100,
100,
100,
100,
100,
100,
99,
99,
99,
99,
99,
98,
98,
98,
98,
98,
97,
97,
97,
97,
97,
96,
96,
96,
96,
96,
96,
95,
95,
95,
95,
95,
94,
94,
94,
94,
94,
93,
93,
93,
93,
93,
92,
92,
92,
92,
92,
92,
91,
91,
91,
91,
91,
90,
90,
90,
90,
90,
89,
89,
89,
89,
89,
89,
88,
88,
88,
88,
88,
87,
87,
87,
87,
87,
86,
86,
86,
86,
86,
86,
85,
85,
85,
85,
85,
84,
84,
84,
84,
84,
84,
83,
83,
83,
83,
83,
82,
82,
82,
82,
82,
81,
81,
81,
81,
81,
81,
80,
80,
80,
80,
80,
79,
79,
79,
79,
79,
79,
78,
78,
78,
78,
78,
77,
77,
77,
77,
77,
77,
76,
76,
76,
76,
76,
75,
75,
75,
75,
75,
75,
74,
74,
74,
74,
74,
74,
73,
73,
73,
73,
73,
72,
72,
72,
72,
72,
72,
71,
71,
71,
71,
71,
71,
70,
70,
70,
70,
70,
69,
69,
69,
69,
69,
69,
68,
68,
68,
68,
68,
68,
67,
67,
67,
67,
67,
66,
66,
66,
66,
66,
66,
65,
65,
65,
65,
65,
65,
64,
64,
64,
64,
64,
64,
63,
63,
63,
63,
63,
63,
62,
62,
62,
62,
62,
62,
61,
61,
61,
61,
61,
61,
60,
60,
60,
60,
60,
60,
59,
59,
59,
59,
59,
59,
58,
58,
58,
58,
58,
58,
57,
57,
57,
57,
57,
57,
56,
56,
56,
56,
56,
56,
55,
55,
55,
55,
55,
55,
54,
54,
54,
54,
54,
54,
53,
53,
53,
53,
53,
53,
52,
52,
52,
52,
52,
52,
52,
51,
51,
51,
51,
51,
51,
50,
50,
50,
50,
50,
50,
49,
49,
49,
49,
49,
49,
49,
48,
48,
48,
48,
48,
48,
47,
47,
47,
47,
47,
47,
47,
46,
46,
46,
46,
46,
46,
45,
45,
45,
45,
45,
45,
45,
44,
44,
44,
44,
44,
44,
44,
43,
43,
43,
43,
43,
43,
43,
42,
42,
42,
42,
42,
42,
41,
41,
41,
41,
41,
41,
41,
40,
40,
40,
40,
40,
40,
40,
39,
39,
39,
39,
39,
39,
39,
38,
38,
38,
38,
38,
38,
38,
37,
37,
37,
37,
37,
37,
37,
36,
36,
36,
36,
36,
36,
36,
36,
35,
35,
35,
35,
35,
35,
35,
34,
34,
34,
34,
34,
34,
34,
33,
33,
33,
33,
33,
33,
33,
33,
32,
32,
32,
32,
32,
32,
32,
32,
31,
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
30,
30,
30,
29,
29,
29,
29,
29,
29,
29,
29,
28,
28,
28,
28,
28,
28,
28,
28,
27,
27,
27,
27,
27,
27,
27,
27,
26,
26,
26,
26,
26,
26,
26,
26,
25,
25,
25,
25,
25,
25,
25,
25,
25,
24,
24,
24,
24,
24,
24,
24,
24,
23,
23,
23,
23,
23,
23,
23,
23,
23,
22,
22,
22,
22,
22,
22,
22,
22,
22,
21,
21,
21,
21,
21,
21,
21,
21,
21,
20,
20,
20,
20,
20,
20,
20,
20,
20,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
127,
127,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
255,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
126,
126,
126,
127,
127,
127,
127,
127,
127,
127,
127,
128,
128,
128,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255,
255,
254,
254,
254,
254,
254,
254,
254,
254,
253,
253,
253,
253,
253,
253,
253,
253,
252,
252,
252,
252,
252,
252,
252,
252,
251,
251,
251,
251,
251,
251,
251,
251,
250,
250,
250,
250,
250,
250,
250,
250,
249,
249,
249,
249,
249,
249,
249,
249,
248,
248,
248,
248,
248,
248,
248,
248,
247,
247,
247,
247,
247,
247,
247,
247,
246,
246,
246,
246,
246,
246,
246,
246,
245,
245,
245,
245,
245,
245,
245,
245,
244,
244,
244,
244,
244,
244,
244,
244,
243,
243,
243,
243,
243,
243,
243,
243,
242,
242,
242,
242,
242,
242,
242,
242,
241,
241,
241,
241,
241,
241,
241,
241,
240,
240,
240,
240,
240,
240,
240,
240,
239,
239,
239,
239,
239,
239,
239,
239,
238,
238,
238,
238,
238,
238,
238,
238,
237,
237,
237,
237,
237,
237,
237,
237,
236,
236,
236,
236,
236,
236,
236,
236,
235,
235,
235,
235,
235,
235,
235,
235,
234,
234,
234,
234,
234,
234,
234,
234,
233,
233,
233,
233,
233,
233,
233,
233,
232,
232,
232,
232,
232,
232,
232,
232,
231,
231,
231,
231,
231,
231,
231,
231,
230,
230,
230,
230,
230,
230,
230,
230,
229,
229,
229,
229,
229,
229,
229,
229,
228,
228,
228,
228,
228,
228,
228,
228,
227,
227,
227,
227,
227,
227,
227,
227,
226,
226,
226,
226,
226,
226,
226,
226,
225,
225,
225,
225,
225,
225,
225,
225,
224,
224,
224,
224,
224,
224,
224,
224,
223,
223,
223,
223,
223,
223,
223,
223,
222,
222,
222,
222,
222,
222,
222,
222,
221,
221,
221,
221,
221,
221,
221,
221,
220,
220,
220,
220,
220,
220,
220,
220,
219,
219,
219,
219,
219,
219,
219,
219,
218,
218,
218,
218,
218,
218,
218,
218,
217,
217,
217,
217,
217,
217,
217,
217,
216,
216,
216,
216,
216,
216,
216,
216,
215,
215,
215,
215,
215,
215,
215,
215,
214,
214,
214,
214,
214,
214,
214,
214,
213,
213,
213,
213,
213,
213,
213,
213,
212,
212,
212,
212,
212,
212,
212,
212,
211,
211,
211,
211,
211,
211,
211,
211,
210,
210,
210,
210,
210,
210,
210,
210,
209,
209,
209,
209,
209,
209,
209,
209,
208,
208,
208,
208,
208,
208,
208,
208,
207,
207,
207,
207,
207,
207,
207,
207,
206,
206,
206,
206,
206,
206,
206,
206,
205,
205,
205,
205,
205,
205,
205,
205,
204,
204,
204,
204,
204,
204,
204,
204,
203,
203,
203,
203,
203,
203,
203,
203,
202,
202,
202,
202,
202,
202,
202,
202,
201,
201,
201,
201,
201,
201,
201,
201,
200,
200,
200,
200,
200,
200,
200,
200,
199,
199,
199,
199,
199,
199,
199,
199,
198,
198,
198,
198,
198,
198,
198,
198,
197,
197,
197,
197,
197,
197,
197,
197,
196,
196,
196,
196,
196,
196,
196,
196,
195,
195,
195,
195,
195,
195,
195,
195,
194,
194,
194,
194,
194,
194,
194,
194,
193,
193,
193,
193,
193,
193,
193,
193,
192,
192,
192,
192,
192,
192,
192,
192,
191,
191,
191,
191,
191,
191,
191,
191,
190,
190,
190,
190,
190,
190,
190,
190,
189,
189,
189,
189,
189,
189,
189,
189,
188,
188,
188,
188,
188,
188,
188,
188,
187,
187,
187,
187,
187,
187,
187,
187,
186,
186,
186,
186,
186,
186,
186,
186,
185,
185,
185,
185,
185,
185,
185,
184,
184,
184,
184,
184,
184,
184,
184,
184,
183,
183,
183,
183,
183,
183,
183,
182,
182,
182,
182,
182,
182,
182,
182,
182,
181,
181,
181,
181,
181,
181,
181,
181,
180,
180,
180,
180,
180,
180,
180,
180,
179,
179,
179,
179,
179,
179,
179,
179,
178,
178,
178,
178,
178,
178,
178,
178,
177,
177,
177,
177,
177,
177,
177,
177,
176,
176,
176,
176,
176,
176,
176,
176,
175,
175,
175,
175,
175,
175,
175,
175,
174,
174,
174,
174,
174,
174,
174,
173,
173,
173,
173,
173,
173,
173,
173,
173,
172,
172,
172,
172,
172,
172,
172,
171,
171,
171,
171,
171,
171,
171,
171,
171,
170,
170,
170,
170,
170,
170,
170,
170,
169,
169,
169,
169,
169,
169,
169,
169,
168,
168,
168,
168,
168,
168,
168,
168,
167,
167,
167,
167,
167,
167,
167,
167,
166,
166,
166,
166,
166,
166,
166,
166,
165,
165,
165,
165,
165,
165,
165,
165,
164,
164,
164,
164,
164,
164,
164,
164,
163,
163,
163,
163,
163,
163,
163,
162,
162,
162,
162,
162,
162,
162,
162,
162,
161,
161,
161,
161,
161,
161,
161,
160,
160,
160,
160,
160,
160,
160,
160,
160,
159,
159,
159,
159,
159,
159,
159,
159,
158,
158,
158,
158,
158,
158,
158,
158,
157,
157,
157,
157,
157,
157,
157,
157,
156,
156,
156,
156,
156,
156,
156,
156,
155,
155,
155,
155,
155,
155,
155,
155,
154,
154,
154,
154,
154,
154,
154,
153,
153,
153,
153,
153,
153,
153,
153,
153,
152,
152,
152,
152,
152,
152,
152,
151,
151,
151,
151,
151,
151,
151,
151,
151,
150,
150,
150,
150,
150,
150,
150,
149,
149,
149,
149,
149,
149,
149,
149,
149,
148,
148,
148,
148,
148,
148,
148,
148,
147,
147,
147,
147,
147,
147,
147,
147,
146,
146,
146,
146,
146,
146,
146,
146,
145,
145,
145,
145,
145,
145,
145,
145,
144,
144,
144,
144,
144,
144,
144,
144,
143,
143,
143,
143,
143,
143,
143,
142,
142,
142,
142,
142,
142,
142,
142,
142,
141,
141,
141,
141,
141,
141,
141,
140,
140,
140,
140,
140,
140,
140,
140,
140,
139,
139,
139,
139,
139,
139,
139,
138,
138,
138,
138,
138,
138,
138,
138,
138,
137,
137,
137,
137,
137,
137,
137,
137,
136,
136,
136,
136,
136,
136,
136,
136,
135,
135,
135,
135,
135,
135,
135,
135,
134,
134,
134,
134,
134,
134,
134,
134,
133,
133,
133,
133,
133,
133,
133,
133,
132,
132,
132,
132,
132,
132,
132,
131,
131,
131,
131,
131,
131,
131,
131,
131,
130,
130,
130,
130,
130,
130,
130,
129,
129,
129,
129,
129,
129,
129,
129,
129,
128,
128,
128,
128,
128,
128,
128,
127,
127,
127,
127,
127,
127,
127,
127,
127,
126,
126,
126,
126,
126,
126,
126,
126,
125,
125,
125,
125,
125,
125,
125,
125,
124,
124,
124,
124,
124,
124,
124,
124,
123,
123,
123,
123,
123,
123,
123,
123,
122,
122,
122,
122,
122,
122,
122,
122,
121,
121,
121,
121,
121,
121,
121,
120,
120,
120,
120,
120,
120,
120,
120,
120,
119,
119,
119,
119,
119,
119,
119,
118,
118,
118,
118,
118,
118,
118,
118,
118,
117,
117,
117,
117,
117,
117,
117,
117,
116,
116,
116,
116,
116,
116,
116,
116,
115,
115,
115,
115,
115,
115,
115,
115,
114,
114,
114,
114,
114,
114,
114,
114,
113,
113,
113,
113,
113,
113,
113,
113,
112,
112,
112,
112,
112,
112,
112,
112,
111,
111,
111,
111,
111,
111,
111,
111,
110,
110,
110,
110,
110,
110,
110,
109,
109,
109,
109,
109,
109,
109,
109,
109,
108,
108,
108,
108,
108,
108,
108,
107,
107,
107,
107,
107,
107,
107,
107,
107,
106,
106,
106,
106,
106,
106,
106,
106,
105,
105,
105,
105,
105,
105,
105,
105,
104,
104,
104,
104,
104,
104,
104,
104,
103,
103,
103,
103,
103,
103,
103,
103,
102,
102,
102,
102,
102,
102,
102,
102,
101,
101,
101,
101,
101,
101,
101,
101,
100,
100,
100,
100,
100,
100,
100,
100,
99,
99,
99,
99,
99,
99,
99,
98,
98,
98,
98,
98,
98,
98,
98,
98,
97,
97,
97,
97,
97,
97,
97,
96,
96,
96,
96,
96,
96,
96,
96,
96,
95,
95,
95,
95,
95,
95,
95,
95,
94,
94,
94,
94,
94,
94,
94,
94,
93,
93,
93,
93,
93,
93,
93,
93,
92,
92,
92,
92,
92,
92,
92,
92,
91,
91,
91,
91,
91,
91,
91,
91,
90,
90,
90,
90,
90,
90,
90,
89,
89,
89,
89,
89,
89,
89,
89,
89,
88,
88,
88,
88,
88,
88,
88,
87,
87,
87,
87,
87,
87,
87,
87,
87,
86,
86,
86,
86,
86,
86,
86,
85,
85,
85,
85,
85,
85,
85,
85,
85,
84,
84,
84,
84,
84,
84,
84,
84,
83,
83,
83,
83,
83,
83,
83,
83,
82,
82,
82,
82,
82,
82,
82,
82,
81,
81,
81,
81,
81,
81,
81,
81,
80,
80,
80,
80,
80,
80,
80,
80,
79,
79,
79,
79,
79,
79,
79,
78,
78,
78,
78,
78,
78,
78,
78,
78,
77,
77,
77,
77,
77,
77,
77,
76,
76,
76,
76,
76,
76,
76,
76,
76,
75,
75,
75,
75,
75,
75,
75,
74,
74,
74,
74,
74,
74,
74,
74,
74,
73,
73,
73,
73,
73,
73,
73,
73,
72,
72,
72,
72,
72,
72,
72,
72,
71,
71,
71,
71,
71,
71,
71,
71,
70,
70,
70,
70,
70,
70,
70,
70,
69,
69,
69,
69,
69,
69,
69,
69,
68,
68,
68,
68,
68,
68,
68,
67,
67,
67,
67,
67,
67,
67,
67,
67,
66,
66,
66,
66,
66,
66,
66,
65,
65,
65,
65,
65,
65,
65,
65,
65,
64,
64,
64,
64,
64,
64,
64,
63,
63,
63,
63,
63,
63,
63,
63,
63,
62,
62,
62,
62,
62,
62,
62,
62,
61,
61,
61,
61,
61,
61,
61,
61,
60,
60,
60,
60,
60,
60,
60,
60,
59,
59,
59,
59,
59,
59,
59,
59,
58,
58,
58,
58,
58,
58,
58,
58,
57,
57,
57,
57,
57,
57,
57,
56,
56,
56,
56,
56,
56,
56,
56,
56,
55,
55,
55,
55,
55,
55,
55,
54,
54,
54,
54,
54,
54,
54,
54,
54,
53,
53,
53,
53,
53,
53,
53,
52,
52,
52,
52,
52,
52,
52,
52,
52,
51,
51,
51,
51,
51,
51,
51,
51,
50,
50,
50,
50,
50,
50,
50,
50,
49,
49,
49,
49,
49,
49,
49,
49,
48,
48,
48,
48,
48,
48,
48,
48,
47,
47,
47,
47,
47,
47,
47,
47,
46,
46,
46,
46,
46,
46,
46,
45,
45,
45,
45,
45,
45,
45,
45,
45,
44,
44,
44,
44,
44,
44,
44,
43,
43,
43,
43,
43,
43,
43,
43,
43,
42,
42,
42,
42,
42,
42,
42,
42,
41,
41,
41,
41,
41,
41,
41,
41,
40,
40,
40,
40,
40,
40,
40,
40,
39,
39,
39,
39,
39,
39,
39,
39,
38,
38,
38,
38,
38,
38,
38,
38,
37,
37,
37,
37,
37,
37,
37,
37,
36,
36,
36,
36,
36,
36,
36,
36,
35,
35,
35,
35,
35,
35,
35,
34,
34,
34,
34,
34,
34,
34,
34,
34,
33,
33,
33,
33,
33,
33,
33,
32,
32,
32,
32,
32,
32,
32,
32,
32,
31,
31,
31,
31,
31,
31,
31,
31,
30,
30,
30,
30,
30,
30,
30,
30,
29,
29,
29,
29,
29,
29,
29,
29,
28,
28,
28,
28,
28,
28,
28,
28,
27,
27,
27,
27,
27,
27,
27,
27,
26,
26,
26,
26,
26,
26,
26,
25,
25,
25,
25,
25,
25,
25,
25,
25,
24,
24,
24,
24,
24,
24,
24,
23,
23,
23,
23,
23,
23,
23,
23,
23,
22,
22,
22,
22,
22,
22,
22,
21,
21,
21,
21,
21,
21,
21,
21,
21,
20,
20,
20,
20,
20,
20,
20,
20,
19,
19,
19,
19,
19,
19,
19,
19,
18,
18,
18,
18,
18,
18,
18,
18,
17,
17,
17,
17,
17,
17,
17,
17,
16,
16,
16,
16,
16,
16,
16,
16,
15,
15,
15,
15,
15,
15,
15,
14,
14,
14,
14,
14,
14,
14,
14,
14,
13,
13,
13,
13,
13,
13,
13,
12,
12,
12,
12,
12,
12,
12,
12,
12,
11,
11,
11,
11,
11,
11,
11,
10,
10,
10,
10,
10,
10,
10,
10,
10,
9,
9,
9,
9,
9,
9,
9,
9,
8,
8,
8,
8,
8,
8,
8,
8,
7,
7,
7,
7,
7,
7,
7,
7,
6,
6,
6,
6,
6,
6,
6,
6,
5,
5,
5,
5,
5,
5,
5,
5,
4,
4,
4,
4,
4,
4,
4,
3,
3,
3,
3,
3,
3,
3,
3,
3,
2,
2,
2,
2,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
3,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
6,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
7,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
8,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
9,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
10,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
11,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
12,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
13,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
14,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
15,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
16,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
17,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
18,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
19,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
20,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
21,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
22,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
23,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
24,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
25,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
26,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
27,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
28,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
29,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
30,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
31,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
32,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
33,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
34,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
35,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
36,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
37,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
38,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
39,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
40,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
41,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
42,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
43,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
44,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
45,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
46,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
47,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
48,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
49,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
50,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
51,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
52,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
53,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
54,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
55,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
56,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
57,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
58,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
59,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
60,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
61,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
62,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
63,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
64,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
65,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
66,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
67,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
68,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
69,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
70,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
71,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
72,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
73,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
74,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
75,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
76,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
77,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
78,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
79,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
80,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
81,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
82,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
83,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
84,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
85,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
86,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
87,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
88,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
89,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
90,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
91,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
92,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
93,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
94,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
95,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
96,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
97,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
98,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
99,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
100,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
101,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
102,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
103,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
104,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
105,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
106,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
107,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
108,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
109,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
110,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
111,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
112,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
113,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
114,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
115,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
116,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
117,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
118,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
119,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
120,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
121,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
122,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
123,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
124,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
125,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
126,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
127,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
128,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
129,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
130,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
131,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
132,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
133,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
134,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
135,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
136,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
137,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
138,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
139,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
140,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
141,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
142,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
143,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
144,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
145,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
146,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
147,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
148,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
149,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
150,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
151,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
152,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
153,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
154,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
155,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
156,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
157,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
158,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
159,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
160,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
161,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
162,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
163,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
164,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
165,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
166,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
167,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
168,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
169,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
170,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
171,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
172,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
173,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
174,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
175,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
176,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
177,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
178,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
179,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
180,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
181,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
182,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
183,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
184,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
185,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
186,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
187,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
188,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
189,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
190,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
191,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
192,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
193,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
194,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
195,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
196,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
197,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
198,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
199,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
200,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
201,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
202,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
203,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
204,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
205,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
206,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
207,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
208,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
209,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
210,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
211,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
212,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
213,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
214,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
215,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
216,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
217,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
218,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
219,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
220,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
221,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
222,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
223,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
224,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
225,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
226,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
227,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
228,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
229,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
230,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
231,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
232,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
233,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
234,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
235,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
236,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
237,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
238,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
239,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
240,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
241,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
242,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
243,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
244,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
245,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
246,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
247,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
248,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
249,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
250,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
251,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
252,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
253,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
254,
255,
255,
255,
255,
255,
255,
255,
255;

2.1 正弦波生成

调用ROMIP核,将波形数据表作为初始化文件写入ROM当中,文件格式可以是mif文件也可以是hex文件,使用matlab绘制4种波形,然后对这四种波形进行等间隔采样,以采样次数作为ROM的存储地址,采集的波形幅值数据作为存储数据写入到存储地址对应的存储空间。才阳光次数2^12=4096次,M=12,波形幅值数据是8位宽。

2.2 方波

2.3 三角波

2.4 锯齿波

2.2 dds_ctrl

定义输出信号满足500HZ,由公式计算出K,系统时钟为50mhz

取整数,为42949。

定义初相位是2分之Π。

所以P等于1024

2.2.1 dds_ctrl.v

module dds_ctrl
(
	input wire 			sys_clk			,
	input wire 			sys_rst_n		,
	input wire [3:0]	wave_sel		,
	
	output wire  [7:0]	dac_data		
);

parameter F_WORD=32'd42949,
		  P_WORD=12'd1024	;

reg[31:0]	freq_add;
reg [11:0]	rom_addr_reg;
reg [13:0] rom_addr;


always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		freq_add<=32'd0;
	else
		freq_add<=freq_add+F_WORD;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		rom_addr_reg<=12'd0;
	else
		rom_addr_reg<=freq_add[31:20]+P_WORD;
		
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		rom_addr<=14'd0;
	else
		case(wave_sel)
			4'b0001:rom_addr<=rom_addr_reg;
			4'b0010:rom_addr<=rom_addr_reg+14'd4096;
			4'b0100:rom_addr<=rom_addr_reg+14'd8192;
			4'b1000:rom_addr<=rom_addr_reg+14'd12288;
			default:rom_addr<=rom_addr_reg;
		endcase
		
wave_rom wave_rom_inst 
(
  .clka(sys_clk),    // input wire clka
  .addra(rom_addr),  // input wire [13 : 0] addra
  .douta(dac_data)  // output wire [7 : 0] douta
);
endmodule

2.2.2 tb_dds_ctrl.v

`timescale 1ns/1ns
module tb_dds_ctrl();

reg sys_clk;
reg sys_rst_n;
reg [3:0]wave_sel;
wire [7:0]dac_data;

initial
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		wave_sel<=4'b0000;
		#200
		sys_rst_n<=1'b1;
		#10000
		wave_sel<=4'b0001;
		#8_000_000
		wave_sel<=4'b0010;
		#8_000_000
		wave_sel<=4'b0100;
		#8_000_000
		wave_sel<=4'b1000;
		#8_000_000
		wave_sel<=4'b0000;
	end
	
always #10 sys_clk=~sys_clk;

dds_ctrl dds_ctrl_inst(
	.sys_clk	(sys_clk	)	,
	.sys_rst_n	(sys_rst_n)	,
	.wave_sel	(wave_sel)	,
	
	.dac_data	(dac_data)	
);

endmodule

2.3 dds.v

module dds(
	input wire			sys_clk			,
	input wire			sys_rst_n		,
	input wire [3:0]	key				,
	
	output wire			dac_clk			,
	output wire[7:0]	dac_data	
);

wire[3:0] wave_sel;
//时钟取反相当于,把时钟的上升沿往后延迟半个时钟周期,起到采集稳定数据的作用
assign dac_clk=~sys_clk;
//为什么要取反呢,因为dds_ctrl内部初始化了一个rom表,
//rom表的读时钟是系统时钟,在系统时钟上升沿就会输出读出的幅值数据,
//幅值数据和系统时钟是保持同步的,


key_ctrl key_ctrl_inst(
	.sys_clk	(sys_clk	)	,
	.sys_rst_n	(sys_rst_n),
	.key		(key		)	,
	
	.wave_sel   (wave_sel )
);

dds_ctrl dds_ctrl_inst
(
	.sys_clk	(sys_clk	)		,
	.sys_rst_n	(sys_rst_n	)	,
	.wave_sel	(wave_sel	)	,
                 
	.dac_data	(dac_data	)	
);

endmodule

时钟取反的作用是为了在数据稳定的时候采集。

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值