/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 1 9 ĠDi ep DT Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . one vn . browser . ad block . filter . unified . io Ċ Ċ import Ġcom . one vn . browser . ad block . filter . toByteArray Ċ import Ġcom . one vn . browser . ad block . filter . to Short ByteArray Ċ import Ġcom . one vn . browser . ad block . filter . unified . FILTER _ CACHE _ HEADER Ċ import Ġcom . one vn . browser . ad block . filter . unified . Unified Filter Ċ import Ġcom . one vn . browser . ad block . filter . unified . write Variable Int Ċ import Ġjava . io . OutputStream Ċ import Ġkotlin . math . min Ċ Ċ class ĠFilter Writer Ġ{ ĊĠĠĠ Ġprivate Ġval Ġint Buf Ġ= ĠByteArray ( 4 ) ĊĠĠĠ Ġprivate Ġval Ġshort Buf Ġ= ĠByteArray ( 2 ) ĊĊĠĠĠ Ġfun Ġwrite ( os : ĠOutputStream , Ġfilters : ĠList < Unified Filter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Header ( os ) ĊĠĠĠĠĠĠĠ Ġwrite All ( os , Ġfilters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite Header ( os : ĠOutputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġos . write ( FILTER _ CACHE _ HEADER . toByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite All ( os : ĠOutputStream , Ġfilters : ĠList < Unified Filter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġos . write ( filters . size . toByteArray ( int Buf )) ĊĊĠĠĠĠĠĠĠ Ġfilters . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( it . type Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( it . contentType . to Short ByteArray ( short Buf )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( if Ġ( it . ignore Case ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( it . third Party Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpattern Bytes Ġ= Ġit . pattern . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write Variable Int ( pattern Bytes . size , Ġshort Buf , Ġint Buf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( pattern Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( min ( it . domains ?. size Ġ?: Ġ 0 , Ġ 2 5 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . domains ?. let Ġ{ Ġmap Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmin ( map . size , Ġ 2 5 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġmap . getKey ( i ). toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . write Variable Int ( key . size , Ġshort Buf , Ġint Buf ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( if Ġ( map . getValue ( i )) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ