/
search.xml
1023 lines (510 loc) · 737 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>新作预告</title>
<link href="/post/f2e1bb6e.html"/>
<url>/post/f2e1bb6e.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>计划开发一款基于太空策略类的游戏,目前正在进行数值策划中~</p><p>Git test.</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">阵前再亮旧时剑 寒光凛凛似当年</span><br><span class="line"></span><br><span class="line">---</span><br></pre></td></tr></table></figure></div><h1 id="资源结构"><a href="#资源结构" class="headerlink" title="资源结构"></a>资源结构</h1><h2 id="0级资源"><a href="#0级资源" class="headerlink" title="0级资源"></a>0级资源</h2><h3 id="矿产资源"><a href="#矿产资源" class="headerlink" title="矿产资源"></a>矿产资源</h3><h4 id="普通矿物"><a href="#普通矿物" class="headerlink" title="普通矿物"></a>普通矿物</h4><p>星球视图</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">铁矿0</span><br><span class="line">铜矿99</span><br><span class="line">硅矿1</span><br><span class="line">煤矿1</span><br><span class="line">钛矿1</span><br><span class="line">石矿1</span><br><span class="line">水井0</span><br><span class="line">油井0</span><br><span class="line">树木5</span><br><span class="line">食物3</span><br><span class="line">氢8</span><br><span class="line">重氢9</span><br></pre></td></tr></table></figure></div><h4 id="珍奇矿物"><a href="#珍奇矿物" class="headerlink" title="珍奇矿物"></a>珍奇矿物</h4><p>星球视图</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">铀矿99</span><br><span class="line">可燃冰98</span><br><span class="line">有机晶体97</span><br><span class="line">刺笋结晶96</span><br><span class="line">分型硅石95</span><br><span class="line">金伯利矿石</span><br><span class="line">光栅石</span><br><span class="line">单极磁石</span><br><span class="line">硫酸海</span><br><span class="line">稀有文物</span><br></pre></td></tr></table></figure></div>]]></content>
<categories>
<category> 新作预告 </category>
</categories>
<tags>
<tag> 复习 </tag>
<tag> 新作 </tag>
<tag> 游戏 </tag>
</tags>
</entry>
<entry>
<title>新作预告</title>
<link href="/post/f2e1bb6e.html"/>
<url>/post/f2e1bb6e.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>计划开发一款基于太空策略类的游戏,目前正在进行数值策划中~</p><p>Git test.<br>Git test Done!</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">春风若有怜花意 可否许我再少年</span><br><span class="line">No.</span><br></pre></td></tr></table></figure></div><p>tired.</p><p>Reborn.</p><p>…</p>]]></content>
<categories>
<category> 新作预告 </category>
</categories>
<tags>
<tag> 复习 </tag>
<tag> 新作 </tag>
<tag> 游戏 </tag>
</tags>
</entry>
<entry>
<title>组织行为学期末复习</title>
<link href="/post/8efd07bb.html"/>
<url>/post/8efd07bb.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>指令发出:20220701013000|GMT+8<br>耗时:1.43526ms<br>Done!</p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=1&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=1&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=2&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=2&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=3&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=3&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=4&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=4&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=5&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=5&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=6&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=6&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=7&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=7&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=8&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=8&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=9&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=9&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=10&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=10&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=11&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=11&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=12&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=12&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=13&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=13&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=14&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=14&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=15&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=15&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=16&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=16&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=17&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=17&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=18&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=18&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=19&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=19&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=20&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=20&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=21&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=21&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=22&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=22&pcimg=1" class="lazyload" title="avatar"></a></p><p><a href="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=23&pcimg=1" data-fancybox="group" data-caption="avatar" class="fancybox"><img alt="avatar" data-src="https://docimg1.docin.com/docinpic.jsp?file=2399943904&width=1500&sid=luGuQzVuUiOsDb6nxvUiB6cPQZZKAq4RQWeKKqLELKMyTrvmqNEB9H9mfrHxffcH&pageno=23&pcimg=1" class="lazyload" title="avatar"></a></p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br></pre></td><td class="code"><pre><span class="line">一、选择(每小题2分,共20分)</span><br><span class="line">1.( )的特点是感受性低、耐受性高,反应速度快,情绪兴奋性高而不均衡。</span><br><span class="line">A.多血质 B.胆汁质 C.黏液质 D.抑郁质</span><br><span class="line">2.美国心理学家勒温在研究中发现,主动参与群体活动的人的态度( )。</span><br><span class="line">A.转变显著而快速 B.转变缓慢但显著 C.转变快速但不显著 D.难以转变</span><br><span class="line">3.情绪和情感是人对客观事物是否符合自己需要而产生的( )。</span><br><span class="line">A.心理变化 B.态度的体验 C.价值判断 D.知觉</span><br><span class="line">4.在社会知觉的偏差中,通过对某人的知觉而留下的最初印象,能以同样的性质,影响着后来对他再次发生的知觉,称之( )。</span><br><span class="line">A.知觉防御 B.晕轮效应 C.首因效应 D.投射</span><br><span class="line">5.如果在与公司有重大利益关系的问题上发生了群体冲突,而且情况紧急,应采取( )的方式加以分析解决。</span><br><span class="line">A.强制 B解决问题 C妥协 D.回避 E.克制</span><br><span class="line">6.在组织行为学中,把一个人在群体中工作不如单独一个人工作时更努力的倾向称为( )。</span><br><span class="line">A.群体促进效应 B.社会惰化效应 ? C.协同效应 D.责任分摊效应</span><br><span class="line">7.关于冲突观念的现代观点认为( )。</span><br><span class="line">A.冲突有害无益 B.冲突应当避免</span><br><span class="line">C.冲突有利无害 D.冲突保持在适度水平是有益的</span><br><span class="line">8.认为领导者的特性是天生的,天生不具备领导特性的人就不能成为领导者的理论是( )。A.传统素质理论 B现代素质理论 C日本领导素质观 D美国领导素质观</span><br><span class="line">A.指令型领导 B.说服式领导 C 参与式领导 D.授权式领导</span><br><span class="line">10.一位主管与其他许多直接下属之间的沟通是( )。</span><br><span class="line">A.链状沟通 B.“Y”型沟通 C.轮状沟通 D.环状沟通</span><br><span class="line"></span><br><span class="line">二、判断分析(每小题3分,共18分)</span><br><span class="line">1.观察法讲究的是“眼见为实”,必须是观察者亲自用眼睛观察才能取得可靠的资料。( )</span><br><span class="line">2.组织即人群。( )</span><br><span class="line">3.成员总数为奇数的群体比成员总数为偶数的群体更好。( )</span><br><span class="line">4.由于凝聚力高的群体比凝聚力低的群体更有效,因此,凝聚力越高对组织的贡献也必定越大。( )</span><br><span class="line">5.由于挫折是一种情绪状态和主观感受,因此,对同一件事情(例如一次实验失败)有人觉得受到了挫折,而有人则不认为是挫折。( )</span><br><span class="line">6.“领导”与“管理”是两个相同的概念。( )</span><br><span class="line"></span><br><span class="line">三、简答(每小题5分,共20分)</span><br><span class="line">1.简述“复杂人”假设的主要观点。</span><br><span class="line">简述期望理论的主要内容。</span><br><span class="line">公平理论的基本观点是什么?</span><br><span class="line"> </span><br><span class="line">群体决策的利弊各有哪些?</span><br><span class="line">四、论述(17分)</span><br><span class="line">试述赫兹伯格的双因素理论对管理工作的指导价值。</span><br><span class="line"></span><br><span class="line">五、案例分析题(25分)</span><br><span class="line">管理“天才”卡尔森</span><br><span class="line">被称为管理“天才”的经营者卡尔森,1978年,瑞典航空公司出现危机,无力偿还债务,北欧联航即任命卡尔森为该公司的总经理,一年之后,瑞航扭亏为赢,获得了相当丰厚的利润。1980年,整个北欧联航出现危机,卡尔森放下瑞航走马上任北欧联航总经理,仅仅两年工夫,就使这个庞大的企业集团扭亏为赢,获得生机。</span><br><span class="line">北欧联航董事会的董事们起初并不十分喜欢卡尔森,因为他并不是一个十全十美的人,在他身上,优点和缺点并存,有时缺点还非常突出。就个人作风而言,卡尔森自称是个“有表现癖”的好出风头者,声称“天下三百六十行,行行都在表演亮相”。一些同事对他动辄对报界发表谈话的夸夸其谈的作风大为不满。他曾要求将公司改名为斯堪的纳维亚皇家航空公司,觉得这样更符合这个君主国的国情,结果碰了一鼻子灰。董事会的第一副董事长反唇相讥:“你自己是不是也想改名换姓”。尽管如此,由于卡尔森在经营管理方面的出色才能,北欧联航的董事们还是愿意让卡尔森出任总经理,不过也针对他做出了一些监督、约束的规定和措施。</span><br><span class="line"></span><br><span class="line">阅读以上材料,回答下列问题:</span><br><span class="line">1.结合案例分析领导合理用人的艺术主要包括哪些方面?</span><br><span class="line">2.结合案例分析领导人员应具备哪些素质?</span><br></pre></td></tr></table></figure></div><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line">组织概念:组织就是指人们为实现一定的目标,互相协作结合而成的集体或团体</span><br><span class="line"></span><br><span class="line">组织三要素:协作的意愿。有共同目标,信息联系。</span><br><span class="line"></span><br><span class="line">组织与管理关系:组织和管理都是为特定的目标服务,组织即是管理,没有管理的组织谈不上科学意义上的组织。</span><br><span class="line"></span><br><span class="line">组织行为学概念:组织行为学是系统地研究人在组织中所表现的行为和态度的学科</span><br><span class="line"></span><br><span class="line">组织行为学的历史沿革</span><br><span class="line"></span><br><span class="line">人际关系理论:人际关系理论是研究人的积极性对提高劳动生产率的影响和作用的完整的全新的管理理论。</span><br><span class="line"></span><br><span class="line">人的需求:生理,安全,情感,尊重,自我实现</span><br><span class="line"></span><br><span class="line">个体心理</span><br><span class="line">个体心理是指个体在特定的社会组织中所表现的心理现象和行为规律,个人所具备的心理现象,概括起来可以分成认知、情绪、情感与动机、能力与人格等三个方面。</span><br><span class="line"></span><br><span class="line">感觉,直觉</span><br><span class="line">1、感觉:客观事物的个别特性作用于人的感觉器官时在人脑中的直接反映。</span><br><span class="line">2、直觉:未经充分逻辑推理的感性认识。</span><br><span class="line"></span><br><span class="line">归因理论</span><br><span class="line">归因是指人们对自己或他人的行为进行分析,推论出这些行为的原因的过程</span><br><span class="line"></span><br><span class="line">决策概念:解决问题,分析判断方案</span><br><span class="line"></span><br><span class="line">满意决策:满意决策是指在现实条件下,用满意标准选择一个合适的方案,追求一个满意目标的决策。</span><br><span class="line"></span><br><span class="line">价值观:价值观是基于人的一定思维感官之上而做出的认知、理解、判断或抉择,这是人性思维里最简单、也是最真实的评定所在。</span><br><span class="line">态度含义:态度是个体对特定对象(人、观念、情感或者事件等)所持有的稳定的心理倾向。这种心理倾向蕴含着个体的主观评价以及由此产生的行为倾向性。</span><br><span class="line"></span><br><span class="line">认知需求理论:泛指个体对事物的追寻、认知、了解的内在动力,如求知欲、好奇心等。</span><br><span class="line"></span><br><span class="line">情绪</span><br><span class="line">概念情绪,是对一系列主观认知经验的通称,是人对客观事物的态度体验以及相应的行为反应,一般认为,情绪是以个体愿望和需要为中介的一种心理活动。</span><br><span class="line"></span><br><span class="line">Erg</span><br><span class="line">ERG即生存(Existence)的需要、相互关系(Relatedness)的需要和成长发展(Growth)的需要,因而这一理论被称为 “ERG”理论</span><br><span class="line"></span><br><span class="line">社会惰化:所谓社会惰化,是指个人与群体其他成员一起完成某种事情时,个人所付出的努力比单独时偏少,不如单干时出力多,个人的活动积极性与效率下降的现象,也称之为社会惰化作用,另也叫社会致弱、社会逍遥、社会懈怠。分配不均,不卖力</span><br><span class="line"></span><br><span class="line">费德勒权变模型</span><br><span class="line">是指有效的群体绩效取决于两个方面的恰当匹配:其一是与下属发生相互作用的领导者风格;其二是领导者能够控制和影响情境的程度。</span><br><span class="line"></span><br><span class="line">何塞布兰达:领导生命周期理论</span><br><span class="line"></span><br><span class="line">下属成熟度:下属成熟度是指一种衡量下属接纳或拒绝领导者的命令,以及在完成领导下达的任务或指令时候的表现情况的指标</span><br><span class="line">工作能力,工作积极性</span><br><span class="line"></span><br><span class="line">沟通定义</span><br><span class="line">沟通是人与人之间、人与群体之间思想与感情的传递和反馈的过程,以求思想达成一致和感情的通畅。</span><br><span class="line"></span><br><span class="line">组织文化概念</span><br><span class="line">是一个组织由其价值观、信念、仪式、符号、处事方式等组成的其特有的文化形象,简单而言,就是企业在日常运行中所表现出的各方各面。</span><br><span class="line"></span><br><span class="line">组织变革</span><br><span class="line">组织变革(Organizational Change)是指组织根据内外环境变化,及时对组织中的要素(如组织的管理理念、工作方式、组织结构、人员配备、组织文化及技术等)进行调整、改进和革新的过程。</span><br><span class="line"></span><br><span class="line">组织生命周期</span><br><span class="line">组织的生命周期(Organizational Life Cycles)说明组织的产生、成长和最终衰落的过程。组织结构、领导体制及管理制度形成一个在生命周期各阶段上具有相当可预测的形态,各阶段实际上是一个连续的自然的过程。</span><br><span class="line"></span><br><span class="line">创业,集体化,规范化,精细</span><br><span class="line"></span><br><span class="line">组织承诺</span><br><span class="line">组织承诺是个人对所属组织的目标和价值观的认同和信任,以及由此带来的积极情感体验。</span><br><span class="line"></span><br><span class="line">变革概念:是指组织根据内外环境变化,及时对组织中的要素(如组织的管理理念、工作方式、组织结构、人员配备、组织文化及技术等)进行调整、改进和革新的过程。</span><br></pre></td></tr></table></figure></div>]]></content>
<categories>
<category> 组织行为学 </category>
</categories>
<tags>
<tag> 复习 </tag>
<tag> 组织行为学 </tag>
<tag> 期末 </tag>
<tag> 归档 </tag>
</tags>
</entry>
<entry>
<title>Kubernetes源码分析与生产环境配置</title>
<link href="/post/b1a8e8d2.html"/>
<url>/post/b1a8e8d2.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="引言"><a href="#引言" class="headerlink" title="引言"></a>引言</h1><p>Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。在容器化部署的时代,K8s作为一个可弹性运行分布式系统的框架,提供了包括但不限于服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复、秘钥与配置管理的服务。简而言之,kubernetes提供了一种集成化的容器编排方案。</p><p>在目前存在的kubernetes解决方案中,Kubeadm是一种颇具代表性的工具,它提供了 kubeadm init 和 kubeadm join 的方法。作为创建Kubernetes集群的 “快捷途径” 的最佳实践,我们可以利用kubeadm轻易地在服务器环境拉起集群、实现集群的启动、运行、扩容。但是,目前现网中对k8s以及kubeadm的研究探讨大多局限于实验环境中,对应的研究成果并不能直接应用与生产环境。因此,我决定基于实际生产环境中对kubernetes集群的具体要求,结合k8s的源代码进行分析,希望能够为k8s的研究者提供一定的参考,以便将k8s这一划时代的工具更好的应用到互联网领域,为实现把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界而努力。</p><h1 id="Kubernetes源码及其研究环境"><a href="#Kubernetes源码及其研究环境" class="headerlink" title="Kubernetes源码及其研究环境"></a>Kubernetes源码及其研究环境</h1><p>在本文的探讨中,使用的kubernetes源代码及相应的研究环境如下:</p><p><a href="https://github.com/kubernetes/kubernetes" target="_blank" rel="noopener">https://github.com/kubernetes/kubernetes</a> <code>Kubernetes源码_20220403Version</code></p><p>GoLand2021.3.4_运行时版本: 11.0.14.1+1-b1751.46amd64_Go1.18 <code>代码分析及复现工具</code></p><p>Ubuntu20.04 <code>编译机及部署环境[待定]</code></p><h1 id="kubernetes源码分析"><a href="#kubernetes源码分析" class="headerlink" title="kubernetes源码分析"></a>kubernetes源码分析</h1><h1 id="K8s生产环境实践"><a href="#K8s生产环境实践" class="headerlink" title="K8s生产环境实践"></a>K8s生产环境实践</h1><h2 id="控制面组件去Root"><a href="#控制面组件去Root" class="headerlink" title="控制面组件去Root"></a>控制面组件去Root</h2>]]></content>
<categories>
<category> Kubernetes </category>
</categories>
<tags>
<tag> 源代码 </tag>
<tag> Kubernetes </tag>
<tag> Kubeadm </tag>
<tag> kubectl </tag>
<tag> 生产环境 </tag>
<tag> K8s </tag>
</tags>
</entry>
<entry>
<title>考研复试&夏令营分享</title>
<link href="/post/12cd4dd5.html"/>
<url>/post/12cd4dd5.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><table><thead><tr><th>这是大三同学参加夏令营和九月份复试的一些博客汇总。大家想着要把这次宝贵的夏令营经历记录一下,好给学弟学妹一个参考。学弟学妹们可以结合自身情况,大概了解一下保研流程,部分学校保研考核要求,从而少走一些弯路,去到自己理想中的学校。</th><th></th></tr></thead><tbody><tr><td></td><td></td></tr><tr><td></td><td><strong><em>\</em>##\</strong> 2021夏令营总结贴**</td></tr><tr><td></td><td></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/mu-yi-yang-42-66" target="_blank" rel="noopener">阿尔法杨XDU</a>的<a href="https://zhuanlan.zhihu.com/p/420184627" target="_blank" rel="noopener">2021年人工智能保研经历(xduee->njuai)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/shuo-xiao-ming-ren-31" target="_blank" rel="noopener">Girapath</a>的<a href="https://zhuanlan.zhihu.com/p/414650183?utm_source=qq&utm_medium=social&utm_oi=844322192228515840" target="_blank" rel="noopener">2021年计算机保研经验分享(复旦、哈深、浙大、南大、北大软微)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/hao-55-16" target="_blank" rel="noopener">lhchen</a>的<a href="https://lhchen.top/exp-baoyan/" target="_blank" rel="noopener">2021CS保研经验(清北复交浙、南大、人大)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/ma-zi-yang-76-38/" target="_blank" rel="noopener">BoJack</a>的<a href="https://zhuanlan.zhihu.com/p/393614897" target="_blank" rel="noopener">2021年(22届)计算机保研经历</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/peter-94-80" target="_blank" rel="noopener">PTYin</a>的<a href="https://zhuanlan.zhihu.com/p/418347688" target="_blank" rel="noopener">2021计算机保研经验分享:清华软件、南大、哈工大、哈工深</a></td></tr><tr><td></td><td>* @<a href="https://blog.charfole.top/" target="_blank" rel="noopener">Charfole</a>的<a href="https://zhuanlan.zhihu.com/p/421697204" target="_blank" rel="noopener">2021年(22届)计算机保研面试经验与建议(复旦、北航、中山、浙大工程师、华东师、华工等院校)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/marco-ting" target="_blank" rel="noopener">南孚先生</a>的<a href="https://zhuanlan.zhihu.com/p/416191365" target="_blank" rel="noopener">2021年计算机保研(清深、南大AI、中科大、哈深、中山等)</a></td></tr><tr><td></td><td>* @<a href="https://blog.csdn.net/all23333333" target="_blank" rel="noopener">英枭昊</a>的<a href="https://blog.csdn.net/all23333333/article/details/120533168" target="_blank" rel="noopener">抒情向2021保研经历(整个大三):浙大软院人工智能面试第一,复试第二,去向宋明黎老师VIPA课题组</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/qie-fu-yao" target="_blank" rel="noopener">Hartley</a>的<a href="https://zhuanlan.zhihu.com/p/413940434" target="_blank" rel="noopener">2021四非计算机保研经历</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/zhu-yin-lang-pie" target="_blank" rel="noopener">AYun</a>的<a href="https://zhuanlan.zhihu.com/p/413778973" target="_blank" rel="noopener">2021年计算机专业保研经历分享(复旦、浙大、上科大)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/xiao-qing-wa-52-54" target="_blank" rel="noopener">小青蛙</a>的<a href="https://zhuanlan.zhihu.com/p/417115393" target="_blank" rel="noopener">四非学校,计算机保研上岸华5梦校南京大学!</a></td></tr><tr><td></td><td>* @<a href="https://sandyxi.gitee.io/" target="_blank" rel="noopener">SandyXi</a>的<a href="https://sandyxi.gitee.io/2021/10/05/2021夏——保研夏令营/" target="_blank" rel="noopener">2021夏——保研夏令营</a></td></tr><tr><td></td><td>* @<a href="https://blog.csdn.net/weixin_43968093/article/details/120484114?spm=1001.2014.3001.5501" target="_blank" rel="noopener">枫楠Kuiy</a>的<a href="https://blog.csdn.net/weixin_43968093/article/details/120484114?spm=1001.2014.3001.5501" target="_blank" rel="noopener">2021计算机保研经历</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/zh666-15-15" target="_blank" rel="noopener">JamisonZ</a>的<a href="https://zhuanlan.zhihu.com/p/415894198" target="_blank" rel="noopener">2021计算机保研(双非)网安向</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/yi-nan-ping-53-73" target="_blank" rel="noopener">一只眠羊</a>的<a href="https://zhuanlan.zhihu.com/p/419866142" target="_blank" rel="noopener">2021计算机保研经历——南开、厦大、哈工大威海、华师、浙大、北航</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/qing-feng-jiu-zui" target="_blank" rel="noopener">清风酒醉</a>的<a href="https://zhuanlan.zhihu.com/p/417233047" target="_blank" rel="noopener">2021计算机保研</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/the-wang-15" target="_blank" rel="noopener">wyypersist</a>的<a href="https://zhuanlan.zhihu.com/p/415666100" target="_blank" rel="noopener">2021保研经历分享-感谢过去三年的自己和亲友的支持和帮助</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/kang-kang-89-49-32" target="_blank" rel="noopener">康康</a>的<a href="https://zhuanlan.zhihu.com/p/412369681" target="_blank" rel="noopener">2021年计算机保研经验贴,100天保研大战,纯rk选手,挂到怀疑人生,最终上岸清华深圳计算机专硕</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/clcg-20/" target="_blank" rel="noopener">白夜</a>的<a href="https://zhuanlan.zhihu.com/p/414385443" target="_blank" rel="noopener">2021年计算机保研经历:末九10%的挣扎之路【武大、同济、西交、天大、国防科大、南开、东南】</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/he-bi-zai-yi-42-25" target="_blank" rel="noopener">Nayuta</a>的<a href="https://zhuanlan.zhihu.com/p/411525078" target="_blank" rel="noopener">2021计算机保研(一只菜狗的起起伏伏之路)——lamda 上交 计算所 北大信科 清深CS</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/wang-cheng-chun-18" target="_blank" rel="noopener">CCWUCMCTS</a>的<a href="https://zhuanlan.zhihu.com/p/394450172" target="_blank" rel="noopener">信息之海中的缘分试探——信安保研从211到双非(终)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/bai-ri-meng-36-57" target="_blank" rel="noopener">白日梦</a>的<a href="https://zhuanlan.zhihu.com/p/416408279?utm_source=qq&utm_medium=social&utm_oi=922395016234684416" target="_blank" rel="noopener">2021计算机菜批保研经历(软件所,中山,交软,南大CS,浙大CS,清软,北大软微等)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/liang-liang-yu-42" target="_blank" rel="noopener">根号二十一</a>的<a href="https://zhuanlan.zhihu.com/p/415726099" target="_blank" rel="noopener">2022推免计算机(信安/网络空间安全) 人大信院、信工所国重、西安交大网安、北邮计算机、天大网安、中科大网安、北大软微、南大计院</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/gu-fang-yi-hua-hong/posts" target="_blank" rel="noopener">孤芳倚花红</a>的<a href="https://zhuanlan.zhihu.com/p/415074914" target="_blank" rel="noopener">2021年计算机保研-双非三无底层CSer的失败保研经历(武大/复旦/计算所/华科/同济/上交)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/huang-chong-ru-78" target="_blank" rel="noopener">心兑</a>的<a href="https://zhuanlan.zhihu.com/p/377444777" target="_blank" rel="noopener">2021年半跨CS保研经历(已上岸pku)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/zhang-yifu-12" target="_blank" rel="noopener">randyzhang</a>的<a href="https://zhuanlan.zhihu.com/p/420554709" target="_blank" rel="noopener">2021计算机软工保研记录(北大软微、南大、浙大、哈深、同济、华科、国防科大等)</a></td></tr><tr><td></td><td>* @<a href="https://github.com/Emanual20" target="_blank" rel="noopener">Emanual20</a>的<a href="https://zhuanlan.zhihu.com/p/416688010" target="_blank" rel="noopener">2021年计算机保研经历回顾(人大信息、人大高瓴、自动化所、清深AI、复旦计算机)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/yi-qia-luo-si-37-43" target="_blank" rel="noopener">xq别睡了</a>的<a href="https://zhuanlan.zhihu.com/p/394968781" target="_blank" rel="noopener">2021计算机 低rk保研经历(上岸pku信科)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/qing-yan-31-63" target="_blank" rel="noopener">轻言</a>的<a href="https://www.zhihu.com/question/469350209/answer/2015872572" target="_blank" rel="noopener">如何评价2021年保研夏令营及预推免形势?的回答</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/ying-huo-zhi-sen-47-98" target="_blank" rel="noopener">CH-2</a>的<a href="https://zhuanlan.zhihu.com/p/392522446" target="_blank" rel="noopener">2021计算机保研夏令营、预推免记录(含PKU、THU、NJU、USTC、WHU、XJTU、NSSC等)</a></td></tr><tr><td></td><td>* @匿名用户的<a href="https://www.zhihu.com/question/469350209/answer/2148579686" target="_blank" rel="noopener">如何评价2021年保研夏令营及预推免形势?</a></td></tr><tr><td></td><td>* @<a href="https://blog.csdn.net/Cyril_KI" target="_blank" rel="noopener">Cyril_KI</a>的<a href="https://blog.csdn.net/cyril_ki/category_11417649.html" target="_blank" rel="noopener">CS保研记录(211 rk2,北邮计算机学院、天津大学智算学部、山东大学计算机学院、北师大AI、西电计算机科学与技术学院)</a></td></tr><tr><td></td><td>* @<a href="https://sumsky.top/" target="_blank" rel="noopener">Sumsky21</a>的<a href="https://sumsky.top/2021/11/18/baoyan-series-3/" target="_blank" rel="noopener">关于保研的ABC(3)个人经历与体会</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/teng-yi-xiao-23" target="_blank" rel="noopener">王任之</a>的<a href="https://zhuanlan.zhihu.com/p/433849235" target="_blank" rel="noopener">2021计算机保研经验(北航、南大、浙大、同济)</a></td></tr><tr><td></td><td>* @<a href="https://www.cnblogs.com/jacobfun/" target="_blank" rel="noopener">Funforever</a>的<a href="https://www.cnblogs.com/jacobfun/p/15758050.html" target="_blank" rel="noopener">2021某不知名211rank9%软工保研&某网约车大厂实习经验分享(就业向)</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/qu-tang-xia-63" target="_blank" rel="noopener">rookie</a>的<a href="https://zhuanlan.zhihu.com/p/415573882" target="_blank" rel="noopener">2021计算机保研|中九低rk普通人|北大 上交cs 复旦大数据&cs 面经、总结以及复习建议</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/chi-yue-dian" target="_blank" rel="noopener">dragon_bra</a>的<a href="https://zhuanlan.zhihu.com/p/426136401" target="_blank" rel="noopener">2021厦门大学CS保研经历 | 夏令营游记 | MAC实验室</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/piao-lin-66-27" target="_blank" rel="noopener">方知</a>的<a href="https://zhuanlan.zhihu.com/p/470421627" target="_blank" rel="noopener">2021保研夏令营经验贴</a></td></tr><tr><td></td><td>* @<a href="https://www.zhihu.com/people/glibc" target="_blank" rel="noopener">libcso6</a>的<a href="https://mp.weixin.qq.com/s?__biz=MzU2MTcxMzI4NQ==&mid=2247486042&idx=1&sn=9079d5068dbbf15f75fc7819cb4e78b7&chksm=fc75d3b0cb025aa682e459531205965e18cd7c180cccfb12ddfd30046f54dbc9adf77b2b3b1b&mpshare=1&scene=22&srcid=0314FIJCHvhVJqbwti2CVvmu&sharer_sharetime=1647229808862&sharer_shareid=dd1ce66b3ff97b74ecc83dbb60e9b8d3%23rd" target="_blank" rel="noopener">【OUC保研NO.56】To复旦:保研边缘,感觉寄了?那就开摆!</a></td></tr><tr><td></td><td></td></tr><tr><td></td><td><strong><em>\</em>##\</strong> 2020夏令营总结贴**</td></tr><tr><td></td><td></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/niraliye" target="_blank" rel="noopener">墨云沧</a>的<a href="https://zhuanlan.zhihu.com/p/267009034" target="_blank" rel="noopener">2020计算机专业保研经验贴</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/kid-22-32-56" target="_blank" rel="noopener">KID22</a>的<a href="https://www.zhihu.com/column/c_1293286348367900672" target="_blank" rel="noopener">计算机保研</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/arong-75-6/posts" target="_blank" rel="noopener">猪儿虫的小仓库</a>的<a href="https://zhuanlan.zhihu.com/p/260002988" target="_blank" rel="noopener">计算机保研经验帖 清华·北大·上交·复旦·南大</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/qq_43413123" target="_blank" rel="noopener">William</a>的<a href="https://blog.csdn.net/qq_43413123/article/details/109094823" target="_blank" rel="noopener">2020计算机保研经历</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/wu-dong-52-28-61" target="_blank" rel="noopener">50Hum</a>的<a href="https://zhuanlan.zhihu.com/p/266527061" target="_blank" rel="noopener">2020计算机保研经历</a></td></tr><tr><td></td><td>- @<a href="https://lemon-412.github.io/" target="_blank" rel="noopener">Lemon Qin</a>的<a href="https://lemon-412.github.io/2020/10/05/%E5%A4%8F%E4%BB%A4%E8%90%A5%E9%A2%84%E6%8E%A8%E5%85%8D%E7%BB%8F%E5%8E%86%E5%B0%8F%E7%BB%93/#more" target="_blank" rel="noopener">夏令营预推免经历小结</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/san-cun-jiu-cheng-qi-cun-zhi-nian-29" target="_blank" rel="noopener">SinclairWang</a>的<a href="https://zhuanlan.zhihu.com/p/263553192" target="_blank" rel="noopener">CS保研N问N答</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/mark-10-30" target="_blank" rel="noopener">弗兰肯斯坦358</a>的<a href="https://zhuanlan.zhihu.com/p/262066989" target="_blank" rel="noopener">保姆级保研教学–非大佬2020年计算机保研经验贴</a></td></tr><tr><td></td><td>- @<a href="https://www.jianshu.com/u/d40238aabb31" target="_blank" rel="noopener">Troyyyyyyyy</a>的<a href="https://www.jianshu.com/p/60dabdfe34c6" target="_blank" rel="noopener">2020计算机保研夏令营经历-南大、清华叉院、清华贵系…</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/antman-46" target="_blank" rel="noopener">伶爵</a>的<a href="https://zhuanlan.zhihu.com/p/157633072" target="_blank" rel="noopener">2020计算机类保研经历回顾</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/xiao-qiao-2-10" target="_blank" rel="noopener">njDDD</a>的<a href="https://zhuanlan.zhihu.com/p/266454924" target="_blank" rel="noopener">2020计算机保研经历分享</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/zhihufellow" target="_blank" rel="noopener">飞天游侠</a>的<a href="https://www.zhihu.com/question/403688470/answer/1472946787" target="_blank" rel="noopener">2020计算机类保研经历回顾</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/bu-huo-98-22" target="_blank" rel="noopener">sanshui</a>的<a href="https://zhuanlan.zhihu.com/p/266329661?utm_source=qq&utm_medium=social&utm_oi=742264367994650624" target="_blank" rel="noopener">2021计算机保研上岸经验贴 清华·上交·南大·浙大·北航·西交</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/qq_40742077" target="_blank" rel="noopener">rershall</a>的<a href="https://blog.csdn.net/qq_40742077/article/details/109064266" target="_blank" rel="noopener">2020计算机类保研经历回顾</a></td></tr><tr><td></td><td>- @<a href="https://mazerunner.gitee.io/" target="_blank" rel="noopener">Maze Runner</a>的<a href="https://mazerunner.gitee.io/2020/09/30/2020%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BF%9D%E7%A0%94%E5%A4%8F%E4%BB%A4%E8%90%A5-%E5%A4%8F%E5%AD%A3%E8%BF%87%E5%BE%80/" target="_blank" rel="noopener">2020计算机保研夏令营–夏季过往</a></td></tr><tr><td></td><td>- @<a href="https://polosec.gitee.io/" target="_blank" rel="noopener">Polo</a>的<a href="https://polosec.gitee.io/2020/10/12/%E9%9D%A2%E7%BB%8F/" target="_blank" rel="noopener">网络安全专业-夏令营/预推免面经</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/yang-nan-41-75/posts" target="_blank" rel="noopener">羊男</a>的<a href="https://zhuanlan.zhihu.com/p/263086696" target="_blank" rel="noopener">中科院计算所|上交软院ipads|清华计算机系夏令营保研推免经历</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/he-kling" target="_blank" rel="noopener">Alive</a>的<a href="https://zhuanlan.zhihu.com/p/266880789" target="_blank" rel="noopener">2020计算机保研记(清华,北大,华五..)</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/TheTopMing" target="_blank" rel="noopener">TheTopMing</a>的<a href="https://blog.csdn.net/TheTopMing/article/details/109169458" target="_blank" rel="noopener">2020计算机保研之路:211上岸上海985</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/qq_40948559" target="_blank" rel="noopener">随处可见的打字员7952</a>的<a href="https://blog.csdn.net/qq_40948559/article/details/109231550" target="_blank" rel="noopener">【保研经验】来自一只five的一点经验(最终去向:西电广研院专硕)</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/weixin_43722211" target="_blank" rel="noopener">sub_waer</a>的<a href="https://blog.csdn.net/weixin_43722211/article/details/109035339" target="_blank" rel="noopener">2021级计算机保研经历</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/chen-huan-zhe-79" target="_blank" rel="noopener">陈患者</a>的<a href="https://zhuanlan.zhihu.com/p/265095282" target="_blank" rel="noopener">2021届-计算机类边缘人士保研总结</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/weixin_43074474" target="_blank" rel="noopener">王森ouc</a>的<a href="https://blog.csdn.net/weixin_43074474/article/details/109122197" target="_blank" rel="noopener">2020保研夏令营——无科研无竞赛的夏令营之旅</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/jiang-xue-feng-28-14" target="_blank" rel="noopener">学分</a>的<a href="https://www.zhihu.com/question/403757165/answer/1356233760" target="_blank" rel="noopener">2020年保研申请到现在,你的情况怎么样呢?</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/yi-bei-xian-16" target="_blank" rel="noopener">一辈闲</a>的<a href="https://zhuanlan.zhihu.com/p/248489246" target="_blank" rel="noopener">干货满满的2020计算机保研经验贴!(上交、北大等)</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/Annalovecoding" target="_blank" rel="noopener">Annalovecoding</a>的<a href="https://blog.csdn.net/Annalovecoding/article/details/108896834" target="_blank" rel="noopener">2020计算机、信息安全保研记</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/zhang-lei-54-11" target="_blank" rel="noopener">一程山路</a>的<a href="https://zhuanlan.zhihu.com/p/266870455" target="_blank" rel="noopener">2020年计算机方向夏令营保研经验分享(南大,北航,天大,南开)</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/si-shu-zheng" target="_blank" rel="noopener">ss-Z</a>的<a href="https://zhuanlan.zhihu.com/p/268825353" target="_blank" rel="noopener">“日月星辰陪我走”-2021计算机保研记录/经验贴</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/weixin_43368559" target="_blank" rel="noopener">b站今天有学习区了吗</a>的<a href="【计算机推免】川大计算机夏令营—华南理工软件预推免—华科计算机预推免(2020.10)">【计算机推免】川大计算机夏令营—华南理工软件预推免—华科计算机预推免(2020.10)</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/li-yichen-84-80" target="_blank" rel="noopener">蓝色树獭</a>的<a href="https://zhuanlan.zhihu.com/p/267499551" target="_blank" rel="noopener">2020CS安全方向升学小计 保研夏令营|港校early admission</a></td></tr><tr><td></td><td>- @<a href="https://lfysec.top/" target="_blank" rel="noopener">lfysec</a>的<a href="https://lfysec.top/2020/10/12/2020CS%E4%BF%9D%E7%A0%94%E7%AC%94%E8%AE%B0/" target="_blank" rel="noopener">2020CS保研笔记 & 艰难2020总结</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/jipeng-48" target="_blank" rel="noopener">Ji Peng</a>的<a href="https://zhuanlan.zhihu.com/p/358182473" target="_blank" rel="noopener">2020年“工理经管”四大门类保研夏令营混申回忆录(清深、TBSI、计算所、上交电院、北大汇丰等十余个项目)</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/lan-feng-shui-men" target="_blank" rel="noopener">Rogers博</a>的<a href="https://www.zhihu.com/question/296432111/answer/2276905797" target="_blank" rel="noopener">适合对于技术不自信,但想冲击top学校的同学,尝试了很多旁门左道的“宝藏”项目(清华深圳,南大工程管理,中科大苏州,浙大求是研究院,武大信息管理等)</a></td></tr><tr><td></td><td></td></tr><tr><td></td><td><strong><em>\</em>##\</strong> 2019夏令营总结贴**</td></tr><tr><td></td><td></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/qq_41997479" target="_blank" rel="noopener">一岸流年</a>的<a href="https://blog.csdn.net/qq_41997479/article/details/95599816" target="_blank" rel="noopener">2019北理计算机,北航计算机夏令营,中科院霸面保研经验</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/li-qing-quan-65/activities" target="_blank" rel="noopener">Quentin Lee</a>的<a href="https://zhuanlan.zhihu.com/p/78585742" target="_blank" rel="noopener">我的计算机保研流水账(2020届)</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/dai-tu-zhe/activities" target="_blank" rel="noopener">Y.Shu</a>的<a href="https://zhuanlan.zhihu.com/p/88537420" target="_blank" rel="noopener">2019计算机保研经历:清华计算机·清华软院·清华深研院·南大计算机·浙大计算机等</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/m0_38055352" target="_blank" rel="noopener">Johnson</a>的<a href="https://blog.csdn.net/m0_38055352/article/details/102887818" target="_blank" rel="noopener">【2019保研经验】清华贵系、清华软院、北大叉院、中科院自动化所等</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/qq_38633884" target="_blank" rel="noopener">宫·商</a>的<a href="https://blog.csdn.net/qq_38633884/article/details/97178586" target="_blank" rel="noopener">2019上交、上科、北航、中科大、自动化所计算机夏令营+浙大计算机预推免简记</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/li-quan-quan-24" target="_blank" rel="noopener">圈圈</a>的<a href="https://blog.csdn.net/qq_40742077/article/details/109064266" target="_blank" rel="noopener">2020年保研经历</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/jipeng-48" target="_blank" rel="noopener">Ji Peng</a>的<a href="https://zhuanlan.zhihu.com/p/358182473" target="_blank" rel="noopener">2020年“工理经管”四大门类保研夏令营混申回忆录(清深、TBSI、计算所、上交电院、北大汇丰等十余个项目)</a></td></tr><tr><td></td><td></td></tr><tr><td></td><td></td></tr><tr><td></td><td><strong><em>\</em>##\</strong> 2018年夏令营总结贴**</td></tr><tr><td></td><td></td></tr><tr><td></td><td>- @<a href="https://sweetice.github.io/" target="_blank" rel="noopener">Johnny的博客</a>的<a href="https://sweetice.github.io/2018/10/03/%E4%BD%9B%E7%B3%BB%E4%BF%9D%E7%A0%94-%E7%94%B5%E6%B0%94%E5%B7%A5%E7%A8%8B%E8%B7%A8%E4%BF%9DAI/" target="_blank" rel="noopener">佛系保研:电气工程跨保AI</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/tina-67-56" target="_blank" rel="noopener">TINA</a>的<a href="https://zhuanlan.zhihu.com/p/45818580" target="_blank" rel="noopener">2018保研心得体会</a></td></tr><tr><td></td><td>- @<a href="https://weibo.com/currycode" target="_blank" rel="noopener">孙笑川</a>的<a href="https://mp.weixin.qq.com/s?__biz=MzI4NjU0ODQ1Ng==&mid=2247484202&idx=1&sn=c7ee699b9c16acc835ed6846fefddbad" target="_blank" rel="noopener">低价值保研经验</a></td></tr><tr><td></td><td>- @<a href="https://cp-here.github.io/" target="_blank" rel="noopener">基本法</a>的<a href="https://www.jianshu.com/p/2228d7464d99" target="_blank" rel="noopener">保研呐就都不知道,自己就不可以预料</a></td></tr><tr><td></td><td>- @<a href="https://github.com/Smlight" target="_blank" rel="noopener">Smlight</a>的<a href="https://smlight.github.io/blog/2018/10/12/block2/" target="_blank" rel="noopener">保研经历</a></td></tr><tr><td></td><td>- @<a href="https://blog.csdn.net/mengwuyaaa" target="_blank" rel="noopener">mengwuyaaa</a>的<a href="https://blog.csdn.net/mengwuyaaa/article/details/82918032" target="_blank" rel="noopener">清华北大计算所自动化所计算机夏令营详细攻略</a></td></tr><tr><td></td><td>- @<a href="https://oncemath.com" target="_blank" rel="noopener">Zarper</a>的<a href="https://oncemath.com/share/my-postgraduate-share/" target="_blank" rel="noopener">保研推免经验分享 - 数学系跨保 CS</a></td></tr><tr><td></td><td>- @<a href="https://www.zhihu.com/people/lhw-55/posts" target="_blank" rel="noopener">lhw</a>的<a href="https://zhuanlan.zhihu.com/p/60553247" target="_blank" rel="noopener">211物联网工程保研中国科学技术大学cs自然语言处理方向</a></td></tr><tr><td></td><td>- @<a href="https://github.com/taogelose" target="_blank" rel="noopener">菜得抠脚</a>的<a href="https://blog.csdn.net/Taogewins/article/details/89087610" target="_blank" rel="noopener">某菜在北航、中科院、南开的计算机视觉(CV)方向保研经历</a></td></tr><tr><td></td><td></td></tr><tr><td></td><td><strong><em>\</em>##\</strong> 2017年夏令营总结贴**</td></tr><tr><td></td><td></td></tr><tr><td></td><td>- @<a href="https://www.jianshu.com/u/0fffd87a3234" target="_blank" rel="noopener">奋斗的小鸟lcy</a>的<a href="https://www.jianshu.com/p/9fe83bc6f679" target="_blank" rel="noopener">计算机专业暑期夏令营之行总结</a></td></tr><tr><td></td><td>- @<a href="https://www.jianshu.com/u/94429f1c4f53" target="_blank" rel="noopener">西电王小熊</a>的<a href="https://www.jianshu.com/p/d265069f2417" target="_blank" rel="noopener">[读研]王小熊的推免面试经历</a></td></tr><tr><td></td><td>- @<a href="http://my.csdn.net/Touch_Thesky" target="_blank" rel="noopener">WonderSeven</a>的<a href="http://blog.csdn.net/touch_thesky/article/details/78126878" target="_blank" rel="noopener">个人保研经历以及经验分享</a></td></tr><tr><td></td><td>- @<a href="http://blog.csdn.net/qq_25201379" target="_blank" rel="noopener">sunrise的博客</a>的<a href="http://blog.csdn.net/qq_25201379/article/details/78178697" target="_blank" rel="noopener">保研经历-从信工所-国防科大-上交-最后确定复旦(信息安全专业)</a></td></tr><tr><td></td><td>- <a href="https://www.zhihu.com/question/34582860/answer/245950683" target="_blank" rel="noopener">本科四非保研到了北大信科学硕</a></td></tr><tr><td></td><td>- <a href="http://www.360doc.com/content/17/1007/20/27477386_693026687.shtml" target="_blank" rel="noopener">所有结局在努力面前都不成敬意</a></td></tr><tr><td></td><td>- @<a href="http://www.360doc.com/userhome/27525068" target="_blank" rel="noopener">gtcer</a>的<a href="http://www.360doc.com/content/17/1101/14/27525068_700005388.shtml" target="_blank" rel="noopener">2018届研究生招生暑期夏令营经历分享——guochengtao</a></td></tr><tr><td></td><td>- @<a href="http://dracula.tech/" target="_blank" rel="noopener">Dracula</a>的<a href="http://dracula.tech/?p=269" target="_blank" rel="noopener">保研经验分享</a></td></tr></tbody></table>]]></content>
<categories>
<category> 研究生 </category>
</categories>
<tags>
<tag> 考研 </tag>
<tag> 经验 </tag>
<tag> 报验 </tag>
<tag> 2023 </tag>
</tags>
</entry>
<entry>
<title>一种基于Java-TCP的即时聊天系统设计与实现(解析)</title>
<link href="/post/ed2af026.html"/>
<url>/post/ed2af026.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="声明"><a href="#声明" class="headerlink" title="声明"></a>声明</h1><p>本文基于「偉ing」先生的原创代码研究与解析,本人已获得作者的付费授权。本文内容是对源代码内容的解析与学习,受CC BY-NC-SA 4.0许可协议保护。未经本人允许,禁止使用文章中出现的一切源代码,并恕不提供项目的任何源代码片段。</p><h1 id="文章结构"><a href="#文章结构" class="headerlink" title="文章结构"></a>文章结构</h1><ul><li>代码架构介绍</li><li>代码片段分析1</li><li>代码分析片段2</li><li>···</li><li>在具体环境中的应用测试</li><li>基于服务器实现跨平台应用</li></ul><h1 id="代码架构介绍"><a href="#代码架构介绍" class="headerlink" title="代码架构介绍"></a>代码架构介绍</h1><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/QQ_V2%E4%BB%A3%E7%A0%81%E6%9E%B6%E6%9E%84.jpg" data-fancybox="group" data-caption="QQ_V2代码架构" class="fancybox"><img alt="QQ_V2代码架构" title="QQ_V2代码架构" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/QQ_V2%E4%BB%A3%E7%A0%81%E6%9E%B6%E6%9E%84.jpg" class="lazyload"></a></p><p>从整体文件结构来看,项目分为com包(常用类),dao包(数据库操作),entity包(实体),img包(图像),utils包(工具),view包(图形)六大部分,</p>]]></content>
<categories>
<category> Java </category>
</categories>
<tags>
<tag> Java </tag>
<tag> TCP </tag>
<tag> SQL </tag>
<tag> GUI </tag>
<tag> 即时通讯系统 </tag>
<tag> 服务器 </tag>
</tags>
</entry>
<entry>
<title>MineCraft源码分析(一)</title>
<link href="/post/e2190ec0.html"/>
<url>/post/e2190ec0.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h1><p>MineCraft是一款沙盒式建造游戏,缔造者为Mojang Studios创始人马库斯·佩尔松,其灵感源于《无尽矿工》、《矮人要塞》和《地下城守护者》。现首席创意官为延斯·伯根斯坦,首席开发者为昂内丝·拉尔森。玩家可以在游戏中的三维空间里创造和破坏林林总总的方块,甚至在多人服务器与单人世界中体验不同的游戏模式,打造精美的建筑物,创造物和艺术品。且Minecraft的游戏平台已囊括了移动设备和游戏主机。<br>相信很多人都在自己的童年游戏生涯中接触到过MC。对我来说,MC更像是一种回忆,承载起了众多与玩伴们在方块的世界中冒险与生活的温馨记忆。大学以来,我先后尝试了在游戏中实现基于红石体系的复杂电路系统,热衷于寻找游戏中隐含的机制与特性,并基于我所掌握的软件工程知识进行相应的解读。如今,我终于有机会和能力进行MC源代码的阅读,我希望能够通过这样的经历提高我的软件编码水平和阅读能力,进一步加深对Java语言的理解和应用,同时能够记录成文为后来的探索者们提供建议、指明方向。</p><h1 id="MineCraft源代码的获取"><a href="#MineCraft源代码的获取" class="headerlink" title="MineCraft源代码的获取"></a>MineCraft源代码的获取</h1><p>首先,根据官方MineCraft开发小组的说法,他们将会持续开放部分MineCraft的源代码供玩家制作Mod,提升游戏的Java引擎与制作自己的游戏项目。但是就目前来看,他们并没有完成完整的源代码的公布,不过这并不妨碍部分爱好者进行对MC源代码的初步了解。<br><a href="https://github.com/Mojang/brigadier" target="_blank" rel="noopener">https://github.com/Mojang/brigadier</a> <code>官方源代码公布地址</code></p><p>其次,由<a href="http://www.modcoderpack.com" target="_blank" rel="noopener">www.modcoderpack.com</a> 给出了另一种解包MC的方法。目前网页上提供了MCP940、937、931、928、918、908的6个对应不同版本的包。下载之后按照文件中记录操作即可。不过最高支持的MC的版本停留在1.12,无法对最新MC的源码和特性进行分析。<br><a href="http://www.modcoderpack.com/website/content/mcp-910" target="_blank" rel="noopener">http://www.modcoderpack.com/website/content/mcp-910</a> <code>MCP-Packages</code></p><p>如上两种方法都不能让我们拿到较为满意的代码,于是我选择通过MCP-Reborn项目进行对MC源代码的获取。值得注意的是,MC将自己的源码做了混淆处理之后才打包成为jar包,因此MCP架构下的反推只能说是得到一些可以运行的无限接近MC源码的代码,可能与真·MC源代码有出入。</p><h1 id="IDEA引入MCP-Reborn-1-16"><a href="#IDEA引入MCP-Reborn-1-16" class="headerlink" title="IDEA引入MCP-Reborn-1.16"></a>IDEA引入MCP-Reborn-1.16</h1><p><code>⚠️ WARNING ⚠️: You CANNOT publish any code generated by this tool.</code><br><code>注意:开发者禁止任何人发布基于本框架生成的任何代码!</code></p><p>首先解压缩文件,将其导入IDEA中,项目会自行完成MCP的构建。在运行过程中会遇到某文件无法下载的问题,通常,将你的网络切换为外网即可解决问题。初次架构会耗费较长的时间,请确保架构成功之后(无Error)再进入下一步的操作。<br>构建完毕后打开右侧Gradle,找到mcp-reborn->Tasks->mcp->setup,双击运行,开始反编译。<br>反编译完成后即可在左侧Project->MCP-Reborn->src中找到源码。<br>如需运行Minecraft可在src->main->java->mcp->client->start中运行类Start(public class Start)。<br>此外,在更改源代码之后需要进行的测试,打包方法,请参考:<a href="https://github.com/Hexeption/MCP-Reborn" target="_blank" rel="noopener">https://github.com/Hexeption/MCP-Reborn</a> 中Readme文档的说明,本文不作探讨。<br><em>项目Github地址</em>:<a href="https://github.com/Hexeption/MCP-Reborn" target="_blank" rel="noopener">https://github.com/Hexeption/MCP-Reborn</a></p><h1 id="AbstractFishEntity-——-以鱼类抽象实体类为例介绍Entity类别"><a href="#AbstractFishEntity-——-以鱼类抽象实体类为例介绍Entity类别" class="headerlink" title="AbstractFishEntity —— 以鱼类抽象实体类为例介绍Entity类别"></a>AbstractFishEntity —— 以鱼类抽象实体类为例介绍Entity类别</h1><p>首先我们进入entity包中passive->fish类,找到声明鱼类实体的AbstractFishEntity类。<br>我们发现,他首先进行了对鱼型实体的初始化以及部分动作的声明和定义:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) {</span><br><span class="line"> return sizeIn.height * 0.65F;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">public static AttributeModifierMap.MutableAttribute func_234176_m_() {</span><br><span class="line"> return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 3.0D);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public boolean preventDespawn() {</span><br><span class="line"> return super.preventDespawn() || this.isFromBucket();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public static boolean func_223363_b(EntityType<? extends AbstractFishEntity> type, IWorld worldIn, SpawnReason reason, BlockPos p_223363_3_, Random randomIn) {</span><br><span class="line"> return worldIn.getBlockState(p_223363_3_).isIn(Blocks.WATER) && worldIn.getBlockState(p_223363_3_.up()).isIn(Blocks.WATER);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">public boolean canDespawn(double distanceToClosestPlayer) {</span><br><span class="line"> return !this.isFromBucket() && !this.hasCustomName();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public int getMaxSpawnedInChunk() {</span><br><span class="line"> return 8;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">protected void registerData() {</span><br><span class="line"> super.registerData();</span><br><span class="line"> this.dataManager.register(FROM_BUCKET, false);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>如上,定义了获取实体视角高度(StandingEyeHeight)的函数,定义了它允许消失与否的判定条件,实体是否位于特定Block中的判定(isIn(Blocks.WATER)),以及其最大的生成块数据,最后将其注册进保存实体的数据集中。<br>接下来,开始对实体参数的设定与判断:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">protected void registerGoals() {</span><br><span class="line"> super.registerGoals();</span><br><span class="line"> this.goalSelector.addGoal(0, new PanicGoal(this, 1.25D));</span><br><span class="line"> this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, PlayerEntity.class, 8.0F, 1.6D, 1.4D, EntityPredicates.NOT_SPECTATING::test));</span><br><span class="line"> this.goalSelector.addGoal(4, new AbstractFishEntity.SwimGoal(this));</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> protected PathNavigator createNavigator(World worldIn) {</span><br><span class="line"> return new SwimmerPathNavigator(this, worldIn);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public void travel(Vector3d travelVector) {</span><br><span class="line"> if (this.isServerWorld() && this.isInWater()) {</span><br><span class="line"> this.moveRelative(0.01F, travelVector);</span><br><span class="line"> this.move(MoverType.SELF, this.getMotion());</span><br><span class="line"> this.setMotion(this.getMotion().scale(0.9D));</span><br><span class="line"> if (this.getAttackTarget() == null) {</span><br><span class="line"> this.setMotion(this.getMotion().add(0.0D, -0.005D, 0.0D));</span><br><span class="line"> }</span><br><span class="line"> } else {</span><br><span class="line"> super.travel(travelVector);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>接下来是为鱼类实体进行Goal的注册,通过addGoal函数</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">public void addGoal(int priority, Goal task) {</span><br><span class="line"> this.goals.add(new PrioritizedGoal(priority, task));</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>注册实体的Goal信息<br>函数中包含两个值,分别是Goal的优先级与Goal的目标函数<br>对鱼类实体而言,需要添加的Goal有Panic、AvoidEntityGoal、SwimGoal三种,</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">public PanicGoal(CreatureEntity creature, double speedIn) {</span><br><span class="line"> this.creature = creature;</span><br><span class="line"> this.speed = speedIn;</span><br><span class="line"> this.setMutexFlags(EnumSet.of(Goal.Flag.MOVE));</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">public boolean shouldExecute(){…}</span><br><span class="line">protected boolean findRandomPosition(){…}</span><br><span class="line">public boolean isRunning(){…}</span><br><span class="line">public void startExecuting(){…}</span><br><span class="line">public void resetTask(){…}</span><br><span class="line">public boolean shouldContinueExecuting(){…}</span><br><span class="line">protected BlockPos getRandPos(IBlockReader worldIn, Entity entityIn, int horizontalRange, int verticalRange){…}</span><br></pre></td></tr></table></figure></div><p>Panic_Goal主要用于判定该实体对于敌对生物接近等产生的恐慌进行反应,在鱼类实体中具有最高的优先级0</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">public AvoidEntityGoal(CreatureEntity entityIn, Class<T> classToAvoidIn, float avoidDistanceIn, double farSpeedIn, double nearSpeedIn){…}</span><br><span class="line">public AvoidEntityGoal(CreatureEntity entityIn, Class<T> avoidClass, Predicate<LivingEntity> targetPredicate, float distance, double nearSpeedIn, double farSpeedIn, Predicate<LivingEntity> p_i48859_9_){…}</span><br><span class="line">public AvoidEntityGoal(CreatureEntity entityIn, Class<T> avoidClass, float distance, double nearSpeedIn, double farSpeedIn, Predicate<LivingEntity> targetPredicate){…}</span><br><span class="line">public boolean shouldExecute(){…}</span><br><span class="line"></span><br><span class="line">public boolean shouldContinueExecuting() {</span><br><span class="line"> return !this.navigation.noPath();</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">public void startExecuting() {</span><br><span class="line"> this.navigation.setPath(this.path, this.farSpeed);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">public void resetTask() {</span><br><span class="line"> this.avoidTarget = null;</span><br><span class="line">}</span><br><span class="line">public void tick()</span><br></pre></td></tr></table></figure></div><p>AvoidEntityGoal函数提供实体用于躲避其他实体所需的向量计算,它的优先级为2</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">static class SwimGoal extends RandomSwimmingGoal {</span><br><span class="line"> private final AbstractFishEntity fish;</span><br><span class="line"></span><br><span class="line"> public SwimGoal(AbstractFishEntity fish) {</span><br><span class="line"> super(fish, 1.0D, 40);</span><br><span class="line"> this.fish = fish;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public boolean shouldExecute() {</span><br><span class="line"> return this.fish.func_212800_dy() && super.shouldExecute();</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>最后是从RandomSwimmingGoal中衍生出的SwimGoal,他被封装在鱼类实体类中,用于控制鱼的移动</p><p>此外,我们还注意到,鱼的实体类还调用了数个与声音相关的函数匹配其移动时所产生的声音输出</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">protected abstract SoundEvent getFlopSound();</span><br><span class="line"></span><br><span class="line">protected SoundEvent getSwimSound() {</span><br><span class="line"> return SoundEvents.ENTITY_FISH_SWIM;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">protected void playStepSound(BlockPos pos, BlockState blockIn) {</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>通过如上的分析我们已经初步了解了MC中对于不同实体类所采用的相同的编写方式,但是其他的生物实体可能远复杂于鱼类实体。例如,在马类实体中,用于注册的Goals增加到了7个,分为6个不同的优先级,控制了实体惊恐状态、四处奔跑状态、交配状态、跟随父母状态、规避水地形状态、凝视状态、随机朝向状态的动作。而且还有更多的函数用于控制其是否带有箱子、是否为驯服状态、与牵引绳的交互状态、吃草、饲养、心情与繁殖的状态等,同时也有相应的声音调度方法。</p><p>我们还可以注意到,对实体类进行编写时,MC对一类动作相似的的生物进行了归纳,并从该基类衍生出不同的个体类,这大大减少了代码量,但是却显著增大了代码的耦合性,对基类进行修改的时候还可能产生涟漪效应。此外,在实体类中还出现了诸如func_223363_b()、0.65F等的不规范函数命名与魔术值,增大了代码的阅读难度,让可维护性下降。</p><h1 id="从Biome包开始分析MC地形生成相关逻辑"><a href="#从Biome包开始分析MC地形生成相关逻辑" class="headerlink" title="从Biome包开始分析MC地形生成相关逻辑"></a>从Biome包开始分析MC地形生成相关逻辑</h1><p>首先我们从Biomes的定义开始说起。<br>在world->bimoe->provider->Biomes.java中,定义了MC中所有可能生成的生物群系</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">public static final RegistryKey<Biome> OCEAN = makeKey("ocean");</span><br><span class="line"> public static final RegistryKey<Biome> PLAINS = makeKey("plains");</span><br><span class="line"> public static final RegistryKey<Biome> DESERT = makeKey("desert");</span><br><span class="line"> public static final RegistryKey<Biome> MOUNTAINS = makeKey("mountains");</span><br><span class="line"> public static final RegistryKey<Biome> FOREST = makeKey("forest");</span><br><span class="line"> public static final RegistryKey<Biome> TAIGA = makeKey("taiga");</span><br><span class="line"> public static final RegistryKey<Biome> SWAMP = makeKey("swamp");</span><br><span class="line"> public static final RegistryKey<Biome> RIVER = makeKey("river");</span><br><span class="line"> public static final RegistryKey<Biome> NETHER_WASTES = makeKey("nether_wastes");</span><br><span class="line"> public static final RegistryKey<Biome> THE_END = makeKey("the_end");</span><br><span class="line"> public static final RegistryKey<Biome> FROZEN_OCEAN = makeKey("frozen_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> FROZEN_RIVER = makeKey("frozen_river");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_TUNDRA = makeKey("snowy_tundra");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_MOUNTAINS = makeKey("snowy_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> MUSHROOM_FIELDS = makeKey("mushroom_fields");</span><br><span class="line"> public static final RegistryKey<Biome> MUSHROOM_FIELD_SHORE = makeKey("mushroom_field_shore");</span><br><span class="line"> public static final RegistryKey<Biome> BEACH = makeKey("beach");</span><br><span class="line"> public static final RegistryKey<Biome> DESERT_HILLS = makeKey("desert_hills");</span><br><span class="line"> public static final RegistryKey<Biome> WOODED_HILLS = makeKey("wooded_hills");</span><br><span class="line"> public static final RegistryKey<Biome> TAIGA_HILLS = makeKey("taiga_hills");</span><br><span class="line"> public static final RegistryKey<Biome> MOUNTAIN_EDGE = makeKey("mountain_edge");</span><br><span class="line"> public static final RegistryKey<Biome> JUNGLE = makeKey("jungle");</span><br><span class="line"> public static final RegistryKey<Biome> JUNGLE_HILLS = makeKey("jungle_hills");</span><br><span class="line"> public static final RegistryKey<Biome> JUNGLE_EDGE = makeKey("jungle_edge");</span><br><span class="line"> public static final RegistryKey<Biome> DEEP_OCEAN = makeKey("deep_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> STONE_SHORE = makeKey("stone_shore");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_BEACH = makeKey("snowy_beach");</span><br><span class="line"> public static final RegistryKey<Biome> BIRCH_FOREST = makeKey("birch_forest");</span><br><span class="line"> public static final RegistryKey<Biome> BIRCH_FOREST_HILLS = makeKey("birch_forest_hills");</span><br><span class="line"> public static final RegistryKey<Biome> DARK_FOREST = makeKey("dark_forest");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_TAIGA = makeKey("snowy_taiga");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_TAIGA_HILLS = makeKey("snowy_taiga_hills");</span><br><span class="line"> public static final RegistryKey<Biome> GIANT_TREE_TAIGA = makeKey("giant_tree_taiga");</span><br><span class="line"> public static final RegistryKey<Biome> GIANT_TREE_TAIGA_HILLS = makeKey("giant_tree_taiga_hills");</span><br><span class="line"> public static final RegistryKey<Biome> WOODED_MOUNTAINS = makeKey("wooded_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> SAVANNA = makeKey("savanna");</span><br><span class="line"> public static final RegistryKey<Biome> SAVANNA_PLATEAU = makeKey("savanna_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> BADLANDS = makeKey("badlands");</span><br><span class="line"> public static final RegistryKey<Biome> WOODED_BADLANDS_PLATEAU = makeKey("wooded_badlands_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> BADLANDS_PLATEAU = makeKey("badlands_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> SMALL_END_ISLANDS = makeKey("small_end_islands");</span><br><span class="line"> public static final RegistryKey<Biome> END_MIDLANDS = makeKey("end_midlands");</span><br><span class="line"> public static final RegistryKey<Biome> END_HIGHLANDS = makeKey("end_highlands");</span><br><span class="line"> public static final RegistryKey<Biome> END_BARRENS = makeKey("end_barrens");</span><br><span class="line"> public static final RegistryKey<Biome> WARM_OCEAN = makeKey("warm_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> LUKEWARM_OCEAN = makeKey("lukewarm_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> COLD_OCEAN = makeKey("cold_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> DEEP_WARM_OCEAN = makeKey("deep_warm_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> DEEP_LUKEWARM_OCEAN = makeKey("deep_lukewarm_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> DEEP_COLD_OCEAN = makeKey("deep_cold_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> DEEP_FROZEN_OCEAN = makeKey("deep_frozen_ocean");</span><br><span class="line"> public static final RegistryKey<Biome> THE_VOID = makeKey("the_void");</span><br><span class="line"> public static final RegistryKey<Biome> SUNFLOWER_PLAINS = makeKey("sunflower_plains");</span><br><span class="line"> public static final RegistryKey<Biome> DESERT_LAKES = makeKey("desert_lakes");</span><br><span class="line"> public static final RegistryKey<Biome> GRAVELLY_MOUNTAINS = makeKey("gravelly_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> FLOWER_FOREST = makeKey("flower_forest");</span><br><span class="line"> public static final RegistryKey<Biome> TAIGA_MOUNTAINS = makeKey("taiga_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> SWAMP_HILLS = makeKey("swamp_hills");</span><br><span class="line"> public static final RegistryKey<Biome> ICE_SPIKES = makeKey("ice_spikes");</span><br><span class="line"> public static final RegistryKey<Biome> MODIFIED_JUNGLE = makeKey("modified_jungle");</span><br><span class="line"> public static final RegistryKey<Biome> MODIFIED_JUNGLE_EDGE = makeKey("modified_jungle_edge");</span><br><span class="line"> public static final RegistryKey<Biome> TALL_BIRCH_FOREST = makeKey("tall_birch_forest");</span><br><span class="line"> public static final RegistryKey<Biome> TALL_BIRCH_HILLS = makeKey("tall_birch_hills");</span><br><span class="line"> public static final RegistryKey<Biome> DARK_FOREST_HILLS = makeKey("dark_forest_hills");</span><br><span class="line"> public static final RegistryKey<Biome> SNOWY_TAIGA_MOUNTAINS = makeKey("snowy_taiga_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> GIANT_SPRUCE_TAIGA = makeKey("giant_spruce_taiga");</span><br><span class="line"> public static final RegistryKey<Biome> GIANT_SPRUCE_TAIGA_HILLS = makeKey("giant_spruce_taiga_hills");</span><br><span class="line"> public static final RegistryKey<Biome> MODIFIED_GRAVELLY_MOUNTAINS = makeKey("modified_gravelly_mountains");</span><br><span class="line"> public static final RegistryKey<Biome> SHATTERED_SAVANNA = makeKey("shattered_savanna");</span><br><span class="line"> public static final RegistryKey<Biome> SHATTERED_SAVANNA_PLATEAU = makeKey("shattered_savanna_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> ERODED_BADLANDS = makeKey("eroded_badlands");</span><br><span class="line"> public static final RegistryKey<Biome> MODIFIED_WOODED_BADLANDS_PLATEAU = makeKey("modified_wooded_badlands_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> MODIFIED_BADLANDS_PLATEAU = makeKey("modified_badlands_plateau");</span><br><span class="line"> public static final RegistryKey<Biome> BAMBOO_JUNGLE = makeKey("bamboo_jungle");</span><br><span class="line"> public static final RegistryKey<Biome> BAMBOO_JUNGLE_HILLS = makeKey("bamboo_jungle_hills");</span><br><span class="line"> public static final RegistryKey<Biome> SOUL_SAND_VALLEY = makeKey("soul_sand_valley");</span><br><span class="line"> public static final RegistryKey<Biome> CRIMSON_FOREST = makeKey("crimson_forest");</span><br><span class="line"> public static final RegistryKey<Biome> WARPED_FOREST = makeKey("warped_forest");</span><br><span class="line"> public static final RegistryKey<Biome> BASALT_DELTAS = makeKey("basalt_deltas");</span><br></pre></td></tr></table></figure></div><p>可以看到,MC预先设置了数十个Key-Value对用于标识不同的生物群系,并以此为基础开发了各个不同群系的生成方法。<br>接下来我们通过BiomeMaker方法中的makeBirchForestBiome函数来进一步了解生物群系的具体生成方法。</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">public static Biome makeBirchForestBiome(float depth, float scale, boolean isTallVariant) {</span><br><span class="line"> MobSpawnInfo.Builder mobspawninfo$builder = new MobSpawnInfo.Builder();</span><br><span class="line"> DefaultBiomeFeatures.withPassiveMobs(mobspawninfo$builder);</span><br><span class="line"> DefaultBiomeFeatures.withBatsAndHostiles(mobspawninfo$builder);</span><br><span class="line"> BiomeGenerationSettings.Builder biomegenerationsettings$builder = (new BiomeGenerationSettings.Builder()).withSurfaceBuilder(ConfiguredSurfaceBuilders.field_244178_j);</span><br><span class="line"> DefaultBiomeFeatures.withStrongholdAndMineshaft(biomegenerationsettings$builder);</span><br><span class="line"> biomegenerationsettings$builder.withStructure(StructureFeatures.RUINED_PORTAL);</span><br><span class="line"> DefaultBiomeFeatures.withCavesAndCanyons(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withLavaAndWaterLakes(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withMonsterRoom(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withAllForestFlowerGeneration(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withCommonOverworldBlocks(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withOverworldOres(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withDisks(biomegenerationsettings$builder);</span><br><span class="line"> if (isTallVariant) {</span><br><span class="line"> DefaultBiomeFeatures.withTallBirches(biomegenerationsettings$builder);</span><br><span class="line"> } else {</span><br><span class="line"> DefaultBiomeFeatures.withBirchTrees(biomegenerationsettings$builder);</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> DefaultBiomeFeatures.withDefaultFlowers(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withForestGrass(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withNormalMushroomGeneration(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withSugarCaneAndPumpkins(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withLavaAndWaterSprings(biomegenerationsettings$builder);</span><br><span class="line"> DefaultBiomeFeatures.withFrozenTopLayer(biomegenerationsettings$builder);</span><br><span class="line"> return (new Biome.Builder()).precipitation(Biome.RainType.RAIN).category(Biome.Category.FOREST).depth(depth).scale(scale).temperature(0.6F).downfall(0.6F).setEffects((new BiomeAmbience.Builder()).setWaterColor(4159204).setWaterFogColor(329011).setFogColor(12638463).withSkyColor(getSkyColorWithTemperatureModifier(0.6F)).setMoodSound(MoodSoundAmbience.DEFAULT_CAVE).build()).withMobSpawnSettings(mobspawninfo$builder.copy()).withGenerationSettings(biomegenerationsettings$builder.build()).build();</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>一般来说,地形生成的函数通常具有一定的参数输入。对于稀有/罕见或者简单的的生物群系而言,生成函数也可以没有任何输入,例如makeSmallEndIslandsBiome()等。而对于常见的群系例如BirchForestBiome(桦树林)而言,它具有depth,scale,isTallVariant三个参数,分别代表了它的深度、规模以及是否为巨型群系。<br>在函数中,会对所有的生物以及地貌生成进行判定与执行,例如本段代码中,先后进行了是否有怪物生成、是否有被动型怪物生成、是否有要塞或矿井生成、是否有洞穴或峡谷生成等等。</p><h1 id="MC与图形处理"><a href="#MC与图形处理" class="headerlink" title="MC与图形处理"></a>MC与图形处理</h1><h2 id="引入噪声——以Prelin噪声为例"><a href="#引入噪声——以Prelin噪声为例" class="headerlink" title="引入噪声——以Prelin噪声为例"></a>引入噪声——以Prelin噪声为例</h2><h3 id="噪声的定义"><a href="#噪声的定义" class="headerlink" title="噪声的定义"></a>噪声的定义</h3><p>在图形学中,我们使用噪声就是为了把一些随机变量来引入到程序中。从程序角度来说,噪声很好理解,我们希望给定一个输入,程序可以给出一个输出:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">value_type noise(value_type p) {</span><br><span class="line"> ...</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>它的输入和输出类型的维数可以是不同的组合,例如输入二维输出一维,输入二维输出二维等。而这不同的函数集合就是噪声的具体实现。<br>在代码实践中,我们常常使用random函数等为我们提供相当数量的伪随机数,同样,在图形学中我们也经常会需要使用随机变量,例如火焰、地形、云朵的模拟等等,MC中就广泛的使用了随机变量。但是由于伪随机函数生成的随机值太“随机”了,我们一般称这样的噪声是白噪声,即功率谱密度在整个频域内均匀分布的噪声,它的视觉反馈非常不自然,听起来也很刺耳。同时我们可以发现,在现实世界中存在的噪声并不像白噪声具有过大的随机性,例如木头纹理、山脉起伏,它们的形状大多是趋于分形状(fractal)的,即包含了不同程度的细节。比如地形,它有起伏很大的山脉,也有起伏稍小的山丘,也有细节非常多的石子等,这些不同程度的细节共同组成了一个自然的地形表面。人们根据以上现象提出了许多希望用程序模拟自然噪声的方法。例如,Perlin噪声被大量用于云朵、火焰和地形等自然环境的模拟;Simplex噪声在其基础上进行了改进,提到了效率和效果;而Worley噪声被提出用于模拟一些多孔结构,例如纸张、木纹等。</p><p>根据wiki,由程序产生噪声的方法大致可以分为两类:</p><table><thead><tr><th>类别</th><th>名称</th></tr></thead><tbody><tr><td>基于晶格的方法(Lattice based)</td><td>1.梯度噪声(Gradient noise)包括Perlin噪声,Simplex噪声,Wavelet噪声等;2.Value噪声(Value noise)。</td></tr><tr><td>基于点的方法(Point based)</td><td>Worley噪声</td></tr></tbody></table><p>Perlin噪声、Simplex噪声和Value噪声在性能上大致满足:Perlin噪声 > Value噪声 > Simplex噪声,Simplex噪声性能最好。Perlin噪声和Value噪声的复杂度是O(2n),其中n是维数,但Perlin噪声比Value噪声需要进行更多的乘法(点乘)操作。而Simplex噪声的复杂度为O(n2),在高纬度上优化明显。</p><h3 id="柏林噪声的提出"><a href="#柏林噪声的提出" class="headerlink" title="柏林噪声的提出"></a>柏林噪声的提出</h3><p>Perlin噪声的名字来源于它的创始人Ken Perlin。Ken Perlin早在1983年就提出了Perlin noise,当时他正在参与制作迪士尼的动画电影《电子世界争霸战》(英语:TRON),但是他不满足于当时计算机产生的那种非常不自然的纹理效果,因此提出了Perlin噪声。随后,他在1984年的SIGGRAPH Course上做了名为Advanced Image Synthesis [1]的课程演讲,并在SIGGRAPH 1985上发表了他的论文 [2]。由于Perlin噪声的算法简单,被迅速应用到各种商业软件中。我们这位善良的Perlin先生却并没有对Perlin噪声算法申请专利(他说他的祖母曾叫他这么做过……),如果他这么做了那会是多大一笔费用啊!(不过在2001年的时候,旁人看不下去了,把三维以上的Simplex噪声的专利主动授予了Perlin。对,Simplex噪声也是人家提出的……)再后来Perlin继续研究程序纹理的生成,并和他的一名学生又在SIGGRAPH 1989上发表了一篇文章 [3],提出了超级纹理(hypertexture)。他们使用噪声+fbm+ray marching实现了各种有趣的效果。到1990年,已经有大量公司在他们的产品中使用了Perlin噪声。在1999年的GDCHardCore大会上,Ken Perlin做了名为Making Noise的演讲 [4],系统地介绍了Perlin噪声的发展、实现细节和应用。如果读者不想读论文的话,强烈建议你看一下Perlin演讲的PPT。</p><p>后来在2002年,Perlin又发表了一篇论文5来改进原始的Perlin噪声中的一些问题,例如原来的缓和曲线s(t)=3t^2−2t^3的二阶导6−12t在t=0和t=1时均不等于0,这使得在相邻的晶格处它们的二阶导并不连续。因此Perlin提出使用一个更好的缓和曲线s(t)=6t^5−15t^4+10t^3;此外还改进了晶格顶点处随机梯度向量的选取。有兴趣的读者可以参考:</p><ul><li>Perlin在2002年发表的论文: <a href="http://mrl.nyu.edu/~perlin/paper445.pdf" target="_blank" rel="noopener">http://mrl.nyu.edu/~perlin/paper445.pdf</a></li><li>GPU Gems的文章: <a href="http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html" target="_blank" rel="noopener">http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html</a></li><li>GPU Gems2的文章: <a href="http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html" target="_blank" rel="noopener">http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html</a></li></ul><h3 id="柏林噪声的实现"><a href="#柏林噪声的实现" class="headerlink" title="柏林噪声的实现"></a>柏林噪声的实现</h3><p>Perlin噪声的实现较为简单。概括来说,Perlin噪声的实现需要三个步骤:<br>定义一个晶格结构,每个晶格的顶点有一个“伪随机”的梯度向量。对于二维的Perlin噪声来说,晶格结构就是一个平面网格,三维的就是一个立方体网格。<br>输入一个点(二维的话就是二维坐标,三维就是三维坐标,n维的就是n个坐标),我们找到和它相邻的那些晶格顶点(二维下有4个,三维下有8个,n维下有2^n个),计算该点到各个晶格顶点的距离向量,再分别与顶点上的梯度向量做点乘,得到2^n个点乘结果。<br>使用缓和曲线(ease curves)来计算它们的权重和。在原始的Perlin噪声实现中,缓和曲线是s(t)=3t^2−2t^3,在2002年的论文6中,Perlin改进为s(t)=6t^5−15t^4+10t^3。这里简单解释一下,为什么不直接使用s(t)=t,即线性插值。直接使用的线性插值的话,它的一阶导在晶格顶点处(即t = 0或t = 1)不为0,会造成明显的不连续性。s(t)=3t^2−2t^3在一阶导满足连续性,s(t)=6t^5−15t^4+10t^3在二阶导上仍然满足连续性。</p><p>我们下面以二维的为例进行更详细的解释。我们可以用下面的图来表示上面的第一步和第二步:</p><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/%E6%9F%8F%E6%9E%97%E5%99%AA%E5%A3%B0step1-2.jpg" data-fancybox="group" data-caption class="fancybox"><img alt data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/%E6%9F%8F%E6%9E%97%E5%99%AA%E5%A3%B0step1-2.jpg" class="lazyload" title></a></p><p>一个问题是晶格顶点处的伪随机梯度向量是如何得到的,当然我们可以通过random这样的函数来计算单位正方形(二维)内的x和y分量值,但我们更愿意要那些在单位圆内的梯度向量。Perlin在他的实现中选择使用蒙特卡洛模拟方法来选取这些随机梯度向量。具体方法是(我把描述适应到了二维):首先按之前的方法生成在单位正方形内随机梯度向量,然后剔除那些不在单位圆内的向量,直到找到了需要数目的随机梯度向量。Perlin把这些预计算得到的向量存储在一个查找表G[n]中,n是纹理大小,例如256 x 256大小的纹理对应n为256。虽然我们实际上需要n x n个梯度向量,这样会造成有些顶点的梯度是重复的。Perlin认为,重复是可以允许的,只要它们的间距够大就不会被察觉。因此,Perlin还预计算了一个随机排列数组P[n],P[n]里面存储的是打乱后的0~n-1的排列值。这样一来,当我们想要得到(i, j)处晶格的梯度向量时,可以使用:</p><blockquote><p>G=G[(i+P[j])mod n]</p></blockquote><p>得到了梯度后,我们就可以进行点乘,得到4个点乘结果,然后使用缓和曲线对它们进行插值即可。这里使用的权重就是输入点到4个顶点的横纵距离。</p><p>在原始的Perlin噪声实现中,Perlin对梯度向量的选择一般是取单位圆(三维就是单位球)内一些不同方向的向量。在他后面的改进算法7中,Perlin建议把三维的梯度向量初始化为到立方体12条边的向量值,来保证各个方向之间的不关联性。</p><p>可以看出,Perlin噪声算法的时间复杂度为O(2^n)(n是维数),2^n其实就是每个晶格的顶点个数,对于每个输入点我们需要进行这么多次的点乘操作。因此,随着维数的增大,例如计算三维四维的Perlin噪声,时间会迅速增加。Perlin在2002年介绍了他优化后的一种噪声——Simplex噪声,这种噪声的复杂度是O(n^2),在高纬度上时间优化明显,我们后面会讲到这种噪声。</p><h3 id="一种柏林噪声的二维实现"><a href="#一种柏林噪声的二维实现" class="headerlink" title="一种柏林噪声的二维实现"></a>一种柏林噪声的二维实现</h3><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/%E6%9F%8F%E6%9E%97%E5%99%AA%E5%A3%B0%E7%9A%84%E4%B8%80%E7%A7%8D%E4%BA%8C%E7%BB%B4%E5%AE%9E%E7%8E%B0.jpg" data-fancybox="group" data-caption class="fancybox"><img alt data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/%E6%9F%8F%E6%9E%97%E5%99%AA%E5%A3%B0%E7%9A%84%E4%B8%80%E7%A7%8D%E4%BA%8C%E7%BB%B4%E5%AE%9E%E7%8E%B0.jpg" class="lazyload" title></a></p><p>它的主要代码如下:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">vec2 hash22(vec2 p)</span><br><span class="line">{</span><br><span class="line"> p = vec2( dot(p,vec2(127.1,311.7)),</span><br><span class="line"> dot(p,vec2(269.5,183.3)));</span><br><span class="line"></span><br><span class="line"> return -1.0 + 2.0 * fract(sin(p)*43758.5453123);</span><br><span class="line">}</span><br><span class="line">float perlin_noise(vec2 p)</span><br><span class="line">{</span><br><span class="line"> vec2 pi = floor(p);</span><br><span class="line"> vec2 pf = p - pi;</span><br><span class="line"></span><br><span class="line"> vec2 w = pf * pf * (3.0 - 2.0 * pf);</span><br><span class="line"></span><br><span class="line"> return mix(mix(dot(hash22(pi + vec2(0.0, 0.0)), pf - vec2(0.0, 0.0)), </span><br><span class="line"> dot(hash22(pi + vec2(1.0, 0.0)), pf - vec2(1.0, 0.0)), w.x), </span><br><span class="line"> mix(dot(hash22(pi + vec2(0.0, 1.0)), pf - vec2(0.0, 1.0)), </span><br><span class="line"> dot(hash22(pi + vec2(1.0, 1.0)), pf - vec2(1.0, 1.0)), w.x),</span><br><span class="line"> w.y);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>这里的实现实际是简化版的,我们在算梯度的时候直接取随机值,而没有归一化到单位圆内。<br>上图包含了四种噪声组合,这也是Perlin在1999年的GDC上做演讲时采用的一个示例,不过Perlin的例子是三维的,而且添加了光照等计算。</p><ul><li>左上角的部分。这是最简单的单独的Perlin噪声,它的噪声模拟如下:<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">float noise_itself(vec2 p)</span><br><span class="line">{</span><br><span class="line"> return noise(p * 8.0);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>上面的代码在整个屏幕上模拟了一个8 x 8的网格结构。在绘制时,我们只需要将一个深蓝色乘以噪声即可得到类似的效果。</li></ul><p>单独一个Perlin噪声虽然也有一定用处,但是效果往往很无趣。因此,Perlin指出可以使用不同的函数组合来得到更有意思的结果,这些函数组合通常就是指通过分形叠加(fractal sum),也就是我们之前说的fbm。</p><ul><li>左下角的部分。这个部分使用了fbm进行叠加来形成一个分形噪声。公式如下:<blockquote><p>noise(p)+1/2noise(2p)+1/4noise(4p)+…</p></blockquote></li></ul><p>即每一次噪声的采样频率翻倍,而振幅减少一倍。很多文章错误地把这种计算认为是Perlin噪声,这是不对的。Perlin噪声只是对应了其中每一个octave。代码是:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">float noise_sum(vec2 p)</span><br><span class="line">{</span><br><span class="line"> float f = 0.0;</span><br><span class="line"> p = p * 4.0;</span><br><span class="line"> f += 1.0000 * noise(p); p = 2.0 * p;</span><br><span class="line"> f += 0.5000 * noise(p); p = 2.0 * p;</span><br><span class="line"> f += 0.2500 * noise(p); p = 2.0 * p;</span><br><span class="line"> f += 0.1250 * noise(p); p = 2.0 * p;</span><br><span class="line"> f += 0.0625 * noise(p); p = 2.0 * p;</span><br><span class="line"></span><br><span class="line"> return f;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>上面叠加了5层,并把初始化采样距离设置为4,这都是可以自定义的。这种噪声可以用来模拟石头、山脉这类物体。</p><ul><li>右下角的部分。这一部分只是在上一部分进行了一点修改,对噪声返回值进行了取绝对值操作。它使用的公式如下:<blockquote><p>|noise(p)|+1/2|noise(2p)|+1/4|noise(4p)|+…</p></blockquote></li></ul><p>它对应的代码如下:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">float noise_sum_abs(vec2 p)</span><br><span class="line">{</span><br><span class="line"> float f = 0.0;</span><br><span class="line"> p = p * 7.0;</span><br><span class="line"> f += 1.0000 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.5000 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.2500 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.1250 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.0625 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"></span><br><span class="line"> return f;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>由于进行了绝对值操作,因此会在0值变化处出现不连续性,形成一些尖锐的效果。通过合适的颜色叠加,我们可以用这种噪声来模拟火焰、云朵这些物体。Perlin把这个公式称为turbulence(湍流)。</p><ul><li>右上角的部分。这个部分是在之前turbulence公式的基础上使用了一个关于表面x分量的正弦函数:<blockquote><p>sin(x+|noise(p)|+1/2|noise(2p)|+1/4|noise(4p)|+…)</p></blockquote></li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">float noise_sum_abs_sin(vec2 p)</span><br><span class="line">{</span><br><span class="line"> float f = 0.0;</span><br><span class="line"> p = p * 7.0;</span><br><span class="line"> f += 1.0000 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.5000 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.2500 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.1250 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f += 0.0625 * abs(noise(p)); p = 2.0 * p;</span><br><span class="line"> f = sin(f + p.x/32.0);</span><br><span class="line"></span><br><span class="line"> return f;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>我们可以通过改变x分量前面的系数来控制条纹的疏密。</p><p>以上,我们就演示了基本的Perlin噪声的实现。Perlin在1999年Making Noise的演讲[4]中,还介绍了如何使用噪声来控制纹理动画。他指出,想要一个二维的turbulence纹理动画(例如云、火焰等),我们需要使用三维的噪声,其中第三维对应了时间变量。Shadertoy上有很多这样的例子.</p><h3 id="噪声相关阅读材料"><a href="#噪声相关阅读材料" class="headerlink" title="噪声相关阅读材料"></a>噪声相关阅读材料</h3><ul><li>Perlin噪声</li></ul><ol><li>该文章详细地解释了真正的Perlin噪声以及和fbm的结合:<a href="http://flafla2.github.io/2014/08/09/perlinnoise.html" target="_blank" rel="noopener">http://flafla2.github.io/2014/08/09/perlinnoise.html</a></li><li>2005年的这篇论文 [5]的开头部分也给出了不错的Perlin噪声的解释:<a href="http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf" target="_blank" rel="noopener">http://webstaff.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf</a></li><li>GPU Gems的文章:<a href="http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html" target="_blank" rel="noopener">http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html</a></li><li>GPU Gems2的文章:<a href="http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html" target="_blank" rel="noopener">http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter26.html</a></li><li>大牛scrawk的博客在Unity里实现了GPU Gems里面的方法:<a href="https://scrawkblog.com/2013/05/18/gpu-gems-to-unity-improved-perlin-noise/" target="_blank" rel="noopener">https://scrawkblog.com/2013/05/18/gpu-gems-to-unity-improved-perlin-noise/</a></li></ol><ul><li>Value噪声</li></ul><ol><li>课程:噪声的来源、应用和实现:<a href="http://scratchapixel.com/old/lessons/3d-advanced-lessons/noise-part-1/" target="_blank" rel="noopener">http://scratchapixel.com/old/lessons/3d-advanced-lessons/noise-part-1/</a></li><li>文章:<a href="http://freespace.virgin.net/hugo.elias/models/m_perlin.htm" target="_blank" rel="noopener">http://freespace.virgin.net/hugo.elias/models/m_perlin.htm</a></li></ol><ul><li>Simplex噪声</li></ul><ol><li>文章:三维的Simplex噪声:<a href="http://catlikecoding.com/unity/tutorials/simplex-noise/" target="_blank" rel="noopener">http://catlikecoding.com/unity/tutorials/simplex-noise/</a></li><li>Shadertoy上三维Simplex噪声的实现:<a href="https://www.shadertoy.com/view/XsX3zB和我的https://www.shadertoy.com/view/4sc3z2。" target="_blank" rel="noopener">https://www.shadertoy.com/view/XsX3zB和我的https://www.shadertoy.com/view/4sc3z2。</a></li></ol><ul><li>fbm</li></ul><ol><li>文章:仅fbm:<a href="https://code.google.com/p/fractalterraingeneration/wiki/Fractional_Brownian_Motion" target="_blank" rel="noopener">https://code.google.com/p/fractalterraingeneration/wiki/Fractional_Brownian_Motion</a></li></ol><ul><li>hash</li></ul><ol><li>Shadertoy:不同数据类型组合下的哈希函数的总结:<a href="https://www.shadertoy.com/view/4djSRW" target="_blank" rel="noopener">https://www.shadertoy.com/view/4djSRW</a></li></ol><h3 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h3><ul><li>[1] Perlin K. Course in advanced image synthesis[C]//ACM SIGGRAPH Conference. 1984, 18. </li><li>[2] Perlin K. An image synthesizer[J]. ACM Siggraph Computer Graphics, 1985, 19(3): 287-296. </li><li>[3] Perlin K, Hoffert E M. Hypertexture[C]//ACM SIGGRAPH Computer Graphics. ACM, 1989, 23(3): 253-262. </li><li>[4] Perlin K. Making noise[C]//Proc. of the Game Developer Conference. 1999. </li><li>[5] Gustavson S. Simplex noise demystified[J]. Linköping University, Linköping, Sweden, Research Report, 2005. </li><li>[6] <a href="https://www.cnblogs.com/xiaowangba/p/6314642.html" target="_blank" rel="noopener">https://www.cnblogs.com/xiaowangba/p/6314642.html</a></li></ul><h2 id="MC中的噪声实现和用例"><a href="#MC中的噪声实现和用例" class="headerlink" title="MC中的噪声实现和用例"></a>MC中的噪声实现和用例</h2><p>MC中常用且仅被使用的两种噪声是Perlin噪声和Simplex噪声<br>我们发现,在net.Minecraft.world.gen下有两个与噪声相关的函数,分别是PerlinNoiseGenerator与SimplexNoiseGenerator,他们分别代表了两种不同的梯度噪声模式。</p><h3 id="解析噪声生成函数"><a href="#解析噪声生成函数" class="headerlink" title="解析噪声生成函数"></a>解析噪声生成函数</h3><h3 id="基于噪声函数的区块生成器——NoiseChunkGenerator"><a href="#基于噪声函数的区块生成器——NoiseChunkGenerator" class="headerlink" title="基于噪声函数的区块生成器——NoiseChunkGenerator"></a>基于噪声函数的区块生成器——NoiseChunkGenerator</h3><h1 id="MC生物AI的核心——传感器与感知器"><a href="#MC生物AI的核心——传感器与感知器" class="headerlink" title="MC生物AI的核心——传感器与感知器"></a>MC生物AI的核心——传感器与感知器</h1><h1 id><a href="#" class="headerlink" title></a></h1><p>Editing…</p>]]></content>
<categories>
<category> Java </category>
</categories>
<tags>
<tag> Minecraft </tag>
<tag> 源代码 </tag>
<tag> Java </tag>
<tag> 类 </tag>
<tag> 代码分析 </tag>
<tag> Mod </tag>
</tags>
</entry>
<entry>
<title>计算机网络复习</title>
<link href="/post/9a8cdc59.html"/>
<url>/post/9a8cdc59.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="计算机网络复习课"><a href="#计算机网络复习课" class="headerlink" title="计算机网络复习课"></a>计算机网络复习课</h1><h2 id="第一章-概述"><a href="#第一章-概述" class="headerlink" title="第一章 概述"></a>第一章 概述</h2><p>1.时延问题</p><p>最重要的是传输时延:d = (N+P-1)* L/R</p><p>2.五个部分</p><ul><li>因特网中的概念<ul><li>计算机网络的定义:两台以上具有独立操作系统的计算机通过某些介质连接成的相互共享软硬件资源的集合体。</li><li>因特网的概念</li></ul></li><li>网络结构<ul><li>网络边缘<ul><li>端系统(主机)<ul><li>客户机</li><li>服务器</li></ul></li><li>接入网络<ul><li>家庭接入网络</li><li>企业接入网络</li><li>广域接入网络</li></ul></li><li>物理媒体<ul><li>数字接入线(DSL)</li><li>混合光纤同轴系统(HFC)</li><li>光纤到户(FTTH)</li></ul></li></ul></li><li>网络核心<ul><li>分组交换</li><li>电路交换</li></ul></li></ul></li><li>四种时延</li><li>协议层参考模型</li><li>网络安全</li></ul><h2 id="第二章-应用层"><a href="#第二章-应用层" class="headerlink" title="第二章 应用层"></a>第二章 应用层</h2><h3 id="1-应用层协议原理"><a href="#1-应用层协议原理" class="headerlink" title="1.应用层协议原理"></a>1.应用层协议原理</h3><h4 id="1-1应用体系结构"><a href="#1-1应用体系结构" class="headerlink" title="1.1应用体系结构"></a>1.1应用体系结构</h4><ul><li>客户-服务器</li><li>P2P</li></ul><h4 id="1-2-进程通信"><a href="#1-2-进程通信" class="headerlink" title="1.2 进程通信"></a>1.2 进程通信</h4><h4 id="1-3-应用层传输服务"><a href="#1-3-应用层传输服务" class="headerlink" title="1.3 应用层传输服务"></a>1.3 应用层传输服务</h4><ul><li>数据丢失率</li><li>定时</li><li>带宽和吞吐量</li><li>安全</li></ul><h3 id="2-HTTP协议"><a href="#2-HTTP协议" class="headerlink" title="2.HTTP协议"></a>2.HTTP协议</h3><h4 id="2-1特点"><a href="#2-1特点" class="headerlink" title="2.1特点"></a>2.1特点</h4><h4 id="2-2-分类"><a href="#2-2-分类" class="headerlink" title="2.2 分类"></a>2.2 分类</h4><h4 id="2-3-报文格式和响应状态码"><a href="#2-3-报文格式和响应状态码" class="headerlink" title="2.3 报文格式和响应状态码"></a>2.3 报文格式和响应状态码</h4><h4 id="2-4-Cookies:用户与服务器的交互"><a href="#2-4-Cookies:用户与服务器的交互" class="headerlink" title="2.4 Cookies:用户与服务器的交互"></a>2.4 Cookies:用户与服务器的交互</h4><h4 id="2-5-代理服务器:Web缓存"><a href="#2-5-代理服务器:Web缓存" class="headerlink" title="2.5 代理服务器:Web缓存"></a>2.5 代理服务器:Web缓存</h4><h4 id="2-6-条件GET(首部行)"><a href="#2-6-条件GET(首部行)" class="headerlink" title="2.6 条件GET(首部行)"></a>2.6 条件GET(首部行)</h4><h3 id="3-电子协议"><a href="#3-电子协议" class="headerlink" title="3.电子协议"></a>3.电子协议</h3><h4 id="3-1-SMTP"><a href="#3-1-SMTP" class="headerlink" title="3.1 SMTP"></a>3.1 SMTP</h4><ul><li>特点<ul><li>持久连接</li><li>报文体为7-bit ASCII</li></ul></li><li>与HTTP比较</li><li>邮件报文格式</li></ul><p>####3.2 邮件访问协议</p><ul><li>POP3(不包含状态信息)</li><li>IMAP(跟踪用户状态)</li></ul><h3 id="4-DNS"><a href="#4-DNS" class="headerlink" title="4. DNS"></a>4. DNS</h3><h4 id="4-1-提供服务"><a href="#4-1-提供服务" class="headerlink" title="4.1 提供服务"></a>4.1 提供服务</h4><ul><li>主机名到IP地址的转换</li><li>主机别名</li><li>邮件服务器别名</li><li>负载分配</li></ul><h4 id="4-2-工作机理"><a href="#4-2-工作机理" class="headerlink" title="4.2 工作机理"></a>4.2 工作机理</h4><ul><li>集中式DNS缺点</li><li>DNS分类<ul><li>根DNS服务器</li><li>域顶级DNS服务器</li><li>权威DNS服务器</li><li>本地DNS服务器</li></ul></li><li>DNS查询方法<ul><li>递归查询</li><li>迭代查询</li></ul></li><li>DNS缓存</li></ul><p>####4.3 DNS记录和报文</p><ul><li>RR格式</li><li>DNS报文</li><li>P2P技术</li></ul><h3 id="5-套接字编程"><a href="#5-套接字编程" class="headerlink" title="5.套接字编程"></a>5.套接字编程</h3><ul><li>UDP</li><li>TCP</li></ul><h2 id="第三章-传输层"><a href="#第三章-传输层" class="headerlink" title="第三章 传输层"></a>第三章 传输层</h2><p>重点见pad上的目录</p><h2 id="第四章-网络层"><a href="#第四章-网络层" class="headerlink" title="第四章 网络层"></a>第四章 网络层</h2><p>见思维导图</p><h2 id="第五章-链路层"><a href="#第五章-链路层" class="headerlink" title="第五章 链路层"></a>第五章 链路层</h2>]]></content>
<categories>
<category> 计算机网络 </category>
</categories>
<tags>
<tag> 计算机网络 </tag>
<tag> 复习 </tag>
</tags>
</entry>
<entry>
<title>计算机网络基础</title>
<link href="/post/9ab2931e.html"/>
<url>/post/9ab2931e.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="计算机网络基础"><a href="#计算机网络基础" class="headerlink" title="计算机网络基础"></a>计算机网络基础</h1><h2 id="第一章-计算机网络和因特网"><a href="#第一章-计算机网络和因特网" class="headerlink" title="第一章 计算机网络和因特网"></a>第一章 计算机网络和因特网</h2><h3 id="1-协议的三要素:"><a href="#1-协议的三要素:" class="headerlink" title="1.协议的三要素:"></a>1.协议的三要素:</h3><ul><li>语法</li><li>语义</li><li>同步</li></ul><h3 id="2-网络结构"><a href="#2-网络结构" class="headerlink" title="2.网络结构"></a>2.网络结构</h3><ul><li>网络边缘</li><li>接入网络、物理介质</li><li>网络核心</li></ul><h3 id="3-端系统模型"><a href="#3-端系统模型" class="headerlink" title="3.端系统模型"></a>3.端系统模型</h3><ul><li>客户/服务器模型</li><li>端对端模型<ul><li>bt下载 迅雷</li><li>区块链</li></ul></li></ul><h3 id="4-接入网络"><a href="#4-接入网络" class="headerlink" title="4.接入网络"></a>4.接入网络</h3><h4 id="4-1带宽"><a href="#4-1带宽" class="headerlink" title="4.1带宽"></a>4.1带宽</h4><p>1.带宽表示单位时间内(一般以”秒”为单位)传输数据容量的大小,表示吞吐数据的能力。所以我们一般也将”带宽”成为”数据传输率”</p><p>2.单位</p><p>(1)以字节为单位:Bps,KBps,MBps等</p><p>(2)以比特为单位:bps,Kbps,Mbps等</p><p>换算:</p><p>1B/s = 8b/s(bps)</p><p>1KB/s = 8Kb/s</p><p>1MB/s = 8Mb/s</p><p>平时用bps比较多。</p><h4 id="4-2-数字用户线路(DSL)"><a href="#4-2-数字用户线路(DSL)" class="headerlink" title="4.2 数字用户线路(DSL)"></a>4.2 数字用户线路(DSL)</h4><p>1.用已有的电话线路</p><p>(1)DSL承载的数据进入Internet</p><p>(2)DSL承载的语音进入电话交换网</p><p>2.速率</p><p>(1)上行速率<2.5Mbp</p><p>(2)下行速率<24 Mbp</p><p>3.ADSL:非对称数字用户线路</p><p>主要是下载,对上传的需求不高。</p><h4 id="4-3-电缆接入网络"><a href="#4-3-电缆接入网络" class="headerlink" title="4.3 电缆接入网络"></a>4.3 电缆接入网络</h4><p>1.使用有线电视网接入Internet</p><p>2.HFC:混合光纤同轴电缆</p><h4 id="4-4-光纤到户"><a href="#4-4-光纤到户" class="headerlink" title="4.4 光纤到户"></a>4.4 光纤到户</h4><p>1.把光纤直接拉到家里</p><p>2.ONT:光纤网络端接器(家庭端)</p><p>OLT:光纤网络端接器(电信公司端)</p><h4 id="4-5-接入网络"><a href="#4-5-接入网络" class="headerlink" title="4.5 接入网络"></a>4.5 接入网络</h4><ul><li>家庭网络(家庭路由器)</li><li>企业接入网络(LAN)</li><li>WI-FI无线接入网络</li><li>广域无线接入网络(3G、4G、5G)</li></ul><h4 id="4-6-物理介质"><a href="#4-6-物理介质" class="headerlink" title="4.6 物理介质"></a>4.6 物理介质</h4><p>1.物理链路:传播位(bit)信号</p><p>2.分类:</p><ul><li>导引型媒体<ul><li>双绞线</li><li>同轴电缆</li><li>光纤线缆:<ul><li>单模光纤</li><li>多模光纤</li></ul></li></ul></li><li>非导引型媒体(无限电磁波)<ul><li>地面微波</li><li>局域无限通道(WI-FI)</li><li>广域无限通道(cellular,也就是3G、4G)</li><li>卫星通信</li></ul></li></ul><h3 id="5-网络核心"><a href="#5-网络核心" class="headerlink" title="5.网络核心"></a>5.网络核心</h3><h4 id="5-1-基本原理"><a href="#5-1-基本原理" class="headerlink" title="5.1 基本原理"></a>5.1 基本原理</h4><p>1.电路交换</p><p>2.分组交换</p><h4 id="5-2-电路交换"><a href="#5-2-电路交换" class="headerlink" title="5.2 电路交换"></a>5.2 电路交换</h4><p>1.网络资源(如带宽)被分片,称为多路复用</p><p>2.分片方式</p><ul><li>频分 FDM</li><li>时分 TDM</li></ul><h4 id="5-3-分组交换"><a href="#5-3-分组交换" class="headerlink" title="5.3 分组交换"></a>5.3 分组交换</h4><p>1.统计复用</p><p>2.特点</p><ul><li>资源竞争</li><li>拥塞</li><li>存储转发:分组每次转发1站</li></ul><p>3.分类</p><ul><li>数据报网络</li><li>虚电路网络</li></ul><h4 id="5-4-ISP的结构组成"><a href="#5-4-ISP的结构组成" class="headerlink" title="5.4 ISP的结构组成"></a>5.4 ISP的结构组成</h4><p>1.互联网服务提供商:ISP</p><ol start="2"><li><p>(1)第一层ISP</p></li></ol><p>(2)第二层ISP</p><p>(3)本地ISP</p><h3 id="6-分组交换网络中的延迟、丢失和吞吐量"><a href="#6-分组交换网络中的延迟、丢失和吞吐量" class="headerlink" title="6.分组交换网络中的延迟、丢失和吞吐量"></a>6.分组交换网络中的延迟、丢失和吞吐量</h3><p>####6.1 分组延迟的四种类型</p><p>1.处理时延</p><p>检查错误位</p><p>选择输出链路</p><p>2.排队时延</p><p>等待时间</p><p>拥塞程度</p><p>3.传输时延</p><p>R = 链路带宽(<em>管子直径</em>)</p><p>L = 分组长度</p><p>发送分组比特流的时间 = L/R</p><p>4.传播时延</p><p>d = 物理链路的长度</p><p>s = 介质的信号传播速度(<em>管子直径造成的水流速度</em>)</p><p>传播时延 = d/s</p><h4 id="6-2-总的节点时延"><a href="#6-2-总的节点时延" class="headerlink" title="6.2 总的节点时延"></a>6.2 总的节点时延</h4><p>d(nodal)= d(proc)+ d(queue)+ d(trans)+ d(prop)</p><h4 id="6-3-排队时延的进一步解释"><a href="#6-3-排队时延的进一步解释" class="headerlink" title="6.3 排队时延的进一步解释"></a>6.3 排队时延的进一步解释</h4><p>R = 链路带宽</p><p>L = 分组长度</p><p>a = 平局分组到达率</p><p>流量强度 traffic intensity = La/R</p><ul><li><p>La/R ~ 0</p><p> 平均排队时延极小接近于0</p></li><li><p>La/R -> 1</p><p> 排队时延大幅增大</p></li><li><p>La/R > 1</p><p> 排队时延趋于无穷大</p></li></ul><h4 id="6-4-概念"><a href="#6-4-概念" class="headerlink" title="6.4 概念"></a>6.4 概念</h4><p>1.分组丢失->丢包率</p><p>2.吞吐量:单位时间内整个网络传输数据的速率或分组数(bps)</p><ul><li><p>瞬时吞吐量</p></li><li><p>平均吞吐量</p><p>min{Rs,Rc}</p></li></ul><h3 id="7-协议层及其服务模型"><a href="#7-协议层及其服务模型" class="headerlink" title="7.协议层及其服务模型"></a>7.协议层及其服务模型</h3><h4 id="7-1-ISO-OSI七层参考模型"><a href="#7-1-ISO-OSI七层参考模型" class="headerlink" title="7.1 ISO/OSI七层参考模型"></a>7.1 ISO/OSI七层参考模型</h4><p>| 层号 | 层的名称 | | —- | ———- | | 7 | 应用层 | | 6 | 表示层 | | 5 | 会话层 | | 4 | 传输层 | | 3 | 网络层 | | 2 | 数据链路层 | | 1 | 物理层 |</p><h4 id="7-2-TCP-IP参考模型"><a href="#7-2-TCP-IP参考模型" class="headerlink" title="7.2 TCP/IP参考模型"></a>7.2 TCP/IP参考模型</h4><p>| TCP/IP参考模型1 | TCP/IP参考模型2 | | ————— | ————— | | 应用层 | 应用层 | | 传输层 | 传输层 | | 网络层 | 网络层 | | 网络接口层 | 数据链路层 | | | 物理层 |</p><h4 id="7-3-协议分层与数据"><a href="#7-3-协议分层与数据" class="headerlink" title="7.3 协议分层与数据"></a>7.3 协议分层与数据</h4><p>1.各层发方从上层到下层,收方 从下层到上层传递数据。</p><p>2.发方添加头部信息创建新的数据单元,收方去掉头部。</p><p>3.传递新的数据单元到上层/下层</p><p>4.各层传送不同的协议数据单元PDU</p><h3 id="8-网络安全概述"><a href="#8-网络安全概述" class="headerlink" title="8. 网络安全概述"></a>8. 网络安全概述</h3><h4 id="8-1-攻击威胁下的网络"><a href="#8-1-攻击威胁下的网络" class="headerlink" title="8.1 攻击威胁下的网络"></a>8.1 攻击威胁下的网络</h4><p>1.网络安全问题产生的原因</p><ul><li>网络的开放性</li><li>软硬件/协议设计者的局限</li><li>时代和技术的发展</li></ul><p>2.攻击方式</p><ul><li>被动攻击</li><li>主动攻击</li></ul><h4 id="8-2-网络安全的重要属性"><a href="#8-2-网络安全的重要属性" class="headerlink" title="8.2 网络安全的重要属性"></a>8.2 网络安全的重要属性</h4><p>1.机密性</p><p>2.真实性</p><p>3.完整性</p><p>4.可用性</p><p>5.不可否认性</p><h2 id="第二章-应用层"><a href="#第二章-应用层" class="headerlink" title="第二章 应用层"></a>第二章 应用层</h2><h3 id="1-网络应用程序体系结构"><a href="#1-网络应用程序体系结构" class="headerlink" title="1.网络应用程序体系结构"></a>1.网络应用程序体系结构</h3><h4 id="1-1-客户机-服务器体系结构"><a href="#1-1-客户机-服务器体系结构" class="headerlink" title="1.1 客户机/服务器体系结构"></a>1.1 客户机/服务器体系结构</h4><ul><li>服务器<ul><li>总是打开的</li><li>具有固定的、众所周知的IP地址</li></ul></li><li>客户机<ul><li>可以拥有动态IP地址</li><li>客户机相互之间不直接通信</li></ul></li></ul><h4 id="1-2-P2P体系结构"><a href="#1-2-P2P体系结构" class="headerlink" title="1.2 P2P体系结构"></a>1.2 P2P体系结构</h4><ul><li>没有总是打开的服务器</li><li>任意一对主机直接相互通信</li><li>对等方间歇连接并且可以改变IP地址</li><li>优缺点<ul><li>优点:自扩展性</li><li>缺点:难以管理</li></ul></li></ul><h4 id="1-3-客户机-服务器和P2P混合的体系结构"><a href="#1-3-客户机-服务器和P2P混合的体系结构" class="headerlink" title="1.3 客户机/服务器和P2P混合的体系结构"></a>1.3 客户机/服务器和P2P混合的体系结构</h4><p>举例:</p><ul><li>Napster</li><li>即时讯息(QQ、Wechat)</li></ul><h3 id="2-进程通信"><a href="#2-进程通信" class="headerlink" title="2.进程通信"></a>2.进程通信</h3><h4 id="2-1-通信方式"><a href="#2-1-通信方式" class="headerlink" title="2.1 通信方式"></a>2.1 通信方式</h4><p>(1)同一主机上的两个进程通过内部进程通信机制进行通信</p><p>(2)不同主机上的进程通过交换报文相互通信</p><h4 id="2-2-命名"><a href="#2-2-命名" class="headerlink" title="2.2 命名"></a>2.2 命名</h4><p>(1)客户进程:发起通信的进程</p><p>(2)服务器进程:等待联系的进程</p><p>注意:具有P2P体系结构的应用程序既有客户进程又有服务器进程。</p><h4 id="2-3-进程与计算机网络的接口-套接字"><a href="#2-3-进程与计算机网络的接口-套接字" class="headerlink" title="2.3 进程与计算机网络的接口-套接字"></a>2.3 进程与计算机网络的接口-套接字</h4><p>(1)套接字又叫做应用程序编程接口API</p><p>(2)应用层的进程相关的工作由开发者控制,而套接字以下的工作是由操作系统来完成的。</p><h4 id="2-4-进程寻址"><a href="#2-4-进程寻址" class="headerlink" title="2.4 进程寻址"></a>2.4 进程寻址</h4><p>(1)主机有唯一的32位IP地址</p><p>(2)主机上的进程标识包括IP地址和端口号(因为一台主机上有很多个进程</p><p>(3)常用应用程序的端口号</p><ul><li>Web服务:80</li><li>邮件服务:25</li></ul><h4 id="2-5-应用层协议"><a href="#2-5-应用层协议" class="headerlink" title="2.5 应用层协议"></a>2.5 应用层协议</h4><p>(1)组成</p><ul><li>报文类型</li><li>报文类型的语法</li><li>字段的语义</li><li>进程何时、如何发送报文及对报文进行响应</li></ul><p>(2)分类</p><ul><li>公共领域协议</li><li>专用协议</li></ul><h4 id="2-6-应用需要的服务"><a href="#2-6-应用需要的服务" class="headerlink" title="2.6 应用需要的服务"></a>2.6 应用需要的服务</h4><p>1.数据丢失率</p><p>2.带宽和吞吐量</p><p>3.安全</p><p>4.定时</p><h4 id="2-7-因特网传输协议提供的服务"><a href="#2-7-因特网传输协议提供的服务" class="headerlink" title="2.7 因特网传输协议提供的服务"></a>2.7 因特网传输协议提供的服务</h4><p>1.TCP服务</p><ul><li>面向连接的服务(<em>发送方和接收方都已经准备好了才开始通信</em>)</li><li>可靠的传输服务</li><li>流量控制</li><li>拥塞控制</li><li>没有提供时延保证和最小带宽保证</li></ul><p>2.UDP服务</p><ul><li>无连接的服务(<em>发送方在开始通信前不去询问接收方是否已经准备好</em>)</li><li>不可靠数据传输</li></ul><h4 id="2-8-安全TCP"><a href="#2-8-安全TCP" class="headerlink" title="2.8 安全TCP"></a>2.8 安全TCP</h4><p>1.SSL(Sucurity Socket Layer)</p><ul><li>提供加密的TCP连接</li><li>保证数据完整性</li><li>端点认证</li><li>SSL提供套接字API</li></ul><h3 id="3-HTTP概况"><a href="#3-HTTP概况" class="headerlink" title="3.HTTP概况"></a>3.HTTP概况</h3><h4 id="3-1-概述"><a href="#3-1-概述" class="headerlink" title="3.1 概述"></a>3.1 概述</h4><p>(1)HTTP:超文本传输协议</p><p>(2)Web的应用层协议</p><p>(3)C/S模式</p><h4 id="3-2-Web和HTTP"><a href="#3-2-Web和HTTP" class="headerlink" title="3.2 Web和HTTP"></a>3.2 Web和HTTP</h4><p>(1)网页由许多<strong>对象</strong>组成</p><p>(2)对象就是文件</p><p>(3)多数网页由单个基本HTML文件和若干个所引用的对象构成</p><p>(4)URL:协议+主机名+路径名</p><p>(5)HTTP是无状态协议</p><ul><li>HTTP服务器不维护客户先前的状态信息</li><li>维护状态的协议非常复杂</li></ul><h3 id="4-非持久连接和持久连接"><a href="#4-非持久连接和持久连接" class="headerlink" title="4.非持久连接和持久连接"></a>4.非持久连接和持久连接</h3><h4 id="4-1-非持久HTTP连接"><a href="#4-1-非持久HTTP连接" class="headerlink" title="4.1 非持久HTTP连接"></a>4.1 非持久HTTP连接</h4><p>(1)每个TCP连接上只传送一个对象,下载多个对象需要建立多个TCP连接</p><p>(2)HTTP/1.0使用非持久HTTP连接</p><h4 id="4-2-持久HTTP连接"><a href="#4-2-持久HTTP连接" class="headerlink" title="4.2 持久HTTP连接"></a>4.2 持久HTTP连接</h4><p>(1)一个TCP连接上可以传送多个对象</p><p>(2)HTTP/1.1默认使用持久HTTP连接</p><p>(3)分类</p><ul><li>不带流水线的持久HTTP连接<ul><li>客户先前响应消息收到,才发出新的消息请求</li><li>每个引用对象经历一个RTT</li></ul></li><li>带流水线的持久HTTP连接<ul><li>HTTP/1.1默认使用</li><li>客户遇到1一个引用对象就发送请求对象</li><li>所有引用对象只经历一个RTT</li></ul></li></ul><h4 id="4-3-响应时间模型"><a href="#4-3-响应时间模型" class="headerlink" title="4.3 响应时间模型"></a>4.3 响应时间模型</h4><p>(1)定义往返时间RTT</p><ul><li>一个小分组从客户主机到服务器再到客户主机所花费的时间</li><li>一个RTT用于建立TCP连接</li><li>一个RTT用于HTTP请求/响应消息的交互</li><li>HTML文件传输时间:total = 2RTT + transmit time</li></ul><h3 id="5-HTTP报文格式"><a href="#5-HTTP报文格式" class="headerlink" title="5.HTTP报文格式"></a>5.HTTP报文格式</h3><h4 id="5-1-请求报文"><a href="#5-1-请求报文" class="headerlink" title="5.1 请求报文"></a>5.1 请求报文</h4><p>(1)都是ASCII文本</p><p>(2)</p><p>请求行</p><p>头部行</p><p>回车换行(指示结束)</p><p>(3)</p><p>请求行 :方法 sp URI sp 版本 cr lf</p><p>首部行: 首部字段名 sp 值 cr lf</p><p> 首部字段名 sp 值 cr lf</p><p> 首部字段名 sp 值 cr lf</p><p>空行:cr lf</p><p>实体主体</p><p>(4)请求方法类型</p><ul><li>HTTP/1.0<ul><li>GET</li><li>POST</li><li>HEAD</li></ul></li><li>HTTP/1.1<ul><li>GET,POST,HEAD</li><li>PUT</li><li>DELETE</li></ul></li></ul><p>(5)上载表单(各字段)输入值</p><ul><li>POST方法<ul><li>网页时常包含表单输入</li><li>输入值在请求报文的实体主体中被上载到服务器</li></ul></li><li>URL方法<ul><li>使用GET方法</li><li>表单(各字段)输入值被上载,以URL请求行的字段</li></ul></li></ul><h4 id="5-2-响应报文"><a href="#5-2-响应报文" class="headerlink" title="5.2 响应报文"></a>5.2 响应报文</h4><p>(1)同样是ASCII码</p><p>(2)</p><p>状态行</p><p>首部行</p><p>回车换行</p><p>数据</p><p>(3)HTTP响应的状态码</p><ul><li>200 OK</li><li>301 Moved Permanenly</li><li>400 Bad Request</li><li>404 Not Found</li><li>500 Internal Server Error</li></ul><h3 id="6-用户与服务器交互:Cookies"><a href="#6-用户与服务器交互:Cookies" class="headerlink" title="6.用户与服务器交互:Cookies"></a>6.用户与服务器交互:Cookies</h3><h4 id="6-1-目的"><a href="#6-1-目的" class="headerlink" title="6.1 目的"></a>6.1 目的</h4><p>提高用户和服务器的交互性</p><h4 id="6-2-跟踪用户"><a href="#6-2-跟踪用户" class="headerlink" title="6.2 跟踪用户"></a>6.2 跟踪用户</h4><p>(1)李四的栗子</p><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/cookies%EF%BC%88%E6%9D%8E%E5%9B%9B%EF%BC%89.png" data-fancybox="group" data-caption="cookies(李四)" class="fancybox"><img alt="cookies(李四)" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/cookies%EF%BC%88%E6%9D%8E%E5%9B%9B%EF%BC%89.png" class="lazyload" title="cookies(李四)"></a></p><p>(2)cookies的4个重要方面</p><ul><li>Cookie头部行在HTTP响应消息中</li><li>Cookie头部行在HTTP请求消息中</li><li>Cookie文件保存在用户主机中并被用户浏览器管理</li><li>Cookie也保存在Web站点的后端数据库</li></ul><p>(3)好处</p><ul><li>身份认证</li><li>虚拟购物车</li><li>推荐广告</li><li>用户会话状态</li></ul><p>(4)Cookies和隐私</p><ul><li>cookies允许网站更加了解你</li><li>你可以提供名字和E-mail给网站</li><li>广告公司通过网站获得信息</li><li>cookie不适合游动用户</li></ul><h3 id="7-Web缓存(代理服务器)"><a href="#7-Web缓存(代理服务器)" class="headerlink" title="7. Web缓存(代理服务器)"></a>7. Web缓存(代理服务器)</h3><h4 id="7-1原理"><a href="#7-1原理" class="headerlink" title="7.1原理"></a>7.1原理</h4><p>(1)流程</p><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/Web%E7%BC%93%E5%AD%98%E5%99%A8.png" data-fancybox="group" data-caption="Web缓存器" class="fancybox"><img alt="Web缓存器" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/Web%E7%BC%93%E5%AD%98%E5%99%A8.png" class="lazyload" title="Web缓存器"></a></p><p>(2)缓存器既是服务器又是客户机</p><h4 id="7-2-好处"><a href="#7-2-好处" class="headerlink" title="7.2 好处"></a>7.2 好处</h4><ul><li>减少客户机请求的响应时间</li><li>减少内部网络与接入链路上的通信量</li><li>能从整体上大大降低因特网上的Web流量</li></ul><h4 id="7-3-缓存器举例"><a href="#7-3-缓存器举例" class="headerlink" title="7.3 缓存器举例"></a>7.3 缓存器举例</h4><ul><li>增加接入链路的带宽(<em>成本高昂</em>)</li><li>安装缓存服务器</li></ul><h4 id="7-4-条件GET方法"><a href="#7-4-条件GET方法" class="headerlink" title="7.4 条件GET方法"></a>7.4 条件GET方法</h4><ul><li>目的:证实缓存器中的对象是否为最新</li><li>验证<ul><li>缓存器:在请求报文中包含对象最后修改时间</li><li>服务器:如果对象是最新的,则响应报文中不包含对象</li></ul></li><li>图示</li></ul><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E6%9D%A1%E4%BB%B6Get%E6%96%B9%E6%B3%95.png" data-fancybox="group" data-caption="条件Get方法" class="fancybox"><img alt="条件Get方法" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E6%9D%A1%E4%BB%B6Get%E6%96%B9%E6%B3%95.png" class="lazyload" title="条件Get方法"></a></p><h3 id="8-文件传输协议-FTP"><a href="#8-文件传输协议-FTP" class="headerlink" title="8. 文件传输协议 FTP"></a>8. 文件传输协议 FTP</h3><p>(1)client/server模式</p><p>(2)</p><p>控制连接端口号是21</p><p>数据连接端口号是20</p><p>(3)流程</p><p>(4)带外(HTTP是带内)</p><p>(5)无状态(HTTP是有状态)</p><p>(6)常见命令</p><p>(7)常见应答</p><p>(8)数据连接建立模式</p><ul><li>主动模式(服务器去找客户端)</li><li>被动模式(客户端去找服务器)</li></ul><p>(9)数据传输的模式</p><ul><li>ASCII模式</li><li>二进制模式</li></ul><h3 id="9-SMTP协议"><a href="#9-SMTP协议" class="headerlink" title="9. SMTP协议"></a>9. SMTP协议</h3><p>用于电子邮件</p><p>####9.1 三个主要组成部分</p><ul><li>用户代理</li><li>邮件协议</li><li>邮件服务器</li></ul><h4 id="9-2-用户代理"><a href="#9-2-用户代理" class="headerlink" title="9.2 用户代理"></a>9.2 用户代理</h4><ul><li>允许用户阅读、回复、转发、保存、编辑邮件消息</li><li>发送/接收邮件消息到/从服务器</li><li>运行邮件协议</li></ul><h4 id="9-3-邮件服务器"><a href="#9-3-邮件服务器" class="headerlink" title="9.3 邮件服务器"></a>9.3 邮件服务器</h4><ul><li>用<em>邮箱</em>存放用户接收的邮件消息</li><li>外出报文队列</li><li>运行邮件协议</li></ul><h4 id="9-4-邮件协议"><a href="#9-4-邮件协议" class="headerlink" title="9.4 邮件协议"></a>9.4 邮件协议</h4><ul><li>邮件发送协议SMTP<ul><li>服务器端口号:25</li><li>直接传送:发送服务器直接到接收服务器</li><li>握手->传输邮件消息->结束</li><li>命令和应答都是ASCII码</li><li>邮件消息必须是7-bit ASCII</li></ul></li><li>邮件接收协议</li><li>与HTTP的比较<ul><li>HTTP是拉协议,SMTP是推协议</li><li>都有ASCII命令/应答交互,状态码</li></ul></li></ul><h3 id="10-邮件报文格式和MIME"><a href="#10-邮件报文格式和MIME" class="headerlink" title="10.邮件报文格式和MIME"></a>10.邮件报文格式和MIME</h3><h4 id="10-1-邮件消息的格式"><a href="#10-1-邮件消息的格式" class="headerlink" title="10.1 邮件消息的格式"></a>10.1 邮件消息的格式</h4><ul><li>信头-头部行<ul><li>TO</li><li>FROM</li><li>Subject</li></ul></li><li>空行</li><li>信体</li></ul><h4 id="10-2-多媒体扩展MIME"><a href="#10-2-多媒体扩展MIME" class="headerlink" title="10.2 多媒体扩展MIME"></a>10.2 多媒体扩展MIME</h4><p>(1)多用途因特网邮件扩展</p><p>(2)还可以发音频、文件等</p><p>(3)通过添加额外的头部行来实现</p><ul><li>mine版本</li><li>同来编码数据的方法</li><li>类型名,子类型名,参数声明</li></ul><h4 id="10-3-示例:使用SMTP发送带头部的电子邮件"><a href="#10-3-示例:使用SMTP发送带头部的电子邮件" class="headerlink" title="10.3 示例:使用SMTP发送带头部的电子邮件"></a>10.3 示例:使用SMTP发送带头部的电子邮件</h4><h3 id="11-邮件访问协议"><a href="#11-邮件访问协议" class="headerlink" title="11.邮件访问协议"></a>11.邮件访问协议</h3><ul><li>POP协议</li><li>IMAP</li><li>HTTP</li></ul><h4 id="11-1POP3协议"><a href="#11-1POP3协议" class="headerlink" title="11.1POP3协议"></a>11.1POP3协议</h4><ul><li>授权<ul><li>客户端命令<ul><li>user username</li><li>pass password</li></ul></li><li>服务器响应<ul><li>+OK</li><li>-ERR</li></ul></li></ul></li><li>事务处理<ul><li>客户端命令<ul><li>list</li><li>retr</li><li>dele</li><li>quit</li></ul></li></ul></li><li>更新<a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/POP3.png" data-fancybox="group" data-caption="POP3" class="fancybox"><img alt="POP3" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/POP3.png" class="lazyload" title="POP3"></a></li></ul><h4 id="11-2-POP3和IMAP"><a href="#11-2-POP3和IMAP" class="headerlink" title="11.2 POP3和IMAP"></a>11.2 POP3和IMAP</h4><p>POP3:</p><ul><li>POP3的会话是无状态的</li><li>“Download and keep”</li></ul><p>IMAP:</p><ul><li>保存所有邮件消息在一个位置:服务器</li><li>允许用户在服务器的各文件夹中管理邮件消息</li><li>IMAP维护用户会话的状态信息</li></ul><h3 id="12-DNS体系介绍"><a href="#12-DNS体系介绍" class="headerlink" title="12.DNS体系介绍"></a>12.DNS体系介绍</h3><p>DNS:域名系统</p><p>IP地址:数字</p><p>主机名:用于人记忆方便</p><p>要在IP地址与主机名之间进行转换</p><h4 id="12-1-DNS服务器的功能"><a href="#12-1-DNS服务器的功能" class="headerlink" title="12.1 DNS服务器的功能"></a>12.1 DNS服务器的功能</h4><ul><li>主机名到IP地址的转换</li><li>主机别名</li><li>邮件服务器别名</li><li>负载分配</li></ul><h4 id="12-2-DNS特点"><a href="#12-2-DNS特点" class="headerlink" title="12.2 DNS特点"></a>12.2 DNS特点</h4><ul><li>分布式数据库</li><li>应用层协议</li></ul><h4 id="12-3-体系结构"><a href="#12-3-体系结构" class="headerlink" title="12.3 体系结构"></a>12.3 体系结构</h4><ul><li>根域名服务器</li><li>顶级域名服务器<ul><li>com, org,net,edu</li><li>uk,fr,jp,cn</li></ul></li><li>权威域名服务器</li><li>本地DNS服务器(严格来说不属于体系结构中的)</li></ul><h3 id="13-DNS工作机理"><a href="#13-DNS工作机理" class="headerlink" title="13.DNS工作机理"></a>13.DNS工作机理</h3><ul><li>递归查询<ul><li>根域名服务器负担较重</li></ul></li></ul><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E9%80%92%E5%BD%92%E6%9F%A5%E8%AF%A2.png" data-fancybox="group" data-caption="递归查询" class="fancybox"><img alt="递归查询" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E9%80%92%E5%BD%92%E6%9F%A5%E8%AF%A2.png" class="lazyload" title="递归查询"></a></p><ul><li>迭代查询</li></ul><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E8%BF%AD%E4%BB%A3%E6%9F%A5%E8%AF%A2.png" data-fancybox="group" data-caption="迭代查询" class="fancybox"><img alt="迭代查询" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E8%BF%AD%E4%BB%A3%E6%9F%A5%E8%AF%A2.png" class="lazyload" title="迭代查询"></a></p><h4 id="13-1-DNS缓存和权威DNS记录更新"><a href="#13-1-DNS缓存和权威DNS记录更新" class="headerlink" title="13.1 DNS缓存和权威DNS记录更新"></a>13.1 DNS缓存和权威DNS记录更新</h4><ul><li>一旦名字服务器获得DNS映射,它将缓存该映射到局部内存</li><li>TTL后才丢弃</li><li>缓存的条目可能已经过期</li></ul><h4 id="13-2-DNS记录"><a href="#13-2-DNS记录" class="headerlink" title="13.2 DNS记录"></a>13.2 DNS记录</h4><p>DNS:存储资源记录(RR,Resource Records)的分布式数据库</p><p>RR格式:(name,value,type,TTL)</p><ul><li>Type = A<ul><li>name = 主机名</li><li>value = IP地址</li></ul></li><li>Type = CNAME<ul><li>name = 主机别名</li><li>value = 真实的规范主机名</li></ul></li><li>Type = NS(name server)<ul><li>name = 域名</li><li>value = 该域权威名字服务器的主机名</li></ul></li><li>Type = MX(mail exchange)<ul><li>name = 邮件服务器的主机别名</li><li>value = 邮件服务器的真实规范主机名</li></ul></li></ul><h4 id="13-3-DNS协议,消息"><a href="#13-3-DNS协议,消息" class="headerlink" title="13.3 DNS协议,消息"></a>13.3 DNS协议,消息</h4><ul><li>DNS协议的报文格式(发送协议和接收协议格式一样)</li><li>格式</li></ul><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/DNS%E5%8D%8F%E8%AE%AE.png" data-fancybox="group" data-caption="DNS协议" class="fancybox"><img alt="DNS协议" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/DNS%E5%8D%8F%E8%AE%AE.png" class="lazyload" title="DNS协议"></a></p><h4 id="13-4-在DNS数据库中插入记录"><a href="#13-4-在DNS数据库中插入记录" class="headerlink" title="13.4 在DNS数据库中插入记录"></a>13.4 在DNS数据库中插入记录</h4><ul><li>NS</li><li>A(网站)</li></ul><h4 id="13-5-DNS安全问题"><a href="#13-5-DNS安全问题" class="headerlink" title="13.5 DNS安全问题"></a>13.5 DNS安全问题</h4><ul><li>DDos</li><li>DNS amplification attacks</li><li>个人用户安全问题</li></ul><h3 id="14-P2P应用(了解即可)"><a href="#14-P2P应用(了解即可)" class="headerlink" title="14. P2P应用(了解即可)"></a>14. P2P应用(了解即可)</h3><h4 id="14-1-分类"><a href="#14-1-分类" class="headerlink" title="14.1 分类"></a>14.1 分类</h4><ul><li>纯P2P架构</li><li>集中式目录架构</li></ul><h4 id="14-2-P2P技术"><a href="#14-2-P2P技术" class="headerlink" title="14.2 P2P技术"></a>14.2 P2P技术</h4><ul><li>查询洪泛</li><li>KaZaA</li><li>P2P文件分发-BitTorrent<ul><li>追踪器tracker</li><li>请求文件块</li><li>发送文件块:tit-for-tat(一报还一报)</li></ul></li><li>DHT:一个分布式的P2P数据库<ul><li>键值对</li><li>一个对等方利用key来查询DHT,返回匹配的value</li><li>对等方还可以插入(key,value)对</li><li>如何分配键值对给对等方?<ul><li>把每个key转化成一个整数</li><li>把每个对等方分配一个整数标识符</li><li>把键值对分配给离key最近的那个对等方<ul><li>标识符由n比特构成</li><li>需要每个key也在同样的范围内</li><li>key = hash(”Led Zeppelin IV”)</li><li>直接后继</li></ul></li></ul></li><li>查询复杂度是O(n)</li></ul></li></ul><ul><li>带捷径的环形DHT<ul><li>查询复杂度是O(log N)</li></ul></li></ul><h3 id="15-TCP和UDP套接字编程"><a href="#15-TCP和UDP套接字编程" class="headerlink" title="15. TCP和UDP套接字编程"></a>15. TCP和UDP套接字编程</h3><ul><li>socket API<ul><li>TCP编程</li><li>UDP编程</li></ul></li></ul><h2 id="第三章-运输层"><a href="#第三章-运输层" class="headerlink" title="第三章 运输层"></a>第三章 运输层</h2><h3 id="1-传输层服务"><a href="#1-传输层服务" class="headerlink" title="1. 传输层服务"></a>1. 传输层服务</h3><p>在两个不同的主机上运行的应用程序之间提供逻辑通信</p><p>####1.1传输层协议运行在端系统</p><ul><li>发送方:将应用程序报文分成数据段传递给网络层</li><li>接收方:将数据段重新组装成报文传递给应用层</li></ul><h4 id="1-2-Internet传输层协议"><a href="#1-2-Internet传输层协议" class="headerlink" title="1.2 Internet传输层协议"></a>1.2 Internet传输层协议</h4><ul><li>TCP</li><li>UDP</li></ul><h4 id="1-3-传输层和网络层"><a href="#1-3-传输层和网络层" class="headerlink" title="1.3 传输层和网络层"></a>1.3 传输层和网络层</h4><ul><li>网络层:两个主机之间的逻辑通信</li><li>传输层:两个进程之间的逻辑通信</li></ul><h3 id="2-多路复用和多路分解"><a href="#2-多路复用和多路分解" class="headerlink" title="2. 多路复用和多路分解"></a>2. 多路复用和多路分解</h3><p>(1)<a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8%E4%B8%8E%E5%A4%9A%E8%B7%AF%E5%88%86%E8%A7%A3.png" data-fancybox="group" data-caption="多路复用与多路分解" class="fancybox"><img alt="多路复用与多路分解" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E5%A4%9A%E8%B7%AF%E5%A4%8D%E7%94%A8%E4%B8%8E%E5%A4%9A%E8%B7%AF%E5%88%86%E8%A7%A3.png" class="lazyload" title="多路复用与多路分解"></a></p><p>(2)</p><ul><li>在接收主机多路分解</li><li>在发送主机多路复用</li></ul><h4 id="2-1-无连接多路分解"><a href="#2-1-无连接多路分解" class="headerlink" title="2.1 无连接多路分解"></a>2.1 无连接多路分解</h4><ul><li>用端口号创建套接字<ul><li>UDP 套接字由两个因素指定:目的IP地址, 目的端口号</li></ul></li><li>当主机收到UDP数据段<ul><li>检查数据段中的目的端口号</li><li>用端口号指示UDP数据段属于哪个套接字</li></ul></li><li>具有不同的源IP地址且/或源端口号,但具有相同的目的IP地址和目的端口号的IP数据报指向同样的套接字</li></ul><h4 id="2-2-面向连接的多路分解"><a href="#2-2-面向连接的多路分解" class="headerlink" title="2.2 面向连接的多路分解"></a>2.2 面向连接的多路分解</h4><p>(1)TCP套接字由4部分指定</p><ul><li>源IP地址</li><li>源端口号</li><li>目的IP地址</li><li>目的端口号</li></ul><p>接收主机使用所有四个值将数据段定位到合适的套接字</p><p>(2)非持久HTTP将对每个请求有一个不同的套接字</p><h3 id="3-无连接传输:UDP"><a href="#3-无连接传输:UDP" class="headerlink" title="3. 无连接传输:UDP"></a>3. 无连接传输:UDP</h3><h4 id="3-1-特点"><a href="#3-1-特点" class="headerlink" title="3.1 特点"></a>3.1 特点</h4><ul><li>无修饰</li><li>不加渲染</li><li>尽最大努力</li><li>无连接(没有握手)</li></ul><h4 id="3-2-优点"><a href="#3-2-优点" class="headerlink" title="3.2 优点"></a>3.2 优点</h4><ul><li><p>无连接:发送数据之前不需要建立连接</p></li><li><p>尽最大努力:不保证可靠交付,也不使用拥塞控制(很符合多媒体通信的要求)</p></li><li><p>支持一对一、一对多、多对一、多对多的交互通信</p></li><li><p>首部开销小,只有8个字节</p></li><li><p><strong>面向报文</strong></p><ul><li>发送发UDP对应用程序交下来的报文,在添加首部后就向下交付IP层</li><li>UDP对应用层发下来的报文,既不合并,也不拆分,而是保留这些报文的边界。</li><li>应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文</li><li>接收方UDP对IP层交上来的UDP用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。</li></ul><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/UDP.png" data-fancybox="group" data-caption="UDP" class="fancybox"><img alt="UDP" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/UDP.png" class="lazyload" title="UDP"></a></p></li></ul><h4 id="3-3-用户数据报UDP的格式"><a href="#3-3-用户数据报UDP的格式" class="headerlink" title="3.3 用户数据报UDP的格式"></a>3.3 用户数据报UDP的格式</h4><p>(1)用户数据报</p><ul><li>数据字段</li><li>首部字段</li></ul><p>(2)首部字段</p><p>源端口 目的端口 长度 检验和</p><p>(2bit)(2bit)(2bit)(2bit)</p><h4 id="3-4-校验和"><a href="#3-4-校验和" class="headerlink" title="3.4 校验和"></a>3.4 校验和</h4><p>(1)在计算校验和时,临时把伪首部和UDP用户数据报连接在一起。伪首部仅仅是为了计算校验和。</p><p>![屏幕快照 2019-06-18 下午3.26.03](/Users/chenxiaoyu/Desktop/计网复习/PPT里的图片/屏幕快照 2019-06-18 下午3.26.03.png)</p><p>(2)差错检测流程图</p><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E5%B7%AE%E9%94%99%E6%A3%80%E9%AA%8C.png" data-fancybox="group" data-caption="差错检验" class="fancybox"><img alt="差错检验" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E5%B7%AE%E9%94%99%E6%A3%80%E9%AA%8C.png" class="lazyload" title="差错检验"></a></p><p>(3)算法</p><ul><li>发送方<ul><li>将数据段看成16bit的整数序列,校验和:数据段内容相加(1的补码和),发送者将校验值放入UDP的校验和域</li></ul></li><li>接收方<ul><li>计算接收到数据段的校验和,检查计算的校验和是否等于校验和域中的值</li><li>但是可能是错误的</li></ul></li></ul><p>(4)例子![屏幕快照 2019-06-18 下午3.28.36](/Users/chenxiaoyu/Desktop/计网复习/PPT里的图片/屏幕快照 2019-06-18 下午3.28.36.png)</p><p>求和->回卷->变反->得到校验和</p><p>通过校验和来检测差错</p><h3 id="4-可靠数据传输原理"><a href="#4-可靠数据传输原理" class="headerlink" title="4. 可靠数据传输原理"></a>4. 可靠数据传输原理</h3><ul><li>首部字段Rdt1.0<ul><li>在完美可靠的信道上</li><li>发送方、接收方分离的FSMs</li></ul></li><li>Rdt2.0<ul><li>具有bit错误的信道<ul><li>ACKs</li><li>NAKs</li></ul></li><li>新机制<ul><li>差错检测</li><li>接收方反馈</li></ul></li><li>停-等协议</li><li>致命缺陷——发送方并不知道接收方发生了什么<ul><li>发送方给每个分组加一个序号</li><li>在ACK/NAK混淆时发送方重发当前分组</li><li>接收方丢弃重复的分组(并不向上传递)</li></ul></li></ul></li><li>Rdt2.1<ul><li>加入序列号</li><li>状态加倍</li></ul></li><li>Rdt2.2<ul><li>不要NAK</li><li>发送方收到重复ACK将导致和NAK一样的处理</li></ul></li><li>Rdt3.0<ul><li>具有出错和丢失</li><li>加入定时器</li><li>能工作但是性能很差(因为停等协议)</li></ul></li><li>流水线技术<ul><li>发送方允许发送多个”在路上的”,还没有确认的报文</li><li>序号数目的范围必须增加</li><li>在发送方/接收方必须有缓冲区</li><li>增加了利用率</li><li>两个通用模式<ul><li>go-Back-N</li><li>选择重传</li></ul></li></ul></li></ul><h3 id="5-面向连接传输:TCP"><a href="#5-面向连接传输:TCP" class="headerlink" title="5. 面向连接传输:TCP"></a>5. 面向连接传输:TCP</h3><h3 id="6-拥塞控制原理"><a href="#6-拥塞控制原理" class="headerlink" title="6. 拥塞控制原理"></a>6. 拥塞控制原理</h3><h3 id="7-TCP拥塞控制"><a href="#7-TCP拥塞控制" class="headerlink" title="7. TCP拥塞控制"></a>7. TCP拥塞控制</h3><h2 id="第四章-网络层"><a href="#第四章-网络层" class="headerlink" title="第四章 网络层"></a>第四章 网络层</h2><h3 id="4-1-引言"><a href="#4-1-引言" class="headerlink" title="4.1 引言"></a>4.1 引言</h3><h4 id="1-网络层提供的功能"><a href="#1-网络层提供的功能" class="headerlink" title="1.网络层提供的功能"></a>1.网络层提供的功能</h4><ul><li>发送方主机传输报文段到接收方主机</li><li>发送方主机封装报文段为数据报</li><li>接收方主机递交报文段给传输层</li><li>在每个主机、路由器上都需要运行网络层协议</li><li>路由器会检查通过它的所有IP数据报的头部字段,然后根据目的IP地址对数据报进行转发</li></ul><h4 id="2-主要功能"><a href="#2-主要功能" class="headerlink" title="2.主要功能"></a>2.主要功能</h4><ul><li>转发:将分组从路由器的输入端口转移到正确的路由器输出端口</li><li>路由:确定分组从发送方传输到接收方(目的主机)所经过的路径(或路由)</li></ul><p>路由是全局概念,转发是局部的。</p><h4 id="3-连接建立"><a href="#3-连接建立" class="headerlink" title="3.连接建立"></a>3.连接建立</h4><h4 id="4-网络层的服务模型"><a href="#4-网络层的服务模型" class="headerlink" title="4.网络层的服务模型"></a>4.网络层的服务模型</h4><p>(1)网络层可能提供的服务</p><ul><li>确保交付:确保分组到达目的地。</li><li>具有时延上界的确保交付:主机到主机的时延。</li><li>有序分组交付:按发送顺序到达。</li><li>确保最小带宽:当发送主机以低于特定比特率的速率发送比特,分组不会丢失,在一定时延到达。</li><li>确保最大时延抖动:发送方发送两个连续分组的时间间隔与接收到的间隔相同。</li></ul><p>(2)因特网的网络层提供的服务</p><ul><li>单一服务,即尽力而为服务(best-effort service) 。</li><li>分组间的定时不能被保证;</li><li>分组的接收顺序与发送顺序不一定相同;</li><li>传送的分组不能保证最终交付,即网络可能未向目的地交付分组。</li></ul><h3 id="4-2-虚电路和数据报网络"><a href="#4-2-虚电路和数据报网络" class="headerlink" title="4.2 虚电路和数据报网络"></a>4.2 虚电路和数据报网络</h3><h4 id="1-概述"><a href="#1-概述" class="headerlink" title="1.概述"></a>1.概述</h4><ul><li>数据报——无连接服务</li><li>虚电路——连接服务</li></ul><p>只提供两种服务之一,不会同时提供。</p><ul><li>传输层:面向连接服务在网络边缘的端系统中实现</li><li>网络层:面向连接服务在端系统及网络核心的路由器中实现</li></ul><h4 id="2-虚电路"><a href="#2-虚电路" class="headerlink" title="2.虚电路"></a>2.虚电路</h4><ul><li>源主机-目的主机路径的行为类似于电话网络的行为</li><li>一条虚电路包括:<ul><li>一条从发送方到接收方的路径</li><li>VC号,沿路径的每条链路都有一个VC号</li><li>沿路径的每个路由器上都有转发表条目</li></ul></li><li>虚电路的信令协议<ul><li>建立</li><li>维护</li><li>拆除</li></ul></li></ul><h4 id="4-数据报网络(现在用)"><a href="#4-数据报网络(现在用)" class="headerlink" title="4. 数据报网络(现在用)"></a>4. 数据报网络(现在用)</h4><p>(1)特点</p><ul><li>在网络层无呼叫的过程</li><li>路由器:不需要维护端到端连接的状态</li><li>没有网络等级的”连接”的概念</li><li>使用目的主机的地址进行分组转发</li></ul><p>(2)数据报转发表</p><p><a href="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E6%95%B0%E6%8D%AE%E6%8A%A5%E8%BD%AC%E5%8F%91%E8%A1%A8.png" data-fancybox="group" data-caption="数据报转发表" class="fancybox"><img alt="数据报转发表" data-src="/Users/chenxiaoyu/Desktop/%E8%AE%A1%E7%BD%91%E5%A4%8D%E4%B9%A0/PPT%E9%87%8C%E7%9A%84%E5%9B%BE%E7%89%87/%E6%95%B0%E6%8D%AE%E6%8A%A5%E8%BD%AC%E5%8F%91%E8%A1%A8.png" class="lazyload" title="数据报转发表"></a></p><p>(3)最长前缀匹配</p><p>对于给定的目的地址,使用最长地址前缀匹配来完成输出端口的查找。</p><p>(4)路由器查表方法</p><p>用目的地址前缀与转发表的前缀匹配</p><ul><li>存在匹配:向对应链路转发</li><li>不存在匹配:选择”其他”项对应的链路转发</li><li>存在多个匹配:”最长前缀匹配规则”</li></ul><p>(5)特点</p><ul><li>虚电路:<ul><li>网络功能复杂</li><li>端系统设备简单</li><li>e.g.ATM</li></ul></li><li>数据报:<ul><li>网络层服务模型简单</li><li>端系统功能复杂</li><li>提供的服务保证最少</li><li>e.g.因特网</li></ul></li></ul><h3 id="4-3-路由器的工作原理"><a href="#4-3-路由器的工作原理" class="headerlink" title="4.3 路由器的工作原理"></a>4.3 路由器的工作原理</h3><h4 id="1-路由器的核心功能"><a href="#1-路由器的核心功能" class="headerlink" title="1.路由器的核心功能"></a>1.路由器的核心功能</h4><ul><li>运行路由算法/协议</li><li>将分组从路由器的输入链路传送到正确的输出链路</li></ul><h4 id="2-路由器的体系结构"><a href="#2-路由器的体系结构" class="headerlink" title="2.路由器的体系结构"></a>2.路由器的体系结构</h4><ul><li>输入端口<ul><li>线性端接模块</li><li>数据链路处理模块</li><li>查找与转发模块</li></ul></li><li>输出端口</li><li>交换结构</li><li>选路处理器</li></ul><h3 id="4-4-IP协议(重点)"><a href="#4-4-IP协议(重点)" class="headerlink" title="4.4 IP协议(重点)"></a>4.4 IP协议(重点)</h3><h3 id="4-5-路由算法(重点难点)"><a href="#4-5-路由算法(重点难点)" class="headerlink" title="4.5 路由算法(重点难点)"></a>4.5 路由算法(重点难点)</h3><h3 id="4-6-因特网中的路由协议"><a href="#4-6-因特网中的路由协议" class="headerlink" title="4.6 因特网中的路由协议"></a>4.6 因特网中的路由协议</h3>]]></content>
<categories>
<category> 计算机网络 </category>
</categories>
<tags>
<tag> 计算机网络 </tag>
<tag> 复习 </tag>
</tags>
</entry>
<entry>
<title>ZUC算法安全性讨论</title>
<link href="/post/31f81037.html"/>
<url>/post/31f81037.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="安全性讨论"><a href="#安全性讨论" class="headerlink" title="安全性讨论"></a>安全性讨论</h1><h2 id="ZUC算法安全性分析的历史"><a href="#ZUC算法安全性分析的历史" class="headerlink" title="ZUC算法安全性分析的历史"></a>ZUC算法安全性分析的历史</h2><ul><li>ZUC算法的安全性分析是密码分析中非常热门的问题。目前,针对ZUC算法主要的安全性分析结果如下:</li></ul><blockquote><p>在第一届ZUC国际研讨会上,丁林等人在文献[1]中应用求解特殊的非线性方程思想对ZUC1.4算法提出了猜测决定攻击,计算复杂度是2403,并需要9个密钥字。</p></blockquote><blockquote><p>011年,周春芳等人针对ZUCv1.5构造了一条轮数为24的选择IV差分传递链,由于完整的ZUCv1.5的初始化轮数为33,因此选择IV差分攻击对ZUC算法的安全性不会构成威胁。 2013年,文献[2]将ZUC算法中基于32比特字的非线性函数转变成基于16比特半字的非线性函数,并对ZUC算法提出了基于16比特半字的猜测决定攻击,这种条件下,计算复杂度是2392,需要9个32比特的密钥字。</p></blockquote><blockquote><p>2014年,文献[3]指出嵌入式设备执行ZUC加密运算时侧信道信息泄露等问题,并提出了一种基于傅里叶变换的侧信道频域攻击,实验证明该攻击比时域攻击更加有效。</p></blockquote><ul><li>本文利用线性区分攻击方法评估ZUC算法的安全性。线性区分攻击分析方法[4-5]通过对密码算法的非线性部分进行线性逼近,获得只有输出密钥流的线性区分器,以区分真正的随机序列。该方法已经成为判断密码性质好坏的安全标准。因此一个好的序列密码算法应该可以抵抗线性区分攻击。</li></ul><h2 id="线性区分攻击原理"><a href="#线性区分攻击原理" class="headerlink" title="线性区分攻击原理"></a>线性区分攻击原理</h2><ul><li>2002年Coppersmith等专家提出“区分攻击(Distinguishing attack)”,其目的是判断生成的密钥流序列是否是真随机序列。当为密钥流生成器建立了区分器,并输入一断二进制序列时,会产生两个回答中的一个,这两个回答分别是“该序列是由密钥流生成器生成的”和“该序列是真随机序列”。事实上,该方法并不是一种攻击方式,而是一种判定序列密码性质好坏的安全标准。区分攻击的关键是构造区分器。构造区分器的一个基本思想是对非线性操作部分用一种“特殊路径”进行线性逼近,线性逼近的结果是获得只含有密钥流符号的方程。线性区分攻击吸收了线性分析[6-7]及区分攻击的思想,该攻击方法主要基于下述定义及定理。</li></ul><h3 id="相关定义"><a href="#相关定义" class="headerlink" title="相关定义"></a>相关定义</h3><ul><li>掩码技术是将输入数据和每个中间结果都用随机数隐藏起来;通常使用一串二进制字段对目标字段进行异或运算来屏蔽一些信息。即函数<code>f:Fn 2→Fm 2,n,m</code>是正整数。线性输入掩码<code>Λ∈Fn 2</code>,线性输出掩码<code>Γ∈Fm 2</code>。满足<code>Γα·x=Γ·αx,Γα-1·x=Γ·α-1x</code>。则存在这样的线性逼近关系</li></ul><blockquote><p>Γ·F(x)=Λ·x,x∈Fn 2</p></blockquote><p>其中“·”乘法为向量内积。</p><ul><li>定理1(堆积引理) 设Xi1,…,Xik是独立的随机变量,ξi1i2…ik表示随机变量Xi1⊕Xi2⊕…⊕Xik的偏差,则εi1i2…ik=2k-1∏<em>(j=1)^k▒ε</em>(i_j ) </li><li>定理2若区分器偏偏差ε=2Pr(D)-1,则区分攻击的区分优势满足Adv(D)=2Φ((ε√N)/2)-1,其中Φ为标准正态分布,N为区分攻击所需要的密钥流比特。</li></ul><h2 id="对ZUC算法的线性区分攻击-8"><a href="#对ZUC算法的线性区分攻击-8" class="headerlink" title="对ZUC算法的线性区分攻击[8]"></a>对ZUC算法的线性区分攻击[8]</h2><blockquote><p>对ZUC算法的线性区分攻击主要有以下3个步骤。</p></blockquote><ul><li>步骤1 将密钥流生成器KG划分为线性部分和非线性部分。线性部分的线性定义如下</li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ϕ(s,t)=⊕¦jcjst=0,cj∈GF(2)</span><br></pre></td></tr></table></figure></div><ul><li><p>式中:{st+j}j表示线性部分的内部状态。</p></li><li><p>步骤2 对非线性部分进行线性逼近,得到最优的线性逼近表达式</p></li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">⊕¦jΓi·st+i=⊕¦kΓ′k·zt+k</span><br></pre></td></tr></table></figure></div><ul><li><p>式中:{zt+k}k为输出密钥流,{Γi}i和{Γ′k}k为32比特掩码Γi·st+i为掩码Γi和状态st+i在GF(2)上的内积。定义上式成立的概率为p,则定义等式偏差ε=1/2-p。如果等式成立的偏差为ε,则大约需要ε-2轮输出密钥流就可以与真正的随机序列区分开。</p></li><li><p>步骤3 由上述线性逼近表达式构造只包含输出密钥流的线性逼近表达式,并用堆积定理计算该表达式的偏差</p></li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">0=⊕¦iΓi·ϕ(s,t+i)= ⊕¦jcjf(s,t+j)= ⊕¦jcjg(z,t+j)</span><br></pre></td></tr></table></figure></div><ul><li>按照上述步骤对ZUC算法具体攻击过程如下所示。</li></ul><p><strong>线性逼近非线性函数F</strong></p><ul><li><p>对ZUC算法在t时刻和t+1时刻,非线性函数F的状态转移函数有:</p><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC1.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC1.png" class="lazyload"></a></p></li></ul><ul><li>若存在32比特的线性掩码Γ,用比特‘⊕’ 代替所有的运算(模加和S盒运算),则F的状态转移函数变为<br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC2.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC2.png" class="lazyload"></a></li></ul><ul><li><p>以上6式相加,则有</p><p> <a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC3.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC3.png" class="lazyload"></a></p></li></ul><ul><li><p>ZUC共有3个模加操作和1个S盒,假设这6个非线性表达式相互独立,则相关性为c+(Γ;Γ,Γ)3cs(Γ,Γ)。为了提高式(1)线性逼近偏差的精度,采用不同的线性掩码Γi,如图2所示;若存在32比特的线性掩码Γi(0≤i≤8),用比特异或‘⊕’代替所有运算(S盒运算和模加运算),F的状态转移函数式对应的线性逼近表达如下:</p><p> <a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC4.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC4.png" class="lazyload"></a></p></li></ul><p> <a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC5.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC5.png" class="lazyload"></a></p><ul><li><p>从上面线性逼近过程可知,当满足条件Γ4=Γ2L‖Γ3H和Γ5=Γ3L‖Γ2H时,将上述6个线性逼近表达式相加,消去中间变量W1、W2、R1,t、R1,t+1、R2,t、R2,t+1,得到关于输入变量X0,t、X0,t+1、X1,t和X2,t与输出变量W1、W2的线性逼近关系Γ0·X0,t⊕Γ1·X0,t+1⊕Γ6·X1,t⊕Γ4·X2,t=Γ7·Wt⊕Γ8·Wt+1 (2)<br>计算式(2)的偏差:式(2)中含有两个非线性操作分别为3次的模232加运算和1次S盒变换。搜索非线性函数F的线性逼近表达式来自于搜索</p><p> <a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC6.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC6.png" class="lazyload"></a></p></li></ul><ul><li><p>定义它们的偏差为εs(Γ)和ε+(Γ),则非线性函数F的偏差为εF(Γ)=2·εs(Γ)·23-1·ε+(Γ)3。在本文的实验中只使用一个激活的S盒,来获取线性逼近方程式(1)的最大偏差。如何搜索6元组掩码(Γ0,Γ1,Γ4,Γ6,Γ7,Γ8)使得式(1)成立的最大偏差。如果本文要遍历所有的32比特掩码值,在现实生活中是不符合实际的。事实上,一般会选取汉明重量相对较低的掩码值。由文献[9]得到的掩码值如表1所示。</p><p> <a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC7.png" data-fancybox="group" data-caption class="fancybox"><img alt title data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/ZUC/ZUC7.png" class="lazyload"></a></p></li></ul><ul><li>根据堆积引理,可计算出区分器的线性偏差ε=23-1ε3 F≈2-65.8<br> 因此,利用本文提出的线性区分攻击方法,需 要N≈1/ε^2 =2131密钥流比特,ZUC就可以被区分,同时需要的计算复杂度为2131,利用定理2,当密钥流比特N≈1/ε^2 =2131时,该区分攻击的区分优势为0.38。综上所述,该区分攻击需要约2131比特密钥流就能以0.38的区分优势把流密码ZUC与随机序列区分开来。当密钥流比特大于131时,密码算法是不安全的;但对于只有128比特密钥的ZUC算法,该结果超过了密钥流序列的长度,因此我们再次证明了ZUC算法是安全的。</li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">[1] Ding L, Liu S K, Zhang Z Y, et al. Guess and determine atack on ZUC based on solving nonlinear equations [J]. Proc of the Record of the 1st Int’l Workshop on ZUC Algorithm,2010,26(6-7):1-8. </span><br><span class="line">[2] 关杰,丁林,刘树凯. SNOW3G 与 ZUC 流密码的猜测决定攻击[J].软件学报,2013,24(6):1324-1333.Guan Jie,Ding Lin,Liu Shukai. Guess and determine attack on SNOW3G and ZUC[J]. Journal of Software, 2013,24(6):1324-1333.</span><br><span class="line">[3] 唐明,高剑,孙乐昊.嵌入式平台下ZUC算法的侧信道频域攻击[J].山东大学学报,2014,49(9):29-34.Tang Ming,Gao Jian,Sun Lehao. Side channel attacks in frequency domain for ZUC algorithm in embedded platform [J].Journal of Shandong University,2014, 49(9):29-34</span><br><span class="line">[4] 刘志强. 分组密码的线性类分析方法研究[D]. 上海:上海交通大学计算机学院,2011. </span><br><span class="line">[5] 连至助. 序列密码的设计与分析研究[D]. 西安:西安电子科技大学计算机学院,2011.</span><br><span class="line">[6] 李顺波,胡予濮.eSTREAM候选算法的区分攻击研究[D].西安:西安电子科技大学计算机学院, 2012:45-48. </span><br><span class="line">[7] 刘艳,潘丰.线性离散系统Delta域控制器设计[J].南京理工大学学报,2015,39(5):571-577. Liu Yan, Pan Feng. Controller design for linear discrete-time system in delta-domain [ J]. Journal of Nanjing University of Science and Technology,2015, 39(5):571-577.</span><br><span class="line">[8] 汤永利,韩娣,闫玺玺,叶青,李子臣.祖冲之序列密码的线性区分攻击分析[J].南京理工大学学报,2016,40(4):452-454.Tang Yongli,Han Di,Yan Xixi,Ye Qing,Li Zichen. Linear distinguishing attack analysis on ZUC stream cipher[J]. Journal of Nanjing University of Science and Technology,2016,40(4):452-454.</span><br><span class="line">[9] Cid C, Murphy S, Piper F, et al. ZUC algorithm evaluation report [ R ]. London: Codes & Ciphers Ltd. ,2010.</span><br></pre></td></tr></table></figure></div>]]></content>
<categories>
<category> 算法 </category>
</categories>
<tags>
<tag> 网络安全 </tag>
<tag> 密码学 </tag>
<tag> ZUC算法 </tag>
</tags>
</entry>
<entry>
<title>操作系统知识问答</title>
<link href="/post/990d8046.html"/>
<url>/post/990d8046.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="一、设计现代OS的主要目标是什么?"><a href="#一、设计现代OS的主要目标是什么?" class="headerlink" title="一、设计现代OS的主要目标是什么?"></a>一、设计现代OS的主要目标是什么?</h1><p>实现一种具有方便性、有效性、可扩充性、开放性的操作系统。</p><h1 id="二、试说明推动分时系统形成和发展的主要动力是什么。"><a href="#二、试说明推动分时系统形成和发展的主要动力是什么。" class="headerlink" title="二、试说明推动分时系统形成和发展的主要动力是什么。"></a>二、试说明推动分时系统形成和发展的主要动力是什么。</h1><p>用户提出的三大需求(人机交互、共享主机、便于用户上机)<br>分时系统具有一定的优越性:多路性独立性及时性交互性</p><h1 id="三、为什么要引入实时操作系统?"><a href="#三、为什么要引入实时操作系统?" class="headerlink" title="三、为什么要引入实时操作系统?"></a>三、为什么要引入实时操作系统?</h1><p>存在一种计算,该系统的正确性不仅由计算的逻辑结果来确定,还取决于产生结果的时间。而分时系统的及时性不如实时系统,因此需要引入实时操作系统实现对实时计算的处理、响应。</p><h1 id="四、试从交互性、及时性以及可靠性等方面将分时系统与实时系统进行比较"><a href="#四、试从交互性、及时性以及可靠性等方面将分时系统与实时系统进行比较" class="headerlink" title="四、试从交互性、及时性以及可靠性等方面将分时系统与实时系统进行比较"></a>四、试从交互性、及时性以及可靠性等方面将分时系统与实时系统进行比较</h1><p>交互性:分时系统交互性更强。<br>分时系统的及时性是指用户能在很短的时间内获得系统的相应,此时间间隔是以人们能接受的等待时间决定的,一般为2-3秒。对实时系统来说,及时性是他的关键问题之一,实时信息系统的及时性要求与分时系统相似。而实时控制系统的及时性要求则是由被控制对象所要求的开始截止时间和完成截止时间决定的,一般为秒级、百毫秒级直到毫秒级,甚至更低。</p><h2 id="及时性:实时系统的要求更高。"><a href="#及时性:实时系统的要求更高。" class="headerlink" title="及时性:实时系统的要求更高。"></a>及时性:实时系统的要求更高。</h2><p>交互性问题是分时系统的关键问题,在分时系统中,用户可以通过终端与系统进行广泛的人机交互,如文件编辑、数据处理和资源共享。实时系统也具有交互性,但在实时系统中交互性仅限于访问系统中某些特定的专用服务程序,也就是说它的交互性具有很大的局限性。</p><h2 id="可靠性:实时系统要求更高。"><a href="#可靠性:实时系统要求更高。" class="headerlink" title="可靠性:实时系统要求更高。"></a>可靠性:实时系统要求更高。</h2><p>可靠性是实时系统的另一个关键问题,实时系统中的任何差错都可能带来巨大的经济损失,甚至带来无法预料的灾难性的后果,所以实时系统往往采取多级容错措施来保证系统的高度可靠。分时系统虽然也要求可靠,但比实时系统的要求更低。</p><h1 id="五、OS有哪几大特征?其最基本的特征是什么?"><a href="#五、OS有哪几大特征?其最基本的特征是什么?" class="headerlink" title="五、OS有哪几大特征?其最基本的特征是什么?"></a>五、OS有哪几大特征?其最基本的特征是什么?</h1><p>操作系统具有如下特征:并发性、共享性、虚拟性、异步性<br>最基本的特征:共享和并发是操作系统的两个最基本的特征。虚拟以并发和共享为前提,异步是并发和共享的结果。</p><h1 id="六、处理机管理具有那些功能?其主要任务是什么?"><a href="#六、处理机管理具有那些功能?其主要任务是什么?" class="headerlink" title="六、处理机管理具有那些功能?其主要任务是什么?"></a>六、处理机管理具有那些功能?其主要任务是什么?</h1><p>处理机管理具有以下功能:进程管理、进程同步、进程通信和进程调度。<br>主要任务:对进程进行管理。创建和撤销进程,对诸进程的运行进行协调,实现进程之间的信息交换,以及按照一定的算法把处理机分配给进程。</p><h1 id="七、内存管理具有那些功能?其主要任务是什么?"><a href="#七、内存管理具有那些功能?其主要任务是什么?" class="headerlink" title="七、内存管理具有那些功能?其主要任务是什么?"></a>七、内存管理具有那些功能?其主要任务是什么?</h1><p>内存管理具有以下功能:内存分配、内存保护、地址映射、内存扩充<br>主要任务:为多道程序的运行提供良好的环境,提高存储器的利用率,方便用户使用、从逻辑上扩充内存。</p><h1 id="八、设备管理具有那些功能?其主要任务是什么?"><a href="#八、设备管理具有那些功能?其主要任务是什么?" class="headerlink" title="八、设备管理具有那些功能?其主要任务是什么?"></a>八、设备管理具有那些功能?其主要任务是什么?</h1><p>设备管理具有以下功能:缓冲管理、设备分配、设备处理<br>主要任务:完成用户进程提出的I/O请求,为其分配所需的I/O设备、完成指定操作;提高CPU与I/O设备的利用率,提高速度,便于用户使用。</p><h1 id="九、文件管理具有那些功能?其主要任务是什么?"><a href="#九、文件管理具有那些功能?其主要任务是什么?" class="headerlink" title="九、文件管理具有那些功能?其主要任务是什么?"></a>九、文件管理具有那些功能?其主要任务是什么?</h1><p>文件管理具有以下功能:文件存储空间管理、目录管理、文件读写管理与保护<br>主要任务:对用户文件和系统文件进行管理以方便用户使用,保证文件的安全性。</p>]]></content>
<categories>
<category> 操作系统 </category>
</categories>
<tags>
<tag> 作业 </tag>
<tag> 操作系统 </tag>
</tags>
</entry>
<entry>
<title>基于文件读写的学生成绩管理理系统(含图形化界面)</title>
<link href="/post/e827c559.html"/>
<url>/post/e827c559.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>在UESTC的软件工程与实践课程中,在系统的介绍了Java语言的特点与基础的Java程序设计之后,老师提出了一项基于文件读写的学生成绩管理系统作为课程的阶段性项目。<br>详细的作业要求详见以下文档(第一份文档请自行旋转后查看)</p><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Files/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%9C%E4%B8%9A.pdf" target="_blank" rel="noopener">第一次作业要求</a><br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Files/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%BD%9C%E4%B8%9A.pdf" target="_blank" rel="noopener">第二次作业要求</a><br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Files/%E7%AC%AC%E4%B8%89%E6%AC%A1%E4%BD%9C%E4%B8%9A.pdf" target="_blank" rel="noopener">第三次作业要求</a></p><p>简要分析,三次作业的内容分别是编写系统核心组件,系统功能完善,增加图像化界面。接下来我们以时间顺序简要的分析三次作业,希望能够成为一次对Java语言程序设计的探索与反思。</p><h1 id="第一次作业"><a href="#第一次作业" class="headerlink" title="第一次作业"></a>第一次作业</h1><p>第一次作业的要求是,从基类Person抽象类开发衍生类Admin、Teacher和Student类,实现总体项目的核心业务逻辑。在实现基类设置、读取共有信息的前提下,基于不同的派生类实现相应的不同功能。<br>在构造基类和衍生类的过程中,要求实现无参和有参的构造函数,调用super()方法,实现info()方法,体现出Java的多态性。</p><p>首先是对基类进行分析和构造</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">code side</span><br></pre></td></tr></table></figure></div><h1 id="第二次作业"><a href="#第二次作业" class="headerlink" title="第二次作业"></a>第二次作业</h1><h1 id="第三次作业"><a href="#第三次作业" class="headerlink" title="第三次作业"></a>第三次作业</h1>]]></content>
<categories>
<category> Java </category>
</categories>
<tags>
<tag> 作业 </tag>
<tag> Java </tag>
<tag> GUI </tag>
<tag> 文件读写 </tag>
</tags>
</entry>
<entry>
<title>JSON/JSON-RPC学习报告</title>
<link href="/post/ba3b3412.html"/>
<url>/post/ba3b3412.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="JSON-amp-JSON-RPC学习报告-2019091602014-冯新越"><a href="#JSON-amp-JSON-RPC学习报告-2019091602014-冯新越" class="headerlink" title="JSON&JSON-RPC学习报告-2019091602014-冯新越"></a>JSON&JSON-RPC学习报告-2019091602014-冯新越</h1><h1 id="JSON部分"><a href="#JSON部分" class="headerlink" title="JSON部分"></a>JSON部分</h1><h2 id="什么是JSON"><a href="#什么是JSON" class="headerlink" title="什么是JSON"></a>什么是JSON</h2><p><strong>JSON</strong> : JavaScript Object Notation(JavaScript 对象表示法)</p><ul><li>JSON是一种<strong>存储和交换文本信息的语法</strong>,类似于XML但是更小、更快,更易解析。</li><li>JSON是<strong>独立于语言和平台的</strong>文本数据交换格式。JSON解析器/库支持许多不同的编程语言,多数动态编程语言都支持JSON。</li><li>JSON是<strong>具有自我描述性</strong>的语法,易于理解,也方便机器进行解析和生成。</li></ul><h2 id="JSON与XML的横向对比"><a href="#JSON与XML的横向对比" class="headerlink" title="JSON与XML的横向对比"></a>JSON与XML的横向对比</h2><p>JSON | XML<br>|-:|:-|<br>相同 |都是纯文本、都具有自我描述性、都具有层级结构、都可通过JavaScript解析、都可使用AJAX进行数据传输<br>不同 |JSON没有结束标签、更简短且读写更快、能够使用内建的JavaScript eval()方法进行解析、能使用数组、不使用保留字</p><hr><ul><li>相对于XML语言来说,我们不难看出,JSON具有无可比拟的优越性。<br> 它的简便、轻量、易于维护,繁多的功能支持让他逐渐在Web Service中占据一席之地。</li><li>但是相较于XML,JSON并没有它推广的这么深入人心和广泛使用, 通用性相对略低。</li><li>从我们项目的核心——云边融合控制器管理入手,我们在选取不同的数据交换格式时,不仅要考虑语言的可读性,通用性,实现难度,响应速度等基本因素,还要考虑数据在网络中的传输速度、安全性等问题。因此,我认为JSON是完美契合我们需求的选择。</li></ul><h2 id="JSON基础语法"><a href="#JSON基础语法" class="headerlink" title="JSON基础语法"></a>JSON基础语法</h2><p><strong>JSON语法是JavaScript语法的子集</strong></p><p><em>JSON基础语法规则:</em></p><ul><li>数据在名称/值对中</li><li>数据由逗号分隔</li><li>花括号保存对象</li><li>方括号保存数组</li></ul><p><strong>JSON 名称/值对</strong></p><p>JSON数据的书写格式:名称/值对</p><p>例如:</p><blockquote><p>“firstName”:”John”</p></blockquote><p>他等价于</p><blockquote><p>firstName = “John”</p></blockquote><p><strong>JSON值</strong></p><p><em>JSON值包括:</em></p><ul><li>数字(整数或浮点数)</li><li>字符串(在双引号中)</li><li>逻辑值(true或false)</li><li>数组(在方括号中)</li><li>对象(在花括号中)</li><li>null</li></ul><p><strong>JSON 对象</strong></p><p><em>JSON对象在花括号中书写</em>,例如:</p><blockquote><p>{“firstName”:”John”,”lastName”:”Doe”}</p></blockquote><p>他等价于</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">firstName = "John"</span><br><span class="line">lastName = "Doe"</span><br></pre></td></tr></table></figure></div><p><strong>JSON数组</strong></p><p><em>JSON数组在方括号中书写</em>,数组可以包含多个对象。例如:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">{</span><br><span class="line">"employess":[</span><br><span class="line">{"firstName":"John":"Doe"},</span><br><span class="line">{ "firstName":"Anna" , "lastName":"Smith" },</span><br><span class="line">{ "firstName":"Peter" , "lastName":"Jones" }</span><br><span class="line">]</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p><strong>JSON使用JavaScript语法</strong></p><p>通过JavaScript,我们可以创建一个对象数组,并直接进行赋值:</p><pre><code>var employees = [{ "firstName":"Bill" , "lastName":"Gates" },{ "firstName":"George" , "lastName":"Bush" },{ "firstName":"Thomas" , "lastName": "Carter" }];</code></pre><p>访问数组</p><blockquote><p>employees[0].lastName;</p></blockquote><p>返回值</p><blockquote><p>Gates</p></blockquote><p>修改数据</p><blockquote><p>employees[0].lastName = “Jobs”;</p></blockquote><p><strong>JSON文件</strong></p><ul><li>JSON文件的文件类型“.json”</li><li>JSON文本的MIME类型是”applicatio/json”</li></ul><h1 id="JSON-RPC部分"><a href="#JSON-RPC部分" class="headerlink" title="JSON-RPC部分"></a>JSON-RPC部分</h1><h2 id="什么是RPC?"><a href="#什么是RPC?" class="headerlink" title="什么是RPC?"></a>什么是RPC?</h2><p><strong>RPC</strong> : 即Remote Procedure Call Protocol、远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。</p><p>RPC协议通过某些传输协议来实现,如传输二进制数据的Socket协议,为通信程序之间携带信息数据。在OSI网络通讯模型中,RPC跨越了传输层和应用层,使得开发包括微服务在内的应用程序更加容易。</p><ul><li>RPC指的是远程过程调用,简而言之,<strong>RPC是从一台机器上通过参数传递的方式调用另一台机器上的一个函数或方法并得到响应结果的方法。</strong></li><li>RPC<strong>隐藏</strong>底层的通讯细节。</li><li>RPC是一个<strong>请求响应模型</strong>,客户端发起请求,服务器返回响应。</li><li>RPC在使用形式上像<strong>调用本地函数</strong>一样去调用远程的函数。</li></ul><h2 id="我们为什么需要使用RPC"><a href="#我们为什么需要使用RPC" class="headerlink" title="我们为什么需要使用RPC"></a>我们为什么需要使用RPC</h2><p>随着现代计算机网络应用的不断进化,大型项目所包含的业务越来越多,应用也越来越多。我们发现有些功能已经不能简单划分开来,甚至无法在一个进程内或一个计算机内通过本地调用的方式完成需求,比如不同系统、不同组织间的通讯。由于对计算能力提出了横向扩展的需求,我们需要在多台机器组成的集群上部署应用。此时,我们将公共业务逻辑抽离出来,将之改组为独立的Service应用。而原有或新增的应用都可以与那些独立的Service应用相交互,以此来构成完整的业务逻辑。因此,RPC的诸多特性使其成为了我们完成以上任务的重要手段。</p><h2 id="RPC的具体原理"><a href="#RPC的具体原理" class="headerlink" title="RPC的具体原理"></a>RPC的具体原理</h2><p>本例中我们使用<strong>Google Protolcol Buffer</strong>实现序列化。</p><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/RPC_1.jpg" data-fancybox="group" data-caption="RPC例" class="fancybox"><img alt="RPC例" title="RPC例" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/RPC_1.jpg" class="lazyload"></a></p><p>先在RPC中注册callMethod函数,在服务端注册相同的callMethod。调用客户端向服务端发送命令,传送相应的命令和键值,调用callMethod函数实现序列化和反序列化,封包,发送消息。<br>将callMethod函数序列化后的结果发送到服务端,服务端收到消息后,使用callMethod函数进行反序列化,并根据其内容提供Service服务进行响应,对需要反馈的数据通过callMethod函数进行序列化,再将序列化后的结果发送给客户端,最终客户端进行反序列化,处理序列化的结果,完成一个完整的请求——处理——反馈的流程</p><p>同样的,JSON也可以实现如上图的流程</p><hr><p>接下来我们再从内部视角探究RPC的结构</p><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/RPC_2.jpg" data-fancybox="group" data-caption="RPC例" class="fancybox"><img alt="RPC例" title="RPC例" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/RPC_2.jpg" class="lazyload"></a></p><p>示例:</p><ul><li>RpcServer<br>负责导出(export)远程接口</li><li>RpcClient<br>负责导入(import)远程接口的代理实现</li><li>RpcProxy<br>远程接口的代理实现</li><li>RpcInvoker<br>客户端实现:负责编码调用信息和发送调用请求到服务端并等待调用结果返回<br>服务端实现:负责调用服务端接口的具体实现并返回调用结果</li><li>RpcProtocol<br>负责协议编/解码</li><li>RpcConnector<br>负责维持客户端和服务端的连接通道和发送数据到服务端</li><li>RpcAcceptor<br>负责接收客户端请求并返回请求结果</li><li>RpcProcessor<br>负责在服务端控制调用过程,包括管理调用线程池、超时时间等</li><li>RpcChannel<br>数据传输通道</li></ul><p>RPC服务端通过RpcServer去导出远程接口方法,而客户端通过RpcClient去引入远程接口方法。<br>客户端像调用本地方法一样去调用远程接口方法,RPC框架提供接口的代理实现,实际的调用将委托给代理RpcProxy。 代理封装调用信息并将调用转交给RpcInvoker去实际执行。在客户端的RpcInvoker通过连接器RpcConnector去维持与服务端的通道RpcChannel,并使用RpcProtocol执行协议编码并将编码后的请求消息通过通道发送给服务端。<br>RPC 服务端接收器RpcAcceptor接收客户端的调用请求,同样使用RpcProtocol执行协议解码。解码后的调用信息传递给RpcProcessor去控制处理调用过程,最后再委托调用给RpcInvoker去实际执行并返回调用结果。[1]</p><h2 id="Java中常用的几种RPC框架"><a href="#Java中常用的几种RPC框架" class="headerlink" title="Java中常用的几种RPC框架"></a>Java中常用的几种RPC框架</h2><ul><li><p>RMI(远程方法调用)<br>RMI是JAVA自带的远程方法调用工具,作为JAVA语言最开始时的设计,在现在的应用环境中已经具有了一定的局限性。后来很多框架的原理都基于该框架。</p></li><li><p>Hessian(基于HTTP的远程方法调用)<br>Hessian基于HTTP协议传输,在性能方面还不够完美,负载均衡和失效转移依赖于应用的负载均衡器。Hessian的使用与RMI类似,区别在于淡化了Registry的角色,通过显示的地址调用,利用HessianProxyFactory根据配置的地址create一个代理对象,另外还要引入Hessian的Jar包。</p></li><li><p>Dubbo(淘宝开源的基于TCP的RPC框架)<br>Dubbo是基于Netty的高性能RPC框架,由阿里巴巴开源。它是一个分布式的服务框架与SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。自2011年开源后,已被许多非阿里系公司使用。</p></li></ul><h2 id="引用-资料来源"><a href="#引用-资料来源" class="headerlink" title="引用/资料来源"></a>引用/资料来源</h2><p>[1]From:RPC原理详解</p>]]></content>
<categories>
<category> Java </category>
</categories>
<tags>
<tag> JSON </tag>
<tag> JSON-RPC </tag>
<tag> 综合设计 </tag>
<tag> IOT </tag>
</tags>
</entry>
<entry>
<title>Bilibili_2020_1024程序员节Ctf</title>
<link href="/post/6d0a3683.html"/>
<url>/post/6d0a3683.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h1><p>1024,一年一度的程序员节。你好,世界!你好,程序员!<br>(但是 2 0 2 0 - 1 0 2 4 … hhh<br>就在10.24的0点,Bilibili为大家献上了一份大礼:Bilibili_CTF_2020<br>经过了艰苦卓绝(~并不 的奋战,我终于拿到了70 of 100 的分数(平 均 水 平<br>接下来带来这7道题的解析,希望能够成为对Ctf新手的指引吧<br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/bilisrc.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/bilisrc.jpg" class="lazyload" title="Alt text"></a><br><code>守护世界上最好的睿叔!(笑</code></p><h1 id="Question-ID-1-页面的背后是什么?"><a href="#Question-ID-1-页面的背后是什么?" class="headerlink" title="Question_ID_1 页面的背后是什么?"></a>Question_ID_1 页面的背后是什么?</h1><p>题目地址:<code>http://45.113.201.36/index.html</code></p><h2 id="解析"><a href="#解析" class="headerlink" title="解析"></a>解析</h2><p>顾名思义,页面的背后就是源代码啦~<br>F12检查元素,得到第一题的源码如下:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"> $.ajax({</span><br><span class="line"> url: "api/admin",</span><br><span class="line"> type: "get",</span><br><span class="line"> success:function (data) {</span><br><span class="line"> //console.log(data);</span><br><span class="line"> if (data.code == 200){</span><br><span class="line"> // 如果有值:前端跳转</span><br><span class="line"> var input = document.getElementById("flag1");</span><br><span class="line"> input.value = String(data.data);</span><br><span class="line"> } else {</span><br><span class="line"> // 如果没值</span><br><span class="line"> $('#flag1').html("接口异常,请稍后再试~");</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">})</span><br></pre></td></tr></table></figure></div><p>根据提示修改url为<code>http://45.113.201.36/api/admin</code>,页面返回<code>{"code":200,"data":"9eaf84d8-0336b140-23185a95-13d5825f","msg":""}</code><br>在依据代码逻辑,我们确定Flag1为<code>9eaf84d8-0336b140-23185a95-13d5825f</code></p><h1 id="Question-ID-2-真正的秘密只有特殊的设备才能看到"><a href="#Question-ID-2-真正的秘密只有特殊的设备才能看到" class="headerlink" title="Question_ID_2 真正的秘密只有特殊的设备才能看到"></a>Question_ID_2 真正的秘密只有特殊的设备才能看到</h1><p>题目地址:<code>http://45.113.201.36/index.html</code></p><h2 id="解析-1"><a href="#解析-1" class="headerlink" title="解析"></a>解析</h2><p>诶?特殊的设备?<br>还是老老实实检查元素吧~<br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/Bilibili_Ctf1.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/Bilibili_Ctf1.jpg" class="lazyload" title="Alt text"></a></p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">$.ajax({</span><br><span class="line"> url: "api/ctf/2",</span><br><span class="line"> type: "get",</span><br><span class="line"> success:function (data) {</span><br><span class="line"> //console.log(data);</span><br><span class="line"> if (data.code == 200){</span><br><span class="line"> // 如果有值:前端跳转</span><br><span class="line"> $('#flag2').html("flag2: " + data.data);</span><br><span class="line"> } else {</span><br><span class="line"> // 如果没值</span><br><span class="line"> $('#flag2').html("需要使用bilibili Security Browser浏览器访问~");</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">})</span><br></pre></td></tr></table></figure></div><p>可是,<code>需要使用bilibili Security Browser浏览器访问~</code>又是什么意思呢?<br>对了!我们可以修改UA标识!!<br>F12检查元素,模拟设备,添加自定义设备!<br>我们加入一个名为bilibili Security Browser的新设备,刷新页面发现并没有得出Flag<br>索性把所有涉及设备的参数设置为bilibili Security Browser,F5刷新后,就得到了Flag~<br>Flag2:<code>be74383e-0b87bbde-40c0c5c4-da62eec3</code></p><h1 id="Question-ID-3-密码是啥?"><a href="#Question-ID-3-密码是啥?" class="headerlink" title="Question_ID_3 密码是啥?"></a>Question_ID_3 密码是啥?</h1><p>题目地址:<code>http://45.113.201.36/login.html</code></p><h2 id="解析-2"><a href="#解析-2" class="headerlink" title="解析"></a>解析</h2><p>F12康康代码逻辑</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">//falg 3</span><br><span class="line"></span><br><span class="line">$("#submit").click(function(){</span><br><span class="line"> </span><br><span class="line"> $.ajax({</span><br><span class="line"> url: "api/ctf/3",</span><br><span class="line"> type: "post",</span><br><span class="line"> contentType: "application/json",</span><br><span class="line"> dataType:"json",</span><br><span class="line"> data: JSON.stringify({</span><br><span class="line"> username: $("#name").val(),</span><br><span class="line"> passwd: $("#subject").val(),</span><br><span class="line"> }),</span><br><span class="line"> success:function (data) {</span><br><span class="line"> if (data.code == 200){</span><br><span class="line"> alert("flag is: " + data.data);</span><br><span class="line"> } else {</span><br><span class="line"> alert("用户名或密码错误~");</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line"> });</span><br></pre></td></tr></table></figure></div><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF2.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF2.jpg" class="lazyload" title="Alt text"></a><br>密码是什么呢?首先考虑密码爆破!<br>跑完了字典,但是密码并没有试出来……<br>简单想想,用户名应该就是admin没得跑,那么密码是什么呢?<br>最终猜测得到bilibili = = (CTF× 猜 灯 谜√</p><p>Flag3:<code>3f06bf77-e57dad87-a669c72b-4d8b296b</code></p><h1 id="Question-ID-4-对不起,权限不足~"><a href="#Question-ID-4-对不起,权限不足~" class="headerlink" title="Question_ID_4 对不起,权限不足~"></a>Question_ID_4 对不起,权限不足~</h1><p>题目地址:<code>http://45.113.201.36/superadmin.html</code></p><p><a href data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src class="lazyload" title="Alt text"></a></p><h2 id="解析-3"><a href="#解析-3" class="headerlink" title="解析"></a>解析</h2><p><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF3.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF3.jpg" class="lazyload" title="Alt text"></a><br>F12!</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">$.ajax({</span><br><span class="line"> url: "api/ctf/4",</span><br><span class="line"> type: "get",</span><br><span class="line"> success:function (data) {</span><br><span class="line"> console.log(data);</span><br><span class="line"> if (data.code == 200){</span><br><span class="line"> // 如果有值:前端跳转</span><br><span class="line"> $('#flag').html("欢迎超级管理员登陆~答案是 : {{ " + data.data + " }}".toLowerCase() )</span><br><span class="line"> } else {</span><br><span class="line"> // 如果没值</span><br><span class="line"> $('#flag').html("有些秘密只有超级管理员才能看见哦~")</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> })</span><br></pre></td></tr></table></figure></div><p>好家伙,我直接懵逼.jpg<br>打开Fiddler抓个包~<br>查看返回包的Cookie时候,发现了有意思的东西:<br><code>Cookie: role=ee11cbb19052e40b07aac0ca060c23ee; session=eyJ1aWQiOiIzNzIwODMyMSJ9.X5Qnkw.1NWStBUpUlAWQhYOM9av9W_qEWA</code><br>这个role值就很耐人寻味呀~似乎是一个加密后的字符串?<br>尝试解码,初步确定是MD5加密后的结果,且解密为admin字符串<br>那么思路就应该是替换Cookie的字段值了。将superadmin采用md5加密,利用EditThisCookie插件修改role值,居然不对!<br>猜来猜去,administrator,Superadmin,SuperAdmin……<br>最终正确答案为Administrator【md5:7b7bc2512ee1fedcd76bdc68926d4f7b】 = = 万万没想到啊!<br>修改Cookie后刷新页面,就会返回正确的Flag啦!<br>Flag5:<code>126fb903-b39dfd0d-0bf68925-219cd931</code></p><h1 id="Question-ID-5-别人的秘密"><a href="#Question-ID-5-别人的秘密" class="headerlink" title="Question_ID_5 别人的秘密"></a>Question_ID_5 别人的秘密</h1><p>题目地址:<code>http://45.113.201.36/user.html</code></p><h2 id="解析-4"><a href="#解析-4" class="headerlink" title="解析"></a>解析</h2><p>并看不懂= =,管他的,F12!<br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF5.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF5.jpg" class="lazyload" title="Alt text"></a></p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">$(function () {</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"> (function ($) {</span><br><span class="line"> $.getUrlParam = function(name) {</span><br><span class="line"> var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");</span><br><span class="line"> var r = window.location.search.substr(1).match(reg);</span><br><span class="line"> if (r != null) return unescape(r[2]); return null;</span><br><span class="line"> }</span><br><span class="line"> })(jQuery);</span><br><span class="line"></span><br><span class="line"> var uid = $.getUrlParam('uid');</span><br><span class="line"> if (uid == null) {</span><br><span class="line"> uid = 100336889;</span><br><span class="line"> }</span><br><span class="line"> $.ajax({</span><br><span class="line"> url: "api/ctf/5?uid=" + uid,</span><br><span class="line"> type: "get",</span><br><span class="line"> success:function (data) {</span><br><span class="line"> console.log(data);</span><br><span class="line"> if (data.code == 200){</span><br><span class="line"> // 如果有值:前端跳转</span><br><span class="line"> $('#flag').html("欢迎超级管理员登陆~flag : " + data.data )</span><br><span class="line"> } else {</span><br><span class="line"> // 如果没值</span><br><span class="line"> $('#flag').html("这里没有你想要的答案~")</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> })</span><br><span class="line">});</span><br></pre></td></tr></table></figure></div><p>原来如此!遍历!遍历!!<br>用Get方法,以<code>http://45.113.201.36/api/ctf/5?uid=100336889</code>为基准,uid++向上遍历!<br>遍历到<code>http://45.113.201.36/api/ctf/5?uid=100336913</code>的时候,服务端返回了code:200!<br><code>{"code":200,"data":"314ebf97-6bc0234f-b906e013-52b47f23","msg":""}</code><br>(果然是“别人的秘密”呀</p><p>那么,Flag5:<code>314ebf97-6bc0234f-b906e013-52b47f23</code></p><h1 id="Question-ID-6-结束亦是开始"><a href="#Question-ID-6-结束亦是开始" class="headerlink" title="Question_ID_6 结束亦是开始"></a>Question_ID_6 结束亦是开始</h1><p>题目地址:<code>http://45.113.201.36/blog/single.php?id=1</code></p><h2 id="解析-5"><a href="#解析-5" class="headerlink" title="解析"></a>解析</h2><p>终于我们进入了动态页面的世界~<br><a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF6.jpg" data-fancybox="group" data-caption="Alt text" class="fancybox"><img alt="Alt text" data-src="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BILIBILICTF6.jpg" class="lazyload" title="Alt text"></a><br>扫描!扫描!<br>我们得到了两个页面:end.php和test.php<br>end.php就和他的名字一样,空白的页面,和一句<strong>你想要的不在这儿~</strong><br>而test.php就有趣的多了:页面返回内容如下</p><h3 id="内容(建议跳过"><a href="#内容(建议跳过" class="headerlink" title="内容(建议跳过"></a>内容(建议跳过</h3><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(!![]+[])[+[]]+([]+{})[+!![]]+(!![]+[])[+!![]]]((!![]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+([][[]]+[])[+[]]+([][[]]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(![]+[])[!+[]+!![]+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+([]+[][(![]+[])[!+[]+!![]+!![]]+([]+{})[+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]][([]+{})[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]]+(![]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+[]]+([]+{})[!+[]+!![]+!</span><br><span class="line"></span><br><span class="line">………(太长啦~</span><br><span class="line"></span><br><span class="line">+!![]+!![]]+(![]+[])[!+[]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][[]]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+[]))+([]+{})[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+(+!![][]]]((!![]+[])[+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!![]]+([][[]]+[])[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]+!![]+!![]]+(![]+[])[!+[]+!![]]+([]+{})[+!![]]+([]+{})[!+[]+!![]+!![]+!![]+!![]]+(+{}+[])[+!![]]+(!![]+[])[+[]]+([][[]]+[])[!+[]+!![]+!![]+!![]+!![]]+([]+{})[+!![]]+([][[]]+[])[+!![]])())[!+[]+!![]+!![]]+([][[]]+[])[!+[]+!![]+!![]])()(([]+{})[+[]])[+[]]+(!+[]+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[]))</span><br></pre></td></tr></table></figure></div><p>很明显的jsfuck加密方法,最初被黑客用于网页注入~<br>在Chrome浏览器粘贴运行可以直接解码<br>结果为: </p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">"var str1 = "\u7a0b\u5e8f\u5458\u6700\u591a\u7684\u5730\u65b9";</span><br><span class="line">var str2 = "bilibili1024havefun";</span><br><span class="line">console.log()"</span><br></pre></td></tr></table></figure></div><p>str1的内容很容易看出是Unicode字符,经转化得到<strong>程序员最多的地方</strong><br>果断打开最大的<del>同性交友网站</del> Github!搜索bilibili1024havefun找到对应的Repository<br>拿到真·end.php的源码:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><?php</span><br><span class="line"></span><br><span class="line">//filename end.php</span><br><span class="line"></span><br><span class="line">$bilibili = "bilibili1024havefun";</span><br><span class="line"></span><br><span class="line">$str = intval($_GET['id']);</span><br><span class="line">$reg = preg_match('/\d/is', $_GET['id']);</span><br><span class="line"></span><br><span class="line">if(!is_numeric($_GET['id']) and $reg !== 1 and $str === 1){</span><br><span class="line">$content = file_get_contents($_GET['url']);</span><br><span class="line"></span><br><span class="line">//文件路径猜解</span><br><span class="line">if (false){</span><br><span class="line">echo "还差一点点啦~";</span><br><span class="line">}else{</span><br><span class="line">echo $flag;</span><br><span class="line">}</span><br><span class="line">}else{</span><br><span class="line">echo "你想要的不在这儿~";</span><br><span class="line">}</span><br><span class="line">?></span><br></pre></td></tr></table></figure></div><p>传参id[]=1满足第一个条件,按照前面题目的格式api/ctf/x,不难猜出有api/ctf/6/flag.txt<br>考虑到这玩意也不是个flag,又想到图片隐写~于是另存为图片,打开就是flag啦<br>于是得到了Flag10:<code>2ebd3b08-47ffc478-b49a5f9d-f6099d65</code>(??《关于我做第六题却得到了第十题Flag的事》</p><h1 id="Question-ID-7-接下来的旅程,需要少年自己去探索啦~"><a href="#Question-ID-7-接下来的旅程,需要少年自己去探索啦~" class="headerlink" title="Question_ID_7 接下来的旅程,需要少年自己去探索啦~"></a>Question_ID_7 接下来的旅程,需要少年自己去探索啦~</h1><p>题目地址:<code>NULL</code></p><h2 id="解析-6"><a href="#解析-6" class="headerlink" title="解析"></a>解析</h2><p>404</p><h1 id="Question-ID-8-接下来的旅程,需要少年自己去探索啦~"><a href="#Question-ID-8-接下来的旅程,需要少年自己去探索啦~" class="headerlink" title="Question_ID_8 接下来的旅程,需要少年自己去探索啦~"></a>Question_ID_8 接下来的旅程,需要少年自己去探索啦~</h1><p>题目地址:<code>NULL</code></p><h2 id="解析-7"><a href="#解析-7" class="headerlink" title="解析"></a>解析</h2><p>在NodeJS框架下解<br>需要库:redis<br>阶梯代码如下</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">var redis = require('redis'),</span><br><span class="line"> RDS_PORT = 6379,</span><br><span class="line"> RDS_HOST = '120.92.151.189',</span><br><span class="line"> RDS_OPTS = {},</span><br><span class="line"> client = redis.createClient(RDS_PORT, RDS_HOST, RDS_OPTS);</span><br><span class="line"></span><br><span class="line">client.on('connect', function () {</span><br><span class="line"> client.hgetall("flag8", (e, r) => {</span><br><span class="line"> console.dir(r);</span><br><span class="line"> })</span><br><span class="line">});</span><br></pre></td></tr></table></figure></div><p>喜闻乐见的是,全国的带佬们都在用扫描,不排除还有爆破从而达成人肉DDOS的hhh<br>总而言之,服务器在挂的边缘疯狂试探,我愿称之为服务器的挂&不挂二象性<br>多试几次~</p><p>返回结果:</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag1"</span><br><span class="line">"3b96173a-b3df4cdd-22d4c15f-261e7309"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag2"</span><br><span class="line">"bd871042-1e09a130-3ddd4faa-cebdb048"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag3"</span><br><span class="line">"c7f7a7c2-28b7f895-5432152b-6410e042"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag4"</span><br><span class="line">"d338e3c8-93215105-258d79ba-b364e59c"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag5"</span><br><span class="line">"612d1886-044898af-6c1e9dba-b58ad075"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag6"</span><br><span class="line">"8aa6f15d-65e37c9b-78c2bc37-00ed5aee"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag7"</span><br><span class="line">"b78ce2aa-10d03327-f2035f4e-55c17689"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag8"</span><br><span class="line">"d436b982-2b81aa54-49a8d2db-87ab951a"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag9"</span><br><span class="line">"b3238659-b81512e6-3a307c74-9877ecc5"</span><br><span class="line">[root@demo ~]# redis-cli -h 120.92.151.189 -p 6379 -r 1 get "flag10"</span><br><span class="line">"e5653416-595b3d0c-4c2a57ee-c026350e"</span><br></pre></td></tr></table></figure></div><p>我们得到了Flag8:<code>d436b982-2b81aa54-49a8d2db-87ab951a</code></p><h1 id="Question-ID-9-接下来的旅程,需要少年自己去探索啦~"><a href="#Question-ID-9-接下来的旅程,需要少年自己去探索啦~" class="headerlink" title="Question_ID_9 接下来的旅程,需要少年自己去探索啦~"></a>Question_ID_9 接下来的旅程,需要少年自己去探索啦~</h1><p>题目地址:<code>NULL</code></p><h2 id="解析-8"><a href="#解析-8" class="headerlink" title="解析"></a>解析</h2><p>404</p><h1 id="Question-ID-10-接下来的旅程,需要少年自己去探索啦~"><a href="#Question-ID-10-接下来的旅程,需要少年自己去探索啦~" class="headerlink" title="Question_ID_10 接下来的旅程,需要少年自己去探索啦~"></a>Question_ID_10 接下来的旅程,需要少年自己去探索啦~</h1><p>题目地址:<code>NULL</code></p><h2 id="解析-9"><a href="#解析-9" class="headerlink" title="解析"></a>解析</h2><p>404</p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>6、7、9题截止目前还没有解出来<br>(史称679事件 <del>我还是太菜了啊TAT</del><br>总之Bilibili_2020_10_24_CTF的题目就做到这里了,虽然都是Web方向的题,但是还是存在着很多运气的成分<del>Administrator</del> /笑<br>对新手还是蛮友好的,前5题还是可以学到很多东西,特别是Web题里面的一些基础知识~</p>]]></content>
<categories>
<category> ctf </category>
</categories>
<tags>
<tag> Web </tag>
<tag> Bilibili </tag>
<tag> 1024 </tag>
<tag> PHP </tag>
<tag> ctf </tag>
<tag> 网络安全 </tag>
</tags>
</entry>
<entry>
<title>CNSS2020_招新解析</title>
<link href="/post/b5f19194.html"/>
<url>/post/b5f19194.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h1><p><strong>施工中!!!Coming Soon!!!</strong></p><h1 id="Web方向"><a href="#Web方向" class="headerlink" title="Web方向"></a>Web方向</h1><h2 id="Web-01-baby-Web-方向做题须知"><a href="#Web-01-baby-Web-方向做题须知" class="headerlink" title="Web_01_(baby)Web 方向做题须知"></a>Web_01_(baby)Web 方向做题须知</h2><h3 id="Web-方向做题须知"><a href="#Web-方向做题须知" class="headerlink" title="Web 方向做题须知"></a>Web 方向做题须知</h3><p>1.Web题目为每道题目描述里给出的链接地址所指向的web应用(所以不要在平台题目描述界面寻找flag了<br>2.flag格式统一为cnss{} 花括号中间为有意义的字符串,通常会以_区分单个单词<br>3.hint意为提示 是出题人给出的解题提示 并不要求你在flag提交处作答(x<br>4.当你成功得到flag时 flag一定是以cnss{}的形式显示的 所以不需要自己手动添加cnss{}(如果有那你找到的一定不是flag</p><h4 id="做题要求"><a href="#做题要求" class="headerlink" title="做题要求"></a>做题要求</h4><blockquote><p>要会看HTML源码<br>能读懂简单的PHP代码<br>懂一点点HTTP报文<br>学会使用burpsuite的repeater模块</p></blockquote><h4 id="常用工具"><a href="#常用工具" class="headerlink" title="常用工具"></a>常用工具</h4><blockquote><p>burpsuite<br>metasploit<br>AntSword<br>f12开发者工具 插件如hackbar等<br>ps:浏览器请使用 firefox/chrome</p></blockquote><h4 id="学习参考"><a href="#学习参考" class="headerlink" title="学习参考"></a>学习参考</h4><blockquote><p>学会使用搜索引擎搜索关键字以找到自己需要的学习资料<br>从别人的博客文章/官方文档中学习<br>书籍和视频中学到的大多是系统全面的知识,但是相应的效率便低了<br>针对性学习和系统性学习,需要每个人结合自身情况进行均衡</p></blockquote><p><code>cnss{flag_is_just_like_this}</code></p><h2 id="Web-02-baby-卖菜刀"><a href="#Web-02-baby-卖菜刀" class="headerlink" title="Web_02_(baby)卖菜刀"></a>Web_02_(baby)卖菜刀</h2><blockquote><p>卖菜刀,卖菜刀,3 元 1 把,10 元 3 把。<br>快让 X5tar 看看你的菜刀锋利不锋利!</p></blockquote><p><a href="http://recruit.x5tar.com:60003/" target="_blank" rel="noopener">http://recruit.x5tar.com:60003/</a></p><p><strong>PS:被某些杀软报毒属于正常现象,可以放心做题,本题不会对你的电脑产生任何不利影响</strong></p><p><em>hint1:PHP 一句话木马</em><br><em>hint2:也许黑色蒙蔽了你的双眼(</em></p><h3 id="解析"><a href="#解析" class="headerlink" title="解析"></a>解析</h3><p>F12审查元素之后,发现网页源码中有这样一句<br><code>?php @eval($_POST['x5tar']);</code><br>显然是一个标准格式的一句话木马,而且出题人已经将连接的密码给出来了,即‘’中的内容x5tar<br>于是直接用菜刀连接,笔者采用的是2011版本的中国菜刀<br>链接填写<em><a href="http://recruit.x5tar.com:60003/" target="_blank" rel="noopener">http://recruit.x5tar.com:60003/</a></em>,脚本类型选择PHP,编码标准不做改动,单击“连接”<br>成功连接之后,即可取得控制权限,在网页源码文件夹下找到一名为flag的文件,打开<br>发现 <code>cnss{The_fl4g_1n_/_is_fak3}</code> 出题人居然留了一手,好气!<br>依据提示,我们返回根目录下,发现真正的flag文件,打开为 <code>cnss{y0ur_ca1da0_1s_aw3s0m3}</code><br>Binggo!我们终于得到了正确的flag!</p><h2 id="Web-03-baby-更简单的计算题"><a href="#Web-03-baby-更简单的计算题" class="headerlink" title="Web_03_(baby)更简单的计算题"></a>Web_03_(baby)更简单的计算题</h2><p>有人说夏令营的计算题太难,怎么可能在一秒内算出🌶么大的数<br>所以招新出了一个更加简单的计算题<br>但是让你算出答案又能怎样<br><strong>你真的可以提交吗?</strong></p><p><a href="http://recruit.x5tar.com:60002/" target="_blank" rel="noopener">http://recruit.x5tar.com:60002/</a></p><p><em>hint1:HTML 属性</em><br><em>hint2:试试 F12?</em></p><h3 id="解析-1"><a href="#解析-1" class="headerlink" title="解析"></a>解析</h3><p>惯例,先观察页面。发现是一个8位数的加法,但是输入框只能填写5位数字!<br>F12检察元素,发现这样一行<br><code>input type="text" name="re" maxlength="5"</code><br>显然,它限制了我们提交答案的位数,直接更改之<br>但是发现,我们更改完成之后,“提交”的选项卡直接灰了,我们再回去看审查元素<br><code>input type="submit" value="提交" disabled=""</code><br>这样一行禁止了我们使用提交按钮。于是将其状态改为abled即可<br>提交正确的计算结果后我们直接在页面上得到返回的flag<br><code>恭喜你,计算正确🎉cnss{no_one_kno3s_htm1_b3tt3r_than_u}</code></p><h2 id="Web-04-easy-最好的语言?"><a href="#Web-04-easy-最好的语言?" class="headerlink" title="Web_04_(easy)最好的语言?"></a>Web_04_(easy)最好的语言?</h2><p>你知道最好的语言是什么吗?<br>没错!当然就是超有趣的 PHP 辣!</p><p><a href="http://recruit.x5tar.com:60004/" target="_blank" rel="noopener">http://recruit.x5tar.com:60004/</a></p><p><em>hint1:PHP 反序列化</em><br><em>hint2:CVE-2016-7124</em><br><em>hint3:protected 和 private 属性的序列化</em></p><h3 id="解析-2"><a href="#解析-2" class="headerlink" title="解析"></a>解析</h3><h2 id="施工中!!!Coming-Soon!!!"><a href="#施工中!!!Coming-Soon!!!" class="headerlink" title="施工中!!!Coming Soon!!!"></a><strong>施工中!!!Coming Soon!!!</strong></h2><h1 id="Reverse方向"><a href="#Reverse方向" class="headerlink" title="Reverse方向"></a>Reverse方向</h1><h2 id="Reverse-01-Baby-C-Code"><a href="#Reverse-01-Baby-C-Code" class="headerlink" title="Reverse_01_Baby C Code"></a>Reverse_01_Baby C Code</h2><p>题目要求<br>请运行并分析以下C++语言代码,找到满足条件的 flag</p><p>前置知识<br>1.流程控制<br>2.位运算</p><blockquote><p>#include <cstdio><br>#include <cstring><br>char flag[31];<br>char code[]={x8<br>0x9c,0x91,0x8c,0x8c,0x84,0x88,0xcc,0x93,0x9c,0xcf,<br>0x92,0x9a,0xa0,0xc8,0x90,0xa0,0x8d,0xcc,0x89,0xcc,<br>0x8d,0xca,0x9a,0xa0,0x88,0xcf,0x8d,0xce,0x9b,0x82};<br>int main()<br>{<br> scanf(“%30s”,flag);<br> if (strlen(flag)!=30) return 0;<br> for (int i=0;i<30;i++) if (~flag[i]!=code[i]) return 0;<br> printf(“Congratulation.”);<br> return 0;<br>}</cstring></cstdio></p></blockquote><h3 id="解析-3"><a href="#解析-3" class="headerlink" title="解析"></a>解析</h3><p>简单的查看一下代码,发现验证逻辑非常简单<br>总体而言就是一种很常见的凯撒密码的变体,其中位移量i的取值范围从0到30<br>结合CNSS做题须知里面的flag格式,再观察到code数组之中第3,4位相同,我们不难推出:<br>0x8c对应的时flag中的‘s’ 由于0x8c对应DEC的140,而‘s’的ASCII码值为115,满足i取值范围<br>因此我们编写解码程序,确定偏移量为-25,之后以字符形式输出即可<br>得到flag——<code>cnss{w3lc0me_7o_r3v3r5e_w0r1d}</code></p><p>Hello World!</p><p>输出 “Hi, CNSS!” 获得 flag</p><p>源码中不允许包含井号,即源码中不允许出现#</p><p>本题编译参数为/usr/bin/g++ -O2 -w -fmax-errors=3 -std=c++14 -lm</p><p>小小的增加了难度</p><p>Hello 5, 它又回来了!</p><p>CNSS招新传统题目!</p><p>输出 “Hi, CNSS!” 获得flag</p><p>源码中不允许包含 %:?#({<[]>})</p><p>通过后请带着 submit id 联系我</p><p>点我获得flag</p><p>PS. 不要去爆栈网或者知乎提问</p>]]></content>
<categories>
<category> ctf </category>
</categories>
<tags>
<tag> CNSS </tag>
<tag> CTF </tag>
<tag> Web </tag>
<tag> flag </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第七次作业解析-查找</title>
<link href="/post/420a3e9e.html"/>
<url>/post/420a3e9e.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><p>哈希表创建<br>哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。哈希表相关定义如下:</p><blockquote><p>typedef enum{<br> HASH_OK,<br> HASH_ERROR,<br> HASH_ADDED,<br> HASH_REPLACED_VALUE,<br> HASH_ALREADY_ADDED,<br> HASH_DELETED,<br> HASH_NOT_FOUND,<br>} HASH_RESULT;</p><p>typedef struct __HashEntry HashEntry;<br>struct __HashEntry{<br> union{<br> char *str_value;<br> double dbl_value;<br> int int_value;<br> } key;<br> union{<br> char *str_value;<br> double dbl_value;<br> int int_value;<br> long long_value;<br> void *ptr_value;<br> } value;<br> HashEntry *next;<br>};</p><p>struct __HashTable{<br> HashEntry **bucket;<br> int size;<br> HASH_RESULT last_error;<br>};<br>typedef struct __HashTable HashTable;</p><p>// 创建大小为hash_size的哈希表,创建成功后返回HashTable类型的指针,否则返回NULL。<br>HashTable *create_hash(int hash_size);</p><p>当成功插入顶点或边时,函数返回true,否则(如顶点或边已存在、插入边时顶点v或w不存在)返回false。</p></blockquote><p>哈希表相关说明:</p><blockquote><p>HASH_RESULT 类型为相关函数的返回类型<br>HashEntry 为哈希表所保存元素(即键值对 《key, value》)类型<br>HashTable 为哈希表,其中 bucket 指向大小为size的、元素类型为 HashEntry*的指针数组<br>哈希表采用链地址法处理冲突</p></blockquote><p>请实现 create_hash 函数,创建指定大小的哈希表。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-22, Mon, 02:08:46</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "hash.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line">#include <string.h></span><br><span class="line">HashTable* create_hash(int size)</span><br><span class="line">{</span><br><span class="line"> HashTable* H = (HashTable*)malloc(sizeof(HashTable));</span><br><span class="line"> H->bucket = (HashEntry**)malloc(sizeof(HashEntry**) * size);</span><br><span class="line"> if (!H->bucket) {</span><br><span class="line"> free(H);</span><br><span class="line"> return NULL;</span><br><span class="line"> }</span><br><span class="line"> memset(H, 0, sizeof(HashTable));</span><br><span class="line"> H->size = size;</span><br><span class="line"> return H;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><p>哈希表添加</p><p>哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。哈希表相关定义如下:</p><blockquote><p>typedef enum{<br> HASH_OK,<br> HASH_ERROR,<br> HASH_ADDED,<br> HASH_REPLACED_VALUE,<br> HASH_ALREADY_ADDED,<br> HASH_DELETED,<br> HASH_NOT_FOUND,<br>} HASH_RESULT;</p><p>typedef struct __HashEntry HashEntry;<br>struct __HashEntry{<br> union{<br> char *str_value;<br> double dbl_value;<br> int int_value;<br> } key;<br> union{<br> char *str_value;<br> double dbl_value;<br> int int_value;<br> long long_value;<br> void *ptr_value;<br> } value;<br> HashEntry *next;<br>};</p><p>struct __HashTable{<br> HashEntry **bucket;<br> int size;<br> HASH_RESULT last_error;<br>};<br>typedef struct __HashTable HashTable;</p><p>// 向哈希表中添加元素,其中键类型为char*, 元素类型为int。<br>HASH_RESULT hash_add_int(HashTable * table, const char * key, int value);</p></blockquote><p>哈希表相关说明:</p><blockquote><p>HASH_RESULT 类型为相关函数的返回类型<br>HashEntry 为哈希表所保存元素(即键值对 《key, value》)类型<br>HashTable 为哈希表,其中 bucket 指向大小为size的、元素类型为 HashEntry*的指针数组<br>哈希表采用链地址法处理冲突</p></blockquote><p>请实现 hash_add_int 函数,向哈希表中添加元素,其中键类型为char*, 元素类型为int。在添加过程中,如果要添加的键值key已在哈希表中,且对应的值value也已存在,则函数返回 HASH_ALREADY_ADDED;如果要添加的键值key已在哈希表中,但对应的值value不同,则函数将value值更新到哈希表中,之后返回 HASH_REPLACED_VALUE;如果要添加的键值key不在哈希表中,则函数创建 HashEntry 类型,并将其加入到哈希表中,且函数返回 HASH_ADDED。本题所用的哈希函数如下:</p><blockquote><p>long hash_string(const char <em>str)<br>{<br> long hash = 5381;<br> int c;<br> while (c = *str++)<br> hash = ((hash << 5) + hash) + c; /</em> hash * 33 + c */<br> if(hash < 0)<br> hash *= -1;<br> return hash;<br>}</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-22, Mon, 02:10:56</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "hash.h"</span><br><span class="line">#include "stdlib.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <string.h></span><br><span class="line"></span><br><span class="line">int Find(HashTable* table, const char* key, int value, long keyhash)</span><br><span class="line">{</span><br><span class="line"> HashEntry* Head = table->bucket[keyhash];</span><br><span class="line"></span><br><span class="line"> while (Head && strcmp(Head->key.str_value, key)) {</span><br><span class="line"> Head = Head->next;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> if (!Head)</span><br><span class="line"> return -1;</span><br><span class="line"> else if (Head->value.int_value == value)</span><br><span class="line"> return 1;</span><br><span class="line"> else {</span><br><span class="line"> Head->value.int_value = value;</span><br><span class="line"> return 0;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">HASH_RESULT hash_add_int(HashTable* table, const char* key, int value)</span><br><span class="line">{</span><br><span class="line"> int p;</span><br><span class="line"> long keyhash = hash_string(key) % table->size;</span><br><span class="line"> p = Find(table, key, value, keyhash);</span><br><span class="line"></span><br><span class="line"> if (p == -1) {</span><br><span class="line"> HashEntry* Node = (HashEntry*)malloc(sizeof(HashEntry));</span><br><span class="line"> if (!Node)</span><br><span class="line"> return HASH_ERROR;</span><br><span class="line"> Node->key.str_value = (char*)malloc(100);</span><br><span class="line"> if (Node->key.str_value == NULL) {</span><br><span class="line"> return HASH_ERROR;</span><br><span class="line"> }</span><br><span class="line"> Node->key.str_value = (char*)key;</span><br><span class="line"> Node->value.int_value = value;</span><br><span class="line"> //Node->next = table->bucket[keyhash]; //?</span><br><span class="line"> table->bucket[keyhash] = Node;</span><br><span class="line"> return HASH_ADDED;</span><br><span class="line"> } else if (p == 0)</span><br><span class="line"> return HASH_REPLACED_VALUE;</span><br><span class="line"> else</span><br><span class="line"> return HASH_ALREADY_ADDED;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T3"><a href="#T3" class="headerlink" title="T3"></a>T3</h1><p>AVL添加</p><p>平衡二叉树,是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。它是一种高度平衡的二叉排序树。现二叉平衡树结点定义如下:</p><blockquote><p>typedef struct node<br>{<br> int val;<br> struct node *left;<br> struct node *right;<br> struct node *parent;<br> int height;<br>} node_t;</p></blockquote><p>请实现平衡二叉树的插入算法:</p><blockquote><p>//向根为 root 的平衡二叉树插入新元素 val,成功后返回新平衡二叉树根结点<br>node_t *avl_insert(node_t *root, int val);</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-22, Mon, 02:12:15</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "avl.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">node_t* Insert(node_t* T, int X);</span><br><span class="line">int GetHeight(node_t* T);</span><br><span class="line">int Max(int a, int b);</span><br><span class="line">node_t* SingleLeftRotation(node_t* A);</span><br><span class="line">node_t* DoubleLeftRightRotation(node_t* A);</span><br><span class="line">node_t* SingleRightRotation(node_t* A);</span><br><span class="line">node_t* DoubleRightLeftRotation(node_t* A);</span><br><span class="line"></span><br><span class="line">int Max(int a, int b)</span><br><span class="line">{</span><br><span class="line"> return a > b ? a : b;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">int GetHeight(node_t* T)</span><br><span class="line">{</span><br><span class="line"> if (T)</span><br><span class="line"> return T->height;</span><br><span class="line"> else</span><br><span class="line"> return 0;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">node_t* SingleLeftRotation(node_t* A)</span><br><span class="line">{</span><br><span class="line"> node_t* B;</span><br><span class="line"> B = A->left;</span><br><span class="line"> A->left = B->right;</span><br><span class="line"> B->right = A;</span><br><span class="line"> A->height = Max(GetHeight(A->left), GetHeight(A->right)) + 1;</span><br><span class="line"> B->height = Max(GetHeight(B->left), GetHeight(B->right)) + 1;</span><br><span class="line"> return B;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">node_t* DoubleLeftRightRotation(node_t* A)</span><br><span class="line">{</span><br><span class="line"> A->left = SingleRightRotation(A->left);</span><br><span class="line"> return SingleLeftRotation(A);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">node_t* SingleRightRotation(node_t* A)</span><br><span class="line">{</span><br><span class="line"> node_t* B;</span><br><span class="line"> B = A->right;</span><br><span class="line"> A->right = B->left;</span><br><span class="line"> B->left = A;</span><br><span class="line"> A->height = Max(GetHeight(A->left), GetHeight(A->right)) + 1;</span><br><span class="line"> B->height = Max(GetHeight(B->left), GetHeight(B->right)) + 1;</span><br><span class="line"> return B;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">node_t* DoubleRightLeftRotation(node_t* A)</span><br><span class="line">{</span><br><span class="line"> A->right = SingleLeftRotation(A->right);</span><br><span class="line"> return SingleRightRotation(A);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">node_t* avl_insert(node_t* root, int val)</span><br><span class="line">{</span><br><span class="line"> node_t* parentNode = NULL;</span><br><span class="line"> if (!root) {</span><br><span class="line"> root = (node_t*)malloc(sizeof(node_t));</span><br><span class="line"> root->left = root->right = root->parent = NULL;</span><br><span class="line"> root->val = val;</span><br><span class="line"> root->height = 1;</span><br><span class="line"> } else if (val < root->val) {</span><br><span class="line"> parentNode = root->left;</span><br><span class="line"> root->left = avl_insert(root->left, val);</span><br><span class="line"> if (GetHeight(root->left) - GetHeight(root->right) == 2) {</span><br><span class="line"> if (val < root->left->val)</span><br><span class="line"> root = SingleLeftRotation(root);</span><br><span class="line"> else {</span><br><span class="line"> root = DoubleLeftRightRotation(root);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> } else if (val > root->val) {</span><br><span class="line"> parentNode = root->left;</span><br><span class="line"> root->right = avl_insert(root->right, val);</span><br><span class="line"> if (GetHeight(root->right) - GetHeight(root->left) == 2) {</span><br><span class="line"> if (val > root->right->val)</span><br><span class="line"> root = SingleRightRotation(root);</span><br><span class="line"> else</span><br><span class="line"> root = DoubleRightLeftRotation(root);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> root->parent = parentNode;</span><br><span class="line"> root->height = Max(GetHeight(root->left), GetHeight(root->right)) + 1;</span><br><span class="line"> return root;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 查找 </tag>
<tag> 哈希表 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第六次作业解析-图的储存</title>
<link href="/post/2a6df9f7.html"/>
<url>/post/2a6df9f7.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><p>邻接矩阵<br>试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下:</p><blockquote><p>typedef int VertexType;</p><p>typedef enum{<br> DG, UDG<br>}GraphType;</p><p>typedef struct{<br> VertexType vertex[MAX_VERTEX_NUM]; //顶点向量<br> int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵<br> int vexnum, arcnum; //图的当前顶点数和弧数<br> GraphType type; //图的种类标志<br>}MatrixGraph;</p><p>int matrix_locate_vertex(MatrixGraph MG, VertexType vex); //返回顶点 v 在vertex数组中的下标,如果v不存在,返回-1<br>bool matrix_insert_vertex(MatrixGraph G, VertexType v);<br>bool matrix_insert_arc(MatrixGraph *G, VertexType v, VertexType w);</p></blockquote><p>当成功插入顶点或边时,函数返回true,否则(如顶点或边已存在、插入边时顶点v或w不存在)返回false。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-10, Wed, 13:06:59</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "graph.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line"></span><br><span class="line">bool matrix_insert_vertex(MatrixGraph* G, VertexType v)</span><br><span class="line">{</span><br><span class="line"> if (matrix_locate_vertex(G, v) != -1 || G->vexnum + 1 >= MAX_VERTEX_NUM)</span><br><span class="line"> return false;</span><br><span class="line"> G->vertex[G->vexnum] = v;</span><br><span class="line"> G->vexnum++;</span><br><span class="line"> for (int i = 0; i < G->vexnum; i++)</span><br><span class="line"> G->arcs[i][G->vexnum - 1] = G->arcs[G->vexnum - 1][i] = 0;</span><br><span class="line"> return true;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">bool matrix_insert_arc(MatrixGraph* G, VertexType v, VertexType w)</span><br><span class="line">{</span><br><span class="line"> int i = matrix_locate_vertex(G, v), j = matrix_locate_vertex(G, w);</span><br><span class="line"> if (i == -1 || j == -1)</span><br><span class="line"> return false;</span><br><span class="line"> else if (G->arcs[i][j] == 1)</span><br><span class="line"> return false;</span><br><span class="line"> else {</span><br><span class="line"> G->arcs[i][j] = 1;</span><br><span class="line"> G->arcs[j][i] = 1;</span><br><span class="line"> }</span><br><span class="line"> G->arcnum += 1;</span><br><span class="line"> return true;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><p>邻接表1<br>试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:</p><blockquote><p>typedef int VertexType;</p><p>typedef enum{<br> DG, UDG<br>}GraphType;</p><p>typedef struct ArcNode<br>{<br> int adjvex;<br> InfoPtr *info;<br> struct ArcNode *nextarc;</p><p>}ArcNode;</p><p>typedef struct VNode<br>{<br> VertexType data;<br> ArcNode *firstarc;<br>}VNode;<br>typedef struct<br>{<br> VNode vertex[MAX_VERTEX_NUM];<br> int vexnum, arcnum;<br> GraphType type;<br>}ListGraph;</p><p>int locate_vertex(ListGraph* G, VertexType v); //返回顶点 v 在vertex数组中的下标,如果v不存在,返回-1<br>bool insert_vertex(ListGraph <em>G, VertexType v);<br>bool insert_arc(ListGraph *G, VertexType v, VertexType w);<br>bool is_empty(Stack</em> S); // 栈为空时返回 true,否则返回 false</p></blockquote><p>当成功插入顶点或边时,函数返回true,否则(如顶点或边已存在、插入边时顶点v或w不存在)返回false。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-12, Thu, 16:07:33</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "graph.h" //请勿删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line"></span><br><span class="line">bool insert_vertex(ListGraph* G, VertexType v)</span><br><span class="line">{</span><br><span class="line"> if (locate_vertex(G, v) != -1 || G->vexnum + 1 >= MAX_VERTEX_NUM)</span><br><span class="line"> return false;</span><br><span class="line"> G->vertex[G->vexnum].data = v;</span><br><span class="line"> G->vertex[G->vexnum].firstarc = NULL;</span><br><span class="line"> G->vexnum++;</span><br><span class="line"> return true;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">bool insert_arc(ListGraph* G, VertexType v, VertexType w)</span><br><span class="line">{</span><br><span class="line"> if (locate_vertex(G, v) == -1 || locate_vertex(G, w) == -1)</span><br><span class="line"> return false;</span><br><span class="line"> return true;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T3"><a href="#T3" class="headerlink" title="T3"></a>T3</h1><p>邻接表2<br>试在邻接表存储结构上实现图的基本操作 del_vertex,相关定义如下:</p><blockquote><p>typedef int VertexType;</p><p>typedef enum{<br> DG, UDG<br>}GraphType;</p><p>typedef struct ArcNode{<br> int adjvex;<br> InfoPtr info;<br> struct ArcNode nextarc;<br>}ArcNode;</p><p>typedef struct VNode{<br> VertexType data;<br> ArcNode firstarc;<br>}VNode;<br>typedef struct{<br> VNode vertex[MAX_VERTEX_NUM];<br> int vexnum, arcnum;<br> GraphType type;<br>}ListGraph;</p><p>int locate_vertex(ListGraph *G, VertexType v); //返回顶点 v 在vertex数组中的下标,如果v不存在,返回-1<br>bool del_vertex(ListGraph *G, VertexType v); //删除顶点 v</p></blockquote><p>当成功删除顶点或边时,函数返回true,否则(如顶点或边不存在、删除边时顶点v或w不存在)返回false。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-06-13, Sat, 11:09:26</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "graph.h" //请勿删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line"></span><br><span class="line">bool del_vertex(ListGraph* G, VertexType v)</span><br><span class="line">{</span><br><span class="line"> int t = locate_vertex(G, v), i;</span><br><span class="line"> if (t < 0)</span><br><span class="line"> return false;</span><br><span class="line"> ArcNode *q, *p;</span><br><span class="line"> p = G->vertex[t].firstarc;</span><br><span class="line"> while (p) {</span><br><span class="line"> q = p;</span><br><span class="line"> p = p->nextarc;</span><br><span class="line"> free(q);</span><br><span class="line"> G->arcnum--;</span><br><span class="line"> }</span><br><span class="line"> G->vertex[t].firstarc = NULL;</span><br><span class="line"> for (i = 0; i < G->vexnum; i++) {</span><br><span class="line"> p = G->vertex[i].firstarc;</span><br><span class="line"> while (p && p->adjvex != t) {</span><br><span class="line"> q = p;</span><br><span class="line"> p = p->nextarc;</span><br><span class="line"> }</span><br><span class="line"> if (p && p->adjvex == t) {</span><br><span class="line"> if (p == G->vertex[i].firstarc) {</span><br><span class="line"> G->vertex[i].firstarc = p->nextarc;</span><br><span class="line"> free(p);</span><br><span class="line"> } else {</span><br><span class="line"> q->nextarc = p->nextarc;</span><br><span class="line"> free(p);</span><br><span class="line"> }</span><br><span class="line"> G->arcnum--;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> for (i = t + 1; i < G->vexnum; i++) {</span><br><span class="line"> G->vertex[i - 1] = G->vertex[i];</span><br><span class="line"> }</span><br><span class="line"> G->vexnum--;</span><br><span class="line"> return true;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 图 </tag>
<tag> 储存 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第五次作业解析-树二叉树</title>
<link href="/post/baa44d8a.html"/>
<url>/post/baa44d8a.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><p>先序遍历<br>已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法:</p><blockquote><p>void pre_order(BiTree root);</p></blockquote><p>在遍历过程中,pre_order函数需要调用 visit_node 函数来实现对结点的访问,该函数声明如下:</p><blockquote><p>void visit_node(BiTNode *node);</p></blockquote><p>二叉树的相关定义如下:</p><blockquote><p>typedef int DataType;</p><p>typedef struct Node{<br> DataType data;<br> struct Node* left;<br> struct Node* right;<br>}BiTNode, *BiTree;</p></blockquote><p>遍历所使用栈的相关操作如下:</p><blockquote><p>#define Stack_Size 50<br>typedef BiTNode* ElemType;<br>typedef struct{<br> ElemType elem[Stack_Size];<br> int top;<br>}Stack;</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-05-10, Sun, 17:50:25</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "bitree.h" //请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void pre_order(BiTree root)</span><br><span class="line">{</span><br><span class="line"> BiTNode* p;</span><br><span class="line"> Stack s;</span><br><span class="line"> p = root;</span><br><span class="line"> init_stack(&s);</span><br><span class="line"> while (p || !is_empty(&s)) {</span><br><span class="line"> if (p != NULL) {</span><br><span class="line"> visit_node(p);</span><br><span class="line"> push(&s, p);</span><br><span class="line"> p = p->left;</span><br><span class="line"> } else {</span><br><span class="line"> pop(&s, &p);</span><br><span class="line"> p = p->right;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><p>路径<br>假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点,编写函数 path,计算root到 node 之间的路径,(该路径包括root结点和 node 结点)。path 函数声明如下:</p><blockquote><p>bool path(BiTNode* root, BiTNode* node, Stack* s);</p></blockquote><p>其中,root指向二叉树的根结点,node指向二叉树中的另一结点,s 为已经初始化好的栈,该栈用来保存函数所计算的路径,如正确找出路径,则函数返回 true,此时root在栈底,node在栈顶;如未找到,则函数返回 false, 二叉树的相关定义如下:</p><blockquote><p>typedef int DataType;</p><p>typedef struct Node{<br> DataType data;<br> struct Node* left;<br> struct Node* right;<br>}BiTNode, *BiTree;</p></blockquote><p>栈的相关定义及操作如下:</p><blockquote><p>#define Stack_Size 50<br>typedef BiTNode* ElemType;<br>typedef struct{<br> ElemType elem[Stack_Size];<br> int top;<br>}Stack;</p><p>void init_stack(Stack <em>S); // 初始化栈<br>bool push(Stack</em> S, ElemType x); //x 入栈<br>bool pop(Stack* S, ElemType <em>px); //出栈,元素保存到px所指的单元,函数返回true,栈为空时返回 false<br>bool top(Stack</em> S, ElemType <em>px); //获取栈顶元素,将其保存到px所指的单元,函数返回true,栈满时返回 false<br>bool is_empty(Stack</em> S); // 栈为空时返回 true,否则返回 false</p></blockquote><p>在提示中,树用缩进的形式展示,如二叉树【pic】,其缩进形式为:【pic】</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-05-10, Sun, 18:00:41</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "bitree.h" //请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">bool path(BiTNode* root, BiTNode* node, Stack* s)</span><br><span class="line">{</span><br><span class="line"> BiTree Tr = root, p = NULL;</span><br><span class="line"> if (Tr == NULL || node == NULL || !is_empty(s))</span><br><span class="line"> return false;</span><br><span class="line"> while (Tr || !is_empty(s)) {</span><br><span class="line"> while (Tr) {</span><br><span class="line"> push(s, Tr);</span><br><span class="line"> if (Tr == node)</span><br><span class="line"> return true;</span><br><span class="line"> Tr = Tr->left;</span><br><span class="line"> }</span><br><span class="line"> top(s, &Tr);</span><br><span class="line"> if (!Tr->right || Tr->right == p) {</span><br><span class="line"> p = Tr;</span><br><span class="line"> pop(s, &Tr);</span><br><span class="line"> Tr = NULL;</span><br><span class="line"> } else</span><br><span class="line"> Tr = Tr->right;</span><br><span class="line"> }</span><br><span class="line"> return false;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T3"><a href="#T3" class="headerlink" title="T3"></a>T3</h1><p>共同祖先<br>假设二叉树采用二叉链表方式存储, root指向根结点,p所指结点和q所指结点为二叉树中的两个结点,编写一个计算它们的最近的共同祖先,函数定义如下:</p><blockquote><p>BiTNode * nearest_ancestor(BiTree root, BiTNode *p, BiTNode *q);</p></blockquote><p>其中 root 指向二叉树的根结点,p 和 q 分别指向二叉树中的两个结点。<br>提示:在完成本题时,可利用 path 函数获取p和q两个结点到根结点之间的路径,之后再计算两条公共路径得出最近的共同祖先。path函数及栈相关定义如下:</p><blockquote><p>bool path(BiTNode* root, BiTNode* node, Stack* s);</p><p>#define Stack_Size 50<br>typedef BiTNode* ElemType;<br>typedef struct{<br> ElemType elem[Stack_Size];<br> int top;<br>}Stack;</p><p>void init_stack(Stack <em>S); // 初始化栈<br>bool push(Stack</em> S, ElemType x); //x 入栈<br>bool pop(Stack* S, ElemType <em>px); //出栈,元素保存到px所指的单元,函数返回true,栈为空时返回 false<br>bool top(Stack</em> S, ElemType <em>px); //获取栈顶元素,将其保存到px所指的单元,函数返回true,栈满时返回 false<br>bool is_empty(Stack</em> S); // 栈为空时返回 true,否则返回 false</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-05-10, Sun, 17:54:08</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "bitree.h" //请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">BiTNode* nearest_ancestor(BiTree root, BiTNode* p, BiTNode* q)</span><br><span class="line">{</span><br><span class="line"> Stack *pl, *ql;</span><br><span class="line"> pl = malloc(sizeof(Stack));</span><br><span class="line"> ql = malloc(sizeof(Stack));</span><br><span class="line"> init_stack(pl);</span><br><span class="line"> init_stack(ql);</span><br><span class="line"> if (path(root, p, pl) == false || path(root, q, ql) == false)</span><br><span class="line"> return NULL;</span><br><span class="line"></span><br><span class="line"> ElemType temp;</span><br><span class="line"> for (int i = 0; i <= pl->top && i < ql->top; i++) {</span><br><span class="line"> if (pl->elem[i] != ql->elem[i])</span><br><span class="line"> break;</span><br><span class="line"> else</span><br><span class="line"> temp = pl->elem[i];</span><br><span class="line"> }</span><br><span class="line"> return temp;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T4"><a href="#T4" class="headerlink" title="T4"></a>T4</h1><p>树转二叉树<br>使用队列,编写transfrom函数,将普通树转换成对应的二叉树。二叉树的相关定义如下:</p><blockquote><p>typedef int DataType;</p><p>typedef struct Node{<br> DataType data;<br> struct Node* left;<br> struct Node* right;<br>}BiTNode, *BiTree;</p></blockquote><p>普通树节点的定义如下:</p><blockquote><p>#define MAX_CHILDREN_NUM 5<br>struct _CSNode<br>{<br> DataType data;<br> struct _CSNode *children[MAX_CHILDREN_NUM];<br>};<br>typedef struct _CSNode CSNode;</p></blockquote><p>其中,子树的根节点的指针存放在children数组的前k个元素中,即如果children[i]的值为NULL,而children[i-1]不为NULL,则表明该结点只有i棵子树,子树根结点分别保存在children[0]至children[i-1]中。<br>队列相关定义及操作如下:</p><blockquote><p>struct __Queue<br>{<br> int i, j; //指向数组内元素的游标<br> void **array;<br>};<br>typedef struct __Queue Queue;</p><p>Queue* create_queue(); //创建队列<br>bool is_empty_queue(Queue <em>tree); //队为空返回true,不为空时返回false<br>void</em> del_queue(Queue *tree); //结点指针出队<br>void add_queue(Queue *tree, void *node); //结点指针入队<br>void free_queue(Queue *tree); //释放队列</p></blockquote><p>transform函数定义如下:</p><blockquote><p>BiTNode* transform(CSNode *root);</p></blockquote><p>其中 root 为普通树的根结点,函数返回该树对应二叉树的根结点。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-05-10, Sun, 17:57:54</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "bitree.h" //请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">BiTNode* transform(CSNode* root)</span><br><span class="line">{</span><br><span class="line"> if (root == NULL)</span><br><span class="line"> return NULL;</span><br><span class="line"></span><br><span class="line"> BiTree broot = (BiTree)malloc(sizeof(struct Node));</span><br><span class="line"> broot->data = root->data;</span><br><span class="line"> broot->left = broot->right = NULL;</span><br><span class="line"></span><br><span class="line"> Queue* queue = create_queue();</span><br><span class="line"> Queue* bqueue = create_queue();</span><br><span class="line"> add_queue(queue, root);</span><br><span class="line"> add_queue(bqueue, broot);</span><br><span class="line"> while (!is_empty_queue(queue)) {</span><br><span class="line"> CSNode* node = del_queue(queue);</span><br><span class="line"> BiTree bTreeNode = del_queue(bqueue);</span><br><span class="line"> int i;</span><br><span class="line"> BiTree former = NULL;</span><br><span class="line"> for (i = 0; i < MAX_CHILDREN_NUM; i++) {</span><br><span class="line"> if (node->children[i]) {</span><br><span class="line"> BiTree bnode = (BiTree)malloc(sizeof(struct Node));</span><br><span class="line"> bnode->left = bnode->right = NULL;</span><br><span class="line"> bnode->data = node->children[i]->data;</span><br><span class="line"> if (i == 0)</span><br><span class="line"> bTreeNode->left = bnode;</span><br><span class="line"> else</span><br><span class="line"> former->right = bnode;</span><br><span class="line"> former = bnode;</span><br><span class="line"></span><br><span class="line"> add_queue(queue, node->children[i]);</span><br><span class="line"> add_queue(bqueue, bnode);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> free(queue->array);</span><br><span class="line"> free(queue);</span><br><span class="line"> free(bqueue->array);</span><br><span class="line"> free(bqueue);</span><br><span class="line"> return broot;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 树 </tag>
<tag> 二叉树 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第四次作业解析-块链串/数组</title>
<link href="/post/716e4956.html"/>
<url>/post/716e4956.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><ol><li>块链串</li></ol><p>块链串定义如下:</p><blockquote><p>#define BLOCK_SIZE 4 // 可由用户定义的块大小<br>#define BLS_BLANK ‘#’ // 用于空白处的补齐字符</p><p>typedef struct _block {<br> char ch[BLOCK_SIZE]; //块的数据域<br> struct _block *next; //块的指针域<br>} Block;</p><p>typedef struct {<br> Block *head; // 串的头指针<br> Block *tail; // 串的尾指针<br> int len; // 串的当前长度<br>} BLString;</p><p>//字符串初始化函数:<br>void blstr_init(BLString *T) {<br> T->len = 0;<br> T->head = NULL;<br> T->tail = NULL;<br>}</p></blockquote><p>这些定义已包含在头文件 dsstring.h 中,请实现块链串的子串查找操作:</p><blockquote><p>bool blstr_substr(BLString src, int pos, int len, BLString *sub);<br>src为要查找的字符串<br>pos为子串开始的下标<br>len为子串的长度<br>sub在函数调用运行前指向一个已经初始化好的空串,在函数返回时,sub指向串src从第pos个字符起长度为len的子串<br>函数查找成功返回true,参数不正确返回 false </p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-04-19, Sun, 16:05:30</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "dsstring.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">bool blstr_substr(BLString src, int pos, int len, BLString* sub)</span><br><span class="line">{</span><br><span class="line"> if (pos < 0 || pos >= src.len || len < 1)</span><br><span class="line"> return false;</span><br><span class="line"> Block *p = (sub->head = (Block*)malloc(sizeof(Block))), *q = src.head;</span><br><span class="line"> int i = 0, j = 0, k = 0;</span><br><span class="line"> p->next = NULL;</span><br><span class="line"> while (k <= pos + len - 1 && q && q->ch[i] != BLS_BLANK) {</span><br><span class="line"> if (k < pos) {</span><br><span class="line"> if (i < BLOCK_SIZE - 1)</span><br><span class="line"> i++;</span><br><span class="line"> else {</span><br><span class="line"> q = q->next;</span><br><span class="line"> i = 0;</span><br><span class="line"> }</span><br><span class="line"> k++;</span><br><span class="line"> } else {</span><br><span class="line"> p->ch[j] = q->ch[i];</span><br><span class="line"> if (i < BLOCK_SIZE - 1)</span><br><span class="line"> i++;</span><br><span class="line"> else {</span><br><span class="line"> q = q->next;</span><br><span class="line"> i = 0;</span><br><span class="line"> }</span><br><span class="line"> if (j < BLOCK_SIZE - 1)</span><br><span class="line"> j++;</span><br><span class="line"> else {</span><br><span class="line"> p->next = (Block*)malloc(sizeof(Block));</span><br><span class="line"> p = p->next;</span><br><span class="line"> p->next = NULL;</span><br><span class="line"> j = 0;</span><br><span class="line"> }</span><br><span class="line"> k++;</span><br><span class="line"> sub->len++;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> if (j) {</span><br><span class="line"> sub->tail = p;</span><br><span class="line"> while (j < BLOCK_SIZE)</span><br><span class="line"> p->ch[j++] = BLS_BLANK;</span><br><span class="line"> } else {</span><br><span class="line"> for (sub->tail = sub->head; sub->tail->next != p; sub->tail = sub->tail->next)</span><br><span class="line"> ;</span><br><span class="line"> sub->tail->next = NULL;</span><br><span class="line"> free(p);</span><br><span class="line"> }</span><br><span class="line"> return true;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><ol><li>矩阵加法<br>实现三元组表示的两个稀疏矩阵的加法。相关定义如下:<blockquote><p>#define MAXSIZE 100 //假设非零元个数的最大值为100<br>typedef struct {</p><pre><code>int i,j; //非零元的行下标和列下标,i 和 j 从 1 开始计数,与数学中矩阵元素的编号一致ElemType e; //非零元的值</code></pre><p>}Triple;</p><p>typedef struct {</p><pre><code>Triple data[MAXSIZE]; // 非零元三元组表int m, n, len; // 矩阵的行数、列数和非零元个数</code></pre><p>}TSMatrix;</p></blockquote></li></ol><p>在三元组中,i 和 j 从 1 开始计数,与数学中矩阵元素的编号一致<br>矩阵加法函数的原型为:</p><blockquote><p>bool add_matrix(const TSMatrix *pM, const TSMatrix *pN, TSMatrix *pQ);</p></blockquote><p>pM, pN, pQ 分别指向三个矩阵,当 pM 和 pN 两个矩阵不可加时,函数返回 false,否则函数返回 true,且 pQ 指向两个矩阵的和。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-04-19, Sun, 16:10:16</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "tsmatrix.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">bool add_matrix(const TSMatrix* pM, const TSMatrix* pN, TSMatrix* pQ)</span><br><span class="line">{</span><br><span class="line"> TSMatrix *M = pM, *N = pN, *Q = pQ;</span><br><span class="line"> if (M->m != N->m || M->n != N->n) {</span><br><span class="line"> return false;</span><br><span class="line"> }</span><br><span class="line"> int i = 0, j = 0, k = 0;</span><br><span class="line"> Q->m = M->m, Q->n = M->n, Q->len = 0;</span><br><span class="line"> while (i < M->len && j < N->len) {</span><br><span class="line"> if (M->data[i].i < N->data[j].i || (M->data[i].i == N->data[j].i && M->data[i].j < N->data[j].j)) {</span><br><span class="line"> Q->data[k].i = M->data[i].i;</span><br><span class="line"> Q->data[k].j = M->data[i].j;</span><br><span class="line"> Q->data[k].e = M->data[i].e;</span><br><span class="line"> Q->len++, k++, i++;</span><br><span class="line"> } else if (M->data[i].i == N->data[j].i && M->data[i].j == N->data[j].j) {</span><br><span class="line"> if (M->data[i].e + N->data[j].e) {</span><br><span class="line"> Q->data[k].i = M->data[i].i;</span><br><span class="line"> Q->data[k].j = M->data[i].j;</span><br><span class="line"> Q->data[k].e = M->data[i].e + N->data[j].e;</span><br><span class="line"> k++, Q->len++;</span><br><span class="line"> }</span><br><span class="line"> i++, j++;</span><br><span class="line"> } else {</span><br><span class="line"> Q->len++;</span><br><span class="line"> Q->data[k].i = N->data[i].i;</span><br><span class="line"> Q->data[k].j = N->data[i].j;</span><br><span class="line"> Q->data[k] = N->data[j];</span><br><span class="line"> k++, j++;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> while (i < M->len) {</span><br><span class="line"> Q->len++;</span><br><span class="line"> Q->data[k] = M->data[i];</span><br><span class="line"> k++, i++;</span><br><span class="line"> }</span><br><span class="line"> while (j < N->len) {</span><br><span class="line"> Q->len++;</span><br><span class="line"> Q->data[k] = N->data[j];</span><br><span class="line"> k++, j++;</span><br><span class="line"> }</span><br><span class="line"> return true;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T3"><a href="#T3" class="headerlink" title="T3"></a>T3</h1><ol><li>十字链表<br>十字链表相关定义如下:<blockquote><p>typedef int ElemType;</p><p>// 非零元素结点结构<br>typedef struct OLNode<br>{</p><pre><code>int row,col;ElemType value;struct OLNode *right,*down;</code></pre><p>}OLNode,*OLink;</p><p>// 十字链表结构<br>typedef struct<br>{</p><pre><code>OLink *rowhead,*colhead;int rows,cols,nums;</code></pre><p>}CrossList, *PCrossList;</p></blockquote></li></ol><p>1)实现十字链表的初始化操作:</p><blockquote><p>int init_cross_list(PCrossList L, const ElemType *A, int m, int n);</p></blockquote><p>其中 L 指向 CrossList 结构,且各成员已被初始化为0;<br>A 为 ElemType 类型数组中第一个元素的地址,元素的个数为 m×n 个,按行优先存储(即A[0] 为十字链表第1行第1列的元素;<br>A[1] 为第1行第2列的元素,A[n] 为第2行第1列的元素,A[n+1] 为第2行第2个元素);<br>m 表示十字链表的行数,n 表示十字链表的列数。<br>init_cross_list 函数将 ElemType 数组中非0元素保存到十字链表中,函数返回非 0 元素的个数。</p><p>2)实现十字链表的删除操作:</p><blockquote><p>int del_cross_list(PCrossList L, ElemType k);</p></blockquote><p>其中 L 指向 要处理的 CrossList 结构,k 为要删除的元素;<br>del_cross_list 函数删除十字链表中所有值为 k 的结点,并返回删除结点的个数。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-04-19, Sun, 16:15:09</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "crosslist.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">int init_cross_list(PCrossList L, const ElemType* A, int m, int n)</span><br><span class="line">{</span><br><span class="line"> OLNode *p, *q;</span><br><span class="line"> int i = 0, j = 0, k = 0;</span><br><span class="line"> L->rows = m;</span><br><span class="line"> L->cols = n;</span><br><span class="line"> L->nums = 0;</span><br><span class="line"></span><br><span class="line"> L->rowhead = (OLink*)malloc((m + 1) * sizeof(OLNode));</span><br><span class="line"> for (j = 0; j <= m; ++j) {</span><br><span class="line"> L->rowhead[j] = NULL;</span><br><span class="line"> }</span><br><span class="line"> L->colhead = (OLink*)malloc((n + 1) * sizeof(OLNode));</span><br><span class="line"> for (j = 0; j <= n; ++j) {</span><br><span class="line"> L->colhead[j] = NULL;</span><br><span class="line"> }</span><br><span class="line"> for (k = 1; k <= m * n; ++k) {</span><br><span class="line"> if (A[k - 1] != 0) {</span><br><span class="line"> p = (OLink)malloc(sizeof(OLNode));</span><br><span class="line"> p->row = ((k - 1) / n);</span><br><span class="line"> p->col = k - (p->row * n) - 1;</span><br><span class="line"> p->value = A[k - 1];</span><br><span class="line"> p->right = NULL;</span><br><span class="line"> p->down = NULL;</span><br><span class="line"> L->nums++;</span><br><span class="line"> i = p->row;</span><br><span class="line"> if (L->rowhead[i] == NULL) {</span><br><span class="line"> L->rowhead[i] = p;</span><br><span class="line"> } else {</span><br><span class="line"> for (q = L->rowhead[i]; q->right && q->right->col < p->col; q = q->right)</span><br><span class="line"> ;</span><br><span class="line"> p->right = q->right;</span><br><span class="line"> q->right = p;</span><br><span class="line"> }</span><br><span class="line"> i = p->col;</span><br><span class="line"> if (L->colhead[i] == NULL) {</span><br><span class="line"> L->colhead[i] = p;</span><br><span class="line"> } else {</span><br><span class="line"> for (q = L->colhead[i]; q->down && q->down->row < p->row; q = q->down)</span><br><span class="line"> ;</span><br><span class="line"> p->down = q->down;</span><br><span class="line"> q->down = p;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> return L->nums;</span><br><span class="line">}</span><br><span class="line">int del_cross_list(PCrossList L, ElemType k)</span><br><span class="line">{</span><br><span class="line"> int i = 0, t = 0;</span><br><span class="line"> OLink temp;</span><br><span class="line"> OLink p = NULL;</span><br><span class="line"> OLink templeft = NULL;</span><br><span class="line"> OLink tempup = NULL;</span><br><span class="line"> for (i = 0; i < L->rows; i++) {</span><br><span class="line"> if (L->rowhead[i] == NULL) {</span><br><span class="line"> continue;</span><br><span class="line"> }</span><br><span class="line"> for (p = L->rowhead[i], temp = p->right; p != NULL; p = temp) {</span><br><span class="line"> temp = p->right;</span><br><span class="line"> if (p->value == k) {</span><br><span class="line"> for (templeft = L->rowhead[i]; templeft->right && templeft->right->col < p->col; templeft = templeft->right)</span><br><span class="line"> ;</span><br><span class="line"> for (tempup = L->colhead[p->col]; tempup->down != NULL && tempup->down->row < p->row; tempup = tempup->down)</span><br><span class="line"> ;</span><br><span class="line"> if (templeft == p) {</span><br><span class="line"> if (tempup == p) {</span><br><span class="line"> L->rowhead[i] = p->right;</span><br><span class="line"> L->colhead[p->col] = p->down;</span><br><span class="line"> free(p);</span><br><span class="line"> } else {</span><br><span class="line"> L->rowhead[i] = p->right;</span><br><span class="line"> tempup->down = p->down;</span><br><span class="line"> free(p);</span><br><span class="line"> }</span><br><span class="line"> } else {</span><br><span class="line"> if (tempup == p) {</span><br><span class="line"> templeft->right = p->right;</span><br><span class="line"> L->colhead[p->col] = p->down;</span><br><span class="line"> free(p);</span><br><span class="line"> } else {</span><br><span class="line"> templeft->right = p->right;</span><br><span class="line"> tempup->down = p->down;</span><br><span class="line"> free(p);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> t++;</span><br><span class="line"> L->nums--;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> return t;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 块链串 </tag>
<tag> 数组 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第三次作业解析-字符串</title>
<link href="/post/46728.html"/>
<url>/post/46728.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><ol><li>串比较<br>不调用库函数,自己实现字符串的比较操作:<code>该操作当比较的两个字符是都是字母,且两个字符互为大小写(如a和A、e和E)时认为两个字符相同,否则不同,其比较结果按这两个字符的原值确定。</code>函数的返回值规定如下:<br>返回值 < 0:第一个不匹配的字符在 ptr1 中的值低于 ptr2 中的值<br>返回值 == 0:两个字符串的内容相等<br>返回值 > 0:第一个不匹配的字符在 ptr1 中的值大于在 ptr2 中的值</li></ol><p>函数原型如下: </p><blockquote><p>int str_compare(const char* ptr1, const char* ptr2);</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-31, Tue, 22:26:53</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "dsstring.h" //请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">int str_compare(const char* ptr1, const char* ptr2)</span><br><span class="line">{</span><br><span class="line"> char* p1 = ptr1;</span><br><span class="line"> char* p2 = ptr2;</span><br><span class="line"> int flag = 0;</span><br><span class="line"> while (*p1 != '\0' && *p2 != '\0') {</span><br><span class="line"> if (*p1 == *p2 || *p1 == *p2 - 32 || *p2 == *p1 - 32) {</span><br><span class="line"> flag = 0;</span><br><span class="line"> } else if (*p1 < *p2) {</span><br><span class="line"> flag = -1;</span><br><span class="line"> break;</span><br><span class="line"> } else if (*p1 > *p2) {</span><br><span class="line"> flag = 1;</span><br><span class="line"> break;</span><br><span class="line"> }</span><br><span class="line"> p1++;</span><br><span class="line"> p2++;</span><br><span class="line"> }</span><br><span class="line"> if (*p1 != '\0' && *p2 == '\0')</span><br><span class="line"> flag = 1;</span><br><span class="line"> else if (*p1 == '\0' && *p2 != '\0')</span><br><span class="line"> flag = -1;</span><br><span class="line"> return flag;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><ol><li>串替换<br>不调用库函数,自己实现字符串替换操作,函数原型为:<blockquote><p>int str_replace(const char *in, char *out, int outlen, const char *oldstr, const char *newstr);</p></blockquote></li></ol><p>参数说明:<br> in, 原始字符串,保持不变<br> out, 存放替换结果的字符串<br> outlen,out空间的大小<br> oldstr,要替换的旧字符串<br> newstr,替换成的新字符串<br>函数返回成功替换的次数,即有多少个子串被成功替换</p><p>在替换过程中,任何情况下所得字符串(及结束符)不应该超过 outlen,如果某次替换所得字符串的长度超过 outlen,则不进行这次替换操作,整个替换操作结束。如:<br>原始串为 “aaabbbccc”,outlen 为14, oldstr 为 “c”,newstr 为 “333” 时,两次替换后得 “aaabbb333333c”,此时字符串占用空间为14字节。<br>如果再进行替换,则会超出 out 所占用的空间,所以停止替换操作。此时函数应该返回 2, out指向的串为 “aaabbb333333c”<br>再如:原始串为 “aaabbbccc”,outlen 为10, oldstr 为 “bb”,newstr 为 “123456”,进行替换后所得的串应该为 “aaa123456” (长度为9)与结束符一共占 10 个字节,此时函数应该返回 1。</p><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-04-07, Tue, 19:43:54</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "dsstring.h"</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">int str_replace(const char* in, char* out, int outlen, const char* oldstr, const char* newstr)</span><br><span class="line">{</span><br><span class="line"> char a = "aaabbbccc";</span><br><span class="line"> char b = "c", c = "cc", d = "123", e = "123456", f = "12345678";</span><br><span class="line"></span><br><span class="line"> char *cur1 = in, *cur2 = out;</span><br><span class="line"> int len = 1, ans = 0;</span><br><span class="line"> while (*out != 0)</span><br><span class="line"> *out = 0, out++;</span><br><span class="line"> while (len < outlen && *cur1) {</span><br><span class="line"> int flag = 1;</span><br><span class="line"> char *p1 = cur1, *p2 = oldstr;</span><br><span class="line"> while (*p1 && *p2 && *p1 == *p2)</span><br><span class="line"> p1++, p2++;</span><br><span class="line"> if (*p2 != 0)</span><br><span class="line"> flag = 0;</span><br><span class="line"> if (flag) {</span><br><span class="line"> char* p = newstr;</span><br><span class="line"> int len1 = len;</span><br><span class="line"> while (*p)</span><br><span class="line"> len1++, *p++;</span><br><span class="line"> if (len1 > outlen) {</span><br><span class="line"> while (*cur1 && len < outlen + 1)</span><br><span class="line"> *cur2 = *cur1, len++, cur1++, cur2++;</span><br><span class="line"> return ans;</span><br><span class="line"> }</span><br><span class="line"> cur1 = p1;</span><br><span class="line"> ans++;</span><br><span class="line"> p = newstr;</span><br><span class="line"> while (*p)</span><br><span class="line"> *cur2 = *p, cur2++, p++, len++;</span><br><span class="line"> } else</span><br><span class="line"> *cur2 = *cur1, len++, cur1++, cur2++;</span><br><span class="line"> }</span><br><span class="line"> return ans;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div>警告!本代码可能无法完成所有情况的操作<br>当然你如果也是欧皇的话可以无视(因为judge平台测试数据的随机性)<br>正在开发一段满足所有条件的代码<br>Hints:自己实现几个关键的string操作函数即可,比如strlen等等</li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 字符串 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第二次作业解析-队列栈</title>
<link href="/post/4641.html"/>
<url>/post/4641.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><ol><li>队列 循环列表表示栈<br>假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),请完成下列任务:<br>1: 队列初始化,成功返回真,否则返回假 <blockquote><p>bool init_queue(LinkQueue <em>LQ);<br>2: 入队列,成功返回真,否则返回假:<br>bool enter_queue(LinkQueue *LQ, ElemType x);<br>3: 出队列,成功返回真,且</em>x为出队的值,否则返回假<br>bool leave_queue(LinkQueue *LQ, ElemType *x);</p></blockquote></li></ol><p>相关定义如下:</p><blockquote><p>typedef struct _QueueNode {<br> ElemType data; /<em>数据域</em>/<br> struct _QueueNode <em>next; /*指针域</em>/<br>}LinkQueueNode, *LinkQueue;</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-26, Thu, 10:34:14</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">bool init_queue(LinkQueue* LQ)</span><br><span class="line">{</span><br><span class="line"> *LQ = (LinkQueue)malloc(sizeof(LinkQueueNode));</span><br><span class="line"> if (*LQ == NULL) {</span><br><span class="line"> return 0;</span><br><span class="line"> }</span><br><span class="line"> (*LQ)->next = *LQ;</span><br><span class="line"> return 1;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">bool enter_queue(LinkQueue* LQ, ElemType x)</span><br><span class="line">{</span><br><span class="line"> if (*LQ == NULL) {</span><br><span class="line"> return 0;</span><br><span class="line"> }</span><br><span class="line"> LinkQueueNode* p = (LinkQueueNode*)malloc(sizeof(LinkQueueNode));</span><br><span class="line"> if (!p) {</span><br><span class="line"> return 0;</span><br><span class="line"> } else {</span><br><span class="line"> p->data = x;</span><br><span class="line"> p->next = (*LQ)->next;</span><br><span class="line"> (*LQ)->next = p;</span><br><span class="line"> *LQ = p;</span><br><span class="line"> return 1;</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">bool leave_queue(LinkQueue* LQ, ElemType* x)</span><br><span class="line">{</span><br><span class="line"> LinkQueue rear = (*LQ);</span><br><span class="line"> if (rear->next == rear)</span><br><span class="line"> return 0;</span><br><span class="line"> (*x) = rear->next->next->data;</span><br><span class="line"> if (rear->next->next == rear) {</span><br><span class="line"> (*LQ) = (*LQ)->next;</span><br><span class="line"> free(rear);</span><br><span class="line"> (*LQ)->next = (*LQ);</span><br><span class="line"> return 1;</span><br><span class="line"> }</span><br><span class="line"> LinkQueue temp = rear->next->next;</span><br><span class="line"> rear->next->next = temp->next;</span><br><span class="line"> free(temp);</span><br><span class="line"> return 1;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><ol><li>栈 后缀表达式计算<br>请使用已定义好的栈完成后缀表达式计算:<br>(1)如果是操作数,直接入栈<br>(2)如果是操作符op,连续出栈两次,得到操作数x 和 y,计算 x op y,并将结果入栈。<br>后缀表达式示例如下:<br>9 3 1 - 3 * + 10 2 / +<br>13 445 + 51 / 6 -<br>操作数、操作符之间由空格隔开,操作符有 +,-,*, /, %共 5 种符号,所有操作数都为整型。<br>栈的定义如下:<blockquote><p>#define Stack_Size 50<br>typedef struct{</p><pre><code>ElemType elem[Stack_Size];int top;</code></pre><p>}Stack;</p><p>bool push(Stack* S, ElemType x);<br>bool pop(Stack* S, ElemType *x);<br>void init_stack(Stack *S);</p></blockquote></li></ol><p>其中,栈初始化的实现为:</p><blockquote><p>void init_stack(Stack *S){<br> S->top = -1;<br>}</p></blockquote><p>需要完成的函数定义为:</p><blockquote><p>int compute_reverse_polish_notation(char *str);<br>函数接收一个字符指针,该指针指向一个字符串形式的后缀表达式,函数返回该表达式的计算结果。</p></blockquote><ol start="2"><li>解析<div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-23, Mon, 19:19:11</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">int compute_reverse_polish_notation(char* str)</span><br><span class="line">{</span><br><span class="line"> Stack s;</span><br><span class="line"> init_stack(&s);</span><br><span class="line"> int num = 0;</span><br><span class="line"> while (*str != 0) {</span><br><span class="line"> while (*str == ' ')</span><br><span class="line"> str++;</span><br><span class="line"> if (*str == 0) {</span><br><span class="line"> break;</span><br><span class="line"> }</span><br><span class="line"> if (*str == '+') {</span><br><span class="line"> int a, b;</span><br><span class="line"> pop(&s, &a);</span><br><span class="line"> pop(&s, &b);</span><br><span class="line"> push(&s, a + b);</span><br><span class="line"> str++;</span><br><span class="line"> } else if (*str == '-') {</span><br><span class="line"> int a, b;</span><br><span class="line"> pop(&s, &a);</span><br><span class="line"> pop(&s, &b);</span><br><span class="line"> push(&s, b - a);</span><br><span class="line"> str++;</span><br><span class="line"> } else if (*str == '*') {</span><br><span class="line"> int a, b;</span><br><span class="line"> pop(&s, &a);</span><br><span class="line"> pop(&s, &b);</span><br><span class="line"> push(&s, a * b);</span><br><span class="line"> str++;</span><br><span class="line"> } else if (*str == '/') {</span><br><span class="line"> int a, b;</span><br><span class="line"> pop(&s, &a);</span><br><span class="line"> pop(&s, &b);</span><br><span class="line"> push(&s, b / a);</span><br><span class="line"> str++;</span><br><span class="line"> } else if (*str == '%') {</span><br><span class="line"> int a, b;</span><br><span class="line"> pop(&s, &a);</span><br><span class="line"> pop(&s, &b);</span><br><span class="line"> push(&s, b % a);</span><br><span class="line"> str++;</span><br><span class="line"> } else {</span><br><span class="line"> int x = 0;</span><br><span class="line"> do {</span><br><span class="line"> x = x * 10 + *str - '0';</span><br><span class="line"> str++;</span><br><span class="line"> } while (*str >= '0' && *str <= '9' && *str != 0);</span><br><span class="line"> push(&s, x);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> pop(&s, &num);</span><br><span class="line"> return num;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 栈 </tag>
<tag> 后缀表达式 </tag>
</tags>
</entry>
<entry>
<title>Icoding平台第一次作业解析-线性表</title>
<link href="/post/3472.html"/>
<url>/post/3472.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="T1"><a href="#T1" class="headerlink" title="T1"></a>T1</h1><ol><li><p>顺序表 删除指定范围<br>设计一个高效的算法,从顺序表L中删除所有值介于x和y之间(包括x和y)的所有元素(假设y>=x),要求时间复杂度为O(n),空间复杂度为O(1)。<br>函数原型如下:</p><blockquote><p>void del_x2y(SeqList *L, ElemType x, ElemType y);<br>相关定义如下:<br>struct _seqlist{</p><pre><code>ElemType elem[MAXSIZE];int last;</code></pre><p>};</p></blockquote></li><li><p>解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-02, Mon, 11:46:50</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void del_x2y(SeqList* L, ElemType x, ElemType y)</span><br><span class="line">{</span><br><span class="line"> int last = -1;</span><br><span class="line"> for (int i = 0; i <= L->last; i++)</span><br><span class="line"> if (L->elem[i] < x || L->elem[i] > y)</span><br><span class="line"> L->elem[++last] = L->elem[i];</span><br><span class="line"> L->last = last;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T2"><a href="#T2" class="headerlink" title="T2"></a>T2</h1><ol><li><p>顺序表 删除重复<br>编写算法,在一非递减的顺序表L中,删除所有值相等的多余元素。要求时间复杂度为O(n),空间复杂度为O(1)。<br>函数原型如下:</p><blockquote><p>void del_dupnum(SeqList *L)<br>相关定义如下:<br>struct _seqlist{</p><pre><code>ElemType elem[MAXSIZE];int last;</code></pre><p>};<br>typedef struct _seqlist SeqList;</p></blockquote></li><li><p>解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-02, Mon, 11:49:49</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void del_dupnum(SeqList* L)</span><br><span class="line">{</span><br><span class="line"> int flag = 0, val = L->elem[0];</span><br><span class="line"> for (int i = 1; i <= L->last; i++) {</span><br><span class="line"> if (val != L->elem[i]) {</span><br><span class="line"> val = L->elem[i];</span><br><span class="line"> flag += 1;</span><br><span class="line"> L->elem[flag] = val;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> L->last = flag;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T3"><a href="#T3" class="headerlink" title="T3"></a>T3</h1><ol><li>顺序表 数据调整<br>已知顺序表L中的数据元素类型为int。设计算法将其调整为左右两部分,左边的元素(即排在前面的)均为奇数,右边所有元素(即排在后面的)均为偶数,并要求算法的时间复杂度为O(n),空间复杂度为O(1)。<br>链表结点定义如下:<blockquote><p>void odd_even(SeqList *L);<br>相关定义如下:<br>struct _seqlist{</p><pre><code>ElemType elem[MAXSIZE];int last;</code></pre><p>};<br>typedef struct _seqlist SeqList;</p></blockquote></li></ol><p>2.解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-03, Tue, 18:32:04</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void odd_even(SeqList* L)</span><br><span class="line">{</span><br><span class="line"> int i = 0;</span><br><span class="line"> int j = L->last;</span><br><span class="line"> while (i < j) {</span><br><span class="line"> while (L->elem[i] % 2 != 0)</span><br><span class="line"> i++;</span><br><span class="line"> while (L->elem[j] % 2 == 0)</span><br><span class="line"> j--;</span><br><span class="line"> if (i < j) {</span><br><span class="line"> int t = L->elem[i];</span><br><span class="line"> L->elem[i] = L->elem[j];</span><br><span class="line"> L->elem[j] = t;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><hr><h1 id="T4"><a href="#T4" class="headerlink" title="T4"></a>T4</h1><ol><li><p>链表 删除范围内结点<br>已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度。<br>链表结点定义如下:</p><blockquote><p>struct _lnklist{</p><pre><code>ElemType data;struct _lnklist *next;</code></pre><p>};<br>typedef struct _lnklist Node;<br>typedef struct _lnklist *LinkList;<br>函数原型如下:<br>void lnk_del_x2y(LinkList L, ElemType mink, ElemType maxk)<br>其中L指向链表的头结点。</p></blockquote></li><li><p>解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-13, Fri, 18:35:51</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void lnk_del_x2y(LinkList L, ElemType mink, ElemType maxk)</span><br><span class="line">{</span><br><span class="line"> LinkList p, q, prev = NULL;</span><br><span class="line"> if (mink > maxk)</span><br><span class="line"> return;</span><br><span class="line"> p = L;</span><br><span class="line"> prev = p;</span><br><span class="line"> p = p->next;</span><br><span class="line"> while (p && p->data < maxk) {</span><br><span class="line"> if (p->data <= mink) {</span><br><span class="line"> prev = p;</span><br><span class="line"> p = p->next;</span><br><span class="line"> } else {</span><br><span class="line"> prev->next = p->next;</span><br><span class="line"> q = p;</span><br><span class="line"> p = p->next;</span><br><span class="line"> free(q);</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T5"><a href="#T5" class="headerlink" title="T5"></a>T5</h1><ol><li><p>链表 倒数查找<br>已知一个带有表头结点的单链表, 假设链表只给出了头指针L。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。<br>函数原型为:</p><blockquote><p>int lnk_search(LinkList L, int k, ElemType* p_ele)<br>若查找成功,函数通过指针参数 p_ele 返回该结点 data 域的值,此时函数返回 1;否则,函数返回 0。相关定义如下:<br>struct _lnklist{</p><pre><code>ElemType data;struct _lnklist *next;</code></pre><p>};<br>typedef struct _lnklist Node;<br>typedef struct _lnklist *LinkList;</p></blockquote></li><li><p>解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-13, Fri, 18:40:21</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">int lnk_search(LinkList L, int k, ElemType* p_ele)</span><br><span class="line">{</span><br><span class="line"> LinkList p = L->next, q = L->next;</span><br><span class="line"> int count = 0;</span><br><span class="line"> while (p != NULL) {</span><br><span class="line"> if (count < k)</span><br><span class="line"> count++;</span><br><span class="line"> else</span><br><span class="line"> q = q->next;</span><br><span class="line"> p = p->next;</span><br><span class="line"> }</span><br><span class="line"> if (count < k)</span><br><span class="line"> return 0;</span><br><span class="line"> else {</span><br><span class="line"> p_ele = q->data;</span><br><span class="line"> return 1;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr><h1 id="T6"><a href="#T6" class="headerlink" title="T6"></a>T6</h1><ol><li><p>链表 合并<br>设线性表A=(a1, a2,…,am),B=(b1, b2,…,bn),试写一个按下列规则合并A、B为线性表C的算法,使得:<br>C= (a1, b1,…,am, bm, bm+1, …,bn) 当m≤n时;<br>或者<br>C= (a1, b1,…,an, bn, an+1, …,am) 当m>n时。<br>线性表A、B、C均以单链表作为存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。<br>函数的原型如下:</p><blockquote><p>void lnk_merge(LinkList A, LinkList B, LinkList C)<br>即将A和B合并为C,其中 C 已经被初始化为空单链表<br>相关定义如下:<br>struct _lnklist{</p><pre><code>ElemType data;struct _lnklist *next;</code></pre><p>};<br>typedef struct _lnklist Node;<br>typedef struct _lnklist *LinkList;</p></blockquote></li><li><p>解析</p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">/*</span><br><span class="line"> * 完成人 :岳昕峰(201909******4)</span><br><span class="line"> * 完成时间:2020-03-21, Sat, 12:38:40</span><br><span class="line"> * 最高分数:100</span><br><span class="line"> */</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">#include "list.h" // 请不要删除,否则检查不通过</span><br><span class="line">#include <stdio.h></span><br><span class="line">#include <stdlib.h></span><br><span class="line"></span><br><span class="line">void lnk_merge(LinkList A, LinkList B, LinkList C)</span><br><span class="line">{</span><br><span class="line"> Node *p, *q, *m, *temp;</span><br><span class="line"> p = A->next;</span><br><span class="line"> q = B->next;</span><br><span class="line"> m = C;</span><br><span class="line"> while (p != NULL && q != NULL) {</span><br><span class="line"> m->next = p;</span><br><span class="line"> temp = p->next;</span><br><span class="line"> p->next = q;</span><br><span class="line"> m = q;</span><br><span class="line"> p = temp;</span><br><span class="line"> q = q->next;</span><br><span class="line"> }</span><br><span class="line"> if (p != NULL) {</span><br><span class="line"> m->next = p;</span><br><span class="line"> }</span><br><span class="line"> if (q != NULL) {</span><br><span class="line"> m->next = q;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div></li></ol><hr>]]></content>
<categories>
<category> C/C++ </category>
</categories>
<tags>
<tag> Icoding </tag>
<tag> 作业 </tag>
<tag> 线性表 </tag>
<tag> 链表 </tag>
<tag> 顺序表 </tag>
</tags>
</entry>
<entry>
<title>利用githubPages架构简单的静态网页</title>
<link href="/post/34560.html"/>
<url>/post/34560.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="Github账号的注册"><a href="#Github账号的注册" class="headerlink" title="Github账号的注册"></a>Github账号的注册</h1><ol><li><p>首先在<a href="https://github.com" target="_blank" rel="noopener">GitHub</a>注册一个GitHub账号,并在你的Github Repositories下新建一个名为YourName.github.io的仓库。</p></li><li><p>所有选项按照默认配置就行。</p><blockquote><p>值得注意的是,GitHub平台是全英文的,因此具备一定的英语水平还是必要的</p></blockquote></li><li><p>其次,下载<a href="https://git-scm.com" target="_blank" rel="noopener">Git</a>并安装,所有选项按照默认配置即可</p><blockquote><p>Git的所有操作一般都在Gi bash控制台界面进行,因此学习掌握Git的使用是十分必要的</p></blockquote></li><li><p>打开Git Bash控制台,使用git config –global user.name指令生命本机用户名,之后使用git config –global user.email指令声明本机用户名对应的邮箱地址。再使用ssh-keygen -t rsa -C <a href="mailto:email@email.com">email@email.com</a>指令生成新的ssh公钥</p></li><li><p>使用cd指令选择一个合适的路径存放你的本地仓库,使用mkdir指令建立一个由你自由命名的文件夹。</p><blockquote><p>Linux指令: cd——用于切换所在目录<br>Linux指令: mkdir——用于新建文件/文件夹</p></blockquote></li><li><p>使用git init指令对本地仓库进行初始化。至此,你的一个本地仓库已经架构完成!</p><blockquote><p>Git指令: git init——用于在一个空的位置进行Git的初始化</p></blockquote></li></ol><hr><h1 id="本地仓库与Github-Repositories-建立连接"><a href="#本地仓库与Github-Repositories-建立连接" class="headerlink" title="本地仓库与Github Repositories 建立连接"></a>本地仓库与Github Repositories 建立连接</h1><ol><li>在GitHub的Settings中找到SSH and GPG keys并且选择New SSH key,找到你的电脑中.ssh文件夹中的公钥文件id_rsa.pub,并将其中的内容复制到网页相应位置,配置成功之后保存即可。</li><li>使用ssh -T <a href="mailto:git@github.com">git@github.com</a>测试连接是否成功<blockquote><p>Git指令: ssh -T <a href="mailto:git@github.com">git@github.com</a>——用于测试本地仓库与远程仓库之间是否成功连接</p></blockquote></li><li>连接测试成功之后找到网页上你的相应仓库,在Clone or Download中选择Clone with Https,复制URL。回到Git Bash控制台,使用git remote add origin [你刚刚复制的URL] 指令进行远程连接<blockquote><p>Git指令: git remote add origin [URL]——连接本地仓库到指定的远程库</p></blockquote></li><li>连接成功之后,你就可以将本地仓库的内容远程push到GitHub仓库中去了。<blockquote><p>Git指令: git push——将本地仓库的内容推送到远程库中</p><blockquote><p>Git push的一般步骤:</p><pre><code>1. git add .2. git status3. git commit -m "备注内容"4. git push</code></pre></blockquote></blockquote></li></ol><h1 id="启用Github-Pages功能"><a href="#启用Github-Pages功能" class="headerlink" title="启用Github Pages功能"></a>启用Github Pages功能</h1><ol><li>将你的仓库名称修改为YourName.github.io</li><li>在你的Repositories的Settings中找到GitHub Pages选项,将Source改为master branch后保存。</li></ol><h1 id="搭建一个静态网页"><a href="#搭建一个静态网页" class="headerlink" title="搭建一个静态网页"></a>搭建一个静态网页</h1><ol><li>一般的,我们从搭建静态网页开始。在本地仓库中建立index.html作为主界面文件。打开index.html</li><li>键入<p>Hello World!</p>并保存。</li><li>在你的本地仓库的文件夹内用鼠标右键单击Git Bash Here唤起Git Bash控制台,使用git add .指令将所有的文件提交到缓存区,使用git status命令查看文件状态,确认无误后,使用git commit -m “你想要留下的备注”提交更改,之后用git push命令将所有的更改上传到GitHub的远程仓库中。<blockquote><p>Git push的全套流程参见上文</p></blockquote></li><li>至此,一个最简单的静态网页就被成功搭建了。你可以通过YourName.github.io这个网址来访问你的个人网站。</li></ol><h1 id="将GitHub-Pages架构的网站解析到自己的域名"><a href="#将GitHub-Pages架构的网站解析到自己的域名" class="headerlink" title="将GitHub Pages架构的网站解析到自己的域名"></a>将GitHub Pages架构的网站解析到自己的域名</h1><ol><li>你需要购买一个域名的使用期限。本文以在腾讯云平台购买域名为例</li><li>在腾讯云官网上进行注册和实名认证,依靠后缀找到合适的域名,并且确认其是否可用。在付款之后即可使用。<blockquote><p>一个教训:选择域名后缀的时候不要贪图便宜或者过于追求新意。笔者的以.space为后缀的域名目前面临着无法进行公安备案的尴尬处境</p></blockquote></li><li>两种解析方式<ul><li>在腾讯域名管理界面选择解析,利用电脑自带的CMD或者PowerShell控制台,输入Ping YourName.github.io来确认IP地址,直接解析该IP地址,添加到解析记录中。</li><li>或者在解析时选择CNAME方式,在后面可以直接解析githubpages网址(就是YourName.github.io)</li></ul></li><li>解析记录添加成功之后即可直接从该域名访问个人网站。</li></ol><hr>]]></content>
<categories>
<category> Github </category>
</categories>
<tags>
<tag> Github </tag>
<tag> 静态网页 </tag>
</tags>
</entry>
<entry>
<title>test01</title>
<link href="/post/63177.html"/>
<url>/post/63177.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><h1 id="这是一个测试页面"><a href="#这是一个测试页面" class="headerlink" title="这是一个测试页面"></a>这是一个测试页面</h1><h2 id="测试开始于2020-02-10"><a href="#测试开始于2020-02-10" class="headerlink" title="测试开始于2020-02-10"></a>测试开始于2020-02-10</h2><h3 id="正在测试多级标题的完整性"><a href="#正在测试多级标题的完整性" class="headerlink" title="正在测试多级标题的完整性"></a>正在测试多级标题的完整性</h3><h4 id="这是第四级标题"><a href="#这是第四级标题" class="headerlink" title="这是第四级标题"></a>这是第四级标题</h4><h5 id="这是第五级标题"><a href="#这是第五级标题" class="headerlink" title="这是第五级标题"></a>这是第五级标题</h5><h6 id="这是第六级标题"><a href="#这是第六级标题" class="headerlink" title="这是第六级标题"></a>这是第六级标题</h6><pre><code>测试</code></pre><p>1234567890<br> 测试</p><ul><li>测试01</li><li>测试02</li><li>测试03</li></ul><ol start="4"><li>测试04</li><li>测试05</li><li>测试06</li></ol><p>【外链文本测试】(<a href="http://www.xinhuanet.com//politics/2020-02/10/c_1125555826.htm)" target="_blank" rel="noopener">http://www.xinhuanet.com//politics/2020-02/10/c_1125555826.htm)</a></p><p>【外链图片测试】<br>!【avatar】(<a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/avatar.png)" target="_blank" rel="noopener">https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/avatar.png)</a></p><h1 id="引用测试"><a href="#引用测试" class="headerlink" title="引用测试"></a>引用测试</h1><blockquote><p>夕阳像一只狐狸悄悄穿过这片土地,转瞬间点燃荒草。——果戈里</p></blockquote><p><em>夕阳</em>像一只<strong>狐狸</strong>悄悄<em>穿过</em>这片<strong>土地</strong>,<code>转瞬间点燃荒草</code></p><h1 id="代码插入测试"><a href="#代码插入测试" class="headerlink" title="代码插入测试"></a>代码插入测试</h1><p><code>printf("Hello,World!");</code></p><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">include<stdio.h></span><br><span class="line">include<stdlib.h></span><br><span class="line">int main(){</span><br><span class="line"> int a,b;</span><br><span class="line"> scanf("%d%d",&a,&b);</span><br><span class="line"> printf("Sum = %d",a+b);</span><br><span class="line"> return 0;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><h1 id="表格插入测试"><a href="#表格插入测试" class="headerlink" title="表格插入测试"></a>表格插入测试</h1><table><thead><tr><th>Tables</th><th align="center">Are</th><th align="right">Cool</th></tr></thead><tbody><tr><td>col 3 is</td><td align="center">right-aligned</td><td align="right">$1600</td></tr><tr><td>col 2 is</td><td align="center">centered</td><td align="right">$12</td></tr><tr><td>zebra stripes</td><td align="center">are neat</td><td align="right">$1</td></tr></tbody></table><h1 id="图片测试2"><a href="#图片测试2" class="headerlink" title="图片测试2"></a>图片测试2</h1><p>![][1]<br>[1]:<a href="https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BlueChip_ZH-CN7376022522_1920x1080.jpg" target="_blank" rel="noopener">https://cosmos-1301148362.cos.ap-chengdu.myqcloud.com/Images/BlueChip_ZH-CN7376022522_1920x1080.jpg</a></p><h1 id="初次测试结束"><a href="#初次测试结束" class="headerlink" title="初次测试结束"></a>初次测试结束</h1><h3 id="2020-02-10"><a href="#2020-02-10" class="headerlink" title="2020-02-10"></a>2020-02-10</h3>]]></content>
<tags>
<tag> test </tag>
</tags>
</entry>
<entry>
<title>Hello World</title>
<link href="/post/16107.html"/>
<url>/post/16107.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><p>Welcome to <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="noopener">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="noopener">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="noopener">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">bash</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure></div><p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="noopener">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">bash</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure></div><p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="noopener">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">bash</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure></div><p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="noopener">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">bash</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure></div><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html" target="_blank" rel="noopener">Deployment</a></p>]]></content>
</entry>
<entry>
<title>关于自己</title>
<link href="/about/index.html"/>
<url>/about/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><ul><li>他是一个曾经高唱着“青霄有路终须到,金榜无名誓不归”的少年</li><li>他热爱生活,热爱周遭的一切,想要亲自去探索他所存在的的世界</li><li>他热爱计算机,热爱编程。与代码相处让他感到由衷的快乐</li><li>“须知少时凌云志,曾许人间第一流”</li></ul><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">Name: Cosmos</span><br><span class="line">Age: 20</span><br><span class="line">Gender: male</span><br><span class="line">Address: ChengDu</span><br><span class="line">Github: https://github.com/cosmos-UESTC</span><br><span class="line">Address_Publish_Page: https://fengxinyue.cn/</span><br><span class="line">QQ:919435931</span><br></pre></td></tr></table></figure></div><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">“疏影横斜水清浅,暗香浮动月黄昏”</span><br><span class="line"></span><br><span class="line">于2020-02-10 夜</span><br></pre></td></tr></table></figure></div>]]></content>
</entry>
<entry>
<title>分类</title>
<link href="/categories/index.html"/>
<url>/categories/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>]]></content>
</entry>
<entry>
<title>友情链接</title>
<link href="/link/index.html"/>
<url>/link/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>]]></content>
</entry>
<entry>
<title>标签</title>
<link href="/tags/index.html"/>
<url>/tags/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>]]></content>
</entry>
<entry>
<title>live2d</title>
<link href="/live2d/index.html"/>
<url>/live2d/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><div class="code-area-wrap"><div class="highlight-tools"><i class="fa fa-angle-down code-expand" aria-hidden="true"></i><div class="code_lang">Code</div><div class="copy-notice"></div><i class="fa fa-clipboard" aria-hidden="true"></i></div><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">本版面用于测试开发中的Live2d模组在Butterfly主题中的应用,目前没有具体的实验方法以及具体步骤</span><br><span class="line">故无法保证实验的有效性和系统的鲁棒性!</span><br></pre></td></tr></table></figure></div>]]></content>
</entry>
<entry>
<title>Birthday</title>
<link href="/birthday/index.html"/>
<url>/birthday/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/index.html"/>
<url>/birthday/index.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><!doctype html><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><html lang="zh-CN"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="renderer" content="webkit"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><title>Happy Birthday</title><link rel="stylesheet" type="text/css" href="css/index.css"><meta name="generator" content="Hexo 4.2.0"></head><body> <iframe class="full" src="./html/login.html" id="iframePage" onload="changeFrameHeight()" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe> <script src="js/index.js" type="text/javascript"></script><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"/live2dw/assets/assets/hijiki.model.json"},"display":{"position":"right","width":150,"height":250},"mobile":{"show":true},"react":{"opacity":1},"log":false});</script></body></html>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/jquery.fullPage.css"/>
<url>/birthday/css/jquery.fullPage.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>/** * fullPage 2.4.6 * https://github.com/alvarotrigo/fullPage.js * MIT licensed * * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo */html, body { margin: 0; padding: 0; overflow:hidden; /*Avoid flicker on slides transitions for mobile phones #336 */ -webkit-tap-highlight-color: rgba(0,0,0,0);}#superContainer { height: 100%; position: relative; /* Touch detection for Windows 8 */ -ms-touch-action: none; /* IE 11 on Windows Phone 8.1*/ touch-action: none;}.fp-section { position: relative; -webkit-box-sizing: border-box; /* Safari]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/index.css"/>
<url>/birthday/css/index.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>body { margin: 0; padding: 0; overflow-y: hidden;}.full { width: 100%;}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/memories.css"/>
<url>/birthday/css/memories.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>#fp-nav ul li a.active span,.fp-slidesNav ul li a.active span { background: #fff;}#fp-nav ul li a span,.fp-slidesNav ul li a span { border-color:#fff;}.bgcolor { background: #ee9ca7; background: -webkit-linear-gradient(top left, #ee9ca7 0%, #ee9ca7 100%); background: linear-gradient(to bottom right, #ee9ca7 0%, #ee9ca7 100%); opacity: 0.9;}/*** 内容区域 ***//** 第一部分 **//*盒子*/.ly-box01 {width:50px;height:50px;background-color:#FFF;border-radius: 25px;position: absolute;left: 48%;bottom: 50%;margin-bottom:50%;overflow: hidden;transform-origin:center bottom;animation:box_to_point 18.5s 0s,bounce 2.5s 18.5s;}@keyframes box_to_point{0% {margin-bottom:50%;width:50px;height:50px;border-radius: 25px;position: absolute;left: 48%;bottom: 50%;}10% {margin-bottom:0;width:50px;height:50px;border-radius: 25px;background-color:rgba(255,255,255,1);position: absolute;left: 48%;bottom: 50%;}14% {margin-bottom:0;width: 80%;height: 550px;border-radius: 6px;background-color:rgba(255,255,255,0.5);position: absolute;left: 10%;bottom: 50%; margin-bottom: -275px;}96% {margin-bottom:0;width: 80%;height: 550px;border-radius: 6px;background-color:rgba(255,255,255,0.6);position: absolute;left: 10%; bottom: 50%; margin-bottom: -275px;}100% {margin-bottom:0;width:50px;height:50px;border-radius: 25px;background-color:rgba(255,255,255,1);position: absolute;left: 48%;bottom: 50%;}}@-webkit-keyframes box_to_point{0% {margin-bottom:50%;width:50px;height:50px;border-radius: 25px;position: absolute;left: 48%;bottom: 50%;}10% {margin-bottom:0;width:50px;height:50px;border-radius: 25px;background-color:rgba(255,255,255,1);position: absolute;left: 48%;bottom: 50%;}14% {margin-bottom:0;width: 80%;height: 550px;border-radius: 6px;background-color:rgba(255,255,255,0.5);position: absolute;left: 10%;bottom: 12%;}96% {margin-bottom:0;width: 80%;height: 550px;border-radius: 6px;background-color:rgba(255,255,255,0.6);position: absolute;left: 10%;bottom: 12%;}100% {margin-bottom:0;width:50px;height:50px;border-radius: 25px;background-color:rgba(255,255,255,1);position: absolute;left: 48%;bottom: 50%;}}@keyframes bounce{0% {margin-bottom:0;width: 50px;height: 50px;border-radius: 25px;bottom:50%;left: 48%;}50% {margin-bottom:0;left: 48%;width: 50px;height: 50px;border-radius: 25px;bottom:0;left: 48%;}100% {margin-bottom:0;width: 20px;height: 20px;border-radius: 10px;left: 48%;bottom: 0;left: 20%;}}@-webkit-keyframes bounce{0% {margin-bottom:0;width: 50px;height: 50px;border-radius: 25px;bottom:50%;left: 48%;}50% {margin-bottom:0;left: 48%;width: 50px;height: 50px;border-radius: 25px;bottom:0;left: 48%;}100% {margin-bottom:0;width: 20px;height: 20px;border-radius: 10px;left: 48%;bottom: 0;left: 20%;}}/*文本*/.ly-txt01 {position:absolute;width: 40%;left:10%;top:10%;}.ly-txt02 {position:absolute;width: 40%;left:60%;top:10%;}.ly-stxt01 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;left: 5%;top: 5%;opacity: 0;animation:ly-stxt01_move 15s;animation-delay:3s;-webkit-animation:ly-stxt01_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt01_move{0% {opacity:0;}8% {opacity:1;}90% {opacity:1;}98% {opacity:0;}100% {opacity:0;}}@-webkit-keyframes ly-stxt01_move{0% {opacity:0;}8% {opacity:0;}90% {opacity:1;}98% {opacity:0;}100% {opacity:0;}}.ly-stxt02 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;left: 5%;top: 5%;margin-top:-71px;opacity: 0;animation:ly-stxt02_move 15s;animation-delay:3s;-webkit-animation:ly-stxt02_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt02_move{0% {opacity:0;margin-top:-71px;}8% {opacity:0;margin-top:-71px;}16% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt02_move{0% {opacity:0;margin-top:-71px;}8% {opacity:0;margin-top:-71px;}16% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt03 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;left: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt03_move 15s;animation-delay:3s;-webkit-animation:ly-stxt03_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt03_move{0% {opacity:0;margin-top:-71px;}16% {opacity:0;margin-top:-71px;}24% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt03_move{0% {opacity:0;margin-top:-71px;}16% {opacity:0;margin-top:-71px;}24% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt04 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;left: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt04_move 15s;animation-delay:3s;-webkit-animation:ly-stxt04_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt04_move{0% {opacity:0;margin-top:-71px;}24% {opacity:0;margin-top:-71px;}32% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt04_move{0% {opacity:0;margin-top:-71px;}24% {opacity:0;margin-top:-71px;}32% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt05 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;left: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt05_move 15s;animation-delay:3s;-webkit-animation:ly-stxt05_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt05_move{0% {opacity:0;margin-top:-71px;}32% {opacity:0;margin-top:-71px;}40% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt05_move{0% {opacity:0;margin-top:-71px;}32% {opacity:0;margin-top:-71px;}40% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt06 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;right: 5%;top: 5%;opacity: 0;animation:ly-stxt06_move 15s;animation-delay:3s;-webkit-animation:ly-stxt06_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt06_move{0% {opacity:0;}40% {opacity:0;}48% {opacity:1;}90% {opacity:1;}100% {opacity:0;}}@-webkit-keyframes ly-stxt06_move{0% {opacity:0;}40% {opacity:0;}48% {opacity:1;}90% {opacity:1;}100% {opacity:0;}}.ly-stxt07 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;right: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt07_move 15s;animation-delay:3s;-webkit-animation:ly-stxt07_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt07_move{0% {opacity:0;margin-top:-71px;}48% {opacity:0;margin-top:-71px;}56% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt07_move{0% {opacity:0;margin-top:-71px;}48% {opacity:0;margin-top:-71px;}56% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt08 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;right: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt08_move 15s;animation-delay:3s;-webkit-animation:ly-stxt08_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt08_move{0% {opacity:0;margin-top:-71px;}56% {opacity:0;margin-top:-71px;}64% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt08_move{0% {opacity:0;margin-top:-71px;}56% {opacity:0;margin-top:-71px;}64% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt09 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;right: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt09_move 15s;animation-delay:3s;-webkit-animation:ly-stxt09_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt09_move{0% {opacity:0;margin-top:-71px;}64% {opacity:0;margin-top:-71px;}72% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt09_move{0% {opacity:0;margin-top:-71px;}64% {opacity:0;margin-top:-71px;}72% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}.ly-stxt10 {font-family: Microsoft YaHei;font-size: 30px;font-color: #000;position: relative;right: 5%;top: 5%;opacity: 0;margin-top:-71px;animation:ly-stxt10_move 15s;animation-delay:3s;-webkit-animation:ly-stxt10_move 15s;-webkit-animation-delay:3s;}@keyframes ly-stxt10_move{0% {opacity:0;margin-top:-71px;}72% {opacity:0;margin-top:-71px;}80% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}@-webkit-keyframes ly-stxt10_move{0% {opacity:0;margin-top:-71px;}72% {opacity:0;margin-top:-71px;}80% {opacity:1;margin-top:0;}90% {opacity:1;margin-top:0;}100% {opacity:0;margin-top:0;}}/** 第二部分 **//*时间轴的线*/.timeline {width: 8px;height: 0;position: absolute;left: 20%;top:-100%;background-color: #ccc;border-radius:3px;transition: all 2s;}.active .timeline {width: 10px;height: 100%;top:0;transition-delay: 0.1s;}/*时间轴上的点*/.timepoint {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 15.5%;opacity: 0;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 0.3s;}.active .timepoint {opacity: 1;transition-delay: 2s;}/**时间轴上的点**/.timepoint11 {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 0;opacity: 1;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 1s;}.active .timepoint11 {top:15.5%;transition-delay: 2s;}/* 盒子 */.ly-box11 {width: 30%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 23%;top: 10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box11{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 2.5s;}/*小三角*/.ly-triangle11 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 77%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 0.5s;}.active .ly-triangle11 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 3.5s;}/*图片*/.ly-imgbox11{position: absolute;bottom: 0;width: 100%;height: 70%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox11{opacity:1;transition-delay:3.5s;}.ly-img11{position: absolute;width: 100%;bottom: 0;}/*文本*/.ly-txt11 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 4%;opacity: 0;transition: all 0.5s;}.active .ly-txt11 {opacity: 1;transition-delay: 3.5s;}.ly-txt12 {font-family: Microsoft YaHei;font-size: 20px;text-indent:2em;font-color: #000;position: absolute;padding-top: 20px;left: 5%;top: 12%;opacity: 0;transition: all 1s;}.active .ly-txt12 {opacity: 1;transition-delay: 4s;}/* 盒子 */.ly-box12 {width: 40%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 57%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box12{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}/*小三角*/.ly-triangle12 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 43%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle12 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 6s;}/*文本*/.ly-txt13 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 4%;opacity: 0;transition: all 0.5s;}.active .ly-txt13 {opacity: 1;transition-delay: 6s;}.ly-txt14 {text-indent:2em;font-family: Microsoft YaHei;font-size: 18px;font-color: #000;position: absolute;margin-left:30px;margin-right:30px;top: 12%;opacity: 1;transition: all 13s;height:0;width:88%;overflow:hidden;}.active .ly-txt14 {height:500px;transition-delay: 6.5s;}/** 第三部分 **//**时间轴上的点**/.timepoint21 {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 0;opacity: 1;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 0.5s;}.active .timepoint21 {top:15.5%;transition-delay: 1.5s;}/* 盒子 */.ly-box21 {width: 15%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 23%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box21{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 2.5s;}/*小三角*/.ly-triangle21 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 77%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 0.5s;}.active .ly-triangle21 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 3.5s;}/*图片*/.ly-imgbox21{position: absolute;bottom: 0;width: 100%;height: 70%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox21{opacity:1;transition-delay:3.5s;}.ly-img21{position: absolute;width: 100%;bottom: 0;}/*文本*/.ly-txt21 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 2%;opacity: 0;transition: all 0.5s;}.active .ly-txt21 {opacity: 1;transition-delay: 3.5s;}.ly-txt22 {font-family: Microsoft YaHei;font-size: 13px;text-indent:2em;font-color: #000;position: absolute;left: 5%;top: 8%;opacity: 0;transition: all 1s;}.active .ly-txt22 {opacity: 1;transition-delay: 4s;}/* 盒子 */.ly-box22 {width: 15%;height: 510px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 42%;top:22%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box22{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}/*小三角*/.ly-triangle22 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 58%;top: 25%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle22 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 6s;}/*文本*/.ly-txt23 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 2%;opacity: 0;transition: all 0.5s;}.active .ly-txt23 {opacity: 1;transition-delay: 6s;}.ly-txt24 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:11%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt24 {opacity:1;transition-delay: 7.0s;}/*图片*/.ly-imgbox22{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox22{opacity:1;transition-delay:6s;}.ly-img22{position: absolute;width: 100%;bottom: 0;}/* 盒子 */.ly-box23 {width: 34%;height: 0;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 61%;bottom:6%;overflow: hidden;opacity: 0.9;transition: all 10s;}.active .ly-box23{height:600px;transition-delay: 8s;}/*小三角*/.ly-triangle23 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 39%;top: 66%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle23 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 12s;}/*文本*/.ly-txt25 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 2%;opacity: 0;transition: all 0.5s;}.active .ly-txt25 {opacity: 1;transition-delay: 6s;}.ly-txt26 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:11%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt26 {opacity:1;transition-delay: 14s;}/*图片*/.ly-imgbox23{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox23{opacity:1;transition-delay:12s;}.ly-img23{position: absolute;width: 100%;bottom: 0;}/** 第四部分 **//**时间轴上的点**/.timepoint31 {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 0;opacity: 1;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 1s;}.active .timepoint31 {top:15.5%;transition-delay: 2s;}/* 盒子 */.ly-box31 {width: 30%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 23%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box31{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 2.5s;}/*小三角*/.ly-triangle31 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 77%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 0.5s;}.active .ly-triangle31 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 3.5s;}/*图片*/.ly-imgbox31{position: absolute;bottom: 0;width: 100%;height: 70%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox31{opacity:1;transition-delay:3.5s;}.ly-img31{position: absolute;width: 100%;bottom: 0;}/*文本*/.ly-txt31 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 4%;opacity: 0;transition: all 0.5s;}.active .ly-txt31 {opacity: 1;transition-delay: 3.5s;}.ly-txt32 {font-family: Microsoft YaHei;font-size: 20px;text-indent:2em;font-color: #000;position: absolute;padding-top: 20px;left: 5%;top: 12%;opacity: 0;transition: all 1s;}.active .ly-txt32 {opacity: 1;transition-delay: 4s;}/* 盒子 */.ly-box32 {width: 40%;height: 400px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 57%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box32{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}/*小三角*/.ly-triangle32 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 43%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle32 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 6s;}/*文本*/.ly-txt33 {font-family: Microsoft YaHei;font-size: 30px;text-shadow: 1px;font-color: #000;position: absolute;left: 3%;top: 4%;opacity: 0;transition: all 0.5s;}.active .ly-txt33 {opacity: 1;transition-delay: 6s;}.ly-txt34 {text-indent:2em;font-family: Microsoft YaHei;font-size: 18px;font-color: #000;position: absolute;margin-left:30px;margin-right:30px;top: 12%;opacity: 1;transition: all 13s;height:0;width:88%;overflow:hidden;}.active .ly-txt34 {height:500px;transition-delay: 6.5s;}.ly-imgbox31{position: absolute;bottom: 0;width: 100%;height: 70%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox31{opacity:1;transition-delay:3.5s;}.ly-img31{position: absolute;width: 100%;bottom: 0;}/*后续修正*/.ly-box51 {width: 34%;height: 0;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 61%;bottom:6%;overflow: hidden;opacity: 0.9;transition: all 10s;}.active .ly-box51{height:500px;transition-delay: 8s;}.ly-txt51 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt51 {opacity:1;transition-delay: 7.0s;}.ly-box52 {width: 15%;height: 550px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 23%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box52{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 2.5s;}.ly-imgbox61{position: absolute;bottom: 0;width: 100%;height: 41%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox61{opacity:1;transition-delay:12s;}.ly-img61{position: absolute;width: 100%;bottom: 0;margin-bottom:-250px;}.ly-txt61 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt61 {opacity:1;transition-delay: 14s;}.wwww1 {margin-before: 0.5em;margin-after: 0.5em;-webkit-margin-before: 0.5em;-webkit-margin-after: 0.5em;}.ly-txt71 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt71 {opacity:1;transition-delay: 7.0s;}/*图片*/.ly-imgbox71{position: absolute;bottom: 0;width: 100%;height: 70%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox71{opacity:1;transition-delay:6.5s;}.ly-img71{position: absolute;width: 100%;bottom: 0;}.ly-box71 {width: 15%;height: 540px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 42%;top:17%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box71{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}.xx71 {height:550px;top:16%;}.xx72 {top:20%;}.timepoint71 {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 0;opacity: 1;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 0.5s;}.active .timepoint71 {top:21%;transition-delay: 1.5s;}.ly-box72 {width: 15%;height: 450px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 61%;top: 20%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box72{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 8s;}.ly-triangle71 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 39%;top: 27%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle71 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 8.5s;}.ly-box73 {width: 15%;height: 400px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 80%;top: 25%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box73{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 11s;}.ly-triangle72 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 20%;top: 30%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle72 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 12s;}.ly-txt72 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt72 {opacity:1;transition-delay: 9s;}/*图片*/.ly-imgbox72{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox72{opacity:1;transition-delay:8.5s;}.ly-img72{position: absolute;width: 100%;bottom: 0;}.ly-txt73 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt73 {opacity:1;transition-delay: 13s;}/*图片*/.ly-imgbox73{position: absolute;bottom: 0;width: 100%;height: 77%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox73{opacity:1;transition-delay:12.5s;}.ly-img73{position: absolute;height: 100%;margin-left:-200px;bottom: 0;}.ly-box81 {width: 15%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 23%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box81{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 2.5s;}.ly-txt82 {font-family: Microsoft YaHei;font-size: 14px;text-indent:1em;font-color: #000;position: absolute;padding-top: 20px;left: 5%;top: 11%;opacity: 0;transition: all 1s;}.active .ly-txt82 {opacity: 1;transition-delay: 4s;}/*图片*/.ly-imgbox81{position: absolute;bottom: 0;width: 100%;height: 90%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox81{opacity:1;transition-delay:3.5s;}.ly-img81{position: absolute;width: 100%;bottom: 0;}.ly-box82 {width: 54%;height: 600px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 42%;top:10%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box82{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}/*小三角*/.ly-triangle82 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 58%;top: 14%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle82 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 6s;}/*文本*/.ly-txt84 {text-indent:2em;font-family: Microsoft YaHei;font-size: 15px;font-color: #000;position: absolute;margin-left:30px;margin-right:30px;top: 12%;opacity: 1;transition: all 33s;height:0;width:88%;overflow:hidden;}.active .ly-txt84 {height:500px;transition-delay: 6.5s;}.ly-txt90 {font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt90 {opacity:1;transition-delay: 4.5s;}.ly-txt91 {font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt91 {opacity:1;transition-delay: 7.0s;}/*图片*/.ly-imgbox91{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox91{opacity:1;transition-delay:6.5s;}.ly-img91{position: absolute;width: 100%;bottom: 0;}.ly-box91 {width: 15%;height: 450px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 42%;top:18%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box91{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 5s;}.xx91 {height: 450px;top:18%;}.xx92 {top:22%;}.timepoint91 {width: 20px;height: 20px;margin-left: -5px;position: absolute;left:20%;top: 0;opacity: 1;background-color: #fff;-webkit-border-radius: 10px;-moz-border-radius: 10px;-ms-border-radius: 10px;-o-border-radius: 10px;border-radius: 10px;transition: all 0.5s;}.active .timepoint91 {top:23.5%;transition-delay: 1.5s;}.ly-box92 {width: 15%;height: 450px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 61%;top: 18%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box92{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 8s;}.ly-triangle91 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 39%;top:22%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle91 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 8.5s;}.ly-box93 {width: 15%;height: 450px;border: 2px #CCC;background-color: #fff;background-color: rgba(255,255,255,0.6);border-radius: 8px;position: absolute;left: 80%;top:18%;overflow: hidden;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-box93{opacity: 0.9;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 11s;}.ly-triangle92 {width: 0;height: 0;border-top: 20px solid transparent;border-right: 22px solid white;border-bottom: 20px solid transparent;border-radius: 2px;margin-left: 24px;position: absolute;right: 20%;top:22%;opacity: 0;-webkit-transform: scale(0.5, 0.5);transform: scale(0.5, 0.5);transition: all 1s;}.active .ly-triangle92 {opacity: 0.6;margin-left: 2px;-webkit-transform: scale(1, 1);transform: scale(1, 1);transition-delay: 12s;}.ly-txt92 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt92 {opacity:1;transition-delay: 9s;}/*图片*/.ly-imgbox92{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox92{opacity:1;transition-delay:8.5s;}.ly-img92{position: absolute;width: 100%;bottom: 0;}.ly-txt93 {text-indent:2em;font-family: Microsoft YaHei;font-size: 14px;font-color: #000;position: absolute;width:80%;top:9%;margin-left:5%;opacity: 0;transition: all 0.5s;width:88%;overflow:hidden;}.active .ly-txt93 {opacity:1;transition-delay: 13s;}/*图片*/.ly-imgbox93{position: absolute;bottom: 0;width: 100%;height: 80%;border-radius: 8px;opacity:0;overflow: hidden;transition:all 0.5s;}.active .ly-imgbox93{opacity:1;transition-delay:12.5s;}.ly-img93{position: absolute;width: 100%;bottom: 0;}.xx94 {height:80%;}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/bubbles.css"/>
<url>/birthday/css/bubbles.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>.bg-bubbles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1;}.bg-bubbles li { position: absolute; list-style: none; display: block; width: 40px; height: 40px; background-color: rgba(255, 255, 255, 0.15); bottom: -160px; -webkit-animation: square 30s infinite; animation: square 30s infinite; -webkit-transition-timing-function: linear; transition-timing-function: linear;}.bg-bubbles li:nth-child(1) { left: 10%;}.bg-bubbles li:nth-child(2) { left: 20%; width: 80px; height: 80px; -webkit-animation-delay: 2s; animation-delay: 2s; -webkit-animation-duration: 17s; animation-duration: 17s;}.bg-bubbles li:nth-child(3) { left: 25%; -webkit-animation-delay: 4s; animation-delay: 4s;}.bg-bubbles li:nth-child(4) { left: 40%; width: 60px; height: 60px; -webkit-animation-duration: 22s; animation-duration: 22s; background-color: rgba(255, 255, 255, 0.25);}.bg-bubbles li:nth-child(5) { left: 70%;}.bg-bubbles li:nth-child(6) { left: 80%; width: 120px; height: 120px; -webkit-animation-delay: 3s; animation-delay: 3s; background-color: rgba(255, 255, 255, 0.2);}.bg-bubbles li:nth-child(7) { left: 32%; width: 160px; height: 160px; -webkit-animation-delay: 7s; animation-delay: 7s;}.bg-bubbles li:nth-child(8) { left: 55%; width: 20px; height: 20px; -webkit-animation-delay: 15s; animation-delay: 15s; -webkit-animation-duration: 40s; animation-duration: 40s;}.bg-bubbles li:nth-child(9) { left: 25%; width: 10px; height: 10px; -webkit-animation-delay: 2s; animation-delay: 2s; -webkit-animation-duration: 40s; animation-duration: 40s; background-color: rgba(255, 255, 255, 0.3);}.bg-bubbles li:nth-child(10) { left: 90%; width: 160px; height: 160px; -webkit-animation-delay: 11s; animation-delay: 11s;}@-webkit-keyframes square { 0% { -webkit-transform: translateY(0); transform: translateY(0); } 100% { -webkit-transform: translateY(-900px) rotate(600deg); transform: translateY(-900px) rotate(600deg); }}@keyframes square { 0% { -webkit-transform: translateY(0); transform: translateY(0); } 100% { -webkit-transform: translateY(-900px) rotate(600deg); transform: translateY(-900px) rotate(600deg); }}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/index.js"/>
<url>/birthday/js/index.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>function changeFrameHeight(){var ifm = document.getElementById("iframePage");ifm.height = document.documentElement.clientHeight;}window.onresize = function() {changeFrameHeight();} document.getElementById("iframePage").onload = changeFrameHeight;]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/login.css"/>
<url>/birthday/css/login.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>* { box-sizing: border-box; margin: 0; padding: 0; font-weight: 300;}body { font-family:"Microsoft YaHei"; color: white; font-weight: 300;}body ::-webkit-input-placeholder { /* WebKit browsers */ font-family:"Microsoft YaHei"; color: white; font-weight: 300;}body :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ font-family:"Microsoft YaHei"; color: white; opacity: 1; font-weight: 300;}body ::-moz-placeholder { /* Mozilla Firefox 19+ */ font-family:"Microsoft YaHei"; color: white; opacity: 1; font-weight: 300;}body :-ms-input-placeholder { /* Internet Explorer 10+ */ font-family:"Microsoft YaHei"; color: white; font-weight: 300;}.wrapper { background: #ee9ca7; background: -webkit-linear-gradient(top left, #ee9ca7 0%, #ee9ca7 100%); background: linear-gradient(to bottom right, #ee9ca7 0%, #ee9ca7 100%); background-color:rgba(255,255,255,0.9); position: absolute; top:0; left: 0; width: 100%; height: 100%; overflow: hidden;}.wrapper.form-success .container h1 { -webkit-transform: translateY(85px); -ms-transform: translateY(85px); transform: translateY(85px);}.container { max-width: 600px; margin: 0 auto; margin-top: 7%; padding: 80px 0; height: 400px; text-align: center;}.container h1 { font-size: 40px; -webkit-transition-duration: 1s; transition-duration: 1s; -webkit-transition-timing-function: ease-in-put; transition-timing-function: ease-in-put; font-weight: 200;}form { padding: 20px 0; position: relative; z-index: 2;}form input { -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: 0; border: 1px solid rgba(255, 255, 255, 0.4); background-color: rgba(255, 255, 255, 0.2); width: 250px; border-radius: 3px; padding: 10px 15px; margin: 0 auto 10px auto; display: block; text-align: center; font-family: "Microsoft YaHei"; font-size: 18px; color: white; -webkit-transition-duration: 0.25s; transition-duration: 0.25s; font-weight: 300;}form input:hover { background-color: rgba(255, 255, 255, 0.4);}form input:focus { background-color: white; width: 300px; color: #ee9ca7;}form button { -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: 0; background-color: white; font-family: "Microsoft YaHei"; border: 0; padding: 10px 15px; color: #ee9ca7; border-radius: 3px; width: 250px; cursor: pointer; font-size: 18px; -webkit-transition-duration: 0.25s; transition-duration: 0.25s;}form button:hover { background-color: #f5f7f9;}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/birthday-cake.js"/>
<url>/birthday/js/birthday-cake.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>// loadAudioFile('music/2.mp3');]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/css/birthday-cake.css"/>
<url>/birthday/css/birthday-cake.css</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>body {width: 100%;height: 100%;margin: 0;overflow:hidden;background: #ee9ca7; background: -webkit-linear-gradient(top left, #ee9ca7 0%, #ee9ca7 100%); background: linear-gradient(to bottom right, #ee9ca7 0%, #ee9ca7 100%);}#cake { display: block; position: relative; margin: -10em auto 0 auto;}/* ============================================== Candle*/.velas { background: #ffffff; border-radius: 10px; position: absolute; top: 228px; left: 50%;margin-left: -2.5px;margin-top: -8.33333333px; width: 5px; height: 35px; -webkit-transform: translateY(-300px); -ms-transform: translateY(-300px); transform: translateY(-300px); -webkit-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; -webkit-animation: in 500ms 6s ease-out forwards; animation: in 500ms 6s ease-out forwards;}.velas:after,.velas:before { background: rgba(255, 0, 0, 0.4); content: ""; position: absolute; width: 100%; height: 2.22222222px;}.velas:after { top: 25%; left: 0;}.velas:before { top: 45%; left: 0;}/* ============================================== Fire*/.fuego { border-radius: 100%; position: absolute; top: -20px; left: 70%; margin-left: -2.2px; width: 6.66666667px; height: 18px;}.fuego:nth-child(1) { -webkit-animation: fuego 2s 6.5s infinite; animation: fuego 2s 6.5s infinite;}.fuego:nth-child(2) { -webkit-animation: fuego 1.5s 6.5s infinite; animation: fuego 1.5s 6.5s infinite;}.fuego:nth-child(3) { -webkit-animation: fuego 1s 6.5s infinite; animation: fuego 1s 6.5s infinite;}.fuego:nth-child(4) { -webkit-animation: fuego 0.5s 6.5s infinite; animation: fuego 0.5s 6.5s infinite;}.fuego:nth-child(5) { -webkit-animation: fuego 0.2s 6.5s infinite; animation: fuego 0.2s 6.5s infinite;}/* ============================================== Animation Fire*/@-webkit-keyframes fuego { 0%, 100% { background: rgba(254, 248, 97, 0.5); -webkit-box-shadow: 0 0 40px 10px rgba(248, 233, 209, 0.2); box-shadow: 0 0 40px 10px rgba(248, 233, 209, 0.2); -webkit-transform: translateY(0) scale(1); transform: translateY(0) scale(1); } 50% { background: rgba(255, 50, 0, 0.1); -webkit-box-shadow: 0 0 40px 20px rgba(248, 233, 209, 0.2); box-shadow: 0 0 40px 20px rgba(248, 233, 209, 0.2); -webkit-transform: translateY(-20px) scale(0); transform: translateY(-20px) scale(0); }}@keyframes fuego { 0%, 100% { background: rgba(254, 248, 97, 0.5); -webkit-box-shadow: 0 0 40px 10px rgba(248, 233, 209, 0.2); box-shadow: 0 0 40px 10px rgba(248, 233, 209, 0.2); -webkit-transform: translateY(0) scale(1); transform: translateY(0) scale(1); } 50% { background: rgba(255, 50, 0, 0.1); -webkit-box-shadow: 0 0 40px 20px rgba(248, 233, 209, 0.2); box-shadow: 0 0 40px 20px rgba(248, 233, 209, 0.2); -webkit-transform: translateY(-20px) scale(0); transform: translateY(-20px) scale(0); }}@-webkit-keyframes in { to { -webkit-transform: translateY(0); transform: translateY(0); }}@keyframes in { to { -webkit-transform: translateY(0); transform: translateY(0); }}.come {animation-delay:0.4s;animation:coming 2s;opacity:1;}@keyframes coming{from{opacity:0;}to {opacity:1;}}@-webkit-keyframes coming{from{opacity:0;}to {opacity:1;}}.happy {position:absolute;left:50%;top:49%;margin-left: -119px;opacity: 1;animation: happybirthdays 10s;animation-delay: 0s;}@keyframes happybirthdays {0% {position:absolute;top:45%;opacity: 0;}70% {position:absolute;top:45%;opacity: 0;}100% {position:absolute;top:49%;opacity: 1;}}@-webkit-keyframes happybirthdays {0% {position:absolute;top:45%;opacity: 0;}70% {position:absolute;top:45%;opacity: 0;}100% {position:absolute;top:49%;opacity: 1;}}.cake-area{width: 100%;display: block;}.button-style1 ,.button-style2{position:absolute;top:70%;opacity:1;z-index:100;}.button-style1 {position:absolute;left:20%;animation:btn1 15s;}.button-style2 {position:absolute;left:68%;animation:btn2 15s;}@keyframes btn1 {0% {opacity:0;left:43.5%;}70% {opacity:0;left:43.5%;}100% {opacity:1;left:20%;}}@-webkit-keyframes btn1 {0% {opacity:0;left:43.5%;}70% {opacity:0;left:43.5%;}100% {opacity:1;left:20%;}}@keyframes btn2 {0% {opacity:0;left:43.5%;}70% {opacity:0;left:43.5%;}100% {opacity:1;left:68%;}}@-webkit-keyframes btn2 {0% {opacity:0;left:43.5%;}70% {opacity:0;left:43.5%;}100% {opacity:1;left:68%;}}.lk1,.lk2 {text-decoration:none;font-family: Microsoft YaHei;color:#fff;transition:all 0.5s;}.link1,.link2 {width:170px;height:60px;border:2px solid #fff;-webkit-border:1px solid #fff;border-radius:30px;font-size: 23px;text-align:center;background: #ee9ca7;transition:all 0.8s;}.link2 {cursor:not-allowed;}.bt1,.bt2 {position:relative;top:22%;vertical-align:middle;}a.lk1:hover {color:#ee9ca7;transition:all 0.5s;}.link1:hover {background-color:#fff;background-color:rgba(255,255,255,0,2);border:2px solid #BBB;transition:all 0.8s;}a.lk2:hover {color:#ee9ca7;transition:all 0.5s;}.link2:hover {background-color:#fff;background-color:rgba(255,255,255,0,2);border:2px solid #BBB;transition:all 0.8s;}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/html/login.html"/>
<url>/birthday/html/login.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><!doctype html><html lang="zh"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Happy Birthday</title><link rel="stylesheet" type="text/css" href="../css/login.css"><link rel="stylesheet" href="../css/bubbles.css" type="text/css"><meta name="generator" content="Hexo 4.2.0"></head><body><div class="htmleaf-container"><div class="wrapper"><div class="container"><h1>生日快乐</h1><form class="form"><input id="userName" name="userName" type="text" placeholder="姓名"><input id="pwd" name="pwd" type="password" placeholder="密码"><button type="submit" id="login-button">进入</button></form></div><ul class="bg-bubbles"><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul></div></div><script src="../js/jquery-2.1.1.min.js" type="text/javascript"></script><script src="../js/login.js" type="text/javascript"></script><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"/live2dw/assets/assets/hijiki.model.json"},"display":{"position":"right","width":150,"height":250},"mobile":{"show":true},"react":{"opacity":1},"log":false});</script></body></html>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/memories.js"/>
<url>/birthday/js/memories.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>$(function(){ $('#dowebok').fullpage({ 'navigation': true, 'navigationPosition':"left", 'navigationColor':['#fff'], });});// loadAudioFile('music/1.mp3');]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/auto-play.js"/>
<url>/birthday/js/auto-play.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>try { var AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext; var context = new window.AudioContext(); var source = null; var audioBuffer = null; function stopSound() { if (source) { source.stop(0); } } function playSound() { source = context.createBufferSource(); source.buffer = audioBuffer; source.loop = true; source.connect(context.destination); source.start(0); } function initSound(arrayBuffer) { context.decodeAudioData(arrayBuffer, function (buffer) { audioBuffer = buffer; playSound(); }, function (e) { console.log('Error decoding file', e); }); } function loadAudioFile(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.onload = function (e) { initSound(this.response); }; xhr.send(); }} catch (e) { console.log('!Your browser does not support AudioContext');}]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/html/BirthdayCake.html"/>
<url>/birthday/html/BirthdayCake.html</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script><!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Happy Birthday</title> <link rel="stylesheet" href="../css/birthday-cake.css" media="screen" type="text/css"> <link rel="stylesheet" href="../css/bubbles.css" media="screen" type="text/css"><meta name="generator" content="Hexo 4.2.0"></head><body><div class="cake-area"> <div class="velas"> <div class="fuego"></div> <div class="fuego"></div> <div class="fuego"></div> <div class="fuego"></div> <div class="fuego"></div> </div> <svg id="cake" version="1.1" x="0px" y="0px" width="200px" height="500px" viewbox="0 0 200 500" enable-background="new 0 0 200 500" xml:space="preserve"> <path fill="#a88679" d="M173.667-13.94c-49.298,0-102.782,0-147.334,0c-3.999,0-4-16.002,0-16.002 c44.697,0,96.586,0,147.334,0C177.667-29.942,177.668-13.94,173.667-13.94z"> <animate id="bizcocho_3" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1" begin="relleno_2.end" dur="0.3s" fill="freeze" values=" M173.667-13.94c-49.298,0-102.782,0-147.334,0c-3.999,0-4-16.002,0-16.002 c44.697,0,96.586,0,147.334,0C177.667-29.942,177.668-13.94,173.667-13.94z ; M173.667,411.567c-47.995,12.408-102.955,12.561-147.334,0 c-3.848-1.089-0.189-16.089,3.661-15.002c44.836,12.66,90.519,12.753,139.427,0.07 C173.293,395.631,177.541,410.566,173.667,411.567z ; M173.667,427.569c-49.795,0-101.101,0-147.334,0c-3.999,0-4-16.002,0-16.002 c46.385,0,97.539,0,147.334,0C177.668,411.567,177.667,427.569,173.667,427.569z "/> </path> <path fill="#8b6a60" d="M100-178.521c1.858,0,3.364,1.506,3.364,3.363c0,0,0,33.17,0,44.227 c0,19.144,0,57.431,0,76.574c0,10.152,0,40.607,0,40.607c0,1.858-1.506,3.364-3.364,3.364l0,0c-1.858,0-3.364-1.506-3.364-3.364c0,0,0-30.455,0-40.607c0-19.144,0-57.432,0-76.575c0-11.057,0-44.226,0-44.226C96.636-177.015,98.142-178.521,100-178.521 L100-178.521z"> <animate id="relleno_2" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1; 0 0 0.58 1" begin="bizcocho_2.end" dur="0.5s" fill="freeze" values=" M100-178.521c1.858,0,3.364,1.506,3.364,3.363c0,0,0,33.17,0,44.227 c0,19.144,0,57.431,0,76.574c0,10.152,0,40.607,0,40.607c0,1.858-1.506,3.364-3.364,3.364l0,0c-1.858,0-3.364-1.506-3.364-3.364c0,0,0-30.455,0-40.607c0-19.144,0-57.432,0-76.575c0-11.057,0-44.226,0-44.226C96.636-177.015,98.142-178.521,100-178.521 L100-178.521z ; M100,267.257c1.858,0,3.364,1.506,3.364,3.363c0,0,0,33.17,0,44.227 c0,19.143,0,57.43,0,76.574c0,10.151,0,40.606,0,40.606c0,1.858-1.506,3.364-3.364,3.364l0,0c-1.858,0-3.364-1.506-3.364-3.364 c0,0,0-30.455,0-40.606c0-19.145,0-57.432,0-76.576c0-11.057,0-44.225,0-44.225C96.636,268.763,98.142,267.257,100,267.257 L100,267.257z ; M93.928,405.433c-0.655,6.444-0.102,9.067,2.957,11.798c0,0,8.083,5.571,16.828,3.503 c18.629-4.406,43.813,6.194,50.792,7.791c14.75,3.375,9.162,6.867,9.162,6.867c-2.412,2.258-58.328,0-73.667,0l0,0 c-1.858,0-69.995,2.133-73.667,0c0,0-3.337-2.439,6.172-5.992c11.375-4.25,52.875,8.822,47.139-9.442 c-6.333-20.167,5.226-21.514,5.226-21.514c3.435-0.915,12.78-6.663,10.923-0.546L93.928,405.433z ; M102.242,427.569c5.348,0,14.079,0,17.462,0c0,0,17.026,0,27.504,0 c19.143,0,20.39-3.797,26.459,0c3,1.877,0,7.823,0,7.823c-2.412,2.258-58.328,0-73.667,0l0,0c-1.858,0-67.187,0-73.667,0 c0,0-4.125-4.983,0-7.823c5.201-3.58,16.085,0,23.725,0c8.841,0,20.762,0,20.762,0c3.686,0,8.597,0,19.511,0H102.242z "/> </path> <path fill="#a88679" d="M173.667-15.929c-46.512,0-105.486,0-147.334,0c-3.999,0-4-16.002,0-16.002 c43.566,0,97.96,0,147.334,0C177.667-31.931,177.666-15.929,173.667-15.929z"> <animate id="bizcocho_2" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1; 0.25 0 0.58 1" begin="relleno_1.end" dur="0.5s" fill="freeze" values=" M173.667-15.929c-46.512,0-105.486,0-147.334,0c-3.999,0-4-16.002,0-16.002 c43.566,0,97.96,0,147.334,0C177.667-31.931,177.666-15.929,173.667-15.929z ; M173.434,445.393c-47.269,8.001-105.245,8.001-147.334,0c-3.929-0.747-0.692-16.543,3.243-15.824 c43.828,8.001,92.165,8.001,140.739,0C174.029,428.918,177.377,444.726,173.434,445.393z ; M173.667,449.514c-47.576-5.454-102.799-5.744-147.333,0c-3.966,0.512-3.938-15.297,0-16.002 c43.683-7.823,97.646-8.026,147.333,0C177.616,434.15,177.642,449.969,173.667,449.514z ; M173.667,451.394c-49.298,0-102.782,0-147.334,0c-3.999,0-4-16.002,0-16.002 c44.697,0,96.586,0,147.334,0C177.667,435.392,177.668,451.394,173.667,451.394z "/> </path> <path fill="#8b6a60" d="M101.368-73.685c0,12.164,0,15.18,0,28.519c0,22.702,0-13.661,0,8.304c0,14.48,0,18.233,0,30.512 c0,1.753-2.958,1.847-2.958,0c0-12.68,0-16.277,0-30.401c0-21.983,0,11.66,0-8.305c0-13.027,0-15.992,0-28.628 C98.411-75.883,101.368-75.592,101.368-73.685z"> <animate id="relleno_1" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1; 0 0 0.6 1" begin="bizcocho_1.end" dur="0.5s" fill="freeze" values=" M101.368-73.685c0,12.164,0,15.18,0,28.519c0,22.702,0-13.661,0,8.304c0,14.48,0,18.233,0,30.512 c0,1.753-2.958,1.847-2.958,0c0-12.68,0-16.277,0-30.401c0-21.983,0,11.66,0-8.305c0-13.027,0-15.992,0-28.628 C98.411-75.883,101.368-75.592,101.368-73.685z ; M101.368,350.885c0,12.164,0,65.18,0,78.518c0,22.703,0-33.66,0-11.695c0,14.48,0,28.232,0,40.512 c0,1.753-2.958,1.847-2.958,0c0-12.68,0-26.277,0-40.402c0-21.982,0,31.66,0,11.695c0-13.027,0-65.992,0-78.627 C98.411,348.686,101.368,348.977,101.368,350.885z ; M128.38,447.567c37.626,6.312,39.303,13.658,26.833,12.833c-22.653-1.499-13.636-0.831-23.302-0.831 c-14.48,0-17.884,0-30.163,0c-2.087,0-2.068,0-3.915,0c-13.333,0-8.963,0-23.088,0c-11.668,0-14.062,5.995-27.532,1.164 c-12.629-4.529,38.667-3.167,46.833-17.333C100.077,432.94,105.546,443.736,128.38,447.567z ; M173.667,451.394c2.875,0,2.997,9.257,0,9.131c-22.662-0.956-32.09-0.956-41.756-0.956 c-14.48,0-17.884,0-30.163,0c-2.087,0-2.068,0-3.915,0c-13.333,0-8.963,0-23.088,0c-11.668,0-34.99-0.294-48.412,1.831 c-4.109,0.65-3.01-10.006,0-10.006C37.129,451.394,149.379,451.394,173.667,451.394z "/> </path> <path fill="#a88679" d="M173.667,21.571c-33.174,0-111.467,0-147.334,0c-4,0-4-16.002,0-16.002c39.836,0,105.982,0,147.334,0 C177.668,5.569,177.667,21.571,173.667,21.571z"> <animate id="bizcocho_1" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1; 0 0 1 1; 0.25 0 1 1; 0 0 1 1; 0.25 0 0.6 1" begin="2s" dur="0.8s" fill="freeze" values=" M173.667,21.571c-33.174,0-111.467,0-147.334,0c-4,0-4-16.002,0-16.002c39.836,0,105.982,0,147.334,0 C177.668,5.569,177.667,21.571,173.667,21.571z ; M173.667,459.569c-33.197,16.002-110.782,16.002-147.334,0c-3.664-1.604,1.614-15.617,5.337-14.153 c40.702,16.002,94.289,16.104,136.505,0.103C171.917,444.1,177.271,457.832,173.667,459.569z ; M171.817,475.571c-39.361-3.001-105.438-2.571-143.556,0c-3.991,0.27-7.377-14.736-3.387-15.014 c41.553-2.888,104.421-3.121,150.51-0.233C179.378,460.574,175.806,475.875,171.817,475.571z ; M171.817,459.564c-38.8-12.188-104.504-13.762-143.556,0c-3.772,1.329-7.961-12.604-4.178-13.905 c40.864-14.064,105.114-15.52,151.918-0.973C179.822,445.874,175.634,460.762,171.817,459.564z ; M173.667,475.571c-46.376-5.005-105.924-4.003-147.334,0c-3.981,0.385-3.479-15.421,0.479-16.002 c43.087-6.327,97.705-7.083,146.855,0.438C177.621,460.613,177.644,476,173.667,475.571z ; M173.667,474.117c-46.376,1.866-105.638,2.01-147.334,0c-3.995-0.192-3.52-16.144,0.479-16.002 c43.794,1.55,96.341,1.541,145.723,0C176.532,457.99,177.663,473.956,173.667,474.117z ; M173.667,475.571c-46.512,0-105.486,0-147.334,0c-3.999,0-4-16.002,0-16.002c43.566,0,97.96,0,147.334,0 C177.667,459.569,177.666,475.571,173.667,475.571z "/> </path> <path fill="#fefae9" d="M104.812,113.216c0,3.119-2.164,5.67-4.812,5.67c-2.646,0-4.812-2.551-4.812-5.67c0-5.594,0-16.782,0-22.375 c0-5.143,0-15.427,0-20.568c0-7.333,0-21.998,0-29.33c0-5.523,0-16.569,0-22.092c0-3.295,0-9.885,0-13.181 C95.188,2.551,97.353,0,100,0c2.648,0,4.812,2.551,4.812,5.669c0,3.248,0,9.743,0,12.991c0,5.428,0,16.284,0,21.711 c0,7.618,0,22.854,0,30.472c0,4.952,0,14.854,0,19.807C104.812,96.292,104.812,107.576,104.812,113.216z"> <animate id="crema" attributename="d" calcmode="spline" keysplines="0 0 1 1; 0 0 1 1; 0 0 1 1; 0.25 0 1 1; 0 0 1 1; 0 0 0.58 1" begin="bizcocho_3.end" dur="2s" fill="freeze" values=" M104.812,113.216c0,3.119-2.164,5.67-4.812,5.67c-2.646,0-4.812-2.551-4.812-5.67c0-5.594,0-16.782,0-22.375 c0-5.143,0-15.427,0-20.568c0-7.333,0-21.998,0-29.33c0-5.523,0-16.569,0-22.092c0-3.295,0-9.885,0-13.181 C95.188,2.551,97.353,0,100,0c2.648,0,4.812,2.551,4.812,5.669c0,3.248,0,9.743,0,12.991c0,5.428,0,16.284,0,21.711 c0,7.618,0,22.854,0,30.472c0,4.952,0,14.854,0,19.807C104.812,96.292,104.812,107.576,104.812,113.216z ; M104.812,405.897c0,3.119-2.164,5.67-4.812,5.67c-2.646,0-4.812-2.551-4.812-5.67c0-5.594,0-16.782,0-22.376 c0-5.143,0-15.426,0-20.568c0-7.332,0-21.997,0-29.33c0-5.522,0-16.568,0-22.092c0-3.295,0-9.885,0-13.181 c0-3.118,2.165-5.669,4.812-5.669c2.648,0,4.812,2.551,4.812,5.669c0,3.247,0,9.743,0,12.991c0,5.428,0,16.283,0,21.711 c0,7.618,0,22.854,0,30.473c0,4.951,0,14.854,0,19.807C104.812,388.972,104.812,400.256,104.812,405.897z ; M111.873,411.567c-3.119,0-9.226,0-11.874,0c-2.646,0-7.748,0-10.867,0c-7.086,0-12.698,0-18.292,0 c-6.592,0-12.871,7.371-19.166,3.008c-10.043-6.961-7.776-10.169,2.991-17.745c12.61-8.873,27.713,1.994,25.919-7.531 c-2.589-13.742,11.008-14.513,11.365-17.789c0.441-4.051,4.235-11.107,8.051-8.175c3.113,2.393,1.007,8.008,0,13.159 c-1.871,9.569,8.058,2.113,9.494,14.155c2.592,21.732,21.184-0.675,29.309,7.976c5.216,5.553,18.413,5.552,15.426,12.942 c-3.131,7.745-15.825-4.369-23.8,2.903C126.261,418.271,118.301,411.567,111.873,411.567z ; M111.873,411.567c-3.119,0-9.226,0-11.874,0c-2.646,0-9.734,4.069-12.853,4.069 c-7.086,0-10.712-4.069-16.306-4.069c-6.592,0-12.12,6.013-19.166,3.008c-7.053-3.008-7.458,2.026-18.659,1.165 c-6.832-0.525-7.522-3.034-7.533-6.265c-0.037-10.336,22.073-2.452,36.613-2.628c10.234-0.124,19.856-1.439,37.905-2.102 c16.642-0.61,32.699,1.552,46.009,1.927c12.438,0.351,29.663-8.99,31.532,3.315c0.773,5.093-5.605,3.342-11.211,9.579 c-5.093,5.667-7.59-4.605-12.965-3.832c-8.269,1.189-14.962-8.537-22.937-1.265C126.261,418.271,118.301,411.567,111.873,411.567z ; M110.946,413.652c-2.904-1.137-8.405-2.748-12.446-0.97c-6.099,2.685-7.273,10.358-13.253,8.242 c-7.843-2.775-8.953-5.008-14.546-5.01c-24.653-0.011-4.849,26.507-18.264,26.507c-12.377,0,5.791-33.537-19.422-26.682 c-7.703,2.095-9.806-0.942-9.817-4.173c-0.037-10.336,24.357-4.544,38.897-4.72c10.234-0.124,19.856-1.439,37.905-2.102 c16.642-0.61,32.699,1.552,46.009,1.927c12.438,0.351,28.973-8.865,31.532,3.315c1.449,6.896,0.318,15.624-3.874,15.624 c-7.619,0-1.788-15.192-19.243-7.111c-7.581,3.51-15.963-9.738-26.669,1.066C120.644,426.744,118.381,416.561,110.946,413.652z ; M111.547,413.9c-2.969-0.956-8.775-0.949-13.167-0.5c-14.667,1.5-8.325,16.508-14.667,16.666 c-6.667,0.166-0.167-13.5-13.013-14.151c-30.471-1.545-5.572,46.651-18.987,46.651c-12.377,0,10.333-50.166-18.667-44.5 c-7.835,1.531-9.537-1.417-9.548-4.647c-0.037-10.336,23.675-5.177,38.215-5.353c10.234-0.124,20.618-1.671,38.667-2.333 c16.642-0.61,32.023,1.458,45.333,1.833c12.438,0.351,33.819-8.431,33.199,4.001c-0.532,10.666,0.414,26.166-5.245,25.833 c-7.606-0.447-2.954-31.5-19.243-18.899c-7.985,6.177-17.658-5.969-27.377,5.732C118.88,434.066,121.38,417.067,111.547,413.9z ; M111.547,415.233c-6.667-0.834-9.667,4.667-13.833,3.333c-19.649-6.291-8.158,22.176-14.5,22.334 c-6.667,0.166,2.833-18-13.333-22.167c-29.544-7.615-9.667,43.833-20.167,43.833c-10.333,0,8.004-55.006-16.833-39 c-7.5,4.833-9.508-3.78-9.299-7.004c0.799-12.329,23.592-7.153,38.132-7.329c10.234-0.124,20.238-1.505,38.287-2.167 c16.642-0.61,32.903,1.125,46.213,1.5c12.438,0.351,35.058-5.579,31.863,6.451c-5.532,20.833,1.25,28.216-4.409,27.883 c-7.606-0.447-6.058-37.895-20.62-23.333c-10.167,10.166-15.972-0.747-25,12C119.547,443.568,121.798,416.515,111.547,415.233z "/> </path> <rect class="come" x="10" y="475.571" fill="#fefae9" width="180" height="4"/> </svg></div><div class="happy"><a href="../img/HappyBirthday.png" data-fancybox="group" data-caption="undefined" class="fancybox"><img data-src="../img/HappyBirthday.png" class="lazyload"></a></div><div class="button-style1"><a href="Memories.html" class="lk1"><div class="link1"><div class="bt1">我很喜欢</div></div></a></div><div class="button-style2"><a class="lk2"><div class="link2"><div class="bt1">我不喜欢</div></div></a></div><!-- <audio src="music/2.mp3" autoplay="autoplay" loop="loop"></audio> --><ul class="bg-bubbles"> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <script src="../js/jquery.js"></script> <!-- <script src="js/auto-play.js"></script> --> <!-- <script src="js/birthday-cake.js"></script> --> <audio src="../music/2.mp3" autoplay="autoplay" loop="loop"><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({"pluginRootPath":"live2dw/","pluginJsPath":"lib/","pluginModelPath":"assets/","tagMode":false,"debug":false,"model":{"jsonPath":"/live2dw/assets/assets/hijiki.model.json"},"display":{"position":"right","width":150,"height":250},"mobile":{"show":true},"react":{"opacity":1},"log":false});</script></audio></body></html>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/jquery.js"/>
<url>/birthday/js/jquery.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>/*! * jQuery JavaScript Library v1.11.0 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2014-01-23T21:02Z */(function(e,t){typeof module=="object"&&typeof module.exports=="object"?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)})(typeof window!="undefined"?window:this,function(e,t){function y(e){var t=e.length,n=p.type(e);return n==="function"||p.isWindow(e)?!1:e.nodeType===1&&t?!0:n==="array"||t===0||typeof t=="number"&&t>0&&t-1 in e}function x(e,t,n){if(p.isFunction(t))return p.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return p.grep(e,function(e){return e===t!==n});if(typeof t=="string"){if(S.test(t))return p.filter(t,e,n);t=p.filter(t,e)}return p.grep(e,function(e){return p.inArray(e,t)>=0!==n})}function O(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function D(e){var t=_[e]={};return p.each(e.match(M)||[],function(e,n){t[n]=!0}),t}function H(){N.addEventListener?(N.removeEventListener("DOMContentLoaded",B,!1),e.removeEventListener("load",B,!1)):(N.detachEvent("onreadystatechange",B),e.detachEvent("onload",B))}function B(){if(N.addEventListener||event.type==="load"||N.readyState==="complete")H(),p.ready()}function R(e,t,n){if(n===undefined&&e.nodeType===1){var r="data-"+t.replace(q,"-$1").toLowerCase();n=e.getAttribute(r);if(typeof n=="string"){try{n=n==="true"?!0:n==="false"?!1:n==="null"?null:+n+""===n?+n:I.test(n)?p.parseJSON(n):n}catch(i){}p.data(e,t,n)}else n=undefined}return n}function U(e){var t;for(t in e){if(t==="data"&&p.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function z(e,t,r,i){if(!p.acceptData(e))return;var s,o,u=p.expando,a=e.nodeType,f=a?p.cache:e,l=a?e[u]:e[u]&&u;if((!l||!f[l]||!i&&!f[l].data)&&r===undefined&&typeof t=="string")return;l||(a?l=e[u]=n.pop()||p.guid++:l=u),f[l]||(f[l]=a?{}:{toJSON:p.noop});if(typeof t=="object"||typeof t=="function")i?f[l]=p.extend(f[l],t):f[l].data=p.extend(f[l].data,t);return o=f[l],i||(o.data||(o.data={}),o=o.data),r!==undefined&&(o[p.camelCase(t)]=r),typeof t=="string"?(s=o[t],s==null&&(s=o[p.camelCase(t)])):s=o,s}function W(e,t,n){if(!p.acceptData(e))return;var r,i,s=e.nodeType,o=s?p.cache:e,u=s?e[p.expando]:p.expando;if(!o[u])return;if(t){r=n?o[u]:o[u].data;if(r){p.isArray(t)?t=t.concat(p.map(t,p.camelCase)):t in r?t=[t]:(t=p.camelCase(t),t in r?t=[t]:t=t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!U(r):!p.isEmptyObject(r))return}}if(!n){delete o[u].data;if(!U(o[u]))return}s?p.cleanData([e],!0):c.deleteExpando||o!=o.window?delete o[u]:o[u]=null}function tt(){return!0}function nt(){return!1}function rt(){try{return N.activeElement}catch(e){}}function it(e){var t=st.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Et(e,t){var n,r,i=0,s=typeof e.getElementsByTagName!==j?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==j?e.querySelectorAll(t||"*"):undefined;if(!s)for(s=[],n=e.childNodes||e;(r=n[i])!=null;i++)!t||p.nodeName(r,t)?s.push(r):p.merge(s,Et(r,t));return t===undefined||t&&p.nodeName(e,t)?p.merge([e],s):s}function St(e){K.test(e.type)&&(e.defaultChecked=e.checked)}function xt(e,t){return p.nodeName(e,"table")&&p.nodeName(t.nodeType!==11?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Tt(e){return e.type=(p.find.attr(e,"type")!==null)+"/"+e.type,e}function Nt(e){var t=mt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Ct(e,t){var n,r=0;for(;(n=e[r])!=null;r++)p._data(n,"globalEval",!t||p._data(t[r],"globalEval"))}function kt(e,t){if(t.nodeType!==1||!p.hasData(e))return;var n,r,i,s=p._data(e),o=p._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)p.event.add(t,n,u[n][r])}o.data&&(o.data=p.extend({},o.data))}function lt(e,t){var n,r,i;if(t.nodetype!="=1)return;n=t.nodeName.toLowerCase();if(!c.noCloneEvent&&t[p.expando]){i=p._data(t);for(r" in i.events)p.removeevent(t,r,i.handle);t.removeattribute(p.expando)}if(n="==" script"&&t.text!="=e.text)Tt(t).text=e.text,Nt(t);else"" if(n="==" object")t.parentnode&&(t.outerhtml="e.outerHTML),c.html5Clone&&e.innerHTML&&!p.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML);else"" mt(t,n){var r="p(n.createElement(t)).appendTo(n.body),i=e.getDefaultComputedStyle?e.getDefaultComputedStyle(r[0]).display:p.css(r[0]," display");return" r.detach(),i}function _t(e){var t="N,n=Ot[e];if(!n){n=Mt(e,t);if(n===" none"||!n)at="(At||p("<iframe"" frameborder="0" width="0" height="0">")).appendTo(t.documentElement),t=(At[0].contentWindow||At[0].contentDocument).document,t.write(),t.close(),n=Mt(e,t),At.detach();Ot[e]=n}return n}function Ft(e,t){return{get:function(){var n=e();if(n==null)return;if(n){delete this.get;return}return(this.get=t).apply(this,arguments)}}}function $t(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Vt.length;while(i--){t=Vt[i]+n;if(t in e)return t}return r}function Jt(e,t){var n,r,i,s=[],o=0,u=e.length;for(;o<u;o++){r=e[o];if(!r.style)continue;s[o]=p._data(r,"olddisplay"),n=r.style.display,t?(!s[o]&&n==="none"&&(r.style.display=""),r.style.display===""&&$(r)&&(s[o]=p._data(r,"olddisplay",_t(r.nodename)))):s[o]||(i=$(r),(n&&n!=="none"||!i)&&p._data(r,"olddisplay",i?n:p.css(r,"display")))}for(o=0;o<u;o++){r=e[o];if(!r.style)continue;if(!t||r.style.display==="none"||r.style.display==="")r.style.display=t?s[o]||"":"none"}return e}function kt(e,t,n){var r="Ut.exec(t);return" r?math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function qt(e,t,n,r,i){var s="n===(r?" border":"content")?4:t="=="width"?1:0,o=0;for(;s<4;s+=2)n==="margin"&&(o+=p.css(e,n+V[s],!0,i)),r?(n==="content"&&(o-=p.css(e,"padding"+V[s],!0,i)),n!=="margin"&&(o-=p.css(e,"border"+V[s]+"Width",!0,i))):(o+=p.css(e,"padding"+V[s],!0,i),n!=="padding"&&(o+=p.css(e,"border"+V[s]+"Width",!0,i)));return"" o}function gt(e,t,n){var i;r="o&&(c.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return" i+qt(e,t,n||(o?"border":"content"),r,s)+"px"}function yt(e,t,n,r,i){return new yt.prototype.init(e,t,n,r,i)}function un(){return settimeout(function(){zt="undefined}),Zt=p.now()}function" an(e,t){var n,r="{height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=V[i],r[" margin"+n]="r["padding"+n]=e;return"" t&&(r.opacity="r.width=e),r}function" fn(e,t,n){var r,i="(on[t]||[]).concat(on[" *"]),s="0,o=i.length;for(;s<o;s++)if(r=i[s].call(n,t,e))return"" r}function ln(e,t,n){var r,i,s,o,u,a,f,l,h="this,d={},v=e.style,m=e.nodeType&&$(e),g=p._data(e," fxshow");n.queue||(u="p._queueHooks(e,"fx"),u.unqueued==null&&(u.unqueued=0,a=u.empty.fire,u.empty.fire=function(){u.unqueued||a()}),u.unqueued++,h.always(function(){h.always(function(){u.unqueued--,p.queue(e,"fx").length||u.empty.fire()})})),e.nodeType===1&&("height"in"" t||"width"in t)&&(n.overflow="[v.overflow,v.overflowX,v.overflowY],f=p.css(e," display"),l="_t(e.nodeName),f==="none"&&(f=l),f==="inline"&&p.css(e,"float")==="none"&&(!c.inlineBlockNeedsLayout||l==="inline"?v.display="inline-block":v.zoom=1)),n.overflow&&(v.overflow="hidden",c.shrinkWrapBlocks()||h.always(function(){v.overflow=n.overflow[0],v.overflowX=n.overflow[1],v.overflowY=n.overflow[2]}));for(r"" in t){i="t[r];if(tn.exec(i)){delete" t[r],s="s||i===" toggle";if(i="==(m?"hide":"show")){if(i!=="show"||!g||g[r]===undefined)continue;m=!0}d[r]=g&&g[r]||p.style(e,r)}}if(!p.isEmptyObject(d)){g?"hidden"in"" g&&(m="g.hidden):g=p._data(e," fxshow",{}),s&&(g.hidden="!m),m?p(e).show():h.done(function(){p(e).hide()}),h.done(function(){var"" t;p._removedata(e,"fxshow");for(t d)p.style(e,t,d[t])});for(r d)o="fn(m?g[r]:0,r,h),r" g||(g[r]="o.start,m&&(o.end=o.start,o.start=r===" width"||r="=="height"?1:0))}}function"" cn(e,t){var n,r,i,s,o;for(n e){r="p.camelCase(n),i=t[r],s=e[n],p.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete" e[n]),o="p.cssHooks[r];if(o&&" expand"in" o){s="o.expand(s),delete" e[r];for(n s)n e||(e[n]="s[n],t[n]=i)}else" t[r]="i}}function" hn(e,t,n){var r,i,s="0,o=sn.length,u=p.Deferred().always(function(){delete" a.elem}),a="function(){if(i)return!1;var" t="Zt||un(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,s=1-r,o=0,a=f.tweens.length;for(;o<a;o++)f.tweens[o].run(s);return" u.notifywith(e,[f,s,n]),s<1&&a?n:(u.resolvewith(e,[f]),!1)},f="u.promise({elem:e,props:p.extend({},t),opts:p.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Zt||un(),duration:n.duration,tweens:[],createTween:function(t,n){var" f.tweens.push(r),r},stop:function(t){var n="0,r=t?f.tweens.length:0;if(i)return" this;i="!0;for(;n<r;n++)f.tweens[n].run(1);return" t?u.resolvewith(e,[f,t]):u.rejectwith(e,[f,t]),this}}),l="f.props;cn(l,f.opts.specialEasing);for(;s<o;s++){r=sn[s].call(f,e,l,f.opts);if(r)return" r}return p.map(l,fn,f),p.isfunction(f.opts.start)&&f.opts.start.call(e,f),p.fx.timer(p.extend(a,{elem:e,anim:f,queue:f.opts.queue})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function in(e){return function(t,n){typeof t!="string" &&(n="t,t=" *");var" qn(e,t,n,r){function o(u){var a;return i[u]="!0,p.each(e[u]||[],function(e,u){var" f="u(t,n,r);if(typeof" t.datatypes.unshift(f),o(f),!1;if(s)return!(a="f)}),a}var" i="{},s=e===Bn;return" o(t.datatypes[0])||!i["*"]&&o("*")}function rn(e,t){var n,r,i="p.ajaxSettings.flatOptions||{};for(r" t)t[r]!="=undefined&&((i[r]?e:n||(n={}))[r]=t[r]);return" n&&p.extend(!0,e,n),e}function un(e,t,n){var r,i,s,o,u="e.contents,a=e.dataTypes;while(a[0]===" *")a.shift(),i="==undefined&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(o"" u)if(u[o]&&u[o].test(i)){a.unshift(o);break}if(a[0]in n)s="a[0];else{for(o" n){if(!a[0]||e.converters[o+" "+a[0]]){s="o;break}r||(r=o)}s=s||r}if(s)return" s!="=a[0]&&a.unshift(s),n[s]}function" zn(e,t,n,r){var i,s,o,u,a,f="{},l=e.dataTypes.slice();if(l[1])for(o" e.converters)f[o.tolowercase()]="e.converters[o];s=l.shift();while(s){e.responseFields[s]&&(n[e.responseFields[s]]=t),!a&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),a=s,s=l.shift();if(s)if(s===" *")s="a;else"" if(a!="=" *"&&a!="=s){o=f[a+""" "+s]||f["* "+s];if(!o)for(i f){u="i.split(" " ");if(u[1]="==s){o=f[a+" "+u[0]]||f["* "+u[0]];if(o){o="==!0?o=f[i]:f[i]!==!0&&(s=u[0],l.unshift(u[1]));break}}}if(o!==!0)if(o&&e[" throws"])t="o(t);else"" try{t="o(t)}catch(c){return{state:" parsererror",error:o?c:"no" conversion from "+a+" to "+s}}}}return{state:"success",data:t}}function kn(e,t,n,r){var i;if(p.isarray(t))p.each(t,function(t,i){n||xn.test(e)?r(e,i):kn(e+"["+(typeof if(!n&&p.type(t)="==" object")for(i" t)kn(e+"["+i+"]",t[i],n,r);else r(e,t)}function zn(){try{return e.xmlhttprequest}catch(t){}}function er(){try{return e.activexobject("microsoft.xmlhttp")}catch(t){}}function sr(e){return p.iswindow(e)?e:e.nodetype="==9?e.defaultView||e.parentWindow:!1}var" p.fn.init(e,t)},d="/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,v=/^-ms-/,m=/-([\da-z])/gi,g=function(e,t){return" t.touppercase()};p.fn="p.prototype={jquery:h,constructor:p,selector:" ",length:0,toarray:function(){return" r.call(this)},get:function(e){return e!="null?e<0?this[e+this.length]:this[e]:r.call(this)},pushStack:function(e){var" t.prevobject="this,t.context=this.context,t},each:function(e,t){return" p.each(this,e,t)},map:function(e){return this.pushstack(p.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushstack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var this.pushstack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevobject||this.constructor(null)},push:s,sort:n.sort,splice:n.splice},p.extend="p.fn.extend=function(){var" e,t,n,r,i,s,o="arguments[0]||{},u=1,a=arguments.length,f=!1;typeof" o="=" boolean"&&(f="o,o=arguments[u]||{},u++),typeof"" o!="object" &&!p.isfunction(o)&&(o="{}),u===a&&(o=this,u--);for(;u<a;u++)if((i=arguments[u])!=null)for(r" in i){e="o[r],n=i[r];if(o===n)continue;f&&n&&(p.isPlainObject(n)||(t=p.isArray(n)))?(t?(t=!1,s=e&&p.isArray(e)?e:[]):s=e&&p.isPlainObject(e)?e:{},o[r]=p.extend(f,s,n)):n!==undefined&&(o[r]=n)}return" o},p.extend({expando:"jquery"+(h+math.random()).replace( \d g,""),isready:!0,error:function(e){throw new error(e)},noop:function(){},isfunction:function(e){return p.type(e)="==" function"},isarray:array.isarray||function(e){return" e!="null&&e==e.window},isNumeric:function(e){return" e-parsefloat(e)>=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||p.type(e)!=="object"||e.nodeType||p.isWindow(e))return!1;try{if(e.constructor&&!f.call(e,"constructor")&&!f.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(c.ownLast)for(t in e)return f.call(e,t);for(t in e);return t===undefined||f.call(e,t)},type:function(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?u[a.call(e)]||"object":typeof e},globalEval:function(t){t&&p.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(v,"ms-").replace(m,g)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,s=e.length,o=y(e);if(n)if(o)for(;i<s;i++){r=t.apply(e[i],n);if(r===!1)break}else for(i in e){r="t.apply(e[i],n);if(r===!1)break}else" if(o)for(;i<s;i++){r="t.call(e[i],i,e[i]);if(r===!1)break}else" e},trim:l&&!l.call("")?function(e){return e="=null?" ":l.call(e)}:function(e){return" n="t||[];return" e!="null&&(y(Object(e))?p.merge(n,typeof" r;if(t){if(o)return o.call(t,e,n);r="t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n" t&&t[n]="==e)return" n}return-1},merge:function(e,t){var e.length="i,e},grep:function(e,t,n){var" r,i="[],s=0,o=e.length,u=!n;for(;s<o;s++)r=!t(e[s],s),r!==u&&i.push(e[s]);return" i},map:function(e,t,n){var r,s="0,o=e.length,u=y(e),a=[];if(u)for(;s<o;s++)r=t(e[s],s,n),r!=null&&a.push(r);else" for(s e)r="t(e[s],s,n),r!=null&&a.push(r);return" i.apply([],a)},guid:1,proxy:function(e,t){var n,i,s;return typeof t="=" string"&&(s="e[t],t=e,e=s),p.isFunction(e)?(n=r.call(arguments,2),i=function(){return"" e.apply(t||this,n.concat(r.call(arguments)))},i.guid="e.guid=e.guid||p.guid++,i):undefined},now:function(){return+(new" date)},support:c}),p.each("boolean number string function array date regexp object error".split(" "),function(e,t){u["[object "+t+"]"]="t.toLowerCase()});var" b="function(e){function" rt(e,t,r,i){var s,o,u,a,f,h,v,m,w,e;(t?t.ownerdocument||t:b)!="=c&&l(t),t=t||c,r=r||[];if(!e||typeof" )return r;if((a="t.nodeType)!==1&&a!==9)return[];if(p&&!i){if(s=G.exec(e))if(u=s[1]){if(a===9){o=t.getElementById(u);if(!o||!o.parentNode)return" r;if(o.id="==u)return" r.push(o),r}else if(t.ownerdocument&&(o="t.ownerDocument.getElementById(u))&&g(t,o)&&o.id===u)return" r.push(o),r}else{if(s[2])return _.apply(r,t.getelementsbytagname(e)),r;if((u="s[3])&&n.getElementsByClassName&&t.getElementsByClassName)return" _.apply(r,t.getelementsbyclassname(u)),r}if(n.qsa&&(!d||!d.test(e))){m="v=y,w=t,E=a===9&&e;if(a===1&&t.nodeName.toLowerCase()!==" object"){h="dt(e),(v=t.getAttribute("id"))?m=v.replace(Z,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"']"" ",f="h.length;while(f--)h[f]=m+vt(h[f]);w=Y.test(e)&&ht(t.parentNode)||t,E=h.join(" ,")}if(e)try{return" _.apply(r,w.queryselectorall(e)),r}catch(s){}finally{v||t.removeattribute("id")}}}return xt(e.replace(r,"$1"),t,r,i)}function it(){function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function st(e){return e[y]=!0,e}function ot(e){var t=c.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t){var n=e.split("|"),i=e.length;while(i--)r.attrHandle[n[i]]=t}function at(e,t){var n=t&&e,r=n&&e.nodeType===1&&t.nodeType===1&&(~t.sourceIndex||k)-(~e.sourceIndex||k);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function ct(e){return st(function(t){return t=+t,st(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ht(e){return e&&typeof e.getElementsByTagName!==C&&e}function pt(){}function dt(e,t){var n,i,s,o,u,a,f,l=x[e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=r.preFilter;while(u){if(!n||(i=U.exec(u)))i&&(u=u.slice(i[0].length)||u),a.push(s=[]);n=!1;if(i=z.exec(u))n=i.shift(),s.push({value:n,type:i[0].replace(R," ")}),u=u.slice(n.length);for(o in r.filter)(i=$[o].exec(u))&&(!f[o]||(i=f[o](i)))&&(n=i.shift(),s.push({value:n,type:o,matches:i}),u=u.slice(n.length));if(!n)break}return t?u.length:u?rt.error(e):x(e,a).slice(0)}function vt(e){var t=0,n=e.length,r="";for(;t<n;t++)r+=e[t].value;return r}function mt(e,t,n){var r="t.dir,i=n&&r===" parentnode",s="E++;return"" t.first?function(t,n,s){while(t="t[r])if(t.nodeType===1||i)return" e(t,n,s)}:function(t,n,o){var u,a,f="[w,s];if(o){while(t=t[r])if(t.nodeType===1||i)if(e(t,n,o))return!0}else" while(t="t[r])if(t.nodeType===1||i){a=t[y]||(t[y]={});if((u=a[r])&&u[0]===w&&u[1]===s)return" f[2]="u[2];a[r]=f;if(f[2]=e(t,n,o))return!0}}}function" gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function yt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function bt(e,t,n,r,i,s){return r&&!r[y]&&(r="bt(r)),i&&!i[y]&&(i=bt(i,s)),st(function(s,o,u,a){var" f,l,c,h="[],p=[],d=o.length,v=s||St(t||" *",u.nodetype?[u]:u,[]),m="e&&(s||!t)?yt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=yt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?P.call(s,c):h[l])"">-1&&(s[f]=!(o[f]=c))}}else g=yt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):_.apply(o,g)})}function wt(e){var t,n,i,s=e.length,o=r.relative[e[0].type],a=o||r.relative[" "],f=o?1:0,l=mt(function(e){return e===t},a,!0),c=mt(function(e){return P.call(t,e)>-1},a,!0),h=[function(e,n,r){return!o&&(r||n!==u)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];for(;f<s;f++)if(n=r.relative[e[f].type])h=[mt(gt(h),n)];else{n=r.filter[e[f].type].apply(null,e[f].matches);if(n[y]){i=++f;for(;i<s;i++)if(r.relative[e[i].type])break;return bt(f>1&>(h),f>1&&vt(e.slice(0,f-1).concat({value:e[f-2].type===" "?"*":""})).replace(R,"$1"),n,f<i&&wt(e.slice(f,i)),i<s&&wt(e=e.slice(i)),i<s&&vt(e))}h.push(n)}return gt(h)}function et(e,t){var n="t.length">0,i=e.length>0,s=function(s,o,a,f,l){var h,p,d,v=0,m="0",g=s&&[],y=[],b=u,E=s||i&&r.find.TAG("*",l),S=w+=b==null?1:Math.random()||.1,x=E.length;l&&(u=o!==c&&o);for(;m!==x&&(h=E[m])!=null;m++){if(i&&h){p=0;while(d=e[p++])if(d(h,o,a)){f.push(h);break}l&&(w=S)}n&&((h=!d&&h)&&v--,s&&g.push(h))}v+=m;if(n&&m!==v){p=0;while(d=t[p++])d(g,y,o,a);if(s){if(v>0)while(m--)!g[m]&&!y[m]&&(y[m]=O.call(f));y=yt(y)}_.apply(f,y),l&&!s&&y.length>0&&v+t.length>1&&rt.uniqueSort(f)}return l&&(w=S,u=b),g};return n?st(s):s}function St(e,t,n){var r=0,i=t.length;for(;r<i;r++)rt(e,t[r],n);return n}function xt(e,t,i,s){var u,a,f,l,c,h="dt(e);if(!s&&h.length===1){a=h[0]=h[0].slice(0);if(a.length">2&&(f=a[0]).type==="ID"&&n.getById&&t.nodeType===9&&p&&r.relative[a[1].type]){t=(r.find.ID(f.matches[0].replace(et,tt),t)||[])[0];if(!t)return i;e=e.slice(a.shift().value.length)}u=$.needsContext.test(e)?0:a.length;while(u--){f=a[u];if(r.relative[l=f.type])break;if(c=r.find[l])if(s=c(f.matches[0].replace(et,tt),Y.test(a[0].type)&&ht(t.parentNode)||t)){a.splice(u,1),e=s.length&&vt(a);if(!e)return _.apply(i,s),i;break}}}return o(e,h)(s,t,!p,i,Y.test(e)&&ht(t.parentNode)||t),i}var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y="sizzle"+ -(new Date),b=e.document,w=0,E=0,S=it(),x=it(),T=it(),N=function(e,t){return e===t&&(f=!0),0},C=typeof undefined,k=1<<31,l={}.hasownproperty,a=[],o=a.pop,m=a.push,_=a.push,d=a.slice,p=a.indexof||function(e){var t="0,n=this.length;for(;t<n;t++)if(this[t]===e)return" t;return-1},h="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" ,b="[\\x20\\t\\r\\n\\f]" ,j="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" ,f="j.replace(" w","w#"),i="\\[" +b+"*("+j+")"+b+"*(?:([*^$|!~]?=")"+B+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+F+")|)|)"+B+"*\\]",q=":("+j+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+I.replace(3,8)+")*)|.*)\\)|)",R=new"" regexp("^"+b+"+|((?:^|[^\\\\])(?:\\\\.)*)"+b+"+$","g"),u="new" regexp("^"+b+"*,"+b+"*"),z="new" regexp("^"+b+"*([>+~]|"+B+")"+B+"*"),W=new RegExp("="+B+"*([^\\]'\"]*?)"+B+"*\\]","g"),X=new RegExp(q),V=new RegExp("^"+F+"$"),$={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\.("+j+")"),TAG:new RegExp("^("+j.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+B+"*(even|odd|(([+-]|)(\\d*)n|)"+B+"*(?:([+-]|)"+B+"*(\\d+)|))"+B+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+B+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+B+"*((?:-\\d)?\\d*)"+B+"*\\)|)(?=[^-]|$)","i")},J=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,G=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Y=/[+~]/,Z=/'|\\/g,et=new RegExp("\\\\([\\da-f]{1,6}"+B+"?|("+B+")|.)","ig"),tt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?string.fromcharcode(r+65536):string.fromcharcode(r>>10|55296,r&1023|56320)};try{_.apply(A=D.call(b.childNodes),b.childNodes),A[b.childNodes.length].nodeType}catch(nt){_={apply:A.length?function(e,t){M.apply(e,D.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}n=rt.support={},s=rt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},l=rt.setDocument=function(e){var t,i=e?e.ownerDocument||e:b,o=i.defaultView;if(i===c||i.nodeType!==9||!i.documentElement)return c;c=i,h=i.documentElement,p=!s(i),o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",function(){l()},!1):o.attachEvent&&o.attachEvent("onunload",function(){l()})),n.attributes=ot(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ot(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(i.getElementsByClassName)&&ot(function(e){return e.innerHTML="<div class="a"></div><div class="a i"></div>",e.firstChild.className="i",e.getElementsByClassName("i").length===2}),n.getById=ot(function(e){return h.appendChild(e).id=y,!i.getElementsByName||!i.getElementsByName(y).length}),n.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==C&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(delete r.find.ID,r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==C&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=n.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==C)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],i=0,s=t.getElementsByTagName(e);if(e==="*"){while(n=s[i++])n.nodeType===1&&r.push(n);return r}return s},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(typeof t.getElementsByClassName!==C&&p)return t.getElementsByClassName(e)},v=[],d=[];if(n.qsa=Q.test(i.querySelectorAll))ot(function(e){e.innerHTML="<select t><option selected></option></select>",e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+B+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||d.push("\\["+B+"*(?:value|"+H+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ot(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&d.push("name"+B+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")});return(n.matchesSelector=Q.test(m=h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ot(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),v.push("!=",q)}),d=d.length&&new RegExp(d.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),g=t||Q.test(h.contains)?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!r&&r.nodeType===1&&!!(n.contains?n.contains(r):e.compareDocumentPosition&&e.compareDocumentPosition(r)&16)}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},N=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,r&1||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===i||e.ownerDocument===b&&g(b,e)?-1:t===i||t.ownerDocument===b&&g(b,t)?1:a?P.call(a,e)-P.call(a,t):0:r&4?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,s=e.parentNode,o=t.parentNode,u=[e],l=[t];if(!s||!o)return e===i?-1:t===i?1:s?-1:o?1:a?P.call(a,e)-P.call(a,t):0;if(s===o)return at(e,t);n=e;while(n=n.parentNode)u.unshift(n);n=t;while(n=n.parentNode)l.unshift(n);while(u[r]===l[r])r++;return r?at(u[r],l[r]):u[r]===b?-1:l[r]===b?1:0},i},rt.matches=function(e,t){return rt(e,null,null,t)},rt.matchesSelector=function(e,t){(e.ownerDocument||e)!==c&&l(e),t=t.replace(W,"='$1']");if(n.matchesSelector&&p&&(!v||!v.test(t))&&(!d||!d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&e.document.nodeType!==11)return r}catch(i){}return rt(t,c,null,[e]).length>0},rt.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),g(e,t)},rt.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var i=r.attrHandle[t.toLowerCase()],s=i&&L.call(r.attrHandle,t.toLowerCase())?i(e,t,!p):undefined;return s!==undefined?s:n.attributes||!p?e.getAttribute(t):(s=e.getAttributeNode(t))&&s.specified?s.value:null},rt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},rt.uniqueSort=function(e){var t,r=[],i=0,s=0;f=!n.detectDuplicates,a=!n.sortStable&&e.slice(0),e.sort(N);if(f){while(t=e[s++])t===e[s]&&(i=r.push(s));while(i--)e.splice(r[i],1)}return a=null,e},i=rt.getText=function(e){var t,n="",r=0,s=e.nodeType;if(!s)while(t=e[r++])n+=i(t);else if(s===1||s===9||s===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(s===3||s===4)return e.nodeValue;return n},r=rt.selectors={cacheLength:50,createPseudo:st,match:$,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1].slice(0,3)==="nth"?(e[3]||rt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd")),e[5]=+(e[7]+e[8]||e[3]==="odd")):e[3]&&rt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return $.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&X.test(n)&&(t=dt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(et,tt).toLowerCase();return e==="*"?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=S[e+" "];return t||(t=new RegExp("(^|"+B+")"+e+"("+B+"|$)"))&&S(e,function(e){return t.test(typeof e.className=="string"&&e.className||typeof e.getAttribute!==C&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=rt.attr(r,e);return i==null?t==="!=":t?(i+="",t==="="?i===n:t==="!="?i!==n:t==="^="?n&&i.indexOf(n)===0:t==="*="?n&&i.indexOf(n)>-1:t==="$="?n&&i.slice(-n.length)===n:t==="~="?(" "+i+" ").indexOf(n)>-1:t==="|="?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var s=e.slice(0,3)!=="nth",o=e.slice(-4)!=="last",u=t==="of-type";return r===1&&i===0?function(e){return!!e.parentNode}:function(t,n,a){var f,l,c,h,p,d,v=s!==o?"nextSibling":"previousSibling",m=t.parentNode,g=u&&t.nodeName.toLowerCase(),b=!a&&!u;if(m){if(s){while(v){c=t;while(c=c[v])if(u?c.nodeName.toLowerCase()===g:c.nodeType===1)return!1;d=v=e==="only"&&!d&&"nextSibling"}return!0}d=[o?m.firstChild:m.lastChild];if(o&&b){l=m[y]||(m[y]={}),f=l[e]||[],p=f[0]===w&&f[1],h=f[0]===w&&f[2],c=p&&m.childNodes[p];while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if(c.nodeType===1&&++h&&c===t){l[e]=[w,p,h];break}}else if(b&&(f=(t[y]||(t[y]={}))[e])&&f[0]===w)h=f[1];else while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if((u?c.nodeName.toLowerCase()===g:c.nodeType===1)&&++h){b&&((c[y]||(c[y]={}))[e]=[w,h]);if(c===t)break}return h-=i,h===r||h%r===0&&h/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||rt.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,s=i(e,t),o=s.length;while(o--)r=P.call(e,s[o]),e[r]=!(n[r]=s[o])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=o(e.replace(R,"$1"));return r[y]?st(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:st(function(e){return function(t){return rt(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||"")||rt.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||n.indexOf(e+"-")===0;while((t=t.parentNode)&&t.nodeType===1);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return k.test(e.nodename)},input:function(e){return j.test(e.nodename)},button:function(e){var t="e.nodeName.toLowerCase();return" t;return e.nodename.tolowercase()="==" input"&&e.type="=="text"&&((t=e.getAttribute("type"))==null||t.toLowerCase()==="text")},first:ct(function(){return[0]}),last:ct(function(e,t){return[t-1]}),eq:ct(function(e,t,n){return[n<0?n+t:n]}),even:ct(function(e,t){var"" n="0;for(;n<t;n+=2)e.push(n);return" e}),odd:ct(function(e,t){var e}),lt:ct(function(e,t,n){var r="n<0?n+t:n;for(;--r">=0;)e.push(r);return e}),gt:ct(function(e,t,n){var r=n<0?n+t:n;for(;++r<t;)e.push(r);return e})}},r .pseudos.nth="r.pseudos.eq;for(t" in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]="ft(t);for(t" in{submit:!0,reset:!0})r.pseudos[t]="lt(t);return" pt.prototype="r.filters=r.pseudos,r.setFilters=new" pt,o="rt.compile=function(e,t){var" n,r="[],i=[],s=T[e+" " "];if(!s){t||(t="dt(e)),n=t.length;while(n--)s=wt(t[n]),s[y]?r.push(s):i.push(s);s=T(e,Et(i,r))}return" s},n.sortstable="y.split(" ").sort(n).join("")="==y,n.detectDuplicates=!!f,l(),n.sortDetached=ot(function(e){return"" e.comparedocumentposition(c.createelement("div"))&1}),ot(function(e){return e.innerhtml="<a href='#'></a>" ,e.firstchild.getattribute("href")="==" #"})||ut("type|href|height|width",function(e,t,n){if(!n)return" e.getattribute(t,t.tolowercase()="==" type"?1:2)}),(!n.attributes||!ot(function(e){return" ,e.firstchild.setattribute("value",""),e.firstchild.getattribute("value")="==" "}))&&ut("value",function(e,t,n){if(!n&&e.nodename.tolowercase()="=="input")return"" e.defaultvalue}),ot(function(e){return e.getattribute("disabled")="=null})||ut(H,function(e,t,n){var" r;if(!n)return e[t]="==!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),rt}(e);p.find=b,p.expr=b.selectors,p.expr[" :"]="p.expr.pseudos,p.unique=b.uniqueSort,p.text=b.getText,p.isXMLDoc=b.isXML,p.contains=b.contains;var"" w="p.expr.match.needsContext,E=/^<(\w+)\s*\/?">(?:<\ \1>|)$/,S=/^.[^:#\[\.,]*$/;p.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),t.length===1&&r.nodeType===1?p.find.matchesSelector(r,e)?[r]:[]:p.find.matches(e,p.grep(t,function(e){return e.nodeType===1}))},p.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(typeof e!="string")return this.pushStack(p(e).filter(function(){for(t=0;t<i;t++)if(p.contains(r[t],this))return!0}));for(t=0;t<i;t++)p.find(e,r[t],n);return n="this.pushStack(i">1?p.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(x(this,e||[],!1))},not:function(e){return this.pushStack(x(this,e||[],!0))},is:function(e){return!!x(this,typeof e=="string"&&w.test(e)?p(e):e||[],!1).length}});var T,N=e.document,C=/^(?:\s*(<[\w\w]+>)[^>]*|#([\w-]*))$/,k=p.fn.init=function(e,t){var n,r;if(!e)return this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charat(e.length-1)===">"&&e.length>=3?n=[null,e,null]:n=C.exec(e);if(n&&(n[1]||!t)){if(n[1]){t=t instanceof p?t[0]:t,p.merge(this,p.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:N,!0));if(E.test(n[1])&&p.isPlainObject(t))for(n in t)p.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}r=N.getElementById(n[2]);if(r&&r.parentNode){if(r.id!==n[2])return T.find(e);this.length=1,this[0]=r}return this.context=N,this.selector=e,this}return!t||t.jquery?(t||T).find(e):this.constructor(t).find(e)}return e.nodeType?(this.context=this[0]=e,this.length=1,this):p.isFunction(e)?typeof T.ready!="undefined"?T.ready(e):e(p):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),p.makeArray(e,this))};k.prototype=p.fn,T=p(N);var L=/^(?:parents|prev(?:Until|All))/,A={children:!0,contents:!0,next:!0,prev:!0};p.extend({dir:function(e,t,n){var r=[],i=e[t];while(i&&i.nodeType!==9&&(n===undefined||i.nodeType!==1||!p(i).is(n)))i.nodeType===1&&r.push(i),i=i[t];return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}}),p.fn.extend({has:function(e){var t,n=p(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(p.contains(this,n[t]))return!0})},closest:function(e,t){var n,r="0,i=this.length,s=[],o=w.test(e)||typeof" e!="string" ?p(e,t||this.context):0;for(;r<i;r++)for(n="this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(o?o.index(n)">-1:n.nodeType===1&&p.find.matchesSelector(n,e))){s.push(n);break}return this.pushStack(s.length>1?p.unique(s):s)},index:function(e){return e?typeof e=="string"?p.inArray(this[0],p(e)):p.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(p.unique(p.merge(this.get(),p(e,t))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),p.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return p.dir(e,"parentNode")},parentsUntil:function(e,t,n){return p.dir(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return p.dir(e,"nextSibling")},prevAll:function(e){return p.dir(e,"previousSibling")},nextUntil:function(e,t,n){return p.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return p.dir(e,"previousSibling",n)},siblings:function(e){return p.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return p.sibling(e.firstChild)},contents:function(e){return p.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:p.merge([],e.childNodes)}},function(e,t){p.fn[e]=function(n,r){var i=p.map(this,t,n);return e.slice(-5)!=="Until"&&(r=n),r&&typeof r=="string"&&(i=p.filter(r,i)),this.length>1&&(A[e]||(i=p.unique(i)),L.test(e)&&(i=i.reverse())),this.pushStack(i)}});var M=/\S+/g,_={};p.Callbacks=function(e){e=typeof e=="string"?_[e]||D(e):p.extend({},e);var t,n,r,i,s,o,u=[],a=!e.once&&[],f=function(c){n=e.memory&&c,r=!0,s=o||0,o=0,i=u.length,t=!0;for(;u&&s<i;s++)if(u[s].apply(c[0],c[1])===!1&&e.stoponfalse){n=!1;break}t=!1,u&&(a?a.length&&f(a.shift()):n?u=[]:l.disable())},l={add:function(){if(u){var r="u.length;(function" s(t){p.each(t,function(t,n){var this},remove:function(){return u&&p.each(arguments,function(e,n){var r;while((r="p.inArray(n,u,r))">-1)u.splice(r,1),t&&(r<=i&&i--,r<=s&&s--)}),this},has:function(e){return e?p.inarray(e,u)>-1:!!u&&!!u.length},empty:function(){return u=[],i=0,this},disable:function(){return u=a=n=undefined,this},disabled:function(){return!u},lock:function(){return a=undefined,n||l.disable(),this},locked:function(){return!a},fireWith:function(e,n){return u&&(!r||a)&&(n=n||[],n=[e,n.slice?n.slice():n],t?a.push(n):f(n)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},p.extend({Deferred:function(e){var t=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return p.Deferred(function(n){p.each(t,function(t,s){var o=p.isFunction(e[t])&&e[t];i[s[1]](function(){var e=o&&o.apply(this,arguments);e&&p.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s[0]+"With"](this===r?n.promise():this,o?[e]:arguments)})}),e=null}).promise()},promise:function(e){return e!=null?p.extend(e,r):r}},i={};return r.pipe=r.then,p.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=function(){return i[s[0]+"With"](this===i?r:this,arguments),this},i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=r.call(arguments),i=n.length,s=i!==1||e&&p.isFunction(e.promise)?i:0,o=s===1?e:p.Deferred(),u=function(e,t,n){return function(i){t[e]=this,n[e]=arguments.length>1?r.call(arguments):i,n===a?o.notifyWith(t,n):--s||o.resolveWith(t,n)}},a,f,l;if(i>1){a=new Array(i),f=new Array(i),l=new Array(i);for(;t<i;t++)n[t]&&p.isfunction(n[t].promise)?n[t].promise().done(u(t,l,n)).fail(o.reject).progress(u(t,f,a)):--s}return s||o.resolvewith(l,n),o.promise()}});var p;p.fn.ready="function(e){return" p.ready.promise().done(e),this},p.extend({isready:!1,readywait:1,holdready:function(e){e?p.readywait++:p.ready(!0)},ready:function(e){if(e="==!0?--p.readyWait:p.isReady)return;if(!N.body)return" settimeout(p.ready);p.isready="!0;if(e!==!0&&--p.readyWait">0)return;P.resolveWith(N,[p]),p.fn.trigger&&p(N).trigger("ready").off("ready")}}),p.ready.promise=function(t){if(!P){P=p.Deferred();if(N.readyState==="complete")setTimeout(p.ready);else if(N.addEventListener)N.addEventListener("DOMContentLoaded",B,!1),e.addEventListener("load",B,!1);else{N.attachEvent("onreadystatechange",B),e.attachEvent("onload",B);var n=!1;try{n=e.frameElement==null&&N.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!p.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}H(),p.ready()}}()}}return P.promise(t)};var j=typeof undefined,F;for(F in p(c))break;c.ownLast=F!=="0",c.inlineBlockNeedsLayout=!1,p(function(){var e,t,n=N.getElementsByTagName("body")[0];if(!n)return;e=N.createElement("div"),e.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",t=N.createElement("div"),n.appendChild(e).appendChild(t);if(typeof t.style.zoom!==j){t.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1";if(c.inlineBlockNeedsLayout=t.offsetWidth===3)n.style.zoom=1}n.removeChild(e),e=t=null}),function(){var e=N.createElement("div");if(c.deleteExpando==null){c.deleteExpando=!0;try{delete e.test}catch(t){c.deleteExpando=!1}}e=null}(),p.acceptData=function(e){var t=p.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return n!==1&&n!==9?!1:!t||t!==!0&&e.getAttribute("classid")===t};var I=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,q=/([A-Z])/g;p.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?p.cache[e[p.expando]]:e[p.expando],!!e&&!U(e)},data:function(e,t,n){return z(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return z(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)}}),p.fn.extend({data:function(e,t){var n,r,i,s=this[0],o=s&&s.attributes;if(e===undefined){if(this.length){i=p.data(s);if(s.nodeType===1&&!p._data(s,"parsedAttrs")){n=o.length;while(n--)r=o[n].name,r.indexOf("data-")===0&&(r=p.camelCase(r.slice(5)),R(s,r,i[r]));p._data(s,"parsedAttrs",!0)}}return i}return typeof e=="object"?this.each(function(){p.data(this,e)}):arguments.length>1?this.each(function(){p.data(this,e,t)}):s?R(s,e,p.data(s,e)):undefined},removeData:function(e){return this.each(function(){p.removeData(this,e)})}}),p.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=p._data(e,t),n&&(!r||p.isArray(n)?r=p._data(e,t,p.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=p.queue(e,t),r=n.length,i=n.shift(),s=p._queueHooks(e,t),o=function(){p.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return p._data(e,n)||p._data(e,n,{empty:p.Callbacks("once memory").add(function(){p._removeData(e,t+"queue"),p._removeData(e,n)})})}}),p.fn.extend({queue:function(e,t){var n=2;return typeof e!="string"&&(t=e,e="fx",n--),arguments.length<n?p.queue(this[0],e):t===undefined?this:this.each(function(){var n="p.queue(this,e,t);p._queueHooks(this,e),e===" fx"&&n[0]!="="inprogress"&&p.dequeue(this,e)})},dequeue:function(e){return"" this.each(function(){p.dequeue(this,e)})},clearqueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r="1,i=p.Deferred(),s=this,o=this.length,u=function(){--r||i.resolveWith(s,[s])};typeof" e!="string" &&(t="e,e=undefined),e=e||" fx";while(o--)n="p._data(s[o],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(u));return"" u(),i.promise(t)}});var x="/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,V=[" top","right","bottom","left"],$="function(e,t){return"" e="t||e,p.css(e," display")="=="none"||!p.contains(e.ownerDocument,e)},J=p.access=function(e,t,n,r,i,s,o){var"" u="0,a=e.length,f=n==null;if(p.type(n)===" object"){i="!0;for(u"" in n)p.access(e,t,u,n[u],!0,s,o)}else if(r!="=undefined){i=!0,p.isFunction(r)||(o=!0),f&&(o?(t.call(e,r),t=null):(f=t,t=function(e,t,n){return" f.call(p(e),n)}));if(t)for(;u<a;u++)t(e[u],n,o?r:r.call(e[u],u,t(e[u],n)))}return i?e:f?t.call(e):a?t(e[0],n):s},k="/^(?:checkbox|radio)$/i;(function(){var" <link><table></table><a href="/a">a</a>",c.leadingWhitespace=t.firstChild.nodeType===3,c.tbody=!t.getElementsByTagName("tbody").length,c.htmlSerialize=!!t.getElementsByTagName("link").length,c.html5Clone=N.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",n.type="checkbox",n.checked=!0,e.appendChild(n),c.appendChecked=n.checked,t.innerHTML="<textarea>x</textarea>",c.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,e.appendChild(t),t.innerHTML="<input type="radio" checked="checked" name="t">",c.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,c.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){c.noCloneEvent=!1}),t.cloneNode(!0).click());if(c.deleteExpando==null){c.deleteExpando=!0;try{delete t.test}catch(r){c.deleteExpando=!1}}e=t=n=null})(),function(){var t,n,r=N.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(c[t+"Bubbles"]=n in e)||(r.setAttribute(n,"t"),c[t+"Bubbles"]=r.attributes[n].expando===!1);r=null}();var Q=/^(?:input|select|textarea)$/i,G=/^key/,Y=/^(?:mouse|contextmenu)|click/,Z=/^(?:focusinfocus|focusoutblur)$/,et=/^([^.]*)(?:\.(.+)|)$/;p.event={global:{},add:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p._data(e);if(!g)return;n.handler&&(a=n,n=a.handler,i=a.selector),n.guid||(n.guid=p.guid++),(o=g.events)||(o=g.events={}),(l=g.handle)||(l=g.handle=function(e){return typeof p===j||!!e&&p.event.triggered===e.type?undefined:p.event.dispatch.apply(l.elem,arguments)},l.elem=e),t=(t||"").match(M)||[""],u=t.length;while(u--){s=et.exec(t[u])||[],d=m=s[1],v=(s[2]||"").split(".").sort();if(!d)continue;f=p.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=p.event.special[d]||{},c=p.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&p.expr.match.needsContext.test(i),namespace:v.join(".")},a);if(!(h=o[d])){h=o[d]=[],h.delegateCount=0;if(!f.setup||f.setup.call(e,r,v,l)===!1)e.addEventListener?e.addEventListener(d,l,!1):e.attachEvent&&e.attachEvent("on"+d,l)}f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,c):h.push(c),p.event.global[d]=!0}e=null},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p.hasData(e)&&p._data(e);if(!g||!(l=g.events))return;t=(t||"").match(M)||[""],f=t.length;while(f--){u=et.exec(t[f])||[],d=m=u[1],v=(u[2]||"").split(".").sort();if(!d){for(d in l)p.event.remove(e,d+t[f],n,r,!0);continue}c=p.event.special[d]||{},d=(r?c.delegateType:c.bindType)||d,h=l[d]||[],u=u[2]&&new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=s=h.length;while(s--)o=h[s],(i||m===o.origType)&&(!n||n.guid===o.guid)&&(!u||u.test(o.namespace))&&(!r||r===o.selector||r==="**"&&o.selector)&&(h.splice(s,1),o.selector&&h.delegateCount--,c.remove&&c.remove.call(e,o));a&&!h.length&&((!c.teardown||c.teardown.call(e,v,g.handle)===!1)&&p.removeEvent(e,d,g.handle),delete l[d])}p.isEmptyObject(l)&&(delete g.handle,p._removeData(e,"events"))},trigger:function(t,n,r,i){var s,o,u,a,l,c,h,d=[r||N],v=f.call(t,"type")?t.type:t,m=f.call(t,"namespace")?t.namespace.split("."):[];u=c=r=r||N;if(r.nodeType===3||r.nodeType===8)return;if(Z.test(v+p.event.triggered))return;v.indexOf(".")>=0&&(m=v.split("."),v=m.shift(),m.sort()),o=v.indexOf(":")<0&&"on"+v,t=t[p.expando]?t:new p.event(v,typeof t="=" object"&&t),t.istrigger="i?2:3,t.namespace=m.join("."),t.namespace_re=t.namespace?new"" regexp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result="undefined,t.target||(t.target=r),n=n==null?[t]:p.makeArray(n,[t]),l=p.event.special[v]||{};if(!i&&l.trigger&&l.trigger.apply(r,n)===!1)return;if(!i&&!l.noBubble&&!p.isWindow(r)){a=l.delegateType||v,Z.test(a+v)||(u=u.parentNode);for(;u;u=u.parentNode)d.push(u),c=u;c===(r.ownerDocument||N)&&d.push(c.defaultView||c.parentWindow||e)}h=0;while((u=d[h++])&&!t.isPropagationStopped())t.type=h">1?a:l.bindType||v,s=(p._data(u,"events")||{})[t.type]&&p._data(u,"handle"),s&&s.apply(u,n),s=o&&u[o],s&&s.apply&&p.acceptData(u)&&(t.result=s.apply(u,n),t.result===!1&&t.preventDefault());t.type=v;if(!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&p.acceptData(r)&&o&&r[v]&&!p.isWindow(r)){c=r[o],c&&(r[o]=null),p.event.triggered=v;try{r[v]()}catch(g){}p.event.triggered=undefined,c&&(r[o]=c)}return t.result},dispatch:function(e){e=p.event.fix(e);var t,n,i,s,o,u=[],a=r.call(arguments),f=(p._data(this,"events")||{})[e.type]||[],l=p.event.special[e.type]||{};a[0]=e,e.delegateTarget=this;if(l.preDispatch&&l.preDispatch.call(this,e)===!1)return;u=p.event.handlers.call(this,e,f),t=0;while((s=u[t++])&&!e.isPropagationStopped()){e.currentTarget=s.elem,o=0;while((i=s.handlers[o++])&&!e.isImmediatePropagationStopped())if(!e.namespace_re||e.namespace_re.test(i.namespace))e.handleObj=i,e.data=i.data,n=((p.event.special[i.origType]||{}).handle||i.handler).apply(s.elem,a),n!==undefined&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation())}return l.postDispatch&&l.postDispatch.call(this,e),e.result},handlers:function(e,t){var n,r,i,s,o=[],u=t.delegateCount,a=e.target;if(u&&a.nodeType&&(!e.button||e.type!=="click"))for(;a!=this;a=a.parentNode||this)if(a.nodeType===1&&(a.disabled!==!0||e.type!=="click")){i=[];for(s=0;s<u;s++)r=t[s],n=r.selector+" ",i[n]="==undefined&&(i[n]=r.needsContext?p(n,this).index(a)">=0:p.find(n,this,null,[a]).length),i[n]&&i.push(r);i.length&&o.push({elem:a,handlers:i})}return u<t.length&&o.push({elem:this,handlers:t.slice(u)}),o},fix:function(e){if(e[p.expando])return e;var t,n,r,i="e.type,s=e,o=this.fixHooks[i];o||(this.fixHooks[i]=o=Y.test(i)?this.mouseHooks:G.test(i)?this.keyHooks:{}),r=o.props?this.props.concat(o.props):this.props,e=new" p.event(s),t="r.length;while(t--)n=r[t],e[n]=s[n];return" e.target||(e.target="s.srcElement||N),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,o.filter?o.filter(e,s):e},props:" altkey" bubbles cancelable ctrlkey currenttarget eventphase metakey relatedtarget shiftkey target timestamp view which".split(" "),fixhooks:{},keyhooks:{props:"char charcode key keycode".split(" "),filter:function(e,t){return e.which="=null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:" button" buttons clientx clienty fromelement offsetx offsety pagex pagey screenx screeny toelement".split(" "),filter:function(e,t){var n,r,i,s="t.button,o=t.fromElement;return" e.pagex="=null&&t.clientX!=null&&(r=e.target.ownerDocument||N,i=r.documentElement,n=r.body,e.pageX=t.clientX+(i&&i.scrollLeft||n&&n.scrollLeft||0)-(i&&i.clientLeft||n&&n.clientLeft||0),e.pageY=t.clientY+(i&&i.scrollTop||n&&n.scrollTop||0)-(i&&i.clientTop||n&&n.clientTop||0)),!e.relatedTarget&&o&&(e.relatedTarget=o===e.target?t.toElement:o),!e.which&&s!==undefined&&(e.which=s&1?1:s&2?3:s&4?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==rt()&&this.focus)try{return" this.focus(),!1}catch(e){}},delegatetype:"focusin"},blur:{trigger:function(){if(this="==rt()&&this.blur)return" this.blur(),!1},delegatetype:"focusout"},click:{trigger:function(){if(p.nodename(this,"input")&&this.type="==" checkbox"&&this.click)return" this.click(),!1},_default:function(e){return p.nodename(e.target,"a")}},beforeunload:{postdispatch:function(e){e.result!="=undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var" i="p.extend(new" p.event,n,{type:e,issimulated:!0,originalevent:{}});r?p.event.trigger(i,null,t):p.event.dispatch.call(t,i),i.isdefaultprevented()&&n.preventdefault()}},p.removeevent="N.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var" r="on" +t;e.detachevent&&(typeof e[r]="==j&&(e[r]=null),e.detachEvent(r,n))},p.Event=function(e,t){if(!(this" instanceof p.event))return new p.event(e,t);e&&e.type?(this.originalevent="e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.defaultPrevented===undefined&&(e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault())?tt:nt):this.type=e,t&&p.extend(this,t),this.timeStamp=e&&e.timeStamp||p.now(),this[p.expando]=!0},p.Event.prototype={isDefaultPrevented:nt,isPropagationStopped:nt,isImmediatePropagationStopped:nt,preventDefault:function(){var" e="this.originalEvent;this.isDefaultPrevented=tt;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){var" n,r="this,i=e.relatedTarget,s=e.handleObj;if(!i||i!==r&&!p.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return" n}}}),c.submitbubbles||(p.event.special.submit="{setup:function(){if(p.nodeName(this," form"))return!1;p.event.add(this,"click._submit" keypress._submit",function(e){var t="e.target,n=p.nodeName(t," input")||p.nodename(t,"button")?t.form:undefined;n&&!p._data(n,"submitbubbles")&&(p.event.add(n,"submit._submit",function(e){e._submit_bubble="!0}),p._data(n,"submitBubbles",!0))})},postDispatch:function(e){e._submit_bubble&&(delete"" e._submit_bubble,this.parentnode&&!e.istrigger&&p.event.simulate("submit",this.parentnode,e,!0))},teardown:function(){if(p.nodename(this,"form"))return!1;p.event.remove(this,"._submit")}}),c.changebubbles||(p.event.special.change="{setup:function(){if(Q.test(this.nodeName)){if(this.type===" checkbox"||this.type="=="radio")p.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,e,!0)});return!1}p.event.add(this,"beforeactivate._change",function(e){var"" e.handleobj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!q.test(this.nodename)}}),c.focusinbubbles||p.each({focus:"focusin",blur:"focusout"},function(e,t){var n="function(e){p.event.simulate(t,e.target,p.event.fix(e),!0)};p.event.special[t]={setup:function(){var" s,o;if(typeof t!="string" &&(n="n||t,t=undefined);for(s" in e)this.on(s,t,n,e[s],i);return this}n="=null&&r==null?(r=t,n=t=undefined):r==null&&(typeof" if(!r)return this;return p().off(e),o.apply(this,arguments)},r.guid="o.guid||(o.guid=p.guid++)),this.each(function(){p.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return" this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventdefault&&e.handleobj)return e)this.off(i,t,e[i]);return this}if(t="==!1||typeof" this.each(function(){p.event.trigger(e,t,this)})},triggerhandler:function(e,t){var p.event.trigger(e,t,n,!0)}});var st="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video" ,ot="/" jquery\d+="(?:null|\d+)" g,ut="new" regexp("<(?:"+st+")[\\s>]","i"),at=/^\s+/,ft=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,lt=/<([\w:]+) ,ct="/<tbody/i,ht=/<|&#?\w+;/,pt=/<(?:script|style|link)/i,dt=/checked\s*(?:[^=]|=\s*.checked.)/i,vt=/^$|\/(?:java|ecma)script/i,mt=/^true\/(.*)/,gt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)">\s*$/g,yt={option:[1,"<select multiple="multiple">","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:c.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},bt=it(N),wt=bt.appendChild(N.createElement("div"));yt.optgroup=yt.option,yt.tbody=yt.tfoot=yt.colgroup=yt.caption=yt.thead,yt.th=yt.td,p.extend({clone:function(e,t,n){var r,i,s,o,u,a=p.contains(e.ownerDocument,e);c.html5Clone||p.isXMLDoc(e)||!ut.test("<"+e.nodename+">")?s=e.cloneNode(!0):(wt.innerHTML=e.outerHTML,wt.removeChild(s=wt.firstChild));if((!c.noCloneEvent||!c.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!p.isXMLDoc(e)){r=Et(s),u=Et(e);for(o=0;(i=u[o])!=null;++o)r[o]&&Lt(i,r[o])}if(t)if(n){u=u||Et(e),r=r||Et(s);for(o=0;(i=u[o])!=null;o++)kt(i,r[o])}else kt(e,s);return r=Et(s,"script"),r.length>0&&Ct(r,!a&&Et(e,"script")),r=u=i=null,s},buildFragment:function(e,t,n,r){var i,s,o,u,a,f,l,h=e.length,d=it(t),v=[],m=0;for(;m<h;m++){s=e[m];if(s||s===0)if(p.type(s)==="object")p.merge(v,s.nodetype?[s]:s);else if(!ht.test(s))v.push(t.createtextnode(s));else{u="u||d.appendChild(t.createElement(" div")),a="(lt.exec(s)||["",""])[1].toLowerCase(),l=yt[a]||yt._default,u.innerHTML=l[1]+s.replace(ft,"<$1"">")+l[2],i=l[0];while(i--)u=u.lastChild;!c.leadingWhitespace&&at.test(s)&&v.push(t.createTextNode(at.exec(s)[0]));if(!c.tbody){s=a==="table"&&!ct.test(s)?u.firstChild:l[1]==="<table>"&&!ct.test(s)?u:0,i=s&&s.childNodes.length;while(i--)p.nodeName(f=s.childNodes[i],"tbody")&&!f.childNodes.length&&s.removeChild(f)}p.merge(v,u.childNodes),u.textContent="";while(u.firstChild)u.removeChild(u.firstChild);u=d.lastChild}}u&&d.removeChild(u),c.appendChecked||p.grep(Et(v,"input"),St),m=0;while(s=v[m++]){if(r&&p.inArray(s,r)!==-1)continue;o=p.contains(s.ownerDocument,s),u=Et(d.appendChild(s),"script"),o&&Ct(u);if(n){i=0;while(s=u[i++])vt.test(s.type||"")&&n.push(s)}}return u=null,d},cleanData:function(e,t){var r,i,s,o,u=0,a=p.expando,f=p.cache,l=c.deleteExpando,h=p.event.special;for(;(r=e[u])!=null;u++)if(t||p.acceptData(r)){s=r[a],o=s&&f[s];if(o){if(o.events)for(i in o.events)h[i]?p.event.remove(r,i):p.removeEvent(r,i,o.handle);f[s]&&(delete f[s],l?delete r[a]:typeof r.removeAttribute!==j?r.removeAttribute(a):r[a]=null,n.push(s))}}}}),p.fn.extend({text:function(e){return J(this,function(e){return e===undefined?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||N).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?p.filter(e,this):this,i=0;for(;(n=r[i])!=null;i++)!t&&n.nodeType===1&&p.cleanData(Et(n)),n.parentNode&&(t&&p.contains(n.ownerDocument,n)&&Ct(Et(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&p.cleanData(Et(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&p.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return p.clone(this,e,t)})},html:function(e){return J(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined)return t.nodeType===1?t.innerHTML.replace(ot,""):undefined;if(typeof e=="string"&&!pt.test(e)&&(c.htmlSerialize||!ut.test(e))&&(c.leadingWhitespace||!at.test(e))&&!yt[(lt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ft,"<$1>");try{for(;n<r;n++)t=this[n]||{},t.nodetype===1&&(p.cleandata(et(t,!1)),t.innerhtml=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replacewith:function(){var e="arguments[0];return" this.dommanip(arguments,function(t){e="this.parentNode,p.cleanData(Et(this)),e&&e.replaceChild(t,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return" this.remove(e,!0)},dommanip:function(e,t){e="i.apply([],e);var" n,r,s,o,u,a,f="0,l=this.length,h=this,d=l-1,v=e[0],m=p.isFunction(v);if(m||l">1&&typeof v=="string"&&!c.checkClone&&dt.test(v))return this.each(function(n){var r=h.eq(n);m&&(e[0]=v.call(this,n,r.html())),r.domManip(e,t)});if(l){a=p.buildFragment(e,this[0].ownerDocument,!1,this),n=a.firstChild,a.childNodes.length===1&&(a=n);if(n){o=p.map(Et(a,"script"),Tt),s=o.length;for(;f<l;f++)r=a,f!==d&&(r=p.clone(r,!0,!0),s&&p.merge(o,et(r,"script"))),t.call(this[f],r,f);if(s){u=o[o.length-1].ownerdocument,p.map(o,nt);for(f=0;f<s;f++)r=o[f],vt.test(r.type||"")&&!p._data(r,"globaleval")&&p.contains(u,r)&&(r.src?p._evalurl&&p._evalurl(r.src):p.globaleval((r.text||r.textcontent||r.innerhtml||"").replace(gt,"")))}a=n=null}}return this}}),p.each({appendto:"append",prependto:"prepend",insertbefore:"before",insertafter:"after",replaceall:"replacewith"},function(e,t){p.fn[e]="function(e){var" n,r="0,i=[],o=p(e),u=o.length-1;for(;r<=u;r++)n=r===u?this:this.clone(!0),p(o[r])[t](n),s.apply(i,n.get());return" this.pushstack(i)}});var at,ot="{};(function(){var" e,t,n="N.createElement(" div"),r="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0" ;n.innerhtml <link><table></table><a href="/a">a</a><input type="checkbox">",e=n.getElementsByTagName("a")[0],e.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(e.style.opacity),c.cssFloat=!!e.style.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=n.style.backgroundClip==="content-box",e=n=null,c.shrinkWrapBlocks=function(){var e,n,i,s;if(t==null){e=N.getElementsByTagName("body")[0];if(!e)return;s="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",n=N.createElement("div"),i=N.createElement("div"),e.appendChild(n).appendChild(i),t=!1,typeof i.style.zoom!==j&&(i.style.cssText=r+";width:1px;padding:1px;zoom:1",i.innerHTML="<div></div>",i.firstChild.style.width="5px",t=i.offsetWidth!==3),e.removeChild(n),e=n=i=null}return t}})();var Dt=/^margin/,Pt=new RegExp("^("+X+")(?!px)[a-z%]+$","i"),Ht,Bt,jt=/^(top|right|bottom|left)$/;e.getComputedStyle?(Ht=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n.getPropertyValue(t)||n[t]:undefined,n&&(o===""&&!p.contains(e.ownerDocument,e)&&(o=p.style(e,t)),Pt.test(o)&&Dt.test(t)&&(r=u.width,i=u.minWidth,s=u.maxWidth,u.minWidth=u.maxWidth=u.width=o,o=n.width,u.width=r,u.minWidth=i,u.maxWidth=s)),o===undefined?o:o+""}):N.documentElement.currentStyle&&(Ht=function(e){return e.currentStyle},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n[t]:undefined,o==null&&u&&u[t]&&(o=u[t]),Pt.test(o)&&!jt.test(t)&&(r=u.left,i=e.runtimeStyle,s=i&&i.left,s&&(i.left=e.currentStyle.left),u.left=t==="fontSize"?"1em":o,o=u.pixelLeft+"px",u.left=r,s&&(i.left=s)),o===undefined?o:o+""||"auto"}),function(){function l(){var t,n,u=N.getElementsByTagName("body")[0];if(!u)return;t=N.createElement("div"),n=N.createElement("div"),t.style.cssText=a,u.appendChild(t).appendChild(n),n.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",p.swap(u,u.style.zoom!=null?{zoom:1}:{},function(){r=n.offsetWidth===4}),i=!0,s=!1,o=!0,e.getComputedStyle&&(s=(e.getComputedStyle(n,null)||{}).top!=="1%",i=(e.getComputedStyle(n,null)||{width:"4px"}).width==="4px"),u.removeChild(t),n=u=null}var t,n,r,i,s,o,u=N.createElement("div"),a="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",f="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";u.innerHTML=" <link><table></table><a href="/a">a</a><input type="checkbox">",t=u.getElementsByTagName("a")[0],t.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(t.style.opacity),c.cssFloat=!!t.style.cssFloat,u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=u.style.backgroundClip==="content-box",t=u=null,p.extend(c,{reliableHiddenOffsets:function(){if(n!=null)return n;var e,t,r,i=N.createElement("div"),s=N.getElementsByTagName("body")[0];if(!s)return;return i.setAttribute("className","t"),i.innerHTML=" <link><table></table><a href="/a">a</a><input type="checkbox">",e=N.createElement("div"),e.style.cssText=a,s.appendChild(e).appendChild(i),i.innerHTML="<table><tr><td></td><td>t</td></tr></table>",t=i.getElementsByTagName("td"),t[0].style.cssText="padding:0;margin:0;border:0;display:none",r=t[0].offsetHeight===0,t[0].style.display="",t[1].style.display="none",n=r&&t[0].offsetHeight===0,s.removeChild(e),i=s=null,n},boxSizing:function(){return r==null&&l(),r},boxSizingReliable:function(){return i==null&&l(),i},pixelPosition:function(){return s==null&&l(),s},reliableMarginRight:function(){var t,n,r,i;if(o==null&&e.getComputedStyle){t=N.getElementsByTagName("body")[0];if(!t)return;n=N.createElement("div"),r=N.createElement("div"),n.style.cssText=a,t.appendChild(n).appendChild(r),i=r.appendChild(N.createElement("div")),i.style.cssText=r.style.cssText=f,i.style.marginRight=i.style.width="0",r.style.width="1px",o=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight),t.removeChild(n)}return o}})}(),p.swap=function(e,t,n,r){var i,s,o={};for(s in t)o[s]=e.style[s],e.style[s]=t[s];i=n.apply(e,r||[]);for(s in t)e.style[s]=o[s];return i};var It=/alpha\([^)]*\)/i,qt=/opacity\s*=\s*([^)]*)/,Rt=/^(none|table(?!-c[ea]).+)/,Ut=new RegExp("^("+X+")(.*)$","i"),zt=new RegExp("^([+-])=("+X+")","i"),Wt={position:"absolute",visibility:"hidden",display:"block"},Xt={letterSpacing:0,fontWeight:400},Vt=["Webkit","O","Moz","ms"];p.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Bt(e,"opacity");return n===""?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":c.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var i,s,o,u=p.camelCase(t),a=e.style;t=p.cssProps[u]||(p.cssProps[u]=$t(a,u)),o=p.cssHooks[t]||p.cssHooks[u];if(n===undefined)return o&&"get"in o&&(i=o.get(e,!1,r))!==undefined?i:a[t];s=typeof n,s==="string"&&(i=zt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(p.css(e,t)),s="number");if(n==null||n!==n)return;s==="number"&&!p.cssNumber[u]&&(n+="px"),!c.clearCloneStyle&&n===""&&t.indexOf("background")===0&&(a[t]="inherit");if(!o||!("set"in o)||(n=o.set(e,n,r))!==undefined)try{a[t]="",a[t]=n}catch(f){}},css:function(e,t,n,r){var i,s,o,u=p.camelCase(t);return t=p.cssProps[u]||(p.cssProps[u]=$t(e.style,u)),o=p.cssHooks[t]||p.cssHooks[u],o&&"get"in o&&(s=o.get(e,!0,n)),s===undefined&&(s=Bt(e,t,r)),s==="normal"&&t in Xt&&(s=Xt[t]),n===""||n?(i=parseFloat(s),n===!0||p.isNumeric(i)?i||0:s):s}}),p.each(["height","width"],function(e,t){p.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&Rt.test(p.css(e,"display"))?p.swap(e,Wt,function(){return Gt(e,t,r)}):Gt(e,t,r)},set:function(e,n,r){var i=r&&Ht(e);return Kt(e,n,r?Qt(e,t,r,c.boxSizing()&&p.css(e,"boxSizing",!1,i)==="border-box",i):0)}}}),c.opacity||(p.cssHooks.opacity={get:function(e,t){return qt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=p.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if((t>=1||t==="")&&p.trim(s.replace(It,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(t===""||r&&!r.filter)return}n.filter=It.test(s)?s.replace(It,i):s+" "+i}}),p.cssHooks.marginRight=Ft(c.reliableMarginRight,function(e,t){if(t)return p.swap(e,{display:"inline-block"},Bt,[e,"marginRight"])}),p.each({margin:"",padding:"",border:"Width"},function(e,t){p.cssHooks[e+t]={expand:function(n){var r=0,i={},s=typeof n=="string"?n.split(" "):[n];for(;r<4;r++)i[e+v[r]+t]=s[r]||s[r-2]||s[0];return i}},dt.test(e)||(p.csshooks[e+t].set="Kt)}),p.fn.extend({css:function(e,t){return" j(this,function(e,t,n){var r,i,s="{},o=0;if(p.isArray(t)){r=Ht(e),i=t.length;for(;o<i;o++)s[t[o]]=p.css(e,t[o],!1,r);return" s}return n!="=undefined?p.style(e,t,n):p.css(e,t)},e,t,arguments.length">1)},show:function(){return Jt(this,!0)},hide:function(){return Jt(this)},toggle:function(e){return typeof e=="boolean"?e?this.show():this.hide():this.each(function(){$(this)?p(this).show():p(this).hide()})}}),p.Tween=Yt,Yt.prototype={constructor:Yt,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(p.cssNumber[n]?"":"px")},cur:function(){var e=Yt.propHooks[this.prop];return e&&e.get?e.get(this):Yt.propHooks._default.get(this)},run:function(e){var t,n=Yt.propHooks[this.prop];return this.options.duration?this.pos=t=p.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yt.propHooks._default.set(this),this}},Yt.prototype.init.prototype=Yt.prototype,Yt.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=p.css(e.elem,e.prop,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){p.fx.step[e.prop]?p.fx.step[e.prop](e):e.elem.style&&(e.elem.style[p.cssProps[e.prop]]!=null||p.cssHooks[e.prop])?p.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yt.propHooks.scrollTop=Yt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},p.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},p.fx=Yt.prototype.init,p.fx.step={};var Zt,en,tn=/^(?:toggle|show|hide)$/,nn=new RegExp("^(?:([+-])=|)("+X+")([a-z%]*)$","i"),rn=/queueHooks$/,sn=[ln],on={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=nn.exec(t),s=i&&i[3]||(p.cssNumber[e]?"":"px"),o=(p.cssNumber[e]||s!=="px"&&+r)&&nn.exec(p.css(n.elem,e)),u=1,a=20;if(o&&o[3]!==s){s=s||o[3],i=i||[],o=+r||1;do u=u||".5",o/=u,p.style(n.elem,e,o+s);while(u!==(u=n.cur()/r)&&u!==1&&--a)}return i&&(o=n.start=+o||+r||0,n.unit=s,n.end=i[1]?o+(i[1]+1)*i[2]:+i[2]),n}]};p.Animation=p.extend(hn,{tweener:function(e,t){p.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],on[n]=on[n]||[],on[n].unshift(t)},prefilter:function(e,t){t?sn.unshift(e):sn.push(e)}}),p.speed=function(e,t,n){var r="e&&typeof" e="=" object"?p.extend({},e):{complete:n||!n&&t||p.isfunction(e)&&e,duration:e,easing:n&&t||t&&!p.isfunction(t)&&t};r.duration="p.fx.off?0:typeof"" r.duration="=" number"?r.duration:r.duration" in p.fx.speeds?p.fx.speeds[r.duration]:p.fx.speeds._default;if(r.queue="=null||r.queue===!0)r.queue=" fx";return" r.old="r.complete,r.complete=function(){p.isFunction(r.old)&&r.old.call(this),r.queue&&p.dequeue(this,r.queue)},r},p.fn.extend({fadeTo:function(e,t,n,r){return" this.filter($).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i="p.isEmptyObject(e),s=p.speed(t,n,r),o=function(){var" t="hn(this,p.extend({},e),s);(i||p._data(this," finish"))&&t.stop(!0)};return" o.finish="o,i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,t,n){var" e.stop,t(n)};return typeof e!="string" &&(n="t,t=e,e=undefined),t&&e!==!1&&this.queue(e||" fx",[]),this.each(function(){var" for(i o)o[i]&&o[i].stop&&rn.test(i)&&r(o[i]);for(i="s.length;i--;)s[i].elem===this&&(e==null||s[i].queue===e)&&(s[i].anim.stop(n),t=!1,s.splice(i,1));(t||!n)&&p.dequeue(this,e)})},finish:function(e){return" t,n="p._data(this),r=n[e+" queue"],i="n[e+"queueHooks"],s=p.timers,o=r?r.length:0;n.finish=!0,p.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0);for(t=s.length;t--;)s[t].elem===this&&s[t].queue===e&&(s[t].anim.stop(!0),s.splice(t,1));for(t=0;t<o;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete"" n.finish})}}),p.each(["toggle","show","hide"],function(e,t){var n="p.fn[t];p.fn[t]=function(e,r,i){return" this.animate(t,e,n,r)}}),p.timers="[],p.fx.tick=function(){var" e,t="p.timers,n=0;Zt=p.now();for(;n<t.length;n++)e=t[n],!e()&&t[n]===e&&t.splice(n--,1);t.length||p.fx.stop(),Zt=undefined},p.fx.timer=function(e){p.timers.push(e),e()?p.fx.start():p.timers.pop()},p.fx.interval=13,p.fx.start=function(){en||(en=setInterval(p.fx.tick,p.fx.interval))},p.fx.stop=function(){clearInterval(en),en=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fn.delay=function(e,t){return" e,t,n,r,i="N.createElement(" div");i.setattribute("classname","t"),i.innerhtml <link><table></table><a href="/a">a</a><input type="checkbox">",e=i.getElementsByTagName("a")[0],n=N.createElement("select"),r=n.appendChild(N.createElement("option")),t=i.getElementsByTagName("input")[0],e.style.cssText="top:1px",c.getSetAttribute=i.className!=="t",c.style=/top/.test(e.getAttribute("style")),c.hrefNormalized=e.getAttribute("href")==="/a",c.checkOn=!!t.value,c.optSelected=r.selected,c.enctype=!!N.createElement("form").enctype,n.disabled=!0,c.optDisabled=!r.disabled,t=N.createElement("input"),t.setAttribute("value",""),c.input=t.getAttribute("value")==="",t.value="t",t.setAttribute("type","radio"),c.radioValue=t.value==="t",e=t=n=r=i=null}();var pn=/\r/g;p.fn.extend({val:function(e){var t,n,r,i=this[0];if(!arguments.length){if(i)return t=p.valHooks[i.type]||p.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,typeof n=="string"?n.replace(pn,""):n==null?"":n);return}return r=p.isFunction(e),this.each(function(n){var i;if(this.nodeType!==1)return;r?i=e.call(this,n,p(this).val()):i=e,i==null?i="":typeof i=="number"?i+="":p.isArray(i)&&(i=p.map(i,function(e){return e==null?"":e+""})),t=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!t||!("set"in t)||t.set(this,i,"value")===undefined)this.value=i})}}),p.extend({valHooks:{option:{get:function(e){var t=p.find.attr(e,"value");return t!=null?t:p.text(e)}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(c.optdisabled?!n.disabled:n.getattribute("disabled")===null)&&(!n.parentnode.disabled||!p.nodename(n.parentnode,"optgroup"))){t=p(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n,r,i="e.options,s=p.makeArray(t),o=i.length;while(o--){r=i[o];if(p.inArray(p.valHooks.option.get(r),s)">=0)try{r.selected=n=!0}catch(u){r.scrollHeight}else r.selected=!1}return n||(e.selectedIndex=-1),i}}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]={set:function(e,t){if(p.isArray(t))return e.checked=p.inArray(p(e).val(),t)>=0}},c.checkOn||(p.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})});var dn,vn,mn=p.expr.attrHandle,gn=/^(?:checked|selected)$/i,yn=c.getSetAttribute,bn=c.input;p.fn.extend({attr:function(e,t){return J(this,p.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){p.removeAttr(this,e)})}}),p.extend({attr:function(e,t,n){var r,i,s=e.nodeType;if(!e||s===3||s===8||s===2)return;if(typeof e.getAttribute===j)return p.prop(e,t,n);if(s!==1||!p.isXMLDoc(e))t=t.toLowerCase(),r=p.attrHooks[t]||(p.expr.match.bool.test(t)?vn:dn);if(n===undefined)return r&&"get"in r&&(i=r.get(e,t))!==null?i:(i=p.find.attr(e,t),i==null?undefined:i);if(n!==null)return r&&"set"in r&&(i=r.set(e,n,t))!==undefined?i:(e.setAttribute(t,n+""),n);p.removeAttr(e,t)},removeAttr:function(e,t){var n,r,i=0,s=t&&t.match(M);if(s&&e.nodeType===1)while(n=s[i++])r=p.propFix[n]||n,p.expr.match.bool.test(n)?bn&&yn||!gn.test(n)?e[r]=!1:e[p.camelCase("default-"+n)]=e[r]=!1:p.attr(e,n,""),e.removeAttribute(yn?n:r)},attrHooks:{type:{set:function(e,t){if(!c.radioValue&&t==="radio"&&p.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),vn={set:function(e,t,n){return t===!1?p.removeAttr(e,n):bn&&yn||!gn.test(n)?e.setAttribute(!yn&&p.propFix[n]||n,n):e[p.camelCase("default-"+n)]=e[n]=!0,n}},p.each(p.expr.match.bool.source.match(/\w+/g),function(e,t){var n=mn[t]||p.find.attr;mn[t]=bn&&yn||!gn.test(t)?function(e,t,r){var i,s;return r||(s=mn[t],mn[t]=i,i=n(e,t,r)!=null?t.toLowerCase():null,mn[t]=s),i}:function(e,t,n){if(!n)return e[p.camelCase("default-"+t)]?t.toLowerCase():null}});if(!bn||!yn)p.attrHooks.value={set:function(e,t,n){if(!p.nodeName(e,"input"))return dn&&dn.set(e,t,n);e.defaultValue=t}};yn||(dn={set:function(e,t,n){var r=e.getAttributeNode(n);r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="";if(n==="value"||t===e.getAttribute(n))return t}},mn.id=mn.name=mn.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&r.value!==""?r.value:null},p.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:dn.set},p.attrHooks.contenteditable={set:function(e,t,n){dn.set(e,t===""?!1:t,n)}},p.each(["width","height"],function(e,t){p.attrHooks[t]={set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}}})),c.style||(p.attrHooks.style={get:function(e){return e.style.cssText||undefined},set:function(e,t){return e.style.cssText=t+""}});var wn=/^(?:input|select|textarea|button|object)$/i,En=/^(?:a|area)$/i;p.fn.extend({prop:function(e,t){return J(this,p.prop,e,t,arguments.length>1)},removeProp:function(e){return e=p.propFix[e]||e,this.each(function(){try{this[e]=undefined,delete this[e]}catch(t){}})}}),p.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,s,o=e.nodeType;if(!e||o===3||o===8||o===2)return;return s=o!==1||!p.isXMLDoc(e),s&&(t=p.propFix[t]||t,i=p.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&(r=i.get(e,t))!==null?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=p.find.attr(e,"tabindex");return t?parseInt(t,10):wn.test(e.nodeName)||En.test(e.nodeName)&&e.href?0:-1}}}}),c.hrefNormalized||p.each(["href","src"],function(e,t){p.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),c.optSelected||(p.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),p.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){p.propFix[this.toLowerCase()]=this}),c.enctype||(p.propFix.enctype="encoding");var Sn=/[\t\r\n\f]/g;p.fn.extend({addClass:function(e){var t,n,r,i,s,o,u=0,a=this.length,f=typeof e=="string"&&e;if(p.isFunction(e))return this.each(function(t){p(this).addClass(e.call(this,t,this.className))});if(f){t=(e||"").match(M)||[];for(;u<a;u++){n=this[u],r=n.nodetype===1&&(n.classname?(" "+n.classname+" ").replace(sn," "):" ");if(r){s="0;while(i=t[s++])r.indexOf(" " "+i+" ")<0&&(r+="i+" ");o="p.trim(r),n.className!==o&&(n.className=o)}}}return" this},removeclass:function(e){var t,n,r,i,s,o,u="0,a=this.length,f=arguments.length===0||typeof" e="=" string"&&e;if(p.isfunction(e))return" this.each(function(t){p(this).removeclass(e.call(this,t,this.classname))});if(f){t="(e||" ").match(m)||[];for(;u<a;u++){n="this[u],r=n.nodeType===1&&(n.className?(""" "):"");if(r){s="0;while(i=t[s++])while(r.indexOf(" ")>=0)r=r.replace(" "+i+" "," ");o=e?p.trim(r):"",n.className!==o&&(n.className=o)}}}return this},toggleClass:function(e,t){var n=typeof e;return typeof t=="boolean"&&n==="string"?t?this.addClass(e):this.removeClass(e):p.isFunction(e)?this.each(function(n){p(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var t,r=0,i=p(this),s=e.match(M)||[];while(t=s[r++])i.hasClass(t)?i.removeClass(t):i.addClass(t)}else if(n===j||n==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||e===!1?"":p._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodetype===1&&(" "+this[n].classname+" ").replace(sn," ").indexof(t)>=0)return!0;return!1}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){p.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),p.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)}});var xn=p.now(),Tn=/\?/,Nn=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;p.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=p.trim(t+"");return i&&!p.trim(i.replace(Nn,function(e,t,i,s){return n&&t&&(r=0),r===0?e:(n=i||t,r+=!s-!i,"")}))?Function("return "+i)():p.error("Invalid JSON: "+t)},p.parseXML=function(t){var n,r;if(!t||typeof t!="string")return null;try{e.DOMParser?(r=new DOMParser,n=r.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(i){n=undefined}return(!n||!n.documentElement||n.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+t),n};var Cn,kn,Ln=/#.*$/,An=/([?&])_=[^&]*/,On=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,Mn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,_n=/^(?:GET|HEAD)$/,Dn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hn={},Bn={},jn="*/".concat("*");try{kn=location.href}catch(Fn){kn=N.createElement("a"),kn.href="",kn=kn.href}Cn=Pn.exec(kn.toLowerCase())||[],p.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kn,type:"GET",isLocal:Mn.test(Cn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":jn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Rn(Rn(e,p.ajaxSettings),t):Rn(p.ajaxSettings,e)},ajaxPrefilter:In(Hn),ajaxTransport:In(Bn),ajax:function(e,t){function x(e,t,n,r){var f,g,y,w,S,x=t;if(b===2)return;b=2,o&&clearTimeout(o),a=undefined,s=r||"",E.readyState=e>0?4:0,f=e>=200&&e<300||e===304,n&&(w=un(l,e,n)),w=zn(l,w,e,f);if(f)l.ifmodified&&(s=e.getresponseheader("last-modified"),s&&(p.lastmodified[i]=s),s=e.getresponseheader("etag"),s&&(p.etag[i]=s)),e===204||l.type==="head"?x="nocontent":e===304?x="notmodified":(x=w.state,g=w.data,y=w.error,f=!y);else{y=x;if(e||!x)x="error",e<0&&(e=0)}e.status=e,e.statustext=(t||x)+"",f?d.resolvewith(c,[g,x,e]):d.rejectwith(c,[e,x,y]),e.statuscode(m),m=undefined,u&&h.trigger(f?"ajaxsuccess":"ajaxerror",[e,l,f?g:y]),v.firewith(c,[e,x]),u&&(h.trigger("ajaxcomplete",[e,l]),--p.active||p.event.trigger("ajaxstop"))}typeof e="=" object"&&(t="e,e=undefined),t=t||{};var"" n,r,i,s,o,u,a,f,l="p.ajaxSetup({},t),c=l.context||l,h=l.context&&(c.nodeType||c.jquery)?p(c):p.event,d=p.Deferred(),v=p.Callbacks(" once" memory"),m="l.statusCode||{},g={},y={},b=0,w=" canceled",e="{readyState:0,getResponseHeader:function(e){var"" t;if(b="==2){if(!f){f={};while(t=On.exec(s))f[t[1].toLowerCase()]=t[2]}t=f[e.toLowerCase()]}return" t="=null?null:t},getAllResponseHeaders:function(){return" b="==2?s:null},setRequestHeader:function(e,t){var" n="e.toLowerCase();return" b||(e="y[n]=y[n]||e,g[e]=t),this},overrideMimeType:function(e){return" b||(l.mimetype="e),this},statusCode:function(e){var" t;if(e)if(b<2)for(t in e)m[t]="[m[t],e[t]];else" e.always(e[e.status]);return this},abort:function(e){var a&&a.abort(t),x(0,t),this}};d.promise(e).complete="v.add,E.success=E.done,E.error=E.fail,l.url=((e||l.url||kn)+" ").replace(ln,"").replace(dn,cn[1]+" "),l.type="t.method||t.type||l.method||l.type,l.dataTypes=p.trim(l.dataType||"*").toLowerCase().match(M)||[""],l.crossDomain==null&&(n=Pn.exec(l.url.toLowerCase()),l.crossDomain=!(!n||n[1]===Cn[1]&&n[2]===Cn[2]&&(n[3]||(n[1]==="http:"?"80":"443"))===(Cn[3]||(Cn[1]==="http:"?"80":"443")))),l.data&&l.processData&&typeof"" l.data!="string" &&(l.data="p.param(l.data,l.traditional)),qn(Hn,l,t,E);if(b===2)return" e;u="l.global,u&&p.active++===0&&p.event.trigger(" ajaxstart"),l.type="l.type.toUpperCase(),l.hasContent=!_n.test(l.type),i=l.url,l.hasContent||(l.data&&(i=l.url+=(Tn.test(i)?"&":"?")+l.data,delete"" l.data),l.cache="==!1&&(l.url=An.test(i)?i.replace(An," $1_="+xn++):i+(Tn.test(i)?" &":"?")+"_="+xn++)),l.ifModified&&(p.lastModified[i]&&E.setRequestHeader(" if-modified-since",p.lastmodified[i]),p.etag[i]&&e.setrequestheader("if-none-match",p.etag[i])),(l.data&&l.hascontent&&l.contenttype!="=!1||t.contentType)&&E.setRequestHeader("Content-Type",l.contentType),E.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?","" "+jn+"; q="0.01" :""):l.accepts["*"]);for(r" l.headers)e.setrequestheader(r,l.headers[r]);if(!l.beforesend||l.beforesend.call(c,e,l)!="=!1&&b!==2){w=" abort";for(r" in{success:1,error:1,complete:1})e[r](l[r]);a="qn(Bn,l,t,E);if(!a)x(-1," no" transport");else{e.readystate="1,u&&h.trigger(" ajaxsend",[e,l]),l.async&&l.timeout">0&&(o=setTimeout(function(){E.abort("timeout")},l.timeout));try{b=1,a.send(g,x)}catch(S){if(!(b<2))throw s;x(-1,s)}}return e}return e.abort()},getjson:function(e,t,n){return p.get(e,t,n,"json")},getscript:function(e,t){return p.get(e,undefined,t,"script")}}),p.each(["get","post"],function(e,t){p[t]="function(e,n,r,i){return" p.isfunction(n)&&(i="i||r,r=n,n=undefined),p.ajax({url:e,type:t,dataType:i,data:n,success:r})}}),p.each([" ajaxstart","ajaxstop","ajaxcomplete","ajaxerror","ajaxsuccess","ajaxsend"],function(e,t){p.fn[t]="function(e){return"" this.on(t,e)}}),p._evalurl="function(e){return" p.ajax({url:e,type:"get",datatype:"script",async:!1,global:!1,"throws":!0})},p.fn.extend({wrapall:function(e){if(p.isfunction(e))return this.each(function(t){p(this).wrapall(e.call(this,t))});if(this[0]){var t="p(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var" e="this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return" e}).append(this)}return this},wrapinner:function(e){return p.isfunction(e)?this.each(function(t){p(this).wrapinner(e.call(this,t))}):this.each(function(){var this.each(function(n){p(this).wrapall(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){p.nodename(this,"body")||p(this).replacewith(this.childnodes)}).end()}}),p.expr.filters.hidden="function(e){return" e.offsetwidth<="0&&e.offsetHeight<=0||!c.reliableHiddenOffsets()&&(e.style&&e.style.display||p.css(e," display"))="=="none"},p.expr.filters.visible=function(e){return!p.expr.filters.hidden(e)};var"" wn="/%20/g,Xn=/\[\]$/,Vn=/\r?\n/g,$n=/^(?:submit|button|image|reset|file)$/i,Jn=/^(?:input|select|textarea|keygen)/i;p.param=function(e,t){var" n,r="[],i=function(e,t){t=p.isFunction(t)?t():t==null?" ":t,r[r.length]="encodeURIComponent(e)+"="+encodeURIComponent(t)};t===undefined&&(t=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(e)||e.jquery&&!p.isPlainObject(e))p.each(e,function(){i(this.name,this.value)});else"" for(n in e)kn(n,e[n],t,i);return r.join("&").replace(wn,"+")},p.fn.extend({serialize:function(){return p.param(this.serializearray())},serializearray:function(){return this.map(function(){var e?p.makearray(e):this}).filter(function(){var this.name&&!p(this).is(":disabled")&&jn.test(this.nodename)&&!$n.test(e)&&(this.checked||!k.test(e))}).map(function(e,t){var n="p(this).val();return" qn="0,Gn={},Yn=p.ajaxSettings.xhr();e.ActiveXObject&&p(e).on(" unload",function(){for(var" gn)gn[e](undefined,!0)}),c.cors="!!Yn&&" withcredentials"in" yn,yn="c.ajax=!!Yn,Yn&&p.ajaxTransport(function(e){if(!e.crossDomain||c.cors){var" t;return{send:function(n,r){var i,s="e.xhr(),o=++Qn;s.open(e.type,e.url,e.async,e.username,e.password);if(e.xhrFields)for(i" e.xhrfields)s[i]="e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),!e.crossDomain&&!n[" x-requested-with"]&&(n["x-requested-with"]="XMLHttpRequest" );for(i" n)n[i]!="=undefined&&s.setRequestHeader(i,n[i]+" ");s.send(e.hascontent&&e.data||null),t="function(n,i){var"" u,a,f;if(t&&(i||s.readystate="==4)){delete" gn[o],t="undefined,s.onreadystatechange=p.noop;if(i)s.readyState!==4&&s.abort();else{f={},u=s.status,typeof" s.responsetext="=" string"&&(f.text="s.responseText);try{a=s.statusText}catch(l){a=""}!u&&e.isLocal&&!e.crossDomain?u=f.text?200:404:u===1223&&(u=204)}}f&&r(u,a,f,s.getAllResponseHeaders())},e.async?s.readyState===4?setTimeout(t):s.onreadystatechange=Gn[o]=t:t()},abort:function(){t&&t(undefined,!0)}}}}),p.ajaxSetup({accepts:{script:"text/javascript,"" application javascript, ecmascript, x-ecmascript"},contents:{script: (?:java|ecma)script },converters:{"text script":function(e){return p.globaleval(e),e}}}),p.ajaxprefilter("script",function(e){e.cache="==undefined&&(e.cache=!1),e.crossDomain&&(e.type=" get",e.global="!1)}),p.ajaxTransport("script",function(e){if(e.crossDomain){var"" t,n="N.head||p(" head")[0]||n.documentelement;return{send:function(r,i){t="N.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){if(n||!t.readyState||/loaded|complete/.test(t.readyState))t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,"success")},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(undefined,!0)}}}});var"" tr="[],nr=/(=)\?(?=&|$)|\?\?/;p.ajaxSetup({jsonp:" callback",jsonpcallback:function(){var" this[e]="!0,e}}),p.ajaxPrefilter(" json" jsonp",function(t,n,r){var i,s,o,u="t.jsonp!==!1&&(nr.test(t.url)?" url":typeof" t.data="=" string"&&!(t.contenttype||"").indexof("application x-www-form-urlencoded")&&nr.test(t.data)&&"data");if(u||t.datatypes[0]="=="jsonp")return"" i="t.jsonpCallback=p.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,u?t[u]=t[u].replace(nr," $1"+i):t.jsonp!="=!1&&(t.url+=(Tn.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script"" json"]="function(){return" o||p.error(i+" was not called"),o[0]},t.datatypes[0]="json" ,s="e[i],e[i]=function(){o=arguments},r.always(function(){e[i]=s,t[i]&&(t.jsonpCallback=n.jsonpCallback,tr.push(i)),o&&p.isFunction(s)&&s(o[0]),o=s=undefined})," script"}),p.parsehtml="function(e,t,n){if(!e||typeof"" e!="string" )return null;typeof r="E.exec(e),i=!n&&[];return" r?[t.createelement(r[1])]:(r="p.buildFragment([e],t,i),i&&i.length&&p(i).remove(),p.merge([],r.childNodes))};var" rr="p.fn.load;p.fn.load=function(e,t,n){if(typeof" &&rr)return rr.apply(this,arguments);var r,i,s,o="this,u=e.indexOf(" " ");return u>=0&&(r=e.slice(u,e.length),e=e.slice(0,u)),p.isFunction(t)?(n=t,t=undefined):t&&typeof t=="object"&&(s="POST"),o.length>0&&p.ajax({url:e,type:s,dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?p("<div>").append(p.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){o.each(n,i||[e.responseText,t,e])}),this},p.expr.filters.animated=function(e){return p.grep(p.timers,function(t){return e===t.elem}).length};var ir=e.document.documentElement;p.offset={setOffset:function(e,t,n){var r,i,s,o,u,a,f,l=p.css(e,"position"),c=p(e),h={};l==="static"&&(e.style.position="relative"),u=c.offset(),s=p.css(e,"top"),a=p.css(e,"left"),f=(l==="absolute"||l==="fixed")&&p.inArray("auto",[s,a])>-1,f?(r=c.position(),o=r.top,i=r.left):(o=parseFloat(s)||0,i=parseFloat(a)||0),p.isFunction(t)&&(t=t.call(e,n,u)),t.top!=null&&(h.top=t.top-u.top+o),t.left!=null&&(h.left=t.left-u.left+i),"using"in t?t.using.call(e,h):c.css(h)}},p.fn.extend({offset:function(e){if(arguments.length)return e===undefined?this:this.each(function(t){p.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],s=i&&i.ownerDocument;if(!s)return;return t=s.documentElement,p.contains(t,i)?(typeof i.getBoundingClientRect!==j&&(r=i.getBoundingClientRect()),n=sr(s),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(!this[0])return;var e,t,n={top:0,left:0},r=this[0];return p.css(r,"position")==="fixed"?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),p.nodeName(e[0],"html")||(n=e.offset()),n.top+=p.css(e[0],"borderTopWidth",!0),n.left+=p.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-p.css(r,"marginTop",!0),left:t.left-n.left-p.css(r,"marginLeft",!0)}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||ir;while(e&&!p.nodeName(e,"html")&&p.css(e,"position")==="static")e=e.offsetParent;return e||ir})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);p.fn[e]=function(r){return J(this,function(e,r,i){var s=sr(e);if(i===undefined)return s?t in s?s[t]:s.document.documentElement[r]:e[r];s?s.scrollTo(n?p(s).scrollLeft():i,n?i:p(s).scrollTop()):e[r]=i},e,r,arguments.length,null)}}),p.each(["top","left"],function(e,t){p.cssHooks[t]=Ft(c.pixelPosition,function(e,n){if(n)return n=Bt(e,t),Pt.test(n)?p(e).position()[t]+"px":n})}),p.each({Height:"height",Width:"width"},function(e,t){p.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){p.fn[r]=function(r,i){var s=arguments.length&&(n||typeof r!="boolean"),o=n||(r===!0||i===!0?"margin":"border");return J(this,function(t,n,r){var i;return p.isWindow(t)?t.document.documentElement["client"+e]:t.nodeType===9?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?p.css(t,n,o):p.style(t,n,r,o)},t,s?r:undefined,s,null)}})}),p.fn.size=function(){return this.length},p.fn.andSelf=p.fn.addBack,typeof define=="function"&&define.amd&&define("jquery",[],function(){return p});var or=e.jQuery,ur=e.$;return p.noConflict=function(t){return e.$===p&&(e.$=ur),t&&e.jQuery===p&&(e.jQuery=or),p},typeof t===j&&(e.jQuery=e.$=p),p});</div></2))throw></300||e===304,n&&(w=un(l,e,n)),w=zn(l,w,e,f);if(f)l.ifmodified&&(s=e.getresponseheader("last-modified"),s&&(p.lastmodified[i]=s),s=e.getresponseheader("etag"),s&&(p.etag[i]=s)),e===204||l.type==="head"?x="nocontent":e===304?x="notmodified":(x=w.state,g=w.data,y=w.error,f=!y);else{y=x;if(e||!x)x="error",e<0&&(e=0)}e.status=e,e.statustext=(t||x)+"",f?d.resolvewith(c,[g,x,e]):d.rejectwith(c,[e,x,y]),e.statuscode(m),m=undefined,u&&h.trigger(f?"ajaxsuccess":"ajaxerror",[e,l,f?g:y]),v.firewith(c,[e,x]),u&&(h.trigger("ajaxcomplete",[e,l]),--p.active||p.event.trigger("ajaxstop"))}typeof></r;n++)if(this[n].nodetype===1&&("></a;u++){n=this[u],r=n.nodetype===1&&(n.classname?("></0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(c.optdisabled?!n.disabled:n.getattribute("disabled")===null)&&(!n.parentnode.disabled||!p.nodename(n.parentnode,"optgroup"))){t=p(n).val();if(s)return></i;r++)n=e[r],on[n]=on[n]||[],on[n].unshift(t)},prefilter:function(e,t){t?sn.unshift(e):sn.push(e)}}),p.speed=function(e,t,n){var></4;r++)i[e+v[r]+t]=s[r]||s[r-2]||s[0];return></l;f++)r=a,f!==d&&(r=p.clone(r,!0,!0),s&&p.merge(o,et(r,"script"))),t.call(this[f],r,f);if(s){u=o[o.length-1].ownerdocument,p.map(o,nt);for(f=0;f<s;f++)r=o[f],vt.test(r.type||"")&&!p._data(r,"globaleval")&&p.contains(u,r)&&(r.src?p._evalurl&&p._evalurl(r.src):p.globaleval((r.text||r.textcontent||r.innerhtml||"").replace(gt,"")))}a=n=null}}return></r;n++)t=this[n]||{},t.nodetype===1&&(p.cleandata(et(t,!1)),t.innerhtml=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replacewith:function(){var></$1></table></h;m++){s=e[m];if(s||s===0)if(p.type(s)==="object")p.merge(v,s.nodetype?[s]:s);else></"+e.nodename+"></([\w:]+)></(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^></t.length&&o.push({elem:this,handlers:t.slice(u)}),o},fix:function(e){if(e[p.expando])return></u;s++)r=t[s],n=r.selector+"></0&&"on"+v,t=t[p.expando]?t:new></n?p.queue(this[0],e):t===undefined?this:this.each(function(){var></i;t++)n[t]&&p.isfunction(n[t].promise)?n[t].promise().done(u(t,l,n)).fail(o.reject).progress(u(t,f,a)):--s}return></=i&&i--,r<=s&&s--)}),this},has:function(e){return></i;s++)if(u[s].apply(c[0],c[1])===!1&&e.stoponfalse){n=!1;break}t=!1,u&&(a?a.length&&f(a.shift()):n?u=[]:l.disable())},l={add:function(){if(u){var></r;t++)if(p.contains(this,n[t]))return!0})},closest:function(e,t){var></"&&e.charat(e.length-1)==="></[\w\w]+></i;t++)if(p.contains(r[t],this))return!0}));for(t=0;t<i;t++)p.find(e,r[t],n);return></\></0?n+t:n;for(;++r<t;)e.push(r);return></6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return></0?string.fromcharcode(r+65536):string.fromcharcode(r></31,l={}.hasownproperty,a=[],o=a.pop,m=a.push,_=a.push,d=a.slice,p=a.indexof||function(e){var></i;r++)rt(e,t[r],n);return></i&&wt(e.slice(f,i)),i<s&&wt(e=e.slice(i)),i<s&&vt(e))}h.push(n)}return></s;f++)if(n=r.relative[e[f].type])h=[mt(gt(h),n)];else{n=r.filter[e[f].type].apply(null,e[f].matches);if(n[y]){i=++f;for(;i<s;i++)if(r.relative[e[i].type])break;return></a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return></n;t++)r+=e[t].value;return></s;i++){r=t.apply(e[i],n);if(r===!1)break}else></t?[this[n]]:[])},end:function(){return></u;o++){r=e[o];if(!r.style)continue;s[o]=p._data(r,"olddisplay"),n=r.style.display,t?(!s[o]&&n==="none"&&(r.style.display=""),r.style.display===""&&$(r)&&(s[o]=p._data(r,"olddisplay",_t(r.nodename)))):s[o]||(i=$(r),(n&&n!=="none"||!i)&&p._data(r,"olddisplay",i?n:p.css(r,"display")))}for(o=0;o<u;o++){r=e[o];if(!r.style)continue;if(!t||r.style.display==="none"||r.style.display==="")r.style.display=t?s[o]||"":"none"}return></i;r++)p.event.add(t,n,u[n][r])}o.data&&(o.data=p.extend({},o.data))}function>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/jquery.fullPage.min.js"/>
<url>/birthday/js/jquery.fullPage.min.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>/** * fullPage 2.5.4 * https://github.com/alvarotrigo/fullPage.js * MIT licensed * * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo */(function(b){b.fn.fullpage=function(c){function pa(a){a.find(".fp-slides").after('<div class="fp-controlArrow fp-prev"></div><div class="fp-controlArrow fp-next"></div>');"#fff"!=c.controlArrowColor&&(a.find(".fp-controlArrow.fp-next").css("border-color","transparent transparent transparent "+c.controlArrowColor),a.find(".fp-controlArrow.fp-prev").css("border-color","transparent "+c.controlArrowColor+" transparent transparent"));c.loopHorizontal||a.find(".fp-controlArrow.fp-prev").hide()}function qa(){b("body").append('<div id="fp-nav"><ul></ul></div>');k=b("#fp-nav");k.css("color",c.navigationColor);k.addClass(c.navigationPosition);for(var a=0;a<b(".fp-section").length;a++){var d ;c.anchors.length&&(d="c.anchors[a]);var" +d+'"><span></span>',e=c.navigationTooltips[a];void 0!=e&&""!=e&&(d+='<div class="fp-tooltip '+c.navigationPosition+'">'+e+"</div>");d+="";k.find("ul").append(d)}}function R(){b(".fp-section").each(function(){var a=b(this).find(".fp-slide");a.length?a.each(function(){y(b(this))}):y(b(this))});b.isFunction(c.afterRender)&&c.afterRender.call(this)}function S(){if(!c.autoScrolling||c.scrollBar){var a=b(window).scrollTop(),d=0,e=Math.abs(a-b(".fp-section").first().offset().top);b(".fp-section").each(function(c){var f=Math.abs(a-b(this).offset().top);f<e&&(d=c,e=f)});var f="b(" .fp-section").eq(d)}if(!c.autoscrolling&&!f.hasclass("active")){f="!0;var"" ra="b(" .fp-section.active").index(".fp-section")+1,g="G(f),h=f.data("anchor"),k=f.index(".fp-section")+1,l=f.find(".fp-slide.active");if(l.length)var"" n="l.data(" anchor"),t="l.index();"" f.addclass("active").siblings().removeclass("active");m||(b.isfunction(c.onleave)&&c.onleave.call(this,ra,k,g),b.isfunction(c.afterload)&&c.afterload.call(this,h,k));h(h,0);c.anchors.length&&!m&&(p="h,I(t,n,h,k));clearTimeout(T);T=setTimeout(function(){F=!1},100)}c.scrollBar&&(clearTimeout(U),U=setTimeout(function(){m||q(f)},1E3))}function" v(a){return scrollable="a.find(" .fp-slides").length?a.find(".fp-slide.active").find(".fp-scrollable"):a.find(".fp-scrollable")}function" z(a,d){if(l[a]){if("down"="=" a)var c="bottom" ,f="b.fn.fullpage.moveSectionDown;else">=d[0].scrollHeight:void 0,c)f();else return!0;else f()}}function sa(a){var d=a.originalEvent;if(!W(a.target)){c.autoScrolling&&!c.scrollBar&&a.preventDefault();a=b(".fp-section.active");var e=V(a);m||t||(d=X(d),u=d.y,A=d.x,a.find(".fp-slides").length&&Math.abs(B-A)>Math.abs(v-u)?Math.abs(B-A)>b(window).width()/100*c.touchSensitivity&&(B>A?l.right&&b.fn.fullpage.moveSlideRight():l.left&&b.fn.fullpage.moveSlideLeft()):c.autoScrolling&&!c.scrollBar&&Math.abs(v-u)>b(window).height()/100*c.touchSensitivity&&(v>u?z("down",e):u>v&&z("up",e)))}}function W(a,d){d=d||0;var e=b(a).parent();return d<c.normalscrollelementtouchthreshold&&e.is(c.normalscrollelements)?!0:d==c.normalscrollelementtouchthreshold?!1:w(e,++d)}function ta(a){a="X(a.originalEvent);v=a.y;B=a.x}function" r(a){if(c.autoscrolling){a="window.event||a;var" d="Math.max(-1,Math.min(1," a.wheeldelta||-a.deltay||-a.detail));c.scrollbar&&(a.preventdefault?a.preventdefault():a.returnvalue="!1);a=b(" .fp-section.active");a="V(a);m||(0"">d?z("down",a):z("up",a));return!1}}function Y(a){var d=b(".fp-section.active").find(".fp-slides");if(d.length&&!t){var e=d.find(".fp-slide.active"),f=null,f="prev"===a?e.prev(".fp-slide"):e.next(".fp-slide");if(!f.length){if(!c.loopHorizontal)return;f="prev"===a?e.siblings(":last"):e.siblings(":first")}t=!0;w(d,f)}}function Z(){b(".fp-slide.active").each(function(){J(b(this))})}function q(a,d,e){var f=a.position();if("undefined"!==typeof f&&(d={element:a,callback:d,isMovementUp:e,dest:f,dtop:f.top,yMovement:G(a),anchorLink:a.data("anchor"),sectionIndex:a.index(".fp-section"),activeSlide:a.find(".fp-slide.active"),activeSection:b(".fp-section.active"),leavingSection:b(".fp-section.active").index(".fp-section")+1,localIsResizing:x},!(d.activeSection.is(a)&&!x||c.scrollBar&&b(window).scrollTop()===d.dtop))){if(d.activeSlide.length)var g=d.activeSlide.data("anchor"),h=d.activeSlide.index();c.autoScrolling&&c.continuousVertical&&"undefined"!==typeof d.isMovementUp&&(!d.isMovementUp&&"up"==d.yMovement||d.isMovementUp&&"down"==d.yMovement)&&(d.isMovementUp?b(".fp-section.active").before(d.activeSection.nextAll(".fp-section")):b(".fp-section.active").after(d.activeSection.prevAll(".fp-section").get().reverse()),n(b(".fp-section.active").position().top),Z(),d.wrapAroundElements=d.activeSection,d.dest=d.element.position(),d.dtop=d.dest.top,d.yMovement=G(d.element));a.addClass("active").siblings().removeClass("active");m=!0;I(h,g,d.anchorLink,d.sectionIndex);b.isFunction(c.onLeave)&&!d.localIsResizing&&c.onLeave.call(this,d.leavingSection,d.sectionIndex+1,d.yMovement);ua(d);p=d.anchorLink;c.autoScrolling&&H(d.anchorLink,d.sectionIndex)}}function ua(a){if(c.css3&&c.autoScrolling&&!c.scrollBar)aa("translate3d(0px, -"+a.dtop+"px, 0px)",!0),setTimeout(function(){ba(a)},c.scrollingSpeed);else{var d=va(a);b(d.element).animate(d.options,c.scrollingSpeed,c.easing).promise().done(function(){ba(a)})}}function va(a){var b={};c.autoScrolling&&!c.scrollBar?(b.options={top:-a.dtop},b.element="."+ca):(b.options={scrollTop:a.dtop},b.element="html, body");return b}function wa(a){a.wrapAroundElements&&a.wrapAroundElements.length&&(a.isMovementUp?b(".fp-section:first").before(a.wrapAroundElements):b(".fp-section:last").after(a.wrapAroundElements),n(b(".fp-section.active").position().top),Z())}function ba(a){wa(a);b.isFunction(c.afterLoad)&&!a.localIsResizing&&c.afterLoad.call(this,a.anchorLink,a.sectionIndex+1);setTimeout(function(){m=!1;b.isFunction(a.callback)&&a.callback.call(this)},600)}function da(){if(!F){var a=window.location.hash.replace("#","").split("/"),b=a[0],a=a[1];if(b.length){var c="undefined"===typeof p,f="undefined"===typeof p&&"undefined"===typeof a&&!t;(b&&b!==p&&!c||f||!t&&K!=a)&&L(b,a)}}}function w(a,d){var e=d.position(),f=a.find(".fp-slidesContainer").parent(),g=d.index(),h=a.closest(".fp-section"),k=h.index(".fp-section"),l=h.data("anchor"),n=h.find(".fp-slidesNav"),m=d.data("anchor"),q=x;if(c.onSlideLeave){var p=h.find(".fp-slide.active").index(),r;r=p==g?"none":p>g?"left":"right";q||"none"===r||b.isFunction(c.onSlideLeave)&&c.onSlideLeave.call(this,l,k+1,p,r)}d.addClass("active").siblings().removeClass("active");"undefined"===typeof m&&(m=g);!c.loopHorizontal&&c.controlArrows&&(h.find(".fp-controlArrow.fp-prev").toggle(0!=g),h.find(".fp-controlArrow.fp-next").toggle(!d.is(":last-child")));h.hasClass("active")&&I(g,m,l,k);var u=function(){q||b.isFunction(c.afterSlideLoad)&&c.afterSlideLoad.call(this,l,k+1,m,g);t=!1};c.css3?(e="translate3d(-"+e.left+"px, 0px, 0px)",ea(a.find(".fp-slidesContainer"),0<c.scrollingspeed).css(fa(e)),settimeout(function(){u()},c.scrollingspeed,c.easing)):f.animate({scrollleft:e.left},c.scrollingspeed,c.easing,function(){u()});n.find(".active").removeclass("active");n.find("li").eq(g).find("a").addclass("active")}function ga(){ha();if(c){if("text"!="=b(document.activeElement).attr(" type")){var" a="b(window).height();Math.abs(a-M)">20*Math.max(M,a)/100&&(b.fn.fullpage.reBuild(!0),M=a)}}else clearTimeout(ia),ia=setTimeout(function(){b.fn.fullpage.reBuild(!0)},500)}function ha(){if(c.responsive){var a=g.hasClass("fp-responsive");b(window).width()<c.responsive?a||(b.fn.fullpage.setautoscrolling(!1,"internal"),b("#fp-nav").hide(),g.addclass("fp-responsive")):a&&(b.fn.fullpage.setautoscrolling(n.autoscrolling,"internal"),b("#fp-nav").show(),g.removeclass("fp-responsive"))}}function ea(a){var b="all " +c.scrollingspeed+"ms "+c.easingcss3;a.removeclass("fp-notransition");return a.css({"-webkit-transition":b, transition:b})}function o(a){return a.addclass("fp-notransition")}function xa(a,d){if(825>a||900>d){var c=Math.min(100*a/825,100*d/900).toFixed(2);b("body").css("font-size",c+"%")}else b("body").css("font-size","100%")}function H(a,d){c.menu&&(b(c.menu).find(".active").removeClass("active"),b(c.menu).find('[data-menuanchor="'+a+'"]').addClass("active"));c.navigation&&(b("#fp-nav").find(".active").removeClass("active"),a?b("#fp-nav").find('a[href="#'+a+'"]').addClass("active"):b("#fp-nav").find("li").eq(d).find("a").addClass("active"))}function G(a){var d=b(".fp-section.active").index(".fp-section");a=a.index(".fp-section");return d==a?"none":d>a?"up":"down"}function y(a){a.css("overflow","hidden");var b=a.closest(".fp-section"),e=a.find(".fp-scrollable");if(e.length)var f=e.get(0).scrollHeight;else f=a.get(0).scrollHeight,c.verticalCentered&&(f=a.find(".fp-tableCell").get(0).scrollHeight);b=h-parseInt(b.css("padding-bottom"))-parseInt(b.css("padding-top"));f>b?e.length?e.css("height",b+"px").parent().css("height",b+"px"):(c.verticalCentered?a.find(".fp-tableCell").wrapInner('<div class="fp-scrollable">'):a.wrapInner('<div class="fp-scrollable">'),a.find(".fp-scrollable").slimScroll({allowPageScroll:!0,height:b+"px",size:"10px",alwaysVisible:!0})):ja(a);a.css("overflow","")}function ja(a){a.find(".fp-scrollable").children().first().unwrap().unwrap();a.find(".slimScrollBar").remove();a.find(".slimScrollRail").remove()}function ka(a){a.addClass("fp-table").wrapInner('<div class="fp-tableCell" style="height:'+la(a)+'px;">')}function la(a){var b=h;if(c.paddingTop||c.paddingBottom)b=a,b.hasClass("fp-section")||(b=a.closest(".fp-section")),a=parseInt(b.css("padding-top"))+parseInt(b.css("padding-bottom")),b=h-a;return b}function aa(a,b){b?ea(g):O(g);g.css(fa(a));setTimeout(function(){g.removeClass("fp-notransition")},10)}function L(a,d){"undefined"===typeof d&&(d=0);var c=isNaN(a)?b('[data-anchor="'+a+'"]'):b(".fp-section").eq(a-1);a===p||c.hasClass("active")?ma(c,d):q(c,function(){ma(c,d)})}function ma(a,b){if("undefined"!=typeof b){var c=a.find(".fp-slides"),f=c.find('[data-anchor="'+b+'"]');f.length||(f=c.find(".fp-slide").eq(b));f.length&&w(c,f)}}function ya(a,b){a.append('<div class="fp-slidesNav"><ul></ul></div>');var e=a.find(".fp-slidesNav");e.addClass(c.slidesNavPosition);for(var f=0;f<b;f++)e.find("ul").append('<li><a href="#"><span></span></a>');e.css("margin-left","-"+e.width()/2+"px");e.find("li").first().find("a").addClass("active")}function I(a,b,e,f){var g="";c.anchors.length?(a?("undefined"!==typeof e&&(g=e),"undefined"===typeof b&&(b=a),K=b,na(g+"/"+b)):("undefined"!==typeof a&&(K=b),na(e)),D(location.hash)):"undefined"!==typeof a?D(f+"-"+a):D(String(f))}function na(a){if(c.recordHistory)location.hash=a;else if(C||P)history.replaceState(void 0,void 0,"#"+a);else{var b=window.location.href.split("#")[0];window.location.replace(b+"#"+a)}}function D(a){a=a.replace("/","-").replace("#","");b("body")[0].className=b("body")[0].className.replace(/\b\s?fp-viewing-[^\s]+\b/g,"");b("body").addClass("fp-viewing-"+a)}function za(){var a=document.createElement("p"),b,c={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.insertBefore(a,null);for(var f in c)void 0!==a.style[f]&&(a.style[f]="translate3d(1px,1px,1px)",b=window.getComputedStyle(a).getPropertyValue(c[f]));document.body.removeChild(a);return void 0!==b&&0<b.length&&"none"!==b}function 0 oa(){return window.pointerevent?{down:"pointerdown",move:"pointermove"}:{down:"mspointerdown", move:"mspointermove"}}function x(a){var b="[];b.y=" undefined"!="=typeof"" a.pagey&&(a.pagey||a.pagex)?a.pagey:a.touches[0].pagey;b.x="undefined" !="=typeof" a.pagex&&(a.pagey||a.pagex)?a.pagex:a.touches[0].pagex;return b}function j(a){b.fn.fullpage.setscrollingspeed(0,"internal");w(a.closest(".fp-slides"),a);b.fn.fullpage.setscrollingspeed(n.scrollingspeed,"internal")}function n(a){c.scrollbar?g.scrolltop(a):c.css3?aa("translate3d(0px, -"+a+"px, 0px)",!1):g.css("top",-a)}function fa(a){return{"-webkit-transform":a, "-moz-transform":a,"-ms-transform":a,transform:a}}function aa(){n(0);b("#fp-nav, .fp-slidesnav, .fp-controlarrow").remove();b(".fp-section").css({height:"","background-color":"",padding:""});b(".fp-slide").css({width:""});g.css({height:"",position:"","-ms-touch-action":"","touch-action":""});b(".fp-section, .fp-slide").each(function(){ja(b(this));b(this).removeclass("fp-table active")});o(g);o(g.find(".fp-easing"));g.find(".fp-tablecell, .fp-slidescontainer, .fp-slides").each(function(){b(this).replacewith(this.childnodes)}); b("html, body").scrolltop(0)}function q(a,b,e){c[a]="b;" internal"!="=e&&(N[a]=b)}function"" e(a,b){console&&console[a]&&console[a]("fullpage: "+b)}c="b.extend({menu:!1,anchors:[],navigation:!1,navigationPosition:" right",navigationcolor:"#000",navigationtooltips:[],slidesnavigation:!1,slidesnavposition:"bottom",scrollbar:!1,css3:!0,scrollingspeed:700,autoscrolling:!0,easing:"easeinquart",easingcss3:"ease",loopbottom:!1,looptop:!1,loophorizontal:!0,continuousvertical:!1,normalscrollelements:null,scrolloverflow:!1," touchsensitivity:5,normalscrollelementtouchthreshold:5,keyboardscrolling:!0,animateanchor:!0,recordhistory:!0,controlarrows:!0,controlarrowcolor:"#fff",verticalcentered:!0,resize:!0,sectionscolor:[],paddingtop:0,paddingbottom:0,fixedelements:null,responsive:0,sectionselector:".section",slideselector:".slide",afterload:null,onleave:null,afterrender:null,afterresize:null,afterrebuild:null,afterslideload:null,onslideleave:null},c);(function(){c.continuousvertical&&(c.looptop||c.loopbottom)&&(c.continuousvertical="!1,E(" warn","option" `looptop loopbottom` is mutually exclusive with `continuousvertical`; `continuousvertical` disabled"));c.continuousvertical&&c.scrollbar&&(c.continuousvertical="!1,E(" `scrollbar` disabled"));b.each(c.anchors,function(a,c){(b("#"+c).length||b('[name="'+c+'" ]').length)&&e("error","data-anchor tags can not have the same value as any `id` element on site (or `name` for ie).")})})();b.extend(b.easing, {easeinquart:function(a,b,c,f,g){return f*(b="g)*b*b*b+c}});b.fn.fullpage.setautoscrolling="function(a,d){Q("autoScrolling",a,d);var"" e="b(" .fp-section.active");c.autoscrolling&&!c.scrollbar?(b("html," body").css({overflow:"hidden",height:"100%"}),b.fn.fullpage.setrecordhistory(c.recordhistory,"internal"),g.css({"-ms-touch-action":"none","touch-action":"none"}),e.length&&n(e.position().top)):(b("html, body").css({overflow:"visible",height:"initial"}),b.fn.fullpage.setrecordhistory(!1,"internal"),g.css({"-ms-touch-action":"", "touch-action":""}),n(0),b("html, body").scrolltop(e.position().top))};b.fn.fullpage.setrecordhistory="function(a,b){Q(" recordhistory",a,b)};b.fn.fullpage.setscrollingspeed="function(a,b){Q("scrollingSpeed",a,b)};b.fn.fullpage.setMouseWheelScrolling=function(a){a?document.addEventListener?(document.addEventListener("mousewheel",r,!1),document.addEventListener("wheel",r,!1)):document.attachEvent("onmousewheel",r):document.addEventListener?(document.removeEventListener("mousewheel",r,!1),document.removeEventListener("wheel","" r,!1)):document.detachevent("onmousewheel",r)};b.fn.fullpage.setallowscrolling="function(a,c){if(" c)c="c.replace(" " ","").split(","),b.each(c,function(c,d){switch(d){case "up":l.up="a;break;case" "down":l.down="a;break;case" "left":l.left="a;break;case" "right":l.right="a;break;case" "all":b.fn.fullpage.setallowscrolling(a)}});else if(a){if(b.fn.fullpage.setmousewheelscrolling(!0),c||p)mspointer="oa(),b(document).off(" touchstart" "+mspointer.down).on("touchstart "+mspointer.down,ta),b(document).off("touchmove "+ mspointer.move).on("touchmove "+mspointer.move,sa)}else if(b.fn.fullpage.setmousewheelscrolling(!1),c||p)mspointer="oa(),b(document).off(" "+mspointer.down),b(document).off("touchmove "+mspointer.move)};b.fn.fullpage.setkeyboardscrolling="function(a){c.keyboardScrolling=a};b.fn.fullpage.moveSectionUp=function(){var" a="b(" .fp-section.active").prev(".fp-section");a.length||!c.looptop&&!c.continuousvertical||(a="b(".fp-section").last());a.length&&q(a,null,!0)};b.fn.fullpage.moveSectionDown=function(){var"" ,e="isNaN(a)?b('[data-anchor=" '+a+'"]'):b(".fp-section").eq(a-1);"undefined"!="=typeof"" c?l(a,c):0<e.length&&q(e)};b.fn.fullpage.moveslideright="function(){Y(" next")};b.fn.fullpage.moveslideleft="function(){Y("prev")};b.fn.fullpage.reBuild=function(a){x=!0;var"" d="b(window).width();h=b(window).height();c.resize&&xa(h,d);" b(".fp-section").each(function(){parseint(b(this).css("padding-bottom"));parseint(b(this).css("padding-top"));c.verticalcentered&&b(this).find(".fp-tablecell").css("height",la(b(this))+"px");b(this).css("height",h+"px");if(c.scrolloverflow){var a&&c.afterresize.call(this);b.isfunction(c.afterrebuild)&&!a&&c.afterrebuild.call(this)};var t="!1,C=navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|Windows" phone|tizen|bada) ),p="ontouchstart" in window||0<navigator.msmaxtouchpoints||navigator.maxtouchpoints,g="b(this),h=b(window).height(),m=!1,x=!1,p,K,k,ca=" fullpage-wrapper",l="{up:!0,down:!0,left:!0,right:!0},N=jQuery.extend(!0,{},c);b.fn.fullpage.setAllowScrolling(!0);c.css3&&(c.css3=za());b(this).length?(g.css({height:"100%","" position:"relative"}),g.addclass(ca)):e("error","error! fullpage.js needs to be initialized selector. example: $('#mycontainer').fullpage();");b(c.sectionselector).each(function(){b(this).addclass("fp-section")});b(c.slideselector).each(function(){b(this).addclass("fp-slide")});c.navigation&&qa();b(".fp-section").each(function(a){var c.paddingbottom)&&b(this).css("padding",c.paddingtop+" "+c.paddingbottom+" 0");"undefined"!="=typeof" c.sectionscolor[a]&&b(this).css("background-color",c.sectionscolor[a]);"undefined"!="=typeof" c.anchors[a]&&b(this).attr("data-anchor",c.anchors[a]);if(1<f){a="100*f;var" g="100/f;e.wrapAll('<div" class="fp-slidesContainer">');e.parent().wrap('<div class="fp-slides">');b(this).find(".fp-slidesContainer").css("width",a+"%");c.controlArrows&&pa(b(this));c.slidesNavigation&&ya(b(this),f);e.each(function(a){b(this).css("width",g+"%");c.verticalCentered&&ka(b(this))});d=d.find(".fp-slide.active");0==d.length?e.eq(0).addClass("active"):J(d)}else c.verticalCentered&&ka(b(this))}).promise().done(function(){b.fn.fullpage.setAutoScrolling(c.autoScrolling,"internal");var a=b(".fp-section.active").find(".fp-slide.active");a.length&&(0!=b(".fp-section.active").index(".fp-section")||0==b(".fp-section.active").index(".fp-section")&&0!=a.index())&&J(a);c.fixedElements&&c.css3&&b(c.fixedElements).appendTo("body");c.navigation&&(k.css("margin-top","-"+k.height()/2+"px"),k.find("li").eq(b(".fp-section.active").index(".fp-section")).find("a").addClass("active"));c.menu&&c.css3&&b(c.menu).closest(".fullpage-wrapper").length&&b(c.menu).appendTo("body");c.scrollOverflow?("complete"===document.readyState&&R(),b(window).on("load",R)):b.isFunction(c.afterRender)&&c.afterRender.call(this);ha();a=window.location.hash.replace("#","").split("/")[0];if(a.length){var d=b('[data-anchor="'+a+'"]');!c.animateAnchor&&d.length&&(c.autoScrolling?n(d.position().top):(n(0),D(a),b("html, body").scrollTop(d.position().top)),H(a,null),b.isFunction(c.afterLoad)&&c.afterLoad.call(this,a,d.index(".fp-section")+1),d.addClass("active").siblings().removeClass("active"))}b(window).on("load",function(){var a=window.location.hash.replace("#","").split("/"),b=a[0],a=a[1];b&&L(b,a)})});var T,U,F=!1;b(window).on("scroll",S);var v=0,B=0,u=0,A=0;b(window).on("hashchange",da);b(document).keydown(function(a){if(c.keyboardScrolling&&c.autoScrolling&&(40!=a.which&&38!=a.which||a.preventDefault(),!m))switch(a.which){case 38:case 33:b.fn.fullpage.moveSectionUp();break;case 40:case 34:b.fn.fullpage.moveSectionDown();break;case 36:b.fn.fullpage.moveTo(1);break;case 35:b.fn.fullpage.moveTo(b(".fp-section").length);break;case 37:b.fn.fullpage.moveSlideLeft();break;case 39:b.fn.fullpage.moveSlideRight()}});b(document).on("click touchstart","#fp-nav a",function(a){a.preventDefault();a=b(this).parent().index();q(b(".fp-section").eq(a))});b(document).on("click touchstart",".fp-slidesNav a",function(a){a.preventDefault();a=b(this).closest(".fp-section").find(".fp-slides");var c=a.find(".fp-slide").eq(b(this).closest("li").index());w(a,c)});c.normalScrollElements&&(b(document).on("mouseenter",c.normalScrollElements,function(){b.fn.fullpage.setMouseWheelScrolling(!1)}),b(document).on("mouseleave",c.normalScrollElements,function(){b.fn.fullpage.setMouseWheelScrolling(!0)}));b(".fp-section").on("click touchstart",".fp-controlArrow",function(){b(this).hasClass("fp-prev")?b.fn.fullpage.moveSlideLeft():b.fn.fullpage.moveSlideRight()});b(window).resize(ga);var M=h,ia;b.fn.fullpage.destroy=function(a){b.fn.fullpage.setAutoScrolling(!1,"internal");b.fn.fullpage.setAllowScrolling(!1);b.fn.fullpage.setKeyboardScrolling(!1);b(window).off("scroll",S).off("hashchange",da).off("resize",ga);b(document).off("click","#fp-nav a").off("mouseenter","#fp-nav li").off("mouseleave","#fp-nav li").off("click",".fp-slidesNav a").off("mouseover",c.normalScrollElements).off("mouseout",c.normalScrollElements);b(".fp-section").off("click",".fp-controlArrow");a&&Aa()}}})(jQuery);</div></b.length&&"none"!==b}function></b;f++)e.find("ul").append('<li></div></div></div></c.responsive?a||(b.fn.fullpage.setautoscrolling(!1,"internal"),b("#fp-nav").hide(),g.addclass("fp-responsive")):a&&(b.fn.fullpage.setautoscrolling(n.autoscrolling,"internal"),b("#fp-nav").show(),g.removeclass("fp-responsive"))}}function></c.scrollingspeed).css(fa(e)),settimeout(function(){u()},c.scrollingspeed,c.easing)):f.animate({scrollleft:e.left},c.scrollingspeed,c.easing,function(){u()});n.find(".active").removeclass("active");n.find("li").eq(g).find("a").addclass("active")}function></c.normalscrollelementtouchthreshold&&e.is(c.normalscrollelements)?!0:d==c.normalscrollelementtouchthreshold?!1:w(e,++d)}function></e&&(d=c,e=f)});var></b(".fp-section").length;a++){var>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/jquery-2.1.1.min.js"/>
<url>/birthday/js/jquery-2.1.1.min.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,e={}.hasownproperty,f=[],g=f.pop,h=f.push,i=f.push,j=f.slice,k=f.indexof||function(a){for(var b="0,c=this.length;c">b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class="a"></div><div class="a i"></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip><option selected></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return z.test(a.nodename)},input:function(a){return y.test(a.nodename)},button:function(a){var b="a.nodeName.toLowerCase();return" input"="==b&&"button"===a.type||"button"===b},text:function(a){var"" b;return"input"="==a.nodeName.toLowerCase()&&" text"="==a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0"">c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth="d.pseudos.eq;for(b" in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]="lb(b);for(b" in{submit:!0,reset:!0})d.pseudos[b]="mb(b);function" pb(){}pb.prototype="d.filters=d.pseudos,d.setFilters=new" pb,g="fb.tokenize=function(a,b){var" c,e,f,g,h,i,j,k="z[a+" " "];if(k)return b?0:k.slice(0);h="a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h="h.slice(c.length));for(g" in d.filter)!(e="X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return" b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b="0,c=a.length,d=" ";c">b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href="#"></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\ ?>(?:<\ \1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\w]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0="==b?this:this.each(function(){var" c="n.queue(this,a,b);n._queueHooks(this,a)," fx"="==a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return"" this.each(function(){n.dequeue(this,a)})},clearqueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d="1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};" string"!="typeof"" a&&(b="a,a=void" 0),a="a||" fx";while(g--)c="L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return"" h(),e.promise(b)}});var q="/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=[" top","right","bottom","left"],s="function(a,b){return"" a="b||a," none"="==n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var"">x",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.event(q,"object"="=typeof" b&&b),b.istrigger="e?2:3,b.namespace=r.join(" ."),b.namespace_re="b.namespace?new"" regexp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result="void" 0,b.target||(b.target="d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f">1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altkey 0="==f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return" 1="==e&&(f=d,d=function(a){return" bubbles cancelable ctrlkey currenttarget eventphase metakey relatedtarget shiftkey target timestamp view which".split(" "),fixhooks:{},keyhooks:{props:"char charcode key keycode".split(" "),filter:function(a,b){return null="=a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:" button" buttons clientx clienty offsetx offsety pagex pagey screenx screeny toelement".split(" "),filter:function(a,b){var c,d,e,f="b.button;return" a;var b,c,d,e="a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new" n.event(f),b="d.length;while(b--)c=d[b],a[c]=f[c];return" a.target||(a.target="l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return" this!="=_()&&this.focus?(this.focus(),!1):void" 0},delegatetype:"focusin"},blur:{trigger:function(){return this="==_()&&this.blur?(this.blur(),!1):void" 0},delegatetype:"focusout"},click:{trigger:function(){return"checkbox"="==this.type&&this.click&&n.nodeName(this," input")?(this.click(),!1):void" 0},_default:function(a){return n.nodename(a.target,"a")}},beforeunload:{postdispatch:function(a){void 0!="=a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var" e="n.extend(new" n.event,c,{type:a,issimulated:!0,originalevent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isdefaultprevented()&&c.preventdefault()}},n.removeevent="function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return" instanceof n.event?(a&&a.type?(this.originalevent="a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void" n.event(a,b)},n.event.prototype="{isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var" a="this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var" c,d="this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:" focusin",blur:"focusout"},function(a,b){var" c="function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var" d="this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var" f,g;if("object"="=typeof" a){"string"!="typeof" b&&(c="c||b,b=void" 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null="=c&&null==d?(d=b,c=b=void" 0):null="=d&&(" string"="=typeof"" b?(d="c,c=void" 0):(d="c,c=b,b=void" 0)),d="==!1)d=$;else" if(!d)return this;return n().off(a),f.apply(this,arguments)},d.guid="f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return" this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventdefault&&a.handleobj)return a){for(e a)this.off(e,b,a[e]);return this}return(b="==!1||" function"="=typeof"" b)&&(c="b,b=void" 0),c="==!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return" this.each(function(){n.event.trigger(a,b,this)})},triggerhandler:function(a,b){var c?n.event.trigger(a,b,c,!0):void 0}});var ab="/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^">]*)\/>/gi,bb=/<([\w:]+) ,cb="/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)">\s*$/g,ib={option:[1,"<select multiple="multiple">","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder="0" width="0" height="0">")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),lb=void 0},n.fx.timer="function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return" a="n.fx?n.fx.speeds[a]||a:a,b=b||" fx",this.queue(b,function(b,c){var" d="setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var" yb,zb,$b="n.expr.attrHandle;n.fn.extend({attr:function(a,b){return" j(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g="n.trim(d),c.className!==g&&(c.className=g)}return" this},removeclass:function(a){var b,c,d,e,f,g,h="0===arguments.length||" string"="=typeof"" a&&a,i="0,j=this.length;if(n.isFunction(a))return" this.each(function(b){n(this).removeclass(a.call(this,b,this.classname))});if(h)for(b="(a||" ").match(e)||[];j">i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetheight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var 0="==b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else" wc="/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function" bc(a,b,c,d){var e;if(n.isarray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):bc(a+"["+("object"="=typeof" e?b:"")+"]",e,c,d)});else if(c||"object"!="=n.type(b))d(a,b);else" for(e in b)bc(a+"["+e+"]",b[e],c,d)}n.param="function(a,b){var" c,d="[],e=function(a,b){b=n.isFunction(b)?b():null==b?" ":b,d[d.length]="encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void"" for(c a)bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializearray())},serializearray:function(){return this.map(function(){var a="n.prop(this," elements");return" a?n.makearray(a):this}).filter(function(){var this.name&&!n(this).is(":disabled")&&ac.test(this.nodename)&&!zc.test(a)&&(this.checked||!t.test(a))}).map(function(a,b){var c="n(this).val();return" null="=c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc," \r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxsettings.xhr="function(){try{return"" new xmlhttprequest}catch(a){}};var cc="0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on(" unload",function(){for(var" dc)dc[a]()}),k.cors="!!Fc&&" withcredentials"in" fc,k.ajax="Fc=!!Fc,n.ajaxTransport(function(a){var" b;return k.cors||fc&&!a.crossdomain?{send:function(c,d){var e,f="a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e" a.xhrfields)f[e]="a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c[" x-requested-with"]||(c["x-requested-with"]="XMLHttpRequest" );for(e" c)f.setrequestheader(e,c[e]);b="function(a){return" function(){b&&(delete dc[g],b="f.onload=f.onerror=null," abort"="==a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof"" f.responsetext?{text:f.responsetext}:void 0,f.getallresponseheaders()))}},f.onload="b(),f.onerror=b(" error"),b="Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw"" h}},abort:function(){b&&b()}}:void 0}),n.ajaxsetup({accepts:{script:"text javascript, application ecmascript, x-ecmascript"},contents:{script: (?:java|ecma)script },converters:{"text script":function(a){return n.globaleval(a),a}}}),n.ajaxprefilter("script",function(a){void b,c;return{send:function(d,e){b="n(" <script">").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});//# sourceMappingURL=jquery.min.map</div></=0&&a.offsetheight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var></0&&(d+=e+"></c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),lb=void></iframe></$1></$1></([\w:]+)></b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altkey></0&&"on"+q,b=b[n.expando]?b:new></c?n.queue(this[0],a):void></11&&(g?g.index(c)></"===a[0]&&"></[\w\w]+></\></(\w+)\s*\></b;)a.push(d);return></6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return></31,e={}.hasownproperty,f=[],g=f.pop,h=f.push,i=f.push,j=f.slice,k=f.indexof||function(a){for(var>]]></content>
</entry>
<entry>
<title></title>
<link href="/birthday/js/jquery.fullPage.js"/>
<url>/birthday/js/jquery.fullPage.js</url>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><script class="meting-secondary-script-marker" src="\assets\js\Meting.min.js"></script>/** * fullPage 2.5.4 * https://github.com/alvarotrigo/fullPage.js * MIT licensed * * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo */(function($) {$.fn.fullpage = function(options) {// Create some defaults, extending them with any options that were providedoptions = $.extend({//navigation'menu': false,'anchors':[],'navigation': false,'navigationPosition': 'right','navigationColor': '#000','navigationTooltips': [],'slidesNavigation': false,'slidesNavPosition': 'bottom','scrollBar': false,//scrolling'css3': true,'scrollingSpeed': 700,'autoScrolling': true,'easing': 'easeInQuart','easingcss3': 'ease','loopBottom': false,'loopTop': false,'loopHorizontal': true,'continuousVertical': false,'normalScrollElements': null,'scrollOverflow': false,'touchSensitivity': 5,'normalScrollElementTouchThreshold': 5,//Accessibility'keyboardScrolling': true,'animateAnchor': true,'recordHistory': true,//design'controlArrows': true,'controlArrowColor': '#fff',"verticalCentered": true,'resize': true,'sectionsColor' : [],'paddingTop': 0,'paddingBottom': 0,'fixedElements': null,'responsive': 0,//Custom selectors'sectionSelector': '.section','slideSelector': '.slide',//events'afterLoad': null,'onLeave': null,'afterRender': null,'afterResize': null,'afterReBuild': null,'afterSlideLoad': null,'onSlideLeave': null}, options); displayWarnings(); //easeInQuart animation included in the plugin $.extend($.easing,{ easeInQuart: function (x, t, b, c, d) { return c*(t/=d)*t*t*t + b; }});//Defines the delay to take place before being able to scroll to the next section//BE CAREFUL! Not recommened to change it under 400 for a good behavior in laptops and//Apple devices (laptops, mouses...)var scrollDelay = 600;$.fn.fullpage.setAutoScrolling = function(value, type){setVariableState('autoScrolling', value, type);var element = $('.fp-section.active');if(options.autoScrolling && !options.scrollBar){$('html, body').css({'overflow' : 'hidden','height' : '100%'});$.fn.fullpage.setRecordHistory(options.recordHistory, 'internal');//for IE touch devicescontainer.css({'-ms-touch-action': 'none','touch-action': 'none'});if(element.length){//moving the container upsilentScroll(element.position().top);}}else{$('html, body').css({'overflow' : 'visible','height' : 'initial'});$.fn.fullpage.setRecordHistory(false, 'internal');//for IE touch devicescontainer.css({'-ms-touch-action': '','touch-action': ''});silentScroll(0);//scrolling the page to the section with no animation$('html, body').scrollTop(element.position().top);}};/*** Defines wheter to record the history for each hash change in the URL.*/$.fn.fullpage.setRecordHistory = function(value, type){setVariableState('recordHistory', value, type);};/*** Defines the scrolling speed*/$.fn.fullpage.setScrollingSpeed = function(value, type){setVariableState('scrollingSpeed', value, type);};/*** Adds or remove the possiblity of scrolling through sections by using the mouse wheel or the trackpad.*/$.fn.fullpage.setMouseWheelScrolling = function (value){if(value){addMouseWheelHandler();}else{removeMouseWheelHandler();}};/*** Adds or remove the possiblity of scrolling through sections by using the mouse wheel/trackpad or touch gestures.* Optionally a second parameter can be used to specify the direction for which the action will be applied.** @param directions string containing the direction or directions separated by comma.*/$.fn.fullpage.setAllowScrolling = function (value, directions){if(typeof directions != 'undefined'){directions = directions.replace(' ', '').split(',');$.each(directions, function (index, direction){setIsScrollable(value, direction);});}else if(value){$.fn.fullpage.setMouseWheelScrolling(true);addTouchHandler();}else{$.fn.fullpage.setMouseWheelScrolling(false);removeTouchHandler();}};/*** Adds or remove the possiblity of scrolling through sections by using the keyboard arrow keys*/$.fn.fullpage.setKeyboardScrolling = function (value){options.keyboardScrolling = value;};$.fn.fullpage.moveSectionUp = function(){var prev = $('.fp-section.active').prev('.fp-section');//looping to the bottom if there's no more sections aboveif (!prev.length && (options.loopTop || options.continuousVertical)) {prev = $('.fp-section').last();}if (prev.length) {scrollPage(prev, null, true);}};$.fn.fullpage.moveSectionDown = function (){var next = $('.fp-section.active').next('.fp-section');//looping to the top if there's no more sections belowif(!next.length &&(options.loopBottom || options.continuousVertical)){next = $('.fp-section').first();}if(next.length){scrollPage(next, null, false);}};$.fn.fullpage.moveTo = function (section, slide){var destiny = '';if(isNaN(section)){destiny = $('[data-anchor="'+section+'"]');}else{destiny = $('.fp-section').eq( (section -1) );}if (typeof slide !== 'undefined'){scrollPageAndSlide(section, slide);}else if(destiny.length > 0){scrollPage(destiny);}};$.fn.fullpage.moveSlideRight = function(){moveSlide('next');};$.fn.fullpage.moveSlideLeft = function(){moveSlide('prev');};/** * When resizing is finished, we adjust the slides sizes and positions */$.fn.fullpage.reBuild = function(resizing){isResizing = true;var windowsWidth = $(window).width();windowsHeight = $(window).height(); //updating global var//text and images resizingif (options.resize) {resizeMe(windowsHeight, windowsWidth);}$('.fp-section').each(function(){var scrollHeight = windowsHeight - parseInt($(this).css('padding-bottom')) - parseInt($(this).css('padding-top'));//adjusting the height of the table-cell for IE and Firefoxif(options.verticalCentered){$(this).find('.fp-tableCell').css('height', getTableHeight($(this)) + 'px');}$(this).css('height', windowsHeight + 'px');//resizing the scrolling divsif(options.scrollOverflow){var slides = $(this).find('.fp-slide');if(slides.length){slides.each(function(){createSlimScrolling($(this));});}else{createSlimScrolling($(this));}}//adjusting the position fo the FULL WIDTH slides...var slides = $(this).find('.fp-slides');if (slides.length) {landscapeScroll(slides, slides.find('.fp-slide.active'));}});//adjusting the position for the current sectionvar destinyPos = $('.fp-section.active').position();var activeSection = $('.fp-section.active');//isn't it the first section?if(activeSection.index('.fp-section')){scrollPage(activeSection);}isResizing = false;$.isFunction( options.afterResize ) && resizing && options.afterResize.call( this )$.isFunction( options.afterReBuild ) && !resizing && options.afterReBuild.call( this );}//flag to avoid very fast sliding for landscape slidersvar slideMoving = false;var isTouchDevice = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|Windows Phone|Tizen|Bada)/);var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0) || (navigator.maxTouchPoints));var container = $(this);var windowsHeight = $(window).height();var isMoving = false;var isResizing = false;var lastScrolledDestiny;var lastScrolledSlide;var nav;var wrapperSelector = 'fullpage-wrapper';var isScrollAllowed = { 'up':true, 'down':true, 'left':true, 'right':true };var originals = jQuery.extend(true, {}, options); //deep copy$.fn.fullpage.setAllowScrolling(true);//if css3 is not supported, it will use jQuery animationsif(options.css3){options.css3 = support3d();}if($(this).length){container.css({'height': '100%','position': 'relative'});//adding a class to recognize the container internally in the codecontainer.addClass(wrapperSelector);}//trying to use fullpage without a selector?else{showError('error', "Error! Fullpage.js needs to be initialized with a selector. For example: $('#myContainer').fullpage();");}//adding internal class names to void problem with common ones$(options.sectionSelector).each(function(){ $(this).addClass('fp-section');});$(options.slideSelector).each(function(){ $(this).addClass('fp-slide');});//creating the navigation dotsif (options.navigation) {addVerticalNavigation();}$('.fp-section').each(function(index){var that = $(this);var slides = $(this).find('.fp-slide');var numSlides = slides.length;//if no active section is defined, the 1st one will be the default oneif(!index && $('.fp-section.active').length === 0) {$(this).addClass('active');}$(this).css('height', windowsHeight + 'px');if(options.paddingTop || options.paddingBottom){$(this).css('padding', options.paddingTop + ' 0 ' + options.paddingBottom + ' 0');}if (typeof options.sectionsColor[index] !== 'undefined') {$(this).css('background-color', options.sectionsColor[index]);}if (typeof options.anchors[index] !== 'undefined') {$(this).attr('data-anchor', options.anchors[index]);}// if there's any slideif (numSlides > 1) {var sliderWidth = numSlides * 100;var slideWidth = 100 / numSlides;slides.wrapAll('<div class="fp-slidesContainer">');slides.parent().wrap('<div class="fp-slides">');$(this).find('.fp-slidesContainer').css('width', sliderWidth + '%');if(options.controlArrows){createSlideArrows($(this));}if(options.slidesNavigation){addSlidesNavigation($(this), numSlides);}slides.each(function(index) {$(this).css('width', slideWidth + '%');if(options.verticalCentered){addTableClass($(this));}});var startingSlide = that.find('.fp-slide.active');//if the slide won#t be an starting point, the default will be the first oneif(startingSlide.length == 0){slides.eq(0).addClass('active');}//is there a starting point for a non-starting section?else{silentLandscapeScroll(startingSlide);}}else{if(options.verticalCentered){addTableClass($(this));}}}).promise().done(function(){$.fn.fullpage.setAutoScrolling(options.autoScrolling, 'internal');//the starting point is a slide?var activeSlide = $('.fp-section.active').find('.fp-slide.active');//the active section isn't the first one? Is not the first slide of the first section? Then we load that section/slide by default.if( activeSlide.length && ($('.fp-section.active').index('.fp-section') != 0 || ($('.fp-section.active').index('.fp-section') == 0 && activeSlide.index() != 0))){silentLandscapeScroll(activeSlide);}//fixed elements need to be moved out of the plugin container due to problems with CSS3.if(options.fixedElements && options.css3){$(options.fixedElements).appendTo('body');}//vertical centered of the navigation + first bullet activeif(options.navigation){nav.css('margin-top', '-' + (nav.height()/2) + 'px');nav.find('li').eq($('.fp-section.active').index('.fp-section')).find('a').addClass('active');}//moving the menu outside the main container if it is inside (avoid problems with fixed positions when using CSS3 tranforms)if(options.menu && options.css3 && $(options.menu).closest('.fullpage-wrapper').length){$(options.menu).appendTo('body');}if(options.scrollOverflow){if(document.readyState === "complete"){createSlimScrollingHandler();}//after DOM and images are loaded$(window).on('load', createSlimScrollingHandler);}else{$.isFunction( options.afterRender ) && options.afterRender.call( this);}responsive();//getting the anchor link in the URL and deleting the `#`var value = window.location.hash.replace('#', '').split('/');var destiny = value[0];if(destiny.length){var section = $('[data-anchor="'+destiny+'"]');if(!options.animateAnchor && section.length){if(options.autoScrolling){silentScroll(section.position().top);}else{silentScroll(0);setBodyClass(destiny);//scrolling the page to the section with no animation$('html, body').scrollTop(section.position().top);}activateMenuAndNav(destiny, null);$.isFunction( options.afterLoad ) && options.afterLoad.call( this, destiny, (section.index('.fp-section') + 1));//updating the active classsection.addClass('active').siblings().removeClass('active');}}$(window).on('load', function() {scrollToAnchor();});});/*** Creates the control arrows for the given section*/function createSlideArrows(section){section.find('.fp-slides').after('<div class="fp-controlArrow fp-prev"></div><div class="fp-controlArrow fp-next"></div>');if(options.controlArrowColor!='#fff'){section.find('.fp-controlArrow.fp-next').css('border-color', 'transparent transparent transparent '+options.controlArrowColor);section.find('.fp-controlArrow.fp-prev').css('border-color', 'transparent '+ options.controlArrowColor + ' transparent transparent');}if(!options.loopHorizontal){section.find('.fp-controlArrow.fp-prev').hide();}}/*** Creates a vertical navigation bar.*/function addVerticalNavigation(){$('body').append('<div id="fp-nav"><ul></ul></div>');nav = $('#fp-nav');nav.css('color', options.navigationColor);nav.addClass(options.navigationPosition);for (var i = 0; i < $('.fp-section').length; i++) {var link = '';if (options.anchors.length) {link = options.anchors[i];}var li = '<li><a href="#' + link + '"><span></span></a>';// Only add tooltip if needed (defined by user)var tooltip = options.navigationTooltips[i];if (tooltip != undefined && tooltip != '') {li += '<div class="fp-tooltip ' + options.navigationPosition + '">' + tooltip + '</div>';}li += '</li>';nav.find('ul').append(li);}}function createSlimScrollingHandler(){$('.fp-section').each(function(){var slides = $(this).find('.fp-slide');if(slides.length){slides.each(function(){createSlimScrolling($(this));});}else{createSlimScrolling($(this));}});$.isFunction( options.afterRender ) && options.afterRender.call( this);}var scrollId;var scrollId2;var isScrolling = false;//when scrolling...$(window).on('scroll', scrollHandler);function scrollHandler(){if(!options.autoScrolling || options.scrollBar){var currentScroll = $(window).scrollTop();var visibleSectionIndex = 0;var initial = Math.abs(currentScroll - $('.fp-section').first().offset().top);//taking the section which is showing more content in the viewport$('.fp-section').each(function(index){var current = Math.abs(currentScroll - $(this).offset().top);if(current < initial){visibleSectionIndex = index;initial = current;}});//geting the last one, the current one on the screenvar currentSection = $('.fp-section').eq(visibleSectionIndex);}if(!options.autoScrolling){//executing only once the first time we reach the sectionif(!currentSection.hasClass('active')){isScrolling = true;var leavingSection = $('.fp-section.active').index('.fp-section') + 1;var yMovement = getYmovement(currentSection);var anchorLink = currentSection.data('anchor');var sectionIndex = currentSection.index('.fp-section') + 1;var activeSlide = currentSection.find('.fp-slide.active');if(activeSlide.length){var slideAnchorLink = activeSlide.data('anchor');var slideIndex = activeSlide.index();}currentSection.addClass('active').siblings().removeClass('active');if(!isMoving){$.isFunction( options.onLeave ) && options.onLeave.call( this, leavingSection, sectionIndex, yMovement);$.isFunction( options.afterLoad ) && options.afterLoad.call( this, anchorLink, sectionIndex);}activateMenuAndNav(anchorLink, 0);if(options.anchors.length && !isMoving){//needed to enter in hashChange event when using the menu with anchor linkslastScrolledDestiny = anchorLink;setState(slideIndex, slideAnchorLink, anchorLink, sectionIndex);}//small timeout in order to avoid entering in hashChange event when scrolling is not finished yetclearTimeout(scrollId);scrollId = setTimeout(function(){isScrolling = false;}, 100);}}if(options.scrollBar){//for the auto adjust of the viewport to fit a whole sectionclearTimeout(scrollId2);scrollId2 = setTimeout(function(){if(!isMoving){scrollPage(currentSection);}}, 1000);}}/*** Determines whether the active section or slide is scrollable through and scrolling bar*/function isScrollable(activeSection){//if there are landscape slides, we check if the scrolling bar is in the current one or notif(activeSection.find('.fp-slides').length){scrollable= activeSection.find('.fp-slide.active').find('.fp-scrollable');}else{scrollable = activeSection.find('.fp-scrollable');}return scrollable;}/*** Determines the way of scrolling up or down:* by 'automatically' scrolling a section or by using the default and normal scrolling.*/function scrolling(type, scrollable){if (!isScrollAllowed[type]){return;}if(type == 'down'){var check = 'bottom';var scrollSection = $.fn.fullpage.moveSectionDown;}else{var check = 'top';var scrollSection = $.fn.fullpage.moveSectionUp;}if(scrollable.length > 0 ){//is the scrollbar at the start/end of the scroll?if(isScrolled(check, scrollable)){scrollSection();}else{return true;}}else{// moved up/downscrollSection();}}var touchStartY = 0;var touchStartX = 0;var touchEndY = 0;var touchEndX = 0;/* Detecting touch events* As we are changing the top property of the page on scrolling, we can not use the traditional way to detect it.* This way, the touchstart and the touch moves shows an small difference between them which is the* used one to determine the direction.*/function touchMoveHandler(event){var e = event.originalEvent;// additional: if one of the normalScrollElements isn't within options.normalScrollElementTouchThreshold hops up the DOM chainif (!checkParentForNormalScrollElement(event.target)) {if(options.autoScrolling && !options.scrollBar){//preventing the easing on iOS devicesevent.preventDefault();}var activeSection = $('.fp-section.active');var scrollable = isScrollable(activeSection);if (!isMoving && !slideMoving) { //if theres any #var touchEvents = getEventsPage(e);touchEndY = touchEvents['y'];touchEndX = touchEvents['x'];//if movement in the X axys is greater than in the Y and the currect section has slides...if (activeSection.find('.fp-slides').length && Math.abs(touchStartX - touchEndX) > (Math.abs(touchStartY - touchEndY))) { //is the movement greater than the minimum resistance to scroll? if (Math.abs(touchStartX - touchEndX) > ($(window).width() / 100 * options.touchSensitivity)) { if (touchStartX > touchEndX) { if(isScrollAllowed.right){ $.fn.fullpage.moveSlideRight(); //next } } else { if(isScrollAllowed.left){ $.fn.fullpage.moveSlideLeft(); //prev } } }}//vertical scrolling (only when autoScrolling is enabled)else if(options.autoScrolling && !options.scrollBar){//is the movement greater than the minimum resistance to scroll?if (Math.abs(touchStartY - touchEndY) > ($(window).height() / 100 * options.touchSensitivity)) {if (touchStartY > touchEndY) {scrolling('down', scrollable);} else if (touchEndY > touchStartY) {scrolling('up', scrollable);}}}}}}/** * recursive function to loop up the parent nodes to check if one of them exists in options.normalScrollElements * Currently works well for iOS - Android might need some testing * @param {Element} el target element / jquery selector (in subsequent nodes) * @param {int} hop current hop compared to options.normalScrollElementTouchThreshold * @return {boolean} true if there is a match to options.normalScrollElements */function checkParentForNormalScrollElement (el, hop) {hop = hop || 0;var parent = $(el).parent();if (hop < options.normalScrollElementTouchThreshold &&parent.is(options.normalScrollElements) ) {return true;} else if (hop == options.normalScrollElementTouchThreshold) {return false;} else {return checkParentForNormalScrollElement(parent, ++hop);}}function touchStartHandler(event){var e = event.originalEvent;var touchEvents = getEventsPage(e);touchStartY = touchEvents['y'];touchStartX = touchEvents['x'];}/** * Detecting mousewheel scrolling * * http://blogs.sitepointstatic.com/examples/tech/mouse-wheel/index.html * http://www.sitepoint.com/html5-javascript-mouse-wheel/ */function MouseWheelHandler(e) {if(options.autoScrolling){// cross-browser wheel deltae = window.event || e;var delta = Math.max(-1, Math.min(1,(e.wheelDelta || -e.deltaY || -e.detail)));//preventing to scroll the site on mouse wheel when scrollbar is presentif(options.scrollBar){e.preventDefault ? e.preventDefault() : e.returnValue = false;}var activeSection = $('.fp-section.active');var scrollable = isScrollable(activeSection);if (!isMoving) { //if theres any #//scrolling down?if (delta < 0) {scrolling('down', scrollable);//scrolling up?}else {scrolling('up', scrollable);}}return false;}}function moveSlide(direction){ var activeSection = $('.fp-section.active'); var slides = activeSection.find('.fp-slides'); // more than one slide needed and nothing should be slidingif (!slides.length || slideMoving) { return;} var currentSlide = slides.find('.fp-slide.active'); var destiny = null; if(direction === 'prev'){ destiny = currentSlide.prev('.fp-slide'); }else{ destiny = currentSlide.next('.fp-slide'); } //isn't there a next slide in the secuence?if(!destiny.length){//respect loopHorizontal settinif (!options.loopHorizontal) return; if(direction === 'prev'){ destiny = currentSlide.siblings(':last'); }else{ destiny = currentSlide.siblings(':first'); }} slideMoving = true; landscapeScroll(slides, destiny);}/*** Maintains the active slides in the viewport* (Because he `scroll` animation might get lost with some actions, such as when using continuousVertical)*/function keepSlidesPosition(){$('.fp-slide.active').each(function(){silentLandscapeScroll($(this));});}/*** Scrolls the site to the given element and scrolls to the slide if a callback is given.*/function scrollPage(element, callback, isMovementUp){var dest = element.position();if(typeof dest === "undefined"){ return; } //there's no element to scroll, leaving the function//local variablesvar v = {element: element,callback: callback,isMovementUp: isMovementUp,dest: dest,dtop: dest.top,yMovement: getYmovement(element),anchorLink: element.data('anchor'),sectionIndex: element.index('.fp-section'),activeSlide: element.find('.fp-slide.active'),activeSection: $('.fp-section.active'),leavingSection: $('.fp-section.active').index('.fp-section') + 1,//caching the value of isResizing at the momment the function is called//because it will be checked later inside a setTimeout and the value might changelocalIsResizing: isResizing};//quiting when destination scroll is the same as the current oneif((v.activeSection.is(element) && !isResizing) || (options.scrollBar && $(window).scrollTop() === v.dtop)){ return; }if(v.activeSlide.length){var slideAnchorLink = v.activeSlide.data('anchor');var slideIndex = v.activeSlide.index();}// If continuousVertical && we need to wrap aroundif (options.autoScrolling && options.continuousVertical && typeof (v.isMovementUp) !== "undefined" &&((!v.isMovementUp && v.yMovement == 'up') || // Intending to scroll down but about to go up or(v.isMovementUp && v.yMovement == 'down'))) { // intending to scroll up but about to go downv = createInfiniteSections(v);}element.addClass('active').siblings().removeClass('active');//preventing from activating the MouseWheelHandler event//more than once if the page is scrollingisMoving = true;setState(slideIndex, slideAnchorLink, v.anchorLink, v.sectionIndex);//callback (onLeave) if the site is not just resizing and readjusting the slides$.isFunction(options.onLeave) && !v.localIsResizing && options.onLeave.call(this, v.leavingSection, (v.sectionIndex + 1), v.yMovement);performMovement(v);//flag to avoid callingn `scrollPage()` twice in case of using anchor linkslastScrolledDestiny = v.anchorLink;//avoid firing it twice (as it does also on scroll)if(options.autoScrolling){activateMenuAndNav(v.anchorLink, v.sectionIndex)}}/*** Performs the movement (by CSS3 or by jQuery)*/function performMovement(v){// using CSS3 translate functionalityif (options.css3 && options.autoScrolling && !options.scrollBar) {var translate3d = 'translate3d(0px, -' + v.dtop + 'px, 0px)';transformContainer(translate3d, true);setTimeout(function () {afterSectionLoads(v);}, options.scrollingSpeed);}// using jQuery animateelse{var scrollSettings = getScrollSettings(v);$(scrollSettings.element).animate(scrollSettings.options, options.scrollingSpeed, options.easing).promise().done(function () { //only one single callback in case of animating `html, body`afterSectionLoads(v);});}}/*** Gets the scrolling settings depending on the plugin autoScrolling option*/function getScrollSettings(v){var scroll = {};if(options.autoScrolling && !options.scrollBar){scroll.options = { 'top': -v.dtop};scroll.element = '.'+wrapperSelector;}else{scroll.options = { 'scrollTop': v.dtop};scroll.element = 'html, body';}return scroll;}/*** Adds sections before or after the current one to create the infinite effect.*/function createInfiniteSections(v){// Scrolling downif (!v.isMovementUp) {// Move all previous sections to after the active section$(".fp-section.active").after(v.activeSection.prevAll(".fp-section").get().reverse());}else { // Scrolling up// Move all next sections to before the active section$(".fp-section.active").before(v.activeSection.nextAll(".fp-section"));}// Maintain the displayed position (now that we changed the element order)silentScroll($('.fp-section.active').position().top);// Maintain the active slides visible in the viewportkeepSlidesPosition();// save for later the elements that still need to be reorderedv.wrapAroundElements = v.activeSection;// Recalculate animation variablesv.dest = v.element.position();v.dtop = v.dest.top;v.yMovement = getYmovement(v.element);return v;}/*** Fix section order after continuousVertical changes have been animated*/function continuousVerticalFixSectionOrder (v) {// If continuousVertical is in effect (and autoScrolling would also be in effect then),// finish moving the elements around so the direct navigation will function more simplyif (!v.wrapAroundElements || !v.wrapAroundElements.length) {return;}if (v.isMovementUp) {$('.fp-section:first').before(v.wrapAroundElements);}else {$('.fp-section:last').after(v.wrapAroundElements);}silentScroll($('.fp-section.active').position().top);// Maintain the active slides visible in the viewportkeepSlidesPosition();};/*** Actions to do once the section is loaded*/function afterSectionLoads (v){continuousVerticalFixSectionOrder(v);//callback (afterLoad) if the site is not just resizing and readjusting the slides$.isFunction(options.afterLoad) && !v.localIsResizing && options.afterLoad.call(this, v.anchorLink, (v.sectionIndex + 1));setTimeout(function () {isMoving = false;$.isFunction(v.callback) && v.callback.call(this);}, scrollDelay);}/*** Scrolls to the anchor in the URL when loading the site*/function scrollToAnchor(){//getting the anchor link in the URL and deleting the `#`var value = window.location.hash.replace('#', '').split('/');var section = value[0];var slide = value[1];if(section){ //if theres any #scrollPageAndSlide(section, slide);}}//detecting any change on the URL to scroll to the given anchor link//(a way to detect back history button as we play with the hashes on the URL)$(window).on('hashchange', hashChangeHandler);function hashChangeHandler(){if(!isScrolling){var value = window.location.hash.replace('#', '').split('/');var section = value[0];var slide = value[1];if(section.length){//when moving to a slide in the first section for the first time (first time to add an anchor to the URL)var isFirstSlideMove = (typeof lastScrolledDestiny === 'undefined');var isFirstScrollMove = (typeof lastScrolledDestiny === 'undefined' && typeof slide === 'undefined' && !slideMoving);/*in order to call scrollpage() only once for each destination at a timeIt is called twice for each scroll otherwise, as in case of using anchorlinks `hashChange`event is fired on every scroll too.*/if ((section && section !== lastScrolledDestiny) && !isFirstSlideMove || isFirstScrollMove || (!slideMoving && lastScrolledSlide != slide )) {scrollPageAndSlide(section, slide);}}}}/** * Sliding with arrow keys, both, vertical and horizontal */$(document).keydown(function(e) {//Moving the main page with the keyboard arrows if keyboard scrolling is enabledif (options.keyboardScrolling && options.autoScrolling) {//preventing the scroll with arrow keysif(e.which == 40 || e.which == 38){e.preventDefault();}if(!isMoving){switch (e.which) {//upcase 38:case 33:$.fn.fullpage.moveSectionUp();break;//downcase 40:case 34:$.fn.fullpage.moveSectionDown();break;//Homecase 36:$.fn.fullpage.moveTo(1);break;//Endcase 35:$.fn.fullpage.moveTo( $('.fp-section').length );break;//leftcase 37:$.fn.fullpage.moveSlideLeft();break;//rightcase 39:$.fn.fullpage.moveSlideRight();break;default:return; // exit this handler for other keys}}}});/*** Scrolls to the section when clicking the navigation bullet*/$(document).on('click touchstart', '#fp-nav a', function(e){e.preventDefault();var index = $(this).parent().index();scrollPage($('.fp-section').eq(index));});/*** Scrolls the slider to the given slide destination for the given section*/$(document).on('click touchstart', '.fp-slidesNav a', function(e){e.preventDefault();var slides = $(this).closest('.fp-section').find('.fp-slides');var destiny = slides.find('.fp-slide').eq($(this).closest('li').index());landscapeScroll(slides, destiny);});if(options.normalScrollElements){$(document).on('mouseenter', options.normalScrollElements, function () {$.fn.fullpage.setMouseWheelScrolling(false);});$(document).on('mouseleave', options.normalScrollElements, function(){$.fn.fullpage.setMouseWheelScrolling(true);});}/** * Scrolling horizontally when clicking on the slider controls. */$('.fp-section').on('click touchstart', '.fp-controlArrow', function() {if ($(this).hasClass('fp-prev')) {$.fn.fullpage.moveSlideLeft();} else {$.fn.fullpage.moveSlideRight();}});/*** Scrolls horizontal sliders.*/function landscapeScroll(slides, destiny){var destinyPos = destiny.position();var slidesContainer = slides.find('.fp-slidesContainer').parent();var slideIndex = destiny.index();var section = slides.closest('.fp-section');var sectionIndex = section.index('.fp-section');var anchorLink = section.data('anchor');var slidesNav = section.find('.fp-slidesNav');var slideAnchor = destiny.data('anchor');//caching the value of isResizing at the momment the function is called//because it will be checked later inside a setTimeout and the value might changevar localIsResizing = isResizing;if(options.onSlideLeave){var prevSlideIndex = section.find('.fp-slide.active').index();var xMovement = getXmovement(prevSlideIndex, slideIndex);//if the site is not just resizing and readjusting the slidesif(!localIsResizing && xMovement!=='none'){$.isFunction( options.onSlideLeave ) && options.onSlideLeave.call( this, anchorLink, (sectionIndex + 1), prevSlideIndex, xMovement);}}destiny.addClass('active').siblings().removeClass('active');if(typeof slideAnchor === 'undefined'){slideAnchor = slideIndex;}if(!options.loopHorizontal && options.controlArrows){//hidding it for the fist slide, showing for the restsection.find('.fp-controlArrow.fp-prev').toggle(slideIndex!=0);//hidding it for the last slide, showing for the restsection.find('.fp-controlArrow.fp-next').toggle(!destiny.is(':last-child'));}//only changing the URL if the slides are in the current section (not for resize re-adjusting)if(section.hasClass('active')){setState(slideIndex, slideAnchor, anchorLink, sectionIndex);}var afterSlideLoads = function(){//if the site is not just resizing and readjusting the slidesif(!localIsResizing){$.isFunction( options.afterSlideLoad ) && options.afterSlideLoad.call( this, anchorLink, (sectionIndex + 1), slideAnchor, slideIndex);}//letting them slide againslideMoving = false;};if(options.css3){var translate3d = 'translate3d(-' + destinyPos.left + 'px, 0px, 0px)';addAnimation(slides.find('.fp-slidesContainer'), options.scrollingSpeed>0).css(getTransforms(translate3d));setTimeout(function(){afterSlideLoads();}, options.scrollingSpeed, options.easing);}else{slidesContainer.animate({scrollLeft : destinyPos.left}, options.scrollingSpeed, options.easing, function() {afterSlideLoads();});}slidesNav.find('.active').removeClass('active');slidesNav.find('li').eq(slideIndex).find('a').addClass('active');} //when resizing the site, we adjust the heights of the sections, slimScroll... $(window).resize(resizeHandler); var previousHeight = windowsHeight; var resizeId; function resizeHandler(){ //checking if it needs to get responsive responsive(); // rebuild immediately on touch devicesif (isTouchDevice) {//if the keyboard is visibleif ($(document.activeElement).attr('type') !== 'text') {var currentHeight = $(window).height();//making sure the change in the viewport size is enough to force a rebuild. (20 % of the window to avoid problems when hidding scroll bars)if( Math.abs(currentHeight - previousHeight) > (20 * Math.max(previousHeight, currentHeight) / 100) ){ $.fn.fullpage.reBuild(true); previousHeight = currentHeight; } } }else{ //in order to call the functions only when the resize is finished //http://stackoverflow.com/questions/4298612/jquery-how-to-call-resize-event-only-once-its-finished-resizing clearTimeout(resizeId); resizeId = setTimeout(function(){ $.fn.fullpage.reBuild(true); }, 500); } } /** * Checks if the site needs to get responsive and disables autoScrolling if so. * A class `fp-responsive` is added to the plugin's container in case the user wants to use it for his own responsive CSS. */ function responsive(){ if(options.responsive){ var isResponsive = container.hasClass('fp-responsive'); if ($(window).width() < options.responsive ){ if(!isResponsive){ $.fn.fullpage.setAutoScrolling(false, 'internal'); $('#fp-nav').hide();container.addClass('fp-responsive'); } }else if(isResponsive){ $.fn.fullpage.setAutoScrolling(originals.autoScrolling, 'internal'); $('#fp-nav').show();container.removeClass('fp-responsive'); } } } /*** Adds transition animations for the given element*/function addAnimation(element){var transition = 'all ' + options.scrollingSpeed + 'ms ' + options.easingcss3;element.removeClass('fp-notransition');return element.css({'-webkit-transition': transition, 'transition': transition });}/*** Remove transition animations for the given element*/function removeAnimation(element){return element.addClass('fp-notransition');}/** * Resizing of the font size depending on the window size as well as some of the images on the site. */function resizeMe(displayHeight, displayWidth) {//Standard dimensions, for which the body font size is correctvar preferredHeight = 825;var preferredWidth = 900;if (displayHeight < preferredHeight || displayWidth < preferredWidth) {var heightPercentage = (displayHeight * 100) / preferredHeight;var widthPercentage = (displayWidth * 100) / preferredWidth;var percentage = Math.min(heightPercentage, widthPercentage);var newFontSize = percentage.toFixed(2);$("body").css("font-size", newFontSize + '%');} else {$("body").css("font-size", '100%');}}/** * Activating the website navigation dots according to the given slide name. */function activateNavDots(name, sectionIndex){if(options.navigation){$('#fp-nav').find('.active').removeClass('active');if(name){$('#fp-nav').find('a[href="#' + name + '"]').addClass('active');}else{$('#fp-nav').find('li').eq(sectionIndex).find('a').addClass('active');}}}/** * Activating the website main menu elements according to the given slide name. */function activateMenuElement(name){if(options.menu){$(options.menu).find('.active').removeClass('active');$(options.menu).find('[data-menuanchor="'+name+'"]').addClass('active');}}function activateMenuAndNav(anchor, index){activateMenuElement(anchor);activateNavDots(anchor, index);}/*** Return a boolean depending on whether the scrollable element is at the end or at the start of the scrolling* depending on the given type.*/function isScrolled(type, scrollable){if(type === 'top'){return !scrollable.scrollTop();}else if(type === 'bottom'){return scrollable.scrollTop() + 1 + scrollable.innerHeight() >= scrollable[0].scrollHeight;}}/*** Retuns `up` or `down` depending on the scrolling movement to reach its destination* from the current section.*/function getYmovement(destiny){var fromIndex = $('.fp-section.active').index('.fp-section');var toIndex = destiny.index('.fp-section');if( fromIndex == toIndex){return 'none'}if(fromIndex > toIndex){return 'up';}return 'down';}/*** Retuns `right` or `left` depending on the scrolling movement to reach its destination* from the current slide.*/function getXmovement(fromIndex, toIndex){if( fromIndex == toIndex){return 'none'}if(fromIndex > toIndex){return 'left';}return 'right';}function createSlimScrolling(element){//needed to make `scrollHeight` work under Opera 12element.css('overflow', 'hidden');//in case element is a slidevar section = element.closest('.fp-section');var scrollable = element.find('.fp-scrollable');//if there was scroll, the contentHeight will be the one in the scrollable sectionif(scrollable.length){var contentHeight = scrollable.get(0).scrollHeight;}else{var contentHeight = element.get(0).scrollHeight;if(options.verticalCentered){contentHeight = element.find('.fp-tableCell').get(0).scrollHeight;}}var scrollHeight = windowsHeight - parseInt(section.css('padding-bottom')) - parseInt(section.css('padding-top'));//needs scroll?if ( contentHeight > scrollHeight) {//was there already an scroll ? Updating itif(scrollable.length){scrollable.css('height', scrollHeight + 'px').parent().css('height', scrollHeight + 'px');}//creating the scrollingelse{if(options.verticalCentered){element.find('.fp-tableCell').wrapInner('<div class="fp-scrollable">');}else{element.wrapInner('<div class="fp-scrollable">');}element.find('.fp-scrollable').slimScroll({allowPageScroll: true,height: scrollHeight + 'px',size: '10px',alwaysVisible: true});}}//removing the scrolling when it is not necessary anymoreelse{removeSlimScroll(element);}//undoelement.css('overflow', '');}function removeSlimScroll(element){element.find('.fp-scrollable').children().first().unwrap().unwrap();element.find('.slimScrollBar').remove();element.find('.slimScrollRail').remove();}function addTableClass(element){element.addClass('fp-table').wrapInner('<div class="fp-tableCell" style="height:' + getTableHeight(element) + 'px;">');}function getTableHeight(element){var sectionHeight = windowsHeight;if(options.paddingTop || options.paddingBottom){var section = element;if(!section.hasClass('fp-section')){section = element.closest('.fp-section');}var paddings = parseInt(section.css('padding-top')) + parseInt(section.css('padding-bottom'));sectionHeight = (windowsHeight - paddings);}return sectionHeight;}/*** Adds a css3 transform property to the container class with or without animation depending on the animated param.*/function transformContainer(translate3d, animated){if(animated){addAnimation(container);}else{removeAnimation(container);}container.css(getTransforms(translate3d));//syncronously removing the class after the animation has been applied.setTimeout(function(){container.removeClass('fp-notransition');},10)}/*** Scrolls to the given section and slide*/function scrollPageAndSlide(destiny, slide){if (typeof slide === 'undefined') { slide = 0;}if(isNaN(destiny)){var section = $('[data-anchor="'+destiny+'"]');}else{var section = $('.fp-section').eq( (destiny -1) );}//we need to scroll to the section and then to the slideif (destiny !== lastScrolledDestiny && !section.hasClass('active')){scrollPage(section, function(){scrollSlider(section, slide)});}//if we were already in the sectionelse{scrollSlider(section, slide);}}/*** Scrolls the slider to the given slide destination for the given section*/function scrollSlider(section, slide){if(typeof slide != 'undefined'){var slides = section.find('.fp-slides');var destiny = slides.find('[data-anchor="'+slide+'"]');if(!destiny.length){destiny = slides.find('.fp-slide').eq(slide);}if(destiny.length){landscapeScroll(slides, destiny);}}}/*** Creates a landscape navigation bar with dots for horizontal sliders.*/function addSlidesNavigation(section, numSlides){section.append('<div class="fp-slidesNav"><ul></ul></div>');var nav = section.find('.fp-slidesNav');//top or bottomnav.addClass(options.slidesNavPosition);for(var i=0; i< numSlides; i++){nav.find('ul').append('<li><a href="#"><span></span></a></li>');}//centering itnav.css('margin-left', '-' + (nav.width()/2) + 'px');nav.find('li').first().find('a').addClass('active');}/*** Sets the state of the website depending on the active section/slide.* It changes the URL hash when needed and updates the body class.*/function setState(slideIndex, slideAnchor, anchorLink, sectionIndex){var sectionHash = '';if(options.anchors.length){//isn't it the first slide?if(slideIndex){if(typeof anchorLink !== 'undefined'){sectionHash = anchorLink;}//slide without anchor link? We take the index instead.if(typeof slideAnchor === 'undefined'){slideAnchor = slideIndex;}lastScrolledSlide = slideAnchor;setUrlHash(sectionHash + '/' + slideAnchor);//first slide won't have slide anchor, just the section one}else if(typeof slideIndex !== 'undefined'){lastScrolledSlide = slideAnchor;setUrlHash(anchorLink);}//section without slideselse{setUrlHash(anchorLink);}setBodyClass(location.hash);}else if(typeof slideIndex !== 'undefined'){setBodyClass(sectionIndex + '-' + slideIndex);}else{setBodyClass(String(sectionIndex));}}/*** Sets the URL hash.*/function setUrlHash(url){if(options.recordHistory){location.hash = url;}else{//Mobile Chrome doesn't work the normal way, so... lets use HTML5 for phones :)if(isTouchDevice || isTouch){history.replaceState(undefined, undefined, "#" + url)}else{var baseUrl = window.location.href.split('#')[0];window.location.replace( baseUrl + '#' + url );}}}/*** Sets a class for the body of the page depending on the active section / slide*/function setBodyClass(text){//changing slash for dash to make it a valid CSS styletext = text.replace('/', '-').replace('#','');//removing previous anchor classes$("body")[0].className = $("body")[0].className.replace(/\b\s?fp-viewing-[^\s]+\b/g, '');//adding the current anchor$("body").addClass("fp-viewing-" + text);}/*** Checks for translate3d support* @return boolean* http://stackoverflow.com/questions/5661671/detecting-transform-translate3d-support*/function support3d() {var el = document.createElement('p'),has3d,transforms = {'webkitTransform':'-webkit-transform','OTransform':'-o-transform','msTransform':'-ms-transform','MozTransform':'-moz-transform','transform':'transform'};// Add it to the body to get the computed style.document.body.insertBefore(el, null);for (var t in transforms) {if (el.style[t] !== undefined) {el.style[t] = "translate3d(1px,1px,1px)";has3d = window.getComputedStyle(el).getPropertyValue(transforms[t]);}}document.body.removeChild(el);return (has3d !== undefined && has3d.length > 0 && has3d !== "none");}/*** Removes the auto scrolling action fired by the mouse wheel and trackpad.* After this function is called, the mousewheel and trackpad movements won't scroll through sections.*/function removeMouseWheelHandler(){if (document.addEventListener) {document.removeEventListener('mousewheel', MouseWheelHandler, false); //IE9, Chrome, Safari, Operdocument.removeEventListener('wheel', MouseWheelHandler, false); //Firefox} else {document.detachEvent("onmousewheel", MouseWheelHandler); //IE 6/7/8}}/*** Adds the auto scrolling action for the mouse wheel and trackpad.* After this function is called, the mousewheel and trackpad movements will scroll through sections*/function addMouseWheelHandler(){if (document.addEventListener) {document.addEventListener("mousewheel", MouseWheelHandler, false); //IE9, Chrome, Safari, Operdocument.addEventListener("wheel", MouseWheelHandler, false); //Firefox} else {document.attachEvent("onmousewheel", MouseWheelHandler); //IE 6/7/8}}/*** Adds the possibility to auto scroll through sections on touch devices.*/function addTouchHandler(){if(isTouchDevice || isTouch){//Microsoft pointersMSPointer = getMSPointer();$(document).off('touchstart ' + MSPointer.down).on('touchstart ' + MSPointer.down, touchStartHandler);$(document).off('touchmove ' + MSPointer.move).on('touchmove ' + MSPointer.move, touchMoveHandler);}}/*** Removes the auto scrolling for touch devices.*/function removeTouchHandler(){if(isTouchDevice || isTouch){//Microsoft pointersMSPointer = getMSPointer();$(document).off('touchstart ' + MSPointer.down);$(document).off('touchmove ' + MSPointer.move);}}/** Returns and object with Microsoft pointers (for IE<11 and for ie>= 11)* http://msdn.microsoft.com/en-us/library/ie/dn304886(v=vs.85).aspx*/function getMSPointer(){var pointer;//IE >= 11 & rest of browsersif(window.PointerEvent){pointer = { down: "pointerdown", move: "pointermove"};}//IE < 11else{pointer = { down: "MSPointerDown", move: "MSPointerMove"};}return pointer;}/*** Gets the pageX and pageY properties depending on the browser.* https://github.com/alvarotrigo/fullPage.js/issues/194#issuecomment-34069854*/function getEventsPage(e){var events = new Array();events['y'] = (typeof e.pageY !== 'undefined' && (e.pageY || e.pageX) ? e.pageY : e.touches[0].pageY);events['x'] = (typeof e.pageX !== 'undefined' && (e.pageY || e.pageX) ? e.pageX : e.touches[0].pageX);return events;}function silentLandscapeScroll(activeSlide){$.fn.fullpage.setScrollingSpeed (0, 'internal');landscapeScroll(activeSlide.closest('.fp-slides'), activeSlide);$.fn.fullpage.setScrollingSpeed(originals.scrollingSpeed, 'internal');}function silentScroll(top){if(options.scrollBar){container.scrollTop(top);}else if (options.css3) {var translate3d = 'translate3d(0px, -' + top + 'px, 0px)';transformContainer(translate3d, false);}else {container.css("top", -top);}}function getTransforms(translate3d){return {'-webkit-transform': translate3d,'-moz-transform': translate3d,'-ms-transform':translate3d,'transform': translate3d};}function setIsScrollable(value, direction){switch (direction){case 'up': isScrollAllowed.up = value; break;case 'down': isScrollAllowed.down = value; break;case 'left': isScrollAllowed.left = value; break;case 'right': isScrollAllowed.right = value; break;case 'all': $.fn.fullpage.setAllowScrolling(value);}}/** Destroys fullpage.js plugin events and optinally its html markup and styles*/$.fn.fullpage.destroy = function(all){$.fn.fullpage.setAutoScrolling(false, 'internal'); $.fn.fullpage.setAllowScrolling(false); $.fn.fullpage.setKeyboardScrolling(false); $(window).off('scroll', scrollHandler) .off('hashchange', hashChangeHandler) .off('resize', resizeHandler);$(document).off('click', '#fp-nav a').off('mouseenter', '#fp-nav li').off('mouseleave', '#fp-nav li').off('click', '.fp-slidesNav a') .off('mouseover', options.normalScrollElements) .off('mouseout', options.normalScrollElements);$('.fp-section').off('click', '.fp-controlArrow');//lets make a mess!if(all){destroyStructure();} }; /** Removes inline styles added by fullpage.js*/function destroyStructure(){//reseting the `top` or `translate` properties to 0 silentScroll(0);$('#fp-nav, .fp-slidesNav, .fp-controlArrow').remove();//removing inline styles$('.fp-section').css( {'height': '','background-color' : '','padding': ''});$('.fp-slide').css( {'width': ''});container.css({ 'height': '', 'position': '', '-ms-touch-action': '', 'touch-action': '' });//removing added classes$('.fp-section, .fp-slide').each(function(){removeSlimScroll($(this));$(this).removeClass('fp-table active');});removeAnimation(container);removeAnimation(container.find('.fp-easing'));//Unwrapping contentcontainer.find('.fp-tableCell, .fp-slidesContainer, .fp-slides').each(function(){//unwrap not being use in case there's no child element inside and its just text$(this).replaceWith(this.childNodes);});//scrolling the page to the top with no animation$('html, body').scrollTop(0);}/** Sets the state for a variable with multiple states (original, and temporal)* Some variables such as `autoScrolling` or `recordHistory` might change automatically its state when using `responsive` or `autoScrolling:false`.* This function is used to keep track of both states, the original and the temporal one.* If type is not 'internal', then we assume the user is globally changing the variable.*/function setVariableState(variable, value, type){options[variable] = value;if(type !== 'internal'){originals[variable] = value;}}/*** Displays warnings*/function displayWarnings(){// Disable mutually exclusive settingsif (options.continuousVertical &&(options.loopTop || options.loopBottom)) { options.continuousVertical = false; showError('warn', "Option `loopTop/loopBottom` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled");}if(options.continuousVertical && options.scrollBar){options.continuousVertical = false;showError('warn', "Option `scrollBar` is mutually exclusive with `continuousVertical`; `continuousVertical` disabled");}//anchors can not have the same value as any element ID or NAME$.each(options.anchors, function(index, name){if($('#' + name).length || $('[name="'+name+'"]').length ){showError('error', "data-anchor tags can not have the same value as any `id` element on the site (or `name` element for IE).");}});}function showError(type, text){console && console[type] && console[type]('fullPage: ' + text);}};})(jQuery);</11></div></div></div></div></div>]]></content>
</entry>