Giới thiệu
Hầu hết lợi nhuận của các ngân hàng đến từ hoạt động cấp tín dụng và
cho vay. Cấp tín dụng là một trong những hoạt động tạo ra một tỉ trọng
lớn về doanh thu và lợi nhuận cho ngân hàng nhưng cũng tiềm ẩn rất nhiều
rủi ro (Zakrzewska, 2007). Rủi ro chính của ngân hàng là khả năng khách
hàng không có khả năng hoàn trả lại khoản vay mà ngân hàng đã cấp. Mặt
khác, quyết định có hay không cung cấp một khoản vay cho khách hàng
thường phụ thuộc nhiều vào trình độ cũng như kinh nghiệm của cán nhân
viên thẩm định tín dụng (Thomas, 2000).
Một trong những cách tiếp cận truyền thống khi xét duyệt các khoản
vay là căn cứ vào một số tiêu chí xếp hạng mà một số trong số đó là rất
khó đo lường, hoặc khó có thể đo lường chính xác. Chẳng hạn tiêu chuẩn
5C khi cấp tín dụng là dựa trên những đánh giá của ngân hàng về tư cách,
năng lực, vốn, tài sản thế chấp, và điều kiện của người xin vay
(Abrahams & Zhang, 2008).Một số tiêu chí, chẳng hạn như tư cách và
năng lực của người vay là một nhân tố khó đánh giá và do vậy có thể dẫn
đến các sai sót khi quyết định cho vay. Ngoài ra phương pháp đánh giá
xếp hạng tín dụng dựa trên tiêu chuẩn 5C là có chi phí cao và có thể xẩy
ra sự không nhất quán về việc cho vay hay không giữa những nhân viên
thẩm định tín dụng khác nhau đối với cùng một hồ sơ xin vay. Vì những
hạn chế này, các ngân hàng cũng như các tổ chức tài chính cần sử dụng
các phương pháp thẩm định và xếp hạng tín dụng tin cậy, khách quan và
chi phí thấp nhằm giúp những tổ chức này quyết định có hay không cấp tín
dụng cho các hồ sơ xin vay (Akhavein, Frame, & White, 2005; Chye,
Chin, & Peng, 2004). Hơn nữa, theo Thomas và ctg (2002), các ngân
hàng cần một phương pháp xếp hạng tín dụng mà thỏa mãn những đòi hỏi
sau: (1) chi phí rẻ và dễ vận hành, (2) nhanh chóng và ổn định, (3) đưa
ra những quyết định nhất quán dựa trên các thông tin khách quan không
phụ thuộc vào cảm xúc và tình cảm chủ quan của con người, và (4) hiệu
quả của hệ phương pháp xếp hạng tín dụng có thể dễ dàng kiểm tra, điều
chỉnh ở bất kì thời điểm nào nhằm điều chỉnh kịp thời với những thay đổi
về chính sách hoặc điều kiện của nền kinh tế.
Đối với vấn đề phân loại và xếp hạng tín dụng, cách tiếp cận truyền
thống là dựa vào các phương pháp thống kê thuần túy như hồi quy tuyến
tính đa biến (Meyer & Pifer, 1970), phân tích khác biệt (Altman,
1968; Banasik, Crook, & Thomas, 2003), và hồi quy Logistic (Desai,
Crook, & Overstreet, 1996; Dimitras, Zanakis, & Zopounidis,
1996; Elliott & Filinkov, 2008; Lee, Chiu, Lu, & Chen, 2002).
Tuy nhiên những yêu cầu của hội đồng Basel về giám sát hoạt động ngân
hàng (the Basel Committee on Banking Supervision) ban hành năm 2004 đòi
hỏi các ngân hàng cũng như các tổ chức tài chính phải sử dụng những mô
hình phân loại tín dụng tin cậy hơn nhằm nâng cao hiệu quả của việc phân
bổ vốn. Nhằm đáp ứng những đòi hỏi trên, trong những năm gần đây đã xuất
hiện một số mô hình phân loại tín dụng mới theo cách tiếp cận của học
máy (Machine Learning) và trí thông minh nhân tạo (Artificial
Intelligence). Không giống như các tiếp cận trước đây, các phương pháp
mới này không đưa ra bất kì giả thiết chặt chẽ nào như đòi hỏi của các
cách tiếp cận theo phương pháp thống kê. Thay vào đó, các tiếp cận mới
này cố gắng khai thác và đưa ra các kiến thức, các thông tin đầu ra chỉ
dựa vào các thông tin đầu vào là các quan sát, các thông tin trong quá
khứ. Với bài toán phân loại tín dụng, một số mô hình thuộc học máy như
mạng trí tuệ nhân tạo ANN (Artificial Neural Network), Máy Hỗ Trợ Véctơ
SVM (Support Vector Machines), K láng giềng gần nhất KNN (K-Nearest
Neighbors), rừng ngẫu nhiên RF (Random Forest), cây quyết định DT
(Decision Tree) chẳng hạn đã chứng tỏ nhiều ưu thế về mức độ chính xác
cũng như tin cậy so với một số mô hình phân loại truyền thống (Chi &
Hsu, 2012; Huang et.all, 2004; Huang, Chen, & Wang, 2007; Ince &
Aktan, 2009; Martens và ctg., 2010).
Dự án này được thực hiện nhằm đánh giá và so sánh chất lượng phân
loại của mô hình Logisitic - một cách tiếp cận truyền thống của thống kê
với ba mô hình Machine Learning là Random Forest, Gradient Boosting
Machine và Artificial Neural Network (tên đầy đủ là Multi-layer
Feedforward Artificial Neural Network) trên cả hai nhóm chỉ tiêu chính
là: (1) các chỉ tiêu thống kê thuần túy như Accuracy, và (2) hệ quả kinh
tế - lợi nhuận từ việc sử dụng mô hình đối với tổ chức tài chính - ngân
hàng.
Dữ liệu sử dụng là hmeq.csv của cuốn CREDIT
RISK ANALYTICS MEASUREMENT TECHNIQUES, APPLICATIONS, and EXAMPLES in SAS
and R.
LS0tCnRpdGxlOiAiQ8OhY2ggc+G7rSBk4bulbmcgUm1hcmtkYXduIGNobyBiw6FvIGPDoW8iCmF1dGhvcjogIk5ndXllbiBDaGkgRHVuZyIKc3VidGl0bGU6IFRydW5nIHTDom0gxJHDoG8gdOG6oW8Kb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgaGlnaGxpZ2h0OiBweWdtZW50cwogICAgdGhlbWU6IGZsYXRseQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgd29yZF9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKYGBge3Igc2V0dXAsaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgojIyBHaeG7m2kgdGhp4buHdQoKSOG6p3UgaOG6v3QgbOG7o2kgbmh14bqtbiBj4bunYSBjw6FjIG5nw6JuIGjDoG5nIMSR4bq/biB04burIGhv4bqhdCDEkeG7mW5nIGPhuqVwIHTDrW4gZOG7pW5nIHbDoCBjaG8gdmF5LiBD4bqlcCB0w61uIGThu6VuZyBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBob+G6oXQgxJHhu5luZyB04bqhbyByYSBt4buZdCB04buJIHRy4buNbmcgbOG7m24gduG7gSBkb2FuaCB0aHUgdsOgIGzhu6NpIG5odeG6rW4gY2hvIG5nw6JuIGjDoG5nIG5oxrBuZyBjxaluZyB0aeG7gW0g4bqpbiBy4bqldCBuaGnhu4F1IHLhu6dpIHJvIChaYWtyemV3c2thLCAyMDA3KS4gUuG7p2kgcm8gY2jDrW5oIGPhu6dhIG5nw6JuIGjDoG5nIGzDoCBraOG6oyBuxINuZyBraMOhY2ggaMOgbmcga2jDtG5nIGPDsyBraOG6oyBuxINuZyBob8OgbiB0cuG6oyBs4bqhaSBraG/huqNuIHZheSBtw6AgbmfDom4gaMOgbmcgxJHDoyBj4bqlcC4gTeG6t3Qga2jDoWMsIHF1eeG6v3QgxJHhu4tuaCBjw7MgaGF5IGtow7RuZyBjdW5nIGPhuqVwIG3hu5l0IGtob+G6o24gdmF5IGNobyBraMOhY2ggaMOgbmcgdGjGsOG7nW5nIHBo4bulIHRodeG7mWMgbmhp4buBdSB2w6BvIHRyw6xuaCDEkeG7mSBjxaluZyBuaMawIGtpbmggbmdoaeG7h20gY+G7p2EgY8OhbiBuaMOibiB2acOqbiB0aOG6qW0gxJHhu4tuaCB0w61uIGThu6VuZyAoVGhvbWFzLCAyMDAwKS4KCk3hu5l0IHRyb25nIG5o4buvbmcgY8OhY2ggdGnhur9wIGPhuq1uIHRydXnhu4FuIHRo4buRbmcga2hpIHjDqXQgZHV54buHdCBjw6FjIGtob+G6o24gdmF5IGzDoCAgY8SDbiBj4bupIHbDoG8gbeG7mXQgc+G7kSB0acOqdSBjaMOtIHjhur9wIGjhuqFuZyBtw6AgbeG7mXQgc+G7kSB0cm9uZyBz4buRIMSRw7MgbMOgIHLhuqV0IGtow7MgxJFvIGzGsOG7nW5nLCBob+G6t2Mga2jDsyBjw7MgdGjhu4MgxJFvIGzGsOG7nW5nIGNow61uaCB4w6FjLiBDaOG6s25nIGjhuqFuIHRpw6p1IGNodeG6qW4gNUMga2hpIGPhuqVwIHTDrW4gZOG7pW5nIGzDoCBk4buxYSB0csOqbiBuaOG7r25nIMSRw6FuaCBnacOhIGPhu6dhIG5nw6JuIGjDoG5nIHbhu4EgdMawIGPDoWNoLCBuxINuZyBs4buxYywgduG7kW4sIHTDoGkgc+G6o24gdGjhur8gY2jhuqVwLCB2w6AgxJFp4buBdSBraeG7h24gY+G7p2EgbmfGsOG7nWkgeGluIHZheSAoQWJyYWhhbXMgJiBaaGFuZywgMjAwOCkuTeG7mXQgc+G7kSB0acOqdSBjaMOtLCBjaOG6s25nIGjhuqFuIG5oxrAgdMawIGPDoWNoIHbDoCBuxINuZyBs4buxYyBj4bunYSBuZ8aw4budaSB2YXkgbMOgIG3hu5l0IG5ow6JuIHThu5Ega2jDsyDEkcOhbmggZ2nDoSB2w6AgZG8gduG6rXkgY8OzIHRo4buDIGThuqtuIMSR4bq/biBjw6FjIHNhaSBzw7N0IGtoaSBxdXnhur90IMSR4buLbmggY2hvIHZheS4gTmdvw6BpIHJhIHBoxrDGoW5nIHBow6FwIMSRw6FuaCBnacOhIHjhur9wIGjhuqFuZyB0w61uIGThu6VuZyBk4buxYSB0csOqbiB0acOqdSBjaHXhuqluIDVDIGzDoCBjw7MgY2hpIHBow60gY2FvIHbDoCBjw7MgdGjhu4MgeOG6qXkgcmEgc+G7sSBraMO0bmcgbmjhuqV0IHF1w6FuIHbhu4Egdmnhu4djIGNobyB2YXkgaGF5IGtow7RuZyBnaeG7r2Egbmjhu69uZyBuaMOibiB2acOqbiB0aOG6qW0gxJHhu4tuaCB0w61uIGThu6VuZyBraMOhYyBuaGF1IMSR4buRaSB24bubaSBjw7luZyBt4buZdCBo4buTIHPGoSB4aW4gdmF5LiBWw6wgbmjhu69uZyBo4bqhbiBjaOG6vyBuw6B5LCBjw6FjIG5nw6JuIGjDoG5nIGPFqW5nIG5oxrAgY8OhYyB04buVIGNo4bupYyB0w6BpIGNow61uaCBj4bqnbiBz4butIGThu6VuZyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4bqpbSDEkeG7i25oIHbDoCB44bq/cCBo4bqhbmcgdMOtbiBk4bulbmcgdGluIGPhuq15LCBraMOhY2ggcXVhbiB2w6AgY2hpIHBow60gdGjhuqVwIG5o4bqxbSBnacO6cCBuaOG7r25nIHThu5UgY2jhu6ljIG7DoHkgcXV54bq/dCDEkeG7i25oIGPDsyBoYXkga2jDtG5nIGPhuqVwIHTDrW4gZOG7pW5nIGNobyBjw6FjIGjhu5Mgc8ahIHhpbiB2YXkgKEFraGF2ZWluLCBGcmFtZSwgJiBXaGl0ZSwgMjAwNTsgQ2h5ZSwgQ2hpbiwgJiBQZW5nLCAyMDA0KS4gSMahbiBu4buvYSwgdGhlbyBUaG9tYXMgdsOgIGN0ZyAoMjAwMiksIGPDoWMgbmfDom4gaMOgbmcgY+G6p24gbeG7mXQgcGjGsMahbmcgcGjDoXAgeOG6v3AgaOG6oW5nIHTDrW4gZOG7pW5nIG3DoCB0aOG7j2EgbcOjbiBuaOG7r25nIMSRw7JpIGjhu49pIHNhdTogKDEpIGNoaSBwaMOtIHLhursgdsOgIGThu4UgduG6rW4gaMOgbmgsICgyKSBuaGFuaCBjaMOzbmcgdsOgIOG7lW4gxJHhu4tuaCwgKDMpIMSRxrBhIHJhIG5o4buvbmcgcXV54bq/dCDEkeG7i25oIG5o4bqldCBxdcOhbiBk4buxYSB0csOqbiBjw6FjIHRow7RuZyB0aW4ga2jDoWNoIHF1YW4ga2jDtG5nIHBo4bulIHRodeG7mWMgdsOgbyBj4bqjbSB4w7pjIHbDoCB0w6xuaCBj4bqjbSBjaOG7pyBxdWFuIGPhu6dhIGNvbiBuZ8aw4budaSwgdsOgICg0KSBoaeG7h3UgcXXhuqMgY+G7p2EgaOG7hyBwaMawxqFuZyBwaMOhcCB44bq/cCBo4bqhbmcgdMOtbiBk4bulbmcgY8OzIHRo4buDIGThu4UgZMOgbmcga2nhu4NtIHRyYSwgxJFp4buBdSBjaOG7iW5oIOG7nyBi4bqldCBrw6wgdGjhu51pIMSRaeG7g20gbsOgbyBuaOG6sW0gxJFp4buBdSBjaOG7iW5oIGvhu4twIHRo4budaSB24bubaSBuaOG7r25nIHRoYXkgxJHhu5VpIHbhu4EgY2jDrW5oIHPDoWNoIGhv4bq3YyDEkWnhu4F1IGtp4buHbiBj4bunYSBu4buBbiBraW5oIHThur8uCgoKxJDhu5FpIHbhu5tpIHbhuqVuIMSR4buBIHBow6JuIGxv4bqhaSB2w6AgeOG6v3AgaOG6oW5nIHTDrW4gZOG7pW5nLCBjw6FjaCB0aeG6v3AgY+G6rW4gdHJ1eeG7gW4gdGjhu5FuZyBsw6AgZOG7sWEgdsOgbyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHRodeG6p24gdMO6eSBuaMawIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIMSRYSBiaeG6v24gKE1leWVyICYgUGlmZXIsIDE5NzApLCBwaMOibiB0w61jaCBraMOhYyBiaeG7h3QgKEFsdG1hbiwgMTk2ODsgQmFuYXNpaywgQ3Jvb2ssICYgVGhvbWFzLCAyMDAzKSwgdsOgIGjhu5NpIHF1eSBMb2dpc3RpYyAoRGVzYWksIENyb29rLCAmIE92ZXJzdHJlZXQsIDE5OTY7IERpbWl0cmFzLCBaYW5ha2lzLCAmIFpvcG91bmlkaXMsIDE5OTY7IEVsbGlvdHQgJiBGaWxpbmtvdiwgMjAwODsgTGVlLCBDaGl1LCBMdSwgJiBDaGVuLCAyMDAyKS4gVHV5IG5oacOqbiBuaOG7r25nIHnDqnUgY+G6p3UgY+G7p2EgaOG7mWkgxJHhu5NuZyBCYXNlbCB24buBIGdpw6FtIHPDoXQgaG/huqF0IMSR4buZbmcgbmfDom4gaMOgbmcgKHRoZSBCYXNlbCBDb21taXR0ZWUgb24gQmFua2luZyBTdXBlcnZpc2lvbikgYmFuIGjDoG5oIG7Eg20gMjAwNCDEkcOyaSBo4buPaSBjw6FjIG5nw6JuIGjDoG5nIGPFqW5nIG5oxrAgY8OhYyB04buVIGNo4bupYyB0w6BpIGNow61uaCBwaOG6o2kgc+G7rSBk4bulbmcgbmjhu69uZyBtw7QgaMOsbmggcGjDom4gbG/huqFpIHTDrW4gZOG7pW5nIHRpbiBj4bqteSBoxqFuIG5o4bqxbSBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIGPhu6dhIHZp4buHYyBwaMOibiBi4buVIHbhu5FuLiBOaOG6sW0gxJHDoXAg4bupbmcgbmjhu69uZyDEkcOyaSBo4buPaSB0csOqbiwgdHJvbmcgbmjhu69uZyBuxINtIGfhuqduIMSRw6J5IMSRw6MgeHXhuqV0IGhp4buHbiBt4buZdCBz4buRIG3DtCBow6xuaCBwaMOibiBsb+G6oWkgdMOtbiBk4bulbmcgbeG7m2kgdGhlbyBjw6FjaCB0aeG6v3AgY+G6rW4gY+G7p2EgaOG7jWMgbcOheSAoTWFjaGluZSBMZWFybmluZykgdsOgIHRyw60gdGjDtG5nIG1pbmggbmjDom4gdOG6oW8gKEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlKS4gS2jDtG5nIGdp4buRbmcgbmjGsCBjw6FjIHRp4bq/cCBj4bqtbiB0csaw4bubYyDEkcOieSwgY8OhYyBwaMawxqFuZyBwaMOhcCBt4bubaSBuw6B5IGtow7RuZyDEkcawYSByYSBi4bqldCBrw6wgZ2nhuqMgdGhp4bq/dCBjaOG6t3QgY2jhur0gbsOgbyBuaMawIMSRw7JpIGjhu49pIGPhu6dhIGPDoWMgY8OhY2ggdGnhur9wIGPhuq1uIHRoZW8gcGjGsMahbmcgcGjDoXAgdGjhu5FuZyBrw6ouIFRoYXkgdsOgbyDEkcOzLCBjw6FjIHRp4bq/cCBj4bqtbiBt4bubaSBuw6B5IGPhu5EgZ+G6r25nIGtoYWkgdGjDoWMgdsOgIMSRxrBhIHJhIGPDoWMga2nhur9uIHRo4bupYywgY8OhYyB0aMO0bmcgdGluIMSR4bqndSByYSBjaOG7iSBk4buxYSB2w6BvIGPDoWMgdGjDtG5nIHRpbiDEkeG6p3UgdsOgbyBsw6AgY8OhYyBxdWFuIHPDoXQsIGPDoWMgdGjDtG5nIHRpbiB0cm9uZyBxdcOhIGto4bupLiBW4bubaSBiw6BpIHRvw6FuIHBow6JuIGxv4bqhaSB0w61uIGThu6VuZywgbeG7mXQgc+G7kSBtw7QgaMOsbmggdGh14buZYyBo4buNYyBtw6F5IG5oxrAgbeG6oW5nIHRyw60gdHXhu4cgbmjDom4gdOG6oW8gQU5OIChBcnRpZmljaWFsIE5ldXJhbCBOZXR3b3JrKSwgTcOheSBI4buXIFRy4bujIFbDqWN0xqEgU1ZNIChTdXBwb3J0IFZlY3RvciBNYWNoaW5lcyksIEsgbMOhbmcgZ2nhu4FuZyBn4bqnbiBuaOG6pXQgS05OIChLLU5lYXJlc3QgTmVpZ2hib3JzKSwgcuG7q25nIG5n4bqrdSBuaGnDqm4gUkYgKFJhbmRvbSBGb3Jlc3QpLCBjw6J5IHF1eeG6v3QgxJHhu4tuaCBEVCAoRGVjaXNpb24gVHJlZSkgY2jhurNuZyBo4bqhbiDEkcOjIGNo4bupbmcgdOG7jyBuaGnhu4F1IMawdSB0aOG6vyB24buBIG3hu6ljIMSR4buZIGNow61uaCB4w6FjIGPFqW5nIG5oxrAgdGluIGPhuq15IHNvIHbhu5tpIG3hu5l0IHPhu5EgbcO0IGjDrG5oIHBow6JuIGxv4bqhaSB0cnV54buBbiB0aOG7kW5nIChDaGkgJiBIc3UsIDIwMTI7IEh1YW5nIGV0LmFsbCwgMjAwNDsgSHVhbmcsIENoZW4sICYgV2FuZywgMjAwNzsgSW5jZSAmIEFrdGFuLCAyMDA5OyBNYXJ0ZW5zIHbDoCBjdGcuLCAyMDEwKS4KCkThu7Egw6FuIG7DoHkgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiBuaOG6sW0gxJHDoW5oIGdpw6EgdsOgIHNvIHPDoW5oIGNo4bqldCBsxrDhu6NuZyBwaMOibiBsb+G6oWkgY+G7p2EgbcO0IGjDrG5oIExvZ2lzaXRpYyAtIG3hu5l0IGPDoWNoIHRp4bq/cCBj4bqtbiB0cnV54buBbiB0aOG7kW5nIGPhu6dhIHRo4buRbmcga8OqIHbhu5tpICBiYSBtw7QgaMOsbmggTWFjaGluZSBMZWFybmluZyBsw6AgUmFuZG9tIEZvcmVzdCwgR3JhZGllbnQgQm9vc3RpbmcgTWFjaGluZSB2w6AgQXJ0aWZpY2lhbCBOZXVyYWwgTmV0d29yayAodMOqbiDEkeG6p3kgxJHhu6cgbMOgIE11bHRpLWxheWVyIEZlZWRmb3J3YXJkIEFydGlmaWNpYWwgTmV1cmFsIE5ldHdvcmspIHRyw6puIGPhuqMgaGFpIG5ow7NtIGNo4buJIHRpw6p1IGNow61uaCBsw6A6ICgxKSBjw6FjIGNo4buJIHRpw6p1IHRo4buRbmcga8OqIHRodeG6p24gdMO6eSBuaMawIEFjY3VyYWN5LCB2w6AgKDIpIGjhu4cgcXXhuqMga2luaCB04bq/IC0gbOG7o2kgbmh14bqtbiB04burIHZp4buHYyBz4butIGThu6VuZyBtw7QgaMOsbmggxJHhu5FpIHbhu5tpIHThu5UgY2jhu6ljIHTDoGkgY2jDrW5oIC0gbmfDom4gaMOgbmcuIAoKROG7ryBsaeG7h3Ugc+G7rSBk4bulbmcgbMOgICoqaG1lcS5jc3YqKiBj4bunYSBjdeG7kW4gW0NSRURJVCBSSVNLIEFOQUxZVElDUyBNRUFTVVJFTUVOVCBURUNITklRVUVTLCBBUFBMSUNBVElPTlMsIGFuZCBFWEFNUExFUyBpbiBTQVMgYW5kIFJdKGh0dHA6Ly93d3cuY3JlZGl0cmlza2FuYWx5dGljcy5uZXQvZGF0YXNldHMtcHJpdmF0ZS5odG1sKS4gCgoKIyMgU2VjdGlvbiAxIHsudGFic2V0fQoKR2l2ZSBhbiBpbnRyb2R1Y3Rpb24gdG8gc2VjdGlvbiAxQS4uLgoKCiMjIyBTdWIgU2VjdGlvbiAxCgpXcml0ZSBzb21ldGhpbmcgaW4gdGhpcyBzdWIgc2VjdGlvbi4uLiAKCmBgYHtyLCBlY2hvPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKdGhlbWVfc2V0KHRoZW1lX21pbmltYWwoKSkKaXJpcyAlPiUgCiAgZ2dwbG90KGFlcyhTZXBhbC5MZW5ndGgsIFNlcGFsLldpZHRoLCBjb2xvciA9IFNwZWNpZXMsIGZpbGwgPSBTcGVjaWVzKSkgKyAKICBnZW9tX3BvaW50KCkgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iKQoKYGBgCgojIyMgU3ViIFNlY3Rpb24gMgoKV3JpdGUgc29tZXRoaW5nIGluIHRoaXMgc3ViIHNlY3Rpb24uLi4KCmBgYHtyfQpzdW1tYXJ5KGlyaXMpCmBgYAoKCiMjIFNlY3Rpb24gMiB7LnRhYnNldH0KCkdpdmUgYW4gaW50cm9kdWN0aW9uIHRvIHNlY3Rpb24gMi4uLgoKIyMjIFN1YiBTZWN0aW9uIDEKCldyaXRlIHNvbWV0aGluZyBpbiB0aGlzIHN1YiBzZWN0aW9uLi4uIAoKYGBge3J9CmlyaXMgJT4lIAogIGdyb3VwX2J5KFNwZWNpZXMpICU+JSAKICBjb3VudCgpICU+JSAKICBnZ3Bsb3QoYWVzKFNwZWNpZXMsIG4sIGZpbGwgPSBTcGVjaWVzKSkgKyAKICBnZW9tX2NvbCgpCmBgYAoKIyMjIFN1YiBTZWN0aW9uIDIKCldyaXRlIHNvbWV0aGluZyBpbiB0aGlzIHN1YiBzZWN0aW9uLi4uCgojIyMgU3ViIFNlY3Rpb24gMwoKV3JpdGUgc29tZXRoaW5nIGluIHRoaXMgc3ViIHNlY3Rpb24uLi4KCgoKCgoK