1 00:00:00,000 --> 00:00:09,500 >> [MUZIK Bermain] 2 00:00:09,500 --> 00:00:12,350 >> ZAMYLA CHAN: Ia adalah Miss Scarlett dengan lilin. 3 00:00:12,350 --> 00:00:13,560 Kisah penyiasatan? 4 00:00:13,560 --> 00:00:15,030 Nah, kita akan mengetahui. 5 00:00:15,030 --> 00:00:20,870 Dalam petunjuk permainan papan, anda mungkin diberi imej merah fizikal. 6 00:00:20,870 --> 00:00:24,120 Dan imej yang sangat merah dan turun naik, dan tugas anda ialah untuk 7 00:00:24,120 --> 00:00:25,490 mendedahkan mesej yang tersembunyi. 8 00:00:25,490 --> 00:00:29,740 Dan biasanya anda disediakan dengan merah kaca pembesar, atau skrin merah untuk 9 00:00:29,740 --> 00:00:31,410 mendedahkan bahawa mesej tersembunyi. 10 00:00:31,410 --> 00:00:33,340 Nah, kita akan meniru itu. 11 00:00:33,340 --> 00:00:37,960 >> Dalam Kisah penyiasatan, anda diberi imej bitmap yang kelihatan sangat turun naik dan merah, 12 00:00:37,960 --> 00:00:43,430 dan jalankan program Kisah penyiasatan yang untuk mendedahkan mesej tersembunyi. 13 00:00:43,430 --> 00:00:45,650 >> Jadi mari kita memecahkan ini ke dalam langkah-langkah. 14 00:00:45,650 --> 00:00:50,390 Pertama, anda mahu untuk membuka fail - petunjuk yang anda telah diberikan. 15 00:00:50,390 --> 00:00:53,880 Dan kemudian juga mewujudkan fail keputusan bitmap. 16 00:00:53,880 --> 00:00:58,240 Kemudian anda ingin mengemaskini bitmap header info untuk outfile keputusan itu. 17 00:00:58,240 --> 00:00:59,920 Yang akan dibincang kemudian. 18 00:00:59,920 --> 00:01:04,319 Dan kemudian anda akan baca di petunjuk, scanline, piksel dengan, 19 00:01:04,319 --> 00:01:07,320 menukar warna piksel sebagai perlu, dan menulis 20 00:01:07,320 --> 00:01:08,960 mereka ke dalam keputusan itu - 21 00:01:08,960 --> 00:01:12,000 piksel dengan ke dalam keputusan scanline. 22 00:01:12,000 --> 00:01:13,780 >> Bagaimana kita mula pergi tentang perkara ini? 23 00:01:13,780 --> 00:01:16,940 Baik, bernasib baik, kami mempunyai copy.c dalam kod pengedaran. 24 00:01:16,940 --> 00:01:21,240 Dan ini akan membuktikan amat berguna kepada kami. 25 00:01:21,240 --> 00:01:29,700 Copy.c membuka fail, dibaca dalam yang header infile, dan kemudian mengemas kini 26 00:01:29,700 --> 00:01:31,070 header outfile ini. 27 00:01:31,070 --> 00:01:37,010 Dan kemudian ia membaca setiap piksel dalam scanline, piksel dengan, dan kemudian 28 00:01:37,010 --> 00:01:42,390 menulis piksel yang ke outfile itu. 29 00:01:42,390 --> 00:01:45,020 >> Jadi, langkah pertama anda mungkin adalah untuk menjalankan yang berikut 30 00:01:45,020 --> 00:01:46,420 perintah di terminal - 31 00:01:46,420 --> 00:01:50,270 cp copy.c whodunit.c. 32 00:01:50,270 --> 00:01:55,320 Ini akan membuat salinan copy.c dinamakan whodunit.c. 33 00:01:55,320 --> 00:01:58,320 Jadi langkah pertama kami untuk membuka fail, baik, ada yang tepat 34 00:01:58,320 --> 00:02:00,070 replika yang di copy.c. 35 00:02:00,070 --> 00:02:03,360 Jadi saya akan meninggalkan anda untuk melihat itu. 36 00:02:03,360 --> 00:02:07,860 >> Apa yang kita berurusan dengan dalam Serangga ini fail I / O, pada dasarnya mengambil gambar, 37 00:02:07,860 --> 00:02:10,229 membaca, menulis, mengedit mereka. 38 00:02:10,229 --> 00:02:12,650 Bagaimana anda mula-mula membuka fail yang dibenarkan? 39 00:02:12,650 --> 00:02:16,800 Nah, anda akan mengisytiharkan fail penunjuk, dan kemudian anda memanggil 40 00:02:16,800 --> 00:02:18,670 fungsi fopen. 41 00:02:18,670 --> 00:02:23,150 Lulus dalam jalan yang benar, atau nama yang fail, dan kemudian mod yang anda mahu 42 00:02:23,150 --> 00:02:24,700 untuk membuka fail yang masuk 43 00:02:24,700 --> 00:02:28,620 Lulus dalam r satu akan terbuka foo.bmp untuk membaca. 44 00:02:28,620 --> 00:02:35,670 Manakala fopen dengan lulus dalam w yang akan bar.bmp terbuka, untuk menulis fail dan 45 00:02:35,670 --> 00:02:37,020 sebenarnya menyuntingnya. 46 00:02:37,020 --> 00:02:41,970 >> Jadi sekarang kita telah membuka fail tersebut, kami Langkah seterusnya adalah untuk mengemaskini maklumat pengepala 47 00:02:41,970 --> 00:02:43,230 untuk outfile itu. 48 00:02:43,230 --> 00:02:44,610 Apakah yang dimaksudkan dengan maklumat header? 49 00:02:44,610 --> 00:02:48,160 Well, pertama kita perlu tahu apa bitmap adalah. 50 00:02:48,160 --> 00:02:51,000 Bitmap adalah hanya mudah yang susunan bait. 51 00:02:51,000 --> 00:02:55,480 Dan mereka diisytiharkan dalam fail ini di sini, bmp.h, dengan sekumpulan 52 00:02:55,480 --> 00:02:58,610 maklumat apa bitmap yang sebenarnya dibuat daripada. 53 00:02:58,610 --> 00:03:05,730 Tetapi apa yang kita benar-benar mengambil berat tentang adalah header fail bitmap, di sini, dan 54 00:03:05,730 --> 00:03:08,460 header info bitmap, di sini. 55 00:03:08,460 --> 00:03:13,170 Pengepala ialah terdiri daripada beberapa pembolehubah yang akan membuktikan bahawa ia amat berguna. 56 00:03:13,170 --> 00:03:18,400 Terdapat biSizeImage, yang merupakan Jumlah keseluruhan imej dalam bait. 57 00:03:18,400 --> 00:03:20,890 Dan ini termasuk pixels dan padding. 58 00:03:20,890 --> 00:03:24,210 Padding adalah sangat penting, tetapi kita akan mendapat yang kemudian. 59 00:03:24,210 --> 00:03:30,000 >> BiWidth mewakili lebar imej dalam piksel tolak padding itu. 60 00:03:30,000 --> 00:03:34,220 BiHeight kemudian juga ketinggian imej dalam piksel. 61 00:03:34,220 --> 00:03:38,240 Dan kemudian BITMAPFILEHEADER dan BITMAPINFOHEADER, seperti yang saya sebutkan 62 00:03:38,240 --> 00:03:40,900 sebelum ini, mereka yang diwakili sebagai structs. 63 00:03:40,900 --> 00:03:45,410 Jadi, anda tidak boleh mengakses fail header sendiri, tetapi anda akan mahu ke 64 00:03:45,410 --> 00:03:47,370 pembolehubah-pembolehubah di dalam. 65 00:03:47,370 --> 00:03:48,170 >> OK. 66 00:03:48,170 --> 00:03:50,600 Jadi bagaimana kita mengemaskini maklumat header? 67 00:03:50,600 --> 00:03:54,020 Well, pertama kita perlu melihat sama ada kita perlu menukar apa-apa maklumat daripada 68 00:03:54,020 --> 00:03:58,480 infile itu, petunjuk, kepada outfile, keputusan itu. 69 00:03:58,480 --> 00:04:00,250 Adakah apa-apa perubahan dalam kes ini? 70 00:04:00,250 --> 00:04:04,320 Well, sebenarnya tidak, kerana kita akan untuk hanya menukar warna. 71 00:04:04,320 --> 00:04:07,550 Kami tidak akan berubah fail saiz, saiz imej, lebar, 72 00:04:07,550 --> 00:04:08,310 atau ketinggian. 73 00:04:08,310 --> 00:04:14,010 Jadi anda semua sesuai untuk sekarang dengan hanya menyalin setiap piksel. 74 00:04:14,010 --> 00:04:14,840 >> OK. 75 00:04:14,840 --> 00:04:20,720 Jadi sekarang mari kita lihat bagaimana kita sebenarnya boleh membaca setiap piksel dari fail. 76 00:04:20,720 --> 00:04:23,640 Satu lagi fail I / O fungsi akan mula bermain - 77 00:04:23,640 --> 00:04:24,700 fread. 78 00:04:24,700 --> 00:04:28,440 Ia mengambil masa dalam penunjuk untuk struct itu yang akan mengandungi bait yang 79 00:04:28,440 --> 00:04:30,110 anda membaca. 80 00:04:30,110 --> 00:04:31,890 Jadi anda membaca ke dalam itu. 81 00:04:31,890 --> 00:04:36,090 Dan kemudian anda meninggal dalam saiz, yang merupakan saiz setiap elemen yang anda 82 00:04:36,090 --> 00:04:37,360 hendak baca. 83 00:04:37,360 --> 00:04:40,640 Di sini, fungsi sizeof akan sangat berguna. 84 00:04:40,640 --> 00:04:45,570 Kemudian anda meninggal dalam bilangan yang mewakili bilangan unsur-unsur 85 00:04:45,570 --> 00:04:47,480 saiz untuk dibaca. 86 00:04:47,480 --> 00:04:51,180 Dan kemudian akhirnya, inptr, yang merupakan penunjuk fail yang anda 87 00:04:51,180 --> 00:04:52,530 akan membaca dari. 88 00:04:52,530 --> 00:04:58,650 Jadi semua unsur-unsur berada di dalam inptr dan mereka akan data. 89 00:04:58,650 --> 00:05:01,660 >> Mari kita lihat satu contoh yang kecil. 90 00:05:01,660 --> 00:05:07,590 Jika saya mahu membaca ke dalam data dua anjing, baik, saya boleh melakukannya dengan dua cara. 91 00:05:07,590 --> 00:05:15,250 Saya sama ada boleh dibaca dua objek saiz anjing dari inptr saya, atau saya boleh membaca 92 00:05:15,250 --> 00:05:19,280 dalam satu membantah saiz dua anjing. 93 00:05:19,280 --> 00:05:23,580 Jadi anda lihat bahawa bergantung kepada cara bahawa anda menguruskan saiz dan bilangan, anda 94 00:05:23,580 --> 00:05:25,840 boleh membaca dalam jumlah yang sama bait. 95 00:05:25,840 --> 00:05:28,720 96 00:05:28,720 --> 00:05:33,020 >> Jadi sekarang, mari kita menukar warna pixel seperti yang kita perlukan. 97 00:05:33,020 --> 00:05:37,320 Jika anda melihat bmp.h sekali lagi, maka anda akan melihat bahawa di bahagian bawah 98 00:05:37,320 --> 00:05:42,920 RGBTRIPLEs adalah struct lain, di mana mereka terdiri dari tiga bait. 99 00:05:42,920 --> 00:05:49,220 Satu, rgbtBlue, rgbtGreen, dan rgbtRed. 100 00:05:49,220 --> 00:05:52,480 Jadi setiap mewakili jumlah biru, jumlah hijau, dan 101 00:05:52,480 --> 00:05:57,250 jumlah merah di dalam piksel ini, di mana setiap jumlah diwakili oleh 102 00:05:57,250 --> 00:05:58,670 nombor perenambelasan. 103 00:05:58,670 --> 00:06:04,370 >> Jadi FF0000 akan menjadi warna biru, kerana ia pergi dari biru, 104 00:06:04,370 --> 00:06:05,850 kepada hijau, ke merah. 105 00:06:05,850 --> 00:06:09,300 Dan kemudian f semua akan menjadi putih. 106 00:06:09,300 --> 00:06:13,440 Mari kita lihat smiley.bmp, yang anda ada di dalam kod pengedaran anda. 107 00:06:13,440 --> 00:06:15,690 Jika anda membukanya dalam hanya imej penonton, maka anda akan 108 00:06:15,690 --> 00:06:17,080 hanya melihat smiley merah. 109 00:06:17,080 --> 00:06:20,380 Tetapi mengambil menyelam yang lebih mendalam di dalam, kita akan melihat bahawa struktur 110 00:06:20,380 --> 00:06:22,340 daripada ia hanya piksel. 111 00:06:22,340 --> 00:06:25,880 Kami mempunyai piksel putih, dan kemudian piksel merah. 112 00:06:25,880 --> 00:06:31,000 Putih, FFFFFF, dan kemudian semua piksel merah saya berwarna dalam untuk anda 113 00:06:31,000 --> 00:06:35,440 di sini, dan anda melihat bahawa mereka 0000ff. 114 00:06:35,440 --> 00:06:39,760 Zero biru, sifar hijau, dan merah penuh. 115 00:06:39,760 --> 00:06:45,350 Dan sejak smiley adalah lapan piksel luas kita tidak mempunyai apa-apa padding. 116 00:06:45,350 --> 00:06:47,360 Baiklah. 117 00:06:47,360 --> 00:06:53,310 >> Jadi jika saya memberikan nilai yang berbeza untuk RGBTRIPLE dan saya mahu 118 00:06:53,310 --> 00:06:58,350 menjadikannya hijau, kemudian apa yang saya akan lakukan ialah Saya akan mengisytiharkan RGBTRIPLE, dinamakan 119 00:06:58,350 --> 00:07:02,660 tiga kali ganda, dan kemudian untuk mengakses setiap bait dalam yang struct saya 120 00:07:02,660 --> 00:07:04,030 akan menggunakan operator titik. 121 00:07:04,030 --> 00:07:08,430 Jadi triple.rgbtBlue, saya boleh menyerahhakkan yang kepada 0. 122 00:07:08,430 --> 00:07:13,460 Hijau saya boleh sediakan bagi penuh - mana-mana nombor, benar-benar, antara 0 dan seterusnya. 123 00:07:13,460 --> 00:07:15,470 Dan kemudian merah, saya juga akan berkata 0. 124 00:07:15,470 --> 00:07:19,160 Demikian maka yang memberikan saya piksel hijau. 125 00:07:19,160 --> 00:07:23,030 >> Seterusnya, bagaimana jika saya ingin menyemak nilai sesuatu? 126 00:07:23,030 --> 00:07:27,250 Saya boleh mempunyai sesuatu yang memeriksa sama ada nilai rgbtBlue tiga kali ganda adalah 127 00:07:27,250 --> 00:07:31,080 dan seterusnya dan kemudian cetak, "saya rasa biru! ", sebagai hasilnya. 128 00:07:31,080 --> 00:07:35,640 Sekarang, yang tidak bermakna yang piksel adalah biru, bukan? 129 00:07:35,640 --> 00:07:40,060 Oleh kerana nilai-nilai hijau dan merah piksel ini juga boleh mempunyai bukan 0 nilai-nilai. 130 00:07:40,060 --> 00:07:43,470 Semua ini bermakna, dan semua yang ini memeriksa adalah 131 00:07:43,470 --> 00:07:45,610 untuk warna biru penuh. 132 00:07:45,610 --> 00:07:50,050 Tetapi semua piksel juga boleh mempunyai sebahagian nilai warna, seperti ini 133 00:07:50,050 --> 00:07:52,180 Contoh seterusnya di sini. 134 00:07:52,180 --> 00:07:55,400 >> Ia sedikit lebih sukar untuk melihat apa imej ini sekarang. 135 00:07:55,400 --> 00:08:00,320 Ini kelihatan sedikit lebih seperti clue.bmp bahawa anda akan diberikan. 136 00:08:00,320 --> 00:08:03,600 Sekarang, dari segi fizikal, anda mungkin menyelesaikan ini, kerana ada banyak merah, oleh 137 00:08:03,600 --> 00:08:07,040 bertahan skrin merah untuk imej jadi bahawa warna-warna lain boleh muncul. 138 00:08:07,040 --> 00:08:10,968 Jadi bagaimana kita meniru ini dengan c? 139 00:08:10,968 --> 00:08:15,640 Well, kita mungkin membuang semua merah daripada imej sepenuhnya. 140 00:08:15,640 --> 00:08:21,870 Dan untuk berbuat demikian bahawa kita akan ditetapkan setiap nilai piksel merah untuk 0. 141 00:08:21,870 --> 00:08:25,020 Dan supaya imej akan kelihatan sedikit sedikit seperti ini, di mana kita tidak mempunyai merah 142 00:08:25,020 --> 00:08:26,300 sekalipun. 143 00:08:26,300 --> 00:08:29,390 >> Kita boleh melihat yang tersembunyi mesej sedikit lebih jelas sekarang. 144 00:08:29,390 --> 00:08:31,730 Ia wajah lain smiley. 145 00:08:31,730 --> 00:08:33,870 Atau mungkin kita boleh menggunakan kaedah lain. 146 00:08:33,870 --> 00:08:36,480 Mungkin, kita boleh mengenal pasti semua piksel merah - 147 00:08:36,480 --> 00:08:41,100 iaitu, semua piksel dengan 0 biru, hijau 0, dan 0 merah - 148 00:08:41,100 --> 00:08:43,169 dan menukar mereka kepada warna putih. 149 00:08:43,169 --> 00:08:45,470 Dan imej kami mungkin kelihatan sesuatu seperti ini. 150 00:08:45,470 --> 00:08:48,250 Sedikit lebih mudah untuk melihat. 151 00:08:48,250 --> 00:08:51,170 >> Terdapat banyak cara lain untuk mendedahkan mesej rahsia juga, 152 00:08:51,170 --> 00:08:53,730 berurusan dengan manipulasi warna. 153 00:08:53,730 --> 00:08:57,050 Mungkin anda mungkin menggunakan salah satu daripada kaedah yang saya nyatakan di atas. 154 00:08:57,050 --> 00:08:59,600 Dan tambahan, anda mungkin mahu untuk meningkatkan beberapa warna 155 00:08:59,600 --> 00:09:02,620 dan membawa mereka keluar. 156 00:09:02,620 --> 00:09:06,190 >> Jadi sekarang kita telah mengubah piksel warna, seterusnya kita hanya perlu untuk menulis mereka 157 00:09:06,190 --> 00:09:08,500 masuk ke scanline itu, piksel dengan. 158 00:09:08,500 --> 00:09:11,860 Dan sekali lagi, anda akan mahu melihat kembali untuk copy.c, jika anda tidak disalin 159 00:09:11,860 --> 00:09:18,170 ia sudah, dan melihat fwrite yang fungsi, yang mengambil data, penunjuk 160 00:09:18,170 --> 00:09:23,230 untuk struct yang mengandungi bait yang bahawa anda membaca dari, saiz 161 00:09:23,230 --> 00:09:26,610 barang-barang, bilangan item, dan kemudian outptr yang - 162 00:09:26,610 --> 00:09:29,450 destinasi fail-fail. 163 00:09:29,450 --> 00:09:34,010 >> Selepas anda menulis dalam piksel, anda akan juga perlu menulis dalam padding itu. 164 00:09:34,010 --> 00:09:34,970 Apakah padding? 165 00:09:34,970 --> 00:09:38,670 Well, setiap piksel rgbt adalah tiga bait. 166 00:09:38,670 --> 00:09:43,670 Tetapi, scanline untuk imej bitmap perlu satu gandaan empat bait. 167 00:09:43,670 --> 00:09:47,650 Dan jika bilangan piksel bukan gandaan empat, maka kita perlu menambah 168 00:09:47,650 --> 00:09:48,880 padding ini. 169 00:09:48,880 --> 00:09:51,420 Padding hanya diwakili oleh 0-an. 170 00:09:51,420 --> 00:09:54,380 Jadi, bagaimana kita menulis, atau membaca ini? 171 00:09:54,380 --> 00:09:59,280 Nah, ternyata bahawa anda tidak boleh padding sebenarnya fread, tetapi anda boleh 172 00:09:59,280 --> 00:10:00,970 mengira ia. 173 00:10:00,970 --> 00:10:04,400 >> Dalam kes ini, petunjuk dan keputusan itu mempunyai lebar yang sama, maka 174 00:10:04,400 --> 00:10:05,910 padding adalah sama. 175 00:10:05,910 --> 00:10:09,370 Dan padding, seperti yang anda akan melihat dalam copy.c, dikira 176 00:10:09,370 --> 00:10:11,790 dengan formula di bawah - 177 00:10:11,790 --> 00:10:16,690 kali bi.biWidth sizeof (RGBTRIPLE) akan memberi kita berapa banyak bait bmp yang 178 00:10:16,690 --> 00:10:18,280 mempunyai dalam setiap baris. 179 00:10:18,280 --> 00:10:21,890 Dari sana, modulos dan penolakan dengan 4 boleh mengira berapa 180 00:10:21,890 --> 00:10:25,610 banyak bait perlu ditambah supaya berbilang bait pada 181 00:10:25,610 --> 00:10:27,250 setiap baris adalah empat. 182 00:10:27,250 --> 00:10:30,490 >> Sekarang kita mempunyai formula untuk berapa banyak padding yang kita perlukan, sekarang 183 00:10:30,490 --> 00:10:31,610 kita boleh menulisnya. 184 00:10:31,610 --> 00:10:34,080 Sekarang, saya nyatakan sebelum ini, padding hanya 0-an. 185 00:10:34,080 --> 00:10:39,730 Jadi dalam hal itu, kami hanya meletakkan a char, dalam kes ini yang 0, ke dalam kami 186 00:10:39,730 --> 00:10:41,710 outptr - outfile kami. 187 00:10:41,710 --> 00:10:47,530 Jadi yang hanya boleh fputc 0, koma outptr. 188 00:10:47,530 --> 00:10:52,400 >> Oleh itu, walaupun kita telah membaca ke dalam kami fail, fail I / O telah disimpan mengesan kami 189 00:10:52,400 --> 00:10:57,440 kedudukan dalam fail-fail dengan sesuatu dipanggil penunjuk kedudukan fail. 190 00:10:57,440 --> 00:10:59,350 Anggapkannya sebagai kursor. 191 00:10:59,350 --> 00:11:03,550 Pada asasnya, ia pendahuluan setiap kali yang kita fread, tetapi kita mempunyai 192 00:11:03,550 --> 00:11:05,671 kawalan ke atas itu juga. 193 00:11:05,671 --> 00:11:11,030 >> Untuk menggerakkan penunjuk kedudukan fail, anda boleh menggunakan fungsi fseek itu. 194 00:11:11,030 --> 00:11:15,600 Di mana inptr mewakili fail penunjuk bahawa anda sedang mencari dalam, 195 00:11:15,600 --> 00:11:20,370 jumlah bilangan bait yang anda mahu menggerakkan kursor, dan kemudian dari 196 00:11:20,370 --> 00:11:23,470 berkaitan dengan titik rujukan dari mana kursor anda. 197 00:11:23,470 --> 00:11:26,770 Jika anda lulus dalam SEEK_CUR, yang mewakili arus yang 198 00:11:26,770 --> 00:11:28,100 kedudukan dalam fail. 199 00:11:28,100 --> 00:11:31,020 Atau anda boleh menggunakan beberapa parameter lain. 200 00:11:31,020 --> 00:11:35,400 Jadi, kita mungkin mahu menggunakan fseek melangkau sepanjang padding fail dalam. 201 00:11:35,400 --> 00:11:39,410 Dan sekali lagi, jika anda terjebak, ada satu contoh bahawa dalam copy.c. 202 00:11:39,410 --> 00:11:43,260 >> Jadi, kami kini membuka fail, petunjuk, dan keputusan itu. 203 00:11:43,260 --> 00:11:46,450 Kami telah mengemas kini maklumat pengepala untuk keputusan kita, kerana setiap 204 00:11:46,450 --> 00:11:48,730 bitmap memerlukan tandukan. 205 00:11:48,730 --> 00:11:52,280 Kami kemudian membaca ke dalam petunjuk ini scanline, piksel dengan, menukar 206 00:11:52,280 --> 00:11:55,210 setiap warna yang perlu, dan menulis mereka ke dalam 207 00:11:55,210 --> 00:11:57,340 keputusan, piksel dengan. 208 00:11:57,340 --> 00:12:01,550 Sebaik sahaja anda membuka keputusan, anda boleh melihat yang pelakunya, atau apa rahsia 209 00:12:01,550 --> 00:12:02,850 Mesej adalah. 210 00:12:02,850 --> 00:12:05,550 Nama saya Zamyla, dan ini adalah Kisah penyiasatan. 211 00:12:05,550 --> 00:12:12,864