IyB0aGUgdmVyc2lvbiBpbiB0aGUgdGFyIG5hbWUKJWRlZmluZSByZWFsX3ZlcnNpb24gMy40LjAKIyB0aGUgZGlzcGxheSB2ZXJzaW9uIG51bWJlcgolZGVmaW5lIHZlcnNpb24gJXtyZWFsX3ZlcnNpb259CgolZGVmaW5lIF91bnBhY2thZ2VkX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAgICAgICAwCiVkZWZpbmUgX21pc3NpbmdfZG9jX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAgICAgIDAKJWRlZmluZSBwZXJsX3NpdGVsaWIgJShldmFsICJgJXtfX3Blcmx9IC1WOmluc3RhbGxzaXRlbGliYCI7IGVjaG8gIiRpbnN0YWxsc2l0ZWxpYiIpCgolZGVmaW5lIHBkaXIgICAgTWFpbAolZGVmaW5lIHBuYW0gICAgU3BhbUFzc2Fzc2luCiVkZWZpbmUgZGVidWdfcGFja2FnZSAle25pbH0KClN1bW1hcnk6ICAgICAgICBhIHNwYW0gZmlsdGVyIGZvciBlbWFpbCB3aGljaCBjYW4gYmUgaW52b2tlZCBmcm9tIG1haWwgZGVsaXZlcnkgYWdlbnRzClN1bW1hcnkocGwpOiAgICBGaWx0ciBhbnR5c3BhbW93eSwgcHJ6ZXpuYWN6b255IGRsYSBwcm9ncmFt83cgZG9zdGFyY3pharFjeWNoIHBvY3p06iAoTURBKQpHcm91cDogICAgICAgICAgQXBwbGljYXRpb25zL01haWwKCiMgUmVsZWFzZSBudW1iZXIgY2FuIGJlIHNwZWNpZmllZCB3aXRoIHJwbWJ1aWxkIC0tZGVmaW5lICdyZWxlYXNlIFNPTUVUSElORycgLi4uCiMgSWYgbm8gc3VjaCAtLWRlZmluZSBpcyB1c2VkLCB0aGUgcmVsZWFzZSBudW1iZXIgaXMgMS4KIwojIFNvdXJjZSBhcmNoaXZlJ3MgZXh0ZW5zaW9uIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWRlZmluZSAnc3JjZXh0IC5mb28nCiMgd2hlcmUgLmZvbyBpcyB0aGUgc291cmNlIGFyY2hpdmUncyBhY3R1YWwgZXh0ZW5zaW9uLgojIFRvIGNvbXBpbGUgYW4gUlBNIGZyb20gYSAuYnoyIHNvdXJjZSBhcmNoaXZlLCBnaXZlIHRoZSBjb21tYW5kCiMgICBycG1idWlsZCAtdGIgLS1kZWZpbmUgJ3NyY2V4dCAuYnoyJyBAUEFDS0FHRUAtQFZFUlNJT05ALnRhci5iejIKIwolaWYgJXs/cmVsZWFzZTowfSV7IT9yZWxlYXNlOjF9CiVkZWZpbmUgcmVsZWFzZSAxCiVlbmRpZgolaWYgJXs/c3JjZXh0OjB9JXshP3NyY2V4dDoxfQolZGVmaW5lIHNyY2V4dCAuZ3oKJWVuZGlmCgoKJWRlZmluZSBuYW1lICAgIHNwYW1hc3Nhc3NpbgolZGVmaW5lIGluaXRkaXIgJXtfaW5pdHJkZGlyfQoKTmFtZTogJXtuYW1lfQpWZXJzaW9uOiAle3ZlcnNpb259ClJlbGVhc2U6ICV7cmVsZWFzZX0KTGljZW5zZTogQXBhY2hlIExpY2Vuc2UgMi4wClVSTDogaHR0cDovL3NwYW1hc3Nhc3Npbi5hcGFjaGUub3JnLwpTb3VyY2U6IGh0dHA6Ly9zcGFtYXNzYXNzaW4uYXBhY2hlLm9yZy9yZWxlYXNlZC9NYWlsLVNwYW1Bc3Nhc3Npbi0le3JlYWxfdmVyc2lvbn0udGFyJXtzcmNleHR9CkJ1aWxkcm9vdDogJXtfdG1wcGF0aH0vJXtuYW1lfS1yb290ClByZWZpeDogJXtfcHJlZml4fQpQcmVyZXE6IC9zYmluL2Noa2NvbmZpZwpSZXF1aXJlczogcGVybC1NYWlsLVNwYW1Bc3Nhc3NpbiA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQpEaXN0cmlidXRpb246IFNwYW1Bc3Nhc3NpbgpSZXF1aXJlczogcGVybChQb2Q6OlVzYWdlKQpCdWlsZFJlcXVpcmVzOiBwZXJsID49IDUuNi4xIHBlcmwoRGlnZXN0OjpTSEExKQoKJWRlZmluZSBfX2ZpbmRfcHJvdmlkZXMgL3Vzci9saWIvcnBtL2ZpbmQtcHJvdmlkZXMucGVybAolZGVmaW5lIF9fZmluZF9yZXF1aXJlcyAvdXNyL2xpYi9ycG0vZmluZC1yZXF1aXJlcy5wZXJsCgolZGVzY3JpcHRpb24KU3BhbUFzc2Fzc2luIHByb3ZpZGVzIHlvdSB3aXRoIGEgd2F5IHRvIHJlZHVjZSwgaWYgbm90IGNvbXBsZXRlbHkgZWxpbWluYXRlLApVbnNvbGljaXRlZCBCdWxrIEVtYWlsIChvciAic3BhbSIpIGZyb20geW91ciBpbmNvbWluZyBlbWFpbC4gIEl0IGNhbiBiZQppbnZva2VkIGJ5IGEgTURBIHN1Y2ggYXMgc2VuZG1haWwgb3IgcG9zdGZpeCwgb3IgY2FuIGJlIGNhbGxlZCBmcm9tIGEgcHJvY21haWwKc2NyaXB0LCAuZm9yd2FyZCBmaWxlLCBldGMuICBJdCB1c2VzIGEgcGVyY2VwdHJvbi1vcHRpbWl6ZWQgc2NvcmluZyBzeXN0ZW0KdG8gaWRlbnRpZnkgbWVzc2FnZXMgd2hpY2ggbG9vayBzcGFtbXksIHRoZW4gYWRkcyBoZWFkZXJzIHRvIHRoZSBtZXNzYWdlIHNvCnRoZXkgY2FuIGJlIGZpbHRlcmVkIGJ5IHRoZSB1c2VyJ3MgbWFpbCByZWFkaW5nIHNvZnR3YXJlLiAgVGhpcyBkaXN0cmlidXRpb24KaW5jbHVkZXMgdGhlIHNwYW1jL3NwYW1jIGNvbXBvbmVudHMgd2hpY2ggY29uc2lkZXJhYmx5IHNwZWVkcyBwcm9jZXNzaW5nIG9mCm1haWwuCgolcGFja2FnZSAtbiBwZXJsLU1haWwtU3BhbUFzc2Fzc2luClN1bW1hcnk6ICAgICAgICAle3BkaXJ9Ojole3BuYW19IC0tIFNwYW1Bc3Nhc3NpbiBlLW1haWwgZmlsdGVyIFBlcmwgbW9kdWxlcwpTdW1tYXJ5KHBsKTogICAgJXtwZGlyfTo6JXtwbmFtfSAtLSBtb2R1s3kgUGVybGEgZmlsdHJ1IHBvY3p0eSBTcGFtQXNzYXNzaW4KUmVxdWlyZXM6IHBlcmwgPj0gNS42LjEgcGVybChIVE1MOjpQYXJzZXIpIHBlcmwoRGlnZXN0OjpTSEExKSBwZXJsKE5ldDo6RE5TKQpCdWlsZFJlcXVpcmVzOiBwZXJsID49IDUuNi4xIHBlcmwoSFRNTDo6UGFyc2VyKSBwZXJsKERpZ2VzdDo6U0hBMSkgcGVybChOZXQ6OkROUykKR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L0xpYnJhcmllcwoKJWRlc2NyaXB0aW9uIC1uIHBlcmwtTWFpbC1TcGFtQXNzYXNzaW4KTWFpbDo6U3BhbUFzc2Fzc2luIGlzIGEgbW9kdWxlIHRvIGlkZW50aWZ5IHNwYW0gdXNpbmcgdGV4dCBhbmFseXNpcyBhbmQKc2V2ZXJhbCBpbnRlcm5ldC1iYXNlZCByZWFsdGltZSBibGFja2xpc3RzLiBVc2luZyBpdHMgcnVsZSBiYXNlLCBpdCB1c2VzIGEKd2lkZSByYW5nZSBvZiBoZXVyaXN0aWMgdGVzdHMgb24gbWFpbCBoZWFkZXJzIGFuZCBib2R5IHRleHQgdG8gaWRlbnRpZnkKYGBzcGFtJycsIGFsc28ga25vd24gYXMgdW5zb2xpY2l0ZWQgY29tbWVyY2lhbCBlbWFpbC4gT25jZSBpZGVudGlmaWVkLCB0aGUKbWFpbCBjYW4gdGhlbiBiZSBvcHRpb25hbGx5IHRhZ2dlZCBhcyBzcGFtIGZvciBsYXRlciBmaWx0ZXJpbmcgdXNpbmcgdGhlCnVzZXIncyBvd24gbWFpbCB1c2VyLWFnZW50IGFwcGxpY2F0aW9uLgoKJXByZXAKJXNldHVwIC1xIC1uICV7cGRpcn0tJXtwbmFtfS0le3JlYWxfdmVyc2lvbn0KCiVidWlsZApDRkxBR1M9IiRSUE1fT1BUX0ZMQUdTIjsgZXhwb3J0IENGTEFHUwole19fcGVybH0gTWFrZWZpbGUuUEwgUFJFRklYPSV7X3ByZWZpeH0gTElCPSV7cGVybF9zaXRlbGlifSBTWVNDT05GRElSPSV7X3N5c2NvbmZkaXJ9IERFU1RESVI9JFJQTV9CVUlMRF9ST09UIDwgL2Rldi9udWxsCiV7X19tYWtlfQojJXtfX21ha2V9IHNwYW1jL2xpYnNwYW1jLnNvCgolaW5zdGFsbApbICIkUlBNX0JVSUxEX1JPT1QiICE9ICIvIiBdICYmIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKIyBTcGVjaWZ5IHRoZSBtYW4gZGlyIGxvY2F0aW9ucyBzaW5jZSBQZXJsIHNvbWV0aW1lcyBnZXRzIGl0IHdyb25nLi4uIDooCiVtYWtlaW5zdGFsbCBcCglJTlNUQUxMTUFOMURJUj0le19tYW5kaXJ9L21hbjEgXAoJSU5TVEFMTE1BTjNESVI9JXtfbWFuZGlyfS9tYW4zIFwKCUlOU1RBTExTSVRFTUFOMURJUj0le19tYW5kaXJ9L21hbjEgXAoJSU5TVEFMTFNJVEVNQU4zRElSPSV7X21hbmRpcn0vbWFuMyBcCglJTlNUQUxMVkVORE9STUFOMURJUj0le19tYW5kaXJ9L21hbjEgXAoJSU5TVEFMTFZFTkRPUk1BTjNESVI9JXtfbWFuZGlyfS9tYW4zCgppbnN0YWxsIC1kICVidWlsZHJvb3QvJXtpbml0ZGlyfQppbnN0YWxsIC1kICVidWlsZHJvb3QvJXtfbGliZGlyfQppbnN0YWxsIC1kICVidWlsZHJvb3QvJXtfaW5jbHVkZWRpcn0KaW5zdGFsbCAtbSAwNzU1IHNwYW1kL3JlZGhhdC1yYy1zY3JpcHQuc2ggJWJ1aWxkcm9vdC8le2luaXRkaXJ9L3NwYW1hc3Nhc3NpbgojaW5zdGFsbCAtbSAwNjQ0IHNwYW1jL2xpYnNwYW1jLnNvICVidWlsZHJvb3QvJXtfbGliZGlyfS9saWJzcGFtYy5zbwojaW5zdGFsbCAtbSAwNjQ0IHNwYW1jL2xpYnNwYW1jLmggJWJ1aWxkcm9vdC8le19pbmNsdWRlZGlyfS9saWJzcGFtYy5oCgojIERvIHRoaXMgc28gdGhhdCB0aGUgc3BhbWQgUkVBRE1FIGZpbGUgaGFzIGEgZGlmZmVyZW50IG5hbWUgLi4uCiV7X19tdn0gc3BhbWQvUkVBRE1FIHNwYW1kL1JFQURNRS5zcGFtZAoKbWtkaXIgLXAgJXtidWlsZHJvb3R9L2V0Yy9tYWlsL3NwYW1hc3Nhc3NpbgoKWyAteCAvdXNyL2xpYi9ycG0vYnJwLWNvbXByZXNzIF0gJiYgL3Vzci9saWIvcnBtL2JycC1jb21wcmVzcwoKJWZpbGVzIAolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyBSRUFETUUgQ2hhbmdlcyBzYW1wbGUtbm9uc3BhbS50eHQgc2FtcGxlLXNwYW0udHh0IHNwYW1kL1JFQURNRS5zcGFtZCBJTlNUQUxMIEJVR1MgTElDRU5TRSBUUkFERU1BUksgVVNBR0Ugc3FsIFVQR1JBREUKJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfYmluZGlyfS8qCiMlYXR0cig2NDQscm9vdCxyb290KSAle19pbmNsdWRlZGlyfS8qCiMlYXR0cig2NDQscm9vdCxyb290KSAle19saWJkaXJ9Lyouc28KJWNvbmZpZyhub3JlcGxhY2UpICVhdHRyKDc1NSxyb290LHJvb3QpICV7aW5pdGRpcn0vc3BhbWFzc2Fzc2luCiV7X21hbmRpcn0vbWFuMS8qCgolZmlsZXMgLW4gcGVybC1NYWlsLVNwYW1Bc3Nhc3NpbgolZGVmYXR0cig2NDQscm9vdCxyb290LDc1NSkKJXtwZXJsX3NpdGVsaWJ9LyoKJWNvbmZpZyhub3JlcGxhY2UpICV7X3N5c2NvbmZkaXJ9L21haWwvc3BhbWFzc2Fzc2luCiV7X2RhdGFkaXJ9L3NwYW1hc3Nhc3Npbgole19tYW5kaXJ9L21hbjMvKgoKJWNsZWFuClsgIiRSUE1fQlVJTERfUk9PVCIgIT0gIi8iIF0gJiYgcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKJXBvc3QKL3NiaW4vY2hrY29uZmlnIC0tYWRkIHNwYW1hc3Nhc3NpbgoKIyBvbGRlciB2ZXJzaW9ucyB1c2VkIC9ldGMvc3lzY29uZmlnL3NwYW1kIHdoZXJlYXMgaXQgc2hvdWxkIGhhdmUgYmVlbgojIHNwYW1hc3Nhc3Npbiwgc28gZml4IGl0IGhlcmUKaWYgWyAtZiAvZXRjL3N5c2NvbmZpZy9zcGFtZCBdOyB0aGVuCiAgJXtfX3NlZH0gLWUgJ3MvXk9QVElPTlM9L1NQQU1ET1BUSU9OUz0vJyAvZXRjL3N5c2NvbmZpZy9zcGFtZCA+IC9ldGMvc3lzY29uZmlnL3NwYW1hc3Nhc3NpbgogICV7X19tdn0gL2V0Yy9zeXNjb25maWcvc3BhbWQgL2V0Yy9zeXNjb25maWcvc3BhbWFzc2Fzc2luLnJwbW9sZApmaQojIElmIHNwYW1kIGlzIHJ1bm5pbmcsIGxldCdzIGJlIHN1cmUgdG8gY2hhbmdlIHRoZSBsb2NrIGZpbGUgYXMgd2VsbCAuLi4KaWYgWyAtZiAvdmFyL2xvY2svc3Vic3lzL3NwYW1kIF07IHRoZW4KICAle19fbXZ9IC92YXIvbG9jay9zdWJzeXMvc3BhbWQgL3Zhci9sb2NrL3N1YnN5cy9zcGFtYXNzYXNzaW4KZmkKL3NiaW4vc2VydmljZSBzcGFtYXNzYXNzaW4gY29uZHJlc3RhcnQKCiVwcmV1bgppZiBbICQxID0gMCBdOyB0aGVuCiAgICAvc2Jpbi9zZXJ2aWNlIHNwYW1hc3Nhc3NpbiBzdG9wID4vZGV2L251bGwgMj4mMQogICAgL3NiaW4vY2hrY29uZmlnIC0tZGVsIHNwYW1hc3Nhc3NpbgpmaQoKJXBvc3R1bgppZiBbICIkMSIgLWdlICIxIiBdOyB0aGVuCiAgICAvc2Jpbi9zZXJ2aWNlIHNwYW1hc3Nhc3NpbiBjb25kcmVzdGFydCA+IC9kZXYvbnVsbCAyPiYxCmZpCg==